17 #ifndef BLOCKBUFFER_H_ 18 #define BLOCKBUFFER_H_ 22 #pragma GCC diagnostic push 23 #pragma GCC diagnostic ignored "-Wignored-attributes" 24 #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 25 #include <Eigen/Dense> 26 #pragma GCC diagnostic pop 28 #define BLOCK_BUFFER_DEFAULT_COUNT 3 35 std::vector<Eigen::Array<unsigned short, Eigen::Dynamic, Eigen::Dynamic> >
buffers;
36 std::queue<Eigen::Array<unsigned short, Eigen::Dynamic, Eigen::Dynamic> *>
emptyBuffers;
37 std::queue<Eigen::Array<unsigned short, Eigen::Dynamic, Eigen::Dynamic> *>
fullBuffers;
43 buffers.resize(count);
44 for (
int c=0; c<count; c++)
45 emptyBuffers.push(&buffers[c]);
64 Eigen::Array<unsigned short, Eigen::Dynamic, Eigen::Dynamic> *
getEmptyBuffer(
void){
65 Eigen::Array<unsigned short, Eigen::Dynamic, Eigen::Dynamic> *retBuf=NULL;
66 emptyBufferMutex.
lock();
67 if (emptyBuffers.size()){
68 retBuf=emptyBuffers.front();
79 Eigen::Array<unsigned short, Eigen::Dynamic, Eigen::Dynamic> *
getFullBuffer(
void){
80 Eigen::Array<unsigned short, Eigen::Dynamic, Eigen::Dynamic> *retBuf=NULL;
81 fullBufferMutex.
lock();
82 if (fullBuffers.size()){
83 retBuf=fullBuffers.front();
93 void putFullBuffer(Eigen::Array<unsigned short, Eigen::Dynamic, Eigen::Dynamic> *fb){
94 fullBufferMutex.
lock();
102 void putEmptyBuffer(Eigen::Array<unsigned short, Eigen::Dynamic, Eigen::Dynamic> *eb){
103 emptyBufferMutex.
lock();
104 emptyBuffers.push(eb);
105 emptyBufferMutex.
unLock();
112 return buffers.size();
120 emptyBufferMutex.
lock();
121 fullBufferMutex.
lock();
122 for (
int i=0; i<buffers.size(); i++)
123 buffers[i].
resize(rows, cols);
124 emptyBufferMutex.
unLock();
134 buffers.resize(count);
137 Eigen::Array<unsigned short, Eigen::Dynamic, Eigen::Dynamic> *b=
getFullBuffer();
150 emptyBufferMutex.
lock();
151 fullBufferMutex.
lock();
153 emptyBufferMutex.
unLock();
170 #endif // BLOCKBUFFER_H_ void putFullBuffer(Eigen::Array< unsigned short, Eigen::Dynamic, Eigen::Dynamic > *fb)
Mutex emptyBufferMutex
Used for.
std::queue< Eigen::Array< unsigned short, Eigen::Dynamic, Eigen::Dynamic > * > fullBuffers
The full buffer queue.
std::queue< Eigen::Array< unsigned short, Eigen::Dynamic, Eigen::Dynamic > * > emptyBuffers
The empty buffer queue.
std::vector< Eigen::Array< unsigned short, Eigen::Dynamic, Eigen::Dynamic > > buffers
The vector of buffers.
void resizeBuffers(int rows, int cols)
BlockBuffer(void)
Constructor - creates BLOCK_BUFFER_DEFAULT_COUNT buffers.
Mutex fullBufferMutex
Used for.
#define BLOCK_BUFFER_DEFAULT_COUNT
void putEmptyBuffer(Eigen::Array< unsigned short, Eigen::Dynamic, Eigen::Dynamic > *eb)
Eigen::Array< unsigned short, Eigen::Dynamic, Eigen::Dynamic > * getEmptyBuffer(void)
Eigen::Array< unsigned short, Eigen::Dynamic, Eigen::Dynamic > * getFullBuffer(void)