]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
clock: introduce +monocmpfastsec()
authorJaroslav Kysela <perex@perex.cz>
Tue, 15 Mar 2016 23:05:47 +0000 (00:05 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 15 Mar 2016 23:05:47 +0000 (00:05 +0100)
src/clock.h
src/descrambler/descrambler.c
src/input/mpegts/mpegts_input.c
src/input/mpegts/tsdemux.c

index 3035bae4d57ca4a033ca4aef764461856e5569ce..2dfceef009fde40bc2bc82b9509513fd241beb69 100644 (file)
@@ -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)
index 11779fb44f96f90a507cda177a0cab60302365e7..aa4fee7ef0497a86228d5abc090a41d29c4bab79 100644 (file)
@@ -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;
index c563d93857c2b25e80b9063775f0ec7fbac8c6d4..ce7318387e8ad17a7c8f840555d1c81f2e9f4837 100644 (file)
@@ -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();
index fcdddc5c4e4357f6e66d1be03d16023820fb0edb..f2d50bef2986c5148dd0136337e85c329a5a3980 100644 (file)
@@ -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;