void descrambler_service_start ( struct service *t );
void descrambler_service_stop ( struct service *t );
void descrambler_caid_changed ( struct service *t );
+void descrambler_keys ( th_descrambler_t *t,
+ const uint8_t *even, const uint8_t *odd );
int descrambler_descramble ( struct service *t,
struct elementary_stream *st,
const uint8_t *tsb );
{
mpegts_service_t *t;
capmt_service_t *ct;
- unsigned int i;
pthread_mutex_lock(&capmt->capmt_mutex);
LIST_FOREACH(ct, &capmt->capmt_services, ct_link) {
if (adapter != ct->ct_adapter)
continue;
- for (i = 0; i < 8; i++)
- if (even[i]) {
- tvhcsa_set_key_even(&ct->ct_csa, even);
- break;
- }
- for (i = 0; i < 8; i++)
- if (odd[i]) {
- tvhcsa_set_key_odd(&ct->ct_csa, odd);
- break;
- }
-
- if (ct->td_keystate != DS_RESOLVED)
- tvhlog(LOG_DEBUG, "capmt", "Obtained key for service \"%s\"",
- t->s_dvb_svcname);
-
- ct->td_keystate = DS_RESOLVED;
+ descrambler_keys((th_descrambler_t *)ct, even, odd);
}
pthread_mutex_unlock(&capmt->capmt_mutex);
}
t->s_dvb_svcname, delay, ct->cs_cwc->cwc_hostname,
ct->cs_cwc->cwc_port);
- ct->td_keystate = DS_RESOLVED;
- for (i = 3; i < 3 + 8; i++)
- if (msg[i]) {
- tvhcsa_set_key_even(&ct->cs_csa, msg + 3);
- break;
- }
- for (i = 3 + 8; i < 3 + 8 + 8; i++)
- if (msg[i]) {
- tvhcsa_set_key_odd(&ct->cs_csa, msg + 3 + 8);
- break;
- }
+ descrambler_keys((th_descrambler_t *)ct, msg + 3, msg + 3 + 8);
ep = LIST_FIRST(&ct->cs_pids);
while(ep != NULL) {
}
}
+void
+descrambler_keys ( th_descrambler_t *td,
+ const uint8_t *even, const uint8_t *odd )
+{
+ int i;
+
+ for (i = 0; i < 8; i++)
+ if (even[i]) {
+ tvhcsa_set_key_even(td->td_csa, even);
+ break;
+ }
+ for (i = 0; i < 8; i++)
+ if (odd[i]) {
+ tvhcsa_set_key_odd(td->td_csa, odd);
+ break;
+ }
+
+ if (td->td_keystate != DS_RESOLVED)
+ tvhlog(LOG_DEBUG, "descrambler", "Obtained key for service \"%s\"",
+ ((mpegts_service_t *)td->td_service)->s_dvb_svcname);
+ td->td_keystate = DS_RESOLVED;
+}
+
int
descrambler_descramble ( service_t *t,
elementary_stream_t *st,