aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/decoder/_ogg_common.c6
-rw-r--r--src/decoder/wavpack_plugin.c2
-rw-r--r--src/decoder_thread.c9
3 files changed, 8 insertions, 9 deletions
diff --git a/src/decoder/_ogg_common.c b/src/decoder/_ogg_common.c
index e18b9dadb..03606b415 100644
--- a/src/decoder/_ogg_common.c
+++ b/src/decoder/_ogg_common.c
@@ -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)
diff --git a/src/decoder/wavpack_plugin.c b/src/decoder/wavpack_plugin.c
index 663bc1f2b..14ccb8630 100644
--- a/src/decoder/wavpack_plugin.c
+++ b/src/decoder/wavpack_plugin.c
@@ -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;
}
diff --git a/src/decoder_thread.c b/src/decoder_thread.c
index 403c2bac8..d66094cd2 100644
--- a/src/decoder_thread.c
+++ b/src/decoder_thread.c
@@ -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)