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