diff options
author | Max Kellermann <max@duempel.org> | 2008-11-10 15:07:01 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-11-10 15:07:01 +0100 |
commit | ff1acefb2115252cb27f0d0dc6219a527e258049 (patch) | |
tree | f264bf133731dfb33d0da8bb3438351f6bed570a /src/decoder | |
parent | 10eea9d9815c37077d0d0bde98ae4daeed3d101b (diff) | |
download | mpd-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.c | 7 | ||||
-rw-r--r-- | src/decoder/flac_plugin.c | 14 | ||||
-rw-r--r-- | src/decoder/oggvorbis_plugin.c | 14 | ||||
-rw-r--r-- | src/decoder_api.h | 6 | ||||
-rw-r--r-- | src/decoder_thread.c | 24 |
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; |