Stefano Guidoni : winemp3: Rounding block count up in mpeg3_streamsize.

Alexandre Julliard julliard at winehq.org
Mon Apr 6 09:00:35 CDT 2009


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

Author: Stefano Guidoni <s.guidoni at tin.it>
Date:   Sun Apr  5 23:17:27 2009 +0100

winemp3: Rounding block count up in mpeg3_streamsize.

---

 dlls/winemp3.acm/mpegl3.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/dlls/winemp3.acm/mpegl3.c b/dlls/winemp3.acm/mpegl3.c
index 3ebd94c..f30bfef 100644
--- a/dlls/winemp3.acm/mpegl3.c
+++ b/dlls/winemp3.acm/mpegl3.c
@@ -490,8 +490,7 @@ static	LRESULT MPEG3_StreamSize(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMSIZE ad
 	if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
 	    adsi->pwfxDst->wFormatTag == WAVE_FORMAT_MPEGLAYER3)
         {
-            nblocks = (adsi->pwfxDst->nAvgBytesPerSec * 8 * 144 / adsi->pwfxDst->nSamplesPerSec);
-            nblocks = (adss->cbDstLength - 3002 - nblocks) / nblocks;
+            nblocks = (adss->cbDstLength - 3000) / (DWORD)(adsi->pwfxDst->nAvgBytesPerSec * 1152 / adsi->pwfxDst->nSamplesPerSec + 0.5);
             if (nblocks == 0)
                 return ACMERR_NOTPOSSIBLE;
             adss->cbSrcLength = nblocks * 1152 * adsi->pwfxSrc->nBlockAlign;
@@ -502,7 +501,7 @@ static	LRESULT MPEG3_StreamSize(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMSIZE ad
             nblocks = adss->cbDstLength / (adsi->pwfxDst->nBlockAlign * 1152);
             if (nblocks == 0)
                 return ACMERR_NOTPOSSIBLE;
-            adss->cbSrcLength = nblocks * (DWORD)(adsi->pwfxSrc->nAvgBytesPerSec * 8 * 144 / adsi->pwfxSrc->nSamplesPerSec);
+            adss->cbSrcLength = nblocks * (DWORD)(adsi->pwfxSrc->nAvgBytesPerSec * 1152 / adsi->pwfxSrc->nSamplesPerSec);
 	}
         else
         {
@@ -517,15 +516,20 @@ static	LRESULT MPEG3_StreamSize(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMSIZE ad
             nblocks = adss->cbSrcLength / (adsi->pwfxSrc->nBlockAlign * 1152);
             if (nblocks == 0)
                 return ACMERR_NOTPOSSIBLE;
-            adss->cbDstLength = nblocks * (DWORD)(adsi->pwfxDst->nAvgBytesPerSec * 8 * 144 / adsi->pwfxDst->nSamplesPerSec);
+            if (adss->cbSrcLength % (DWORD)(adsi->pwfxSrc->nBlockAlign * 1152))
+                /* Round block count up. */
+                nblocks++;
+            adss->cbDstLength = 3000 + nblocks * (DWORD)(adsi->pwfxDst->nAvgBytesPerSec * 1152 / adsi->pwfxDst->nSamplesPerSec + 0.5);
 	}
         else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_MPEGLAYER3 &&
                  adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
         {
-            nblocks = (adsi->pwfxSrc->nAvgBytesPerSec * 8 * 144 / adsi->pwfxSrc->nSamplesPerSec);
-            nblocks = (adss->cbSrcLength - 3002 - nblocks) / nblocks;
+            nblocks = adss->cbSrcLength / (DWORD)(adsi->pwfxSrc->nAvgBytesPerSec * 1152 / adsi->pwfxSrc->nSamplesPerSec);
             if (nblocks == 0)
                 return ACMERR_NOTPOSSIBLE;
+            if (adss->cbSrcLength % (DWORD)(adsi->pwfxSrc->nAvgBytesPerSec * 1152 / adsi->pwfxSrc->nSamplesPerSec))
+                /* Round block count up. */
+                nblocks++;
             adss->cbDstLength = nblocks * 1152 * adsi->pwfxDst->nBlockAlign;
 	}
         else




More information about the wine-cvs mailing list