Commit 79f717bb authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Alexandre Julliard

quartz: Fix EC_COMPLETE handling on null renderer.

parent 822c3fe9
...@@ -334,19 +334,36 @@ static HRESULT WINAPI NullRenderer_Pause(IBaseFilter * iface) ...@@ -334,19 +334,36 @@ static HRESULT WINAPI NullRenderer_Pause(IBaseFilter * iface)
static HRESULT WINAPI NullRenderer_Run(IBaseFilter * iface, REFERENCE_TIME tStart) static HRESULT WINAPI NullRenderer_Run(IBaseFilter * iface, REFERENCE_TIME tStart)
{ {
HRESULT hr = S_OK;
NullRendererImpl *This = (NullRendererImpl *)iface; NullRendererImpl *This = (NullRendererImpl *)iface;
TRACE("(%p/%p)->(%s)\n", This, iface, wine_dbgstr_longlong(tStart)); TRACE("(%p/%p)->(%s)\n", This, iface, wine_dbgstr_longlong(tStart));
EnterCriticalSection(&This->filter.csFilter); EnterCriticalSection(&This->filter.csFilter);
if (This->filter.state == State_Running)
goto out;
if (This->pInputPin->pin.pConnectedTo)
{ {
This->filter.rtStreamStart = tStart; This->filter.rtStreamStart = tStart;
This->filter.state = State_Running;
This->pInputPin->end_of_stream = 0; This->pInputPin->end_of_stream = 0;
} }
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); LeaveCriticalSection(&This->filter.csFilter);
return S_OK; return hr;
} }
/** IBaseFilter implementation **/ /** IBaseFilter implementation **/
...@@ -404,10 +421,10 @@ static HRESULT WINAPI NullRenderer_InputPin_EndOfStream(IPin * iface) ...@@ -404,10 +421,10 @@ static HRESULT WINAPI NullRenderer_InputPin_EndOfStream(IPin * iface)
graph = pNull->filter.filterInfo.pGraph; graph = pNull->filter.filterInfo.pGraph;
if (graph) if (graph)
{ {
hr = IFilterGraph_QueryInterface(((NullRendererImpl*)This->pin.pinInfo.pFilter)->filter.filterInfo.pGraph, &IID_IMediaEventSink, (LPVOID*)&pEventSink); hr = IFilterGraph_QueryInterface(pNull->filter.filterInfo.pGraph, &IID_IMediaEventSink, (LPVOID*)&pEventSink);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
hr = IMediaEventSink_Notify(pEventSink, EC_COMPLETE, S_OK, 0); hr = IMediaEventSink_Notify(pEventSink, EC_COMPLETE, S_OK, (LONG_PTR)pNull);
IMediaEventSink_Release(pEventSink); IMediaEventSink_Release(pEventSink);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment