[webaudio] Fix up ReverbInputBuffer's writeIndex.
parent
bc484c4583
commit
c3a1f44ba1
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue