From ff24285eb15676dc7519b858be01a1def155e847 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 19 Apr 2018 17:42:14 +0200 Subject: video: pass through container fps to filters This means vf_vapoursynth doesn't need a hack to work around the filter code, and libavfilter filters now actually get the frame_rate field on input pads set. The libavfilter doxygen says the frame_rate field is only to be set if the frame rate is known to be constant, and uses the word "must" (which probably means they really mean it?) - but ffmpeg.c sets the field to mere guesses anyway, and it looks like this normally won't lead to problems. --- video/filter/vf_vapoursynth.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'video/filter') diff --git a/video/filter/vf_vapoursynth.c b/video/filter/vf_vapoursynth.c index 5077f4cf19..d9a222db83 100644 --- a/video/filter/vf_vapoursynth.c +++ b/video/filter/vf_vapoursynth.c @@ -103,7 +103,7 @@ static const struct mp_image dummy_img; static const struct mp_image dummy_img_eof; static void destroy_vs(struct priv *p); -static int reinit_vs(struct priv *p); +static int reinit_vs(struct priv *p, struct mp_image *input); struct script_driver { int (*init)(struct priv *p); // first time init @@ -368,7 +368,7 @@ static void vf_vapoursynth_process(struct mp_filter *f) if (p->out_node) destroy_vs(p); p->fmt_in = mpi->params; - if (reinit_vs(p) < 0) { + if (reinit_vs(p, mpi) < 0) { MP_ERR(p, "could not init VS\n"); mp_frame_unref(&frame); return; @@ -617,7 +617,7 @@ static void destroy_vs(struct priv *p) MP_DBG(p, "uninitialized.\n"); } -static int reinit_vs(struct priv *p) +static int reinit_vs(struct priv *p, struct mp_image *input) { VSMap *vars = NULL, *in = NULL, *out = NULL; int res = -1; @@ -665,11 +665,9 @@ static int reinit_vs(struct priv *p) p->vsapi->propSetInt(vars, "video_in_dh", d_h, 0); struct mp_stream_info *info = mp_filter_find_stream_info(p->f); - double container_fps = 0; + double container_fps = input->nominal_fps; double display_fps = 0; if (info) { - if (info->get_container_fps) - container_fps = info->get_container_fps(info); if (info->get_display_fps) display_fps = info->get_display_fps(info); } -- cgit v1.2.3