]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
descrambler: cosmetic cleanups, more CAID logs
authorJaroslav Kysela <perex@perex.cz>
Mon, 23 Jan 2023 08:33:54 +0000 (09:33 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 23 Jan 2023 08:38:09 +0000 (09:38 +0100)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/descrambler/caid.h
src/descrambler/capmt.c
src/descrambler/cclient.c
src/descrambler/emm_reass.h

index 4256ad6cb258407d4b83eefccb607e5d63af7b3f..109204f3dd09b462dd985355b00a637046faaa04 100644 (file)
@@ -45,4 +45,9 @@ uint16_t name2caid(const char *str);
 
 card_type_t detect_card_type(const uint16_t caid);
 
+static inline int caid_is_irdeto(uint16_t caid) { return (caid >> 8) == 0x06; }
+static inline int caid_is_powervu(uint16_t caid) { return (caid >> 8) == 0x0e; }
+static inline int caid_is_betacrypt(uint16_t caid) { return (caid >> 8) == 0x17; }
+static inline int caid_is_dvn(uint16_t caid) { return caid == 0x4a30; }
+
 #endif /* __TVH_CAID_H__ */
index 31851b6326616094c56e84a1e0aceeb3ce100cae..f37a0c22ab9a4d360d2212188cfe19d5375e228d 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "input.h"
 #include "caclient.h"
+#include "caid.h"
 #include "service.h"
 #include "tcp.h"
 #include "tvhpoll.h"
@@ -1024,7 +1025,7 @@ service_found:
     f0 = pf->filter[0];
     m0 = pf->filter[1];
     if ((f0 & 0xf0) == 0x80 && (m0 & 0xf0) == 0xf0) goto cont;
-    if (caid == 0x4a30 && f0 == 0x50 && m0 == 0xff) goto cont; /* DVN */
+    if (caid_is_dvn(caid) && f0 == 0x50 && m0 == 0xff) goto cont; /* DVN */
   }
 cont:
   if (t)
index 9ca78539c8f180c083cc4ef967c4dd31ac6be7ee..415f47cbbc9888d4ddd6318aecc7b2cb0c6897c9 100644 (file)
@@ -416,7 +416,7 @@ cc_ecm_reply(cc_service_t *ct, cc_ecm_section_t *es,
 
   es->es_pending = 0;
 
-  snprintf(chaninfo, sizeof(chaninfo), " (PID %d)", es->es_capid);
+  snprintf(chaninfo, sizeof(chaninfo), " (PID %d CAID %04X)", es->es_capid, es->es_caid);
 
   if (key_even == NULL || key_odd == NULL) {
 
@@ -900,10 +900,10 @@ cc_table_input(void *opaque, int pid, const uint8_t *data, int len, int emm)
   elementary_stream_t *st;
   mpegts_service_t *t = (mpegts_service_t*)ct->td_service;
   cclient_t *cc = ct->cs_client;
-  int capid, section, ecm;
+  int section, ecm;
   cc_ecm_pid_t *ep;
   cc_ecm_section_t *es;
-  char chaninfo[32];
+  char chaninfo[40];
   cc_card_data_t *pcard = NULL;
   caid_t *c;
   uint16_t caid;
@@ -938,7 +938,7 @@ cc_table_input(void *opaque, int pid, const uint8_t *data, int len, int emm)
   if(ep == NULL) {
     if (ct->ecm_state == ECM_INIT) {
       // Validate prefered ECM PID
-      tvhdebug(cc->cc_subsys, "%s: ECM state INIT", cc->cc_name);
+      tvhdebug(cc->cc_subsys, "%s: ECM state INIT (PID %d)", cc->cc_name, pid);
 
       if(t->s_dvb_prefcapid_lock != PREFCAPID_OFF) {
         st = elementary_stream_find(&t->s_components, t->s_dvb_prefcapid);
@@ -985,13 +985,13 @@ found:
   provid = c->providerid;
 
   ecm = data[0] == 0x80 || data[0] == 0x81;
-  if (pcard->cs_ra.caid == 0x4a30) ecm |= data[0] == 0x50; /* DVN */
+  if (caid_is_dvn(caid)) ecm |= data[0] == 0x50; /* DVN */
 
   if (ecm) {
-    if ((pcard->cs_ra.caid >> 8) == 6) {
+    if (caid_is_irdeto(caid)) {
       ep->ep_last_section = data[5];
       section = data[4];
-    } else if (pcard->cs_ra.caid == 0xe00) {
+    } else if (caid_is_powervu(caid)) {
       ep->ep_last_section = 0;
       section = data[0] & 1;
     } else {
@@ -999,8 +999,7 @@ found:
       section = 0;
     }
 
-    capid = pid;
-    snprintf(chaninfo, sizeof(chaninfo), " (PID %d)", capid);
+    snprintf(chaninfo, sizeof(chaninfo), " (PID %d CAID %04X)", pid, caid);
 
     LIST_FOREACH(es, &ep->ep_sections, es_link)
       if (es->es_section == section)
@@ -1030,14 +1029,14 @@ found:
 
     es->es_caid = caid;
     es->es_provid = provid;
-    es->es_capid = capid;
+    es->es_capid = pid;
     es->es_pending = 1;
     es->es_resolved = 0;
 
     if (ct->cs_capid != 0xffff && ct->cs_capid > 0 &&
-       capid > 0 && ct->cs_capid != capid) {
-      tvhdebug(cc->cc_subsys, "%s: Filtering ECM (PID %d), using PID %d",
-               cc->cc_name, capid, ct->cs_capid);
+        pid > 0 && ct->cs_capid != pid) {
+      tvhdebug(cc->cc_subsys, "%s: Filtering ECM (PID %d CAID %04X), using PID %d",
+               cc->cc_name, pid, caid, ct->cs_capid);
       goto end;
     }
 
index c816c663a1b0f9b5f973b460efa97c0979231722..5a5e92a300a5fd79764de55ce15cae4b0abe0b5a 100644 (file)
@@ -75,7 +75,4 @@ emm_provider_t *emm_find_provider(emm_reass_t *ra, uint32_t provid);
 void emm_reass_init(emm_reass_t *ra, int subsys, uint16_t caid);
 void emm_reass_done(emm_reass_t *ra);
 
-static inline int caid_is_betacrypt(uint16_t caid) { return (caid >> 8) == 0x17; }
-static inline int caid_is_irdeto(uint16_t caid) { return (caid >> 8) == 0x06; }
-
 #endif /* __TVH_EMM_REASS_H__ */