aboutsummaryrefslogtreecommitdiffstats
path: root/src/inputPlugins/oggvorbis_plugin.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-08-26 08:27:07 +0200
committerMax Kellermann <max@duempel.org>2008-08-26 08:27:07 +0200
commit817a68b2b27dc65fb5fc550c83117832e8048c6f (patch)
tree324fed7254ab6d8c64bf5736049ab50ce558af5f /src/inputPlugins/oggvorbis_plugin.c
parent2e9169de9d859fd5d5629a4d1b3789155a5dac62 (diff)
downloadmpd-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 '')
-rw-r--r--src/inputPlugins/oggvorbis_plugin.c14
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,