Michael Stefaniuc : qcap: COM cleanup for the IKsPropertySet iface.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Aug 5 10:28:03 CDT 2015
Module: wine
Branch: master
Commit: 487472b3f67ceeacca336cc899f7c29cd38d3336
URL: http://source.winehq.org/git/wine.git/?a=commit;h=487472b3f67ceeacca336cc899f7c29cd38d3336
Author: Michael Stefaniuc <mstefani at redhat.de>
Date: Mon Aug 3 23:28:41 2015 +0200
qcap: COM cleanup for the IKsPropertySet iface.
---
dlls/qcap/vfwcapture.c | 42 ++++++++++++++++--------------------------
1 file changed, 16 insertions(+), 26 deletions(-)
diff --git a/dlls/qcap/vfwcapture.c b/dlls/qcap/vfwcapture.c
index c34ab28..372e2ee 100644
--- a/dlls/qcap/vfwcapture.c
+++ b/dlls/qcap/vfwcapture.c
@@ -44,9 +44,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(qcap);
-#define ICOM_THIS_MULTI(impl,field,iface) \
- impl* const This=(impl*)((char*)(iface) - offsetof(impl,field))
-
static const IBaseFilterVtbl VfwCapture_Vtbl;
static const IAMStreamConfigVtbl IAMStreamConfig_VTable;
static const IAMVideoProcAmpVtbl IAMVideoProcAmp_VTable;
@@ -103,8 +100,8 @@ static inline VfwCapture *impl_from_IPersistPropertyBag(IPersistPropertyBag *ifa
typedef struct VfwPinImpl
{
BaseOutputPin pin;
+ IKsPropertySet IKsPropertySet_iface;
VfwCapture *parent;
- const IKsPropertySetVtbl * KSP_VT;
} VfwPinImpl;
@@ -585,37 +582,30 @@ static const IPersistPropertyBagVtbl IPersistPropertyBag_VTable =
};
/* IKsPropertySet interface */
-static HRESULT WINAPI
-KSP_QueryInterface( IKsPropertySet * iface, REFIID riid, LPVOID * ppv )
+static inline VfwPinImpl *impl_from_IKsPropertySet(IKsPropertySet *iface)
{
- if (IsEqualIID(riid, &IID_IUnknown) ||
- IsEqualIID(riid, &IID_IKsPropertySet))
- {
- *ppv = iface;
- IKsPropertySet_AddRef( iface );
- return S_OK;
- }
+ return CONTAINING_RECORD(iface, VfwPinImpl, IKsPropertySet_iface);
+}
- FIXME("No interface for iid %s\n", debugstr_guid(riid));
- return E_NOINTERFACE;
+static HRESULT WINAPI KSP_QueryInterface(IKsPropertySet * iface, REFIID riid, void **ret_iface)
+{
+ VfwPinImpl *This = impl_from_IKsPropertySet(iface);
+
+ return IPin_QueryInterface(&This->pin.pin.IPin_iface, riid, ret_iface);
}
static ULONG WINAPI KSP_AddRef(IKsPropertySet * iface)
{
- ICOM_THIS_MULTI(VfwPinImpl, KSP_VT, iface);
+ VfwPinImpl *This = impl_from_IKsPropertySet(iface);
- TRACE("%p --> Forwarding to VfwPin (%p)\n", iface, This);
-
- return IUnknown_AddRef((IUnknown *)This);
+ return IPin_AddRef(&This->pin.pin.IPin_iface);
}
static ULONG WINAPI KSP_Release(IKsPropertySet * iface)
{
- ICOM_THIS_MULTI(VfwPinImpl, KSP_VT, iface);
-
- TRACE("%p --> Forwarding to VfwPin (%p)\n", iface, This);
+ VfwPinImpl *This = impl_from_IKsPropertySet(iface);
- return IUnknown_Release((IUnknown *)This);
+ return IPin_Release(&This->pin.pin.IPin_iface);
}
static HRESULT WINAPI
@@ -660,7 +650,7 @@ KSP_QuerySupported( IKsPropertySet * iface, REFGUID guidPropSet,
return E_NOTIMPL;
}
-static const IKsPropertySetVtbl KSP_VTable =
+static const IKsPropertySetVtbl IKsPropertySet_VTable =
{
KSP_QueryInterface,
KSP_AddRef,
@@ -746,7 +736,7 @@ VfwPin_Construct( IBaseFilter * pBaseFilter, LPCRITICAL_SECTION pCritSec,
if (SUCCEEDED(hr))
{
VfwPinImpl *pPinImpl = (VfwPinImpl*)*ppPin;
- pPinImpl->KSP_VT = &KSP_VTable;
+ pPinImpl->IKsPropertySet_iface.lpVtbl = &IKsPropertySet_VTable;
ObjectRefCount(TRUE);
}
@@ -768,7 +758,7 @@ static HRESULT WINAPI VfwPin_QueryInterface(IPin * iface, REFIID riid, LPVOID *
if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IPin))
*ppv = This;
else if (IsEqualIID(riid, &IID_IKsPropertySet))
- *ppv = &(This->KSP_VT);
+ *ppv = &This->IKsPropertySet_iface;
else if (IsEqualIID(riid, &IID_IAMStreamConfig))
return IUnknown_QueryInterface((IUnknown *)This->parent, riid, ppv);
More information about the wine-cvs
mailing list