From: Jaroslav Kysela Date: Fri, 26 May 2017 19:04:08 +0000 (+0200) Subject: capmt: send duplicate keys for all PIDs to descrambler X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=452811f69dfb79aaed72804da7384086d1e9084a;p=thirdparty%2Ftvheadend.git capmt: send duplicate keys for all PIDs to descrambler --- diff --git a/src/descrambler.h b/src/descrambler.h index 61b6b391d..bbbbdca55 100644 --- a/src/descrambler.h +++ b/src/descrambler.h @@ -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, diff --git a/src/descrambler/capmt.c b/src/descrambler/capmt.c index 7d484fb78..72de3e2a4 100644 --- a/src/descrambler/capmt.c +++ b/src/descrambler/capmt.c @@ -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; diff --git a/src/descrambler/descrambler.c b/src/descrambler/descrambler.c index ad96714b7..d27212896 100644 --- a/src/descrambler/descrambler.c +++ b/src/descrambler/descrambler.c @@ -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 )