[PATCH v2 1/2] quartz: Cache IMediaSeeking for filters.
Nikolay Sivov
nsivov at codeweavers.com
Tue Apr 7 08:47:54 CDT 2020
On 4/7/20 4:05 PM, Gabriel Ivăncescu wrote:
>
> -static BOOL is_renderer(IBaseFilter *filter)
> +static BOOL is_renderer(struct filter *filter)
> {
> IAMFilterMiscFlags *flags;
> - IMediaSeeking *seeking;
> BOOL ret = FALSE;
>
> - if (SUCCEEDED(IBaseFilter_QueryInterface(filter, &IID_IAMFilterMiscFlags, (void **)&flags)))
> + if (SUCCEEDED(IBaseFilter_QueryInterface(filter->filter, &IID_IAMFilterMiscFlags, (void **)&flags)))
> {
> if (IAMFilterMiscFlags_GetMiscFlags(flags) & AM_FILTER_MISC_FLAGS_IS_RENDERER)
> ret = TRUE;
> IAMFilterMiscFlags_Release(flags);
> }
> - else if (SUCCEEDED(IBaseFilter_QueryInterface(filter, &IID_IMediaSeeking, (void **)&seeking)))
> - {
> - IMediaSeeking_Release(seeking);
> - if (!has_output_pins(filter))
> - ret = TRUE;
> - }
> + else if (get_filter_seeking(filter) && !has_output_pins(filter->filter))
> + ret = TRUE;
> return ret;
> }
>
> @@ -675,12 +680,13 @@ static HRESULT WINAPI FilterGraph2_AddFilter(IFilterGraph2 *iface,
> }
>
> IBaseFilter_AddRef(entry->filter = filter);
> + entry->seeking = NULL;
> list_add_head(&graph->filters, &entry->entry);
> list_add_head(&graph->sorted_filters, &entry->sorted_entry);
> entry->sorting = FALSE;
> ++graph->version;
>
> - if (is_renderer(filter))
> + if (is_renderer(entry))
> ++graph->nRenderers;
Helper name does not imply important state change, will it work if you
queried once right after IBaseFilter_AddRef()? This looks like the only
place when
filter is added to the list. After that you can simply make
is_renderer() check for null pointer.
More information about the wine-devel
mailing list