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