Added the ability to open several streams on the same driver.
Added a few acmMetrics options.

diff --git a/dlls/msacm32/msacm32_main.c b/dlls/msacm32/msacm32_main.c
index d46ce27..86437b3 100644
--- a/dlls/msacm32/msacm32_main.c
+++ b/dlls/msacm32/msacm32_main.c
@@ -87,36 +87,73 @@
  */
 MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID  pMetric)
 {
-    PWINE_ACMOBJ pao = MSACM_GetObj(hao);
-    BOOL bLocal = TRUE;
-    
+    PWINE_ACMOBJ 	pao = MSACM_GetObj(hao);
+    BOOL 		bLocal = TRUE;
+    PWINE_ACMDRIVERID	padid;
+    DWORD		val = 0;
+
     FIXME("(0x%08x, %d, %p): stub\n", hao, uMetric, pMetric);
     
     switch (uMetric) {
     case ACM_METRIC_COUNT_DRIVERS:
 	bLocal = FALSE;
+	/* fall thru */
     case ACM_METRIC_COUNT_LOCAL_DRIVERS:
 	if (!pao)
-	    return MMSYSERR_INVALHANDLE;  
-	return MMSYSERR_NOTSUPPORTED;
+	    return MMSYSERR_INVALHANDLE;
+	for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
+	    if (padid->bEnabled /* && (local(padid) || !bLocal) */)
+		val++;
+	*(LPDWORD)pMetric = val;
+	return 0;
+
     case ACM_METRIC_COUNT_CODECS:
+	if (!pao)
+	    return MMSYSERR_INVALHANDLE;
 	bLocal = FALSE;
+	/* fall thru */
     case ACM_METRIC_COUNT_LOCAL_CODECS:
-	return MMSYSERR_NOTSUPPORTED;
+	/* FIXME: don't know how to differentiate codec, converters & filters yet */
+	for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
+	    if (padid->bEnabled /* && (local(padid) || !bLocal) */)
+		val++;
+	*(LPDWORD)pMetric = val;
+	return 0;
+
     case ACM_METRIC_COUNT_CONVERTERS:
 	bLocal = FALSE;
+	/* fall thru */
     case ACM_METRIC_COUNT_LOCAL_CONVERTERS:
-	return MMSYSERR_NOTSUPPORTED;
+	/* FIXME: don't know how to differentiate codec, converters & filters yet */
+	for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
+	    if (padid->bEnabled /* && (local(padid) || !bLocal) */)
+		val++;
+	*(LPDWORD)pMetric = val;
+	return 0;
+
     case ACM_METRIC_COUNT_FILTERS:
 	bLocal = FALSE;
+	/* fall thru */
     case ACM_METRIC_COUNT_LOCAL_FILTERS:
-	return MMSYSERR_NOTSUPPORTED;
+	/* FIXME: don't know how to differentiate codec, converters & filters yet */
+	for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
+	    if (padid->bEnabled /* && (local(padid) || !bLocal) */)
+		val++;
+	*(LPDWORD)pMetric = val;
+	return 0;
+
     case ACM_METRIC_COUNT_DISABLED:
 	bLocal = FALSE;
+	/* fall thru */
     case ACM_METRIC_COUNT_LOCAL_DISABLED:
 	if (!pao)
 	    return MMSYSERR_INVALHANDLE;  
-	return MMSYSERR_NOTSUPPORTED;
+	for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
+	    if (!padid->bEnabled /* && (local(padid) || !bLocal) */)
+		val++;
+	*(LPDWORD)pMetric = val;
+	return 0;
+
     case ACM_METRIC_COUNT_HARDWARE:
     case ACM_METRIC_HARDWARE_WAVE_INPUT:
     case ACM_METRIC_HARDWARE_WAVE_OUTPUT: