Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
descrambler: fix the initial key index
  • Loading branch information
perexg committed Aug 7, 2014
1 parent d1c62ee commit 9a49f94
Showing 1 changed file with 19 additions and 5 deletions.
24 changes: 19 additions & 5 deletions src/descrambler/descrambler.c
Expand Up @@ -273,7 +273,11 @@ key_update( th_descrambler_runtime_t *dr, uint8_t key )
{
/* set the even (0) or odd (0x40) key index */
dr->dr_key_index = key & 0x40;
dr->dr_key_start = dispatch_clock;
if (dr->dr_key_start)
dr->dr_key_start = dispatch_clock;
else
/* We don't knoe the exact start key switch time */
dr->dr_key_start = dispatch_clock - 60;
}

int
Expand Down Expand Up @@ -376,10 +380,20 @@ descrambler_descramble ( service_t *t,
ki = tsb[3];
if ((ki & 0x80) != 0x00) {
if (dr->dr_key_start == 0) {
tvhtrace("descrambler", "initial stream key set to %s for service \"%s\"",
(ki & 0x40) ? "odd" : "even",
((mpegts_service_t *)t)->s_dvb_svcname);
key_update(dr, tsb[3]);
/* do not use the first TS packet to decide - it may be wrong */
if (dr->dr_buf.sb_ptr > 20 * 188) {
for (off = 0; off < 20 * 188; off += 188)
if ((dr->dr_buf.sb_data[off + 3] & 0xc0) != (ki & 0xc0))
break;
if (off >= 20 * 188) {
tvhtrace("descrambler", "initial stream key set to %s for service \"%s\"",
(ki & 0x40) ? "odd" : "even",
((mpegts_service_t *)t)->s_dvb_svcname);
key_update(dr, ki);
} else {
sbuf_cut(&dr->dr_buf, 188);
}
}
} else if (dr->dr_key_index != (ki & 0x40) &&
dr->dr_key_start + 2 < dispatch_clock) {
tvhtrace("descrambler", "stream key changed to %s for service \"%s\"",
Expand Down

0 comments on commit 9a49f94

Please sign in to comment.