summaryrefslogtreecommitdiff
path: root/libavfilter/vf_overlay.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2012-04-01 18:51:27 +0200
committerAnton Khirnov <anton@khirnov.net>2012-04-09 21:30:21 +0200
commite36b25d1df2ab30540c2d8939c5f2b0d6c059317 (patch)
treef955327a9d9b8b41ad253923172afb05bd5d4b82 /libavfilter/vf_overlay.c
parent90f65dc6cf65d1c849a9fa372ac2dda427a258e2 (diff)
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.
Diffstat (limited to 'libavfilter/vf_overlay.c')
-rw-r--r--libavfilter/vf_overlay.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c
index 2115141b0e..e8171e0069 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}},
};