From: Jaroslav Kysela Date: Fri, 17 Nov 2017 18:11:23 +0000 (+0100) Subject: dvbcam: open also CAT PID for streaming X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a8fcc4cb1d803fccfa62479b04ac55b250a1dd1f;p=thirdparty%2Ftvheadend.git dvbcam: open also CAT PID for streaming --- diff --git a/src/descrambler/dvbcam.c b/src/descrambler/dvbcam.c index df0e94c85..88606c4e6 100644 --- a/src/descrambler/dvbcam.c +++ b/src/descrambler/dvbcam.c @@ -425,6 +425,8 @@ end: if (mi) { pthread_mutex_lock(&mi->mi_output_lock); pthread_mutex_lock(&t->s_stream_mutex); + mpegts_input_open_pid(mi, mm, DVB_CAT_PID, MPS_SERVICE, MPS_WEIGHT_CAT, t, 0); + ((mpegts_service_t *)t)->s_cat_opened = 1; mpegts_input_open_cat_monitor(mm, (mpegts_service_t *)t); mpegts_input_open_service_pid(mi, mm, t, SCT_CA, c->pid, MPS_WEIGHT_CA, 1); diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 8b03821a7..0c8c014be 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -626,6 +626,7 @@ struct mpegts_service * PMT/CAT monitoring */ + uint8_t s_cat_opened; mpegts_table_t *s_pmt_mon; ///< Table entry for monitoring PMT mpegts_table_t *s_cat_mon; ///< Table entry for monitoring CAT diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index 2b8f31944..b0a0f2502 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -767,8 +767,10 @@ mpegts_input_open_service mpegts_input_open_pid(mi, mm, s->s_pmt_pid, MPS_SERVICE, MPS_WEIGHT_PMT, s, reopen); mpegts_input_open_pid(mi, mm, s->s_pcr_pid, MPS_SERVICE, MPS_WEIGHT_PCR, s, reopen); - if (s->s_scrambled_pass) + if (s->s_scrambled_pass) { mpegts_input_open_pid(mi, mm, DVB_CAT_PID, MPS_SERVICE, MPS_WEIGHT_CAT, s, reopen); + s->s_cat_opened = 1; + } /* Open only filtered components here */ TAILQ_FOREACH(st, &s->s_filt_components, es_filt_link) if ((s->s_scrambled_pass || st->es_type != SCT_CA) && @@ -844,8 +846,10 @@ mpegts_input_close_service ( mpegts_input_t *mi, mpegts_service_t *s ) mpegts_input_close_pid(mi, mm, s->s_pmt_pid, MPS_SERVICE, MPS_WEIGHT_PMT, s); mpegts_input_close_pid(mi, mm, s->s_pcr_pid, MPS_SERVICE, MPS_WEIGHT_PCR, s); - if (s->s_scrambled_pass) + if (s->s_cat_opened) { mpegts_input_close_pid(mi, mm, DVB_CAT_PID, MPS_SERVICE, MPS_WEIGHT_CAT, s); + s->s_cat_opened = 0; + } /* Close all opened PIDs (the component filter may be changed at runtime) */ TAILQ_FOREACH(st, &s->s_components, es_link) { if (st->es_pid_opened) {