From 4359288c565705d1734f63d277f8918ee5af5e54 Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Tue, 1 Feb 2011 20:02:17 +0100 Subject: [PATCH] Make avfilter_graph_free() free the graph. Make avfilter_graph_free() free not only the internal structures, but also the allocated graph, and set the graph pointer to NULL for increased safety. Simplify usage. Signed-off-by: Mans Rullgard --- ffmpeg.c | 5 +---- ffplay.c | 3 +-- libavfilter/avfiltergraph.c | 13 +++++++------ libavfilter/avfiltergraph.h | 5 +++-- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/ffmpeg.c b/ffmpeg.c index fac6063474..6d4c0f6ae5 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -2698,10 +2698,7 @@ static int transcode(AVFormatContext **output_files, } } #if CONFIG_AVFILTER - if (graph) { - avfilter_graph_free(graph); - av_freep(&graph); - } + avfilter_graph_free(&graph); #endif /* finished ! */ diff --git a/ffplay.c b/ffplay.c index 1fb75027dc..21c7205b24 100644 --- a/ffplay.c +++ b/ffplay.c @@ -1899,8 +1899,7 @@ static int video_thread(void *arg) } the_end: #if CONFIG_AVFILTER - avfilter_graph_free(graph); - av_freep(&graph); + avfilter_graph_free(&graph); #endif av_free(frame); return 0; diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c index a62fe2f79d..bdf22b3df9 100644 --- a/libavfilter/avfiltergraph.c +++ b/libavfilter/avfiltergraph.c @@ -32,14 +32,15 @@ AVFilterGraph *avfilter_graph_alloc(void) return av_mallocz(sizeof(AVFilterGraph)); } -void avfilter_graph_free(AVFilterGraph *graph) +void avfilter_graph_free(AVFilterGraph **graph) { - if (!graph) + if (!*graph) return; - for (; graph->filter_count > 0; graph->filter_count --) - avfilter_free(graph->filters[graph->filter_count - 1]); - av_freep(&graph->scale_sws_opts); - av_freep(&graph->filters); + for (; (*graph)->filter_count > 0; (*graph)->filter_count--) + avfilter_free((*graph)->filters[(*graph)->filter_count - 1]); + av_freep(&(*graph)->scale_sws_opts); + av_freep(&(*graph)->filters); + av_freep(graph); } int avfilter_graph_add_filter(AVFilterGraph *graph, AVFilterContext *filter) diff --git a/libavfilter/avfiltergraph.h b/libavfilter/avfiltergraph.h index 1b0d242dc5..0140af0801 100644 --- a/libavfilter/avfiltergraph.h +++ b/libavfilter/avfiltergraph.h @@ -79,9 +79,10 @@ int avfilter_graph_create_filter(AVFilterContext **filt_ctx, AVFilter *filt, int avfilter_graph_config(AVFilterGraph *graphctx, AVClass *log_ctx); /** - * Free a graph and destroy its links, graph may be NULL. + * Free a graph, destroy its links, and set *graph to NULL. + * If *graph is NULL, do nothing. */ -void avfilter_graph_free(AVFilterGraph *graph); +void avfilter_graph_free(AVFilterGraph **graph); /** * A linked-list of the inputs/outputs of the filter chain. -- GitLab