Mimic more closely Windows' behavior (a MSACM driver is always opened
twice: first time for info gathering, subsequent openings for
conversions).
Added format suggestion for PCM.
Cleaned up internal structures.
diff --git a/dlls/msacm/msacm32_main.c b/dlls/msacm/msacm32_main.c
index 09ab89c..320caff 100644
--- a/dlls/msacm/msacm32_main.c
+++ b/dlls/msacm/msacm32_main.c
@@ -106,7 +106,7 @@
case ACM_METRIC_COUNT_LOCAL_DRIVERS:
if (hao) return MMSYSERR_INVALHANDLE;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
- if (padid->bEnabled && CheckLocal(padid))
+ if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && CheckLocal(padid))
val++;
*(LPDWORD)pMetric = val;
break;
@@ -117,8 +117,9 @@
case ACM_METRIC_COUNT_LOCAL_CODECS:
if (hao) return MMSYSERR_INVALHANDLE;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
- if (padid->bEnabled && (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC)
- && CheckLocal(padid))
+ if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) &&
+ (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC) &&
+ CheckLocal(padid))
val++;
*(LPDWORD)pMetric = val;
break;
@@ -129,8 +130,9 @@
case ACM_METRIC_COUNT_LOCAL_CONVERTERS:
if (hao) return MMSYSERR_INVALHANDLE;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
- if (padid->bEnabled && (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CONVERTER)
- && CheckLocal(padid))
+ if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) &&
+ (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CONVERTER) &&
+ CheckLocal(padid))
val++;
*(LPDWORD)pMetric = val;
break;
@@ -141,8 +143,9 @@
case ACM_METRIC_COUNT_LOCAL_FILTERS:
if (hao) return MMSYSERR_INVALHANDLE;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
- if (padid->bEnabled && (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_FILTER)
- && CheckLocal(padid))
+ if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) &&
+ (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_FILTER) &&
+ CheckLocal(padid))
val++;
*(LPDWORD)pMetric = val;
break;
@@ -153,7 +156,7 @@
case ACM_METRIC_COUNT_LOCAL_DISABLED:
if (hao) return MMSYSERR_INVALHANDLE;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
- if (!padid->bEnabled && CheckLocal(padid))
+ if ((padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && CheckLocal(padid))
val++;
*(LPDWORD)pMetric = val;
break;
@@ -161,7 +164,7 @@
case ACM_METRIC_MAX_SIZE_FORMAT:
if (hao == (HACMOBJ)NULL) {
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) {
- if (padid->bEnabled) {
+ if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED)) {
for (i = 0; i < padid->cFormatTags; i++) {
if (val < padid->aFormatTag[i].cbwfx)
val = padid->aFormatTag[i].cbwfx;
@@ -177,7 +180,7 @@
default:
return MMSYSERR_INVALHANDLE;
}
- if (padid->bEnabled) {
+ if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED)) {
for (i = 0; i < padid->cFormatTags; i++) {
if (val < padid->aFormatTag[i].cbwfx)
val = padid->aFormatTag[i].cbwfx;