static int try_push_frame(AVFilterContext *ctx)
{
    OverlayContext *over = ctx->priv;
    AVFilterLink *outlink = ctx->outputs[0];
    AVFilterBufferRef *outpicref = outlink->out_buf;

    if (try_start_next_frame(ctx) < 0)
        return AVERROR(EAGAIN);
    outpicref = outlink->out_buf;
    if (over->overpicref)
        blend_slice(ctx, outpicref, over->overpicref, over->x, over->y,
                    over->overpicref->video->w, over->overpicref->video->h,
                    0, outpicref->video->w, outpicref->video->h);
    avfilter_draw_slice(outlink, 0, outpicref->video->h, +1);
    avfilter_unref_bufferp(&outlink->out_buf);
    avfilter_end_frame(outlink);
    return 0;
}