From cad37b2e5a1cbd9af54b1e1fe24f17de22e11a0d Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 10 Nov 2008 15:02:38 +0100 Subject: decoder: wrapper functions for methods stream_decode() and file_decode() Added lots of assertions to the wrapper functions. --- src/decoder_thread.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 66 insertions(+), 5 deletions(-) diff --git a/src/decoder_thread.c b/src/decoder_thread.c index 23a947d77..ac1b41b6f 100644 --- a/src/decoder_thread.c +++ b/src/decoder_thread.c @@ -45,6 +45,65 @@ decoder_try_decode(const struct decoder_plugin *plugin, return ret; } +static bool +decoder_stream_decode(const struct decoder_plugin *plugin, + struct decoder *decoder, + struct input_stream *input_stream) +{ + bool ret; + + assert(plugin != NULL); + assert(plugin->stream_decode != NULL); + assert(decoder != NULL); + assert(!decoder->stream_tag_sent); + assert(input_stream != NULL); + assert(input_stream->ready); + assert(dc.state == DECODE_STATE_START); + + ret = plugin->stream_decode(decoder, input_stream); + + if (ret) { + /* if the method has succeeded, the plugin must have + called decoder_initialized() */ + assert(dc.state == DECODE_STATE_DECODE); + } else { + /* no decoder_initialized() allowed when the plugin + hasn't recognized the file format */ + assert(dc.state == DECODE_STATE_START); + } + + return ret; +} + +static bool +decoder_file_decode(const struct decoder_plugin *plugin, + struct decoder *decoder, const char *path) +{ + bool ret; + + assert(plugin != NULL); + assert(plugin->stream_decode != NULL); + assert(decoder != NULL); + assert(!decoder->stream_tag_sent); + assert(path != NULL); + assert(path[0] == '/'); + assert(dc.state == DECODE_STATE_START); + + ret = plugin->file_decode(decoder, path); + + if (ret) { + /* if the method has succeeded, the plugin must have + called decoder_initialized() */ + assert(dc.state == DECODE_STATE_DECODE); + } else { + /* no decoder_initialized() allowed when the plugin + hasn't recognized the file format */ + assert(dc.state == DECODE_STATE_START); + } + + return ret; +} + static void decoder_run(void) { struct song *song = dc.next_song; @@ -112,7 +171,8 @@ static void decoder_run(void) continue; if (!decoder_try_decode(plugin, &input_stream)) continue; - ret = plugin->stream_decode(&decoder, &input_stream); + ret = decoder_stream_decode(plugin, &decoder, + &input_stream); break; } @@ -125,7 +185,7 @@ static void decoder_run(void) continue; if (!decoder_try_decode(plugin, &input_stream)) continue; - ret = plugin->stream_decode(&decoder, + ret = decoder_stream_decode(plugin, &decoder, &input_stream); break; } @@ -137,7 +197,7 @@ static void decoder_run(void) /* we already know our mp3Plugin supports streams, no * need to check for stream{Types,DecodeFunc} */ if ((plugin = decoder_plugin_from_name("mp3"))) { - ret = plugin->stream_decode(&decoder, + ret = decoder_stream_decode(plugin, &decoder, &input_stream); } } @@ -151,10 +211,11 @@ static void decoder_run(void) if (plugin->file_decode != NULL) { input_stream_close(&input_stream); close_instream = false; - ret = plugin->file_decode(&decoder, uri); + ret = decoder_file_decode(plugin, + &decoder, uri); break; } else if (plugin->stream_decode != NULL) { - ret = plugin->stream_decode(&decoder, + ret = decoder_stream_decode(plugin, &decoder, &input_stream); break; } -- cgit v1.2.3