( 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_pmt_monitor ( mpegts_mux_t *mm, mpegts_service_t *s );
void mpegts_input_open_cat_monitor ( mpegts_mux_t *mm, mpegts_service_t *s );
void tsdebug_encode_keys
NULL, "pmt", LS_TBL_BASE,
MT_CRC | MT_QUICKREQ | MT_ONESHOT | MT_SCANSUBS,
pid, MPS_WEIGHT_PMT_SCAN);
-
+ if (save & 2) /* PMT PID change? */
+ mpegts_input_open_pmt_monitor(mm, s);
if (save)
service_request_save((service_t*)s);
}
return dvb_table_end((mpegts_psi_table_t *)mt, st, sect);
}
+void
+mpegts_input_open_pmt_monitor
+ ( mpegts_mux_t *mm, mpegts_service_t *s )
+{
+ if (s->s_pmt_mon)
+ mpegts_table_destroy(s->s_pmt_mon);
+ s->s_pmt_mon =
+ mpegts_table_add(mm, DVB_PMT_BASE, DVB_PMT_MASK,
+ dvb_pmt_callback, s, "pmt", LS_TBL_BASE,
+ MT_CRC, s->s_components.set_pmt_pid, MPS_WEIGHT_PMT);
+}
+
void
mpegts_input_open_cat_monitor
( mpegts_mux_t *mm, mpegts_service_t *s )
{
+ assert(s->s_cat_mon == NULL);
s->s_cat_mon =
mpegts_table_add(mm, DVB_CAT_BASE, DVB_CAT_MASK,
mpegts_input_cat_pass_callback, s, "cat",
pthread_mutex_unlock(&mi->mi_output_lock);
/* Add PMT monitor */
- if(s->s_type == STYPE_STD) {
- s->s_pmt_mon =
- mpegts_table_add(mm, DVB_PMT_BASE, DVB_PMT_MASK,
- dvb_pmt_callback, s, "pmt", LS_TBL_BASE,
- MT_CRC, s->s_components.set_pmt_pid, MPS_WEIGHT_PMT);
+ if (s->s_type == STYPE_STD) {
+ mpegts_input_open_pmt_monitor(mm, s);
if (s->s_scrambled_pass && (flags & SUBSCRIPTION_EMM) != 0)
mpegts_input_open_cat_monitor(mm, s);
}