Qmmp
|
00001 // Copyright (c) 2000-2001 Brad Hughes <bhughes@trolltech.com> 00002 // 00003 // Use, modification and distribution is allowed without limitation, 00004 // warranty, or liability of any kind. 00005 // 00006 00007 #ifndef RECYCLER_P_H 00008 #define RECYCLER_P_H 00009 00010 #include <QMutex> 00011 #include <QWaitCondition> 00012 #include "qmmp.h" 00013 #include "buffer.h" 00014 00019 class Recycler 00020 { 00021 public: 00025 Recycler(); 00029 ~Recycler(); 00035 void configure(quint32 freq, int chan); 00039 bool full() const; 00043 bool empty() const; 00047 int available() const; 00051 int used() const; 00055 Buffer *next(); 00059 Buffer *get(); // get next in recycle 00063 void add(); // add to queue 00067 void done(); // add to recycle 00071 void clear(); // clear queue 00075 size_t samples() const; // size in samples 00079 size_t blockSamples() const; // size in samples 00080 00084 QMutex *mutex() 00085 { 00086 return &m_mtx; 00087 } 00091 QWaitCondition *cond() 00092 { 00093 return &m_cnd; 00094 } 00098 bool blocked(); 00099 00100 private: 00101 unsigned int m_buffer_count, m_add_index, m_done_index, m_current_count; 00102 size_t m_block_samples; 00103 Buffer **m_buffers; 00104 QMutex m_mtx; 00105 QWaitCondition m_cnd; 00106 Buffer *m_blocked; 00107 }; 00108 00109 #endif // __recycler_h