dmusic: partial fix for bug 7064
Robert Reif
reif at earthlink.net
Tue Jan 2 19:03:33 CST 2007
Implement just enough of IDirectMusicPortImpl_GetFormat to keep Direct
Sound from crashing from unitialized data.
-------------- next part --------------
diff -p -u -r1.15 port.c
--- dlls/dmusic/port.c 12 Oct 2006 20:31:05 -0000 1.15
+++ dlls/dmusic/port.c 3 Jan 2007 00:46:04 -0000
@@ -171,7 +171,45 @@ static HRESULT WINAPI IDirectMusicPortIm
static HRESULT WINAPI IDirectMusicPortImpl_GetFormat (LPDIRECTMUSICPORT iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize) {
IDirectMusicPortImpl *This = (IDirectMusicPortImpl *)iface;
+ WAVEFORMATEX format;
FIXME("(%p, %p, %p, %p): stub\n", This, pWaveFormatEx, pdwWaveFormatExSize, pdwBufferSize);
+
+ if (pWaveFormatEx == NULL)
+ {
+ if (pdwWaveFormatExSize)
+ *pdwWaveFormatExSize = sizeof(format);
+ else
+ return E_POINTER;
+ }
+ else
+ {
+ if (pdwWaveFormatExSize == NULL)
+ return E_POINTER;
+
+ /* Just fill this in with something that will not crash Direct Sound for now. */
+ /* It won't be used anyway until Performances are completed */
+ format.wFormatTag = WAVE_FORMAT_PCM;
+ format.nChannels = 2; /* This->params.dwAudioChannels; */
+ format.nSamplesPerSec = 44100; /* This->params.dwSampleRate; */
+ format.wBitsPerSample = 16; /* FIXME: check this */
+ format.nBlockAlign = (format.wBitsPerSample * format.nChannels) / 8;
+ format.nAvgBytesPerSec = format.nSamplesPerSec * format.nBlockAlign;
+ format.cbSize = 0;
+
+ if (*pdwWaveFormatExSize >= sizeof(format))
+ {
+ CopyMemory(pWaveFormatEx, &format, min(sizeof(format), *pdwWaveFormatExSize));
+ *pdwWaveFormatExSize = sizeof(format); /* FIXME check if this is set */
+ }
+ else
+ return E_POINTER; /* FIXME find right error */
+ }
+
+ if (pdwBufferSize)
+ *pdwBufferSize = 44100 * 2 * 2;
+ else
+ return E_POINTER;
+
return S_OK;
}
More information about the wine-patches
mailing list