diff options
author | Max Kellermann <max@duempel.org> | 2008-08-26 08:27:14 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-08-26 08:27:14 +0200 |
commit | 940ecf5345f339b9d3ec3e8029e345540358fa4c (patch) | |
tree | be22d8c04732d41f1ba6f49298eef7829d097095 /src/decoder_api.c | |
parent | d80260ab4e1d4f926344ab2074543ea4a7723216 (diff) | |
download | mpd-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 '')
-rw-r--r-- | src/decoder_api.c | 24 |
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. |