From: "Gabriel Ivăncescu" Subject: [PATCH 2/3] quartz: Count the amount of renderers on demand. Message-Id: <1cfd72d434857280c3de361b322090b135724748.1586178366.git.gabrielopcode@gmail.com> Date: Mon, 6 Apr 2020 16:07:31 +0300 In-Reply-To: References: Signed-off-by: Gabriel Ivăncescu --- 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); -- 2.21.0