aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Sabatini <stefano.sabatini-lala@poste.it>2011-06-11 15:30:46 +0200
committerStefano Sabatini <stefano.sabatini-lala@poste.it>2011-06-12 22:46:02 +0200
commitc535494268069282cc1147c4d61d4a88ce39e078 (patch)
treeb7aa99064bf1b577eae22eac07ba4fa361815cc5
parent6119b23a3662d1e106cdf69ef3171b2e7e1d495c (diff)
downloadffmpeg-c535494268069282cc1147c4d61d4a88ce39e078.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.
-rw-r--r--doc/APIchanges3
-rw-r--r--ffmpeg.c4
-rw-r--r--ffplay.c4
-rw-r--r--libavfilter/avfilter.h2
-rw-r--r--libavfilter/avfiltergraph.h18
-rw-r--r--libavfilter/graphparser.c23
6 files changed, 38 insertions, 16 deletions
diff --git a/doc/APIchanges b/doc/APIchanges
index 40efee8121..d94c553af9 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,9 @@ libavutil: 2011-04-18
API changes, most recent first:
+2011-06-12 - xxxxxxx - lavfi 2.17.0 - avfiltergraph.h
+ Add avfilter_inout_alloc() and avfilter_inout_free() functions.
+
2011-06-12 - xxxxxxx - lavfi 2.16.0 - avfilter_graph_parse()
Change avfilter_graph_parse() signature.
diff --git a/ffmpeg.c b/ffmpeg.c
index f69c054bee..c51f371d5e 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -405,8 +405,8 @@ static int configure_video_filters(AVInputStream *ist, AVOutputStream *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/ffplay.c b/ffplay.c
index c5f5f75731..4145f9c24b 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -1695,8 +1695,8 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
goto the_end;
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/libavfilter/avfilter.h b/libavfilter/avfilter.h
index fbd1dc457f..84fa32e64e 100644
--- a/libavfilter/avfilter.h
+++ b/libavfilter/avfilter.h
@@ -26,7 +26,7 @@
#include "libavutil/samplefmt.h"
#define LIBAVFILTER_VERSION_MAJOR 2
-#define LIBAVFILTER_VERSION_MINOR 16
+#define LIBAVFILTER_VERSION_MINOR 17
#define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
diff --git a/libavfilter/avfiltergraph.h b/libavfilter/avfiltergraph.h
index 538fd2cb95..a975926fd1 100644
--- a/libavfilter/avfiltergraph.h
+++ b/libavfilter/avfiltergraph.h
@@ -108,14 +108,28 @@ typedef struct AVFilterInOut {
} AVFilterInOut;
/**
+ * Create an AVFilterInOut.
+ * Must be free with avfilter_inout_free().
+ */
+AVFilterInOut *avfilter_inout_alloc(void);
+
+/**
+ * Free the AVFilterInOut in *inout, and set its pointer 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
* @param filters string to be parsed
* @param inputs linked list to the inputs of the graph, may be NULL.
- * It is updated to contain the list of open inputs after the parsing.
+ * It is updated to contain the list of open inputs after the parsing,
+ * should be freed with avfilter_inout_free().
* @param outputs linked list to the outputs of the graph, may be NULL.
- * It is updated to contain the list of open outputs after the parsing.
+ * It is updated to contain the list of open outputs after the parsing,
+ * should be freed with avfilter_inout_free().
* @return zero on success, a negative AVERROR code on error
*/
int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,
diff --git a/libavfilter/graphparser.c b/libavfilter/graphparser.c
index ea0c5dda7f..d62ba8d205 100644
--- a/libavfilter/graphparser.c
+++ b/libavfilter/graphparser.c
@@ -168,13 +168,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;
}
}
@@ -396,8 +401,8 @@ int avfilter_graph_parse(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);
return ret;
}