From 35322de964118da3ee5a6bf45a204b41d20a7233 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 27 Apr 2023 16:29:53 +0300 Subject: [PATCH] splitmuxsink: Catch invalid DTS to avoid running into problems later DTS > PTS makes no sense, so we clamp DTS to the PTS. Also if there's a PTS but no DTS, then assume that PTS=DTS to make sure we're not working with a much older DTS. Part-of: --- subprojects/gst-plugins-good/gst/multifile/gstsplitmuxsink.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/subprojects/gst-plugins-good/gst/multifile/gstsplitmuxsink.c b/subprojects/gst-plugins-good/gst/multifile/gstsplitmuxsink.c index ad6c3d3..0d66185 100644 --- a/subprojects/gst-plugins-good/gst/multifile/gstsplitmuxsink.c +++ b/subprojects/gst-plugins-good/gst/multifile/gstsplitmuxsink.c @@ -2947,10 +2947,16 @@ handle_mq_input (GstPad * pad, GstPadProbeInfo * info, MqStreamCtx * ctx) else running_time_pts = GST_CLOCK_STIME_NONE; - if (GST_CLOCK_TIME_IS_VALID (dts)) + if (GST_CLOCK_TIME_IS_VALID (dts)) { running_time_dts = my_segment_to_running_time (&ctx->in_segment, dts); - else - running_time_dts = GST_CLOCK_STIME_NONE; + + /* DTS > PTS makes conceptually no sense so catch such invalid DTS here + * by clamping to the PTS */ + running_time_dts = MIN (running_time_pts, running_time_dts); + } else { + /* If there is no DTS then assume PTS=DTS */ + running_time_dts = running_time_pts; + } /* Try to make sure we have a valid running time */ if (!GST_CLOCK_STIME_IS_VALID (ctx->in_running_time)) { -- 2.7.4