On Wed, Oct 13, 2021 at 6:50 AM Soft Works <softwo...@hotmail.com> wrote:
> The purpose of these additions is for being able to programatically > retrieve > the supported formats of a filter for each input and output without adding > the filter to a graph and creating connections. > That is flawed by definition. > > Signed-off-by: softworkz <softwo...@hotmail.com> > --- > doc/APIchanges | 3 +++ > libavfilter/avfilter.c | 4 ++-- > libavfilter/avfilter.h | 22 ++++++++++++++++++++++ > libavfilter/avfiltergraph.c | 18 ++++++++++++++---- > libavfilter/version.h | 2 +- > 5 files changed, 42 insertions(+), 7 deletions(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 7b267a79ac..903de43365 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -14,6 +14,9 @@ libavutil: 2021-04-27 > > API changes, most recent first: > > +2021-10-12 - xxxxxxxxxx - lavf 8.13.100 - avfilter.h > + Add avfilter_alloc() and avfilter_query_formats(). > + > 2021-09-21 - xxxxxxxxxx - lavu 57.7.100 - pixfmt.h > Add AV_PIX_FMT_X2BGR10. > > diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c > index 7362bcdab5..645af2cb11 100644 > --- a/libavfilter/avfilter.c > +++ b/libavfilter/avfilter.c > @@ -769,12 +769,12 @@ void avfilter_free(AVFilterContext *filter) > > for (i = 0; i < filter->nb_inputs; i++) { > free_link(filter->inputs[i]); > - if (filter->input_pads[i].flags & AVFILTERPAD_FLAG_FREE_NAME) > + if (filter->input_pads && filter->input_pads[i].flags & > AVFILTERPAD_FLAG_FREE_NAME) > av_freep(&filter->input_pads[i].name); > } > for (i = 0; i < filter->nb_outputs; i++) { > free_link(filter->outputs[i]); > - if (filter->output_pads[i].flags & AVFILTERPAD_FLAG_FREE_NAME) > + if (filter->output_pads && filter->output_pads[i].flags & > AVFILTERPAD_FLAG_FREE_NAME) > av_freep(&filter->output_pads[i].name); > } > > diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h > index f7208754a7..24119993d6 100644 > --- a/libavfilter/avfilter.h > +++ b/libavfilter/avfilter.h > @@ -911,6 +911,28 @@ typedef struct AVFilterGraph { > unsigned disable_auto_convert; > } AVFilterGraph; > > +/** > + * Allocate a new filter context and return it. > + * > + * @param filter what filter to create an instance of > + * @param inst_name name to give to the new filter context > + * > + * @return newly created filter context or NULL on failure > + * > + * @note for adding a filter to a filtergraph, use > + * avfilter_graph_alloc_filter() instead. > + */ > +AVFilterContext *avfilter_alloc(const AVFilter *filter, const char > *inst_name); > + > +/** > + * Query the formats of a filter. > + * > + * @param filter the filter context > + * > + * @return 0 on success > + */ > +int avfilter_query_formats(AVFilterContext *filter); > + > /** > * Allocate a filter graph. > * > diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c > index b8b432e98b..64379782fc 100644 > --- a/libavfilter/avfiltergraph.c > +++ b/libavfilter/avfiltergraph.c > @@ -81,6 +81,11 @@ int ff_graph_thread_init(AVFilterGraph *graph) > } > #endif > > +AVFilterContext *avfilter_alloc(const AVFilter *filter, const char > *inst_name) > +{ > + return ff_filter_alloc(filter, inst_name); > +} > + > AVFilterGraph *avfilter_graph_alloc(void) > { > AVFilterGraph *ret = av_mallocz(sizeof(*ret)); > @@ -395,6 +400,14 @@ static int formats_declared(AVFilterContext *f) > return 1; > } > > +int avfilter_query_formats(AVFilterContext *filter) > +{ > + if (filter->filter->formats_state == FF_FILTER_FORMATS_QUERY_FUNC) > + return filter_query_formats(filter); > + > + return ff_default_query_formats(filter); > +} > + > /** > * Perform one round of query_formats() and merging formats lists on the > * filter graph. > @@ -418,10 +431,7 @@ static int query_formats(AVFilterGraph *graph, void > *log_ctx) > AVFilterContext *f = graph->filters[i]; > if (formats_declared(f)) > continue; > - if (f->filter->formats_state == FF_FILTER_FORMATS_QUERY_FUNC) > - ret = filter_query_formats(f); > - else > - ret = ff_default_query_formats(f); > + ret = avfilter_query_formats(f); > if (ret < 0 && ret != AVERROR(EAGAIN)) > return ret; > /* note: EAGAIN could indicate a partial success, not counted yet > */ > diff --git a/libavfilter/version.h b/libavfilter/version.h > index e4c25b9225..dca5aacb45 100644 > --- a/libavfilter/version.h > +++ b/libavfilter/version.h > @@ -30,7 +30,7 @@ > #include "libavutil/version.h" > > #define LIBAVFILTER_VERSION_MAJOR 8 > -#define LIBAVFILTER_VERSION_MINOR 12 > +#define LIBAVFILTER_VERSION_MINOR 13 > #define LIBAVFILTER_VERSION_MICRO 100 > > > -- > 2.30.2.windows.1 > > _______________________________________________ > 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". > _______________________________________________ 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".