diff options
author | Max Kellermann <max@duempel.org> | 2008-08-26 08:27:10 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-08-26 08:27:10 +0200 |
commit | 35858dfe3a2bac326f91e558cbdc31d05c47615e (patch) | |
tree | d03963aa1d73653dd297d540c2983aab8be86d04 /src/inputPlugins/aac_plugin.c | |
parent | 2a14141121926682295fbd7d512453b81012dc02 (diff) | |
download | mpd-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.
Diffstat (limited to 'src/inputPlugins/aac_plugin.c')
-rw-r--r-- | src/inputPlugins/aac_plugin.c | 16 |
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) || |