Chris Robinson : winemp3.acm: Fix reading/decoding loop.

Alexandre Julliard julliard at winehq.org
Wed Aug 26 10:44:41 CDT 2009


Module: wine
Branch: master
Commit: 3dc677cc631038c924a7bda511bce94f4fc3e0db
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3dc677cc631038c924a7bda511bce94f4fc3e0db

Author: Chris Robinson <chris.kcat at gmail.com>
Date:   Tue Aug 25 23:27:57 2009 -0700

winemp3.acm: Fix reading/decoding loop.

---

 dlls/winemp3.acm/mpegl3.c |   49 +++++++++++++++++++++++----------------------
 1 files changed, 25 insertions(+), 24 deletions(-)

diff --git a/dlls/winemp3.acm/mpegl3.c b/dlls/winemp3.acm/mpegl3.c
index eb97e75..2d291cf 100644
--- a/dlls/winemp3.acm/mpegl3.c
+++ b/dlls/winemp3.acm/mpegl3.c
@@ -151,39 +151,40 @@ static void mp3_horse(PACMDRVSTREAMINSTANCE adsi,
     DWORD               dpos = 0;
 
 
-    ret = mpg123_feed(amd->mh, src, *nsrc);
-    if (ret != MPG123_OK)
+    if (*nsrc > 0)
     {
-        ERR("Error feeding data\n");
-        *ndst = *nsrc = 0;
-        return;
-    }
-
-    ret = mpg123_read(amd->mh, NULL, 0, &size);
-    if (ret == MPG123_NEW_FORMAT)
-    {
-        if TRACE_ON(mpeg3)
+        ret = mpg123_feed(amd->mh, src, *nsrc);
+        if (ret != MPG123_OK)
         {
-            long rate;
-            int channels, enc;
-            mpg123_getformat(amd->mh, &rate, &channels, &enc);
-            TRACE("New format: %li Hz, %i channels, encoding value %i\n", rate, channels, enc);
+            ERR("Error feeding data\n");
+            *ndst = *nsrc = 0;
+            return;
         }
     }
-    else if (ret == MPG123_ERR)
-    {
-        FIXME("Error occurred during decoding!\n");
-        *ndst = *nsrc = 0;
-        return;
-    }
 
     do {
-        dpos += size;
-        if (*ndst - dpos < 4608) break;
+        size = 0;
         ret = mpg123_read(amd->mh, dst + dpos, *ndst - dpos, &size);
+        if (ret == MPG123_ERR)
+        {
+            FIXME("Error occurred during decoding!\n");
+            *ndst = *nsrc = 0;
+            return;
+        }
+
+        if (ret == MPG123_NEW_FORMAT)
+        {
+            if TRACE_ON(mpeg3)
+            {
+                long rate;
+                int channels, enc;
+                mpg123_getformat(amd->mh, &rate, &channels, &enc);
+                TRACE("New format: %li Hz, %i channels, encoding value %i\n", rate, channels, enc);
+            }
+        }
+        dpos += size;
     } while (ret == MPG123_OK);
     *ndst = dpos;
-    *nsrc = 0;
 }
 
 /***********************************************************************




More information about the wine-cvs mailing list