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