Maarten Lankhorst : quartz: Fix EC_COMPLETE handling on null renderer.
Alexandre Julliard
julliard at winehq.org
Fri Nov 5 13:47:16 CDT 2010
Module: wine
Branch: master
Commit: 79f717bb91e5ffca95413e8d80e84a6a0bcf91fc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=79f717bb91e5ffca95413e8d80e84a6a0bcf91fc
Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Thu Nov 4 17:02:25 2010 +0100
quartz: Fix EC_COMPLETE handling on null renderer.
---
dlls/quartz/nullrenderer.c | 25 +++++++++++++++++++++----
1 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/dlls/quartz/nullrenderer.c b/dlls/quartz/nullrenderer.c
index 1764e23..cab2090 100644
--- a/dlls/quartz/nullrenderer.c
+++ b/dlls/quartz/nullrenderer.c
@@ -334,19 +334,36 @@ static HRESULT WINAPI NullRenderer_Pause(IBaseFilter * iface)
static HRESULT WINAPI NullRenderer_Run(IBaseFilter * iface, REFERENCE_TIME tStart)
{
+ HRESULT hr = S_OK;
NullRendererImpl *This = (NullRendererImpl *)iface;
TRACE("(%p/%p)->(%s)\n", This, iface, wine_dbgstr_longlong(tStart));
EnterCriticalSection(&This->filter.csFilter);
+ if (This->filter.state == State_Running)
+ goto out;
+ if (This->pInputPin->pin.pConnectedTo)
{
This->filter.rtStreamStart = tStart;
- This->filter.state = State_Running;
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);
- return S_OK;
+ return hr;
}
/** IBaseFilter implementation **/
@@ -404,10 +421,10 @@ static HRESULT WINAPI NullRenderer_InputPin_EndOfStream(IPin * iface)
graph = pNull->filter.filterInfo.pGraph;
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))
{
- hr = IMediaEventSink_Notify(pEventSink, EC_COMPLETE, S_OK, 0);
+ hr = IMediaEventSink_Notify(pEventSink, EC_COMPLETE, S_OK, (LONG_PTR)pNull);
IMediaEventSink_Release(pEventSink);
}
}
More information about the wine-cvs
mailing list