Sebastian Lackner : qcap: Distinguish interface pointer and implementation pointer for base filter.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Jun 26 07:11:53 CDT 2015
Module: wine
Branch: master
Commit: cf234d66b167879518b20431d5b2b1a892549313
URL: http://source.winehq.org/git/wine.git/?a=commit;h=cf234d66b167879518b20431d5b2b1a892549313
Author: Sebastian Lackner <sebastian at fds-team.de>
Date: Fri Jun 26 05:52:26 2015 +0200
qcap: Distinguish interface pointer and implementation pointer for base filter.
---
dlls/qcap/vfwcapture.c | 38 ++++++++++++++++++++++++--------------
1 file changed, 24 insertions(+), 14 deletions(-)
diff --git a/dlls/qcap/vfwcapture.c b/dlls/qcap/vfwcapture.c
index efae931..7804a3d 100644
--- a/dlls/qcap/vfwcapture.c
+++ b/dlls/qcap/vfwcapture.c
@@ -68,6 +68,16 @@ typedef struct VfwCapture
IPin * pOutputPin;
} VfwCapture;
+static inline VfwCapture *impl_from_BaseFilter(BaseFilter *iface)
+{
+ return CONTAINING_RECORD(iface, VfwCapture, filter);
+}
+
+static inline VfwCapture *impl_from_IBaseFilter(IBaseFilter *iface)
+{
+ return CONTAINING_RECORD(iface, VfwCapture, filter.IBaseFilter_iface);
+}
+
static inline VfwCapture *impl_from_IAMStreamConfig(IAMStreamConfig *iface)
{
return CONTAINING_RECORD(iface, VfwCapture, IAMStreamConfig_iface);
@@ -94,7 +104,7 @@ typedef struct VfwPinImpl
static IPin* WINAPI VfwCapture_GetPin(BaseFilter *iface, int pos)
{
- VfwCapture *This = (VfwCapture *)iface;
+ VfwCapture *This = impl_from_BaseFilter(iface);
if (pos >= 1 || pos < 0)
return NULL;
@@ -148,12 +158,12 @@ IUnknown * WINAPI QCAP_createVFWCaptureFilter(IUnknown *pUnkOuter, HRESULT *phr)
ObjectRefCount(TRUE);
*phr = S_OK;
- return (IUnknown *)pVfwCapture;
+ return (IUnknown *)&pVfwCapture->filter.IBaseFilter_iface;
}
static HRESULT WINAPI VfwCapture_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv)
{
- VfwCapture *This = (VfwCapture *)iface;
+ VfwCapture *This = impl_from_IBaseFilter(iface);
TRACE("(%s, %p)\n", debugstr_guid(riid), ppv);
*ppv = NULL;
@@ -162,7 +172,7 @@ static HRESULT WINAPI VfwCapture_QueryInterface(IBaseFilter * iface, REFIID riid
IsEqualIID(riid, &IID_IMediaFilter) ||
IsEqualIID(riid, &IID_IBaseFilter))
{
- *ppv = This;
+ *ppv = &This->filter.IBaseFilter_iface;
}
else if (IsEqualIID(riid, &IID_IAMStreamConfig))
*ppv = &This->IAMStreamConfig_iface;
@@ -200,7 +210,7 @@ static HRESULT WINAPI VfwCapture_QueryInterface(IBaseFilter * iface, REFIID riid
static ULONG WINAPI VfwCapture_Release(IBaseFilter * iface)
{
- VfwCapture *This = (VfwCapture *)iface;
+ VfwCapture *This = impl_from_IBaseFilter(iface);
ULONG refCount = InterlockedDecrement(&This->filter.refCount);
TRACE("%p->() New refcount: %d\n", This, refCount);
@@ -234,7 +244,7 @@ static ULONG WINAPI VfwCapture_Release(IBaseFilter * iface)
static HRESULT WINAPI VfwCapture_Stop(IBaseFilter * iface)
{
- VfwCapture *This = (VfwCapture *)iface;
+ VfwCapture *This = impl_from_IBaseFilter(iface);
TRACE("()\n");
return qcap_driver_stop(This->driver_info, &This->filter.state);
@@ -242,7 +252,7 @@ static HRESULT WINAPI VfwCapture_Stop(IBaseFilter * iface)
static HRESULT WINAPI VfwCapture_Pause(IBaseFilter * iface)
{
- VfwCapture *This = (VfwCapture *)iface;
+ VfwCapture *This = impl_from_IBaseFilter(iface);
TRACE("()\n");
return qcap_driver_pause(This->driver_info, &This->filter.state);
@@ -250,7 +260,7 @@ static HRESULT WINAPI VfwCapture_Pause(IBaseFilter * iface)
static HRESULT WINAPI VfwCapture_Run(IBaseFilter * iface, REFERENCE_TIME tStart)
{
- VfwCapture *This = (VfwCapture *)iface;
+ VfwCapture *This = impl_from_IBaseFilter(iface);
TRACE("(%x%08x)\n", (ULONG)(tStart >> 32), (ULONG)tStart);
return qcap_driver_run(This->driver_info, &This->filter.state);
}
@@ -306,7 +316,7 @@ static ULONG WINAPI AMStreamConfig_AddRef( IAMStreamConfig * iface )
VfwCapture *This = impl_from_IAMStreamConfig(iface);
TRACE("%p --> Forwarding to VfwCapture (%p)\n", iface, This);
- return IUnknown_AddRef((IUnknown *)This);
+ return IUnknown_AddRef(&This->filter.IBaseFilter_iface);
}
static ULONG WINAPI AMStreamConfig_Release( IAMStreamConfig * iface )
@@ -314,7 +324,7 @@ static ULONG WINAPI AMStreamConfig_Release( IAMStreamConfig * iface )
VfwCapture *This = impl_from_IAMStreamConfig(iface);
TRACE("%p --> Forwarding to VfwCapture (%p)\n", iface, This);
- return IUnknown_Release((IUnknown *)This);
+ return IUnknown_Release(&This->filter.IBaseFilter_iface);
}
static HRESULT WINAPI
@@ -417,14 +427,14 @@ static ULONG WINAPI AMVideoProcAmp_AddRef(IAMVideoProcAmp * iface)
{
VfwCapture *This = impl_from_IAMVideoProcAmp(iface);
- return IUnknown_AddRef((IUnknown *)This);
+ return IUnknown_AddRef(&This->filter.IBaseFilter_iface);
}
static ULONG WINAPI AMVideoProcAmp_Release(IAMVideoProcAmp * iface)
{
VfwCapture *This = impl_from_IAMVideoProcAmp(iface);
- return IUnknown_Release((IUnknown *)This);
+ return IUnknown_Release(&This->filter.IBaseFilter_iface);
}
static HRESULT WINAPI
@@ -494,7 +504,7 @@ static ULONG WINAPI PPB_AddRef(IPersistPropertyBag * iface)
TRACE("%p --> Forwarding to VfwCapture (%p)\n", iface, This);
- return IUnknown_AddRef((IUnknown *)This);
+ return IUnknown_AddRef(&This->filter.IBaseFilter_iface);
}
static ULONG WINAPI PPB_Release(IPersistPropertyBag * iface)
@@ -503,7 +513,7 @@ static ULONG WINAPI PPB_Release(IPersistPropertyBag * iface)
TRACE("%p --> Forwarding to VfwCapture (%p)\n", iface, This);
- return IUnknown_Release((IUnknown *)This);
+ return IUnknown_Release(&This->filter.IBaseFilter_iface);
}
static HRESULT WINAPI
More information about the wine-cvs
mailing list