From 4fce2564682822c741b44d54a22d1002a47e2a73 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 27 Apr 2015 08:46:02 +0200 Subject: [PATCH] mpegts table: added MT_ONESHOT, change pmt scan weight --- src/input/mpegts.h | 14 ++++++++------ src/input/mpegts/dvb_psi.c | 5 +++-- src/input/mpegts/mpegts_table.c | 8 ++++++-- 3 files changed, 17 insertions(+), 10 deletions(-) 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 -- 2.47.2