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