aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-01-07 13:17:07 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-01-07 13:17:07 +0000
commit942a4df4d9b1c7683ec9f6d9e72ca9e6d0bae14a (patch)
treedc57c40b4459137710250066e706da77c5511b18
parent3a9dc1fc246f17131b9ae5c3254cef6eb33dea42 (diff)
downloadqmmp-942a4df4d9b1c7683ec9f6d9e72ca9e6d0bae14a.tar.gz
qmmp-942a4df4d9b1c7683ec9f6d9e72ca9e6d0bae14a.tar.bz2
qmmp-942a4df4d9b1c7683ec9f6d9e72ca9e6d0bae14a.zip
wavpack: fixed 12, 20-bit integer and 32-bit float formats support
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8604 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/plugins/Input/wavpack/decoder_wavpack.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/plugins/Input/wavpack/decoder_wavpack.cpp b/src/plugins/Input/wavpack/decoder_wavpack.cpp
index 3b6da3de9..a9daaf20a 100644
--- a/src/plugins/Input/wavpack/decoder_wavpack.cpp
+++ b/src/plugins/Input/wavpack/decoder_wavpack.cpp
@@ -130,12 +130,22 @@ bool DecoderWavPack::initialize()
case 8:
configure(freq, chmap, Qmmp::PCM_S8);
break;
+ case 12:
case 16:
configure(freq, chmap, Qmmp::PCM_S16LE);
break;
+ case 20:
case 24:
case 32:
+#ifdef MODE_FLOAT
+ configure(freq, chmap, (WavpackGetMode(m_context) & MODE_FLOAT) ? Qmmp::PCM_FLOAT : Qmmp::PCM_S32LE);
+#else
configure(freq, chmap, Qmmp::PCM_S32LE);
+#endif
+ break;
+ default:
+ qWarning("DecoderWavPack: unsupported bit depth");
+ return false;
}
if(!m_parser)
m_totalTime = (qint64) WavpackGetNumSamples(m_context) * 1000 / freq;
@@ -244,10 +254,12 @@ qint64 DecoderWavPack::wavpack_decode(unsigned char *data, qint64 size)
for (i = 0; i < len * m_chan; ++i)
data8[i] = m_output_buf[i];
return len * m_chan;
+ case 12:
case 16:
for (i = 0; i < len * m_chan; ++i)
data16[i] = m_output_buf[i];
return len * m_chan * 2;
+ case 20:
case 24:
for (i = 0; i < len * m_chan; ++i)
data32[i] = m_output_buf[i] << 8;