mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-06 07:28:53 +00:00
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
This commit is contained in:
parent
445a301844
commit
878d32ad38
1 changed files with 8 additions and 0 deletions
|
@ -1011,6 +1011,7 @@ gst_ffmpegviddec_negotiate (GstFFMpegVidDec * ffmpegdec,
|
||||||
GstVideoInfo *in_info, *out_info;
|
GstVideoInfo *in_info, *out_info;
|
||||||
GstVideoCodecState *output_state;
|
GstVideoCodecState *output_state;
|
||||||
gint fps_n, fps_d;
|
gint fps_n, fps_d;
|
||||||
|
GstClockTime latency;
|
||||||
|
|
||||||
if (!update_video_context (ffmpegdec, context, picture))
|
if (!update_video_context (ffmpegdec, context, picture))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -1093,6 +1094,13 @@ gst_ffmpegviddec_negotiate (GstFFMpegVidDec * ffmpegdec,
|
||||||
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (ffmpegdec)))
|
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (ffmpegdec)))
|
||||||
goto negotiate_failed;
|
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;
|
return TRUE;
|
||||||
|
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
|
|
Loading…
Reference in a new issue