lavfi/blend: always peek the first frame of each queue.
authorClément Bœsch <ubitux@gmail.com>
Fri, 22 Mar 2013 08:54:06 +0000 (09:54 +0100)
committerClément Bœsch <ubitux@gmail.com>
Fri, 22 Mar 2013 22:09:08 +0000 (23:09 +0100)
Before the change, filter_frame() always waited for 2 samples in the
bottom frames queue. This notably fixes commands such as
./ffplay tests/lena.pnm -vf split,blend=c0_mode=addition

libavfilter/vf_blend.c

index bc276d4..c9e7e7d 100644 (file)
@@ -359,7 +359,7 @@ static int request_frame(AVFilterLink *outlink)
 
     b->frame_requested = 1;
     while (b->frame_requested) {
-        in = ff_bufqueue_peek(&b->queue_top, TOP) ? BOTTOM : TOP;
+        in = ff_bufqueue_peek(&b->queue_top, 0) ? BOTTOM : TOP;
         ret = ff_request_frame(ctx->inputs[in]);
         if (ret < 0)
             return ret;
@@ -413,8 +413,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
     while (1) {
         AVFrame *top_buf, *bottom_buf, *out_buf;
 
-        if (!ff_bufqueue_peek(&b->queue_top, TOP) ||
-            !ff_bufqueue_peek(&b->queue_bottom, BOTTOM)) break;
+        if (!ff_bufqueue_peek(&b->queue_top, 0) ||
+            !ff_bufqueue_peek(&b->queue_bottom, 0)) break;
 
         top_buf = ff_bufqueue_get(&b->queue_top);
         bottom_buf = ff_bufqueue_get(&b->queue_bottom);