From: Jaroslav Kysela Date: Mon, 27 Apr 2015 06:46:02 +0000 (+0200) Subject: mpegts table: added MT_ONESHOT, change pmt scan weight X-Git-Tag: v4.1~102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4fce2564682822c741b44d54a22d1002a47e2a73;p=thirdparty%2Ftvheadend.git mpegts table: added MT_ONESHOT, change pmt scan weight --- diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 119e1e20f..474551e84 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -154,6 +154,7 @@ typedef struct mpegts_pid_sub #define MPS_WEIGHT_RAW 400 #define MPS_WEIGHT_NIT2 300 #define MPS_WEIGHT_SDT2 300 +#define MPS_WEIGHT_PMT_SCAN 100 int mps_weight; void *mps_owner; } mpegts_pid_sub_t; @@ -183,12 +184,13 @@ struct mpegts_table #define MT_FULL 0x0002 #define MT_QUICKREQ 0x0004 #define MT_FASTSWITCH 0x0008 -#define MT_RECORD 0x0010 -#define MT_SKIPSUBS 0x0020 -#define MT_SCANSUBS 0x0040 -#define MT_FAST 0x0080 -#define MT_SLOW 0x0100 -#define MT_DEFER 0x0200 +#define MT_ONESHOT 0x0010 +#define MT_RECORD 0x0020 +#define MT_SKIPSUBS 0x0040 +#define MT_SCANSUBS 0x0080 +#define MT_FAST 0x0100 +#define MT_SLOW 0x0200 +#define MT_DEFER 0x0400 /** * PID subscription weight diff --git a/src/input/mpegts/dvb_psi.c b/src/input/mpegts/dvb_psi.c index 1411ca1d8..6cf901286 100644 --- a/src/input/mpegts/dvb_psi.c +++ b/src/input/mpegts/dvb_psi.c @@ -889,8 +889,9 @@ dvb_pat_callback } s->s_dvb_check_seen = dispatch_clock; mpegts_table_add(mm, DVB_PMT_BASE, DVB_PMT_MASK, dvb_pmt_callback, - NULL, "pmt", MT_CRC | MT_QUICKREQ | MT_SCANSUBS, - pid, MPS_WEIGHT_PMT); + NULL, "pmt", + MT_CRC | MT_QUICKREQ | MT_ONESHOT | MT_SCANSUBS, + pid, MPS_WEIGHT_PMT_SCAN); if (save) service_request_save((service_t*)s, 1); diff --git a/src/input/mpegts/mpegts_table.c b/src/input/mpegts/mpegts_table.c index d3163f64d..beac5649a 100644 --- a/src/input/mpegts/mpegts_table.c +++ b/src/input/mpegts/mpegts_table.c @@ -42,11 +42,13 @@ mpegts_table_consistency_check ( mpegts_mux_t *mm ) } static void -mpegts_table_fastswitch ( mpegts_mux_t *mm ) +mpegts_table_fastswitch ( mpegts_mux_t *mm, mpegts_table_t *mtm ) { char buf[256]; mpegts_table_t *mt; + assert(mm == mtm->mt_mux); + if(mm->mm_scan_state != MM_SCAN_STATE_ACTIVE) return; @@ -59,6 +61,8 @@ mpegts_table_fastswitch ( mpegts_mux_t *mm ) return; } } + if (mtm->mt_flags & MT_ONESHOT) + mm->mm_close_table(mm, mtm); pthread_mutex_unlock(&mm->mm_tables_lock); mpegts_mux_nice_name(mm, buf, sizeof(buf)); @@ -96,7 +100,7 @@ mpegts_table_dispatch mt->mt_count++; if(!ret && mt->mt_flags & (MT_QUICKREQ|MT_FASTSWITCH)) - mpegts_table_fastswitch(mt->mt_mux); + mpegts_table_fastswitch(mt->mt_mux, mt); } void