SL100_FactoryTestTool/FactoryTestTool/SourceCode/Media/VideoDecoder/RingBuffer.h

35 lines
696 B
C++

// RingBuffer.h
#ifndef RINGBUFFER_H
#define RINGBUFFER_H
#include <cstddef>
#include <cstdint>
#include <mutex>
#include <condition_variable>
#include <vector>
#include <algorithm>
#include <cstring>
class RingBuffer
{
public:
explicit RingBuffer(size_t size);
bool push(const uint8_t* data, size_t size);
bool pop(uint8_t* outBuffer, size_t& size);
bool empty() const;
bool full() const;
private:
std::vector<uint8_t> buffer;
size_t head;
size_t tail;
size_t capacity;
mutable std::mutex mtx;
std::condition_variable notEmpty;
std::condition_variable notFull;
bool isFull;
};
#endif // RINGBUFFER_H