]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/avfilter.c
lavfi: free partial audio buffers when destroying links.
[ffmpeg] / libavfilter / avfilter.c
index b1df5373b357d242c3ba24ca78688e89309fa72a..d05d4eaf01f7722af8147d1faf8fe05e5810dc3f 100644 (file)
@@ -156,9 +156,16 @@ void avfilter_link_free(AVFilterLink **link)
     if ((*link)->pool)
         ff_free_pool((*link)->pool);
 
+    avfilter_unref_bufferp(&(*link)->partial_buf);
+
     av_freep(link);
 }
 
+void avfilter_link_set_closed(AVFilterLink *link, int closed)
+{
+    link->closed = closed;
+}
+
 int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
                            unsigned filt_srcpad_idx, unsigned filt_dstpad_idx)
 {
@@ -325,6 +332,8 @@ int ff_request_frame(AVFilterLink *link)
     int ret = -1;
     FF_TPRINTF_START(NULL, request_frame); ff_tlog_link(NULL, link, 1);
 
+    if (link->closed)
+        return AVERROR_EOF;
     if (link->srcpad->request_frame)
         ret = link->srcpad->request_frame(link);
     else if (link->src->inputs[0])
@@ -335,6 +344,8 @@ int ff_request_frame(AVFilterLink *link)
         ff_filter_samples_framed(link, pbuf);
         return 0;
     }
+    if (ret == AVERROR_EOF)
+        link->closed = 1;
     return ret;
 }