summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-01-16 15:41:50 +0100
committerwm4 <wm4@nowhere>2017-01-16 16:10:39 +0100
commit91fb7078e22864ece2b94bde350edd193c3fb279 (patch)
tree419c649814ffa197deb0c2873d683d57f6141321 /video
parent8a23892d04b6d3658eafe6043f9931f6ec02e4e5 (diff)
downloadmpv-91fb7078e22864ece2b94bde350edd193c3fb279.tar.bz2
mpv-91fb7078e22864ece2b94bde350edd193c3fb279.tar.xz
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.
Diffstat (limited to 'video')
-rw-r--r--video/filter/vf_lavfi.c27
1 files 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"),