/*********************************************************************** * acmDriverID (MSACM32.@) */ MMRESULT WINAPI acmDriverID(HACMOBJ hao, PHACMDRIVERID phadid, DWORD fdwDriverID) { PWINE_ACMOBJ pao; TRACE("(%p, %p, %08x)\n", hao, phadid, fdwDriverID); if (fdwDriverID) { WARN("invalid flag\n"); return MMSYSERR_INVALFLAG; } pao = MSACM_GetObj(hao, WINE_ACMOBJ_DONTCARE); if (!pao) { WARN("invalid handle\n"); return MMSYSERR_INVALHANDLE; } if (!phadid) { WARN("invalid parameter\n"); return MMSYSERR_INVALPARAM; } *phadid = (HACMDRIVERID) pao->pACMDriverID; return MMSYSERR_NOERROR; }
/*********************************************************************** * acmDriverID (MSACM32.8) */ MMRESULT WINAPI acmDriverID(HACMOBJ hao, PHACMDRIVERID phadid, DWORD fdwDriverID) { PWINE_ACMOBJ pao; pao = MSACM_GetObj(hao); if (!pao) return MMSYSERR_INVALHANDLE; if (!phadid) return MMSYSERR_INVALPARAM; if (fdwDriverID) return MMSYSERR_INVALFLAG; *phadid = (HACMDRIVERID) pao->pACMDriverID; return MMSYSERR_NOERROR; }
/*********************************************************************** * MSACM_GetNotifyWnd() */ PWINE_ACMNOTIFYWND MSACM_GetNotifyWnd(HACMDRIVERID hDriver) { return (PWINE_ACMNOTIFYWND)MSACM_GetObj((HACMOBJ)hDriver, WINE_ACMOBJ_NOTIFYWND); }
/*********************************************************************** * MSACM_GetDriver() */ PWINE_ACMDRIVER MSACM_GetDriver(HACMDRIVER hDriver) { return (PWINE_ACMDRIVER)MSACM_GetObj((HACMOBJ)hDriver, WINE_ACMOBJ_DRIVER); }
/*********************************************************************** * MSACM_GetDriverID() */ PWINE_ACMDRIVERID MSACM_GetDriverID(HACMDRIVERID hDriverID) { return (PWINE_ACMDRIVERID)MSACM_GetObj((HACMOBJ)hDriverID, WINE_ACMOBJ_DRIVERID); }
/*********************************************************************** * acmMetrics (MSACM32.@) */ MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID pMetric) { PWINE_ACMOBJ pao = MSACM_GetObj(hao, WINE_ACMOBJ_DONTCARE); BOOL bLocal = TRUE; PWINE_ACMDRIVERID padid; DWORD val = 0; unsigned int i; MMRESULT mmr = MMSYSERR_NOERROR; TRACE("(%p, %d, %p);\n", hao, uMetric, pMetric); #define CheckLocal(padid) (!bLocal || ((padid)->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_LOCAL)) switch (uMetric) { case ACM_METRIC_COUNT_DRIVERS: bLocal = FALSE; /* fall through */ case ACM_METRIC_COUNT_LOCAL_DRIVERS: if (hao) return MMSYSERR_INVALHANDLE; if (!pMetric) return MMSYSERR_INVALPARAM; for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && CheckLocal(padid)) val++; *(LPDWORD)pMetric = val; break; case ACM_METRIC_COUNT_CODECS: bLocal = FALSE; /* fall through */ case ACM_METRIC_COUNT_LOCAL_CODECS: if (hao) return MMSYSERR_INVALHANDLE; if (!pMetric) return MMSYSERR_INVALPARAM; for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC) && CheckLocal(padid)) val++; *(LPDWORD)pMetric = val; break; case ACM_METRIC_COUNT_CONVERTERS: bLocal = FALSE; /* fall through */ case ACM_METRIC_COUNT_LOCAL_CONVERTERS: if (hao) return MMSYSERR_INVALHANDLE; if (!pMetric) return MMSYSERR_INVALPARAM; for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CONVERTER) && CheckLocal(padid)) val++; *(LPDWORD)pMetric = val; break; case ACM_METRIC_COUNT_FILTERS: bLocal = FALSE; /* fall through */ case ACM_METRIC_COUNT_LOCAL_FILTERS: if (hao) return MMSYSERR_INVALHANDLE; if (!pMetric) return MMSYSERR_INVALPARAM; for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_FILTER) && CheckLocal(padid)) val++; *(LPDWORD)pMetric = val; break; case ACM_METRIC_COUNT_DISABLED: bLocal = FALSE; /* fall through */ case ACM_METRIC_COUNT_LOCAL_DISABLED: if (hao) return MMSYSERR_INVALHANDLE; if (!pMetric) return MMSYSERR_INVALPARAM; for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) if ((padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && CheckLocal(padid)) val++; *(LPDWORD)pMetric = val; break; case ACM_METRIC_MAX_SIZE_FORMAT: if (hao == NULL) { for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) { if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED)) { for (i = 0; i < padid->cFormatTags; i++) { if (val < padid->aFormatTag[i].cbwfx) val = padid->aFormatTag[i].cbwfx; } } } } else if (pao != NULL) { switch (pao->dwType) { case WINE_ACMOBJ_DRIVER: case WINE_ACMOBJ_DRIVERID: padid = pao->pACMDriverID; break; default: return MMSYSERR_INVALHANDLE; } if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED)) { for (i = 0; i < padid->cFormatTags; i++) { if (val < padid->aFormatTag[i].cbwfx) val = padid->aFormatTag[i].cbwfx; } } } else { return MMSYSERR_INVALHANDLE; } if (!pMetric) return MMSYSERR_INVALPARAM; *(LPDWORD)pMetric = val; break; case ACM_METRIC_COUNT_HARDWARE: if (hao) return MMSYSERR_INVALHANDLE; if (!pMetric) return MMSYSERR_INVALPARAM; *(LPDWORD)pMetric = 0; FIXME("ACM_METRIC_COUNT_HARDWARE not implemented\n"); break; case ACM_METRIC_DRIVER_PRIORITY: /* Return current list position of driver */ if (!hao) return MMSYSERR_INVALHANDLE; mmr = MMSYSERR_INVALHANDLE; for (i = 1, padid = MSACM_pFirstACMDriverID; padid; i++, padid = padid->pNextACMDriverID) { if (padid == (PWINE_ACMDRIVERID)hao) { if (pMetric) { *(LPDWORD)pMetric = i; mmr = MMSYSERR_NOERROR; } else { mmr = MMSYSERR_INVALPARAM; } break; } } break; case ACM_METRIC_DRIVER_SUPPORT: /* Return fdwSupport for driver */ if (!hao) return MMSYSERR_INVALHANDLE; mmr = MMSYSERR_INVALHANDLE; for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) { if (padid == (PWINE_ACMDRIVERID)hao) { if (pMetric) { *(LPDWORD)pMetric = padid->fdwSupport; mmr = MMSYSERR_NOERROR; } else { mmr = MMSYSERR_INVALPARAM; } break; } } break; case ACM_METRIC_HARDWARE_WAVE_INPUT: case ACM_METRIC_HARDWARE_WAVE_OUTPUT: case ACM_METRIC_MAX_SIZE_FILTER: default: FIXME("(%p, %d, %p): stub\n", hao, uMetric, pMetric); mmr = MMSYSERR_NOTSUPPORTED; } return mmr; }