diff options
author | Max Kellermann <max@duempel.org> | 2009-11-11 21:49:00 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-11-11 21:49:00 +0100 |
commit | ee5d3337a776f3d8af5cc6996023320b711f6b95 (patch) | |
tree | 782ca3c0ed57a854f8e5bfd6ee40d1ea9457ef69 | |
parent | 4c6a8e3ca507fb9ca407cd11c55714f213f25c8a (diff) | |
download | mpd-ee5d3337a776f3d8af5cc6996023320b711f6b95.tar.gz mpd-ee5d3337a776f3d8af5cc6996023320b711f6b95.tar.xz mpd-ee5d3337a776f3d8af5cc6996023320b711f6b95.zip |
decoder/wavpack: activate 32 bit support
MPD has been supporting 32 bit samples since version 0.15. This patch
changes one check, and removes the 32->24 conversion code.
Note that WavPack floating point samples have 32 bits, and MPD doesn't
have a special check for floating point - therefore, this WavPack
plugin still returns 24 bit integer samples as before (until we have
float support in the MPD core).
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | src/decoder/wavpack_plugin.c | 20 |
2 files changed, 8 insertions, 13 deletions
@@ -24,6 +24,7 @@ ver 0.16 (20??/??/??) - sidplay: support sub-tunes - sidplay: implemented songlength database - sidplay: support seeking + - wavpack: activate 32 bit support * encoders: - twolame: new encoder plugin based on libtwolame * output: diff --git a/src/decoder/wavpack_plugin.c b/src/decoder/wavpack_plugin.c index 3e7c0cef7..e2f0e9dfb 100644 --- a/src/decoder/wavpack_plugin.c +++ b/src/decoder/wavpack_plugin.c @@ -97,19 +97,11 @@ format_samples_int(int bytes_per_sample, void *buffer, uint32_t count) } break; } + case 3: + case 4: /* do nothing */ break; - case 4: { - uint32_t *dst = buffer; - assert_static(sizeof(*dst) <= sizeof(*src)); - - /* downsample to 24-bit */ - while (count--) { - *dst++ = *src++ >> 8; - } - break; - } } } @@ -151,10 +143,12 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek, /* round bitwidth to 8-bit units */ audio_format.bits = (audio_format.bits + 7) & (~7); - /* mpd handles max 24-bit samples */ - if (audio_format.bits > 24) { + /* MPD handles max 32-bit samples */ + if (audio_format.bits > 32) + audio_format.bits = 32; + + if ((WavpackGetMode(wpc) & MODE_FLOAT) == MODE_FLOAT) audio_format.bits = 24; - } if (!audio_format_valid(&audio_format)) { g_warning("Invalid audio format: %u:%u:%u\n", |