]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
psip: iterate through EIT events
authorLauri Myllari <lauri.myllari@gmail.com>
Sat, 10 Jan 2015 07:31:19 +0000 (23:31 -0800)
committerJaroslav Kysela <perex@perex.cz>
Thu, 22 Oct 2015 15:33:58 +0000 (17:33 +0200)
src/epggrab/module/psip.c

index 965f5210ddf59546362ddb8221bcc908a1f3f285..bb4345dca675e198e4c8261b9d8e0e1008524cfe 100644 (file)
@@ -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);
 }