[webaudio] Fix up ReverbInputBuffer's writeIndex.

master
Fedor 2021-02-07 17:33:34 +02:00
parent bc484c4583
commit c3a1f44ba1
2 changed files with 13 additions and 11 deletions

View File

@ -42,19 +42,20 @@ ReverbInputBuffer::ReverbInputBuffer(size_t length)
void ReverbInputBuffer::write(const float* sourceP, size_t numberOfFrames) void ReverbInputBuffer::write(const float* sourceP, size_t numberOfFrames)
{ {
size_t bufferLength = m_buffer.Length(); // m_writeIndex is atomic and checked by other threads, so only touch
bool isCopySafe = m_writeIndex + numberOfFrames <= bufferLength; // it at the start and end.
MOZ_ASSERT(isCopySafe); size_t index = m_writeIndex;
if (!isCopySafe)
return;
memcpy(m_buffer.Elements() + m_writeIndex, sourceP, sizeof(float) * numberOfFrames); size_t bufferLength = m_buffer.Length();
size_t newIndex = index + numberOfFrames;
m_writeIndex += numberOfFrames; MOZ_RELEASE_ASSERT(newIndex <= bufferLength);
MOZ_ASSERT(m_writeIndex <= bufferLength);
if (m_writeIndex >= bufferLength) memcpy(m_buffer.Elements() + index, sourceP, sizeof(float) * numberOfFrames);
m_writeIndex = 0;
if (newIndex >= bufferLength) {
m_writeIndex = 0;
}
} }
float* ReverbInputBuffer::directReadFrom(int* readIndex, size_t numberOfFrames) float* ReverbInputBuffer::directReadFrom(int* readIndex, size_t numberOfFrames)

View File

@ -30,6 +30,7 @@
#define ReverbInputBuffer_h #define ReverbInputBuffer_h
#include "nsTArray.h" #include "nsTArray.h"
#include "mozilla/Atomics.h"
#include "mozilla/MemoryReporting.h" #include "mozilla/MemoryReporting.h"
namespace WebCore { namespace WebCore {
@ -63,7 +64,7 @@ public:
private: private:
nsTArray<float> m_buffer; nsTArray<float> m_buffer;
size_t m_writeIndex; mozilla::Atomic<size_t, mozilla::ReleaseAcquire> m_writeIndex;
}; };
} // namespace WebCore } // namespace WebCore