Maarten Lankhorst : quartz: Fix EC_COMPLETE handling on video renderer.

Alexandre Julliard julliard at winehq.org
Fri Nov 5 13:47:16 CDT 2010


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

Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date:   Thu Nov  4 17:02:23 2010 +0100

quartz: Fix EC_COMPLETE handling on video renderer.

---

 dlls/quartz/videorenderer.c |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c
index 11e6099..c30ce06 100644
--- a/dlls/quartz/videorenderer.c
+++ b/dlls/quartz/videorenderer.c
@@ -829,12 +829,15 @@ static HRESULT WINAPI VideoRenderer_Pause(IBaseFilter * iface)
 
 static HRESULT WINAPI VideoRenderer_Run(IBaseFilter * iface, REFERENCE_TIME tStart)
 {
+    HRESULT hr = S_OK;
     VideoRendererImpl *This = (VideoRendererImpl *)iface;
 
     TRACE("(%p/%p)->(%s)\n", This, iface, wine_dbgstr_longlong(tStart));
 
     EnterCriticalSection(&This->filter.csFilter);
-    if (This->filter.state != State_Running)
+    if (This->filter.state == State_Running)
+        goto out;
+    if (This->pInputPin->pin.pConnectedTo)
     {
         if (This->filter.state == State_Stopped)
         {
@@ -845,10 +848,22 @@ static HRESULT WINAPI VideoRenderer_Run(IBaseFilter * iface, REFERENCE_TIME tSta
 
         This->filter.rtStreamStart = tStart;
         This->filter.state = State_Running;
+    } else if (This->filter.filterInfo.pGraph) {
+        IMediaEventSink *pEventSink;
+        hr = IFilterGraph_QueryInterface(This->filter.filterInfo.pGraph, &IID_IMediaEventSink, (LPVOID*)&pEventSink);
+        if (SUCCEEDED(hr))
+        {
+            hr = IMediaEventSink_Notify(pEventSink, EC_COMPLETE, S_OK, (LONG_PTR)This);
+            IMediaEventSink_Release(pEventSink);
+        }
+        hr = S_OK;
     }
+    if (SUCCEEDED(hr))
+        This->filter.state = State_Running;
+out:
     LeaveCriticalSection(&This->filter.csFilter);
 
-    return S_OK;
+    return hr;
 }
 
 static HRESULT WINAPI VideoRenderer_GetState(IBaseFilter * iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState)
@@ -913,7 +928,7 @@ static HRESULT WINAPI VideoRenderer_InputPin_EndOfStream(IPin * iface)
     hr = IFilterGraph_QueryInterface(pFilter->filter.filterInfo.pGraph, &IID_IMediaEventSink, (LPVOID*)&pEventSink);
     if (SUCCEEDED(hr))
     {
-        hr = IMediaEventSink_Notify(pEventSink, EC_COMPLETE, S_OK, 0);
+        hr = IMediaEventSink_Notify(pEventSink, EC_COMPLETE, S_OK, (LONG_PTR)pFilter);
         IMediaEventSink_Release(pEventSink);
     }
     MediaSeekingPassThru_EOS(pFilter->seekthru_unk);




More information about the wine-cvs mailing list