You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
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.
This commit is contained in:
@@ -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 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 = {
|
AVFilter avfilter_vf_overlay = {
|
||||||
.name = "overlay",
|
.name = "overlay",
|
||||||
.description = NULL_IF_CONFIG_SMALL("Overlay a video source on top of the input."),
|
.description = NULL_IF_CONFIG_SMALL("Overlay a video source on top of the input."),
|
||||||
@@ -376,6 +388,7 @@ AVFilter avfilter_vf_overlay = {
|
|||||||
{ .name = NULL}},
|
{ .name = NULL}},
|
||||||
.outputs = (AVFilterPad[]) {{ .name = "default",
|
.outputs = (AVFilterPad[]) {{ .name = "default",
|
||||||
.type = AVMEDIA_TYPE_VIDEO,
|
.type = AVMEDIA_TYPE_VIDEO,
|
||||||
.config_props = config_output, },
|
.config_props = config_output,
|
||||||
|
.poll_frame = poll_frame },
|
||||||
{ .name = NULL}},
|
{ .name = NULL}},
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user