Michael Stefaniuc : qcap: Use ifaces instead of vtbl pointers in VfwCapture .

Alexandre Julliard julliard at winehq.org
Tue Dec 21 14:32:20 CST 2010


Module: wine
Branch: master
Commit: 671400c45591d000cbc2ef9b707ec84d355175f7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=671400c45591d000cbc2ef9b707ec84d355175f7

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Tue Dec 21 11:31:10 2010 +0100

qcap: Use ifaces instead of vtbl pointers in VfwCapture.

---

 dlls/qcap/vfwcapture.c |   65 +++++++++++++++++++++++++++++------------------
 1 files changed, 40 insertions(+), 25 deletions(-)

diff --git a/dlls/qcap/vfwcapture.c b/dlls/qcap/vfwcapture.c
index 387a05e..4492eab 100644
--- a/dlls/qcap/vfwcapture.c
+++ b/dlls/qcap/vfwcapture.c
@@ -60,9 +60,9 @@ static HRESULT VfwPin_Construct( IBaseFilter *, LPCRITICAL_SECTION, IPin ** );
 typedef struct VfwCapture
 {
     BaseFilter filter;
-    const IAMStreamConfigVtbl * IAMStreamConfig_vtbl;
-    const IAMVideoProcAmpVtbl * IAMVideoProcAmp_vtbl;
-    const IPersistPropertyBagVtbl * IPersistPropertyBag_vtbl;
+    IAMStreamConfig IAMStreamConfig_iface;
+    IAMVideoProcAmp IAMVideoProcAmp_iface;
+    IPersistPropertyBag IPersistPropertyBag_iface;
 
     BOOL init;
     Capture *driver_info;
@@ -70,6 +70,21 @@ typedef struct VfwCapture
     IPin * pOutputPin;
 } VfwCapture;
 
+static inline VfwCapture *impl_from_IAMStreamConfig(IAMStreamConfig *iface)
+{
+    return CONTAINING_RECORD(iface, VfwCapture, IAMStreamConfig_iface);
+}
+
+static inline VfwCapture *impl_from_IAMVideoProcAmp(IAMVideoProcAmp *iface)
+{
+    return CONTAINING_RECORD(iface, VfwCapture, IAMVideoProcAmp_iface);
+}
+
+static inline VfwCapture *impl_from_IPersistPropertyBag(IPersistPropertyBag *iface)
+{
+    return CONTAINING_RECORD(iface, VfwCapture, IPersistPropertyBag_iface);
+}
+
 /* VfwPin implementation */
 typedef struct VfwPinImpl
 {
@@ -119,9 +134,9 @@ IUnknown * WINAPI QCAP_createVFWCaptureFilter(IUnknown *pUnkOuter, HRESULT *phr)
 
     BaseFilter_Init(&pVfwCapture->filter, &VfwCapture_Vtbl, &CLSID_VfwCapture, (DWORD_PTR)(__FILE__ ": VfwCapture.csFilter"), &BaseFuncTable);
 
-    pVfwCapture->IAMStreamConfig_vtbl = &IAMStreamConfig_VTable;
-    pVfwCapture->IAMVideoProcAmp_vtbl = &IAMVideoProcAmp_VTable;
-    pVfwCapture->IPersistPropertyBag_vtbl = &IPersistPropertyBag_VTable;
+    pVfwCapture->IAMStreamConfig_iface.lpVtbl = &IAMStreamConfig_VTable;
+    pVfwCapture->IAMVideoProcAmp_iface.lpVtbl = &IAMVideoProcAmp_VTable;
+    pVfwCapture->IPersistPropertyBag_iface.lpVtbl = &IPersistPropertyBag_VTable;
     pVfwCapture->init = FALSE;
 
     hr = VfwPin_Construct((IBaseFilter *)&pVfwCapture->filter.lpVtbl,
@@ -152,11 +167,11 @@ static HRESULT WINAPI VfwCapture_QueryInterface(IBaseFilter * iface, REFIID riid
         *ppv = This;
     }
     else if (IsEqualIID(riid, &IID_IAMStreamConfig))
-        *ppv = &(This->IAMStreamConfig_vtbl);
+        *ppv = &This->IAMStreamConfig_iface;
     else if (IsEqualIID(riid, &IID_IAMVideoProcAmp))
-        *ppv = &(This->IAMVideoProcAmp_vtbl);
+        *ppv = &This->IAMVideoProcAmp_iface;
     else if (IsEqualIID(riid, &IID_IPersistPropertyBag))
-        *ppv = &(This->IPersistPropertyBag_vtbl);
+        *ppv = &This->IPersistPropertyBag_iface;
 
     if (!IsEqualIID(riid, &IID_IUnknown) &&
         !IsEqualIID(riid, &IID_IPersist) &&
@@ -271,7 +286,7 @@ static const IBaseFilterVtbl VfwCapture_Vtbl =
 static HRESULT WINAPI
 AMStreamConfig_QueryInterface( IAMStreamConfig * iface, REFIID riid, LPVOID * ppv )
 {
-    ICOM_THIS_MULTI(VfwCapture, IAMStreamConfig_vtbl, iface);
+    VfwCapture *This = impl_from_IAMStreamConfig(iface);
 
     TRACE("%p --> %s\n", This, debugstr_guid(riid));
 
@@ -289,7 +304,7 @@ AMStreamConfig_QueryInterface( IAMStreamConfig * iface, REFIID riid, LPVOID * pp
 
 static ULONG WINAPI AMStreamConfig_AddRef( IAMStreamConfig * iface )
 {
-    ICOM_THIS_MULTI(VfwCapture, IAMStreamConfig_vtbl, iface);
+    VfwCapture *This = impl_from_IAMStreamConfig(iface);
 
     TRACE("%p --> Forwarding to VfwCapture (%p)\n", iface, This);
     return IUnknown_AddRef((IUnknown *)This);
@@ -297,7 +312,7 @@ static ULONG WINAPI AMStreamConfig_AddRef( IAMStreamConfig * iface )
 
 static ULONG WINAPI AMStreamConfig_Release( IAMStreamConfig * iface )
 {
-    ICOM_THIS_MULTI(VfwCapture, IAMStreamConfig_vtbl, iface);
+    VfwCapture *This = impl_from_IAMStreamConfig(iface);
 
     TRACE("%p --> Forwarding to VfwCapture (%p)\n", iface, This);
     return IUnknown_Release((IUnknown *)This);
@@ -307,7 +322,7 @@ static HRESULT WINAPI
 AMStreamConfig_SetFormat(IAMStreamConfig *iface, AM_MEDIA_TYPE *pmt)
 {
     HRESULT hr;
-    ICOM_THIS_MULTI(VfwCapture, IAMStreamConfig_vtbl, iface);
+    VfwCapture *This = impl_from_IAMStreamConfig(iface);
     BasePin *pin;
 
     TRACE("(%p): %p->%p\n", iface, pmt, pmt ? pmt->pbFormat : NULL);
@@ -349,7 +364,7 @@ AMStreamConfig_SetFormat(IAMStreamConfig *iface, AM_MEDIA_TYPE *pmt)
 static HRESULT WINAPI
 AMStreamConfig_GetFormat( IAMStreamConfig *iface, AM_MEDIA_TYPE **pmt )
 {
-    ICOM_THIS_MULTI(VfwCapture, IAMStreamConfig_vtbl, iface);
+    VfwCapture *This = impl_from_IAMStreamConfig(iface);
 
     TRACE("%p -> (%p)\n", iface, pmt);
     return qcap_driver_get_format(This->driver_info, pmt);
@@ -400,14 +415,14 @@ AMVideoProcAmp_QueryInterface( IAMVideoProcAmp * iface, REFIID riid,
 
 static ULONG WINAPI AMVideoProcAmp_AddRef(IAMVideoProcAmp * iface)
 {
-    ICOM_THIS_MULTI(VfwCapture, IAMVideoProcAmp_vtbl, iface);
+    VfwCapture *This = impl_from_IAMVideoProcAmp(iface);
 
     return IUnknown_AddRef((IUnknown *)This);
 }
 
 static ULONG WINAPI AMVideoProcAmp_Release(IAMVideoProcAmp * iface)
 {
-    ICOM_THIS_MULTI(VfwCapture, IAMVideoProcAmp_vtbl, iface);
+    VfwCapture *This = impl_from_IAMVideoProcAmp(iface);
 
     return IUnknown_Release((IUnknown *)This);
 }
@@ -416,7 +431,7 @@ static HRESULT WINAPI
 AMVideoProcAmp_GetRange( IAMVideoProcAmp * iface, LONG Property, LONG *pMin,
         LONG *pMax, LONG *pSteppingDelta, LONG *pDefault, LONG *pCapsFlags )
 {
-    ICOM_THIS_MULTI(VfwCapture, IAMVideoProcAmp_vtbl, iface);
+    VfwCapture *This = impl_from_IAMVideoProcAmp(iface);
 
     return qcap_driver_get_prop_range( This->driver_info, Property, pMin, pMax,
                    pSteppingDelta, pDefault, pCapsFlags );
@@ -426,7 +441,7 @@ static HRESULT WINAPI
 AMVideoProcAmp_Set( IAMVideoProcAmp * iface, LONG Property, LONG lValue,
                     LONG Flags )
 {
-    ICOM_THIS_MULTI(VfwCapture, IAMVideoProcAmp_vtbl, iface);
+    VfwCapture *This = impl_from_IAMVideoProcAmp(iface);
 
     return qcap_driver_set_prop(This->driver_info, Property, lValue, Flags);
 }
@@ -435,7 +450,7 @@ static HRESULT WINAPI
 AMVideoProcAmp_Get( IAMVideoProcAmp * iface, LONG Property, LONG *lValue,
                     LONG *Flags )
 {
-    ICOM_THIS_MULTI(VfwCapture, IAMVideoProcAmp_vtbl, iface);
+    VfwCapture *This = impl_from_IAMVideoProcAmp(iface);
 
     return qcap_driver_get_prop(This->driver_info, Property, lValue, Flags);
 }
@@ -475,7 +490,7 @@ PPB_QueryInterface( IPersistPropertyBag * iface, REFIID riid, LPVOID * ppv )
 
 static ULONG WINAPI PPB_AddRef(IPersistPropertyBag * iface)
 {
-    ICOM_THIS_MULTI(VfwCapture, IPersistPropertyBag_vtbl, iface);
+    VfwCapture *This = impl_from_IPersistPropertyBag(iface);
 
     TRACE("%p --> Forwarding to VfwCapture (%p)\n", iface, This);
 
@@ -484,7 +499,7 @@ static ULONG WINAPI PPB_AddRef(IPersistPropertyBag * iface)
 
 static ULONG WINAPI PPB_Release(IPersistPropertyBag * iface)
 {
-    ICOM_THIS_MULTI(VfwCapture, IPersistPropertyBag_vtbl, iface);
+    VfwCapture *This = impl_from_IPersistPropertyBag(iface);
 
     TRACE("%p --> Forwarding to VfwCapture (%p)\n", iface, This);
 
@@ -494,7 +509,7 @@ static ULONG WINAPI PPB_Release(IPersistPropertyBag * iface)
 static HRESULT WINAPI
 PPB_GetClassID( IPersistPropertyBag * iface, CLSID * pClassID )
 {
-    ICOM_THIS_MULTI(VfwCapture, IPersistPropertyBag_vtbl, iface);
+    VfwCapture *This = impl_from_IPersistPropertyBag(iface);
 
     FIXME("%p - stub\n", This);
 
@@ -503,7 +518,7 @@ PPB_GetClassID( IPersistPropertyBag * iface, CLSID * pClassID )
 
 static HRESULT WINAPI PPB_InitNew(IPersistPropertyBag * iface)
 {
-    ICOM_THIS_MULTI(VfwCapture, IPersistPropertyBag_vtbl, iface);
+    VfwCapture *This = impl_from_IPersistPropertyBag(iface);
 
     FIXME("%p - stub\n", This);
 
@@ -514,7 +529,7 @@ static HRESULT WINAPI
 PPB_Load( IPersistPropertyBag * iface, IPropertyBag *pPropBag,
           IErrorLog *pErrorLog )
 {
-    ICOM_THIS_MULTI(VfwCapture, IPersistPropertyBag_vtbl, iface);
+    VfwCapture *This = impl_from_IPersistPropertyBag(iface);
     HRESULT hr;
     VARIANT var;
     const OLECHAR VFWIndex[] = {'V','F','W','I','n','d','e','x',0};
@@ -549,7 +564,7 @@ static HRESULT WINAPI
 PPB_Save( IPersistPropertyBag * iface, IPropertyBag *pPropBag,
           BOOL fClearDirty, BOOL fSaveAllProperties )
 {
-    ICOM_THIS_MULTI(VfwCapture, IPersistPropertyBag_vtbl, iface);
+    VfwCapture *This = impl_from_IPersistPropertyBag(iface);
     FIXME("%p - stub\n", This);
     return E_NOTIMPL;
 }




More information about the wine-cvs mailing list