Always create a property set for secondary buffers.
authorRobert Reif <reif@earthlink.net>
Mon, 6 Dec 2004 11:42:58 +0000 (11:42 +0000)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 6 Dec 2004 11:42:58 +0000 (11:42 +0000)
dlls/dsound/buffer.c
dlls/dsound/propset.c

index 04efd57a07e200b996c5303ea517f8dd8bfc03ab..74721c8406dec03af29acfa7bb97bfc82de01f8a 100644 (file)
@@ -986,17 +986,12 @@ static HRESULT WINAPI IDirectSoundBufferImpl_QueryInterface(
        }
 
        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 48a4da814d26a37a834f92e783d6145234911866..947f5cba18b78ee2356f4454906b4148831ec5f4 100644 (file)
@@ -109,22 +109,24 @@ static HRESULT WINAPI IKsBufferPropertySetImpl_Get(
     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 @@ static HRESULT WINAPI IKsBufferPropertySetImpl_Set(
     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 @@ static HRESULT WINAPI IKsBufferPropertySetImpl_QuerySupport(
     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 @@ HRESULT WINAPI IKsBufferPropertySetImpl_Create(
     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;