diff --git a/src/Experimental.h b/src/Experimental.h index 225d2aa72..be391b59a 100644 --- a/src/Experimental.h +++ b/src/Experimental.h @@ -245,12 +245,6 @@ // Easy change of keystroke bindings for menu items #define EXPERIMENTAL_EASY_CHANGE_KEY_BINDINGS -// PRL 17 Mar 2018 -// Hoping to commit to use of this branch before 2.3.0 is out. -// Don't use our own RingBuffer class, but reuse PortAudio's which includes -// proper memory fences. -#define EXPERIMENTAL_REWRITE_RING_BUFFER - // PRL 1 Jun 2018 #define EXPERIMENTAL_PUNCH_AND_ROLL diff --git a/src/RingBuffer.cpp b/src/RingBuffer.cpp index b9272be5a..de3eb08a5 100644 --- a/src/RingBuffer.cpp +++ b/src/RingBuffer.cpp @@ -23,45 +23,12 @@ #include "RingBuffer.h" -#include "Experimental.h" - -#undef REWRITE_RING_BUFFER - -// For now enabling the rewrite only for Mac - -#ifdef EXPERIMENTAL_REWRITE_RING_BUFFER -#define REWRITE_RING_BUFFER -#elif defined (__APPLE__) -#define REWRITE_RING_BUFFER -#endif - -namespace { - size_t roundUp(size_t n) - { -#ifdef REWRITE_RING_BUFFER - // PaUtilRingBuffer requires a power of 2 - if (n == 0) - return 1; - - size_t prev = n; - for (size_t temp = n; temp != 0; prev = temp, temp = ((temp - 1) & temp)) - ; - return prev == n ? prev : prev << 1; -#else - return n; -#endif - } -} RingBuffer::RingBuffer(sampleFormat format, size_t size) : mFormat{ format } - , mBufferSize{ roundUp( std::max(size, 64) ) } + , mBufferSize{ std::max(size, 64) } , mBuffer{ mBufferSize, mFormat } { -#ifdef REWRITE_RING_BUFFER - PaUtil_InitializeRingBuffer( - &mRingBuffer, SAMPLE_SIZE(format), mBufferSize, mBuffer.ptr() ); -#endif } RingBuffer::~RingBuffer() @@ -70,11 +37,7 @@ RingBuffer::~RingBuffer() size_t RingBuffer::Len() { -#ifdef REWRITE_RING_BUFFER return (mEnd + mBufferSize - mStart) % mBufferSize; -#else - assert(false); -#endif } // @@ -83,19 +46,12 @@ size_t RingBuffer::Len() size_t RingBuffer::AvailForPut() { -#ifdef REWRITE_RING_BUFFER - return PaUtil_GetRingBufferWriteAvailable(&mRingBuffer); -#else return std::max(mBufferSize - Len(), 4) - 4; -#endif } size_t RingBuffer::Put(samplePtr buffer, sampleFormat format, size_t samplesToCopy) { -#ifdef REWRITE_RING_BUFFER - return PaUtil_WriteRingBuffer(&mRingBuffer, buffer, samplesToCopy); -#else samplesToCopy = std::min( samplesToCopy, AvailForPut() ); auto src = buffer; size_t copied = 0; @@ -117,11 +73,8 @@ size_t RingBuffer::Put(samplePtr buffer, sampleFormat format, mEnd = pos; return copied; -#endif } -#if 0 -// not used size_t RingBuffer::Clear(sampleFormat format, size_t samplesToClear) { samplesToClear = std::min( samplesToClear, AvailForPut() ); @@ -142,7 +95,6 @@ size_t RingBuffer::Clear(sampleFormat format, size_t samplesToClear) return cleared; } -#endif // // For the reader only: @@ -150,19 +102,12 @@ size_t RingBuffer::Clear(sampleFormat format, size_t samplesToClear) size_t RingBuffer::AvailForGet() { -#ifdef REWRITE_RING_BUFFER - return PaUtil_GetRingBufferReadAvailable(&mRingBuffer); -#else return Len(); -#endif } size_t RingBuffer::Get(samplePtr buffer, sampleFormat format, size_t samplesToCopy) { -#ifdef REWRITE_RING_BUFFER - return PaUtil_ReadRingBuffer(&mRingBuffer, buffer, samplesToCopy); -#else samplesToCopy = std::min( samplesToCopy, Len() ); auto dest = buffer; size_t copied = 0; @@ -181,17 +126,13 @@ size_t RingBuffer::Get(samplePtr buffer, sampleFormat format, } return copied; -#endif } size_t RingBuffer::Discard(size_t samplesToDiscard) { -#ifdef REWRITE_RING_BUFFER - PaUtil_AdvanceRingBufferReadIndex(&mRingBuffer, samplesToDiscard); -#else samplesToDiscard = std::min( samplesToDiscard, Len() ); mStart = (mStart + samplesToDiscard) % mBufferSize; -#endif + return samplesToDiscard; } diff --git a/src/RingBuffer.h b/src/RingBuffer.h index 4d72fde00..6fc19bd42 100644 --- a/src/RingBuffer.h +++ b/src/RingBuffer.h @@ -13,8 +13,6 @@ #include "SampleFormat.h" -#include "../lib-src/portaudio-v19/src/common/pa_ringbuffer.h" - class RingBuffer { public: RingBuffer(sampleFormat format, size_t size); @@ -26,7 +24,7 @@ class RingBuffer { size_t AvailForPut(); size_t Put(samplePtr buffer, sampleFormat format, size_t samples); -// size_t Clear(sampleFormat format, size_t samples); + size_t Clear(sampleFormat format, size_t samples); // // For the reader only: @@ -44,8 +42,6 @@ class RingBuffer { size_t mEnd { 0 }; size_t mBufferSize; SampleBuffer mBuffer; - - PaUtilRingBuffer mRingBuffer; }; #endif /* __AUDACITY_RING_BUFFER__ */