[PATCH] msacm32: Make ACM driver details match native more closely

Andrew Eikum aeikum at codeweavers.com
Tue May 26 15:09:31 CDT 2015


---

This should fix Bug 8653.

 dlls/imaadp32.acm/imaadp32.c |  4 ++--
 dlls/msacm32/pcmconverter.c  |  6 +++---
 dlls/msacm32/tests/msacm.c   | 24 ++++++++++++++++++++++++
 dlls/msadp32.acm/msadp32.c   |  4 ++--
 dlls/msg711.acm/msg711.c     |  6 +++---
 dlls/msgsm32.acm/msgsm32.c   |  4 ++--
 dlls/winemp3.acm/mpegl3.c    |  6 +++---
 include/mmreg.h              | 12 ++++++++++++
 8 files changed, 51 insertions(+), 15 deletions(-)

diff --git a/dlls/imaadp32.acm/imaadp32.c b/dlls/imaadp32.acm/imaadp32.c
index 19c2ae2..c5c65f6 100644
--- a/dlls/imaadp32.acm/imaadp32.c
+++ b/dlls/imaadp32.acm/imaadp32.c
@@ -507,8 +507,8 @@ static	LRESULT ADPCM_DriverDetails(PACMDRIVERDETAILSW add)
 {
     add->fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC;
     add->fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
-    add->wMid = 0x1;
-    add->wPid = 0x22;
+    add->wMid = MM_MICROSOFT;
+    add->wPid = MM_MSFT_ACM_IMAADPCM;
     add->vdwACM = 0x3320000;
     add->vdwDriver = 0x04000000;
     add->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
diff --git a/dlls/msacm32/pcmconverter.c b/dlls/msacm32/pcmconverter.c
index 9bfed20..cf92d93 100644
--- a/dlls/msacm32/pcmconverter.c
+++ b/dlls/msacm32/pcmconverter.c
@@ -723,15 +723,15 @@ static	LRESULT PCM_DriverDetails(PACMDRIVERDETAILSW add)
 
     add->fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC;
     add->fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
-    add->wMid = 0xFF;
-    add->wPid = 0x00;
+    add->wMid = MM_MICROSOFT;
+    add->wPid = MM_MSFT_ACM_PCM;
     add->vdwACM = 0x01000000;
     add->vdwDriver = 0x01000000;
     add->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CONVERTER;
     add->cFormatTags = 1;
     add->cFilterTags = 0;
     add->hicon = NULL;
-    MultiByteToWideChar( CP_ACP, 0, "WINE-PCM", -1,
+    MultiByteToWideChar( CP_ACP, 0, "MS-PCM", -1,
                          add->szShortName, sizeof(add->szShortName)/sizeof(WCHAR) );
     MultiByteToWideChar( CP_ACP, 0, "Wine PCM converter", -1,
                          add->szLongName, sizeof(add->szLongName)/sizeof(WCHAR) );
diff --git a/dlls/msacm32/tests/msacm.c b/dlls/msacm32/tests/msacm.c
index c36bdbf..747c5fe 100644
--- a/dlls/msacm32/tests/msacm.c
+++ b/dlls/msacm32/tests/msacm.c
@@ -127,8 +127,30 @@ static BOOL CALLBACK DriverEnumProc(HACMDRIVERID hadid,
        TODO: should it be *exactly* sizeof(dd), as tested here?
      */
     if (rc == MMSYSERR_NOERROR) {
+        struct {
+            const char *shortname;
+            const WORD mid;
+            const WORD pid;
+        } *iter, expected_ids[] = {
+            { "Microsoft IMA ADPCM", MM_MICROSOFT, MM_MSFT_ACM_IMAADPCM },
+            { "MS-ADPCM", MM_MICROSOFT, MM_MSFT_ACM_MSADPCM },
+            { "Microsoft CCITT G.711", MM_MICROSOFT, MM_MSFT_ACM_G711},
+            { "MPEG Layer-3 Codec", MM_FRAUNHOFER_IIS, MM_FHGIIS_MPEGLAYER3_DECODE },
+            { "MS-PCM", MM_MICROSOFT, MM_MSFT_ACM_PCM },
+            { 0 }
+        };
+
         ok(dd.cbStruct == sizeof(dd),
             "acmDriverDetailsA(): cbStruct = %08x\n", dd.cbStruct);
+
+        for (iter = expected_ids; iter->shortname; ++iter) {
+            if (dd.szShortName && !strcmp(iter->shortname, dd.szShortName)) {
+                ok(iter->mid == dd.wMid && iter->pid == dd.wPid,
+                        "Got wrong manufacturer (0x%x vs 0x%x) or product (0x%x vs 0x%x)\n",
+                        dd.wMid, iter->mid,
+                        dd.wPid, iter->pid);
+            }
+        }
     }
 
     if (rc == MMSYSERR_NOERROR && winetest_interactive) {
@@ -139,6 +161,8 @@ static BOOL CALLBACK DriverEnumProc(HACMDRIVERID hadid,
         trace("  Features: %s\n", dd.szFeatures);
         trace("  Supports %u formats\n", dd.cFormatTags);
         trace("  Supports %u filter formats\n", dd.cFilterTags);
+        trace("  Mid: 0x%x\n", dd.wMid);
+        trace("  Pid: 0x%x\n", dd.wPid);
     }
 
     /* try bad pointer */
diff --git a/dlls/msadp32.acm/msadp32.c b/dlls/msadp32.acm/msadp32.c
index 59f71b5..83d1b46 100644
--- a/dlls/msadp32.acm/msadp32.c
+++ b/dlls/msadp32.acm/msadp32.c
@@ -372,8 +372,8 @@ static	LRESULT ADPCM_DriverDetails(PACMDRIVERDETAILSW add)
 {
     add->fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC;
     add->fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
-    add->wMid = 0xFF;
-    add->wPid = 0x00;
+    add->wMid = MM_MICROSOFT;
+    add->wPid = MM_MSFT_ACM_MSADPCM;
     add->vdwACM = 0x01000000;
     add->vdwDriver = 0x01000000;
     add->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
diff --git a/dlls/msg711.acm/msg711.c b/dlls/msg711.acm/msg711.c
index f6f2ae6..e74d329 100644
--- a/dlls/msg711.acm/msg711.c
+++ b/dlls/msg711.acm/msg711.c
@@ -653,15 +653,15 @@ static	LRESULT G711_DriverDetails(PACMDRIVERDETAILSW add)
 {
     add->fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC;
     add->fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
-    add->wMid = 0xFF;
-    add->wPid = 0x00;
+    add->wMid = MM_MICROSOFT;
+    add->wPid = MM_MSFT_ACM_G711;
     add->vdwACM = 0x01000000;
     add->vdwDriver = 0x01000000;
     add->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
     add->cFormatTags = 3; /* PCM, G711 A-LAW & MU-LAW */
     add->cFilterTags = 0;
     add->hicon = NULL;
-    MultiByteToWideChar( CP_ACP, 0, "WINE-G711", -1,
+    MultiByteToWideChar( CP_ACP, 0, "Microsoft CCITT G.711", -1,
                          add->szShortName, sizeof(add->szShortName)/sizeof(WCHAR) );
     MultiByteToWideChar( CP_ACP, 0, "Wine G711 converter", -1,
                          add->szLongName, sizeof(add->szLongName)/sizeof(WCHAR) );
diff --git a/dlls/msgsm32.acm/msgsm32.c b/dlls/msgsm32.acm/msgsm32.c
index c32c656..cce1303 100644
--- a/dlls/msgsm32.acm/msgsm32.c
+++ b/dlls/msgsm32.acm/msgsm32.c
@@ -117,14 +117,14 @@ static	LRESULT GSM_DriverDetails(PACMDRIVERDETAILSW add)
     add->fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
     /* Details found from probing native msgsm32.acm */
     add->wMid = MM_MICROSOFT;
-    add->wPid = 36;
+    add->wPid = MM_MSFT_ACM_GSM610;
     add->vdwACM = 0x3320000;
     add->vdwDriver = 0x4000000;
     add->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
     add->cFormatTags = 2;
     add->cFilterTags = 0;
     add->hicon = NULL;
-    MultiByteToWideChar( CP_ACP, 0, "Wine GSM 6.10", -1,
+    MultiByteToWideChar( CP_ACP, 0, "Microsoft GSM 6.10", -1,
                          add->szShortName, sizeof(add->szShortName)/sizeof(WCHAR) );
     MultiByteToWideChar( CP_ACP, 0, "Wine GSM 6.10 libgsm codec", -1,
                          add->szLongName, sizeof(add->szLongName)/sizeof(WCHAR) );
diff --git a/dlls/winemp3.acm/mpegl3.c b/dlls/winemp3.acm/mpegl3.c
index 57193b3..37993b4 100644
--- a/dlls/winemp3.acm/mpegl3.c
+++ b/dlls/winemp3.acm/mpegl3.c
@@ -658,15 +658,15 @@ static	LRESULT MPEG3_DriverDetails(PACMDRIVERDETAILSW add)
 {
     add->fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC;
     add->fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
-    add->wMid = 0xFF;
-    add->wPid = 0x00;
+    add->wMid = MM_FRAUNHOFER_IIS;
+    add->wPid = MM_FHGIIS_MPEGLAYER3_DECODE;
     add->vdwACM = 0x01000000;
     add->vdwDriver = 0x01000000;
     add->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
     add->cFormatTags = 3; /* PCM, MPEG3 */
     add->cFilterTags = 0;
     add->hicon = NULL;
-    MultiByteToWideChar( CP_ACP, 0, "WINE-MPEG3", -1,
+    MultiByteToWideChar( CP_ACP, 0, "MPEG Layer-3 Codec", -1,
                          add->szShortName, sizeof(add->szShortName)/sizeof(WCHAR) );
     MultiByteToWideChar( CP_ACP, 0, "Wine MPEG3 decoder", -1,
                          add->szLongName, sizeof(add->szLongName)/sizeof(WCHAR) );
diff --git a/include/mmreg.h b/include/mmreg.h
index 64a3991..08517a8 100644
--- a/include/mmreg.h
+++ b/include/mmreg.h
@@ -115,6 +115,18 @@ typedef struct _WAVEFORMATEX {
 #define  WAVE_FORMAT_OLISBC			0x1003	/*  Ing C. Olivetti & C., S.p.A.  */
 #define  WAVE_FORMAT_OLIOPR			0x1004	/*  Ing C. Olivetti & C., S.p.A.  */
 
+#ifndef MM_MICROSOFT
+#define MM_MICROSOFT 0x01
+#endif
+#define MM_MSFT_ACM_MSADPCM 0x21
+#define MM_MSFT_ACM_IMAADPCM 0x22
+#define MM_MSFT_ACM_GSM610 0x24
+#define MM_MSFT_ACM_G711 0x25
+#define MM_MSFT_ACM_PCM 0x26
+
+#define MM_FRAUNHOFER_IIS 0xAC
+#define MM_FHGIIS_MPEGLAYER3_DECODE 0x09
+
 #if !defined(WAVE_FORMAT_EXTENSIBLE)
 #define  WAVE_FORMAT_EXTENSIBLE			0xFFFE  /* Microsoft */
 #endif
-- 
2.4.1




More information about the wine-patches mailing list