Stefano Guidoni : msacm32: acmFormatEnum: Implement ACM_FORMATENUMF_SUGGEST .
Alexandre Julliard
julliard at winehq.org
Fri Mar 13 09:14:01 CDT 2009
Module: wine
Branch: master
Commit: 3a54e89ff8c682f97c66d6e9c034ca0cd53f96c1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3a54e89ff8c682f97c66d6e9c034ca0cd53f96c1
Author: Stefano Guidoni <s.guidoni at tin.it>
Date: Tue Mar 10 16:41:19 2009 +0100
msacm32: acmFormatEnum: Implement ACM_FORMATENUMF_SUGGEST.
---
dlls/msacm32/format.c | 117 +++++++++++++++++++++++++++++++++---------------
1 files changed, 80 insertions(+), 37 deletions(-)
diff --git a/dlls/msacm32/format.c b/dlls/msacm32/format.c
index 0d5149c..1b20ce0 100644
--- a/dlls/msacm32/format.c
+++ b/dlls/msacm32/format.c
@@ -443,41 +443,85 @@ static BOOL MSACM_FormatEnumHelper(PWINE_ACMDRIVERID padid, HACMDRIVER had,
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(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) {
More information about the wine-cvs
mailing list