Simplification of the epggrab api used within the dvb code.
This commit is contained in:
parent
17930c18f5
commit
1c1ac9dc89
4 changed files with 36 additions and 40 deletions
|
@ -120,8 +120,6 @@ typedef struct th_dvb_mux_instance {
|
|||
|
||||
int tdmi_enabled;
|
||||
|
||||
LIST_HEAD(, epggrab_ota_mux) tdmi_epg_grabbers;
|
||||
|
||||
time_t tdmi_got_adapter;
|
||||
time_t tdmi_lost_adapter;
|
||||
|
||||
|
@ -152,8 +150,7 @@ typedef struct th_dvb_mux_instance {
|
|||
|
||||
#define TDA_SCANQ_BAD 0 ///< Bad muxes (monitor quality)
|
||||
#define TDA_SCANQ_OK 1 ///< OK muxes
|
||||
#define TDA_SCANQ_EPG 2 ///< EPG muxes (TBD)
|
||||
#define TDA_SCANQ_NUM 3
|
||||
#define TDA_SCANQ_NUM 2
|
||||
|
||||
typedef struct th_dvb_adapter {
|
||||
|
||||
|
@ -169,6 +166,8 @@ typedef struct th_dvb_adapter {
|
|||
|
||||
th_dvb_mux_instance_t *tda_mux_current;
|
||||
|
||||
th_dvb_mux_instance_t *tda_mux_epg;
|
||||
|
||||
int tda_table_epollfd;
|
||||
|
||||
const char *tda_rootpath;
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
#include "tsdemux.h"
|
||||
#include "notify.h"
|
||||
#include "service.h"
|
||||
#include "epggrab/ota.h"
|
||||
#include "epggrab.h"
|
||||
|
||||
struct th_dvb_adapter_queue dvb_adapters;
|
||||
struct th_dvb_mux_instance_tree dvb_muxes;
|
||||
|
@ -420,7 +420,6 @@ dvb_adapter_init(uint32_t adapter_mask)
|
|||
void
|
||||
dvb_adapter_mux_scanner(void *aux)
|
||||
{
|
||||
epggrab_ota_mux_t *ota;
|
||||
th_dvb_adapter_t *tda = aux;
|
||||
th_dvb_mux_instance_t *tdmi;
|
||||
int i;
|
||||
|
@ -449,15 +448,14 @@ dvb_adapter_mux_scanner(void *aux)
|
|||
return;
|
||||
}
|
||||
|
||||
/* Mark any incomplete EPG grabbers as timed out (basically complete) */
|
||||
if (tda->tda_mux_current)
|
||||
LIST_FOREACH(ota, &tda->tda_mux_current->tdmi_epg_grabbers, tdmi_link) {
|
||||
epggrab_ota_timeout(ota);
|
||||
}
|
||||
/* Check EPG */
|
||||
if (tda->tda_mux_epg)
|
||||
tda->tda_mux_epg = NULL; // skip this time
|
||||
else
|
||||
tda->tda_mux_epg = epggrab_mux_next(tda);
|
||||
|
||||
/* Idle or EPG scan enabled */
|
||||
idle_epg = tda->tda_idlescan ||
|
||||
TAILQ_FIRST(&tda->tda_scan_queues[TDA_SCANQ_EPG]);
|
||||
idle_epg = tda->tda_idlescan || tda->tda_mux_epg;
|
||||
|
||||
/* Idlescan is disabled and no muxes are bad */
|
||||
if(!idle_epg && TAILQ_FIRST(&tda->tda_scan_queues[TDA_SCANQ_BAD]) == NULL) {
|
||||
|
@ -472,27 +470,27 @@ dvb_adapter_mux_scanner(void *aux)
|
|||
return;
|
||||
}
|
||||
|
||||
/* Alternate between the three queues (BAD, OK, EPG) */
|
||||
for(i = 0; i < TDA_SCANQ_NUM; i++) {
|
||||
tda->tda_scan_selector++;
|
||||
if (tda->tda_scan_selector == TDA_SCANQ_NUM)
|
||||
tda->tda_scan_selector = 0;
|
||||
/* EPG */
|
||||
if (tda->tda_mux_epg) {
|
||||
int period = epggrab_mux_period(tda->tda_mux_epg);
|
||||
if (period > 20)
|
||||
gtimer_arm(&tda->tda_mux_scanner_timer,
|
||||
dvb_adapter_mux_scanner, tda, period);
|
||||
dvb_fe_tune(tda->tda_mux_epg, "EPG scan");
|
||||
|
||||
/* Normal */
|
||||
} else {
|
||||
|
||||
tdmi = TAILQ_FIRST(&tda->tda_scan_queues[tda->tda_scan_selector]);
|
||||
if(tdmi != NULL) {
|
||||
|
||||
/* EPG - adjust dwell time */
|
||||
if (tda->tda_scan_selector == TDA_SCANQ_EPG) {
|
||||
epggrab_ota_mux_t *ota;
|
||||
int period = 20;
|
||||
LIST_FOREACH(ota, &tdmi->tdmi_epg_grabbers, tdmi_link) {
|
||||
if (ota->timeout > period) period = ota->timeout;
|
||||
}
|
||||
gtimer_arm(&tda->tda_mux_scanner_timer, dvb_adapter_mux_scanner, tda, period);
|
||||
/* Alternate queue */
|
||||
for(i = 0; i < TDA_SCANQ_NUM; i++) {
|
||||
tda->tda_scan_selector++;
|
||||
if (tda->tda_scan_selector == TDA_SCANQ_NUM)
|
||||
tda->tda_scan_selector = 0;
|
||||
tdmi = TAILQ_FIRST(&tda->tda_scan_queues[tda->tda_scan_selector]);
|
||||
if (tdmi) {
|
||||
dvb_fe_tune(tdmi, "Autoscan");
|
||||
return;
|
||||
}
|
||||
|
||||
dvb_fe_tune(tdmi, scan_string[tda->tda_scan_selector]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -230,6 +230,8 @@ dvb_fe_stop(th_dvb_mux_instance_t *tdmi)
|
|||
if(tdmi->tdmi_enabled) {
|
||||
dvb_mux_add_to_scan_queue(tdmi);
|
||||
}
|
||||
|
||||
epggrab_mux_stop(tdmi);
|
||||
|
||||
time(&tdmi->tdmi_lost_adapter);
|
||||
}
|
||||
|
@ -518,7 +520,7 @@ dvb_fe_tune(th_dvb_mux_instance_t *tdmi, const char *reason)
|
|||
|
||||
|
||||
dvb_table_add_default(tdmi);
|
||||
epggrab_tune(tdmi);
|
||||
epggrab_mux_start(tdmi);
|
||||
|
||||
dvb_adapter_notify(tda);
|
||||
return 0;
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
#include "dvb_support.h"
|
||||
#include "notify.h"
|
||||
#include "subscriptions.h"
|
||||
#include "epggrab/ota.h"
|
||||
#include "epggrab.h"
|
||||
|
||||
struct th_dvb_mux_instance_tree dvb_muxes;
|
||||
|
||||
|
@ -298,7 +298,6 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
|
|||
void
|
||||
dvb_mux_destroy(th_dvb_mux_instance_t *tdmi)
|
||||
{
|
||||
epggrab_ota_mux_t *ota;
|
||||
th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
|
||||
service_t *t;
|
||||
|
||||
|
@ -332,8 +331,7 @@ dvb_mux_destroy(th_dvb_mux_instance_t *tdmi)
|
|||
if(tdmi->tdmi_table_initial)
|
||||
tda->tda_initial_num_mux--;
|
||||
|
||||
while ((ota = LIST_FIRST(&tdmi->tdmi_epg_grabbers)))
|
||||
epggrab_ota_unregister(ota);
|
||||
epggrab_mux_delete(tdmi);
|
||||
|
||||
hts_settings_remove("dvbmuxes/%s", tdmi->tdmi_identifier);
|
||||
|
||||
|
@ -1172,9 +1170,8 @@ void dvb_mux_add_to_scan_queue ( th_dvb_mux_instance_t *tdmi )
|
|||
{
|
||||
int ti;
|
||||
th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
|
||||
ti = LIST_FIRST(&tdmi->tdmi_epg_grabbers) ? TDA_SCANQ_EPG
|
||||
: tdmi->tdmi_quality == 100 ? TDA_SCANQ_OK
|
||||
: TDA_SCANQ_BAD;
|
||||
ti = tdmi->tdmi_quality == 100 ? TDA_SCANQ_OK
|
||||
: TDA_SCANQ_BAD;
|
||||
tdmi->tdmi_scan_queue = &tda->tda_scan_queues[ti];
|
||||
TAILQ_INSERT_TAIL(tdmi->tdmi_scan_queue, tdmi, tdmi_scan_link);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue