1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-24 08:10:05 +02:00
audacity/src/RingBuffer.h
Panagiotis Vasilopoulos 44968d3ac3
Rebranding: Replace 'Audacity: A Digital Audio Editor' in source files (#248)
List of commands that were executed in the `src directory`:
* sed -i 's/Audacity: A Digital Audio Editor/Tenacity/g' *.h
* sed -i 's/Audacity: A Digital Audio Editor/Tenacity/g' *.cpp

Signed-off-by: Panagiotis Vasilopoulos <hello@alwayslivid.com>
2021-07-13 09:30:42 +00:00

56 lines
1.3 KiB
C++

/**********************************************************************
Tenacity
RingBuffer.h
Dominic Mazzoni
*******************************************************************/
#ifndef __AUDACITY_RING_BUFFER__
#define __AUDACITY_RING_BUFFER__
#include "SampleFormat.h"
#include <atomic>
class RingBuffer final : public NonInterferingBase {
public:
RingBuffer(sampleFormat format, size_t size);
~RingBuffer();
//
// For the writer only:
//
size_t AvailForPut();
//! Does not apply dithering
size_t Put(samplePtr buffer, sampleFormat format, size_t samples,
// optional number of trailing zeroes
size_t padding = 0);
size_t Clear(sampleFormat format, size_t samples);
//
// For the reader only:
//
size_t AvailForGet();
//! Does not apply dithering
size_t Get(samplePtr buffer, sampleFormat format, size_t samples);
size_t Discard(size_t samples);
private:
size_t Filled( size_t start, size_t end );
size_t Free( size_t start, size_t end );
// Align the two atomics to avoid false sharing
NonInterfering< std::atomic<size_t> > mStart { 0 }, mEnd{ 0 };
const size_t mBufferSize;
sampleFormat mFormat;
SampleBuffer mBuffer;
};
#endif /* __AUDACITY_RING_BUFFER__ */