From 878d32ad38751222c6d731706f8b3cc8930c9d1c Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Thu, 12 May 2016 11:09:13 +0200 Subject: [PATCH] avvidec: Report the latency once we're fully configured Several decoders will only be able to report a real latency (has_b_frames) once they're actually initialized (i.e. when they return their first frame). Doing it earlier (in set_format) doesn't guarantee that the AVCodecContext has_b_frames has been properly initialized. https://bugzilla.gnome.org/show_bug.cgi?id=766362 --- ext/libav/gstavviddec.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c index cafd03c..8273dda 100644 --- a/ext/libav/gstavviddec.c +++ b/ext/libav/gstavviddec.c @@ -1011,6 +1011,7 @@ gst_ffmpegviddec_negotiate (GstFFMpegVidDec * ffmpegdec, GstVideoInfo *in_info, *out_info; GstVideoCodecState *output_state; gint fps_n, fps_d; + GstClockTime latency; if (!update_video_context (ffmpegdec, context, picture)) return TRUE; @@ -1093,6 +1094,13 @@ gst_ffmpegviddec_negotiate (GstFFMpegVidDec * ffmpegdec, if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (ffmpegdec))) goto negotiate_failed; + /* The decoder is configured, we now know the true latency */ + latency = + gst_util_uint64_scale_ceil (ffmpegdec->context->has_b_frames * GST_SECOND, + fps_d, fps_n); + gst_video_decoder_set_latency (GST_VIDEO_DECODER (ffmpegdec), latency, + latency); + return TRUE; /* ERRORS */ -- 2.7.4