mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
lavfi: make avfilter_free() remove the filter from its graph.
This commit is contained in:
parent
111367263a
commit
1565cbc65c
@ -430,6 +430,9 @@ void avfilter_free(AVFilterContext *filter)
|
|||||||
int i;
|
int i;
|
||||||
AVFilterLink *link;
|
AVFilterLink *link;
|
||||||
|
|
||||||
|
if (filter->graph)
|
||||||
|
ff_filter_graph_remove_filter(filter->graph, filter);
|
||||||
|
|
||||||
if (filter->filter->uninit)
|
if (filter->filter->uninit)
|
||||||
filter->filter->uninit(filter);
|
filter->filter->uninit(filter);
|
||||||
|
|
||||||
|
@ -658,7 +658,8 @@ int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *in
|
|||||||
int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque);
|
int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Free a filter context.
|
* Free a filter context. This will also remove the filter from its
|
||||||
|
* filtergraph's list of filters.
|
||||||
*
|
*
|
||||||
* @param filter the filter to free
|
* @param filter the filter to free
|
||||||
*/
|
*/
|
||||||
|
@ -46,12 +46,27 @@ AVFilterGraph *avfilter_graph_alloc(void)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext *filter)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < graph->nb_filters; i++) {
|
||||||
|
if (graph->filters[i] == filter) {
|
||||||
|
FFSWAP(AVFilterContext*, graph->filters[i],
|
||||||
|
graph->filters[graph->nb_filters - 1]);
|
||||||
|
graph->nb_filters--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void avfilter_graph_free(AVFilterGraph **graph)
|
void avfilter_graph_free(AVFilterGraph **graph)
|
||||||
{
|
{
|
||||||
if (!*graph)
|
if (!*graph)
|
||||||
return;
|
return;
|
||||||
for (; (*graph)->nb_filters > 0; (*graph)->nb_filters--)
|
|
||||||
avfilter_free((*graph)->filters[(*graph)->nb_filters - 1]);
|
while ((*graph)->nb_filters)
|
||||||
|
avfilter_free((*graph)->filters[0]);
|
||||||
|
|
||||||
av_freep(&(*graph)->scale_sws_opts);
|
av_freep(&(*graph)->scale_sws_opts);
|
||||||
av_freep(&(*graph)->resample_lavr_opts);
|
av_freep(&(*graph)->resample_lavr_opts);
|
||||||
av_freep(&(*graph)->filters);
|
av_freep(&(*graph)->filters);
|
||||||
|
@ -430,8 +430,8 @@ int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
for (; graph->nb_filters > 0; graph->nb_filters--)
|
while (graph->nb_filters)
|
||||||
avfilter_free(graph->filters[graph->nb_filters - 1]);
|
avfilter_free(graph->filters[0]);
|
||||||
av_freep(&graph->filters);
|
av_freep(&graph->filters);
|
||||||
avfilter_inout_free(&open_inputs);
|
avfilter_inout_free(&open_inputs);
|
||||||
avfilter_inout_free(&open_outputs);
|
avfilter_inout_free(&open_outputs);
|
||||||
@ -495,8 +495,8 @@ int avfilter_graph_parse(AVFilterGraph *graph, const char *filters,
|
|||||||
|
|
||||||
fail:
|
fail:
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
for (; graph->nb_filters > 0; graph->nb_filters--)
|
while (graph->nb_filters)
|
||||||
avfilter_free(graph->filters[graph->nb_filters - 1]);
|
avfilter_free(graph->filters[0]);
|
||||||
av_freep(&graph->filters);
|
av_freep(&graph->filters);
|
||||||
}
|
}
|
||||||
avfilter_inout_free(&inputs);
|
avfilter_inout_free(&inputs);
|
||||||
|
@ -206,4 +206,9 @@ int ff_filter_frame(AVFilterLink *link, AVFrame *frame);
|
|||||||
*/
|
*/
|
||||||
AVFilterContext *ff_filter_alloc(const AVFilter *filter, const char *inst_name);
|
AVFilterContext *ff_filter_alloc(const AVFilter *filter, const char *inst_name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a filter from a graph;
|
||||||
|
*/
|
||||||
|
void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext *filter);
|
||||||
|
|
||||||
#endif /* AVFILTER_INTERNAL_H */
|
#endif /* AVFILTER_INTERNAL_H */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user