aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder_api.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-08-26 08:27:14 +0200
committerMax Kellermann <max@duempel.org>2008-08-26 08:27:14 +0200
commit940ecf5345f339b9d3ec3e8029e345540358fa4c (patch)
treebe22d8c04732d41f1ba6f49298eef7829d097095 /src/decoder_api.c
parentd80260ab4e1d4f926344ab2074543ea4a7723216 (diff)
downloadmpd-940ecf5345f339b9d3ec3e8029e345540358fa4c.tar.gz
mpd-940ecf5345f339b9d3ec3e8029e345540358fa4c.tar.xz
mpd-940ecf5345f339b9d3ec3e8029e345540358fa4c.zip
added decoder_read()
On our way to stabilize the decoder API, we will one day remove the input stream functions. The most basic function, read() will be provided by decoder_api.h with this patch. It already contains a loop (still with manual polling), error/eof handling and decoder command checks. This kind of code used to be duplicated in all decoder plugins.
Diffstat (limited to 'src/decoder_api.c')
-rw-r--r--src/decoder_api.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/decoder_api.c b/src/decoder_api.c
index ffc3aa781..9a8b803d9 100644
--- a/src/decoder_api.c
+++ b/src/decoder_api.c
@@ -89,6 +89,30 @@ void decoder_seek_error(struct decoder * decoder)
decoder_command_finished(decoder);
}
+size_t decoder_read(struct decoder *decoder,
+ InputStream *inStream,
+ void *buffer, size_t length)
+{
+ size_t nbytes;
+
+ assert(inStream != NULL);
+ assert(buffer != NULL);
+
+ while (1) {
+ /* XXX don't allow decoder==NULL */
+ if (decoder != NULL && dc.command != DECODE_COMMAND_NONE)
+ return 0;
+
+ nbytes = readFromInputStream(inStream, buffer, 1, length);
+ if (nbytes > 0 || inputStreamAtEOF(inStream))
+ return nbytes;
+
+ /* sleep for a fraction of a second! */
+ /* XXX don't sleep, wait for an event instead */
+ my_usleep(10000);
+ }
+}
+
/**
* All chunks are full of decoded data; wait for the player to free
* one.