[PATCH 04/14] quartz: Fix video renderer EndOfStream

Maarten Lankhorst m.b.lankhorst at gmail.com
Tue Nov 9 16:42:41 CST 2010


---
 dlls/quartz/videorenderer.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c
index 9645d83..2ad75c4 100644
--- a/dlls/quartz/videorenderer.c
+++ b/dlls/quartz/videorenderer.c
@@ -939,11 +939,14 @@ static HRESULT WINAPI VideoRenderer_InputPin_EndOfStream(IPin * iface)
     BaseInputPin* This = (BaseInputPin*)iface;
     VideoRendererImpl *pFilter;
     IMediaEventSink* pEventSink;
-    HRESULT hr;
+    HRESULT hr = S_OK;
 
     TRACE("(%p/%p)->()\n", This, iface);
 
+    EnterCriticalSection(This->pin.pCritSec);
     pFilter = (VideoRendererImpl*)This->pin.pinInfo.pFilter;
+    if (This->flushing || This->end_of_stream)
+        goto out;
     hr = IFilterGraph_QueryInterface(pFilter->filter.filterInfo.pGraph, &IID_IMediaEventSink, (LPVOID*)&pEventSink);
     if (SUCCEEDED(hr))
     {
@@ -951,6 +954,9 @@ static HRESULT WINAPI VideoRenderer_InputPin_EndOfStream(IPin * iface)
         IMediaEventSink_Release(pEventSink);
     }
     MediaSeekingPassThru_EOS(pFilter->seekthru_unk);
+    This->end_of_stream = 1;
+out:
+    LeaveCriticalSection(This->pin.pCritSec);
 
     return hr;
 }
-- 
1.7.1




More information about the wine-patches mailing list