]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
satip server: fix pmt rewrite (wrong CC), use sbuf as the internal data buffer
authorJaroslav Kysela <perex@perex.cz>
Wed, 7 Nov 2018 16:04:35 +0000 (17:04 +0100)
committerJaroslav Kysela <perex@perex.cz>
Wed, 7 Nov 2018 16:04:35 +0000 (17:04 +0100)
src/satip/rtp.c

index 9364baef3424a70db9f0f41214e05aef8857e65a..dd334b4a7e97fbda7c1cb127a5838a9532228b67 100644 (file)
@@ -75,8 +75,7 @@ typedef struct satip_rtp_session {
   int sig_lock;
   pthread_mutex_t lock;
   http_connection_t *hc;
-  uint8_t *table_data;
-  int table_data_len;
+  sbuf_t table_data;
   void (*no_data_cb)(void *opaque);
   void *no_data_opaque;
 } satip_rtp_session_t;
@@ -141,10 +140,8 @@ satip_rtp_pmt_cb(mpegts_psi_table_t *mt, const uint8_t *buf, int len)
 
   ol = dvb_table_append_crc32(out, ol, sizeof(out));
 
-  if (ol > 0 && (l = dvb_table_remux(mt, out, ol, &ob)) > 0) {
-    rtp->table_data = ob;
-    rtp->table_data_len = l;
-  }
+  if (ol > 0 && (l = dvb_table_remux(mt, out, ol, &ob)) > 0)
+    sbuf_append(&rtp->table_data, ob, l);
 }
 
 static void
@@ -242,15 +239,13 @@ found:
       TAILQ_FOREACH(tbl, &rtp->pmt_tables, link)
         if (tbl->pid == pid) {
           dvb_table_parse(&tbl->tbl, "-", data, 188, 1, 0, satip_rtp_pmt_cb);
-          if (rtp->table_data && rtp->table_data_len) {
-            for (i = r = 0; i < rtp->table_data_len; i += 188) {
-              r = satip_rtp_append_data(rtp, &v, rtp->table_data + i);
+          if (rtp->table_data.sb_ptr > 0) {
+            for (i = r = 0; i < rtp->table_data.sb_ptr; i += 188) {
+              r = satip_rtp_append_data(rtp, &v, rtp->table_data.sb_data + i);
               if (r)
                 break;
             }
-            free(rtp->table_data);
-            rtp->table_data = NULL;
-            rtp->table_data_len = 0;
+            sbuf_reset(&rtp->table_data, 10*188);
             if (r)
               return r;
           }
@@ -333,11 +328,9 @@ found:
       TAILQ_FOREACH(tbl, &rtp->pmt_tables, link)
         if (tbl->pid == pid) {
           dvb_table_parse(&tbl->tbl, "-", data, 188, 1, 0, satip_rtp_pmt_cb);
-          if (rtp->table_data && rtp->table_data_len) {
-            r = satip_rtp_append_tcp_data(rtp, rtp->table_data, rtp->table_data_len);
-            free(rtp->table_data);
-            rtp->table_data = NULL;
-            rtp->table_data_len = 0;
+          if (rtp->table_data.sb_ptr) {
+            r = satip_rtp_append_tcp_data(rtp, rtp->table_data.sb_data, rtp->table_data.sb_ptr);
+            sbuf_reset(&rtp->table_data, 10*188);
             if (r)
               return -1;
           }