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,
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;
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 )