diff options
author | Max Kellermann <max@duempel.org> | 2008-08-26 08:27:04 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-08-26 08:27:04 +0200 |
commit | 154aa496e8c18bba3dc10c607987c187f4686ae4 (patch) | |
tree | 32a2a35f74e823c5eea21bbfbebef1297fe6e989 /src/decode.c | |
parent | 241cd043ca4f9dd560e6d947a9bf025f58de4ea9 (diff) | |
download | mpd-154aa496e8c18bba3dc10c607987c187f4686ae4.tar.gz mpd-154aa496e8c18bba3dc10c607987c187f4686ae4.tar.xz mpd-154aa496e8c18bba3dc10c607987c187f4686ae4.zip |
added struct decoder
The decoder struct should later be made opaque to the decoder plugin,
because maintaining a stable struct ABI is quite difficult. The ABI
should only consist of a small number of stable functions.
Diffstat (limited to 'src/decode.c')
-rw-r--r-- | src/decode.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/decode.c b/src/decode.c index 628dca14f..4df410e50 100644 --- a/src/decode.c +++ b/src/decode.c @@ -17,6 +17,7 @@ */ #include "decode.h" +#include "decoder_internal.h" #include "player.h" #include "playerData.h" @@ -205,6 +206,7 @@ static void processDecodeInput(int *pause_r, unsigned int *bbp_r, static void decodeStart(void) { + struct decoder decoder; int ret; int close_instream = 1; InputStream inStream; @@ -250,7 +252,7 @@ static void decodeStart(void) if (plugin->tryDecodeFunc && !plugin->tryDecodeFunc(&inStream)) continue; - ret = plugin->streamDecodeFunc(&inStream); + ret = plugin->streamDecodeFunc(&decoder, &inStream); break; } @@ -267,7 +269,8 @@ static void decodeStart(void) if (plugin->tryDecodeFunc && !plugin->tryDecodeFunc(&inStream)) continue; - ret = plugin->streamDecodeFunc(&inStream); + decoder.plugin = plugin; + ret = plugin->streamDecodeFunc(&decoder, &inStream); break; } } @@ -278,7 +281,9 @@ static void decodeStart(void) /* we already know our mp3Plugin supports streams, no * need to check for stream{Types,DecodeFunc} */ if ((plugin = getInputPluginFromName("mp3"))) { - ret = plugin->streamDecodeFunc(&inStream); + decoder.plugin = plugin; + ret = plugin->streamDecodeFunc(&decoder, + &inStream); } } } else { @@ -295,10 +300,13 @@ static void decodeStart(void) if (plugin->fileDecodeFunc) { closeInputStream(&inStream); close_instream = 0; - ret = plugin->fileDecodeFunc(path_max_fs); + decoder.plugin = plugin; + ret = plugin->fileDecodeFunc(&decoder, + path_max_fs); break; } else if (plugin->streamDecodeFunc) { - ret = plugin->streamDecodeFunc(&inStream); + decoder.plugin = plugin; + ret = plugin->streamDecodeFunc(&decoder, &inStream); break; } } |