00001
00002
00003
00004
00005
00006
00007 #ifndef __recycler_h
00008 #define __recycler_h
00009
00010 #include <QMutex>
00011 #include <QWaitCondition>
00012 #include "qmmp.h"
00013
00014 class Buffer;
00015
00019 class Recycler
00020 {
00021 public:
00025 Recycler();
00029 ~Recycler();
00036 void configure(quint32 freq, int chan, Qmmp::AudioFormat format);
00040 bool full() const;
00044 bool empty() const;
00048 int available() const;
00052 int used() const;
00056 Buffer *next();
00060 Buffer *get();
00064 void add();
00068 void done();
00072 void clear();
00076 unsigned long size() const;
00080 QMutex *mutex()
00081 {
00082 return &m_mtx;
00083 }
00087 QWaitCondition *cond()
00088 {
00089 return &m_cnd;
00090 }
00094 bool blocked();
00095
00096 private:
00097 unsigned int m_buffer_count, m_add_index, m_done_index, m_current_count;
00098 unsigned long m_block_size;
00099 Buffer **m_buffers;
00100 QMutex m_mtx;
00101 QWaitCondition m_cnd;
00102 Buffer *m_blocked;
00103 };
00104
00105 #endif // __recycler_h