From: Jaroslav Kysela Date: Tue, 15 Mar 2016 23:05:47 +0000 (+0100) Subject: clock: introduce +monocmpfastsec() X-Git-Tag: v4.2.1~861 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=42c9423d8aaf6834ea122c57039d39286eecaae8;p=thirdparty%2Ftvheadend.git clock: introduce +monocmpfastsec() --- diff --git a/src/clock.h b/src/clock.h index 3035bae4d..2dfceef00 100644 --- a/src/clock.h +++ b/src/clock.h @@ -54,6 +54,7 @@ static inline time_t gclk(void) } #define MONOCLOCK_RESOLUTION 1000000LL /* microseconds */ +#define MONOCLOCK_FASTSEC 0xfffffLL /* 1048575 */ static inline int64_t sec2mono(int64_t sec) @@ -101,6 +102,12 @@ getfastmonoclock(void) (tp.tv_nsec / (1000000000LL/MONOCLOCK_RESOLUTION)); } +static inline int +monocmpfastsec(int64_t m1, int64_t m2) +{ + return (m1 & ~MONOCLOCK_FASTSEC) == (m2 & ~MONOCLOCK_FASTSEC); +} + void time_t_out_of_range_notify(int64_t val); static inline time_t time_t_out_of_range(uint64_t val) diff --git a/src/descrambler/descrambler.c b/src/descrambler/descrambler.c index 11779fb44..aa4fee7ef 100644 --- a/src/descrambler/descrambler.c +++ b/src/descrambler/descrambler.c @@ -84,7 +84,7 @@ descrambler_data_append(th_descrambler_runtime_t *dr, const uint8_t *tsb, int le if (len == 0) return; dd = TAILQ_LAST(&dr->dr_queue, th_descrambler_queue); - if (dd && mono2sec(dd->dd_timestamp) == mono2sec(mclk()) && + if (dd && monocmpfastsec(dd->dd_timestamp, mclk()) && (dd->dd_sbuf.sb_data[3] & 0x40) == (tsb[3] & 0x40)) { /* key match */ sbuf_append(&dd->dd_sbuf, tsb, len); dr->dr_queue_total += len; diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index c563d9385..ce7318387 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -1053,7 +1053,7 @@ mpegts_input_recv_packets if (len < (MIN_TS_PKT * 188) && (flags & MPEGTS_DATA_CC_RESTART) == 0) { /* For slow streams, check also against the clock */ - if (mono2sec(mclk()) == mono2sec(mi->mi_last_dispatch)) + if (monocmpfastsec(mclk(), mi->mi_last_dispatch)) return; } mi->mi_last_dispatch = mclk(); diff --git a/src/input/mpegts/tsdemux.c b/src/input/mpegts/tsdemux.c index fcdddc5c4..f2d50bef2 100644 --- a/src/input/mpegts/tsdemux.c +++ b/src/input/mpegts/tsdemux.c @@ -356,8 +356,7 @@ ts_remux(mpegts_service_t *t, const uint8_t *src, int len, int errors) sbuf_append(sb, src, len); sb->sb_err += errors; - if(mono2sec(mclk()) == mono2sec(t->s_tsbuf_last) && - sb->sb_ptr < TS_REMUX_BUFSIZE) + if(monocmpfastsec(mclk(), t->s_tsbuf_last) && sb->sb_ptr < TS_REMUX_BUFSIZE) return; ts_flush(t, sb); @@ -379,7 +378,7 @@ ts_skip(mpegts_service_t *t, const uint8_t *src, int len) sb->sb_err += len / 188; - if(mono2sec(mclk()) == mono2sec(t->s_tsbuf_last) && + if(monocmpfastsec(mclk(), t->s_tsbuf_last) && sb->sb_err < (TS_REMUX_BUFSIZE / 188)) return;