[FFmpeg-cvslog] avfiltergraph: make the AVFilterInOut alloc/free API public

Stefano Sabatini git at videolan.org
Mon Jun 13 00:11:18 CEST 2011


ffmpeg | branch: master | Stefano Sabatini <stefano.sabatini-lala at poste.it> | Sat Jun 11 15:30:46 2011 +0200| [c535494268069282cc1147c4d61d4a88ce39e078] | committer: Stefano Sabatini

avfiltergraph: make the AVFilterInOut alloc/free API public

This is required for letting applications to create and destroy
AVFilterInOut structs in a convenient way.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c535494268069282cc1147c4d61d4a88ce39e078
---

 doc/APIchanges              |    3 +++
 ffmpeg.c                    |    4 ++--
 ffplay.c                    |    4 ++--
 libavfilter/avfilter.h      |    2 +-
 libavfilter/avfiltergraph.h |   18 ++++++++++++++++--
 libavfilter/graphparser.c   |   23 ++++++++++++++---------
 6 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 40efee8..d94c553 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 f69c054..c51f371 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 c5f5f75..4145f9c 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 fbd1dc4..84fa32e 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 538fd2c..a975926 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 ea0c5dd..d62ba8d 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;
 }



More information about the ffmpeg-cvslog mailing list