Michael Stefaniuc : quartz/tests: Store the TestFilterImpl instead of its iface in IEnumPinsImpl.
Alexandre Julliard
julliard at winehq.org
Mon Jun 20 14:24:12 CDT 2011
Module: wine
Branch: master
Commit: ee9ca54eba21df940d3f0896ce22ee266104211d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ee9ca54eba21df940d3f0896ce22ee266104211d
Author: Michael Stefaniuc <mstefani at redhat.de>
Date: Sun Jun 19 14:36:29 2011 +0200
quartz/tests: Store the TestFilterImpl instead of its iface in IEnumPinsImpl.
---
dlls/quartz/tests/filtergraph.c | 50 +++++++++++++++++++-------------------
1 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c
index 98445f2..cd3daaf 100644
--- a/dlls/quartz/tests/filtergraph.c
+++ b/dlls/quartz/tests/filtergraph.c
@@ -28,6 +28,19 @@
#include "dshow.h"
#include "control.h"
+typedef struct TestFilterImpl
+{
+ IBaseFilter IBaseFilter_iface;
+
+ LONG refCount;
+ CRITICAL_SECTION csFilter;
+ FILTER_STATE state;
+ FILTER_INFO filterInfo;
+ CLSID clsid;
+ IPin **ppPins;
+ UINT nPins;
+} TestFilterImpl;
+
#define FILE_LEN 9
static const char avifileA[FILE_LEN] = "test.avi";
static const char mpegfileA[FILE_LEN] = "test.mpg";
@@ -882,14 +895,14 @@ static HRESULT TestFilter_Pin_Construct(const IPinVtbl *Pin_Vtbl, const PIN_INFO
/* IEnumPins implementation */
-typedef HRESULT (* FNOBTAINPIN)(IBaseFilter *iface, ULONG pos, IPin **pin, DWORD *lastsynctick);
+typedef HRESULT (* FNOBTAINPIN)(TestFilterImpl *tf, ULONG pos, IPin **pin, DWORD *lastsynctick);
typedef struct IEnumPinsImpl
{
IEnumPins IEnumPins_iface;
LONG refCount;
ULONG uIndex;
- IBaseFilter *base;
+ TestFilterImpl *base;
FNOBTAINPIN receive_pin;
DWORD synctime;
} IEnumPinsImpl;
@@ -901,7 +914,7 @@ static inline IEnumPinsImpl *impl_from_IEnumPins(IEnumPins *iface)
return CONTAINING_RECORD(iface, IEnumPinsImpl, IEnumPins_iface);
}
-static HRESULT IEnumPinsImpl_Construct(IEnumPins ** ppEnum, FNOBTAINPIN receive_pin, IBaseFilter *base)
+static HRESULT createenumpins(IEnumPins ** ppEnum, FNOBTAINPIN receive_pin, TestFilterImpl *base)
{
IEnumPinsImpl * pEnumPins;
@@ -919,7 +932,7 @@ static HRESULT IEnumPinsImpl_Construct(IEnumPins ** ppEnum, FNOBTAINPIN receive_
pEnumPins->uIndex = 0;
pEnumPins->receive_pin = receive_pin;
pEnumPins->base = base;
- IBaseFilter_AddRef(base);
+ IBaseFilter_AddRef(&base->IBaseFilter_iface);
*ppEnum = &pEnumPins->IEnumPins_iface;
receive_pin(base, ~0, NULL, &pEnumPins->synctime);
@@ -960,7 +973,7 @@ static ULONG WINAPI IEnumPinsImpl_Release(IEnumPins * iface)
if (!refCount)
{
- IBaseFilter_Release(This->base);
+ IBaseFilter_Release(&This->base->IBaseFilter_iface);
CoTaskMemFree(This);
return 0;
}
@@ -1042,7 +1055,7 @@ static HRESULT WINAPI IEnumPinsImpl_Clone(IEnumPins * iface, IEnumPins ** ppEnum
HRESULT hr;
IEnumPinsImpl *This = impl_from_IEnumPins(iface);
- hr = IEnumPinsImpl_Construct(ppEnum, This->receive_pin, This->base);
+ hr = createenumpins(ppEnum, This->receive_pin, This->base);
if (FAILED(hr))
return hr;
return IEnumPins_Skip(*ppEnum, This->uIndex);
@@ -1068,19 +1081,6 @@ PIN_DIRECTION pinDir;
const GUID *mediasubtype;
} TestFilterPinData;
-typedef struct TestFilterImpl
-{
- IBaseFilter IBaseFilter_iface;
-
- LONG refCount;
- CRITICAL_SECTION csFilter;
- FILTER_STATE state;
- FILTER_INFO filterInfo;
- CLSID clsid;
- IPin ** ppPins;
- UINT nPins;
-} TestFilterImpl;
-
static const IBaseFilterVtbl TestFilter_Vtbl;
static inline TestFilterImpl *impl_from_IBaseFilter(IBaseFilter *iface)
@@ -1285,24 +1285,24 @@ static HRESULT WINAPI TestFilter_GetSyncSource(IBaseFilter * iface, IReferenceCl
/** IBaseFilter implementation **/
-static HRESULT TestFilter_GetPin(IBaseFilter *iface, ULONG pos, IPin **pin, DWORD *lastsynctick)
+static HRESULT getpin_callback(TestFilterImpl *tf, ULONG pos, IPin **pin, DWORD *lastsynctick)
{
- TestFilterImpl *This = (TestFilterImpl *)iface;
-
/* Our pins are static, not changing so setting static tick count is ok */
*lastsynctick = 0;
- if (pos >= This->nPins)
+ if (pos >= tf->nPins)
return S_FALSE;
- *pin = This->ppPins[pos];
+ *pin = tf->ppPins[pos];
IPin_AddRef(*pin);
return S_OK;
}
static HRESULT WINAPI TestFilter_EnumPins(IBaseFilter * iface, IEnumPins **ppEnum)
{
- return IEnumPinsImpl_Construct(ppEnum, TestFilter_GetPin, iface);
+ TestFilterImpl *This = impl_from_IBaseFilter(iface);
+
+ return createenumpins(ppEnum, getpin_callback, This);
}
static HRESULT WINAPI TestFilter_FindPin(IBaseFilter * iface, LPCWSTR Id, IPin **ppPin)
More information about the wine-cvs
mailing list