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