From af66f666c65cfdca3cf717a923a0e440bb75afe2 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Sun, 1 Mar 2009 10:53:46 +0100
Subject: [PATCH] audiofile: added 24 bit support

Don't hard code the "bits" parameter to 16.  Try to use the input's
sample format, if possible.
---
 NEWS                           | 1 +
 src/decoder/audiofile_plugin.c | 9 ++++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index 153cbd837..aa74e95dc 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,7 @@ ver 0.15 - (200?/??/??)
   - parse RVA2 tags in mp3 files
 * decoders:
   - audiofile: streaming support added
+  - audiofile: added 24 bit support
   - modplug: another MOD plugin, based on libmodplug
   - mikmod disabled by default, due to severe security issues in libmikmod
   - sidplay: new decoder plugin for C64 SID (using libsidplay2)
diff --git a/src/decoder/audiofile_plugin.c b/src/decoder/audiofile_plugin.c
index bc517d49c..e1e848c05 100644
--- a/src/decoder/audiofile_plugin.c
+++ b/src/decoder/audiofile_plugin.c
@@ -127,8 +127,15 @@ audiofile_stream_decode(struct decoder *decoder, struct input_stream *is)
 		return;
 	}
 
+	afGetSampleFormat(af_fp, AF_DEFAULT_TRACK, &fs, &bits);
+	if (!audio_valid_sample_format(bits)) {
+		g_debug("input file has %d bit samples, converting to 16",
+			bits);
+		bits = 16;
+	}
+
 	afSetVirtualSampleFormat(af_fp, AF_DEFAULT_TRACK,
-	                         AF_SAMPFMT_TWOSCOMP, 16);
+	                         AF_SAMPFMT_TWOSCOMP, bits);
 	afGetVirtualSampleFormat(af_fp, AF_DEFAULT_TRACK, &fs, &bits);
 	audio_format.bits = (uint8_t)bits;
 	audio_format.sample_rate =