|
|
|
@ -165,6 +165,31 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad, |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void avfilter_link_free(AVFilterLink **link) |
|
|
|
|
{ |
|
|
|
|
if (!*link) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
if ((*link)->pool) { |
|
|
|
|
int i; |
|
|
|
|
for (i = 0; i < POOL_SIZE; i++) { |
|
|
|
|
if ((*link)->pool->pic[i]) { |
|
|
|
|
AVFilterBufferRef *picref = (*link)->pool->pic[i]; |
|
|
|
|
/* free buffer: picrefs stored in the pool are not
|
|
|
|
|
* supposed to contain a free callback */ |
|
|
|
|
av_freep(&picref->buf->data[0]); |
|
|
|
|
av_freep(&picref->buf); |
|
|
|
|
|
|
|
|
|
av_freep(&picref->audio); |
|
|
|
|
av_freep(&picref->video); |
|
|
|
|
av_freep(&picref); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
av_freep(&(*link)->pool); |
|
|
|
|
} |
|
|
|
|
av_freep(link); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, |
|
|
|
|
unsigned filt_srcpad_idx, unsigned filt_dstpad_idx) |
|
|
|
|
{ |
|
|
|
@ -683,7 +708,7 @@ void avfilter_free(AVFilterContext *filter) |
|
|
|
|
avfilter_formats_unref(&link->in_formats); |
|
|
|
|
avfilter_formats_unref(&link->out_formats); |
|
|
|
|
} |
|
|
|
|
av_freep(&link); |
|
|
|
|
avfilter_link_free(&link); |
|
|
|
|
} |
|
|
|
|
for (i = 0; i < filter->output_count; i++) { |
|
|
|
|
if ((link = filter->outputs[i])) { |
|
|
|
@ -692,7 +717,7 @@ void avfilter_free(AVFilterContext *filter) |
|
|
|
|
avfilter_formats_unref(&link->in_formats); |
|
|
|
|
avfilter_formats_unref(&link->out_formats); |
|
|
|
|
} |
|
|
|
|
av_freep(&link); |
|
|
|
|
avfilter_link_free(&link); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
av_freep(&filter->name); |
|
|
|
|