From 91cbaa5ac7bedfb00d3144f37d2c2bb67f581c14 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Wed, 10 Jun 2015 11:39:01 -0400 Subject: [PATCH] mpegtsmux: Properly detect backward DTS There was code to detect backward dts, but the marker min_dts was never set. Setting it enable this feature that prevents potential integer overflow when generating TS. https://bugzilla.gnome.org/show_bug.cgi?id=740575 --- gst/mpegtsmux/mpegtsmux.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c index 89750a7ea3..c1ab11bffa 100644 --- a/gst/mpegtsmux/mpegtsmux.c +++ b/gst/mpegtsmux/mpegtsmux.c @@ -1067,14 +1067,19 @@ mpegtsmux_clip_inc_running_time (GstCollectPads * pads, GST_LOG_OBJECT (cdata->pad, "buffer dts %" GST_TIME_FORMAT " -> %" GST_TIME_FORMAT " running time", GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), GST_TIME_ARGS (time)); - if (GST_CLOCK_TIME_IS_VALID (pad_data->min_dts) && - time < pad_data->min_dts) { + + if (!GST_CLOCK_TIME_IS_VALID (pad_data->min_dts)) + pad_data->min_dts = time; + + if (time < pad_data->min_dts) { /* Ignore DTS going backward */ GST_WARNING_OBJECT (cdata->pad, "ignoring DTS going backward"); time = pad_data->min_dts; } + *outbuf = gst_buffer_make_writable (buf); GST_BUFFER_DTS (*outbuf) = time; + pad_data->min_dts = time; } }