aboutsummaryrefslogtreecommitdiff
path: root/lib/recycler.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2007-11-27 19:10:13 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2007-11-27 19:10:13 +0000
commit2a9a78ddd34ac86dad084dc1102320645963df1c (patch)
treee4d2250b04357ffd7b0c8f324c7ca09ea7014277 /lib/recycler.cpp
parent10923b3e9f495e70a23d4dcbc3c891b7517e667f (diff)
downloadqmmp-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.cpp87
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();
}