You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-09-12 18:50:20 -07:00
Rebase against 35eebeef0fe0b3f03f44731f805c447b2342acfd.
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
From 462599cf79d964c6add1a7250f654d2e3110c4d2 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Wed, 23 Dec 2015 00:58:57 +0100
|
||||
Subject: Revert "dsound: Use a better name for
|
||||
IDirectSoundBufferImpl_Create()."
|
||||
|
||||
This reverts commit bb72548f3870b1df03ad9fe7ad2e543a69d5d574.
|
||||
---
|
||||
dlls/dsound/buffer.c | 24 +++++++++++++++---------
|
||||
dlls/dsound/dsound.c | 7 +++++--
|
||||
dlls/dsound/dsound_private.h | 6 ++++--
|
||||
3 files changed, 24 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
|
||||
index 2a80c3f..d7717fd 100644
|
||||
--- a/dlls/dsound/buffer.c
|
||||
+++ b/dlls/dsound/buffer.c
|
||||
@@ -983,15 +983,19 @@ static const IDirectSoundBuffer8Vtbl dsbvt =
|
||||
IDirectSoundBufferImpl_GetObjectInPath
|
||||
};
|
||||
|
||||
-HRESULT secondarybuffer_create(DirectSoundDevice *device, const DSBUFFERDESC *dsbd,
|
||||
- IDirectSoundBuffer **buffer)
|
||||
+HRESULT IDirectSoundBufferImpl_Create(
|
||||
+ DirectSoundDevice * device,
|
||||
+ IDirectSoundBufferImpl **pdsb,
|
||||
+ LPCDSBUFFERDESC dsbd)
|
||||
{
|
||||
IDirectSoundBufferImpl *dsb;
|
||||
LPWAVEFORMATEX wfex = dsbd->lpwfxFormat;
|
||||
HRESULT err = DS_OK;
|
||||
DWORD capf = 0;
|
||||
|
||||
- TRACE("(%p,%p,%p)\n", device, dsbd, buffer);
|
||||
+ TRACE("(%p,%p,%p)\n",device,pdsb,dsbd);
|
||||
+
|
||||
+ *pdsb = NULL;
|
||||
|
||||
if (dsbd->dwBufferBytes < DSBSIZE_MIN || dsbd->dwBufferBytes > DSBSIZE_MAX) {
|
||||
WARN("invalid parameter: dsbd->dwBufferBytes = %d\n", dsbd->dwBufferBytes);
|
||||
@@ -1103,12 +1107,14 @@ HRESULT secondarybuffer_create(DirectSoundDevice *device, const DSBUFFERDESC *ds
|
||||
|
||||
RtlInitializeResource(&dsb->lock);
|
||||
|
||||
- /* register buffer */
|
||||
- err = DirectSoundDevice_AddBuffer(device, dsb);
|
||||
- if (err == DS_OK)
|
||||
- *buffer = (IDirectSoundBuffer*)&dsb->IDirectSoundBuffer8_iface;
|
||||
- else
|
||||
- IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
|
||||
+ /* register buffer if not primary */
|
||||
+ if (!(dsbd->dwFlags & DSBCAPS_PRIMARYBUFFER)) {
|
||||
+ err = DirectSoundDevice_AddBuffer(device, dsb);
|
||||
+ if (err == DS_OK)
|
||||
+ *pdsb = dsb;
|
||||
+ else
|
||||
+ IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
|
||||
+ }
|
||||
|
||||
return err;
|
||||
}
|
||||
diff --git a/dlls/dsound/dsound.c b/dlls/dsound/dsound.c
|
||||
index ccefd1f..e50ef58 100644
|
||||
--- a/dlls/dsound/dsound.c
|
||||
+++ b/dlls/dsound/dsound.c
|
||||
@@ -469,6 +469,8 @@ static HRESULT DirectSoundDevice_CreateSoundBuffer(
|
||||
WARN("primarybuffer_create() failed\n");
|
||||
}
|
||||
} else {
|
||||
+ IDirectSoundBufferImpl * dsb;
|
||||
+
|
||||
if (dsbd->lpwfxFormat == NULL) {
|
||||
WARN("invalid parameter: dsbd->lpwfxFormat can't be NULL for "
|
||||
"secondary buffer\n");
|
||||
@@ -545,8 +547,9 @@ static HRESULT DirectSoundDevice_CreateSoundBuffer(
|
||||
return DSERR_INVALIDPARAM;
|
||||
}
|
||||
|
||||
- hres = secondarybuffer_create(device, dsbd, ppdsb);
|
||||
- if (SUCCEEDED(hres)) {
|
||||
+ hres = IDirectSoundBufferImpl_Create(device, &dsb, dsbd);
|
||||
+ if (dsb) {
|
||||
+ *ppdsb = (IDirectSoundBuffer*)&dsb->IDirectSoundBuffer8_iface;
|
||||
if (dsbd->dwFlags & DSBCAPS_LOCHARDWARE)
|
||||
device->drvcaps.dwFreeHwMixingAllBuffers--;
|
||||
} else
|
||||
diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h
|
||||
index 07bda48..9c001ed 100644
|
||||
--- a/dlls/dsound/dsound_private.h
|
||||
+++ b/dlls/dsound/dsound_private.h
|
||||
@@ -182,8 +182,10 @@ void put_stereo2quad(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel
|
||||
void put_mono2surround51(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value) DECLSPEC_HIDDEN;
|
||||
void put_stereo2surround51(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value) DECLSPEC_HIDDEN;
|
||||
|
||||
-HRESULT secondarybuffer_create(DirectSoundDevice *device, const DSBUFFERDESC *dsbd,
|
||||
- IDirectSoundBuffer **buffer) DECLSPEC_HIDDEN;
|
||||
+HRESULT IDirectSoundBufferImpl_Create(
|
||||
+ DirectSoundDevice *device,
|
||||
+ IDirectSoundBufferImpl **ppdsb,
|
||||
+ LPCDSBUFFERDESC dsbd) DECLSPEC_HIDDEN;
|
||||
HRESULT IDirectSoundBufferImpl_Duplicate(
|
||||
DirectSoundDevice *device,
|
||||
IDirectSoundBufferImpl **ppdsb,
|
||||
--
|
||||
2.6.4
|
||||
|
@@ -0,0 +1,116 @@
|
||||
From 974a901f92d5197d3db6356df454bdd47dea39da Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Wed, 23 Dec 2015 00:59:07 +0100
|
||||
Subject: Revert "dsound: Simplify error handling when creating a sound
|
||||
buffer."
|
||||
|
||||
This reverts commit d51d55bab8995f94dcc78ce8418a4149836c27b0.
|
||||
---
|
||||
dlls/dsound/buffer.c | 46 ++++++++++++++++++++++++++++++----------------
|
||||
1 file changed, 30 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
|
||||
index d7717fd..5aa2834 100644
|
||||
--- a/dlls/dsound/buffer.c
|
||||
+++ b/dlls/dsound/buffer.c
|
||||
@@ -992,28 +992,29 @@ HRESULT IDirectSoundBufferImpl_Create(
|
||||
LPWAVEFORMATEX wfex = dsbd->lpwfxFormat;
|
||||
HRESULT err = DS_OK;
|
||||
DWORD capf = 0;
|
||||
-
|
||||
TRACE("(%p,%p,%p)\n",device,pdsb,dsbd);
|
||||
|
||||
- *pdsb = NULL;
|
||||
-
|
||||
if (dsbd->dwBufferBytes < DSBSIZE_MIN || dsbd->dwBufferBytes > DSBSIZE_MAX) {
|
||||
WARN("invalid parameter: dsbd->dwBufferBytes = %d\n", dsbd->dwBufferBytes);
|
||||
+ *pdsb = NULL;
|
||||
return DSERR_INVALIDPARAM; /* FIXME: which error? */
|
||||
}
|
||||
|
||||
dsb = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(*dsb));
|
||||
|
||||
- if (!dsb)
|
||||
+ if (dsb == 0) {
|
||||
+ WARN("out of memory\n");
|
||||
+ *pdsb = NULL;
|
||||
return DSERR_OUTOFMEMORY;
|
||||
+ }
|
||||
|
||||
TRACE("Created buffer at %p\n", dsb);
|
||||
|
||||
- dsb->ref = 1;
|
||||
+ dsb->ref = 0;
|
||||
dsb->refn = 0;
|
||||
dsb->ref3D = 0;
|
||||
dsb->refiks = 0;
|
||||
- dsb->numIfaces = 1;
|
||||
+ dsb->numIfaces = 0;
|
||||
dsb->device = device;
|
||||
dsb->IDirectSoundBuffer8_iface.lpVtbl = &dsbvt;
|
||||
dsb->IDirectSoundNotify_iface.lpVtbl = &dsnvt;
|
||||
@@ -1024,8 +1025,9 @@ HRESULT IDirectSoundBufferImpl_Create(
|
||||
CopyMemory(&dsb->dsbd, dsbd, dsbd->dwSize);
|
||||
|
||||
dsb->pwfx = DSOUND_CopyFormat(wfex);
|
||||
- if (!dsb->pwfx) {
|
||||
- IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
|
||||
+ if (dsb->pwfx == NULL) {
|
||||
+ HeapFree(GetProcessHeap(),0,dsb);
|
||||
+ *pdsb = NULL;
|
||||
return DSERR_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
@@ -1050,16 +1052,22 @@ HRESULT IDirectSoundBufferImpl_Create(
|
||||
|
||||
/* Allocate an empty buffer */
|
||||
dsb->buffer = HeapAlloc(GetProcessHeap(),0,sizeof(*(dsb->buffer)));
|
||||
- if (!dsb->buffer) {
|
||||
- IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
|
||||
+ if (dsb->buffer == NULL) {
|
||||
+ WARN("out of memory\n");
|
||||
+ HeapFree(GetProcessHeap(),0,dsb->pwfx);
|
||||
+ HeapFree(GetProcessHeap(),0,dsb);
|
||||
+ *pdsb = NULL;
|
||||
return DSERR_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
/* Allocate system memory for buffer */
|
||||
dsb->buffer->memory = HeapAlloc(GetProcessHeap(),0,dsb->buflen);
|
||||
- if (!dsb->buffer->memory) {
|
||||
+ if (dsb->buffer->memory == NULL) {
|
||||
WARN("out of memory\n");
|
||||
- IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
|
||||
+ HeapFree(GetProcessHeap(),0,dsb->pwfx);
|
||||
+ HeapFree(GetProcessHeap(),0,dsb->buffer);
|
||||
+ HeapFree(GetProcessHeap(),0,dsb);
|
||||
+ *pdsb = NULL;
|
||||
return DSERR_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
@@ -1110,12 +1118,18 @@ HRESULT IDirectSoundBufferImpl_Create(
|
||||
/* register buffer if not primary */
|
||||
if (!(dsbd->dwFlags & DSBCAPS_PRIMARYBUFFER)) {
|
||||
err = DirectSoundDevice_AddBuffer(device, dsb);
|
||||
- if (err == DS_OK)
|
||||
- *pdsb = dsb;
|
||||
- else
|
||||
- IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
|
||||
+ if (err != DS_OK) {
|
||||
+ HeapFree(GetProcessHeap(),0,dsb->buffer->memory);
|
||||
+ HeapFree(GetProcessHeap(),0,dsb->buffer);
|
||||
+ RtlDeleteResource(&dsb->lock);
|
||||
+ HeapFree(GetProcessHeap(),0,dsb->pwfx);
|
||||
+ HeapFree(GetProcessHeap(),0,dsb);
|
||||
+ dsb = NULL;
|
||||
+ }
|
||||
}
|
||||
|
||||
+ IDirectSoundBuffer8_AddRef(&dsb->IDirectSoundBuffer8_iface);
|
||||
+ *pdsb = dsb;
|
||||
return err;
|
||||
}
|
||||
|
||||
--
|
||||
2.6.4
|
||||
|
Reference in New Issue
Block a user