[PATCH] quartz: Remove default clock if the providing filter is removed from filtergraph

Maarten Lankhorst m.b.lankhorst at gmail.com
Fri Dec 3 14:02:54 CST 2010


---
 dlls/quartz/filtergraph.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c
index 3ce2bd7..5aefb29 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))
     {
-- 
1.7.1




More information about the wine-patches mailing list