Qmmp
/usr/src/RPM/BUILD/qmmp-0.11-svn/src/qmmp/recycler_p.h
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
 All Classes Functions Variables Enumerations Enumerator