uint16_t onid, uint16_t tsid, const char *network,
const char *logprefix, int enabled,
int initialscan, const char *identifier,
- dvb_satconf_t *satconf, int create);
+ dvb_satconf_t *satconf, int create, th_dvb_mux_instance_t *src);
void dvb_mux_set_networkname(th_dvb_mux_instance_t *tdmi, const char *name);
dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
uint16_t onid, uint16_t tsid, const char *network, const char *source,
int enabled, int initialscan, const char *identifier,
- dvb_satconf_t *satconf, int create)
+ dvb_satconf_t *satconf, int create, th_dvb_mux_instance_t *src)
{
th_dvb_mux_instance_t *tdmi, *c;
char buf[200];
int save = 0;
char buf2[1024];
buf2[0] = 0;
+ int master = 0;
+ if (!src)
+ master = 1;
+ else if (src->tdmi_network_id == tdmi->tdmi_network_id)
+ master = 1;
+ /* Network ID */
+ if(tsid != 0xFFFF && tdmi->tdmi_transport_stream_id != tsid) {
+ if (tdmi->tdmi_transport_stream_id == 0xFFFF || master) {
+ tdmi->tdmi_transport_stream_id = tsid;
+ save = 1;
+ }
+ }
+ if(onid && tdmi->tdmi_network_id != onid) {
+ if (!tdmi->tdmi_network_id || master) {
+ tdmi->tdmi_network_id = onid;
+ save = 1;
+ }
+ }
+ if(network && *network && strcmp(tdmi->tdmi_network ?: "", network)) {
+ if (!tdmi->tdmi_network || master) {
+ free(tdmi->tdmi_network);
+ tdmi->tdmi_network = strdup(network);
+ save = 1;
+ }
+ }
+
+ /* Tuning Info */
+ // TODO: same protection here?
if(tdmi->tdmi_adapter->tda_autodiscovery &&
tdmi_compare_conf(tda->tda_type, &tdmi->tdmi_conf, dmc)) {
#if DVB_API_VERSION >= 5
save = 1;
}
- if(tsid != 0xFFFF && tdmi->tdmi_transport_stream_id != tsid) {
- tdmi->tdmi_transport_stream_id = tsid;
- save = 1;
- }
- if(onid && tdmi->tdmi_network_id != onid) {
- tdmi->tdmi_network_id = onid;
- save = 1;
- }
- if(network && *network && strcmp(tdmi->tdmi_network ?: "", network)) {
- free(tdmi->tdmi_network);
- tdmi->tdmi_network = strdup(network);
- save = 1;
- }
-
/* HACK - load old transports and remove old mux config */
if(identifier) {
save = 1;
tdmi = dvb_mux_create(tda, &dmc,
onid, tsid, htsmsg_get_str(m, "network"), NULL, enabled,
initscan,
- identifier, NULL, 1);
+ identifier, NULL, 1, NULL);
if(tdmi != NULL) {
if((s = htsmsg_get_str(m, "status")) != NULL)
}
dmc.dmc_polarisation = polarisation;
- tdmi = dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, NULL, 1, 1, NULL, NULL, 1);
+ tdmi = dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, NULL, 1, 1, NULL, NULL, 1, NULL);
if(tdmi == NULL)
return "Mux already exist";
tdmi_src->tdmi_transport_stream_id,
tdmi_src->tdmi_network,
"copy operation", tdmi_src->tdmi_enabled,
- 1, NULL, satconf, 1);
+ 1, NULL, satconf, 1, tdmi_src);
if(tdmi_dst == NULL)
return -1; // Already exist
dmc.dmc_satconf = dvb_satconf_entry_find(tda, satconf, 0);
- dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, source, 1, 1, NULL, NULL, 1);
+ dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, source, 1, 1, NULL, NULL, 1, NULL);
}
}
if (chname && (strcmp(t->s_provider ?: "", provider) ||
strcmp(t->s_svcname ?: "", chname))) {
- free(t->s_provider);
- t->s_provider = strdup(provider);
+ int save2 = 0;
+ int master = 0;
+ if (t->s_dvb_mux_instance && t->s_dvb_mux_instance->tdmi_network_id &&
+ t->s_dvb_mux_instance->tdmi_network_id == tdmi->tdmi_network_id)
+ master = 1;
+
+ if (!t->s_provider || master) {
+ free(t->s_provider);
+ t->s_provider = strdup(provider);
+ save2 = 1;
+ }
- free(t->s_svcname);
- t->s_svcname = strdup(chname);
-
- pthread_mutex_lock(&t->s_stream_mutex);
- service_make_nicename(t);
- pthread_mutex_unlock(&t->s_stream_mutex);
+ if (!t->s_svcname || master) {
+ free(t->s_svcname);
+ t->s_svcname = strdup(chname);
+ save2 = 1;
+ }
- save = 1;
+ if (save2) {
+ pthread_mutex_lock(&t->s_stream_mutex);
+ service_make_nicename(t);
+ pthread_mutex_unlock(&t->s_stream_mutex);
+ save = 1;
+ }
}
if (*crid && strcmp(t->s_default_authority ?: "", crid)) {
dvb_mux_create(tdmi->tdmi_adapter, &dmc, onid, tsid, netname,
"automatic mux discovery", 1, 1, NULL, NULL,
- tdmi->tdmi_adapter->tda_autodiscovery);
+ tdmi->tdmi_adapter->tda_autodiscovery, tdmi);
return 0;
}
dvb_mux_create(tdmi->tdmi_adapter, &dmc, onid, tsid, netname,
"automatic mux discovery", 1, 1, NULL, tdmi->tdmi_conf.dmc_satconf,
- tdmi->tdmi_adapter->tda_autodiscovery);
+ tdmi->tdmi_adapter->tda_autodiscovery, tdmi);
return 0;
}
dvb_mux_create(tdmi->tdmi_adapter, &dmc, onid, tsid, netname,
"automatic mux discovery", 1, 1, NULL, NULL,
- tdmi->tdmi_adapter->tda_autodiscovery);
+ tdmi->tdmi_adapter->tda_autodiscovery, tdmi);
return 0;
}