|
@@ -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);
|