diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-11-27 19:10:13 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-11-27 19:10:13 +0000 |
| commit | 2a9a78ddd34ac86dad084dc1102320645963df1c (patch) | |
| tree | e4d2250b04357ffd7b0c8f324c7ca09ea7014277 /lib/recycler.cpp | |
| parent | 10923b3e9f495e70a23d4dcbc3c891b7517e667f (diff) | |
| download | qmmp-2a9a78ddd34ac86dad084dc1102320645963df1c.tar.gz qmmp-2a9a78ddd34ac86dad084dc1102320645963df1c.tar.bz2 qmmp-2a9a78ddd34ac86dad084dc1102320645963df1c.zip | |
fixed seeking; added effect plugin support; added sample rate converter plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@190 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'lib/recycler.cpp')
| -rw-r--r-- | lib/recycler.cpp | 87 |
1 files changed, 52 insertions, 35 deletions
diff --git a/lib/recycler.cpp b/lib/recycler.cpp index 515652fb0..15d2234a6 100644 --- a/lib/recycler.cpp +++ b/lib/recycler.cpp @@ -10,94 +10,111 @@ Recycler::Recycler ( unsigned int sz ) - : add_index ( 0 ), done_index ( 0 ), current_count ( 0 ) + : add_index ( 0 ), done_index ( 0 ), current_count ( 0 ) { - buffer_count = ( sz / Buffer::size() ); - if ( buffer_count < 1 ) - { - buffer_count = 1; - } - - buffers = new Buffer*[buffer_count]; - - for ( unsigned int i = 0; i < buffer_count; i ++ ) - { - buffers[i] = new Buffer; - } + buffer_count = ( sz / Buffer::size() ); + if ( buffer_count < 1 ) + { + buffer_count = 1; + } + + buffers = new Buffer*[buffer_count]; + + for ( unsigned int i = 0; i < buffer_count; i ++ ) + { + buffers[i] = new Buffer; + } } Recycler::~Recycler() { - for ( unsigned int i = 0; i < buffer_count; i++ ) - { - delete buffers[i]; - buffers[i] = 0; - } + for ( unsigned int i = 0; i < buffer_count; i++ ) + { + delete buffers[i]; + buffers[i] = 0; + } - delete [] buffers; + delete [] buffers; } bool Recycler::full() const { - return current_count == buffer_count; + return current_count == buffer_count; } bool Recycler::empty() const { - return current_count == 0; + return current_count == 0; } int Recycler::available() const { - return buffer_count - current_count; + return buffer_count - current_count; } - int Recycler::used() const { - return current_count; + return current_count; } -Buffer *Recycler::get() +Buffer *Recycler::get(unsigned long size) { - if ( full() ) - return 0; - return buffers[add_index]; + if (full()) + return 0; + if(size > Buffer::size() + buffers[add_index]->exceeding) + { + delete buffers[add_index]->data; + buffers[add_index]->data = new unsigned char[size]; + buffers[add_index]->exceeding = size - Buffer::size(); + //qDebug("new size = %d, index = %d", size, add_index); + } + + return buffers[add_index]; } void Recycler::add() { - add_index = ++add_index % buffer_count; - current_count++; + add_index = ++add_index % buffer_count; + current_count++; } Buffer *Recycler::next() { - return buffers[done_index]; + return buffers[done_index]; } void Recycler::done() { - done_index = ++done_index % buffer_count; - current_count--; + done_index = ++done_index % buffer_count; + current_count--; } void Recycler::clear() { - add_index = done_index = current_count = 0; + add_index = done_index = current_count = 0; + /*for ( unsigned int i = 0; i < buffer_count; i ++ ) + { + if(buffers[i]->exceeding > 0) + { + delete buffers[i]->data; + buffers[i]->data = new unsigned char[Buffer::size()]; + buffers[i]->exceeding = 0; + buffers[i]->nbytes = 0; + } + }*/ } unsigned int Recycler::size() const { - return buffer_count * Buffer::size(); + return buffer_count * Buffer::size(); } |
