diff --git a/docs/html/config_tvadapters.html b/docs/html/config_tvadapters.html
index e5426b19..6572a8cf 100644
--- a/docs/html/config_tvadapters.html
+++ b/docs/html/config_tvadapters.html
@@ -19,6 +19,9 @@
Name
The name of this tuner.
+ OTA EPG
+ Allow OTA EPG (epggrab) scan on this input device
+
Priority
The tuner priority value (higher value = higher priority to use this
tuner).
diff --git a/src/input/mpegts.h b/src/input/mpegts.h
index d38a3abd..f4674faa 100644
--- a/src/input/mpegts.h
+++ b/src/input/mpegts.h
@@ -511,6 +511,8 @@ struct mpegts_input
int mi_priority;
+ int mi_ota_epg;
+
LIST_ENTRY(mpegts_input) mi_global_link;
mpegts_network_link_list_t mi_networks;
@@ -554,7 +556,7 @@ struct mpegts_input
/*
* Functions
*/
- int (*mi_is_enabled) (mpegts_input_t*, mpegts_mux_t *mm);
+ int (*mi_is_enabled) (mpegts_input_t*, mpegts_mux_t *mm, const char *reason);
void (*mi_enabled_updated)(mpegts_input_t*);
void (*mi_display_name) (mpegts_input_t*, char *buf, size_t len);
int (*mi_is_free) (mpegts_input_t*);
@@ -624,6 +626,8 @@ void mpegts_input_status_timer ( void *p );
int mpegts_input_grace ( mpegts_input_t * mi, mpegts_mux_t * mm );
+int mpegts_input_is_enabled ( mpegts_input_t * mi, mpegts_mux_t *mm, const char *reason );
+
/* TODO: exposing these class methods here is a bit of a hack */
const void *mpegts_input_class_network_get ( void *o );
int mpegts_input_class_network_set ( void *o, const void *p );
diff --git a/src/input/mpegts/linuxdvb/linuxdvb_adapter.c b/src/input/mpegts/linuxdvb/linuxdvb_adapter.c
index 2430b40c..1f5d8e70 100644
--- a/src/input/mpegts/linuxdvb/linuxdvb_adapter.c
+++ b/src/input/mpegts/linuxdvb/linuxdvb_adapter.c
@@ -119,7 +119,7 @@ linuxdvb_adapter_is_enabled ( linuxdvb_adapter_t *la )
{
linuxdvb_frontend_t *lfe;
LIST_FOREACH(lfe, &la->la_frontends, lfe_link) {
- if (lfe->mi_is_enabled((mpegts_input_t*)lfe, NULL))
+ if (lfe->mi_is_enabled((mpegts_input_t*)lfe, NULL, "adapter"))
return 1;
}
return 0;
diff --git a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c
index a1dee2f8..17b8a738 100644
--- a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c
+++ b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c
@@ -254,11 +254,12 @@ linuxdvb_frontend_get_grace ( mpegts_input_t *mi, mpegts_mux_t *mm )
}
static int
-linuxdvb_frontend_is_enabled ( mpegts_input_t *mi, mpegts_mux_t *mm )
+linuxdvb_frontend_is_enabled ( mpegts_input_t *mi, mpegts_mux_t *mm,
+ const char *reason )
{
linuxdvb_frontend_t *lfe = (linuxdvb_frontend_t*)mi;
if (lfe->lfe_fe_path == NULL) return 0;
- if (!lfe->mi_enabled) return 0;
+ if (!mpegts_input_is_enabled(mi, mm, reason)) return 0;
if (access(lfe->lfe_fe_path, R_OK | W_OK)) return 0;
return 1;
}
diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c
index 4fc5d17c..47b8f0ec 100644
--- a/src/input/mpegts/mpegts_input.c
+++ b/src/input/mpegts/mpegts_input.c
@@ -143,6 +143,13 @@ const idclass_t mpegts_input_class =
.off = offsetof(mpegts_input_t, mi_name),
.notify = idnode_notify_title_changed,
},
+ {
+ .type = PT_BOOL,
+ .id = "ota_epg",
+ .name = "Over-the-air EPG",
+ .off = offsetof(mpegts_input_t, mi_ota_epg),
+ .def.i = 1,
+ },
{
.type = PT_STR,
.id = "networks",
@@ -161,9 +168,12 @@ const idclass_t mpegts_input_class =
* Class methods
* *************************************************************************/
-static int
-mpegts_input_is_enabled ( mpegts_input_t *mi, mpegts_mux_t *mm )
+int
+mpegts_input_is_enabled ( mpegts_input_t *mi, mpegts_mux_t *mm,
+ const char *reason )
{
+ if (!strcmp(reason, "epggrab") && !mi->mi_ota_epg)
+ return 0;
return mi->mi_enabled;
}
@@ -958,6 +968,9 @@ mpegts_input_create0
pthread_cond_init(&mi->mi_table_cond, NULL);
TAILQ_INIT(&mi->mi_table_queue);
+ /* Defaults */
+ mi->mi_ota_epg = 1;
+
/* Add to global list */
LIST_INSERT_HEAD(&mpegts_input_all, mi, mi_global_link);
diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c
index 7b99c130..1e1fa2bf 100644
--- a/src/input/mpegts/mpegts_mux.c
+++ b/src/input/mpegts/mpegts_mux.c
@@ -532,7 +532,7 @@ mpegts_mux_start
/* Calculate priority+weight and sort */
count = 0;
LIST_FOREACH(mmi, &mm->mm_instances, mmi_mux_link) {
- int e = mmi->mmi_input->mi_is_enabled(mmi->mmi_input, mm);
+ int e = mmi->mmi_input->mi_is_enabled(mmi->mmi_input, mm, reason);
tvhtrace("mpegts", "%s - mmi %p enabled %d", buf, mmi, e);
if (!e) continue;
enabled = 1;
diff --git a/src/input/mpegts/mpegts_mux_dvb.c b/src/input/mpegts/mpegts_mux_dvb.c
index 8896db7b..ce1828e6 100644
--- a/src/input/mpegts/mpegts_mux_dvb.c
+++ b/src/input/mpegts/mpegts_mux_dvb.c
@@ -598,7 +598,7 @@ dvb_mux_create_instances ( mpegts_mux_t *mm )
mpegts_network_link_t *mnl;
LIST_FOREACH(mnl, &mm->mm_network->mn_inputs, mnl_mn_link) {
mpegts_input_t *mi = mnl->mnl_input;
- if (mi->mi_is_enabled(mi, mm))
+ if (mi->mi_is_enabled(mi, mm, "service"))
mi->mi_create_mux_instance(mi, mm);
}
}
diff --git a/src/input/mpegts/mpegts_service.c b/src/input/mpegts/mpegts_service.c
index aa5b376c..ed41eaf6 100644
--- a/src/input/mpegts/mpegts_service.c
+++ b/src/input/mpegts/mpegts_service.c
@@ -189,7 +189,7 @@ mpegts_service_enlist(service_t *t, struct service_instance_list *sil)
if (mmi->mmi_tune_failed)
continue;
- if (!mmi->mmi_input->mi_is_enabled(mmi->mmi_input, mmi->mmi_mux)) continue;
+ if (!mmi->mmi_input->mi_is_enabled(mmi->mmi_input, mmi->mmi_mux, "service")) continue;
/* Set weight to -1 (forced) for already active mux */
if (mmi->mmi_mux->mm_active == mmi) {
diff --git a/src/input/mpegts/satip/satip_frontend.c b/src/input/mpegts/satip/satip_frontend.c
index a5eff9d5..084ce0e8 100644
--- a/src/input/mpegts/satip/satip_frontend.c
+++ b/src/input/mpegts/satip/satip_frontend.c
@@ -361,7 +361,8 @@ satip_frontend_match_satcfg ( satip_frontend_t *lfe2, mpegts_mux_t *mm2 )
}
static int
-satip_frontend_is_enabled ( mpegts_input_t *mi, mpegts_mux_t *mm )
+satip_frontend_is_enabled ( mpegts_input_t *mi, mpegts_mux_t *mm,
+ const char *reason )
{
satip_frontend_t *lfe = (satip_frontend_t*)mi;
satip_frontend_t *lfe2;
@@ -369,7 +370,7 @@ satip_frontend_is_enabled ( mpegts_input_t *mi, mpegts_mux_t *mm )
lock_assert(&global_lock);
- if (!lfe->mi_enabled) return 0;
+ if (!mpegts_input_is_enabled(mi, mm, reason)) return 0;
if (lfe->sf_type != DVB_TYPE_S) return 1;
/* check if the position is enabled */
position = satip_satconf_get_position(lfe, mm);