dvb: Add dvb_network_t and start to migrate stuff there from dvb_adapter_t
This commit is contained in:
parent
abde2507d8
commit
d1051e6cc0
9 changed files with 51 additions and 41 deletions
|
@ -93,7 +93,6 @@ typedef struct th_dvb_mux_instance {
|
|||
RB_ENTRY(th_dvb_mux_instance) tdmi_global_link;
|
||||
|
||||
LIST_ENTRY(th_dvb_mux_instance) tdmi_adapter_link;
|
||||
LIST_ENTRY(th_dvb_mux_instance) tdmi_adapter_hash_link;
|
||||
|
||||
struct th_dvb_adapter *tdmi_adapter;
|
||||
|
||||
|
@ -166,6 +165,21 @@ typedef struct dvb_table_feed {
|
|||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
typedef struct dvb_network {
|
||||
|
||||
struct th_dvb_mux_instance_list dn_muxes;
|
||||
|
||||
struct th_dvb_mux_instance_queue dn_initial_scan_queue;
|
||||
int dn_initial_num_mux;
|
||||
|
||||
int dn_fe_type;
|
||||
|
||||
} dvb_network_t;
|
||||
|
||||
|
||||
/**
|
||||
* DVB Adapter (one of these per physical adapter)
|
||||
*/
|
||||
|
@ -175,10 +189,7 @@ typedef struct th_dvb_adapter {
|
|||
|
||||
TAILQ_ENTRY(th_dvb_adapter) tda_global_link;
|
||||
|
||||
struct th_dvb_mux_instance_list tda_muxes;
|
||||
|
||||
struct th_dvb_mux_instance_queue tda_initial_scan_queue;
|
||||
int tda_initial_num_mux;
|
||||
dvb_network_t *tda_dn;
|
||||
|
||||
th_dvb_mux_instance_t *tda_mux_current;
|
||||
char *tda_tune_reason; // Reason for last tune
|
||||
|
@ -203,10 +214,11 @@ typedef struct th_dvb_adapter {
|
|||
int32_t tda_full_mux_rx;
|
||||
char *tda_displayname;
|
||||
|
||||
int tda_type;
|
||||
struct dvb_frontend_info *tda_fe_info; // result of FE_GET_INFO ioctl()
|
||||
|
||||
char *tda_fe_path;
|
||||
int tda_fe_fd;
|
||||
int tda_type;
|
||||
struct dvb_frontend_info *tda_fe_info;
|
||||
|
||||
int tda_adapter_num;
|
||||
|
||||
|
@ -230,8 +242,6 @@ typedef struct th_dvb_adapter {
|
|||
struct dvb_satconf_queue tda_satconfs;
|
||||
|
||||
|
||||
struct th_dvb_mux_instance_list tda_mux_list;
|
||||
|
||||
uint32_t tda_last_fec;
|
||||
|
||||
int tda_unc_is_delta; /* 1 if we believe FE_READ_UNCORRECTED_BLOCKS
|
||||
|
|
|
@ -57,9 +57,11 @@ static th_dvb_adapter_t *
|
|||
tda_alloc(void)
|
||||
{
|
||||
th_dvb_adapter_t *tda = calloc(1, sizeof(th_dvb_adapter_t));
|
||||
dvb_network_t *dn = calloc(1, sizeof(dvb_network_t));
|
||||
pthread_mutex_init(&tda->tda_delivery_mutex, NULL);
|
||||
|
||||
TAILQ_INIT(&tda->tda_initial_scan_queue);
|
||||
tda->tda_dn = dn;
|
||||
TAILQ_INIT(&dn->dn_initial_scan_queue);
|
||||
TAILQ_INIT(&tda->tda_satconfs);
|
||||
streaming_pad_init(&tda->tda_streaming_pad);
|
||||
return tda;
|
||||
|
@ -711,7 +713,7 @@ dvb_adapter_mux_scanner(void *aux)
|
|||
gtimer_arm(&tda->tda_mux_scanner_timer, dvb_adapter_mux_scanner, tda, 20);
|
||||
|
||||
/* No muxes */
|
||||
if(LIST_FIRST(&tda->tda_muxes) == NULL) {
|
||||
if(LIST_FIRST(&tda->tda_dn->dn_muxes) == NULL) {
|
||||
dvb_adapter_poweroff(tda);
|
||||
return;
|
||||
}
|
||||
|
@ -725,7 +727,7 @@ dvb_adapter_mux_scanner(void *aux)
|
|||
return; // Someone is doing full mux dump
|
||||
|
||||
/* Check if we have muxes pending for quickscan, if so, choose them */
|
||||
if((tdmi = TAILQ_FIRST(&tda->tda_initial_scan_queue)) != NULL) {
|
||||
if((tdmi = TAILQ_FIRST(&tda->tda_dn->dn_initial_scan_queue)) != NULL) {
|
||||
dvb_fe_tune(tdmi, "Initial autoscan");
|
||||
return;
|
||||
}
|
||||
|
@ -764,10 +766,10 @@ dvb_adapter_clone(th_dvb_adapter_t *dst, th_dvb_adapter_t *src)
|
|||
|
||||
lock_assert(&global_lock);
|
||||
|
||||
while((tdmi_dst = LIST_FIRST(&dst->tda_muxes)) != NULL)
|
||||
while((tdmi_dst = LIST_FIRST(&dst->tda_dn->dn_muxes)) != NULL)
|
||||
dvb_mux_destroy(tdmi_dst);
|
||||
|
||||
LIST_FOREACH(tdmi_src, &src->tda_muxes, tdmi_adapter_link)
|
||||
LIST_FOREACH(tdmi_src, &src->tda_dn->dn_muxes, tdmi_adapter_link)
|
||||
dvb_mux_copy(dst, tdmi_src, NULL);
|
||||
|
||||
tda_save(dst);
|
||||
|
@ -789,7 +791,7 @@ dvb_adapter_destroy(th_dvb_adapter_t *tda)
|
|||
|
||||
hts_settings_remove("dvbadapters/%s", tda->tda_identifier);
|
||||
|
||||
while((tdmi = LIST_FIRST(&tda->tda_muxes)) != NULL)
|
||||
while((tdmi = LIST_FIRST(&tda->tda_dn->dn_muxes)) != NULL)
|
||||
dvb_mux_destroy(tdmi);
|
||||
|
||||
TAILQ_REMOVE(&dvb_adapters, tda, tda_global_link);
|
||||
|
@ -992,7 +994,7 @@ dvb_adapter_build_msg(th_dvb_adapter_t *tda)
|
|||
htsmsg_add_str(m, "name", tda->tda_displayname);
|
||||
|
||||
// XXX: bad bad bad slow slow slow
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) {
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
|
||||
nummux++;
|
||||
LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) {
|
||||
numsvc++;
|
||||
|
@ -1003,7 +1005,7 @@ dvb_adapter_build_msg(th_dvb_adapter_t *tda)
|
|||
|
||||
htsmsg_add_u32(m, "services", numsvc);
|
||||
htsmsg_add_u32(m, "muxes", nummux);
|
||||
htsmsg_add_u32(m, "initialMuxes", tda->tda_initial_num_mux);
|
||||
htsmsg_add_u32(m, "initialMuxes", tda->tda_dn->dn_initial_num_mux);
|
||||
|
||||
if(tda->tda_mux_current != NULL) {
|
||||
th_dvb_mux_instance_t *tdmi = tda->tda_mux_current;
|
||||
|
|
|
@ -269,7 +269,7 @@ dvb_fe_stop(th_dvb_mux_instance_t *tdmi, int retune)
|
|||
|
||||
if(tdmi->tdmi_table_initial) {
|
||||
tdmi->tdmi_table_initial = 0;
|
||||
tda->tda_initial_num_mux--;
|
||||
tda->tda_dn->dn_initial_num_mux--;
|
||||
dvb_mux_save(tdmi);
|
||||
}
|
||||
|
||||
|
@ -497,7 +497,7 @@ dvb_fe_tune(th_dvb_mux_instance_t *tdmi, const char *reason)
|
|||
/* Remove from initial scan set */
|
||||
if(tdmi->tdmi_table_initial) {
|
||||
tdmi->tdmi_table_initial = 0;
|
||||
tda->tda_initial_num_mux--;
|
||||
tda->tda_dn->dn_initial_num_mux--;
|
||||
}
|
||||
|
||||
/* Mark as bad */
|
||||
|
|
|
@ -67,9 +67,9 @@ static void tdmi_set_enable(th_dvb_mux_instance_t *tdmi, int enabled);
|
|||
static void
|
||||
mux_link_initial(th_dvb_adapter_t *tda, th_dvb_mux_instance_t *tdmi)
|
||||
{
|
||||
int was_empty = TAILQ_FIRST(&tda->tda_initial_scan_queue) == NULL;
|
||||
int was_empty = TAILQ_FIRST(&tda->tda_dn->dn_initial_scan_queue) == NULL;
|
||||
|
||||
tdmi->tdmi_scan_queue = &tda->tda_initial_scan_queue;
|
||||
tdmi->tdmi_scan_queue = &tda->tda_dn->dn_initial_scan_queue;
|
||||
TAILQ_INSERT_TAIL(tdmi->tdmi_scan_queue, tdmi, tdmi_scan_link);
|
||||
|
||||
if(was_empty && (tda->tda_mux_current == NULL ||
|
||||
|
@ -163,7 +163,7 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
|
|||
lock_assert(&global_lock);
|
||||
|
||||
/* HACK - we hash/compare based on 2KHz spacing and compare on +/-500Hz */
|
||||
LIST_FOREACH(tdmi, &tda->tda_mux_list, tdmi_adapter_hash_link) {
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
|
||||
if(tdmi_compare_key(&tdmi->tdmi_conf, dmc))
|
||||
break; /* Mux already exist */
|
||||
}
|
||||
|
@ -280,8 +280,7 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
|
|||
tdmi, tdmi_satconf_link);
|
||||
}
|
||||
|
||||
LIST_INSERT_HEAD(&tda->tda_mux_list, tdmi, tdmi_adapter_hash_link);
|
||||
LIST_INSERT_HEAD(&tda->tda_muxes, tdmi, tdmi_adapter_link);
|
||||
LIST_INSERT_HEAD(&tda->tda_dn->dn_muxes, tdmi, tdmi_adapter_link);
|
||||
tdmi->tdmi_table_initial = initialscan;
|
||||
|
||||
if(source != NULL) {
|
||||
|
@ -296,7 +295,7 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
|
|||
dvb_mux_notify(tdmi);
|
||||
|
||||
if(enabled && tdmi->tdmi_table_initial) {
|
||||
tda->tda_initial_num_mux++;
|
||||
tda->tda_dn->dn_initial_num_mux++;
|
||||
mux_link_initial(tda, tdmi);
|
||||
}
|
||||
|
||||
|
@ -334,13 +333,12 @@ dvb_mux_destroy(th_dvb_mux_instance_t *tdmi)
|
|||
|
||||
RB_REMOVE(&dvb_muxes, tdmi, tdmi_global_link);
|
||||
LIST_REMOVE(tdmi, tdmi_adapter_link);
|
||||
LIST_REMOVE(tdmi, tdmi_adapter_hash_link);
|
||||
|
||||
if(tdmi->tdmi_scan_queue != NULL)
|
||||
TAILQ_REMOVE(tdmi->tdmi_scan_queue, tdmi, tdmi_scan_link);
|
||||
|
||||
if(tdmi->tdmi_table_initial)
|
||||
tda->tda_initial_num_mux--;
|
||||
tda->tda_dn->dn_initial_num_mux--;
|
||||
|
||||
epggrab_mux_delete(tdmi);
|
||||
|
||||
|
@ -1254,7 +1252,7 @@ th_dvb_mux_instance_t *dvb_mux_find
|
|||
{
|
||||
th_dvb_mux_instance_t *tdmi;
|
||||
if (tda) {
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) {
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
|
||||
if (enabled && !tdmi->tdmi_enabled) continue;
|
||||
if (onid && onid != tdmi->tdmi_network_id) continue;
|
||||
if (tsid && tsid != tdmi->tdmi_transport_stream_id) continue;
|
||||
|
|
|
@ -352,7 +352,7 @@ dvb_service_find3
|
|||
if (sid == svc->s_dvb_service_id) return svc;
|
||||
}
|
||||
} else if (tda) {
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) {
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
|
||||
if (enabled && !tdmi->tdmi_enabled) continue;
|
||||
if (onid && onid != tdmi->tdmi_network_id) continue;
|
||||
if (tsid && tsid != tdmi->tdmi_transport_stream_id) continue;
|
||||
|
|
|
@ -61,7 +61,7 @@ dvb_table_fastswitch(th_dvb_mux_instance_t *tdmi)
|
|||
return;
|
||||
|
||||
tdmi->tdmi_table_initial = 0;
|
||||
tda->tda_initial_num_mux--;
|
||||
tda->tda_dn->dn_initial_num_mux--;
|
||||
dvb_mux_save(tdmi);
|
||||
|
||||
|
||||
|
@ -267,7 +267,7 @@ dvb_bat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *buf, int len,
|
|||
j = 0;
|
||||
|
||||
/* Find TDMI */
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link)
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link)
|
||||
if(tdmi->tdmi_transport_stream_id == tsid &&
|
||||
tdmi->tdmi_network_id == onid)
|
||||
break;
|
||||
|
@ -337,7 +337,7 @@ dvb_sdt_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
if(!tdmi->tdmi_network_id)
|
||||
dvb_mux_set_onid(tdmi, onid);
|
||||
} else {
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link)
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link)
|
||||
if(tdmi->tdmi_transport_stream_id == tsid &&
|
||||
tdmi->tdmi_network_id != onid)
|
||||
break;
|
||||
|
@ -495,7 +495,7 @@ dvb_pat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
// Make sure this TSID is not already known on another mux
|
||||
// That might indicate that we have accedentally received a PAT
|
||||
// from another mux
|
||||
LIST_FOREACH(other, &tda->tda_muxes, tdmi_adapter_link)
|
||||
LIST_FOREACH(other, &tda->tda_dn->dn_muxes, tdmi_adapter_link)
|
||||
if(other != tdmi &&
|
||||
other->tdmi_conf.dmc_satconf == tdmi->tdmi_conf.dmc_satconf &&
|
||||
other->tdmi_transport_stream_id == tsid &&
|
||||
|
@ -755,7 +755,7 @@ dvb_table_local_channel(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
|
||||
service_t *t;
|
||||
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link)
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link)
|
||||
if(tdmi->tdmi_transport_stream_id == tsid && tdmi->tdmi_network_id == onid)
|
||||
break;
|
||||
|
||||
|
@ -935,7 +935,7 @@ atsc_vct_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
onid = (ptr[24] << 8) | ptr[25];
|
||||
|
||||
/* Search all muxes on adapter */
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link)
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link)
|
||||
if(tdmi->tdmi_transport_stream_id == tsid && tdmi->tdmi_network_id == onid);
|
||||
break;
|
||||
|
||||
|
|
|
@ -255,7 +255,7 @@ void epggrab_ota_create_and_register_by_id
|
|||
th_dvb_mux_instance_t *tdmi;
|
||||
epggrab_ota_mux_t *ota;
|
||||
TAILQ_FOREACH(tda, &dvb_adapters, tda_global_link) {
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) {
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
|
||||
if (tdmi->tdmi_transport_stream_id != tsid) continue;
|
||||
if (onid && tdmi->tdmi_network_id != onid) continue;
|
||||
if (networkname && (!tdmi->tdmi_network || strcmp(networkname, tdmi->tdmi_network))) continue;
|
||||
|
|
|
@ -237,7 +237,7 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque)
|
|||
tvhlog(LOG_NOTICE, "web interface",
|
||||
"Service probe started on \"%s\"", tda->tda_displayname);
|
||||
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) {
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
|
||||
LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) {
|
||||
if(t->s_enabled)
|
||||
serviceprobe_enqueue(t);
|
||||
|
@ -334,7 +334,7 @@ extjs_dvbmuxes(http_connection_t *hc, const char *remain, void *opaque)
|
|||
if(!strcmp(op, "get")) {
|
||||
array = htsmsg_create_list();
|
||||
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link)
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link)
|
||||
htsmsg_add_msg(array, NULL, dvb_mux_build_msg(tdmi));
|
||||
|
||||
htsmsg_add_msg(out, "entries", array);
|
||||
|
@ -415,7 +415,7 @@ extjs_dvbservices(http_connection_t *hc, const char *remain, void *opaque)
|
|||
out = htsmsg_create_map();
|
||||
array = htsmsg_create_list();
|
||||
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) {
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
|
||||
LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) {
|
||||
count++;
|
||||
}
|
||||
|
@ -423,7 +423,7 @@ extjs_dvbservices(http_connection_t *hc, const char *remain, void *opaque)
|
|||
|
||||
tvec = alloca(sizeof(service_t *) * count);
|
||||
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) {
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
|
||||
LIST_FOREACH(t, &tdmi->tdmi_transports, s_group_link) {
|
||||
tvec[i++] = t;
|
||||
}
|
||||
|
|
|
@ -134,7 +134,7 @@ dumpdvbadapters(htsbuf_queue_t *hq)
|
|||
htsbuf_qprintf(hq, "%s (%s)\n", tda->tda_displayname, tda->tda_identifier);
|
||||
|
||||
outputtitle(hq, 4, "Multiplexes");
|
||||
LIST_FOREACH(tdmi, &tda->tda_muxes, tdmi_adapter_link) {
|
||||
LIST_FOREACH(tdmi, &tda->tda_dn->dn_muxes, tdmi_adapter_link) {
|
||||
char tdminame[64];
|
||||
dvb_mux_nicename(tdminame, sizeof(tdminame), tdmi);
|
||||
htsbuf_qprintf(hq, " %s (%s)\n",
|
||||
|
|
Loading…
Add table
Reference in a new issue