lsnes/include/video/avi/samplequeue.hpp
2012-02-12 20:23:36 +02:00

63 lines
1.2 KiB
C++

#ifndef _avi__samplequeue__hpp__included__
#define _avi__samplequeue__hpp__included__
#include <deque>
#include <cstdint>
#include <vector>
#include <cstdlib>
#include "library/workthread.hpp"
/**
* Sample queue.
*/
class sample_queue
{
public:
/**
* Construct new sample queue.
*/
sample_queue();
/**
* Push samples into queue.
*
* Parameter samples: The samples to push
* Parameter count: The number of samples (assumed mono) to push.
* Note: This is thread safe.
*/
void push(const int16_t* samples, size_t count);
/**
* Pull samples from queue.
*
* Parameter samples: The pulled samples are stored here.
* Parameter count: The number of samples (assumed mono) to pull.
* Note: This is thread safe.
* Note: Trying to pull nonexistent samples causes zeros to be pulled.
*/
void pull(int16_t* samples, size_t count);
/**
* Get number of available samples.
*
* Returns: Number of available samples.
* Note: This is thread safe.
*/
size_t available();
private:
std::vector<int16_t> data;
bool blank;
size_t rptr;
size_t wptr;
size_t size;
mutex_class lock;
};
struct frame_object
{
uint32_t* data;
uint32_t width;
uint32_t height;
uint32_t fps_n;
uint32_t fps_d;
bool force_break;
};
#endif