aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2010-01-17 17:08:56 +0100
committerMax Kellermann <max@duempel.org>2010-01-17 17:09:10 +0100
commit9d4b7ab11305d8a95fcf93ffaedf0bdea0356927 (patch)
tree4339db83b17280d9a1eb3b69cb72f3c380dba9cc
parent8ac776c58b69a94fce793d16e477a88207ce0d27 (diff)
downloadmpd-9d4b7ab11305d8a95fcf93ffaedf0bdea0356927.tar.gz
mpd-9d4b7ab11305d8a95fcf93ffaedf0bdea0356927.tar.xz
mpd-9d4b7ab11305d8a95fcf93ffaedf0bdea0356927.zip
decoder_thread: don't fall back to "mad" unless no plugin matches
When all plugins have failed, MPD used to fall back to the "mad" decoder plugin, to handle those radio streams without a Content-Type response header. This however leads to unexpected results (garbage being played) when the stream isn't really mp3. Since we care little about "bad" streams, we shouldn't have hacks which have bad side effects. Let's get rid of this hack now! Only try to "mad" plugin if there was no match at all (Content-Type, path suffix) and no other plugin has been tried.
-rw-r--r--NEWS1
-rw-r--r--src/decoder_thread.c3
2 files changed, 3 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 7cc085e57..25ce5110c 100644
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,7 @@ ver 0.16 (20??/??/??)
- id3: revised "performer" tag support
* decoders:
- don't try a plugin twice (MIME type & suffix)
+ - don't fall back to "mad" unless no plugin matches
- ffmpeg: support multiple tags
- ffmpeg: convert metadata to generic format
- sndfile: new decoder plugin based on libsndfile
diff --git a/src/decoder_thread.c b/src/decoder_thread.c
index 631a7a0e3..42a537ffe 100644
--- a/src/decoder_thread.c
+++ b/src/decoder_thread.c
@@ -282,7 +282,8 @@ decoder_run_stream(struct decoder *decoder, const char *uri)
&tried) ||
/* fallback to mp3: this is needed for bastard streams
that don't have a suffix or set the mimeType */
- decoder_run_stream_fallback(decoder, input_stream);
+ (tried == NULL &&
+ decoder_run_stream_fallback(decoder, input_stream));
g_slist_free(tried);