tvhlog(LOG_DEBUG, "cwc", "Insert after unexpected reply");
}
- if (ct->cs_okchannel == -3 && t->s_prefcapid == st->es_pid) {
- ep = calloc(1, sizeof(ecm_pid_t));
- ep->ep_pid = t->s_prefcapid;
- LIST_INSERT_HEAD(&ct->cs_pids, ep, ep_link);
- tvhlog(LOG_DEBUG, "cwc", "Insert only one new ECM channel %d for service id %d", t->s_prefcapid, sid);
+ if (ct->cs_okchannel == -3 && t->s_prefcapid != 0) {
+ if (t->s_prefcapid == st->es_pid) {
+ ep = calloc(1, sizeof(ecm_pid_t));
+ ep->ep_pid = t->s_prefcapid;
+ LIST_INSERT_HEAD(&ct->cs_pids, ep, ep_link);
+ tvhlog(LOG_DEBUG, "cwc", "Insert only one new ECM channel %d for service id %d", t->s_prefcapid, sid);
+ } else {
+ // check if prefcapid wrong
+ struct elementary_stream *prefca = service_stream_find(t, t->s_prefcapid);
+
+ if (!prefca || prefca->es_type != SCT_CA) {
+ t->s_prefcapid = 0;
+ }
+ }
}
if (ct->cs_okchannel == -1 || (ct->cs_okchannel == -3 && t->s_prefcapid == 0)) {