Small tracing improvement in DSB.SetFormat
Francois Gouget
fgouget at codeweavers.com
Thu Jan 9 19:52:36 CST 2003
Francois Gouget wrote:
>
> Changelog:
>
> Francois Gouget <fgouget at codeweavers.com>
>
> * dlls/dsound/dsound_main.c,
> dlls/dsound/primary.c
>
> DSB.SetFormat:Trace the requested format as soon as possible in case
> it is not supported and simplify validity check
> Initialize the buffer format, and only from the fields we checked
> DirectSoundCreate8 fully initialize the buffer format (just in case)
Oups, the nBlockAlign calculation was missing a conversion of bits to
bytes. Use this patch instead.
--
Francois Gouget
fgouget at codeweavers.com
-------------- next part --------------
Index: dlls/dsound/dsound_main.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/dsound_main.c,v
retrieving revision 1.69
diff -u -r1.69 dsound_main.c
--- dlls/dsound/dsound_main.c 7 Jan 2003 19:43:18 -0000 1.69
+++ dlls/dsound/dsound_main.c 9 Jan 2003 23:28:26 -0000
@@ -644,6 +642,7 @@
(*ippDS)->wfx.nChannels = 2;
(*ippDS)->wfx.nBlockAlign = (*ippDS)->wfx.wBitsPerSample * (*ippDS)->wfx.nChannels / 8;
(*ippDS)->wfx.nAvgBytesPerSec = (*ippDS)->wfx.nSamplesPerSec * (*ippDS)->wfx.nBlockAlign;
+ (*ippDS)->wfx.cbSize = 0;
/* If the driver requests being opened through MMSYSTEM
* (which is recommended by the DDK), it is supposed to happen
Index: dlls/dsound/primary.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/primary.c,v
retrieving revision 1.4
diff -u -r1.4 primary.c
--- dlls/dsound/primary.c 13 Dec 2002 20:26:23 -0000 1.4
+++ dlls/dsound/primary.c 9 Jan 2003 08:18:27 -0000
@@ -109,7 +109,7 @@
if (newbuf == NULL) {
ERR("failed to allocate primary buffer\n");
merr = DSERR_OUTOFMEMORY;
- /* but the old buffer might still exists and must be re-prepared */
+ /* but the old buffer might still exist and must be re-prepared */
} else {
This->buffer = newbuf;
This->buflen = buflen;
@@ -281,13 +304,21 @@
}
/* Let's be pedantic! */
- if ((wfex == NULL) ||
- (wfex->wFormatTag != WAVE_FORMAT_PCM) ||
+ if (wfex == NULL) {
+ TRACE("wfex==NULL!\n");
+ return DSERR_INVALIDPARAM;
+ }
+ TRACE("(formattag=0x%04x,chans=%d,samplerate=%ld,"
+ "bytespersec=%ld,blockalign=%d,bitspersamp=%d,cbSize=%d)\n",
+ wfex->wFormatTag, wfex->nChannels, wfex->nSamplesPerSec,
+ wfex->nAvgBytesPerSec, wfex->nBlockAlign,
+ wfex->wBitsPerSample, wfex->cbSize);
+
+ if ((wfex->wFormatTag != WAVE_FORMAT_PCM) ||
(wfex->nChannels < 1) || (wfex->nChannels > 2) ||
(wfex->nSamplesPerSec < 1) ||
- (wfex->nBlockAlign < 1) || (wfex->nChannels > 4) ||
((wfex->wBitsPerSample != 8) && (wfex->wBitsPerSample != 16))) {
- TRACE("failed pedantic check!\n");
+ TRACE("unsupported format!\n");
return DSERR_INVALIDPARAM;
}
@@ -308,14 +339,10 @@
}
}
- memcpy(&(dsound->wfx), wfex, sizeof(dsound->wfx));
-
- TRACE("(formattag=0x%04x,chans=%d,samplerate=%ld,"
- "bytespersec=%ld,blockalign=%d,bitspersamp=%d,cbSize=%d)\n",
- wfex->wFormatTag, wfex->nChannels, wfex->nSamplesPerSec,
- wfex->nAvgBytesPerSec, wfex->nBlockAlign,
- wfex->wBitsPerSample, wfex->cbSize);
-
+ dsound->wfx.nSamplesPerSec = wfex->nSamplesPerSec;
+ dsound->wfx.nChannels = wfex->nChannels;
+ dsound->wfx.wBitsPerSample = wfex->wBitsPerSample;
+ dsound->wfx.nBlockAlign = dsound->wfx.wBitsPerSample / 8 * dsound->wfx.nChannels;
dsound->wfx.nAvgBytesPerSec =
dsound->wfx.nSamplesPerSec * dsound->wfx.nBlockAlign;
More information about the wine-patches
mailing list