From: Lauri Myllari Date: Sat, 10 Jan 2015 07:31:19 +0000 (-0800) Subject: psip: iterate through EIT events X-Git-Tag: v4.2.1~1833 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c294b632ccc190bbb45e9cdd53f6cd0e6c0d7078;p=thirdparty%2Ftvheadend.git psip: iterate through EIT events --- diff --git a/src/epggrab/module/psip.c b/src/epggrab/module/psip.c index 965f5210d..bb4345dca 100644 --- a/src/epggrab/module/psip.c +++ b/src/epggrab/module/psip.c @@ -75,8 +75,7 @@ _psip_eit_callback { int r; int sect, last, ver; - // int count, i; - int count; + int count, i; uint16_t tsid; uint32_t extraid; mpegts_mux_t *mm = mt->mt_mux; @@ -113,6 +112,29 @@ _psip_eit_callback ptr += 7; len -= 7; + for (i = 0; i < count && len >= 12; i++) { + uint16_t eventid; + uint32_t starttime, length; + uint8_t titlelen; + unsigned int dlen; + eventid = (ptr[0] & 0x3f) << 8 | ptr[1]; + starttime = ptr[2] << 24 | ptr[3] << 16 | ptr[4] << 8 | ptr[5]; + length = (ptr[6] & 0x0f) << 16 | ptr[7] << 8 | ptr[8]; + titlelen = ptr[9]; + dlen = ((ptr[10+titlelen] & 0x0f) << 8) | ptr[11+titlelen]; + // tvhdebug("psip", " %03d: titlelen %d, dlen %d", i, titlelen, dlen); + + if (titlelen + dlen + 12 > len) return -1; + + tvhdebug("psip", " %03d: 0x%04x at %d, duration %d, title data %d bytes", + i, eventid, starttime, length, titlelen); + + /* Move on */ +// next: + ptr += titlelen + dlen + 12; + len -= titlelen + dlen + 12; + } + return dvb_table_end(mt, st, sect); }