/*********************************************************************** * acmFormatEnumW (MSACM32.@) */ static BOOL MSACM_FormatEnumHelper(PWINE_ACMDRIVERID padid, HACMDRIVER had, PACMFORMATDETAILSW pafd, PWAVEFORMATEX pwfxRef, ACMFORMATENUMCBW fnCallback, DWORD dwInstance, DWORD fdwEnum) { 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 */ } return TRUE; }
/*********************************************************************** * acmFormatTagDetailsA (MSACM32.@) */ MMRESULT WINAPI acmFormatTagDetailsA(HACMDRIVER had, PACMFORMATTAGDETAILSA paftda, DWORD fdwDetails) { ACMFORMATTAGDETAILSW aftdw; MMRESULT mmr; memset(&aftdw, 0, sizeof(aftdw)); aftdw.cbStruct = sizeof(aftdw); aftdw.dwFormatTagIndex = paftda->dwFormatTagIndex; aftdw.dwFormatTag = paftda->dwFormatTag; mmr = acmFormatTagDetailsW(had, &aftdw, fdwDetails); if (mmr == MMSYSERR_NOERROR) { paftda->dwFormatTag = aftdw.dwFormatTag; paftda->dwFormatTagIndex = aftdw.dwFormatTagIndex; paftda->cbFormatSize = aftdw.cbFormatSize; paftda->fdwSupport = aftdw.fdwSupport; paftda->cStandardFormats = aftdw.cStandardFormats; WideCharToMultiByte( CP_ACP, 0, aftdw.szFormatTag, -1, paftda->szFormatTag, sizeof(paftda->szFormatTag), NULL, NULL ); } return mmr; }
/*********************************************************************** * acmFormatEnumW (MSACM32.@) */ static BOOL MSACM_FormatEnumHelper(PWINE_ACMDRIVERID padid, HACMDRIVER had, PACMFORMATDETAILSW pafd, PWAVEFORMATEX pwfxRef, ACMFORMATENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum) { 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,(LPARAM)&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; }