[FFmpeg-devel] [PATCH 1/5] avfilter/avfilter: Add avfilter_alloc() and avfilter_query_formats() for initializing filters without a graph
Soft Works
softworkz at hotmail.com
Wed Oct 13 07:49:55 EEST 2021
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 <softworkz at 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
More information about the ffmpeg-devel
mailing list