else
res = GST_CLOCK_TIME_NONE;
} else {
- if (G_UNLIKELY (ABSDIFF (res, pcrtable->last_pcrtime) > 15 * GST_SECOND))
+ if (G_UNLIKELY (check_diff && pcr_pid != 0x1fff &&
+ 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)
+ } else if (tmp + res > pcrtable->base_pcrtime) {
res += tmp - pcrtable->base_pcrtime;
- else
+ } else if (!check_diff || 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 {
res = GST_CLOCK_TIME_NONE;
+ }
}
#else
if (G_UNLIKELY (check_diff && pcr_pid != 0x1fff &&