descrambler: introduce descrambler_keys()

This commit is contained in:
Jaroslav Kysela 2014-06-08 21:06:37 +02:00
parent fb12cf9239
commit 9887c5773d
4 changed files with 27 additions and 28 deletions

View file

@ -125,6 +125,8 @@ void descrambler_done ( void );
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 );

View file

@ -901,7 +901,6 @@ capmt_process_key(capmt_t *capmt, uint8_t adapter, uint16_t seq,
{
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) {
@ -922,22 +921,7 @@ capmt_process_key(capmt_t *capmt, uint8_t adapter, uint16_t seq,
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);
}

View file

@ -797,17 +797,7 @@ forbid:
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) {

View file

@ -160,6 +160,29 @@ descrambler_caid_changed ( service_t *t )
}
}
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,