From 91fb7078e22864ece2b94bde350edd193c3fb279 Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 16 Jan 2017 15:41:50 +0100 Subject: vf_lavfi: switch to AVBufferSrcParameters Instead of using the awful older "API" that passed the parameters formatted as string. AVBufferSrcParameters is also a prerequisite for hardware frame filtering support. --- video/filter/vf_lavfi.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/video/filter/vf_lavfi.c b/video/filter/vf_lavfi.c index aceaf50ecb..291ddd315b 100644 --- a/video/filter/vf_lavfi.c +++ b/video/filter/vf_lavfi.c @@ -109,6 +109,7 @@ static bool recreate_graph(struct vf_instance *vf, struct mp_image_params *fmt) void *tmp = talloc_new(NULL); struct vf_priv_s *p = vf->priv; AVFilterContext *in = NULL, *out = NULL; + int ret; if (bstr0(p->cfg_graph).len == 0) { MP_FATAL(vf, "lavfi: no filter graph set\n"); @@ -133,15 +134,27 @@ static bool recreate_graph(struct vf_instance *vf, struct mp_image_params *fmt) char *sws_flags = talloc_asprintf(tmp, "flags=%"PRId64, p->cfg_sws_flags); graph->scale_sws_opts = av_strdup(sws_flags); - AVRational timebase = AV_TIME_BASE_Q; + in = avfilter_graph_alloc_filter(graph, avfilter_get_by_name("buffer"), "src"); + if (!in) + goto error; + + AVBufferSrcParameters *in_params = av_buffersrc_parameters_alloc(); + if (!in_params) + goto error; - char *src_args = talloc_asprintf(tmp, "%d:%d:%d:%d:%d:%d:%d", - fmt->w, fmt->h, imgfmt2pixfmt(fmt->imgfmt), - timebase.num, timebase.den, - fmt->p_w, fmt->p_h); + in_params->format = imgfmt2pixfmt(fmt->imgfmt); + in_params->time_base = AV_TIME_BASE_Q; + in_params->width = fmt->w; + in_params->height = fmt->h; + in_params->sample_aspect_ratio.num = fmt->p_w; + in_params->sample_aspect_ratio.den = fmt->p_h; + + ret = av_buffersrc_parameters_set(in, in_params); + av_free(in_params); + if (ret < 0) + goto error; - if (avfilter_graph_create_filter(&in, avfilter_get_by_name("buffer"), - "src", src_args, NULL, graph) < 0) + if (avfilter_init_str(in, NULL) < 0) goto error; if (avfilter_graph_create_filter(&out, avfilter_get_by_name("buffersink"), -- cgit v1.2.3