From: Jaroslav Kysela Date: Mon, 3 Jul 2017 12:56:06 +0000 (+0200) Subject: satip client: add filter for delivery system, fixes #4466 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b7f06ab487909a4d78d4e091884c4cc1c8ac0d18;p=thirdparty%2Ftvheadend.git satip client: add filter for delivery system, fixes #4466 --- diff --git a/src/input/mpegts/satip/satip_frontend.c b/src/input/mpegts/satip/satip_frontend.c index fb51008ef..f9193c3fe 100644 --- a/src/input/mpegts/satip/satip_frontend.c +++ b/src/input/mpegts/satip/satip_frontend.c @@ -232,6 +232,17 @@ const idclass_t satip_frontend_class = } }; +static htsmsg_t * +satip_frontend_dvbt_delsys_list ( void *o, const char *lang ) +{ + static const struct strtab tab[] = { + { N_("All"), DVB_SYS_NONE }, + { N_("DVB-T"), DVB_SYS_DVBT }, + { N_("DVB-T2"), DVB_SYS_DVBT2 }, + }; + return strtab2htsmsg(tab, 1, lang); +} + const idclass_t satip_frontend_dvbt_class = { .ic_super = &satip_frontend_class, @@ -247,6 +258,15 @@ const idclass_t satip_frontend_dvbt_class = .list = satip_frontend_class_override_enum, .off = offsetof(satip_frontend_t, sf_type_override), }, + { + .type = PT_INT, + .id = "delsys", + .name = N_("Delivery system"), + .desc = N_("Limit delivery system."), + .opts = PO_EXPERT, + .list = satip_frontend_dvbt_delsys_list, + .off = offsetof(satip_frontend_t, sf_delsys), + }, {} } }; @@ -320,6 +340,17 @@ satip_frontend_dvbs_class_master_enum( void * self, const char *lang ) return m; } +static htsmsg_t * +satip_frontend_dvbs_delsys_list ( void *o, const char *lang ) +{ + static const struct strtab tab[] = { + { N_("All"), DVB_SYS_NONE }, + { N_("DVB-S"), DVB_SYS_DVBS }, + { N_("DVB-S2"), DVB_SYS_DVBS2 }, + }; + return strtab2htsmsg(tab, 1, lang); +} + const idclass_t satip_frontend_dvbs_class = { .ic_super = &satip_frontend_class, @@ -357,6 +388,15 @@ const idclass_t satip_frontend_dvbs_class = .list = satip_frontend_dvbs_class_master_enum, .off = offsetof(satip_frontend_t, sf_master), }, + { + .type = PT_INT, + .id = "delsys", + .name = N_("Delivery system"), + .desc = N_("Limit delivery system."), + .opts = PO_EXPERT, + .list = satip_frontend_dvbs_delsys_list, + .off = offsetof(satip_frontend_t, sf_delsys), + }, { .id = "networks", .type = PT_NONE, @@ -397,6 +437,17 @@ const idclass_t satip_frontend_dvbs_slave_class = } }; +static htsmsg_t * +satip_frontend_dvbc_delsys_list ( void *o, const char *lang ) +{ + static const struct strtab tab[] = { + { N_("All"), DVB_SYS_NONE }, + { N_("DVB-C"), DVB_SYS_DVBC_ANNEX_A }, + { N_("DVB-C2"), DVB_SYS_DVBC_ANNEX_C }, + }; + return strtab2htsmsg(tab, 1, lang); +} + const idclass_t satip_frontend_dvbc_class = { .ic_super = &satip_frontend_class, @@ -412,6 +463,15 @@ const idclass_t satip_frontend_dvbc_class = .list = satip_frontend_class_override_enum, .off = offsetof(satip_frontend_t, sf_type_override), }, + { + .type = PT_INT, + .id = "delsys", + .name = N_("Delivery system"), + .desc = N_("Limit delivery system."), + .opts = PO_EXPERT, + .list = satip_frontend_dvbc_delsys_list, + .off = offsetof(satip_frontend_t, sf_delsys), + }, {} } }; @@ -545,6 +605,14 @@ satip_frontend_is_enabled return MI_IS_ENABLED_OK; if (lfe->sf_type != DVB_TYPE_S) return MI_IS_ENABLED_OK; + /* delivery system specific check */ + lfe2 = lfe->sf_master ? satip_frontend_find_by_number(lfe->sf_device, lfe->sf_master) : lfe; + if (lfe2 == NULL) lfe2 = lfe; + if (lfe2->sf_delsys != DVB_SYS_NONE) { + dvb_mux_conf_t *dmc = &((dvb_mux_t *)mm)->lm_tuning; + if (dmc->dmc_fe_delsys != lfe2->sf_delsys) + return MI_IS_ENABLED_NEVER; + } /* check if the position is enabled */ sfc = satip_satconf_get_position(lfe, mm, NULL, 1, flags, weight); if (!sfc) return MI_IS_ENABLED_NEVER; diff --git a/src/input/mpegts/satip/satip_private.h b/src/input/mpegts/satip/satip_private.h index d32f032f1..7c49ea1a6 100644 --- a/src/input/mpegts/satip/satip_private.h +++ b/src/input/mpegts/satip/satip_private.h @@ -139,6 +139,7 @@ struct satip_frontend int sf_grace_period; int sf_teardown_delay; int sf_pass_weight; + int sf_delsys; char *sf_tuner_bindaddr; /*