]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
capmt: send duplicate keys for all PIDs to descrambler
authorJaroslav Kysela <perex@perex.cz>
Fri, 26 May 2017 19:04:08 +0000 (21:04 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 26 May 2017 19:04:08 +0000 (21:04 +0200)
src/descrambler.h
src/descrambler/capmt.c
src/descrambler/descrambler.c

index 61b6b391d76acf487b2616318919c4c02465df74..bbbbdca554f0f25b9f492b337c5c4099ae633a4b 100644 (file)
@@ -162,6 +162,7 @@ void descrambler_service_stop  ( struct service *t );
 void descrambler_caid_changed  ( struct service *t );
 int  descrambler_resolved      ( struct service *t, th_descrambler_t *ignore );
 void descrambler_external      ( struct service *t, int state );
+int  descrambler_multi_pid     ( th_descrambler_t *t );
 void descrambler_keys          ( th_descrambler_t *t, int type, uint16_t pid,
                                  const uint8_t *even, const uint8_t *odd );
 void descrambler_notify        ( th_descrambler_t *t,
index 7d484fb78e24ce87ff36d99e2c57bec82d32bb87..72de3e2a4818700beecd1b9999b774f9f149c470 100644 (file)
@@ -1111,8 +1111,13 @@ capmt_process_key(capmt_t *capmt, uint8_t adapter, ca_info_t *cai,
       for (j = 0; j < MAX_PIDS; j++) {
         pid = ct->ct_pids[j];
         if (pid == 0) break;
-        if (pid == pids[i])
+        if (pid == pids[i]) {
+          if (descrambler_multi_pid((th_descrambler_t *)ct)) {
+            descrambler_keys((th_descrambler_t *)ct, type, pid, even, odd);
+            continue;
+          }
           goto found;
+        }
       }
     }
     continue;
index ad96714b722638fe7abc75440674b344fb439a09..d2721289635ff1e8453225f36a38c5dfee475793 100644 (file)
@@ -480,6 +480,17 @@ descrambler_external ( service_t *t, int state )
   service_reset_streaming_status_flags(t, TSS_NO_DESCRAMBLER);
 }
 
+int
+descrambler_multi_pid ( th_descrambler_t *td )
+{
+  service_t *t = td->td_service;
+  th_descrambler_runtime_t *dr;
+
+  if (t == NULL || (dr = t->s_descramble) == NULL)
+    return 0;
+  return dr->dr_key_multipid;
+}
+
 void
 descrambler_keys ( th_descrambler_t *td, int type, uint16_t pid,
                    const uint8_t *even, const uint8_t *odd )