diff options
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/vf_overlay.c | 15 | ||||
-rw-r--r-- | libavfilter/vf_scale.c | 11 |
2 files changed, 24 insertions, 2 deletions
diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c index 04cacad635..8227d35755 100644 --- a/libavfilter/vf_overlay.c +++ b/libavfilter/vf_overlay.c @@ -510,6 +510,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."), @@ -541,6 +553,7 @@ AVFilter avfilter_vf_overlay = { { .name = NULL}}, .outputs = (const AVFilterPad[]) {{ .name = "default", .type = AVMEDIA_TYPE_VIDEO, - .config_props = config_output, }, + .config_props = config_output, + .poll_frame = poll_frame }, { .name = NULL}}, }; diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 86be86f3c9..810a6d3ef1 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -27,6 +27,7 @@ #include "libavutil/avstring.h" #include "libavutil/eval.h" #include "libavutil/mathematics.h" +#include "libavutil/opt.h" #include "libavutil/pixdesc.h" #include "libavutil/imgutils.h" #include "libavutil/avassert.h" @@ -92,7 +93,15 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) if (args) { sscanf(args, "%255[^:]:%255[^:]", scale->w_expr, scale->h_expr); p = strstr(args,"flags="); - if (p) scale->flags = strtoul(p+6, NULL, 0); + if (p) { + const AVClass *class = sws_get_class(); + const AVOption *o = av_opt_find(&class, "sws_flags", NULL, 0, + AV_OPT_SEARCH_FAKE_OBJ); + int ret = av_opt_eval_flags(&class, o, p + 6, &scale->flags); + + if (ret < 0) + return ret; + } if(strstr(args,"interl=1")){ scale->interlaced=1; }else if(strstr(args,"interl=-1")) |