Commit 10eea9d9 authored by Max Kellermann's avatar Max Kellermann

decoder: fall back to next plugin

When a plugin is unable to decode a song, try the other plugins.
parent cad37b2e
...@@ -60,6 +60,9 @@ decoder_stream_decode(const struct decoder_plugin *plugin, ...@@ -60,6 +60,9 @@ decoder_stream_decode(const struct decoder_plugin *plugin,
assert(input_stream->ready); assert(input_stream->ready);
assert(dc.state == DECODE_STATE_START); assert(dc.state == DECODE_STATE_START);
/* rewind the stream, so each plugin gets a fresh start */
input_stream_seek(input_stream, 0, SEEK_SET);
ret = plugin->stream_decode(decoder, input_stream); ret = plugin->stream_decode(decoder, input_stream);
if (ret) { if (ret) {
...@@ -173,7 +176,10 @@ static void decoder_run(void) ...@@ -173,7 +176,10 @@ static void decoder_run(void)
continue; continue;
ret = decoder_stream_decode(plugin, &decoder, ret = decoder_stream_decode(plugin, &decoder,
&input_stream); &input_stream);
break; if (ret)
break;
plugin = NULL;
} }
/* if that fails, try suffix matching the URL: */ /* if that fails, try suffix matching the URL: */
...@@ -187,7 +193,11 @@ static void decoder_run(void) ...@@ -187,7 +193,11 @@ static void decoder_run(void)
continue; continue;
ret = decoder_stream_decode(plugin, &decoder, ret = decoder_stream_decode(plugin, &decoder,
&input_stream); &input_stream);
break; if (ret)
break;
assert(dc.state == DECODE_STATE_START);
plugin = NULL;
} }
} }
/* fallback to mp3: */ /* fallback to mp3: */
...@@ -213,11 +223,13 @@ static void decoder_run(void) ...@@ -213,11 +223,13 @@ static void decoder_run(void)
close_instream = false; close_instream = false;
ret = decoder_file_decode(plugin, ret = decoder_file_decode(plugin,
&decoder, uri); &decoder, uri);
break; if (ret)
break;
} else if (plugin->stream_decode != NULL) { } else if (plugin->stream_decode != NULL) {
ret = decoder_stream_decode(plugin, &decoder, ret = decoder_stream_decode(plugin, &decoder,
&input_stream); &input_stream);
break; if (ret)
break;
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment