wine/dlls/winmm/wavemap wavemap.c

Alexandre Julliard julliard at wine.codeweavers.com
Wed Nov 16 05:22:06 CST 2005


ChangeSet ID:	21294
CVSROOT:	/opt/cvs-commit
Module name:	wine
Changes by:	julliard at winehq.org	2005/11/16 05:22:06

Modified files:
	dlls/winmm/wavemap: wavemap.c 

Log message:
	Robert Reif <reif at earthlink.net>
	Only convert bits per sample between different encoding formats.

Patch: http://cvs.winehq.org/patch.py?id=21294

Old revision  New revision  Changes     Path
 1.45          1.46          +57 -45     wine/dlls/winmm/wavemap/wavemap.c

Index: wine/dlls/winmm/wavemap/wavemap.c
diff -u -p wine/dlls/winmm/wavemap/wavemap.c:1.45 wine/dlls/winmm/wavemap/wavemap.c:1.46
--- wine/dlls/winmm/wavemap/wavemap.c:1.45	16 Nov 2005 11:22: 6 -0000
+++ wine/dlls/winmm/wavemap/wavemap.c	16 Nov 2005 11:22: 6 -0000
@@ -194,7 +194,7 @@ static	DWORD	wodOpen(LPDWORD lpdwUser, L
 	}
     }
 
-    if ((dwFlags & WAVE_FORMAT_DIRECT) == 0 && lpDesc->lpFormat->wFormatTag == WAVE_FORMAT_PCM) {
+    if ((dwFlags & WAVE_FORMAT_DIRECT) == 0) {
         WAVEFORMATEX	wfx;
 
         wfx.wFormatTag = WAVE_FORMAT_PCM;
@@ -208,51 +208,63 @@ static	DWORD	wodOpen(LPDWORD lpdwUser, L
                             default: goto error; \
                         }
 
-        /* Our resampling algorithm is quite primitive so first try
-         * to just change the bit depth and number of channels
-         */
-        for (i = ndlo; i < ndhi; i++) {
-            wfx.nSamplesPerSec=lpDesc->lpFormat->nSamplesPerSec;
-            wfx.nChannels = lpDesc->lpFormat->nChannels;
-            TRY(wfx.nSamplesPerSec, 16);
-            TRY(wfx.nSamplesPerSec, 8);
-            wfx.nChannels ^= 3;
-            TRY(wfx.nSamplesPerSec, 16);
-            TRY(wfx.nSamplesPerSec, 8);
-        }
-
-        for (i = ndlo; i < ndhi; i++) {
-            /* first try with same stereo/mono option as source */
-            wfx.nChannels = lpDesc->lpFormat->nChannels;
-            TRY(96000, 16);
-            TRY(48000, 16);
-            TRY(44100, 16);
-            TRY(22050, 16);
-            TRY(11025, 16);
-
-            /* 2^3 => 1, 1^3 => 2, so if stereo, try mono (and the other way around) */
-            wfx.nChannels ^= 3;
-            TRY(96000, 16);
-            TRY(48000, 16);
-            TRY(44100, 16);
-            TRY(22050, 16);
-            TRY(11025, 16);
-
-            /* first try with same stereo/mono option as source */
-            wfx.nChannels = lpDesc->lpFormat->nChannels;
-            TRY(96000, 8);
-            TRY(48000, 8);
-            TRY(44100, 8);
-            TRY(22050, 8);
-            TRY(11025, 8);
+        if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM) {
+            /* Format changed so keep sample rate and number of channels 
+             * the same and just change the bit depth
+             */
+            for (i = ndlo; i < ndhi; i++) {
+                wfx.nSamplesPerSec=lpDesc->lpFormat->nSamplesPerSec;
+                wfx.nChannels = lpDesc->lpFormat->nChannels;
+                TRY(wfx.nSamplesPerSec, 16);
+                TRY(wfx.nSamplesPerSec, 8);
+            }
+        } else {
+            /* Our resampling algorithm is quite primitive so first try
+             * to just change the bit depth and number of channels
+             */
+            for (i = ndlo; i < ndhi; i++) {
+                wfx.nSamplesPerSec=lpDesc->lpFormat->nSamplesPerSec;
+                wfx.nChannels = lpDesc->lpFormat->nChannels;
+                TRY(wfx.nSamplesPerSec, 16);
+                TRY(wfx.nSamplesPerSec, 8);
+                wfx.nChannels ^= 3;
+                TRY(wfx.nSamplesPerSec, 16);
+                TRY(wfx.nSamplesPerSec, 8);
+            }
 
-            /* 2^3 => 1, 1^3 => 2, so if stereo, try mono (and the other way around) */
-            wfx.nChannels ^= 3;
-            TRY(96000, 8);
-            TRY(48000, 8);
-            TRY(44100, 8);
-            TRY(22050, 8);
-            TRY(11025, 8);
+            for (i = ndlo; i < ndhi; i++) {
+                /* first try with same stereo/mono option as source */
+                wfx.nChannels = lpDesc->lpFormat->nChannels;
+                TRY(96000, 16);
+                TRY(48000, 16);
+                TRY(44100, 16);
+                TRY(22050, 16);
+                TRY(11025, 16);
+
+                /* 2^3 => 1, 1^3 => 2, so if stereo, try mono (and the other way around) */
+                wfx.nChannels ^= 3;
+                TRY(96000, 16);
+                TRY(48000, 16);
+                TRY(44100, 16);
+                TRY(22050, 16);
+                TRY(11025, 16);
+
+                /* first try with same stereo/mono option as source */
+                wfx.nChannels = lpDesc->lpFormat->nChannels;
+                TRY(96000, 8);
+                TRY(48000, 8);
+                TRY(44100, 8);
+                TRY(22050, 8);
+                TRY(11025, 8);
+
+                /* 2^3 => 1, 1^3 => 2, so if stereo, try mono (and the other way around) */
+                wfx.nChannels ^= 3;
+                TRY(96000, 8);
+                TRY(48000, 8);
+                TRY(44100, 8);
+                TRY(22050, 8);
+                TRY(11025, 8);
+            }
         }
 #undef TRY
     }



More information about the wine-cvs mailing list