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