dsound patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Some sound chips (like most ac97 stuff) don't support 8-bit audio, here's
a patch to dsound to check for such cards when selecting default audio
format.

Log:
Ove Kaaven <ovek@transgaming.com>
Fix for soundcards that can't do 8-bit audio, only 16-bit.
(Also checked for soundcards that can't do stereo while I was at it)

Index: dlls/dsound/dsound_main.c
===================================================================
RCS file: /cvsroot/winex/wine/dlls/dsound/dsound_main.c,v
retrieving revision 1.1.1.18
retrieving revision 1.70
diff -u -r1.1.1.18 -r1.70
--- dlls/dsound/dsound_main.c	25 Sep 2002 19:17:47 -0000	1.1.1.18
+++ dlls/dsound/dsound_main.c	25 Sep 2002 20:50:29 -0000	1.70
@@ -495,11 +509,23 @@
 
 	/* Set default wave format (may need it for waveOutOpen) */
 	(*ippDS)->wfx.wFormatTag	= WAVE_FORMAT_PCM;
-	(*ippDS)->wfx.nChannels		= 2;
+	/* default to stereo, if the sound card can do it */
+	if (wcaps.wChannels > 1)
+		(*ippDS)->wfx.nChannels		= 2;
+	else
+		(*ippDS)->wfx.nChannels		= 1;
+	/* default to 8, if the sound card can do it */
+	if (wcaps.dwFormats & (WAVE_FORMAT_4M08 | WAVE_FORMAT_2M08 | WAVE_FORMAT_1M08 |
+			       WAVE_FORMAT_4S08 | WAVE_FORMAT_2S08 | WAVE_FORMAT_1S08)) {
+		(*ippDS)->wfx.wBitsPerSample	= 8;
+		(*ippDS)->wfx.nBlockAlign	= 1 * (*ippDS)->wfx.nChannels;
+	} else {
+		/* it's probably a 16-bit-only card */
+		(*ippDS)->wfx.wBitsPerSample	= 16;
+		(*ippDS)->wfx.nBlockAlign	= 2 * (*ippDS)->wfx.nChannels;
+	}
 	(*ippDS)->wfx.nSamplesPerSec	= 22050;
-	(*ippDS)->wfx.nAvgBytesPerSec	= 44100;
-	(*ippDS)->wfx.nBlockAlign	= 2;
-	(*ippDS)->wfx.wBitsPerSample	= 8;
+	(*ippDS)->wfx.nAvgBytesPerSec	= 22050 * (*ippDS)->wfx.nBlockAlign;
 
 	/* If the driver requests being opened through MMSYSTEM
 	 * (which is recommended by the DDK), it is supposed to happen



[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux