Chris Robinson : quartz: Connect input when the pins connect, not when querying.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Apr 4 12:32:26 CDT 2007


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

Author: Chris Robinson <chris.kcat at gmail.com>
Date:   Mon Apr  2 23:45:27 2007 -0700

quartz: Connect input when the pins connect, not when querying.

And clean up when disconnecting input.

---

 dlls/quartz/transform.c |   68 +++++++++++++++++++++++++++++------------------
 1 files changed, 42 insertions(+), 26 deletions(-)

diff --git a/dlls/quartz/transform.c b/dlls/quartz/transform.c
index 0662523..5a1b502 100644
--- a/dlls/quartz/transform.c
+++ b/dlls/quartz/transform.c
@@ -97,11 +97,13 @@ static HRESULT TransformFilter_Sample(LPVOID iface, IMediaSample * pSample)
 
 static HRESULT TransformFilter_Input_QueryAccept(LPVOID iface, const AM_MEDIA_TYPE * pmt)
 {
-    TransformFilterImpl* This = (TransformFilterImpl*)iface;
+    /* TransformFilterImpl* This = (TransformFilterImpl*)iface; */
     TRACE("%p\n", iface);
     dump_AM_MEDIA_TYPE(pmt);
 
-    return This->pFuncsTable->pfnConnectInput(This, pmt);
+    /* FIXME: Add a function to verify media type with the actual filter */
+    /* return This->pFuncsTable->pfnConnectInput(This, pmt); */
+    return S_OK;
 }
 
 
@@ -294,8 +296,6 @@ static ULONG WINAPI TransformFilter_Release(IBaseFilter * iface)
         CoTaskMemFree(This->ppPins);
         This->lpVtbl = NULL;
 
-	This->pFuncsTable->pfnCleanup(This);
-
         This->csFilter.DebugInfo->Spare[0] = 0;
         DeleteCriticalSection(&This->csFilter);
 
@@ -535,14 +535,48 @@ static HRESULT WINAPI TransformFilter_InputPin_EndOfStream(IPin * iface)
     return hr;
 }
 
+static HRESULT WINAPI TransformFilter_InputPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt)
+{
+    InputPin* This = (InputPin*) iface;
+    TransformFilterImpl* pTransform;
+    HRESULT hr;
+
+    TRACE("(%p)->(%p, %p)\n", iface, pReceivePin, pmt);
+
+    pTransform = (TransformFilterImpl*)This->pin.pinInfo.pFilter;
+
+    hr = pTransform->pFuncsTable->pfnConnectInput(pTransform, pmt);
+    if (SUCCEEDED(hr))
+    {
+        hr = InputPin_ReceiveConnection(iface, pReceivePin, pmt);
+        if (FAILED(hr))
+            pTransform->pFuncsTable->pfnCleanup(pTransform);
+    }
+
+    return hr;
+}
+
+static HRESULT WINAPI TransformFilter_InputPin_Disconnect(IPin * iface)
+{
+    InputPin* This = (InputPin*) iface;
+    TransformFilterImpl* pTransform;
+
+    TRACE("(%p)->()\n", iface);
+
+    pTransform = (TransformFilterImpl*)This->pin.pinInfo.pFilter;
+    pTransform->pFuncsTable->pfnCleanup(pTransform);
+
+    return IPinImpl_Disconnect(iface);
+}
+
 static const IPinVtbl TransformFilter_InputPin_Vtbl = 
 {
     InputPin_QueryInterface,
     IPinImpl_AddRef,
     InputPin_Release,
     InputPin_Connect,
-    InputPin_ReceiveConnection,
-    IPinImpl_Disconnect,
+    TransformFilter_InputPin_ReceiveConnection,
+    TransformFilter_InputPin_Disconnect,
     IPinImpl_ConnectedTo,
     IPinImpl_ConnectionMediaType,
     IPinImpl_QueryPinInfo,
@@ -570,32 +604,14 @@ static HRESULT WINAPI TransformFilter_Output_EnumMediaTypes(IPin * iface, IEnumM
     return IEnumMediaTypesImpl_Construct(&emd, ppEnum);
 }
 
-static HRESULT WINAPI TransformFilter_Output_Disconnect(IPin * iface)
-{
-    OutputPin* This = (OutputPin*)iface;
-    HRESULT hr;
-    TransformFilterImpl* pTransformFilter = (TransformFilterImpl*)This->pin.pinInfo.pFilter;
-
-    TRACE("(%p/%p)->()\n", This, iface);
-
-    hr = OutputPin_Disconnect(iface);
-
-    if (hr == S_OK)
-    {
-	pTransformFilter->pFuncsTable->pfnCleanup(pTransformFilter);
-    }
-
-    return hr;
-}
-
-static const IPinVtbl TransformFilter_OutputPin_Vtbl = 
+static const IPinVtbl TransformFilter_OutputPin_Vtbl =
 {
     OutputPin_QueryInterface,
     IPinImpl_AddRef,
     OutputPin_Release,
     OutputPin_Connect,
     OutputPin_ReceiveConnection,
-    TransformFilter_Output_Disconnect,
+    OutputPin_Disconnect,
     IPinImpl_ConnectedTo,
     IPinImpl_ConnectionMediaType,
     IPinImpl_QueryPinInfo,




More information about the wine-cvs mailing list