[PATCH] Revert "dsound: Allow inactive devices to change the primary format."
Andrew Eikum
aeikum at codeweavers.com
Mon Aug 15 09:02:36 CDT 2016
This reverts commit 4fbe6f3e7601f7b39f7f672ffe43553eee92ab1b.
This caused a bunch of regressions (40716, 41007, 41025), and isn't
needed to fix the bug it was intended to fix (26965).
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
---
dlls/dsound/primary.c | 45 +++++++++++++++++++++++++--------------------
1 file changed, 25 insertions(+), 20 deletions(-)
diff --git a/dlls/dsound/primary.c b/dlls/dsound/primary.c
index 830764a..f9720f8 100644
--- a/dlls/dsound/primary.c
+++ b/dlls/dsound/primary.c
@@ -478,30 +478,35 @@ HRESULT primarybuffer_SetFormat(DirectSoundDevice *device, LPCWAVEFORMATEX passe
RtlAcquireResourceExclusive(&(device->buffer_list_lock), TRUE);
EnterCriticalSection(&(device->mixlock));
- old_fmt = device->primary_pwfx;
- device->primary_pwfx = DSOUND_CopyFormat(passed_fmt);
- fmtex = (WAVEFORMATEXTENSIBLE *)device->primary_pwfx;
- if (device->primary_pwfx == NULL) {
- err = DSERR_OUTOFMEMORY;
- goto out;
- }
+ if (device->priolevel == DSSCL_WRITEPRIMARY) {
+ old_fmt = device->primary_pwfx;
+ device->primary_pwfx = DSOUND_CopyFormat(passed_fmt);
+ fmtex = (WAVEFORMATEXTENSIBLE *)device->primary_pwfx;
+ if (device->primary_pwfx == NULL) {
+ err = DSERR_OUTOFMEMORY;
+ goto out;
+ }
- if (fmtex->Format.wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
- fmtex->Samples.wValidBitsPerSample == 0) {
- TRACE("Correcting 0 valid bits per sample\n");
- fmtex->Samples.wValidBitsPerSample = fmtex->Format.wBitsPerSample;
- }
+ if (fmtex->Format.wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
+ fmtex->Samples.wValidBitsPerSample == 0) {
+ TRACE("Correcting 0 valid bits per sample\n");
+ fmtex->Samples.wValidBitsPerSample = fmtex->Format.wBitsPerSample;
+ }
- if(device->priolevel == DSSCL_WRITEPRIMARY || device->nrofbuffers == 0)
err = DSOUND_ReopenDevice(device, TRUE);
- if (FAILED(err) && device->priolevel == DSSCL_WRITEPRIMARY) {
- ERR("No formats could be opened\n");
- HeapFree(GetProcessHeap(), 0, device->primary_pwfx);
- device->primary_pwfx = old_fmt;
+ if (FAILED(err)) {
+ ERR("No formats could be opened\n");
+ HeapFree(GetProcessHeap(), 0, device->primary_pwfx);
+ device->primary_pwfx = old_fmt;
+ } else
+ HeapFree(GetProcessHeap(), 0, old_fmt);
} else {
- /* ignore failures */
- err = S_OK;
- HeapFree(GetProcessHeap(), 0, old_fmt);
+ WAVEFORMATEX *wfx = DSOUND_CopyFormat(passed_fmt);
+ if (wfx) {
+ HeapFree(GetProcessHeap(), 0, device->primary_pwfx);
+ device->primary_pwfx = wfx;
+ } else
+ err = DSERR_OUTOFMEMORY;
}
out:
--
2.9.2
More information about the wine-patches
mailing list