Alex Villacís Lasso : winemp3: Increase factor from 4 to 12 in MPEG3_StreamSize.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Feb 14 10:46:38 CST 2006


Module: wine
Branch: refs/heads/master
Commit: 2382e58b4c3825dc6044080e01e1171a36717dc0
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=2382e58b4c3825dc6044080e01e1171a36717dc0

Author: Alex Villacís Lasso <a_villacis at palosanto.com>
Date:   Tue Feb 14 17:12:19 2006 +0100

winemp3: Increase factor from 4 to 12 in MPEG3_StreamSize.
- Increase size factor from 4 to 12 in MPEG_StreamSize, otherwise
  mpglib buffer queue grows.
- Add TRACE of mpglib buffer queue for conversion.

---

 dlls/msacm/winemp3/mpegl3.c |   27 +++++++++++++++++++++++----
 1 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/dlls/msacm/winemp3/mpegl3.c b/dlls/msacm/winemp3/mpegl3.c
index 63e1fe6..66f594d 100644
--- a/dlls/msacm/winemp3/mpegl3.c
+++ b/dlls/msacm/winemp3/mpegl3.c
@@ -142,6 +142,17 @@ static inline void  W16(unsigned char* d
     dst[1] = HIBYTE(s);
 }
 
+static DWORD get_num_buffered_bytes(struct mpstr *mp)
+{
+    DWORD numBuff = 0;
+    struct buf * p = mp->tail;
+    while (p) {
+        numBuff += p->size - p->pos;
+        p = p->next;
+    }
+    return numBuff;
+}
+
 static void mp3_horse(PACMDRVSTREAMINSTANCE adsi,
                       const unsigned char* src, LPDWORD nsrc,
                       unsigned char* dst, LPDWORD ndst)
@@ -149,8 +160,13 @@ static void mp3_horse(PACMDRVSTREAMINSTA
     AcmMpeg3Data*       amd = (AcmMpeg3Data*)adsi->dwDriver;
     int                 size, ret;
     DWORD               dpos = 0;
+    DWORD               buffered_before;
+    DWORD               buffered_during;
+    DWORD               buffered_after;
 
+    buffered_before = get_num_buffered_bytes(&amd->mp);
     ret = decodeMP3(&amd->mp, src, *nsrc, dst, *ndst, &size);
+    buffered_during = get_num_buffered_bytes(&amd->mp);
     if (ret != MP3_OK)
     {
         *ndst = *nsrc = 0;
@@ -163,6 +179,9 @@ static void mp3_horse(PACMDRVSTREAMINSTA
                         dst + dpos, *ndst - dpos, &size);
     } while (ret == MP3_OK);
     *ndst = dpos;
+
+    buffered_after = get_num_buffered_bytes(&amd->mp);
+    TRACE("before %ld put %ld during %ld after %ld\n", buffered_before, *nsrc, buffered_during, buffered_after);
 }
 
 /***********************************************************************
@@ -466,13 +485,13 @@ static	LRESULT MPEG3_StreamSize(PACMDRVS
 	    adsi->pwfxDst->wFormatTag == WAVE_FORMAT_MPEGLAYER3)
         {
 	    /* don't take block overhead into account, doesn't matter too much */
-	    adss->cbSrcLength = adss->cbDstLength * 4;
+	    adss->cbSrcLength = adss->cbDstLength * 12;
 	}
         else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_MPEGLAYER3 &&
                  adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
         {
 	    FIXME("misses the block header overhead\n");
-	    adss->cbSrcLength = 256 + adss->cbDstLength / 4;
+	    adss->cbSrcLength = 256 + adss->cbDstLength / 12;
 	}
         else
         {
@@ -485,13 +504,13 @@ static	LRESULT MPEG3_StreamSize(PACMDRVS
 	    adsi->pwfxDst->wFormatTag == WAVE_FORMAT_MPEGLAYER3)
         {
 	    FIXME("misses the block header overhead\n");
-	    adss->cbDstLength = 256 + adss->cbSrcLength / 4;
+	    adss->cbDstLength = 256 + adss->cbSrcLength / 12;
 	}
         else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_MPEGLAYER3 &&
                  adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
         {
 	    /* don't take block overhead into account, doesn't matter too much */
-	    adss->cbDstLength = adss->cbSrcLength * 4;
+	    adss->cbDstLength = adss->cbSrcLength * 12;
 	}
         else
         {




More information about the wine-cvs mailing list