*/
#ifdef TIZEN_FEATURE_TSDEMUX_MODIFICATION
tmp = pcrtable->base_time + pcrtable->skew;
- if (packetizer->is_live_stream) {
- if (G_UNLIKELY (ABSDIFF (res, pcrtable->last_pcrtime) > 15 * GST_SECOND))
- GST_WARNING
- ("Live Stream : Server sending erronous PCR values : Recalculating!!");
-
- if (tmp + res > pcrtable->base_pcrtime)
+ if (G_UNLIKELY ((pcr_pid == 0x1fff) ||
+ ABSDIFF (res, pcrtable->last_pcrtime) <= 15 * GST_SECOND)) {
+ if (tmp + res >= pcrtable->base_pcrtime) {
res += tmp - pcrtable->base_pcrtime;
- else
+ } else if (ABSDIFF (tmp + res + PCR_GST_MAX_VALUE,
+ pcrtable->base_pcrtime) < PCR_GST_MAX_VALUE / 2) {
+ /* Handle wrapover */
+ res += tmp + PCR_GST_MAX_VALUE - pcrtable->base_pcrtime;
+ } else {
+ /* Fallback for values that differ way too much */
res = GST_CLOCK_TIME_NONE;
+ }
} else {
- if (G_UNLIKELY (ABSDIFF (res, pcrtable->last_pcrtime) > 15 * GST_SECOND))
- GST_WARNING
- ("VOD Stream : Server sending erronous PCR values : Maintaining old ts value !!!");
- else if (tmp + res > pcrtable->base_pcrtime)
- res += tmp - pcrtable->base_pcrtime;
- else
- res = GST_CLOCK_TIME_NONE;
+ if (packetizer->is_live_stream) {
+ if (G_UNLIKELY (ABSDIFF (res, pcrtable->last_pcrtime) > 15 * GST_SECOND))
+ GST_WARNING
+ ("Live Stream : Server sending erroneous PCR values : Recalculating!!");
+
+ if (tmp + res > pcrtable->base_pcrtime)
+ res += tmp - pcrtable->base_pcrtime;
+ else
+ res = GST_CLOCK_TIME_NONE;
+ } else {
+ if (G_UNLIKELY (ABSDIFF (res, pcrtable->last_pcrtime) > 15 * GST_SECOND))
+ GST_WARNING
+ ("VOD Stream : Server sending erroneous PCR values : Maintaining old ts value !!!");
+ else if (tmp + res > pcrtable->base_pcrtime)
+ res += tmp - pcrtable->base_pcrtime;
+ else
+ res = GST_CLOCK_TIME_NONE;
+ }
}
#else
if (G_UNLIKELY (pcr_pid != 0x1fff &&