OSDN Git Service

Track the permissions that have been given out to each picture.
authorVitor Sessak <vitor1001@gmail.com>
Fri, 15 Feb 2008 21:59:47 +0000 (21:59 +0000)
committerVitor Sessak <vitor1001@gmail.com>
Fri, 15 Feb 2008 21:59:47 +0000 (21:59 +0000)
This should make it easier to know what can be done to a buffer once
it's been passed to your filter without falling back to copying it "just
to be safe".

Commited in SoC by Bobby Bingham on 2007-08-17 18:21:07

Originally committed as revision 12068 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavfilter/defaults.c

index da739d9..50b13dc 100644 (file)
@@ -28,6 +28,13 @@ void avfilter_default_free_video_buffer(AVFilterPic *pic)
     av_free(pic);
 }
 
+AVFilterPicRef *avfilter_next_get_video_buffer(AVFilterLink *link, int perms)
+{
+    if(!link->dst->outputs[0])
+        return NULL;
+    return avfilter_get_video_buffer(link->dst->outputs[0], perms);
+}
+
 /* TODO: set the buffer's priv member to a context structure for the whole
  * filter chain.  This will allow for a buffer pool instead of the constant
  * alloc & free cycle currently implemented. */
@@ -41,6 +48,9 @@ AVFilterPicRef *avfilter_default_get_video_buffer(AVFilterLink *link, int perms)
     ref->h     = link->h;
     ref->perms = perms;
 
+    /* we always give the destination filter read access by default */
+    avfilter_add_pic_perms(ref, link->dst, AV_PERM_READ);
+
     pic->refcount = 1;
     pic->format   = link->format;
     pic->free     = avfilter_default_free_video_buffer;
@@ -62,7 +72,7 @@ void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref)
     if(out) {
         out->outpic      = avfilter_get_video_buffer(out, AV_PERM_WRITE);
         out->outpic->pts = picref->pts;
-        avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0));
+        avfilter_start_frame(out, avfilter_ref_pic(out->outpic, out->dst, ~0));
     }
 }