new/yocto/meta-rockchip/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20/0011-mpegtsdemux-Create-new-PCR-group-for-big-gap.patch
2025-05-10 21:58:58 +08:00

53 lines
2.0 KiB
Diff

From bc5d9e1d9e1b352b2a9c4b56ce055229010be8c1 Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
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 <jeffy.chen@rock-chips.com>
---
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