aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-03-11 09:28:27 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-03-11 09:28:27 +0000
commit677943a044c8dbbc17e3936d5f13471db280bf56 (patch)
tree8c83d0519cb45beaeec7c49f5750f41853faa353
parent64c0b96048210a5100232988811e46a53807b3b8 (diff)
downloadqmmp-677943a044c8dbbc17e3936d5f13471db280bf56.tar.gz
qmmp-677943a044c8dbbc17e3936d5f13471db280bf56.tar.bz2
qmmp-677943a044c8dbbc17e3936d5f13471db280bf56.zip
wavpack plugin: added some optimization
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1617 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/plugins/Input/wavpack/decoder_wavpack.cpp42
1 files changed, 22 insertions, 20 deletions
diff --git a/src/plugins/Input/wavpack/decoder_wavpack.cpp b/src/plugins/Input/wavpack/decoder_wavpack.cpp
index c399619ab..3541559b7 100644
--- a/src/plugins/Input/wavpack/decoder_wavpack.cpp
+++ b/src/plugins/Input/wavpack/decoder_wavpack.cpp
@@ -120,8 +120,6 @@ bool DecoderWavPack::initialize()
case 32:
configure(m_freq, m_chan, Qmmp::PCM_S32LE);
}
- if(m_bps == 24)
- m_bps = 32;
if(!m_parser)
m_totalTime = (qint64) WavpackGetNumSamples(m_context) * 1000 / m_freq;
else
@@ -252,25 +250,29 @@ void DecoderWavPack::next()
qint64 DecoderWavPack::wavpack_decode(char *data, qint64 size)
{
ulong len = WavpackUnpackSamples (m_context, m_output_buf, size / m_chan / 4);
- uint m = 0;
//convert 32 to 16
- for (uint i = 0; i < len * m_chan; ++i)
+ qint8 *data8 = (qint8 *)data;
+ qint16 *data16 = (qint16 *)data;
+ qint32 *data32 = (qint32 *)data;
+ uint i = 0;
+ switch (m_bps)
{
- switch (m_bps)
- {
- case 8:
- data[m++] = m_output_buf[i] & 0xff;
- break;
- case 16:
- data[m++] = (m_output_buf[i] >> 0) & 0xff;
- data[m++] = (m_output_buf[i] >> 8) & 0xff;
- break;
- case 32:
- data[m++] = 0;
- data[m++] = (m_output_buf[i] >> 0) & 0xff;
- data[m++] = (m_output_buf[i] >> 8) & 0xff;
- data[m++] = (m_output_buf[i] >> 16) & 0xff;
- }
+ case 8:
+ for (i = 0; i < len * m_chan; ++i)
+ data8[i] = m_output_buf[i];
+ return len * m_chan;
+ case 16:
+ for (i = 0; i < len * m_chan; ++i)
+ data16[i] = m_output_buf[i];
+ return len * m_chan * 2;
+ case 24:
+ for (i = 0; i < len * m_chan; ++i)
+ data32[i] = m_output_buf[i] << 8;
+ return len * m_chan * 4;
+ case 32:
+ for (i = 0; i < len * m_chan; ++i)
+ data32[i] = m_output_buf[i];
+ return len * m_chan * 4;
}
- return len * m_chan * m_bps / 8;
+ return 0;
}