[FFmpeg-cvslog] vf_overlay: implement poll_frame()
Anton Khirnov
git at videolan.org
Tue Apr 10 23:07:20 CEST 2012
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sun Apr 1 18:51:27 2012 +0200| [e36b25d1df2ab30540c2d8939c5f2b0d6c059317] | committer: Anton Khirnov
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.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e36b25d1df2ab30540c2d8939c5f2b0d6c059317
---
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 ffmpeg-cvslog
mailing list