aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-08-26 08:27:10 +0200
committerMax Kellermann <max@duempel.org>2008-08-26 08:27:10 +0200
commit35858dfe3a2bac326f91e558cbdc31d05c47615e (patch)
treed03963aa1d73653dd297d540c2983aab8be86d04
parent2a14141121926682295fbd7d512453b81012dc02 (diff)
downloadmpd-35858dfe3a2bac326f91e558cbdc31d05c47615e.tar.gz
mpd-35858dfe3a2bac326f91e558cbdc31d05c47615e.tar.xz
mpd-35858dfe3a2bac326f91e558cbdc31d05c47615e.zip
aac: don't depend on consumed data in fillAacBuffer()
Fill the AacBuffer even when nothing has been consumed yet. The function should not check for consumed data, but for free space at the end of the buffer.
-rw-r--r--src/inputPlugins/aac_plugin.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/inputPlugins/aac_plugin.c b/src/inputPlugins/aac_plugin.c
index 4433f78d4..4b1cba6e3 100644
--- a/src/inputPlugins/aac_plugin.c
+++ b/src/inputPlugins/aac_plugin.c
@@ -41,28 +41,32 @@ static void fillAacBuffer(AacBuffer * b)
{
size_t bread;
- if (b->bytesConsumed == 0)
+ if (b->bytesIntoBuffer >= FAAD_MIN_STREAMSIZE * AAC_MAX_CHANNELS)
+ /* buffer already full */
return;
- if (b->bytesIntoBuffer) {
+ if (b->bytesConsumed > 0 && b->bytesIntoBuffer > 0) {
memmove((void *)b->buffer, (void *)(b->buffer +
b->bytesConsumed),
b->bytesIntoBuffer);
}
+ b->bytesConsumed = 0;
+
if (!b->atEof) {
+ size_t rest = FAAD_MIN_STREAMSIZE * AAC_MAX_CHANNELS -
+ b->bytesIntoBuffer;
+
bread = readFromInputStream(b->inStream,
(void *)(b->buffer +
b->
bytesIntoBuffer),
- 1, b->bytesConsumed);
- if (bread != b->bytesConsumed)
+ 1, rest);
+ if (bread != rest)
b->atEof = 1;
b->bytesIntoBuffer += bread;
}
- b->bytesConsumed = 0;
-
if ((b->bytesIntoBuffer > 3 && memcmp(b->buffer, "TAG", 3) == 0) ||
(b->bytesIntoBuffer > 11 &&
memcmp(b->buffer, "LYRICSBEGIN", 11) == 0) ||