[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