]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvb psi: parse first table bugfix
authorJaroslav Kysela <perex@perex.cz>
Sun, 11 Feb 2018 16:34:56 +0000 (17:34 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sun, 11 Feb 2018 16:42:45 +0000 (17:42 +0100)
src/input/mpegts/dvb.h
src/input/mpegts/dvb_psi_lib.c

index 8b561274c5373f1fefc85005d684ce1ed91fa16f..3dae001bdec9669de286faa130c85d8db078fb58 100644 (file)
@@ -274,6 +274,7 @@ do {\
  */
 
 #define MPEGTS_PSI_SECTION_SIZE 5000
+#define MPEGTS_PSI_VERSION_NONE 255
 
 typedef struct mpegts_psi_section
 {
@@ -294,6 +295,7 @@ typedef struct mpegts_psi_table_state
   int      tableid;
   uint64_t extraid;
   int      version;
+  int      last;
   int      complete;
   int      working;
   uint32_t sections[8];
index b22ae8a991da4b81465ea239906211e5f6c386b9..3827a571d81a20fa6af79ae16f5e72278c5f1526 100644 (file)
@@ -201,13 +201,26 @@ mpegts_table_state_reset
   int i;
   mt->mt_finished = 0;
   st->complete = 0;
-  st->version = 0xff;  /* invalid */
+  st->version = MPEGTS_PSI_VERSION_NONE;
+  st->last = last;
   memset(st->sections, 0, sizeof(st->sections));
   for (i = 0; i < last / 32; i++)
     st->sections[i] = 0xFFFFFFFF;
   st->sections[last / 32] = 0xFFFFFFFF << (31 - (last % 32));
 }
 
+static void
+mpegts_table_state_restart
+  ( mpegts_psi_table_t *mt, mpegts_psi_table_state_t *st, int last, int ver )
+{
+  if (st->complete == 2)
+    mt->mt_complete--;
+  if (st->complete)
+    mt->mt_incomplete++;
+  mpegts_table_state_reset(mt, st, last);
+  st->version = ver;
+}
+
 static mpegts_psi_table_state_t *
 mpegts_table_state_find
   ( mpegts_psi_table_t *mt, int tableid, uint64_t extraid, int last )
@@ -325,6 +338,8 @@ dvb_table_begin
 #endif
 
     /* New version */
+    if (st->version == MPEGTS_PSI_VERSION_NONE)
+      st->version = *ver;
     if (st->version != *ver) {
       if (st->complete == 2)
         mt->mt_complete--;