From: Jaroslav Kysela Date: Sun, 11 Feb 2018 16:34:56 +0000 (+0100) Subject: dvb psi: parse first table bugfix X-Git-Tag: v4.2.6~28 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=81df11c12a002b97f29781f8034b463c31b3b540;p=thirdparty%2Ftvheadend.git dvb psi: parse first table bugfix --- diff --git a/src/input/mpegts/dvb.h b/src/input/mpegts/dvb.h index 8b561274c..3dae001bd 100644 --- a/src/input/mpegts/dvb.h +++ b/src/input/mpegts/dvb.h @@ -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]; diff --git a/src/input/mpegts/dvb_psi_lib.c b/src/input/mpegts/dvb_psi_lib.c index b22ae8a99..3827a571d 100644 --- a/src/input/mpegts/dvb_psi_lib.c +++ b/src/input/mpegts/dvb_psi_lib.c @@ -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--;