diff options
author | Max Kellermann <max@duempel.org> | 2008-08-26 08:27:07 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-08-26 08:27:07 +0200 |
commit | 817a68b2b27dc65fb5fc550c83117832e8048c6f (patch) | |
tree | 324fed7254ab6d8c64bf5736049ab50ce558af5f /src/inputPlugins/oggvorbis_plugin.c | |
parent | 2e9169de9d859fd5d5629a4d1b3789155a5dac62 (diff) | |
download | mpd-817a68b2b27dc65fb5fc550c83117832e8048c6f.tar.gz mpd-817a68b2b27dc65fb5fc550c83117832e8048c6f.tar.xz mpd-817a68b2b27dc65fb5fc550c83117832e8048c6f.zip |
added decoder_get_command()
Another big patch which hides internal mpd APIs from decoder plugins:
decoder plugins regularly poll dc->command; expose it with a
decoder_api.h function.
Diffstat (limited to 'src/inputPlugins/oggvorbis_plugin.c')
-rw-r--r-- | src/inputPlugins/oggvorbis_plugin.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/inputPlugins/oggvorbis_plugin.c b/src/inputPlugins/oggvorbis_plugin.c index e53e27de7..8e98bdf4e 100644 --- a/src/inputPlugins/oggvorbis_plugin.c +++ b/src/inputPlugins/oggvorbis_plugin.c @@ -50,6 +50,7 @@ typedef struct _OggCallbackData { InputStream *inStream; + struct decoder *decoder; } OggCallbackData; static size_t ogg_read_cb(void *ptr, size_t size, size_t nmemb, void *vdata) @@ -60,7 +61,7 @@ static size_t ogg_read_cb(void *ptr, size_t size, size_t nmemb, void *vdata) while (1) { ret = readFromInputStream(data->inStream, ptr, size, nmemb); if (ret == 0 && !inputStreamAtEOF(data->inStream) && - dc.command != DECODE_COMMAND_STOP) { + decoder_get_command(data->decoder) != DECODE_COMMAND_STOP) { my_usleep(10000); } else break; @@ -74,7 +75,7 @@ static size_t ogg_read_cb(void *ptr, size_t size, size_t nmemb, void *vdata) static int ogg_seek_cb(void *vdata, ogg_int64_t offset, int whence) { const OggCallbackData *data = (const OggCallbackData *) vdata; - if(dc.command == DECODE_COMMAND_STOP) + if(decoder_get_command(data->decoder) == DECODE_COMMAND_STOP) return -1; return seekInputStream(data->inStream, offset, whence); } @@ -229,13 +230,14 @@ static int oggvorbis_decode(struct decoder * decoder, InputStream * inStream) const char *errorStr; data.inStream = inStream; + data.decoder = decoder; callbacks.read_func = ogg_read_cb; callbacks.seek_func = ogg_seek_cb; callbacks.close_func = ogg_close_cb; callbacks.tell_func = ogg_tell_cb; if ((ret = ov_open_callbacks(&data, &vf, NULL, 0, callbacks)) < 0) { - if (dc.command != DECODE_COMMAND_STOP) { + if (decoder_get_command(decoder) != DECODE_COMMAND_STOP) { switch (ret) { case OV_EREAD: errorStr = "read error"; @@ -265,7 +267,7 @@ static int oggvorbis_decode(struct decoder * decoder, InputStream * inStream) audio_format.bits = 16; while (1) { - if (dc.command == DECODE_COMMAND_SEEK) { + if (decoder_get_command(decoder) == DECODE_COMMAND_SEEK) { if (0 == ov_time_seek_page(&vf, dc.seekWhere)) { decoder_clear(decoder); chunkpos = 0; @@ -315,12 +317,12 @@ static int oggvorbis_decode(struct decoder * decoder, InputStream * inStream) ov_pcm_tell(&vf) / audio_format.sampleRate, bitRate, replayGainInfo); chunkpos = 0; - if (dc.command == DECODE_COMMAND_STOP) + if (decoder_get_command(decoder) == DECODE_COMMAND_STOP) break; } } - if (dc.command != DECODE_COMMAND_STOP && chunkpos > 0) { + if (decoder_get_command(decoder) != DECODE_COMMAND_STOP && chunkpos > 0) { decoder_data(decoder, NULL, inStream->seekable, chunk, chunkpos, ov_time_tell(&vf), bitRate, |