]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvb: some minor corrections to nit scanning.
authorAdam Sutton <dev@adamsutton.me.uk>
Mon, 11 Feb 2013 17:11:42 +0000 (17:11 +0000)
committerAdam Sutton <dev@adamsutton.me.uk>
Fri, 15 Feb 2013 10:24:41 +0000 (10:24 +0000)
src/dvb/dvb_multiplex.c
src/dvb/dvb_tables.c

index 986765ae7d8055f472013cee4b8d086ddb54d4bf..a5ac0d4d1cb1d81854a4dba7eee959da3ed4d8e0 100644 (file)
@@ -206,7 +206,7 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
       tdmi->tdmi_network_id = onid;
       save = 1;
     }
-    if(network && strcmp(tdmi->tdmi_network ?: "", network)) {
+    if(network && *network && strcmp(tdmi->tdmi_network ?: "", network)) {
       free(tdmi->tdmi_network);
       tdmi->tdmi_network = strdup(network);
       save = 1;
@@ -848,6 +848,9 @@ dvb_mux_set_networkname(th_dvb_mux_instance_t *tdmi, const char *networkname)
 {
   htsmsg_t *m;
 
+  if (!networkname || !*networkname)
+    return;
+
   free(tdmi->tdmi_network);
   tdmi->tdmi_network = strdup(networkname);
   dvb_mux_save(tdmi);
index 18d6d7ad345e1372b29aeb576ca75b015b3b201f..db59f811b92ce3279997aa271035e499264285d9 100644 (file)
@@ -878,6 +878,11 @@ dvb_nit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
   uint16_t network_id = (ptr[0] << 8) | ptr[1];
   netname[0] = '\0';
 
+  TRACE("nit", "tableid 0x%02x", tableid);
+#if TDT_TRACE
+  hexdump("nit", ptr, len);
+#endif
+
   /* Check NID */
   if(tdmi->tdmi_adapter->tda_nitoid &&
      tdmi->tdmi_adapter->tda_nitoid != network_id)
@@ -898,10 +903,14 @@ dvb_nit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
     dtag = ptr[0];
     dlen = ptr[1];
 
+    TRACE("nit", "dtag %02X dlen %d", dtag, dlen);
+
     switch(dtag) {
       case DVB_DESC_NETWORK_NAME:
         if(dvb_get_string(netname, sizeof(netname), ptr+2, dlen, NULL, NULL))
           return -1;
+        if(tableid == 0x40 && (!tdmi->tdmi_network || *tdmi->tdmi_network == '\0'))
+          dvb_mux_set_networkname(tdmi, netname);
         break;
     }
 
@@ -934,6 +943,8 @@ dvb_nit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
       dtag = ptr[0];
       dlen = ptr[1];
 
+      TRACE("nit", "    dtag %02X dlen %d", dtag, dlen);
+
       switch(dtag) {
         case DVB_DESC_SAT:
           if(tdmi->tdmi_adapter->tda_type == FE_QPSK)
@@ -1133,14 +1144,7 @@ dvb_table_add_default_dvb(th_dvb_mux_instance_t *tdmi)
 {
   /* Network Information Table */
 
-  int table;
-
-  if(tdmi->tdmi_adapter->tda_nitoid) {
-    table = 0x41;
-  } else {
-    table = 0x40;
-  }
-  tdt_add(tdmi, table, 0xff, dvb_nit_callback, NULL, "nit", 
+  tdt_add(tdmi, 0, 0, dvb_nit_callback, NULL, "nit", 
          TDT_QUICKREQ | TDT_CRC, 0x10);
 
   /* Service Descriptor Table and Bouqeut Allocation Table */