Module: wine Branch: master Commit: 804a9d14c96ae14634a26a0d095119105b43deb6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=804a9d14c96ae14634a26a0d09...
Author: Maarten Lankhorst m.b.lankhorst@gmail.com Date: Mon Dec 6 14:16:41 2010 +0100
quartz: Remove default clock if the providing filter is removed from filtergraph.
---
dlls/quartz/filtergraph.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c index ef398cb..50a045e 100644 --- a/dlls/quartz/filtergraph.c +++ b/dlls/quartz/filtergraph.c @@ -184,6 +184,7 @@ typedef struct _IFilterGraphImpl { int filterCapacity; LONG nameIndex; IReferenceClock *refClock; + IBaseFilter *refClockProvider; EventsQueue evqueue; HANDLE hEventCompletion; int CompletionStatus; @@ -484,6 +485,12 @@ static HRESULT WINAPI FilterGraph2_RemoveFilter(IFilterGraph2 *iface, IBaseFilte IEnumPins *penumpins = NULL; FILTER_STATE state;
+ if (This->defaultclock && This->refClockProvider == pFilter) + { + IMediaFilter_SetSyncSource((IMediaFilter*)&This->IMediaFilter_vtbl, NULL); + This->defaultclock = 1; + } + TRACE("Removing filter %s\n", debugstr_w(This->pFilterNames[i])); IBaseFilter_GetState(pFilter, 0, &state); if (state == State_Running) @@ -781,7 +788,12 @@ static HRESULT WINAPI FilterGraph2_SetDefaultSyncSource(IFilterGraph2 *iface) { }
if (!pClock) + { hr = CoCreateInstance(&CLSID_SystemClock, NULL, CLSCTX_INPROC_SERVER, &IID_IReferenceClock, (LPVOID*)&pClock); + This->refClockProvider = NULL; + } + else + This->refClockProvider = This->ppFiltersInGraph[i];
if (SUCCEEDED(hr)) { @@ -5485,6 +5497,7 @@ HRESULT FilterGraph_create(IUnknown *pUnkOuter, LPVOID *ppObj) fimpl->notif.disabled = FALSE; fimpl->nRenderers = 0; fimpl->EcCompleteCount = 0; + fimpl->refClockProvider = NULL; fimpl->state = State_Stopped; EventsQueue_Init(&fimpl->evqueue); InitializeCriticalSection(&fimpl->cs);