msacm32: acmFormatEnum: Implement ACM_FORMATENUMF_SUGGEST.

This commit is contained in:
Stefano Guidoni 2009-03-10 16:41:19 +01:00 committed by Alexandre Julliard
parent e1413faeb7
commit 3a54e89ff8
1 changed files with 75 additions and 32 deletions

View File

@ -443,6 +443,49 @@ static BOOL MSACM_FormatEnumHelper(PWINE_ACMDRIVERID padid, HACMDRIVER had,
ACMFORMATTAGDETAILSW aftd;
unsigned int i, j;
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);
@ -479,6 +522,7 @@ static BOOL MSACM_FormatEnumHelper(PWINE_ACMDRIVERID padid, HACMDRIVER had,
}
/* the "formats" used by the filters are also reported */
}
}
return TRUE;
}
@ -514,8 +558,7 @@ MMRESULT WINAPI acmFormatEnumW(HACMDRIVER had, PACMFORMATDETAILSW pafd,
(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) {