[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)
|
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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue