mpegts cwc: re-add configuration for prefcapid (fixes #2001)
This commit is contained in:
parent
7348408b2a
commit
a9e7d13cbf
5 changed files with 20 additions and 45 deletions
|
@ -771,9 +771,9 @@ forbid:
|
|||
ct->cs_channel = es->es_channel;
|
||||
ct->ecm_state = ECM_VALID;
|
||||
|
||||
if(t->s_prefcapid == 0 || t->s_prefcapid != ct->cs_channel) {
|
||||
t->s_prefcapid = ct->cs_channel;
|
||||
tvhlog(LOG_DEBUG, "cwc", "Saving prefered PID %d", t->s_prefcapid);
|
||||
if(t->s_dvb_prefcapid == 0 || t->s_dvb_prefcapid != ct->cs_channel) {
|
||||
t->s_dvb_prefcapid = ct->cs_channel;
|
||||
tvhlog(LOG_DEBUG, "cwc", "Saving prefered PID %d", t->s_dvb_prefcapid);
|
||||
service_request_save((service_t*)t, 0);
|
||||
}
|
||||
|
||||
|
@ -1638,28 +1638,28 @@ cwc_table_input(struct th_descrambler *td, service_t *s,
|
|||
if (ct->ecm_state == ECM_RESET) {
|
||||
ct->ecm_state = ECM_INIT;
|
||||
ct->cs_channel = -1;
|
||||
t->s_prefcapid = 0;
|
||||
t->s_dvb_prefcapid = 0;
|
||||
tvhlog(LOG_DEBUG, "cwc", "Reset after unexpected or no reply for service \"%s\"", t->s_dvb_svcname);
|
||||
}
|
||||
|
||||
if (ct->ecm_state == ECM_INIT) {
|
||||
// Validate prefered ECM PID
|
||||
if(t->s_prefcapid != 0) {
|
||||
if(t->s_dvb_prefcapid != 0) {
|
||||
struct elementary_stream *prefca
|
||||
= service_stream_find((service_t*)t, t->s_prefcapid);
|
||||
= service_stream_find((service_t*)t, t->s_dvb_prefcapid);
|
||||
if (!prefca || prefca->es_type != SCT_CA) {
|
||||
tvhlog(LOG_DEBUG, "cwc", "Invalid prefered ECM (PID %d) found for service \"%s\"", t->s_prefcapid, t->s_dvb_svcname);
|
||||
t->s_prefcapid = 0;
|
||||
tvhlog(LOG_DEBUG, "cwc", "Invalid prefered ECM (PID %d) found for service \"%s\"", t->s_dvb_prefcapid, t->s_dvb_svcname);
|
||||
t->s_dvb_prefcapid = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(t->s_prefcapid == st->es_pid) {
|
||||
if(t->s_dvb_prefcapid == st->es_pid) {
|
||||
ep = calloc(1, sizeof(ecm_pid_t));
|
||||
ep->ep_pid = t->s_prefcapid;
|
||||
ep->ep_pid = t->s_dvb_prefcapid;
|
||||
LIST_INSERT_HEAD(&ct->cs_pids, ep, ep_link);
|
||||
tvhlog(LOG_DEBUG, "cwc", "Insert prefered ECM (PID %d) for service \"%s\"", t->s_prefcapid, t->s_dvb_svcname);
|
||||
tvhlog(LOG_DEBUG, "cwc", "Insert prefered ECM (PID %d) for service \"%s\"", t->s_dvb_prefcapid, t->s_dvb_svcname);
|
||||
}
|
||||
else if(t->s_prefcapid == 0) {
|
||||
else if(t->s_dvb_prefcapid == 0) {
|
||||
ep = calloc(1, sizeof(ecm_pid_t));
|
||||
ep->ep_pid = st->es_pid;
|
||||
LIST_INSERT_HEAD(&ct->cs_pids, ep, ep_link);
|
||||
|
|
|
@ -360,6 +360,7 @@ struct mpegts_service
|
|||
char *s_dvb_cridauth;
|
||||
uint16_t s_dvb_servicetype;
|
||||
char *s_dvb_charset;
|
||||
uint16_t s_dvb_prefcapid;
|
||||
|
||||
/*
|
||||
* EIT/EPG control
|
||||
|
|
|
@ -126,6 +126,13 @@ const idclass_t mpegts_service_class =
|
|||
.list = dvb_charset_enum,
|
||||
.opts = PO_ADVANCED,
|
||||
},
|
||||
{
|
||||
.type = PT_U16,
|
||||
.id = "prefcapid",
|
||||
.name = "Pref. CA PID",
|
||||
.off = offsetof(mpegts_service_t, s_dvb_prefcapid),
|
||||
.opts = PO_ADVANCED,
|
||||
},
|
||||
{},
|
||||
}
|
||||
};
|
||||
|
|
|
@ -911,26 +911,6 @@ service_build_stream_start(service_t *t)
|
|||
/**
|
||||
*
|
||||
*/
|
||||
void
|
||||
service_set_enable(service_t *t, int enabled)
|
||||
{
|
||||
if(t->s_enabled == enabled)
|
||||
return;
|
||||
|
||||
t->s_enabled = enabled;
|
||||
t->s_config_save(t);
|
||||
subscription_reschedule();
|
||||
}
|
||||
|
||||
void
|
||||
service_set_prefcapid(service_t *t, uint32_t prefcapid)
|
||||
{
|
||||
if(t->s_prefcapid == prefcapid)
|
||||
return;
|
||||
|
||||
t->s_prefcapid = prefcapid;
|
||||
t->s_config_save(t);
|
||||
}
|
||||
|
||||
static pthread_mutex_t pending_save_mutex;
|
||||
static pthread_cond_t pending_save_cond;
|
||||
|
|
|
@ -398,7 +398,6 @@ typedef struct service {
|
|||
struct th_descrambler_list s_descramblers;
|
||||
int s_scrambled_seen;
|
||||
int s_caid;
|
||||
uint16_t s_prefcapid;
|
||||
|
||||
/**
|
||||
* List of all components.
|
||||
|
@ -462,8 +461,6 @@ service_stream_find(service_t *t, int pid)
|
|||
elementary_stream_t *service_stream_create(service_t *t, int pid,
|
||||
streaming_component_type_t type);
|
||||
|
||||
void service_set_priority(service_t *t, int prio);
|
||||
|
||||
void service_settings_write(service_t *t);
|
||||
|
||||
const char *service_servicetype_txt(service_t *t);
|
||||
|
@ -493,8 +490,6 @@ service_set_streaming_status_flags(service_t *t, int flag)
|
|||
struct streaming_start;
|
||||
struct streaming_start *service_build_stream_start(service_t *t);
|
||||
|
||||
void service_set_enable(service_t *t, int enabled);
|
||||
|
||||
void service_restart(service_t *t, int had_components);
|
||||
|
||||
void service_stream_destroy(service_t *t, elementary_stream_t *st);
|
||||
|
@ -526,14 +521,6 @@ int tss2errcode(int tss);
|
|||
|
||||
uint16_t service_get_encryption(service_t *t);
|
||||
|
||||
void service_set_dvb_charset(service_t *t, const char *dvb_charset);
|
||||
|
||||
void service_set_dvb_eit_enable(service_t *t, int dvb_eit_enable);
|
||||
|
||||
void service_set_prefcapid(service_t *t, uint32_t prefcapid);
|
||||
|
||||
int service_is_primary_epg (service_t *t);
|
||||
|
||||
htsmsg_t *servicetype_list (void);
|
||||
|
||||
void service_load ( service_t *s, htsmsg_t *c );
|
||||
|
|
Loading…
Add table
Reference in a new issue