On 04/09/2012 12:23 AM, Anton Khirnov wrote:

> 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}},
>  };


LGTM

-Justin

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to