}
#define MONOCLOCK_RESOLUTION 1000000LL /* microseconds */
+#define MONOCLOCK_FASTSEC 0xfffffLL /* 1048575 */
static inline int64_t
sec2mono(int64_t sec)
(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)
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;
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();
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);
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;