From: Stefano Sabatini <[email protected]> This is required for letting applications to create and destroy AVFilterInOut structs in a convenient way.
Signed-off-by: Anton Khirnov <[email protected]> --- avconv.c | 4 ++-- avplay.c | 4 ++-- doc/APIchanges | 4 ++++ libavfilter/avfiltergraph.h | 13 +++++++++++++ libavfilter/graphparser.c | 35 ++++++++++++++++++++--------------- libavfilter/version.h | 2 +- 6 files changed, 42 insertions(+), 20 deletions(-) diff --git a/avconv.c b/avconv.c index af73f08..746ac4b 100644 --- a/avconv.c +++ b/avconv.c @@ -603,8 +603,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 d9c1786..e97e3f6 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 15eec40..c06cdc6 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-03-06 - 4d851f8 - lavu 51.25.0 - cpu.h Add av_set_cpu_flags_mask(). diff --git a/libavfilter/avfiltergraph.h b/libavfilter/avfiltergraph.h index bff1cd9..c15a8e3 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 7a899a8..4d4e95c 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; } } @@ -398,9 +403,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; @@ -434,7 +439,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; } @@ -454,7 +459,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; } @@ -465,9 +470,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 d84b67f..5d646e4 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, \ -- 1.7.9.1 _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
