/* Ensure that filtered PIDs are not send in ts_recv_raw */
TAILQ_FOREACH(st, &s->s_filt_components, es_filt_link)
if (st->es_type != SCT_CA && st->es_pid >= 0 && st->es_pid < 8192)
- if (!mpegts_pid_exists(pids, st->es_pid))
- mpegts_pid_add(pids, st->es_pid);
+ mpegts_pid_add(pids, st->es_pid);
LIST_FOREACH(s2, &s->s_masters, s_masters_link) {
pthread_mutex_lock(&s2->s_stream_mutex);
mpegts_apid_t *p;
int i;
+ if (mpegts_pid_exists(pids, pid))
+ return 0;
assert(pids);
assert(pid >= 0 && pid <= 8191);
if (pids->alloc == pids->count) {
{
int i, l = 0;
+ if (len < 1) {
+ if (len)
+ *buf = '\0';
+ return len;
+ }
if (pids->all)
return snprintf(buf, len, "all");
- for (i = 0; i < pids->count; i++)
+ for (i = 0; i < pids->count && l + 1 < len; i++)
l += snprintf(buf + l, len - l, "%s%i",
i > 0 ? "," : "", pids->pids[i]);
return l;
char pids[1400];
const char *delsys, *msys, *pilot, *rolloff;
const char *bw, *tmode, *gi, *plp, *t2id, *sm, *c2tft, *ds, *specinv;
- int i, j, r, level = 0, lock = 0, quality = 0;
+ int r, level = 0, lock = 0, quality = 0;
lock = rtp->sig_lock;
switch (rtp->sig.signal_scale) {
break;
}
- pids[0] = 0;
- for (i = j = 0; i < rtp->pids.count; i++)
- j += snprintf(pids + j, sizeof(pids) - j, "%d,", rtp->pids.pids[i]);
- if (j && pids[j-1] == ',')
- pids[j-1] = '\0';
+ mpegts_pid_dump(&rtp->pids, pids, sizeof(pids));
switch (rtp->dmc.dmc_fe_delsys) {
case DVB_SYS_DVBS:
*
*/
static int
-rtsp_validate_service(mpegts_service_t *s)
+rtsp_validate_service(mpegts_service_t *s, mpegts_apids_t *pids)
{
int av = 0, enc = 0;
elementary_stream_t *st;
TAILQ_FOREACH(st, &s->s_components, es_link) {
if (st->es_type == SCT_CA)
enc = 1;
- if (st->es_pid > 0 &&
- (SCT_ISVIDEO(st->es_type) || SCT_ISAUDIO(st->es_type)))
- av = 1;
- }
+ if (st->es_pid > 0)
+ if (pids == NULL || mpegts_pid_exists(pids, st->es_pid))
+ if ((SCT_ISVIDEO(st->es_type) || SCT_ISAUDIO(st->es_type)))
+ av = 1;
+ }
pthread_mutex_unlock(&s->s_stream_mutex);
return enc && av;
}
if (rs->pids.all) {
LIST_FOREACH(s, &rs->mux->mm_services, s_dvb_mux_link)
- if (rtsp_validate_service(s))
+ if (rtsp_validate_service(s, NULL))
idnode_set_add(found, &s->s_id, NULL);
} else {
for (i = 0; i < rs->pids.count; i++) {
s = mpegts_service_find_by_pid((mpegts_mux_t *)rs->mux, rs->pids.pids[i]);
- if (s != NULL && rtsp_validate_service(s))
+ if (s != NULL && rtsp_validate_service(s, &rs->pids))
if (!idnode_set_exists(found, &s->s_id))
idnode_set_add(found, &s->s_id, NULL);
}
mpegts_pid_add_group(&rs->pids, &addpids);
dvb_mux_conf_str(dmc, buf, sizeof(buf));
- s = buf + strlen(buf);
- s += snprintf(s, sizeof(buf) - (s - buf), " pids ");
- if (mpegts_pid_dump(&rs->pids, s, sizeof(buf) - (s - buf)) == 0)
- snprintf(s, sizeof(buf) - (s - buf), "<none>");
+ r = strlen(buf);
+ if (r + 1 < sizeof(buf))
+ r += snprintf(buf + r, sizeof(buf) - r, " pids ");
+ if (r + 1 < sizeof(buf) &&
+ mpegts_pid_dump(&rs->pids, buf + r, sizeof(buf) - r) == 0)
+ snprintf(buf + r, sizeof(buf) - r, "<none>");
tvhdebug("satips", "%i/%s/%d: %s from %s:%d %s",
rs->frontend, rs->session, rs->stream,
udp_close(rs->udp_rtcp);
rs->udp_rtcp = NULL;
pthread_mutex_lock(&global_lock);
+ mpegts_pid_reset(&rs->pids);
rtsp_clean(rs);
gtimer_disarm(&rs->timer);
pthread_mutex_unlock(&global_lock);