]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvbcam: open also CAT PID for streaming
authorJaroslav Kysela <perex@perex.cz>
Fri, 17 Nov 2017 18:11:23 +0000 (19:11 +0100)
committerJaroslav Kysela <perex@perex.cz>
Fri, 17 Nov 2017 18:11:23 +0000 (19:11 +0100)
src/descrambler/dvbcam.c
src/input/mpegts.h
src/input/mpegts/mpegts_input.c

index df0e94c8593734ac110042d47d3b1aa9730944d4..88606c4e6c7b467eae8868ef5aad8362241f52f5 100644 (file)
@@ -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);
index 8b03821a74637b0fcb43512d4008ed2a4ee0e7cc..0c8c014be4cbcd50ae8ad3fb752443c490fb840c 100644 (file)
@@ -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
 
index 2b8f319447bc0f3937b1b63bef9d11866a2c2484..b0a0f25027c9c309b67520595935ef2f8572af86 100644 (file)
@@ -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) {