From bc5d9e1d9e1b352b2a9c4b56ce055229010be8c1 Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Fri, 23 Oct 2020 11:11:11 +0800 Subject: [PATCH 11/33] mpegtsdemux: Create new PCR group for big gap Currently it would try to reuse the current group and handle the gap by just adding 500ms to pcroffset. Signed-off-by: Jeffy Chen --- gst/mpegtsdemux/mpegtspacketizer.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c index de8b571..6747fc6 100644 --- a/gst/mpegtsdemux/mpegtspacketizer.c +++ b/gst/mpegtsdemux/mpegtspacketizer.c @@ -1997,6 +1997,7 @@ record_pcr (MpegTSPacketizer2 * packetizer, MpegTSPCR * pcrtable, * Initialize current to that group */ GST_DEBUG ("No current window estimator, Checking for group to use"); +create_new_group: for (tmp = pcrtable->groups; tmp; tmp = tmp->next) { PCROffsetGroup *group = (PCROffsetGroup *) tmp->data; @@ -2069,6 +2070,15 @@ record_pcr (MpegTSPacketizer2 * packetizer, MpegTSPCR * pcrtable, if (G_UNLIKELY (corpcr - current->pending[current->last].pcr > 500 * PCR_MSECOND)) { GST_DEBUG ("New PCR more than 500ms away, handling discont"); + +#if 1 + /** + * Create new discont group instead of reusing the current, otherwise + * it will try to handle the gap by just adding 500ms to pcroffset. + */ + _close_current_group (pcrtable); + goto create_new_group; +#else /* Take values from current and put them in the current group (closing it) */ /* Create new group with pcr/offset just after the current group * and mark it as a discont */ @@ -2076,6 +2086,7 @@ record_pcr (MpegTSPacketizer2 * packetizer, MpegTSPCR * pcrtable, _append_group_values (current->group, current->pending[current->last]); _set_current_group (pcrtable, current->group, pcr, offset, TRUE); return; +#endif } if (G_UNLIKELY (corpcr == current->last_value.pcr)) { -- 2.20.1