if (t->s_scrambled_pass)
return;
- if (!((mpegts_service_t *)t)->s_dvb_forcecaid) {
+ if (!t->s_dvb_forcecaid) {
count = 0;
TAILQ_FOREACH(st, &t->s_filt_components, es_filt_link)
if (constcw_table) {
for (p = constcw_table; *p; p++)
- if (*p == ((mpegts_service_t *)t)->s_dvb_forcecaid) {
+ if (*p == t->s_dvb_forcecaid) {
constcw = 1;
break;
}
dr->dr_force_skip = 0;
tvhcsa_init(&dr->dr_csa);
}
- caclient_start(t);
+
+ if (t->s_dvb_forcecaid != 0xffff)
+ caclient_start(t);
#if ENABLE_LINUXDVB_CA
dvbcam_service_start(t);
#endif
- if (((mpegts_service_t *)t)->s_dvb_forcecaid == 0xffff) {
+ if (t->s_dvb_forcecaid == 0xffff) {
pthread_mutex_lock(&t->s_stream_mutex);
descrambler_external(t, 1);
pthread_mutex_unlock(&t->s_stream_mutex);
char *s_dvb_charset;
uint16_t s_dvb_prefcapid;
int s_dvb_prefcapid_lock;
- uint16_t s_dvb_forcecaid;
time_t s_dvb_created;
time_t s_dvb_last_seen;
time_t s_dvb_check_seen;
(mpegts_service_t *t, const uint8_t *tsb, int len, int table)
{
elementary_stream_t *st;
- int pid, r;
- int error = 0;
+ int_fast16_t pid;
+ uint_fast8_t scrambled, error = 0;
+ int r;
/* Error */
if (tsb[1] & 0x80)
if(!error)
service_set_streaming_status_flags((service_t*)t, TSS_INPUT_SERVICE);
+ scrambled = t->s_scrambled_seen;
if(!t->s_scrambled_pass &&
- ((tsb[3] & 0xc0) ||
- (t->s_scrambled_seen && st && st->es_type != SCT_CA))) {
+ ((tsb[3] & 0xc0) || (scrambled && st && st->es_type != SCT_CA))) {
/**
* Lock for descrambling, but only if packet was not in error
*/
- if(!error)
+ if(!scrambled && !error)
t->s_scrambled_seen |= service_is_encrypted((service_t*)t);
/* scrambled stream */
service_is_encrypted(service_t *t)
{
elementary_stream_t *st;
+ if (((mpegts_service_t *)t)->s_dvb_forcecaid == 0xffff)
+ return 0;
+ if (((mpegts_service_t *)t)->s_dvb_forcecaid)
+ return 1;
TAILQ_FOREACH(st, &t->s_components, es_link)
if (st->es_type == SCT_CA)
return 1;
* Descrambling support
*/
+ uint16_t s_dvb_forcecaid;
struct th_descrambler_list s_descramblers;
uint8_t s_scrambled_seen;
uint8_t s_scrambled_pass;