Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Stéphane Cerveau committed Apr 19, 2021
1 parent 3316757 commit ada8b07
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions gst-libs/gst/video/gstvideodecoder.c
Expand Up @@ -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,
Expand Down

0 comments on commit ada8b07

Please sign in to comment.