[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)
{
size_t bufferLength = m_buffer.Length();
bool isCopySafe = m_writeIndex + numberOfFrames <= bufferLength;
MOZ_ASSERT(isCopySafe);
if (!isCopySafe)
return;
// m_writeIndex is atomic and checked by other threads, so only touch
// it at the start and end.
size_t index = m_writeIndex;
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_ASSERT(m_writeIndex <= bufferLength);
MOZ_RELEASE_ASSERT(newIndex <= bufferLength);
if (m_writeIndex >= bufferLength)
m_writeIndex = 0;
memcpy(m_buffer.Elements() + index, sourceP, sizeof(float) * numberOfFrames);
if (newIndex >= bufferLength) {
m_writeIndex = 0;
}
}
float* ReverbInputBuffer::directReadFrom(int* readIndex, size_t numberOfFrames)

View File

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