Andreas Rheinhardt (12021-09-30):
> If one looks at the many query_formats callbacks in existence,
> one will immediately recognize that there is one type of default
> callback for video and a slightly different default callback for
> audio: It is "return ff_set_common_formats_from_list(ctx, pix_fmts);"
> for video with a filter-specific pix_fmts list. For audio, it is
> the same with a filter-specific sample_fmts list together with
> ff_set_common_all_samplerates() and ff_set_common_all_channel_counts().
> 
> This commit allows to remove the boilerplate query_formats callbacks
> by replacing said callback with a union consisting the old callback
> and pointers for pixel and sample format arrays. For the not uncommon
> case in which these lists only contain a single entry (besides the
> sentinel) enum AVPixelFormat and enum AVSampleFormat fields are also
> added to the union to store them directly in the AVFilter,
> thereby avoiding a relocation.
> 
> The state of said union will be contained in a new, dedicated AVFilter
> field (the nb_inputs and nb_outputs fields have been shrunk to uint8_t
> in order to create a hole for this new field; this is no problem, as
> the maximum of all the nb_inputs is four; for nb_outputs it is only
> two).
> 
> The state's default value coincides with the earlier default of
> query_formats being unset, namely that the filter accepts all formats
> (and also sample rates and channel counts/layouts for audio)
> provided that these properties agree coincide for all inputs and
> outputs.
> 
> By using different union members for audio and video filters
> the type-unsafety of using the same functions for audio and video
> lists will furthermore be more confined to formats.c than before.
> 
> When the new fields are used, they will also avoid allocations:
> Currently something nearly equivalent to ff_default_query_formats()
> is called after every successful call to a query_formats callback;
> yet in the common case that the newly allocated AVFilterFormats
> are not used at all (namely if there are no free links) these newly
> allocated AVFilterFormats are freed again without ever being used.
> Filters no longer using the callback will not exhibit this any more.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com>
> ---
> This patchset here aims to remove boilerplate code from the
> query-formats API. Despite touching lots of filters, there should be
> only very few conflicts (if at all) with Nicolas' earlier patch [1].
> The reason for this is that the filters touched here typically only
> use ff_set_common_* functions, which are unaffected by his change.

I do not like the aesthetics of this very much, but it is a useful
change.

I have not looked at each individual filter change, but they are
straightforward.

So ok for my part.

Regards,

-- 
  Nicolas George

Attachment: signature.asc
Description: PGP signature

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to