diff --git a/avconv_filter.c b/avconv_filter.c index 43308024f2..e53dcd271c 100644 --- a/avconv_filter.c +++ b/avconv_filter.c @@ -709,7 +709,7 @@ int configure_filtergraph(FilterGraph *fg) } if ((ret = avfilter_graph_parse2(fg->graph, graph_desc, &inputs, &outputs)) < 0) - return ret; + goto fail; if (hw_device_ctx) { for (i = 0; i < fg->graph->nb_filters; i++) { @@ -720,12 +720,13 @@ int configure_filtergraph(FilterGraph *fg) if (simple && (!inputs || inputs->next || !outputs || outputs->next)) { av_log(NULL, AV_LOG_ERROR, "Simple filtergraph '%s' does not have " "exactly one input and output.\n", graph_desc); - return AVERROR(EINVAL); + ret = AVERROR(EINVAL); + goto fail; } for (cur = inputs, i = 0; cur; cur = cur->next, i++) if ((ret = configure_input_filter(fg, fg->inputs[i], cur)) < 0) - return ret; + goto fail; avfilter_inout_free(&inputs); for (cur = outputs, i = 0; cur; cur = cur->next, i++) { @@ -737,7 +738,7 @@ int configure_filtergraph(FilterGraph *fg) avfilter_inout_free(&outputs); if ((ret = avfilter_graph_config(fg->graph, NULL)) < 0) - return ret; + goto fail; /* limit the lists of allowed formats to the ones selected, to * make sure they stay the same if the filtergraph is reconfigured later */ @@ -761,7 +762,7 @@ int configure_filtergraph(FilterGraph *fg) ret = av_buffersrc_add_frame(fg->inputs[i]->filter, tmp); av_frame_free(&tmp); if (ret < 0) - return ret; + goto fail; } } @@ -770,11 +771,14 @@ int configure_filtergraph(FilterGraph *fg) if (fg->inputs[i]->eof) { ret = av_buffersrc_add_frame(fg->inputs[i]->filter, NULL); if (ret < 0) - return ret; + goto fail; } } return 0; +fail: + avfilter_graph_free(&fg->graph); + return ret; } int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame)