]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts: add mpegts_input_open_cat_monitor() for ddci
authorJaroslav Kysela <perex@perex.cz>
Fri, 17 Nov 2017 17:54:55 +0000 (18:54 +0100)
committerJaroslav Kysela <perex@perex.cz>
Fri, 17 Nov 2017 17:55:16 +0000 (18:55 +0100)
src/descrambler/dvbcam.c
src/input/mpegts.h
src/input/mpegts/mpegts_input.c

index 2ff108cfbf3dd52d863deca42fc5145acb5e8712..df0e94c8593734ac110042d47d3b1aa9730944d4 100644 (file)
@@ -425,6 +425,7 @@ end:
     if (mi) {
       pthread_mutex_lock(&mi->mi_output_lock);
       pthread_mutex_lock(&t->s_stream_mutex);
+      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);
       pthread_mutex_unlock(&t->s_stream_mutex);
index a2cff3d8bbb5c7786564d04fb29b91cb5073be9c..8b03821a74637b0fcb43512d4008ed2a4ee0e7cc 100644 (file)
@@ -1011,6 +1011,8 @@ int mpegts_input_open_service_pid
   ( mpegts_input_t *mi, mpegts_mux_t *mm, service_t *s,
     streaming_component_type_t stype, int pid, int weight, int create );
 
+void mpegts_input_open_cat_monitor ( mpegts_mux_t *mm, mpegts_service_t *s );
+
 #if ENABLE_TSDEBUG
 
 void tsdebug_started_mux(mpegts_input_t *mi, mpegts_mux_t *mm);
index 0975b0abc5eb9c87b5742f99ed62a7e5a2408a24..2b8f319447bc0f3937b1b63bef9d11866a2c2484 100644 (file)
@@ -731,6 +731,17 @@ mpegts_input_cat_pass_callback
   return dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
 }
 
+void
+mpegts_input_open_cat_monitor
+  ( mpegts_mux_t *mm, mpegts_service_t *s )
+{
+  s->s_cat_mon =
+    mpegts_table_add(mm, DVB_CAT_BASE, DVB_CAT_MASK,
+                     mpegts_input_cat_pass_callback, s, "cat",
+                     LS_TBL_BASE, MT_QUICKREQ | MT_CRC, DVB_CAT_PID,
+                     MPS_WEIGHT_CAT);
+}
+
 void
 mpegts_input_open_service
   ( mpegts_input_t *mi, mpegts_service_t *s, int flags, int init, int weight )
@@ -795,13 +806,8 @@ no_pids:
       mpegts_table_add(mm, DVB_PMT_BASE, DVB_PMT_MASK,
                        dvb_pmt_callback, s, "pmt", LS_TBL_BASE,
                        MT_CRC, s->s_pmt_pid, MPS_WEIGHT_PMT);
-    if (s->s_scrambled_pass && (flags & SUBSCRIPTION_EMM) != 0) {
-      s->s_cat_mon =
-        mpegts_table_add(mm, DVB_CAT_BASE, DVB_CAT_MASK,
-                         mpegts_input_cat_pass_callback, s, "cat",
-                         LS_TBL_BASE, MT_QUICKREQ | MT_CRC, DVB_CAT_PID,
-                         MPS_WEIGHT_CAT);
-    }
+    if (s->s_scrambled_pass && (flags & SUBSCRIPTION_EMM) != 0)
+      mpegts_input_open_cat_monitor(mm, s);
   }
 
   mpegts_mux_update_pids(mm);
@@ -821,6 +827,7 @@ mpegts_input_close_service ( mpegts_input_t *mi, mpegts_service_t *s )
       mpegts_table_destroy(s->s_cat_mon);
   }
   s->s_pmt_mon = NULL;
+  s->s_cat_mon = NULL;
 
   /* Remove from list */
   pthread_mutex_lock(&mi->mi_output_lock);