1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
/**********************************************************************
Audacity: A Digital Audio Editor
FifoBuffer.h
Dmitry Vedenko
**********************************************************************/
#pragma once
#include <cstdint>
#include <deque>
#include <queue>
class FFMPEG_SUPPORT_API FifoBuffer final
{
public:
explicit FifoBuffer(int pageSize);
int64_t Write(const void* data, int64_t size);
int64_t Read(void* data, int64_t size);
int64_t GetAvailable() const;
private:
struct Page final
{
explicit Page(int size);
void Reset();
std::vector<char> Data;
int WritePosition {};
int ReadPosition {};
};
std::deque<Page> mAllocatedPages;
std::queue<Page*> mActivePages;
std::deque<Page*> mFreePages;
int64_t mAvaliable {};
const int mPageSize {};
};
|