mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
videodecoder: use DTS if PTS unknown
The buffer should be set according to DTS if exists when we are guessin the PTS instead of segment start. The decoder can receive buffers which are before the segment in case of seek for example. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1111>
This commit is contained in:
parent
33167573e1
commit
ada8b07be2
1 changed files with 10 additions and 4 deletions
|
@ -2950,11 +2950,17 @@ gst_video_decoder_prepare_finish_frame (GstVideoDecoder *
|
|||
if (frame->duration != GST_CLOCK_TIME_NONE) {
|
||||
if (GST_CLOCK_TIME_IS_VALID (priv->last_timestamp_out))
|
||||
frame->pts = priv->last_timestamp_out + frame->duration;
|
||||
else if (decoder->output_segment.rate > 0.0)
|
||||
else if (frame->dts != GST_CLOCK_TIME_NONE) {
|
||||
frame->pts = frame->dts;
|
||||
GST_LOG_OBJECT (decoder,
|
||||
"Setting DTS as PTS %" GST_TIME_FORMAT " for frame...",
|
||||
GST_TIME_ARGS (frame->pts));
|
||||
} else if (decoder->output_segment.rate > 0.0)
|
||||
frame->pts = decoder->output_segment.start;
|
||||
GST_LOG_OBJECT (decoder,
|
||||
"Guessing timestamp %" GST_TIME_FORMAT " for frame...",
|
||||
GST_TIME_ARGS (frame->pts));
|
||||
GST_INFO_OBJECT (decoder,
|
||||
"Guessing PTS=%" GST_TIME_FORMAT " for frame... DTS=%"
|
||||
GST_TIME_FORMAT, GST_TIME_ARGS (frame->pts),
|
||||
GST_TIME_ARGS (frame->dts));
|
||||
} else if (sync && frame->dts != GST_CLOCK_TIME_NONE) {
|
||||
frame->pts = frame->dts;
|
||||
GST_LOG_OBJECT (decoder,
|
||||
|
|
Loading…
Reference in a new issue