[libav-commits] vf_overlay: implement poll_frame()

Anton Khirnov git at libav.org
Tue Apr 10 08:28:14 CEST 2012


Module: libav
Branch: master
Commit: e36b25d1df2ab30540c2d8939c5f2b0d6c059317

Author:    Anton Khirnov <anton at khirnov.net>
Committer: Anton Khirnov <anton at khirnov.net>
Date:      Sun Apr  1 18:51:27 2012 +0200

vf_overlay: implement poll_frame()

Signal that it can output a frame when there are frames on the main
input and EOF on the overlay input, but a frame is buffered -- e.g.
single picture overlay.

---

 libavfilter/vf_overlay.c |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c
index 2115141..e8171e0 100644
--- a/libavfilter/vf_overlay.c
+++ b/libavfilter/vf_overlay.c
@@ -345,6 +345,18 @@ static void null_draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) {
 
 static void null_end_frame(AVFilterLink *inlink) { }
 
+static int poll_frame(AVFilterLink *link)
+{
+    AVFilterContext   *s = link->src;
+    OverlayContext *over = s->priv;
+    int ret = avfilter_poll_frame(s->inputs[OVERLAY]);
+
+    if (ret == AVERROR_EOF)
+        ret = !!over->overpicref;
+
+    return ret && avfilter_poll_frame(s->inputs[MAIN]);
+}
+
 AVFilter avfilter_vf_overlay = {
     .name      = "overlay",
     .description = NULL_IF_CONFIG_SMALL("Overlay a video source on top of the input."),
@@ -376,6 +388,7 @@ AVFilter avfilter_vf_overlay = {
                                   { .name = NULL}},
     .outputs   = (AVFilterPad[]) {{ .name            = "default",
                                     .type            = AVMEDIA_TYPE_VIDEO,
-                                    .config_props    = config_output, },
+                                    .config_props    = config_output,
+                                    .poll_frame      = poll_frame },
                                   { .name = NULL}},
 };



More information about the libav-commits mailing list