]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts: tables - print only one table error per 10 seconds + total errors value
authorJaroslav Kysela <perex@perex.cz>
Wed, 20 Aug 2014 07:10:49 +0000 (09:10 +0200)
committerJaroslav Kysela <perex@perex.cz>
Wed, 20 Aug 2014 07:10:49 +0000 (09:10 +0200)
src/input/mpegts.h
src/input/mpegts/mpegts_table.c

index 224e1b436e9ddcf5b6fe55a678cd17f9982b9213..c3b1225c80b6e363e3ed58c9b06189b6da106d3b 100644 (file)
@@ -197,6 +197,9 @@ struct mpegts_table
 
   int8_t mt_cc;
 
+  time_t mt_last_perr; // last printer error
+  size_t mt_errors;    // total number of table errors
+
   mpegts_psi_section_t mt_sect;
 
   struct mpegts_table_mux_cb *mt_mux_cb;
index fe0e3c6c567aa0242906545e514a1e2dacf6f2c6..34e9639c5ce6c39a0392d1bfe64973cc0d54263e 100644 (file)
@@ -61,8 +61,15 @@ mpegts_table_dispatch
   len = ((sec[1] & 0x0f) << 8) | sec[2];
 
   if (tid == 0x72) { /* stuffing section */
-    if (len != r - 3)
-      tvhwarn(mt->mt_name, "stuffing found with trailing data (len %i, total %zi)", len, r);
+    if (len != r - 3) {
+      mt->mt_errors++;
+      if (mt->mt_last_perr + 10 < dispatch_clock) {
+        tvhwarn(mt->mt_name, "stuffing found with trailing data "
+                             "(len %i, total %zi, errors %zi)",
+                             len, r, mt->mt_errors);
+        mt->mt_last_perr = dispatch_clock;
+      }
+    }
     dvb_table_reset(mt);
     return;
   }
@@ -70,7 +77,12 @@ mpegts_table_dispatch
   /* It seems some hardware (or is it the dvb API?) does not
      honour the DMX_CHECK_CRC flag, so we check it again */
   if(chkcrc && tvh_crc32(sec, r, 0xffffffff)) {
-    tvhwarn(mt->mt_name, "invalid checksum (len %zi)", r);
+    mt->mt_errors++;
+    if (mt->mt_last_perr + 10 < dispatch_clock) {
+      tvhwarn(mt->mt_name, "invalid checksum (len %zi, errors %zi)",
+                           r, mt->mt_errors);
+      mt->mt_last_perr = dispatch_clock;
+    }
     return;
   }