1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

SingleThreadedAbstractFifo: Move into juce_core

This commit is contained in:
reuk 2021-08-12 18:26:04 +01:00
parent 7504fa065b
commit b0bd1c4f63
No known key found for this signature in database
GPG key ID: 9ADCD339CFC98A11
4 changed files with 140 additions and 58 deletions

View file

@ -858,45 +858,6 @@ private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WASAPIDeviceBase)
};
class SimpleAbstractQueue
{
public:
SimpleAbstractQueue() = default;
explicit SimpleAbstractQueue (int sizeIn)
: size (nextPowerOfTwo (sizeIn)) {}
int getRemainingSpace() const { return size - numReadable; }
int getNumReadable() const { return numReadable; }
int getSize() const { return size; }
std::array<Range<int>, 2> write (int num)
{
const auto startPos = (readPos + numReadable) & (size - 1);
const auto maxToWrite = jmin (getRemainingSpace(), num);
const auto firstBlockSize = jmin (maxToWrite, size - startPos);
numReadable += maxToWrite;
return { { { startPos, startPos + firstBlockSize }, { 0, maxToWrite - firstBlockSize } } };
}
std::array<Range<int>, 2> read (int num)
{
const auto startPos = readPos;
const auto maxToRead = jmin (numReadable, num);
const auto firstBlockSize = jmin (maxToRead, size - startPos);
readPos = (startPos + maxToRead) & (size - 1);
numReadable -= maxToRead;
return { { { startPos, startPos + firstBlockSize }, { 0, maxToRead - firstBlockSize } } };
}
private:
int size = 0, readPos = 0, numReadable = 0;
};
//==============================================================================
class WASAPIInputDevice : public WASAPIDeviceBase
{
@ -923,7 +884,7 @@ public:
closeClient();
captureClient = nullptr;
reservoir.reset();
queue = SimpleAbstractQueue();
queue = SingleThreadedAbstractFifo();
}
template <class SourceType>
@ -945,7 +906,7 @@ public:
{
const auto reservoirSize = nextPowerOfTwo ((int) (actualBufferSize + (UINT32) userBufferSizeIn));
queue = SimpleAbstractQueue (reservoirSize);
queue = SingleThreadedAbstractFifo (reservoirSize);
reservoir.setSize ((size_t) (queue.getSize() * bytesPerFrame), true);
xruns = 0;
@ -1036,7 +997,7 @@ public:
ComSmartPtr<IAudioCaptureClient> captureClient;
MemoryBlock reservoir;
SimpleAbstractQueue queue;
SingleThreadedAbstractFifo queue;
int xruns = 0;
std::unique_ptr<AudioData::Converter> converter;