aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-11-10 15:07:01 +0100
committerMax Kellermann <max@duempel.org>2008-11-10 15:07:01 +0100
commitff1acefb2115252cb27f0d0dc6219a527e258049 (patch)
treef264bf133731dfb33d0da8bb3438351f6bed570a
parent10eea9d9815c37077d0d0bde98ae4daeed3d101b (diff)
downloadmpd-ff1acefb2115252cb27f0d0dc6219a527e258049.tar.gz
mpd-ff1acefb2115252cb27f0d0dc6219a527e258049.tar.xz
mpd-ff1acefb2115252cb27f0d0dc6219a527e258049.zip
decoder: removed plugin method try_decode()
Instead of having a seprate try_decode() method, let the stream_decode() and file_decode() methods decide whether they are able to decode the song.
Diffstat (limited to '')
-rw-r--r--src/decoder/ffmpeg_plugin.c7
-rw-r--r--src/decoder/flac_plugin.c14
-rw-r--r--src/decoder/oggvorbis_plugin.c14
-rw-r--r--src/decoder_api.h6
-rw-r--r--src/decoder_thread.c24
5 files changed, 14 insertions, 51 deletions
diff --git a/src/decoder/ffmpeg_plugin.c b/src/decoder/ffmpeg_plugin.c
index 41eb4b4d3..7eeb785bb 100644
--- a/src/decoder/ffmpeg_plugin.c
+++ b/src/decoder/ffmpeg_plugin.c
@@ -193,12 +193,6 @@ ffmpeg_helper(struct input_stream *input,
return ret;
}
-static bool
-ffmpeg_try_decode(struct input_stream *input)
-{
- return ffmpeg_helper(input, NULL, NULL);
-}
-
static enum decoder_command
ffmpeg_send_packet(struct decoder *decoder, struct input_stream *is,
const AVPacket *packet,
@@ -370,7 +364,6 @@ static const char *const ffmpeg_mime_types[] = {
const struct decoder_plugin ffmpeg_plugin = {
.name = "ffmpeg",
.init = ffmpeg_init,
- .try_decode = ffmpeg_try_decode,
.stream_decode = ffmpeg_decode,
.tag_dup = ffmpeg_tag,
.suffixes = ffmpeg_suffixes,
diff --git a/src/decoder/flac_plugin.c b/src/decoder/flac_plugin.c
index 0afa85431..ad64b7355 100644
--- a/src/decoder/flac_plugin.c
+++ b/src/decoder/flac_plugin.c
@@ -434,13 +434,14 @@ out:
static bool
oggflac_decode(struct decoder *decoder, struct input_stream *inStream)
{
- return flac_decode_internal(decoder, inStream, true);
-}
+ if (ogg_stream_type_detect(inStream) != FLAC)
+ return false;
-static bool
-oggflac_try_decode(struct input_stream *inStream)
-{
- return ogg_stream_type_detect(inStream) == FLAC;
+ /* rewind the stream, because ogg_stream_type_detect() has
+ moved it */
+ input_stream_seek(inStream, 0, SEEK_SET);
+
+ return flac_decode_internal(decoder, inStream, true);
}
static const char *const oggflac_suffixes[] = { "ogg", "oga", NULL };
@@ -457,7 +458,6 @@ const struct decoder_plugin oggflacPlugin = {
.name = "oggflac",
.init = oggflac_init,
#if defined(FLAC_API_VERSION_CURRENT) && FLAC_API_VERSION_CURRENT > 7
- .try_decode = oggflac_try_decode,
.stream_decode = oggflac_decode,
.tag_dup = oggflac_tag_dup,
.suffixes = oggflac_suffixes,
diff --git a/src/decoder/oggvorbis_plugin.c b/src/decoder/oggvorbis_plugin.c
index 32660c2c0..cc6f8f119 100644
--- a/src/decoder/oggvorbis_plugin.c
+++ b/src/decoder/oggvorbis_plugin.c
@@ -214,6 +214,13 @@ oggvorbis_decode(struct decoder *decoder, struct input_stream *inStream)
const char *errorStr;
bool initialized = false;
+ if (ogg_stream_type_detect(inStream) != VORBIS)
+ return false;
+
+ /* rewind the stream, because ogg_stream_type_detect() has
+ moved it */
+ input_stream_seek(inStream, 0, SEEK_SET);
+
data.inStream = inStream;
data.decoder = decoder;
@@ -351,12 +358,6 @@ static struct tag *oggvorbis_TagDup(const char *file)
return ret;
}
-static bool
-oggvorbis_try_decode(struct input_stream *inStream)
-{
- return ogg_stream_type_detect(inStream) == VORBIS;
-}
-
static const char *const oggvorbis_Suffixes[] = { "ogg","oga", NULL };
static const char *const oggvorbis_MimeTypes[] = {
"application/ogg",
@@ -367,7 +368,6 @@ static const char *const oggvorbis_MimeTypes[] = {
const struct decoder_plugin oggvorbisPlugin = {
.name = "oggvorbis",
- .try_decode = oggvorbis_try_decode,
.stream_decode = oggvorbis_decode,
.tag_dup = oggvorbis_TagDup,
.suffixes = oggvorbis_Suffixes,
diff --git a/src/decoder_api.h b/src/decoder_api.h
index ab480599b..503ba118f 100644
--- a/src/decoder_api.h
+++ b/src/decoder_api.h
@@ -61,12 +61,6 @@ struct decoder_plugin {
void (*finish)(void);
/**
- * returns true if the input stream is decodable by the
- * decoder plugin, false if not
- */
- bool (*try_decode)(struct input_stream *);
-
- /**
* this will be used to decode InputStreams, and is
* recommended for files and networked (HTTP) connections.
*
diff --git a/src/decoder_thread.c b/src/decoder_thread.c
index a50dbf8d2..99c76f892 100644
--- a/src/decoder_thread.c
+++ b/src/decoder_thread.c
@@ -29,23 +29,6 @@
#include "ls.h"
static bool
-decoder_try_decode(const struct decoder_plugin *plugin,
- struct input_stream *input_stream)
-{
- bool ret;
-
- if (plugin->try_decode == NULL)
- return true;
-
- 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 bool
decoder_stream_decode(const struct decoder_plugin *plugin,
struct decoder *decoder,
struct input_stream *input_stream)
@@ -172,8 +155,6 @@ static void decoder_run(void)
while ((plugin = decoder_plugin_from_mime_type(input_stream.mime, next++))) {
if (plugin->stream_decode == NULL)
continue;
- if (!decoder_try_decode(plugin, &input_stream))
- continue;
ret = decoder_stream_decode(plugin, &decoder,
&input_stream);
if (ret)
@@ -189,8 +170,6 @@ static void decoder_run(void)
while ((plugin = decoder_plugin_from_suffix(s, next++))) {
if (plugin->stream_decode == NULL)
continue;
- if (!decoder_try_decode(plugin, &input_stream))
- continue;
ret = decoder_stream_decode(plugin, &decoder,
&input_stream);
if (ret)
@@ -215,9 +194,6 @@ static void decoder_run(void)
unsigned int next = 0;
const char *s = getSuffix(uri);
while ((plugin = decoder_plugin_from_suffix(s, next++))) {
- if (!decoder_try_decode(plugin, &input_stream))
- continue;
-
if (plugin->file_decode != NULL) {
input_stream_close(&input_stream);
close_instream = false;