aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Sabatini <stefano.sabatini-lala@poste.it>2011-06-11 15:30:46 +0200
committerAnton Khirnov <anton@khirnov.net>2012-04-14 09:25:46 +0200
commit91d3cbe0fde05c45837649c213de879c8d85aa67 (patch)
treed3e0fc70a6c72a4b8ebd2d3f640a87c109d7467b
parent12e7e1d03e772b16ae95fa6c79ed870d9335564c (diff)
downloadffmpeg-91d3cbe0fde05c45837649c213de879c8d85aa67.tar.gz
avfiltergraph: make the AVFilterInOut alloc/free API public
This is required for letting applications to create and destroy AVFilterInOut structs in a convenient way. Signed-off-by: Anton Khirnov <anton@khirnov.net>
-rw-r--r--avconv.c4
-rw-r--r--avplay.c4
-rw-r--r--doc/APIchanges4
-rw-r--r--libavfilter/avfiltergraph.h13
-rw-r--r--libavfilter/graphparser.c35
-rw-r--r--libavfilter/version.h2
6 files changed, 42 insertions, 20 deletions
diff --git a/avconv.c b/avconv.c
index 2cefe5d549..719df6ddc4 100644
--- a/avconv.c
+++ b/avconv.c
@@ -592,8 +592,8 @@ static int configure_video_filters(InputStream *ist, OutputStream *ost)
ost->graph->scale_sws_opts = av_strdup(args);
if (ost->avfilter) {
- AVFilterInOut *outputs = av_malloc(sizeof(AVFilterInOut));
- AVFilterInOut *inputs = av_malloc(sizeof(AVFilterInOut));
+ AVFilterInOut *outputs = avfilter_inout_alloc();
+ AVFilterInOut *inputs = avfilter_inout_alloc();
outputs->name = av_strdup("in");
outputs->filter_ctx = last_filter;
diff --git a/avplay.c b/avplay.c
index 488d0fcd13..4ebccb2acf 100644
--- a/avplay.c
+++ b/avplay.c
@@ -1716,8 +1716,8 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
return ret;
if (vfilters) {
- AVFilterInOut *outputs = av_malloc(sizeof(AVFilterInOut));
- AVFilterInOut *inputs = av_malloc(sizeof(AVFilterInOut));
+ AVFilterInOut *outputs = avfilter_inout_alloc();
+ AVFilterInOut *inputs = avfilter_inout_alloc();
outputs->name = av_strdup("in");
outputs->filter_ctx = filt_src;
diff --git a/doc/APIchanges b/doc/APIchanges
index 889156e0bc..5114e14191 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -12,6 +12,10 @@ libavutil: 2011-04-18
API changes, most recent first:
+2012-xx-xx - xxxxxxx - lavfi 2.16.0 - avfiltergraph.h
+ Add avfilter_graph_parse2(), avfilter_inout_alloc() and
+ avfilter_inout_free() functions.
+
2012-xx-xx - xxxxxxx - lavu 51.27.0 - samplefmt.h
Add av_get_packed_sample_fmt() and av_get_planar_sample_fmt()
diff --git a/libavfilter/avfiltergraph.h b/libavfilter/avfiltergraph.h
index 0d250df614..0d600b91ce 100644
--- a/libavfilter/avfiltergraph.h
+++ b/libavfilter/avfiltergraph.h
@@ -112,6 +112,19 @@ typedef struct AVFilterInOut {
} AVFilterInOut;
/**
+ * Allocate a single AVFilterInOut entry.
+ * Must be freed with avfilter_inout_free().
+ * @return allocated AVFilterInOut on success, NULL on failure.
+ */
+AVFilterInOut *avfilter_inout_alloc(void);
+
+/**
+ * Free the supplied list of AVFilterInOut and set *inout to NULL.
+ * If *inout is NULL, do nothing.
+ */
+void avfilter_inout_free(AVFilterInOut **inout);
+
+/**
* Add a graph described by a string to a graph.
*
* @param graph the filter graph where to link the parsed graph context
diff --git a/libavfilter/graphparser.c b/libavfilter/graphparser.c
index d2d31653a9..454704710b 100644
--- a/libavfilter/graphparser.c
+++ b/libavfilter/graphparser.c
@@ -170,13 +170,18 @@ static int parse_filter(AVFilterContext **filt_ctx, const char **buf, AVFilterGr
return ret;
}
-static void free_inout(AVFilterInOut *head)
+AVFilterInOut *avfilter_inout_alloc(void)
{
- while (head) {
- AVFilterInOut *next = head->next;
- av_free(head->name);
- av_free(head);
- head = next;
+ return av_mallocz(sizeof(AVFilterInOut));
+}
+
+void avfilter_inout_free(AVFilterInOut **inout)
+{
+ while (*inout) {
+ AVFilterInOut *next = (*inout)->next;
+ av_freep(&(*inout)->name);
+ av_freep(inout);
+ *inout = next;
}
}
@@ -431,9 +436,9 @@ int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters,
for (; graph->filter_count > 0; graph->filter_count--)
avfilter_free(graph->filters[graph->filter_count - 1]);
av_freep(&graph->filters);
- free_inout(open_inputs);
- free_inout(open_outputs);
- free_inout(curr_inputs);
+ avfilter_inout_free(&open_inputs);
+ avfilter_inout_free(&open_outputs);
+ avfilter_inout_free(&curr_inputs);
*inputs = NULL;
*outputs = NULL;
@@ -467,7 +472,7 @@ int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,
continue;
ret = avfilter_link(match->filter_ctx, match->pad_idx,
cur->filter_ctx, cur->pad_idx);
- free_inout(match);
+ avfilter_inout_free(&match);
if (ret < 0)
goto fail;
}
@@ -487,7 +492,7 @@ int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,
continue;
ret = avfilter_link(cur->filter_ctx, cur->pad_idx,
match->filter_ctx, match->pad_idx);
- free_inout(match);
+ avfilter_inout_free(&match);
if (ret < 0)
goto fail;
}
@@ -498,9 +503,9 @@ int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,
avfilter_free(graph->filters[graph->filter_count - 1]);
av_freep(&graph->filters);
}
- free_inout(inputs);
- free_inout(outputs);
- free_inout(open_inputs);
- free_inout(open_outputs);
+ avfilter_inout_free(&inputs);
+ avfilter_inout_free(&outputs);
+ avfilter_inout_free(&open_inputs);
+ avfilter_inout_free(&open_outputs);
return ret;
}
diff --git a/libavfilter/version.h b/libavfilter/version.h
index d84b67ff76..5d646e4f86 100644
--- a/libavfilter/version.h
+++ b/libavfilter/version.h
@@ -29,7 +29,7 @@
#include "libavutil/avutil.h"
#define LIBAVFILTER_VERSION_MAJOR 2
-#define LIBAVFILTER_VERSION_MINOR 15
+#define LIBAVFILTER_VERSION_MINOR 16
#define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \