Zebediah Figura : msacm32: Try to suggest PCM to PCM conversion first.

Alexandre Julliard julliard at winehq.org
Thu Jun 8 15:54:57 CDT 2017


Module: wine
Branch: master
Commit: ab2760ec339e6499fc31870c5b5862c8acd8c63d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ab2760ec339e6499fc31870c5b5862c8acd8c63d

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Wed Jun  7 16:07:53 2017 -0500

msacm32: Try to suggest PCM to PCM conversion first.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msacm32/format.c      | 16 ++++++++++++++++
 dlls/msacm32/tests/msacm.c |  2 --
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/dlls/msacm32/format.c b/dlls/msacm32/format.c
index d7a2cc9..f3c5155 100644
--- a/dlls/msacm32/format.c
+++ b/dlls/msacm32/format.c
@@ -733,6 +733,22 @@ MMRESULT WINAPI acmFormatSuggest(HACMDRIVER had, PWAVEFORMATEX pwfxSrc,
 		       ACM_FORMATSUGGESTF_WBITSPERSAMPLE|ACM_FORMATSUGGESTF_WFORMATTAG))
 	return MMSYSERR_INVALFLAG;
 
+    /* if we were given PCM, try to convert to PCM */
+    if (pwfxSrc->wFormatTag == WAVE_FORMAT_PCM && !had &&
+        !(fdwSuggest & ACM_FORMATSUGGESTF_WFORMATTAG))
+    {
+        ACMFORMATDETAILSW afd = {0};
+        afd.cbStruct = sizeof(afd);
+        afd.dwFormatTag = WAVE_FORMAT_PCM;
+        afd.pwfx = pwfxSrc;
+        afd.cbwfx = sizeof(PCMWAVEFORMAT);
+        if (!acmFormatDetailsW(had, &afd, ACM_FORMATDETAILSF_FORMAT))
+        {
+            memcpy(pwfxDst, pwfxSrc, sizeof(PCMWAVEFORMAT));
+            return MMSYSERR_NOERROR;
+        }
+    }
+
     aftd.cbStruct = sizeof(aftd);
     if (fdwSuggest & ACM_FORMATSUGGESTF_WFORMATTAG)
         aftd.dwFormatTag = pwfxDst->wFormatTag;
diff --git a/dlls/msacm32/tests/msacm.c b/dlls/msacm32/tests/msacm.c
index 31262a3..13494a6 100644
--- a/dlls/msacm32/tests/msacm.c
+++ b/dlls/msacm32/tests/msacm.c
@@ -1062,7 +1062,6 @@ static void test_acmFormatSuggest(void)
     suggest = 0;
     memset(&dst, 0, sizeof(dst));
     rc = acmFormatSuggest(NULL, &src, &dst, sizeof(PCMWAVEFORMAT), suggest);
-    todo_wine {
     ok(rc == MMSYSERR_NOERROR, "failed with error 0x%x\n", rc);
     ok(src.wFormatTag == dst.wFormatTag, "expected %d, got %d\n", src.wFormatTag, dst.wFormatTag);
     ok(src.nChannels == dst.nChannels, "expected %d, got %d\n", src.nChannels, dst.nChannels);
@@ -1070,7 +1069,6 @@ static void test_acmFormatSuggest(void)
     ok(src.nAvgBytesPerSec == dst.nAvgBytesPerSec, "expected %d, got %d\n", src.nAvgBytesPerSec, dst.nAvgBytesPerSec);
     ok(src.nBlockAlign == dst.nBlockAlign, "expected %d, got %d\n", src.nBlockAlign, dst.nBlockAlign);
     ok(src.wBitsPerSample == dst.wBitsPerSample, "expected %d, got %d\n", src.wBitsPerSample, dst.wBitsPerSample);
-    }
 
     /* All parameters from destination are valid */
     suggest = ACM_FORMATSUGGESTF_NCHANNELS




More information about the wine-cvs mailing list