Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com ---
This is needed to behave like Windows and pass the tests in the next patch, because is_renderer queries the filter for IMediaSeeking.
dlls/quartz/filtergraph.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c index 0de16c4..4b6d8d5 100644 --- a/dlls/quartz/filtergraph.c +++ b/dlls/quartz/filtergraph.c @@ -686,9 +686,7 @@ static HRESULT WINAPI FilterGraph2_AddFilter(IFilterGraph2 *iface, entry->sorting = FALSE; ++graph->version;
- if (is_renderer(entry)) - ++graph->nRenderers; - + graph->nRenderers = -1; return duplicate_name ? VFW_S_DUPLICATE_NAME : hr; }
@@ -761,9 +759,7 @@ static HRESULT WINAPI FilterGraph2_RemoveFilter(IFilterGraph2 *iface, IBaseFilte hr = IBaseFilter_JoinFilterGraph(pFilter, NULL, NULL); if (SUCCEEDED(hr)) { - if (is_renderer(entry)) - --This->nRenderers; - + This->nRenderers = -1; IBaseFilter_SetSyncSource(pFilter, NULL); IBaseFilter_Release(pFilter); if (entry->seeking) @@ -5258,6 +5254,14 @@ static HRESULT WINAPI MediaFilter_Run(IMediaFilter *iface, REFERENCE_TIME start) stream_start += 500000; }
+ if (graph->nRenderers == -1) + { + graph->nRenderers = 0; + LIST_FOR_EACH_ENTRY(filter, &graph->filters, struct filter, entry) + if (is_renderer(filter)) + ++graph->nRenderers; + } + LIST_FOR_EACH_ENTRY(filter, &graph->sorted_filters, struct filter, sorted_entry) { filter_hr = IBaseFilter_Run(filter->filter, stream_start);