From aa91e53ff948efce9fcc367303dcbcc6a375cfcf Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 14 May 2014 14:45:10 +0200 Subject: [PATCH] mux create: do not update mux parameters from multiple origin muxes (nit) NIT data: mux: '12109H' : dvb-s2 pos 235E freq 12129000 V sym 275000 fec 2/3 mod 8PSK roff 20 mux: '11739V' : dvb-s2 pos 235E freq 12129000 V sym 275000 fec 2/3 mod 8PSK roff 25 This change avoids the frequent automatic parameter changes using the origin (first hit) mux which broadcasted the data. The origin mux is locked for 24 hours from the last update. --- src/input/mpegts.h | 2 ++ src/input/mpegts/mpegts_network_dvb.c | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 46601816..51830c58 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -313,6 +313,8 @@ struct mpegts_mux MM_SCAN_CURRENT, // Currently tuned for initial scan } mm_initial_scan_status; int mm_initial_scan_done; + mpegts_mux_t *mm_dmc_origin; + time_t mm_dmc_origin_expire; /* * Physical instances diff --git a/src/input/mpegts/mpegts_network_dvb.c b/src/input/mpegts/mpegts_network_dvb.c index f22563fe..583cddf9 100644 --- a/src/input/mpegts/mpegts_network_dvb.c +++ b/src/input/mpegts/mpegts_network_dvb.c @@ -278,6 +278,7 @@ dvb_network_create_mux ( mpegts_mux_t *mm, uint16_t onid, uint16_t tsid, dvb_mux_conf_t *dmc ) { int save = 0; + mpegts_mux_t *mmo = mm; dvb_network_t *ln = (dvb_network_t*)mm->mm_network; mm = dvb_network_find_mux(ln, dmc); @@ -304,6 +305,10 @@ dvb_network_create_mux mm = (mpegts_mux_t*)dvb_mux_create0(ln, onid, tsid, dmc, NULL, NULL); } else if (mm) { dvb_mux_t *lm = (dvb_mux_t*)mm; + /* the nit tables may be incosistent (like rolloff ping-pong) */ + /* accept information only from one origin mux */ + if (mm->mm_dmc_origin_expire > dispatch_clock && mm->mm_dmc_origin != mmo) + goto noop; #if ENABLE_TRACE #define COMPARE(x) ({ \ int xr = dmc->x != lm->lm_tuning.x; \ @@ -362,8 +367,13 @@ dvb_network_create_mux #undef COMPARE #undef COMPAREN } - if (save && mm) - mm->mm_config_save(mm); + if (mm) { + mm->mm_dmc_origin = mmo; + mm->mm_dmc_origin_expire = dispatch_clock + 3600 * 24; /* one day */ + if (save) + mm->mm_config_save(mm); + } +noop: return mm; }