a few fixes in PCM conversion

eric pouech eric.pouech at wanadoo.fr
Fri Apr 13 15:34:07 CDT 2001


A+
-- 
---------------
Eric Pouech (http://perso.wanadoo.fr/eric.pouech/)
"The future will be better tomorrow", Vice President Dan Quayle
-------------- next part --------------
Name: msacm_pcm
ChangeLog: A few fixes...
GenDate: 2001/04/13 20:26:32 UTC
ModifiedFiles: dlls/msacm/pcmconverter.c
AddedFiles: 
===================================================================
RCS file: /usr/share/cvs/cvsroot/wine/wine/dlls/msacm/pcmconverter.c,v
retrieving revision 1.4
diff -u -u -r1.4 pcmconverter.c
--- dlls/msacm/pcmconverter.c	2001/01/26 20:43:43	1.4
+++ dlls/msacm/pcmconverter.c	2001/03/25 16:49:13
@@ -30,9 +30,11 @@
 /***********************************************************************
  *           PCM_drvOpen
  */
-static	DWORD	PCM_drvOpen(LPCSTR str)
+static	DWORD	PCM_drvOpen(LPCSTR str, PACMDRVOPENDESCW adod)
 {
-    return 1;
+    return 
+	adod->fccType == ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC &&
+	adod->fccComp == ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
 }
 
 /***********************************************************************
@@ -726,7 +728,7 @@
 	break;
     case ACM_FORMATTAGDETAILSF_LARGESTSIZE:
 	if (aftd->dwFormatTag != WAVE_FORMAT_UNKNOWN && 
-	    aftd->dwFormatTag != WAVE_FORMAT_UNKNOWN)
+	    aftd->dwFormatTag != WAVE_FORMAT_PCM)
 	    return ACMERR_NOTPOSSIBLE;
 	break;
     default:
@@ -752,8 +754,7 @@
 {
     switch (dwQuery) {
     case ACM_FORMATDETAILSF_FORMAT:
-	afd->dwFormatIndex = PCM_GetFormatIndex(afd->pwfx);
-	if (afd->dwFormatIndex == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
+	if (PCM_GetFormatIndex(afd->pwfx) == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
 	break;
     case ACM_FORMATDETAILSF_INDEX:
 	assert(afd->dwFormatIndex < NUM_PCM_FORMATS);
@@ -875,18 +876,21 @@
  */
 static	LRESULT PCM_StreamSize(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMSIZE adss)
 {
+    DWORD	srcMask = ~(adsi->pwfxSrc->nBlockAlign - 1);
+    DWORD	dstMask = ~(adsi->pwfxDst->nBlockAlign - 1);
+
     switch (adss->fdwSize) {
     case ACM_STREAMSIZEF_DESTINATION:
 	/* cbDstLength => cbSrcLength */
-	adss->cbSrcLength = PCM_round(adss->cbDstLength, 
+	adss->cbSrcLength = PCM_round(adss->cbDstLength & dstMask,
 				      adsi->pwfxSrc->nAvgBytesPerSec, 
-				      adsi->pwfxDst->nAvgBytesPerSec);
+				      adsi->pwfxDst->nAvgBytesPerSec) & srcMask;
 	break;
     case ACM_STREAMSIZEF_SOURCE:
 	/* cbSrcLength => cbDstLength */
-	adss->cbDstLength =  PCM_round(adss->cbSrcLength, 
+	adss->cbDstLength =  PCM_round(adss->cbSrcLength & srcMask,
 				       adsi->pwfxDst->nAvgBytesPerSec, 
-				       adsi->pwfxSrc->nAvgBytesPerSec);
+				       adsi->pwfxSrc->nAvgBytesPerSec) & dstMask;
 	break;
     default:
 	WARN("Unsupported query %08lx\n", adss->fdwSize);
@@ -954,7 +958,7 @@
     switch (wMsg) {
     case DRV_LOAD:		return 1;
     case DRV_FREE:		return 1;
-    case DRV_OPEN:		return PCM_drvOpen((LPSTR)dwParam1);
+    case DRV_OPEN:		return PCM_drvOpen((LPSTR)dwParam1, (PACMDRVOPENDESCW)dwParam2);
     case DRV_CLOSE:		return PCM_drvClose(dwDevID);
     case DRV_ENABLE:		return 1;	
     case DRV_DISABLE:		return 1;


More information about the wine-patches mailing list