aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Sabatini <stefano.sabatini-lala@poste.it>2011-02-01 20:02:17 +0100
committerMichael Niedermayer <michaelni@gmx.at>2011-02-06 20:31:42 +0100
commitab543afe47c5bc63622acce775189bb920638126 (patch)
tree66728e92d84dd52f924adf8c0b5daf05855d629f
parentc68be8e135ddcd8a043142d26a5fdc4ef01b1218 (diff)
downloadffmpeg-ab543afe47c5bc63622acce775189bb920638126.tar.gz
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 <mans@mansr.com> (cherry picked from commit 4359288c565705d1734f63d277f8918ee5af5e54)
-rw-r--r--ffmpeg.c5
-rw-r--r--ffplay.c3
-rw-r--r--libavfilter/avfiltergraph.c13
-rw-r--r--libavfilter/avfiltergraph.h5
4 files changed, 12 insertions, 14 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index 60eca1a630..a5d7e26023 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -2708,10 +2708,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.