diff options
author | Anton Khirnov <anton@khirnov.net> | 2012-04-01 18:51:27 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2012-04-09 21:30:21 +0200 |
commit | e36b25d1df2ab30540c2d8939c5f2b0d6c059317 (patch) | |
tree | f955327a9d9b8b41ad253923172afb05bd5d4b82 | |
parent | 90f65dc6cf65d1c849a9fa372ac2dda427a258e2 (diff) | |
download | ffmpeg-e36b25d1df2ab30540c2d8939c5f2b0d6c059317.tar.gz |
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.
-rw-r--r-- | 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 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}}, }; |