Maarten Lankhorst : quartz: Remove default clock if the providing filter is removed from filtergraph.
Alexandre Julliard
julliard at winehq.org
Mon Dec 6 13:18:35 CST 2010
Module: wine
Branch: master
Commit: 804a9d14c96ae14634a26a0d095119105b43deb6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=804a9d14c96ae14634a26a0d095119105b43deb6
Author: Maarten Lankhorst <m.b.lankhorst at 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);
More information about the wine-cvs
mailing list