amltsdmx: CF1 pts is wrong in pts_to_ts [1/1]
PD#SWPL-180069
Problem:
sync code wrong in amlts_packetizer_pts_to_ts
Solution:
fix it
Verify:
ap222
Change-Id: I9961133a3218549c8ed658e352d138f7873135a3
Signed-off-by: bo.xiao <bo.xiao@amlogic.com>
diff --git a/aml-tsdemux/aml-pesparse.h b/aml-tsdemux/aml-pesparse.h
index 5e0ae19..51487a7 100644
--- a/aml-tsdemux/aml-pesparse.h
+++ b/aml-tsdemux/aml-pesparse.h
@@ -18,8 +18,8 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef __PES_PARSE_H__
-#define __PES_PARSE_H__
+#ifndef __AML_PES_PARSE_H__
+#define __AML_PES_PARSE_H__
#include <gst/gst.h>
#include "gstamldefs.h"
@@ -197,4 +197,4 @@
G_GNUC_INTERNAL void aml_init_pes_parser (void);
G_END_DECLS
-#endif /* __PES_PARSE_H__ */
+#endif /* __AML_PES_PARSE_H__ */
diff --git a/aml-tsdemux/amltsbase.h b/aml-tsdemux/amltsbase.h
index c3abae8..33a3792 100644
--- a/aml-tsdemux/amltsbase.h
+++ b/aml-tsdemux/amltsbase.h
@@ -27,8 +27,8 @@
*/
-#ifndef GST_MPEG_TS_BASE_H
-#define GST_MPEG_TS_BASE_H
+#ifndef GST_AML_TS_BASE_H
+#define GST_AML_TS_BASE_H
#include <gst/gst.h>
#include "amltspacketizer.h"
@@ -257,4 +257,4 @@
G_END_DECLS
-#endif /* GST_MPEG_TS_BASE_H */
+#endif /* GST_AML_TS_BASE_H */
diff --git a/aml-tsdemux/amltsdemux.h b/aml-tsdemux/amltsdemux.h
index 1d798fa..f67c1d6 100644
--- a/aml-tsdemux/amltsdemux.h
+++ b/aml-tsdemux/amltsdemux.h
@@ -24,8 +24,8 @@
*/
-#ifndef GST_TS_DEMUX_H
-#define GST_TS_DEMUX_H
+#ifndef GST_AML_TS_DEMUX_H
+#define GST_AML_TS_DEMUX_H
#include <gst/gst.h>
#include <gst/base/gstbytereader.h>
@@ -127,4 +127,4 @@
G_GNUC_INTERNAL gboolean gst_amltsdemux_plugin_init (GstPlugin * plugin);
G_END_DECLS
-#endif /* GST_TS_DEMUX_H */
+#endif /* GST_AML_TS_DEMUX_H */
diff --git a/aml-tsdemux/amltspacketizer.c b/aml-tsdemux/amltspacketizer.c
index acf0e85..4425d78 100644
--- a/aml-tsdemux/amltspacketizer.c
+++ b/aml-tsdemux/amltspacketizer.c
@@ -1451,13 +1451,16 @@
* to be resynched the next time we see a PCR */
GST_WARNING
("backward timestamps at server or no buffer timestamps. Resync base PCR");
-/* xiaobo-patch 0041-tsdemux
+
+#if 0 //xiaobo-patch 0041-tsdemux
GST_DEBUG ("delta last_pcrtime - gstpcrtime:%" GST_TIME_FORMAT, GST_TIME_ARGS (pcr->last_pcrtime - gstpcrtime));
if (pcr->last_pcrtime - gstpcrtime > 2*GST_SECOND) {
pcr->base_pcrtime = GST_CLOCK_TIME_NONE;
+ GST_DEBUG("change base pcr");
}
-*/
+#else
pcr->base_pcrtime = GST_CLOCK_TIME_NONE;
+#endif
}
}
} else
@@ -2310,9 +2313,11 @@
if (G_UNLIKELY (pcr_pid != 0x1fff &&
ABSDIFF (res, pcrtable->last_pcrtime) > 15 * GST_SECOND))
res = GST_CLOCK_TIME_NONE;
- //xiaobo-patch 0040-live-app
- //else if GST_CLOCK_TIME_IS_VALID (pcrtable->base_pcrtime){
+#if 0 //xiaobo-patch 0040-live-app
+ else if GST_CLOCK_TIME_IS_VALID (pcrtable->base_pcrtime){
+#else
else {
+#endif
GstClockTime tmp = pcrtable->base_time + pcrtable->skew;
if (tmp + res >= pcrtable->base_pcrtime) {
res += tmp - pcrtable->base_pcrtime;
@@ -2325,12 +2330,13 @@
res = GST_CLOCK_TIME_NONE;
}
}
- // xiaobo-patch 0040-live-app
- //else
- //{
- // res = GST_CLOCK_TIME_NONE;
- // GST_DEBUG ("set pts as -1, base_pcrtime:%" GST_TIME_FORMAT, GST_TIME_ARGS (pcrtable->base_pcrtime));
- //}
+#if 0 // xiaobo-patch 0040-live-app
+ else
+ {
+ res = GST_CLOCK_TIME_NONE;
+ GST_DEBUG ("set pts as -1, base_pcrtime:%" GST_TIME_FORMAT, GST_TIME_ARGS (pcrtable->base_pcrtime));
+ }
+#endif
} else if (packetizer->calculate_offset && pcrtable->groups) {
gint64 refpcr = G_MAXINT64, refpcroffset;
PCROffsetGroup *group = pcrtable->current->group;
@@ -2409,17 +2415,21 @@
if (refpcr != G_MAXINT64)
res =
pts - PCRTIME_TO_GSTTIME (refpcr) + PCRTIME_TO_GSTTIME (refpcroffset);
- else {
- //case: valid pcr after frame
- if (!GST_CLOCK_TIME_IS_VALID (pcrtable->base_pcrtime) && GST_CLOCK_TIME_IS_VALID (pts) && pcr_pid != 0x1fff && \
+ else
+ GST_WARNING ("No groups, can't calculate timestamp");
+ } else {
+ //case: valid pcr after frame, patch 0045-SWPL-124457-set-base-pcr
+ if (!GST_CLOCK_TIME_IS_VALID (pcrtable->base_pcrtime) && GST_CLOCK_TIME_IS_VALID (pts) && pcr_pid != 0x1fff && \
!GST_CLOCK_TIME_IS_VALID (pcrtable->base_time) && GST_CLOCK_TIME_IS_VALID (packetizer->last_in_time)) {
- GST_WARNING ("set pcr base time %" GST_TIME_FORMAT " base time %" GST_TIME_FORMAT, GST_TIME_ARGS (pts), GST_TIME_ARGS (packetizer->last_in_time));
- pcrtable->base_time = packetizer->last_in_time;
- pcrtable->base_pcrtime = pts;
- }
+ GST_WARNING ("set pcr base time %" GST_TIME_FORMAT " base time %" GST_TIME_FORMAT, GST_TIME_ARGS (pts), GST_TIME_ARGS (packetizer->last_in_time));
+ pcrtable->base_time = packetizer->last_in_time;
+ pcrtable->base_pcrtime = pts;
}
- } else
- GST_WARNING ("Not enough information to calculate proper timestamp");
+ //AML MOD FLOW patch 0016-Discard-ts-pcr
+ GST_WARNING ("Not enough information to calculate proper timestamp use origin pts %" GST_TIME_FORMAT, GST_TIME_ARGS (pts));
+ res = pts;
+ }
+
PACKETIZER_GROUP_UNLOCK (packetizer);
diff --git a/aml-tsdemux/amltspacketizer.h b/aml-tsdemux/amltspacketizer.h
index ff7651e..26941f7 100644
--- a/aml-tsdemux/amltspacketizer.h
+++ b/aml-tsdemux/amltspacketizer.h
@@ -21,8 +21,8 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef GST_MPEGTS_PACKETIZER_H
-#define GST_MPEGTS_PACKETIZER_H
+#ifndef GST_AMLTS_PACKETIZER_H
+#define GST_AMLTS_PACKETIZER_H
#include <gst/gst.h>
#include <gst/base/gstadapter.h>
@@ -387,4 +387,4 @@
GstClockTime threshold);
G_END_DECLS
-#endif /* GST_MPEGTS_PACKETIZER_H */
+#endif /* GST_AMLTS_PACKETIZER_H */
diff --git a/aml-tsdemux/amltsparse.c b/aml-tsdemux/amltsparse.c
index 68e410f..273ef43 100644
--- a/aml-tsdemux/amltsparse.c
+++ b/aml-tsdemux/amltsparse.c
@@ -32,7 +32,6 @@
#include "amltsbase.h"
#include "amltsparse.h"
#include "gstamldesc.h"
-#include "amltsdemux.h"
/* latency in mseconds is maximum 100 ms between PCR */
#define TS_LATENCY 100
diff --git a/aml-tsdemux/amltsparse.h b/aml-tsdemux/amltsparse.h
index 4c6f7ff..ad9e8ab 100644
--- a/aml-tsdemux/amltsparse.h
+++ b/aml-tsdemux/amltsparse.h
@@ -22,8 +22,8 @@
*/
-#ifndef GST_MPEG_TS_PARSE_H
-#define GST_MPEG_TS_PARSE_H
+#ifndef GST_AML_TS_PARSE_H
+#define GST_AML_TS_PARSE_H
#include <gst/gst.h>
#include <gst/base/gstflowcombiner.h>
@@ -100,4 +100,4 @@
G_GNUC_INTERNAL gboolean gst_amltsparse_plugin_init (GstPlugin * plugin);
G_END_DECLS
-#endif /* GST_MPEG_TS_PARSE_H */
+#endif /* GST_AML_TS_PARSE_H */
diff --git a/aml-tsdemux/gstamldefs.h b/aml-tsdemux/gstamldefs.h
index e3ad6d3..b45ec80 100644
--- a/aml-tsdemux/gstamldefs.h
+++ b/aml-tsdemux/gstamldefs.h
@@ -24,8 +24,8 @@
* Contributor(s): Wim Taymans <wim@fluendo.com>
*/
-#ifndef __GST_MPEG_DEFS_H__
-#define __GST_MPEG_DEFS_H__
+#ifndef __GST_AML_MPEG_DEFS_H__
+#define __GST_AML_MPEG_DEFS_H__
#include <glib/gprintf.h>
#define SAFE_FOURCC_FORMAT "02x%02x%02x%02x (%c%c%c%c)"
@@ -118,4 +118,4 @@
if ((*data & 0x01) != 0x01) goto lost_sync_label; \
target |= ((guint64) (*data++ & 0xFE)) >> 1;
-#endif /* __GST_MPEG_DEFS_H__ */
+#endif /* __GST_AML_MPEG_DEFS_H__ */
diff --git a/aml-tsdemux/gstamldesc.h b/aml-tsdemux/gstamldesc.h
index 45f7110..8ee9a8d 100644
--- a/aml-tsdemux/gstamldesc.h
+++ b/aml-tsdemux/gstamldesc.h
@@ -25,8 +25,8 @@
*
*/
-#ifndef __GST_MPEG_DESC_H__
-#define __GST_MPEG_DESC_H__
+#ifndef __GST_AML_MPEG_DESC_H__
+#define __GST_AML_MPEG_DESC_H__
#include <glib.h>
@@ -239,4 +239,4 @@
#define DRF_ID_AC4 0x41432D34 /* defined in ETSI TS 103 190-2 Annex D */
#define DRF_ID_DolbyVision 0x444f5649
-#endif /* __GST_MPEG_DESC_H__ */
+#endif /* __GST_AML_MPEG_DESC_H__ */
diff --git a/aml-tsdemux/gstamltsdemux.c b/aml-tsdemux/gstamltsdemux.c
index fe54104..073a96a 100644
--- a/aml-tsdemux/gstamltsdemux.c
+++ b/aml-tsdemux/gstamltsdemux.c
@@ -31,9 +31,12 @@
static gboolean
plugin_init (GstPlugin * plugin)
{
+#if 1 //removed since 1.20, but we keep it.
gst_mpegts_initialize ();
if (!gst_amltsbase_plugin_init (plugin))
return FALSE;
+#endif
+
if (!gst_amltsparse_plugin_init (plugin))
return FALSE;
if (!gst_amltsdemux_plugin_init (plugin))