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