]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
pass muxer: fix pass_muxer_nit_cb() - wrong private tag copy
authorJaroslav Kysela <perex@perex.cz>
Sun, 2 Dec 2018 16:47:24 +0000 (17:47 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sun, 2 Dec 2018 16:47:24 +0000 (17:47 +0100)
src/muxer/muxer_pass.c

index d376e2d5d01305cbbe8f31cadc006bf8f6eeed22..8b3bba973353be9d91af21983e993319c70ab6a2 100644 (file)
@@ -282,7 +282,7 @@ pass_muxer_nit_cb(mpegts_psi_table_t *mt, const uint8_t *buf, int len)
         tvherror(LS_PASS, "NIT entry too long (%i)", ol);
         return;
       }
-      memcpy(out, buf, dlen + 2);
+      memcpy(out + ol, buf, dlen + 2);
       ol += dlen + 2;
     }
     dlen += 2;
@@ -292,7 +292,7 @@ pass_muxer_nit_cb(mpegts_psi_table_t *mt, const uint8_t *buf, int len)
   }
   out[8] &= 0xf0;
   out[8] |= ((ol - 10) >> 8) & 0x0f;
-  out[9] = ol - 10;
+  out[9] = (ol - 10) & 0xff;
 
   if (sizeof(out) - 32 < ol) {
     tvherror(LS_PASS, "NIT entry too long (%i)", ol);
@@ -301,8 +301,7 @@ pass_muxer_nit_cb(mpegts_psi_table_t *mt, const uint8_t *buf, int len)
 
   /* mux info length */
   lptr = ol;
-  out[ol++] = 0xf0;
-  out[ol++] = 0x00;
+  ol += 2;
 
   /* mux info */
   out[ol++] = pm->pm_dst_tsid >> 8;
@@ -317,8 +316,9 @@ pass_muxer_nit_cb(mpegts_psi_table_t *mt, const uint8_t *buf, int len)
   out[ol++] = pm->pm_dst_sid >> 8;
   out[ol++] = pm->pm_dst_sid;
   out[ol++] = 0x11;
-  out[lptr] = (ol - lptr - 2) >> 8;
-  out[lptr+1] = ol - lptr - 2;
+  /* update section length */
+  out[lptr+0] = 0xf0 | (ol - lptr - 2) >> 8;
+  out[lptr+1] = (ol - lptr - 2) & 0xff;
 
   /* update section length */
   out[1] = (out[1] & 0xf0) | ((ol + 4 - 3) >> 8);