Commit 2124df13 authored by Max Kellermann's avatar Max Kellermann

decoder: rewind input stream after try_decode()

The try_decode() method may have read some data from the stream, which is now lost. To make this data available to other methods, get it back by rewinding the input stream after each try_decode() invocation. The ogg and wavpack plugins did this manually and inconsistently; this code can now be removed.
parent 395aa4e8
......@@ -30,13 +30,7 @@ ogg_stream_type ogg_stream_type_detect(struct input_stream *inStream)
unsigned char buf[41];
size_t r;
input_stream_seek(inStream, 0, SEEK_SET);
r = decoder_read(NULL, inStream, buf, sizeof(buf));
if (r > 0)
input_stream_seek(inStream, 0, SEEK_SET);
if (r >= 32 && memcmp(buf, "OggS", 4) == 0 && (
(memcmp(buf+29, "FLAC", 4) == 0
&& memcmp(buf+37, "fLaC", 4) == 0)
......
......@@ -424,8 +424,6 @@ static bool wavpack_trydecode(struct input_stream *is)
return false;
WavpackCloseFile(wpc);
/* Seek it back in order to play from the first byte. */
input_stream_seek(is, 0, SEEK_SET);
return true;
}
......
......@@ -32,10 +32,17 @@ static bool
decoder_try_decode(const struct decoder_plugin *plugin,
struct input_stream *input_stream)
{
bool ret;
if (plugin->try_decode == NULL)
return true;
return plugin->try_decode(input_stream);
ret = plugin->try_decode(input_stream);
/* rewind the stream, so the next reader gets a fresh start */
input_stream_seek(input_stream, 0, SEEK_SET);
return ret;
}
static void decodeStart(void)
......
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