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.
---

 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 4433f78..4b1cba6 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) ||


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Musicpd-dev-team mailing list
Musicpd-dev-team@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team

Reply via email to