Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
descrambler: improve TS error marking when no keys are available, fix…
…es #3629
  • Loading branch information
perexg committed Mar 14, 2016
1 parent f0472ee commit 4b6c25a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 7 deletions.
11 changes: 6 additions & 5 deletions src/descrambler.h
Expand Up @@ -73,11 +73,12 @@ typedef struct th_descrambler_runtime {
uint8_t dr_key_valid;
uint8_t dr_key_changed;
uint64_t dr_key_interval;
int64_t dr_key_start;
int64_t dr_key_timestamp[2];
int64_t dr_ecm_start[2];
int64_t dr_ecm_last_key_time;
int64_t dr_last_err;
int64_t dr_key_start;
int64_t dr_key_timestamp[2];
int64_t dr_ecm_start[2];
int64_t dr_ecm_last_key_time;
int64_t dr_last_err;
int64_t dr_force_skip;
TAILQ_HEAD(, th_descrambler_data) dr_queue;
uint32_t dr_queue_total;
tvhlog_limit_t dr_loglimit_key;
Expand Down
14 changes: 12 additions & 2 deletions src/descrambler/descrambler.c
Expand Up @@ -104,9 +104,10 @@ descrambler_data_cut(th_descrambler_runtime_t *dr, int len)
th_descrambler_data_t *dd;

while (len > 0 && (dd = TAILQ_FIRST(&dr->dr_queue)) != NULL) {
if (dr->dr_skip)
ts_skip_packet2((mpegts_service_t *)dr->dr_service,
dd->dd_sbuf.sb_data, MIN(len, dd->dd_sbuf.sb_ptr));
if (len < dd->dd_sbuf.sb_ptr) {
if (dr->dr_skip)
ts_skip_packet2((mpegts_service_t *)dr->dr_service, dd->dd_sbuf.sb_data, len);
sbuf_cut(&dd->dd_sbuf, len);
dr->dr_queue_total -= len;
break;
Expand Down Expand Up @@ -284,6 +285,7 @@ descrambler_service_start ( service_t *t )
if (constcw)
tvhtrace("descrambler", "using constcw for \"%s\"", t->s_nicename);
dr->dr_skip = 0;
dr->dr_force_skip = 0;
tvhcsa_init(&dr->dr_csa);
}
caclient_start(t);
Expand Down Expand Up @@ -775,6 +777,12 @@ descrambler_descramble ( service_t *t,
return 1;
}
next:
if (!dr->dr_skip) {
if (!dr->dr_force_skip)
dr->dr_force_skip = mclk() + sec2mono(30);
else if (dr->dr_force_skip < mclk())
dr->dr_skip = 1;
}
if (dr->dr_ecm_start[0] || dr->dr_ecm_start[1]) { /* ECM sent */
ki = tsb[3];
if ((ki & 0x80) != 0x00) {
Expand Down Expand Up @@ -820,6 +828,8 @@ descrambler_descramble ( service_t *t,
service_set_streaming_status_flags(t, TSS_NO_ACCESS);
}
} else {
if (dr->dr_skip || count == 0)
ts_skip_packet2((mpegts_service_t *)dr->dr_service, tsb, len);
service_set_streaming_status_flags(t, TSS_NO_ACCESS);
}
if (flush_data)
Expand Down

0 comments on commit 4b6c25a

Please sign in to comment.