[SCM] libav/experimental: The filter framework as is hangs with filters that modify the input buffer, even if it asks for the right permission. This is a fix for that. See "Box blurring with libavfilter" thread in libav-user.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:14:39 UTC 2013


The following commit has been merged in the experimental branch:
commit 35db407eb26425ea3bc10a25b031dee0f45a5cf5
Author: Vitor Sessak <vitor1001 at gmail.com>
Date:   Fri Feb 15 21:40:30 2008 +0000

    The filter framework as is hangs with filters that
    modify the input buffer, even if it asks for the right
    permission. This is a fix for that.
    See "Box blurring with libavfilter" thread in libav-user.
    
    Commited in SoC by Vitor Sessak on 2008-02-09 11:03:35
    
    Originally committed as revision 12040 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index f2a42cb..e1a439b 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -213,10 +213,12 @@ void avfilter_start_frame(AVFilterLink *link, AVFilterPicRef *picref)
     /* prepare to copy the picture if it has insufficient permissions */
     if((link_dpad(link).min_perms & picref->perms) != link_dpad(link).min_perms ||
         link_dpad(link).rej_perms & picref->perms) {
+        /*
         av_log(link->dst, AV_LOG_INFO,
                 "frame copy needed (have perms %x, need %x, reject %x)\n",
                 picref->perms,
                 link_dpad(link).min_perms, link_dpad(link).rej_perms);
+        */
 
         link->cur_pic = avfilter_default_get_video_buffer(link, link_dpad(link).min_perms);
         link->srcpic = picref;
@@ -231,6 +233,11 @@ void avfilter_end_frame(AVFilterLink *link)
 {
     void (*end_frame)(AVFilterLink *);
 
+    if(!(end_frame = link_dpad(link).end_frame))
+        end_frame = avfilter_default_end_frame;
+
+    end_frame(link);
+
     /* unreference the source picture if we're feeding the destination filter
      * a copied version dues to permission issues */
     if(link->srcpic) {
@@ -238,10 +245,6 @@ void avfilter_end_frame(AVFilterLink *link)
         link->srcpic = NULL;
     }
 
-    if(!(end_frame = link_dpad(link).end_frame))
-        end_frame = avfilter_default_end_frame;
-
-    end_frame(link);
 }
 
 void avfilter_draw_slice(AVFilterLink *link, int y, int h)
@@ -253,6 +256,7 @@ void avfilter_draw_slice(AVFilterLink *link, int y, int h)
     if(link->srcpic) {
         avcodec_get_chroma_sub_sample(link->format, &hsub, &vsub);
 
+        link->cur_pic->pts = link->srcpic->pts;
         src[0] = link->srcpic-> data[0] + y * link->srcpic-> linesize[0];
         dst[0] = link->cur_pic->data[0] + y * link->cur_pic->linesize[0];
         for(i = 1; i < 4; i ++) {

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list