static void driver_tests(void) { MMRESULT rc; DWORD dwACMVersion = acmGetVersion(); if (winetest_interactive) { trace("ACM version = %u.%02u build %u%s\n", HIWORD(dwACMVersion) >> 8, HIWORD(dwACMVersion) & 0xff, LOWORD(dwACMVersion), LOWORD(dwACMVersion) == 0 ? " (Retail)" : ""); } check_count(ACM_METRIC_COUNT_CODECS); check_count(ACM_METRIC_COUNT_CONVERTERS); check_count(ACM_METRIC_COUNT_DISABLED); check_count(ACM_METRIC_COUNT_DRIVERS); check_count(ACM_METRIC_COUNT_FILTERS); check_count(ACM_METRIC_COUNT_HARDWARE); check_count(ACM_METRIC_COUNT_LOCAL_CODECS); check_count(ACM_METRIC_COUNT_LOCAL_CONVERTERS); check_count(ACM_METRIC_COUNT_LOCAL_DISABLED); check_count(ACM_METRIC_COUNT_LOCAL_DRIVERS); check_count(ACM_METRIC_COUNT_LOCAL_FILTERS); if (winetest_interactive) trace("enabled drivers:\n"); rc = acmDriverEnum(DriverEnumProc, 0, 0); ok(rc == MMSYSERR_NOERROR, "acmDriverEnum() failed, rc=%08x, should be 0x%08x\n", rc, MMSYSERR_NOERROR); }
/*********************************************************************** * acmDriverOpen (MSACM32.@) */ MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen) { PWINE_ACMDRIVERID padid; PWINE_ACMDRIVER pad = NULL; MMRESULT ret; TRACE("(%p, %p, %08u)\n", phad, hadid, fdwOpen); if (!phad) { WARN("invalid parameter\n"); return MMSYSERR_INVALPARAM; } if (fdwOpen) { WARN("invalid flag\n"); return MMSYSERR_INVALFLAG; } padid = MSACM_GetDriverID(hadid); if (!padid) { WARN("invalid handle\n"); return MMSYSERR_INVALHANDLE; } pad = HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVER)); if (!pad) { WARN("no memory\n"); return MMSYSERR_NOMEM; } pad->obj.dwType = WINE_ACMOBJ_DRIVER; pad->obj.pACMDriverID = padid; pad->hDrvr = 0; pad->pLocalDrvrInst = NULL; if (padid->pLocalDriver == NULL) { ACMDRVOPENDESCW adod; int len; LPWSTR section_name; /* this is not an externally added driver... need to actually load it */ if (!padid->pszDriverAlias) { ret = MMSYSERR_ERROR; goto gotError; } adod.cbStruct = sizeof(adod); adod.fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC; adod.fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED; adod.dwVersion = acmGetVersion(); adod.dwFlags = fdwOpen; adod.dwError = 0; len = strlen("Drivers32") + 1; section_name = HeapAlloc(MSACM_hHeap, 0, len * sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, "Drivers32", -1, section_name, len); adod.pszSectionName = section_name; adod.pszAliasName = padid->pszDriverAlias; adod.dnDevNode = 0; pad->hDrvr = OpenDriver(padid->pszDriverAlias, NULL, (DWORD_PTR)&adod); HeapFree(MSACM_hHeap, 0, section_name); if (!pad->hDrvr) { ret = adod.dwError; if (ret == MMSYSERR_NOERROR) ret = MMSYSERR_NODRIVER; goto gotError; } } else { ACMDRVOPENDESCW adod; pad->hDrvr = NULL; adod.cbStruct = sizeof(adod); adod.fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC; adod.fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED; adod.dwVersion = acmGetVersion(); adod.dwFlags = fdwOpen; adod.dwError = 0; adod.pszSectionName = NULL; adod.pszAliasName = NULL; adod.dnDevNode = 0; pad->pLocalDrvrInst = MSACM_OpenLocalDriver(padid->pLocalDriver, (DWORD_PTR)&adod); if (!pad->pLocalDrvrInst) { ret = adod.dwError; if (ret == MMSYSERR_NOERROR) ret = MMSYSERR_NODRIVER; goto gotError; } } /* insert new pad at beg of list */ pad->pNextACMDriver = padid->pACMDriverList; padid->pACMDriverList = pad; /* FIXME: Create a WINE_ACMDRIVER32 */ *phad = (HACMDRIVER)pad; TRACE("%s => %p\n", debugstr_w(padid->pszDriverAlias), pad); return MMSYSERR_NOERROR; gotError: WARN("failed: ret = %08x\n", ret); if (pad && !pad->hDrvr) HeapFree(MSACM_hHeap, 0, pad); return ret; }
/*********************************************************************** * acmGetVersion (MSACM.7) */ DWORD WINAPI acmGetVersion16(void) { return acmGetVersion(); }