No subject


Tue Mar 3 10:51:12 CST 2009


member
of
the ACMFORMATDETAILS structure is valid. The enumerator will
enumerate
all suggested destination formats for the given pwfx
format.".
Since
the WAVEFORMATEX structure is valid, there is no need
to cycle through
all the standard formats (moreover the WAVEFORMATEX
format could be not
a standard one).
_________________________
S. Guidoni 
------=_Part_82944_3743125.1236113023147
Content-Type: APPLICATION/OCTET-STREAM; name=msacm32_formatsuggest.bin
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=msacm32_formatsuggest.bin; 
	size=5306

--- dlls/msacm32/format.c~	2009-03-03 21:32:50.000000000 +0100
+++ dlls/msacm32/format.c	2009-03-03 21:08:39.000000000 +0100
@@ -443,41 +443,85 @@ static BOOL MSACM_FormatEnumHelper(PWINE
     ACMFORMATTAGDETAILSW	aftd;
     unsigned int			i, j;
 
-    for (i = 0; i < padid->cFormatTags; i++) {
-	memset(&aftd, 0, sizeof(aftd));
-	aftd.cbStruct = sizeof(aftd);
-	aftd.dwFormatTagIndex = i;
-	if (acmFormatTagDetailsW(had, &aftd, ACM_FORMATTAGDETAILSF_INDEX) != MMSYSERR_NOERROR)
-	    continue;
-
-	if ((fdwEnum & ACM_FORMATENUMF_WFORMATTAG) && aftd.dwFormatTag != pwfxRef->wFormatTag)
-	    continue;
-
-	for (j = 0; j < aftd.cStandardFormats; j++) {
-	    pafd->dwFormatIndex = j;
-	    pafd->dwFormatTag = aftd.dwFormatTag;
-	    if (acmFormatDetailsW(had, pafd, ACM_FORMATDETAILSF_INDEX) != MMSYSERR_NOERROR)
-		continue;
-
-	    if ((fdwEnum & ACM_FORMATENUMF_NCHANNELS) &&
-		pafd->pwfx->nChannels != pwfxRef->nChannels)
-		continue;
-	    if ((fdwEnum & ACM_FORMATENUMF_NSAMPLESPERSEC) &&
-		pafd->pwfx->nSamplesPerSec != pwfxRef->nSamplesPerSec)
-		continue;
-	    if ((fdwEnum & ACM_FORMATENUMF_WBITSPERSAMPLE) &&
-		pafd->pwfx->wBitsPerSample != pwfxRef->wBitsPerSample)
-		continue;
-	    if ((fdwEnum & ACM_FORMATENUMF_HARDWARE) &&
-		!(pafd->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_HARDWARE))
-		continue;
-
-	    /* more checks to be done on fdwEnum */
-
-	    if (!(fnCallback)((HACMDRIVERID)padid, pafd, dwInstance, padid->fdwSupport))
-		return FALSE;
-	}
-	/* the "formats" used by the filters are also reported */
+    if (fdwEnum & ACM_FORMATENUMF_SUGGEST) {
+        HDRVR hdrvr;
+        ACMDRVFORMATSUGGEST adfs;
+        pafd->dwFormatIndex = 0;
+        memset(&aftd, 0, sizeof(aftd));
+        aftd.cbStruct = sizeof(aftd);
+        memset(&adfs, 0, sizeof(adfs));
+        adfs.cbStruct = sizeof(adfs);
+
+        for (i = 0; i < padid->cFormatTags; i++) {
+            aftd.dwFormatTag = i;
+            pafd->dwFormatTag = aftd.dwFormatTag;
+            pafd->pwfx->wFormatTag = pafd->dwFormatTag;
+
+            if (acmFormatTagDetailsW(had, &aftd, ACM_FORMATTAGDETAILSF_INDEX) != MMSYSERR_NOERROR)
+                continue;
+
+            adfs.cbwfxSrc = aftd.cbFormatSize;
+            adfs.cbwfxDst = aftd.cbFormatSize;
+            adfs.pwfxSrc = pwfxRef;
+            adfs.pwfxDst = pafd->pwfx;
+            pafd->fdwSupport = padid->fdwSupport;
+
+            if ((fdwEnum & ACM_FORMATENUMF_WFORMATTAG) && 
+                aftd.dwFormatTag != pwfxRef->wFormatTag)
+                continue;
+
+            if ((fdwEnum & ACM_FORMATENUMF_HARDWARE) &&
+                !(pafd->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_HARDWARE))
+                continue;
+
+            hdrvr = OpenDriver(padid->pszFileName,0,0);
+            SendDriverMessage(hdrvr,ACMDM_FORMAT_SUGGEST,(DWORD)&adfs,(fdwEnum & 0x000000FFL));
+
+            if (acmFormatDetailsW(had, pafd, ACM_FORMATDETAILSF_FORMAT) != MMSYSERR_NOERROR)
+                continue;
+
+            pafd->cbwfx = sizeof(*(pafd->pwfx));
+
+            if (!(fnCallback)((HACMDRIVERID)padid, pafd, dwInstance, padid->fdwSupport))
+                return FALSE;
+        }
+    } else {
+        for (i = 0; i < padid->cFormatTags; i++) {
+            memset(&aftd, 0, sizeof(aftd));
+            aftd.cbStruct = sizeof(aftd);
+            aftd.dwFormatTagIndex = i;
+            if (acmFormatTagDetailsW(had, &aftd, ACM_FORMATTAGDETAILSF_INDEX) != MMSYSERR_NOERROR)
+                continue;
+
+            if ((fdwEnum & ACM_FORMATENUMF_WFORMATTAG) && aftd.dwFormatTag != pwfxRef->wFormatTag)
+                continue;
+
+            for (j = 0; j < aftd.cStandardFormats; j++) {
+                pafd->dwFormatIndex = j;
+                pafd->dwFormatTag = aftd.dwFormatTag;
+                if (acmFormatDetailsW(had, pafd, ACM_FORMATDETAILSF_INDEX) != MMSYSERR_NOERROR)
+                    continue;
+
+                if ((fdwEnum & ACM_FORMATENUMF_NCHANNELS) &&
+                    pafd->pwfx->nChannels != pwfxRef->nChannels)
+                    continue;
+                if ((fdwEnum & ACM_FORMATENUMF_NSAMPLESPERSEC) &&
+                    pafd->pwfx->nSamplesPerSec != pwfxRef->nSamplesPerSec)
+                    continue;
+                if ((fdwEnum & ACM_FORMATENUMF_WBITSPERSAMPLE) &&
+                    pafd->pwfx->wBitsPerSample != pwfxRef->wBitsPerSample)
+                    continue;
+                if ((fdwEnum & ACM_FORMATENUMF_HARDWARE) &&
+                    !(pafd->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_HARDWARE))
+                    continue;
+
+            /* more checks to be done on fdwEnum */
+
+                if (!(fnCallback)((HACMDRIVERID)padid, pafd, dwInstance, padid->fdwSupport))
+                    return FALSE;
+            }
+        /* the "formats" used by the filters are also reported */
+        }
     }
     return TRUE;
 }
@@ -514,8 +558,7 @@ MMRESULT WINAPI acmFormatEnumW(HACMDRIVE
 	(pafd->dwFormatTag != pafd->pwfx->wFormatTag))
 	return MMSYSERR_INVALPARAM;
 
-    if (fdwEnum & (ACM_FORMATENUMF_CONVERT|ACM_FORMATENUMF_SUGGEST|
-		   ACM_FORMATENUMF_INPUT|ACM_FORMATENUMF_OUTPUT))
+    if (fdwEnum & (ACM_FORMATENUMF_CONVERT|ACM_FORMATENUMF_INPUT|ACM_FORMATENUMF_OUTPUT))
 	FIXME("Unsupported fdwEnum values %08x\n", fdwEnum);
 
     if (had) {

------=_Part_82944_3743125.1236113023147--




More information about the wine-patches mailing list