if (capmt_oscam_so_wrapper(capmt))
return 0;
#ifdef CAPMT_OSCAM_OLD
- if (capmt->capmt_oscam = CAPMT_OSCAM_OLD)
+ if (capmt->capmt_oscam == CAPMT_OSCAM_OLD)
return 0;
#endif
return 1;
int i;
// searching for socket to close
for (i = 0; i < MAX_SOCKETS; i++)
- if (capmt->sids[i] == s->s_dvb_service_id)
+ if (capmt->sids[i] == service_id16(s))
break;
if (i == MAX_SOCKETS) {
buf[pos++] = 0; /* total length */
buf[pos++] = 0; /* total length */
buf[pos++] = CAPMT_LIST_ONLY;
- buf[pos++] = s->s_dvb_service_id >> 8;
- buf[pos++] = s->s_dvb_service_id;
+ buf[pos++] = service_id16(s) >> 8;
+ buf[pos++] = service_id16(s);
buf[pos++] = capmt->capmt_pmtversion;
capmt->capmt_pmtversion = (capmt->capmt_pmtversion + 1) & 0x1F;
buf[pos++] = 0; /* room for length - program info tags */
buf[4] = ((pos - 6) >> 8);
buf[5] = ((pos - 6) & 0xFF);
- capmt_queue_msg(capmt, t->ct_adapter, s->s_dvb_service_id,
+ capmt_queue_msg(capmt, t->ct_adapter, service_id16(s),
buf, pos, CAPMT_MSG_CLEAR);
}
#endif
LIST_FOREACH(ct, &capmt->capmt_services, ct_link) {
t = (mpegts_service_t *)ct->td_service;
- if (sid != t->s_components.set_service_id)
+ if (sid != service_id16(t))
continue;
if (adapter != ct->ct_adapter)
continue;
{
capmt_t *capmt = ct->ct_capmt;
mpegts_service_t *t = (mpegts_service_t *)ct->td_service;
- uint16_t sid = t->s_components.set_service_id;
+ uint16_t sid = service_id16(t);
uint16_t pmtpid = t->s_components.set_pmt_pid;
uint16_t transponder = t->s_dvb_mux->mm_tsid;
uint16_t onid = t->s_dvb_mux->mm_onid;
{ N_("OSCam net protocol (rev >= 10389)"), CAPMT_OSCAM_NET_PROTO },
#endif
#ifdef CAPMT_OSCAM_UNIX_SOCKET_NP
- { N_("OSCam new pc-nodmx (rev >= 10389)"), CAPMT_OSCAM_UNIX_SOCKET_NP },
+ { N_("Problematic: OSCam new pc-nodmx (rev >= 10389)"), CAPMT_OSCAM_UNIX_SOCKET_NP },
#endif
#ifdef CAPMT_OSCAM_TCP
{ N_("OSCam TCP (rev >= 9574)"), CAPMT_OSCAM_TCP },
provid = es->es_provid;
card_id = pcard->cs_id;
es->es_card_id = card_id;
- sid = t->s_components.set_service_id;
+ sid = service_id16(t);
es->es_seq = seq & 0xff;
buf = alloca(len + 13);
if (mt->s_dvb_forcecaid && mt->s_dvb_forcecaid != ccw->ccw_caid)
return;
- if (mt->s_components.set_service_id != ccw->ccw_sid)
+ if (service_id16(mt) != ccw->ccw_sid)
return;
if (mt->s_dvb_mux->mm_tsid != ccw->ccw_tsid)
cc_card_data_t *pcard, const uint8_t *data, int len)
{
mpegts_service_t *t = (mpegts_service_t *)ct->td_service;
- uint16_t sid = t->s_components.set_service_id;
+ uint16_t sid = service_id16(t);
uint16_t seq;
int r;
if (ct) {
t = (mpegts_service_t *)ct->td_service;
- sid = t->s_components.set_service_id;
+ sid = service_id16(t);
}
cwc_send_msg(cc, data, len, sid, 1, pcard->cs_ra.caid, provid, NULL);
}
r = en50221_capmt_build(s, bcmd,
- s->s_components.set_service_id,
+ service_id16(s),
ac->caids, ac->caids_count,
as->last_pmt, as->last_pmt_len,
&capmt, &capmt_len);
if (ac) {
s = (mpegts_service_t *)td->td_service;
r = en50221_capmt_build(s, EN50221_CAPMT_BUILD_DELETE,
- s->s_components.set_service_id,
+ service_id16(s),
ac->caids, ac->caids_count,
as->last_pmt, as->last_pmt_len,
&capmt, &capmt_len);
if (mm) {
LIST_FOREACH(enc, &dvb_charset_list, link) {
if (mm->mm_onid == enc->onid && mm->mm_tsid == enc->tsid) {
- if (s && (s->s_components.set_service_id == enc->sid)) {
+ if (s && service_id16(s) == enc->sid) {
ret = enc;
break;
} else if (!enc->sid) {
/* Find all "fallback" services and region specific */
TAILQ_FOREACH(bs, &bi->services, link) {
total++;
- sid = bs->svc->s_components.set_service_id;
+ sid = service_id16(bs->svc);
TAILQ_FOREACH(fs, &bi->fservices, link)
if (fs->sid == sid) {
fs->svc = bs->svc;
}
TAILQ_FOREACH(bs, &bi->services, link)
- if (bs->svc->s_components.set_service_id == sid)
+ if (service_id16(bs->svc) == sid)
break;
if (mm && !bs) {
s = mpegts_service_find(mm, sid, 0, 0, NULL);
/* Find service */
LIST_FOREACH(s, &mm->mm_services, s_dvb_mux_link)
- if (s->s_components.set_service_id == sid) break;
+ if (service_id16(s) == sid) break;
if (!s) return -1;
/* Process */
s->s_dvb_check_seen + 24 * 3600 < last_seen) {
tvhinfo(LS_MPEGTS, "disabling service %s [sid %04X/%d] (missing in PAT/SDT)",
s->s_nicename ?: "<unknown>",
- s->s_components.set_service_id,
- s->s_components.set_service_id);
+ service_id16(s), service_id16(s));
service_set_enabled((service_t *)s, 0, SERVICE_AUTO_PAT_MISSING);
}
}
{
mpegts_service_t *ms;
LIST_FOREACH(ms, &mm->mm_services, s_dvb_mux_link)
- if (ms->s_components.set_service_id == sid && ms->s_enabled)
+ if (service_id16(ms) == sid && ms->s_enabled)
break;
return ms;
}
r = ms->s_dvb_opentv_chnum * CHANNEL_SPLIT;
}
if (r <= 0 && ms->s_dvb_mux->mm_network->mn_sid_chnum)
- r = ms->s_components.set_service_id * CHANNEL_SPLIT;
+ r = service_id16(ms) * CHANNEL_SPLIT;
return r;
}
snprintf(prop_sbuf, PROP_SBUF_LEN,
"picon://1_0_%X_%X_%X_%X_%X_0_0_0.png",
config.picon_scheme == PICON_ISVCTYPE ? 1 : ms->s_dvb_servicetype,
- ms->s_components.set_service_id,
+ service_id16(ms),
ms->s_dvb_mux->mm_tsid,
ms->s_dvb_mux->mm_onid,
hash);
if (mm->mm_tsid != tsid || mm->mm_onid != onid) continue;
if (!mpegts_service_match_mux((dvb_mux_t *)mm, hash, idc)) continue;
LIST_FOREACH(s, &mm->mm_services, s_dvb_mux_link)
- if (s->s_components.set_service_id == sid)
+ if (service_id16(s) == sid)
return (service_t *)s;
}
}
pthread_mutex_unlock(&s->s_stream_mutex);
tvhdebug(LS_MPEGTS, "%s - add service %04X %s",
- mm->mm_nicename,
- s->s_components.set_service_id,
- s->s_dvb_svcname);
+ mm->mm_nicename, service_id16(s), s->s_dvb_svcname);
/* Bouquet */
mpegts_network_bouquet_trigger(mn, 1);
/* Find existing service */
LIST_FOREACH(s, &mm->mm_services, s_dvb_mux_link) {
- if (s->s_components.set_service_id == sid) {
+ if (service_id16(s) == sid) {
if (pmt_pid && pmt_pid != s->s_components.set_pmt_pid) {
s->s_components.set_pmt_pid = pmt_pid;
if (save) *save = 1;
if (!s->s_enabled && s->s_auto == SERVICE_AUTO_PAT_MISSING) {
tvhinfo(LS_MPEGTS, "enabling service %s [sid %04X/%d] (found in %s)",
s->s_nicename,
- s->s_components.set_service_id,
- s->s_components.set_service_id,
+ service_id16(s),
+ service_id16(s),
where);
service_set_enabled((service_t *)s, 1, SERVICE_AUTO_NORMAL);
}
if (crc != tvh_crc32(pkt, pos, 0x859aa5ba))
return;
LIST_FOREACH(t, &mm->mm_services, s_dvb_mux_link)
- if (t->s_components.set_service_id == sid) break;
+ if (service_id16(t) == sid) break;
if (!t)
return;
pos = 4 + 24 + 4;
} service_t;
-
-
-
void service_init(void);
void service_done(void);
+
int service_start(service_t *t, int instance, int weight, int flags,
int timeout, int postpone);
void service_stop(service_t *t);
const char *service_servicetype_txt(service_t *t);
+static inline uint16_t service_id16(void *t)
+ { return ((service_t *)t)->s_components.set_service_id; }
+
int service_is_sdtv(service_t *t);
int service_is_uhdtv(service_t *t);
int service_is_hdtv(service_t *t);
int service_is_radio(service_t *t);
int service_is_other(service_t *t);
-#define service_is_tv(s) (service_is_hdtv(s) || service_is_sdtv(s) || service_is_uhdtv(s))
+
+static inline int service_is_tv( service_t *s)
+ { return service_is_hdtv(s) || service_is_sdtv(s) || service_is_uhdtv(s); }
int service_is_encrypted ( service_t *t );