No subject


Wed Feb 11 21:28:26 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_17778_7329311.1235403333909
Content-Type: APPLICATION/OCTET-STREAM; name=msacm32_enumsuggest.bin
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=msacm32_enumsuggest.bin; size=4639

--- dlls/msacm32/format.c	2009-02-23 15:46:04.000000000 +0100
+++ dlls/msacm32/format.c	2009-02-23 16:03:04.000000000 +0100
@@ -441,43 +441,89 @@ static BOOL MSACM_FormatEnumHelper(PWINE
                                    DWORD_PTR dwInstance, DWORD fdwEnum)
 {
     ACMFORMATTAGDETAILSW	aftd;
-    unsigned int			i, j;
+    unsigned int		i, j;
 
-    for (i = 0; i < padid->cFormatTags; i++) {
+    if (fdwEnum & ACM_FORMATENUMF_SUGGEST) {
+	HDRVR hdrvr;
+	ACMDRVFORMATSUGGEST		adfs;
+	pafd->dwFormatIndex = 0;
 	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 */
+	memset(&adfs, 0, sizeof(adfs));
+	adfs.cbStruct = sizeof(adfs);
 
-	    if (!(fnCallback)((HACMDRIVERID)padid, pafd, dwInstance, padid->fdwSupport))
-		return FALSE;
-	}
+	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 +560,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_17778_7329311.1235403333909--




More information about the wine-patches mailing list