dsound: property set patch
Robert Reif
reif at earthlink.net
Fri Dec 3 12:24:36 CST 2004
Always create a property set for secondary buffers.
Fixes a problem with RightMark3DSound.exe from
http://audio.rightmark.org/products/rm3ds.shtml expecting to
always get a property set.
-------------- next part --------------
Index: dlls/dsound/buffer.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/buffer.c,v
retrieving revision 1.39
diff -u -r1.39 buffer.c
--- dlls/dsound/buffer.c 17 Sep 2004 18:10:59 -0000 1.39
+++ dlls/dsound/buffer.c 3 Dec 2004 02:03:04 -0000
@@ -986,17 +986,12 @@
}
if ( IsEqualGUID( &IID_IKsPropertySet, riid ) ) {
- /* only supported on hardware 3D secondary buffers */
- if (!(This->dsbd.dwFlags & DSBCAPS_PRIMARYBUFFER) &&
- (This->dsbd.dwFlags & DSBCAPS_CTRL3D) &&
- (This->hwbuf != NULL) ) {
- if (!This->iks)
- IKsBufferPropertySetImpl_Create(This, &(This->iks));
- if (This->iks) {
- IKsPropertySet_AddRef((LPKSPROPERTYSET)*ppobj);
- *ppobj = This->iks;
- return S_OK;
- }
+ if (!This->iks)
+ IKsBufferPropertySetImpl_Create(This, &(This->iks));
+ if (This->iks) {
+ IKsPropertySet_AddRef((LPKSPROPERTYSET)This->iks);
+ *ppobj = This->iks;
+ return S_OK;
}
WARN("IID_IKsPropertySet\n");
return E_NOINTERFACE;
Index: dlls/dsound/propset.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/propset.c,v
retrieving revision 1.26
diff -u -r1.26 propset.c
--- dlls/dsound/propset.c 17 Sep 2004 18:10:59 -0000 1.26
+++ dlls/dsound/propset.c 3 Dec 2004 02:03:06 -0000
@@ -109,22 +109,24 @@
TRACE("(iface=%p,guidPropSet=%s,dwPropID=%ld,pInstanceData=%p,cbInstanceData=%ld,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n",
This,debugstr_guid(guidPropSet),dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData,pcbReturned);
- IDsDriver_QueryInterface(This->dsb->hwbuf, &IID_IDsDriverPropertySet, (void **)&ps);
+ if (This->dsb->hwbuf) {
+ IDsDriver_QueryInterface(This->dsb->hwbuf, &IID_IDsDriverPropertySet, (void **)&ps);
- if (ps) {
- DSPROPERTY prop;
- HRESULT hres;
+ if (ps) {
+ DSPROPERTY prop;
+ HRESULT hres;
- prop.s.Set = *guidPropSet;
- prop.s.Id = dwPropID;
- prop.s.Flags = 0; /* unused */
- prop.s.InstanceId = (ULONG)This->dsb->dsound;
+ prop.s.Set = *guidPropSet;
+ prop.s.Id = dwPropID;
+ prop.s.Flags = 0; /* unused */
+ prop.s.InstanceId = (ULONG)This->dsb->dsound;
- hres = IDsDriverPropertySet_Get(ps, &prop, pInstanceData, cbInstanceData, pPropData, cbPropData, pcbReturned);
+ hres = IDsDriverPropertySet_Get(ps, &prop, pInstanceData, cbInstanceData, pPropData, cbPropData, pcbReturned);
- IDsDriverPropertySet_Release(ps);
+ IDsDriverPropertySet_Release(ps);
- return hres;
+ return hres;
+ }
}
return E_PROP_ID_UNSUPPORTED;
@@ -143,21 +145,23 @@
PIDSDRIVERPROPERTYSET ps;
TRACE("(%p,%s,%ld,%p,%ld,%p,%ld)\n",This,debugstr_guid(guidPropSet),dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData);
- IDsDriver_QueryInterface(This->dsb->hwbuf, &IID_IDsDriverPropertySet, (void **)&ps);
+ if (This->dsb->hwbuf) {
+ IDsDriver_QueryInterface(This->dsb->hwbuf, &IID_IDsDriverPropertySet, (void **)&ps);
- if (ps) {
- DSPROPERTY prop;
- HRESULT hres;
+ if (ps) {
+ DSPROPERTY prop;
+ HRESULT hres;
+
+ prop.s.Set = *guidPropSet;
+ prop.s.Id = dwPropID;
+ prop.s.Flags = 0; /* unused */
+ prop.s.InstanceId = (ULONG)This->dsb->dsound;
+ hres = IDsDriverPropertySet_Set(ps,&prop,pInstanceData,cbInstanceData,pPropData,cbPropData);
- prop.s.Set = *guidPropSet;
- prop.s.Id = dwPropID;
- prop.s.Flags = 0; /* unused */
- prop.s.InstanceId = (ULONG)This->dsb->dsound;
- hres = IDsDriverPropertySet_Set(ps,&prop,pInstanceData,cbInstanceData,pPropData,cbPropData);
+ IDsDriverPropertySet_Release(ps);
- IDsDriverPropertySet_Release(ps);
-
- return hres;
+ return hres;
+ }
}
return E_PROP_ID_UNSUPPORTED;
@@ -173,16 +177,18 @@
PIDSDRIVERPROPERTYSET ps;
TRACE("(%p,%s,%ld,%p)\n",This,debugstr_guid(guidPropSet),dwPropID,pTypeSupport);
- IDsDriver_QueryInterface(This->dsb->hwbuf, &IID_IDsDriverPropertySet, (void **)&ps);
+ if (This->dsb->hwbuf) {
+ IDsDriver_QueryInterface(This->dsb->hwbuf, &IID_IDsDriverPropertySet, (void **)&ps);
- if (ps) {
- HRESULT hres;
+ if (ps) {
+ HRESULT hres;
- hres = IDsDriverPropertySet_QuerySupport(ps,guidPropSet, dwPropID,pTypeSupport);
+ hres = IDsDriverPropertySet_QuerySupport(ps,guidPropSet, dwPropID,pTypeSupport);
- IDsDriverPropertySet_Release(ps);
+ IDsDriverPropertySet_Release(ps);
- return hres;
+ return hres;
+ }
}
return E_PROP_ID_UNSUPPORTED;
@@ -205,6 +211,12 @@
TRACE("(%p,%p)\n",dsb,piks);
iks = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(*iks));
+ if (iks == 0) {
+ WARN("out of memory\n");
+ *piks = NULL;
+ return DSERR_OUTOFMEMORY;
+ }
+
iks->ref = 0;
iks->dsb = dsb;
dsb->iks = iks;
More information about the wine-patches
mailing list