diff --git a/docs/html/config_tvadapters.html b/docs/html/config_tvadapters.html index 27a9c273..542ecbb0 100644 --- a/docs/html/config_tvadapters.html +++ b/docs/html/config_tvadapters.html @@ -76,6 +76,14 @@ The rows have the following functions
+
diff --git a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c index 620dcec3..1e7668ed 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c @@ -113,6 +113,13 @@ const idclass_t linuxdvb_frontend_class = .opts = PO_ADVANCED, .off = offsetof(linuxdvb_frontend_t, lfe_ibuf_size), }, + { + .type = PT_U32, + .id = "status_period", + .name = "Status Period (ms)", + .opts = PO_ADVANCED, + .off = offsetof(linuxdvb_frontend_t, lfe_status_period), + }, {} } }; @@ -491,6 +498,7 @@ linuxdvb_frontend_monitor ( void *aux ) streaming_message_t sm; service_t *s; int logit = 0, retune; + uint32_t period = MIN(MAX(250, lfe->lfe_status_period), 8000); #if DVB_VER_ATLEAST(5,10) struct dtv_property fe_properties[6]; struct dtv_properties dtv_prop; @@ -526,7 +534,7 @@ linuxdvb_frontend_monitor ( void *aux ) if (!mmi || !lfe->lfe_ready) return; /* re-arm */ - gtimer_arm(&lfe->lfe_monitor_timer, linuxdvb_frontend_monitor, lfe, 1); + gtimer_arm_ms(&lfe->lfe_monitor_timer, linuxdvb_frontend_monitor, lfe, period); /* Get current status */ if (ioctl(lfe->lfe_fe_fd, FE_READ_STATUS, &fe_status) == -1) { @@ -609,10 +617,9 @@ linuxdvb_frontend_monitor ( void *aux ) lfe->lfe_monitor = dispatch_clock + 1; } } else { - /* Monitor 1 per sec */ if (dispatch_clock < lfe->lfe_monitor) return; - lfe->lfe_monitor = dispatch_clock + 1; + lfe->lfe_monitor = dispatch_clock + (period + 999) / 1000; } /* Statistics - New API */ @@ -1441,6 +1448,7 @@ linuxdvb_frontend_create strncpy(lfe->lfe_name, name, sizeof(lfe->lfe_name)); lfe->lfe_name[sizeof(lfe->lfe_name)-1] = '\0'; lfe->lfe_ibuf_size = 18800; + lfe->lfe_status_period = 1000; lfe = (linuxdvb_frontend_t*)mpegts_input_create0((mpegts_input_t*)lfe, idc, uuid, conf); if (!lfe) return NULL; diff --git a/src/input/mpegts/linuxdvb/linuxdvb_private.h b/src/input/mpegts/linuxdvb/linuxdvb_private.h index f03557c8..cac9e5b6 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_private.h +++ b/src/input/mpegts/linuxdvb/linuxdvb_private.h @@ -117,6 +117,7 @@ struct linuxdvb_frontend int lfe_tune_repeats; uint32_t lfe_skip_bytes; uint32_t lfe_ibuf_size; + uint32_t lfe_status_period; /* * Satconf (DVB-S only)