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
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".