diff --git a/src/dvb/dvb.h b/src/dvb/dvb.h index aa08aff0..9b528554 100644 --- a/src/dvb/dvb.h +++ b/src/dvb/dvb.h @@ -450,6 +450,8 @@ dvb_mux_t *dvb_mux_create(dvb_network_t *tda, const char *logprefix, int enabled, int initialscan, const char *uuid); +int dvb_mux_tune(dvb_mux_t *dm, const char *reason, int weight); + void dvb_mux_set_networkname(dvb_mux_t *dm, const char *name); void dvb_mux_set_tsid(dvb_mux_t *dm, uint16_t tsid); @@ -490,10 +492,8 @@ dvb_mux_t *dvb_mux_find(dvb_network_t *dn, const char *netname, uint16_t onid, void dvb_mux_initial_scan_done(dvb_mux_t *dm); -/** - * DVB Transport (aka DVB service) - */ -void dvb_tdmi_destroy(th_dvb_mux_instance_t *tdmi); +int dvb_fe_tune_tdmi(th_dvb_mux_instance_t *tdmi); + /** * DVB Transport (aka DVB service) @@ -521,7 +521,6 @@ void dvb_service_notify_by_adapter(th_dvb_adapter_t *tda); /** * DVB Frontend */ -int dvb_fe_tune(dvb_mux_t *dm, const char *reason, int weight); //void dvb_fe_stop(th_dvb_adapter_t *tda, int retune); diff --git a/src/dvb/dvb_fe.c b/src/dvb/dvb_fe.c index ba05ed4f..a01fb598 100644 --- a/src/dvb/dvb_fe.c +++ b/src/dvb/dvb_fe.c @@ -92,7 +92,6 @@ dvb_fe_monitor(void *aux) fe_status_t fe_status; int status, v, vv, i, fec, q; th_dvb_mux_instance_t *tdmi = tda->tda_current_tdmi; - char buf[50]; signal_status_t sigstat; streaming_message_t sm; struct service *t; @@ -191,10 +190,10 @@ dvb_fe_monitor(void *aux) if(status != tdmi->tdmi_fe_status) { tdmi->tdmi_fe_status = status; - dvb_mux_nicename(buf, sizeof(buf), tdmi->tdmi_mux); tvhlog(LOG_DEBUG, "dvb", "\"%s\" on adapter \"%s\", status changed to %s", - buf, tda->tda_displayname, dvb_mux_status(tdmi)); + dvb_mux_nicename(tdmi->tdmi_mux), tda->tda_displayname, + dvb_mux_status(tdmi)); notify = 1; } @@ -385,147 +384,23 @@ dvb_fe_tune_s2(th_dvb_adapter_t *tda, dvb_mux_conf_t *dmc) #endif -/** - * These are created on the fly - */ -static void -dvb_create_tdmis(dvb_mux_t *dm) -{ - th_dvb_mux_instance_t *tdmi; - dvb_network_t *dn = dm->dm_dn; - th_dvb_adapter_t *tda; - LIST_FOREACH(tda, &dn->dn_adapters, tda_network_link) { - - LIST_FOREACH(tdmi, &dm->dm_tdmis, tdmi_mux_link) { - if(tdmi->tdmi_adapter != NULL) - break; - } - - if(tdmi == NULL) { - tdmi = calloc(1, sizeof(th_dvb_mux_instance_t)); - tdmi->tdmi_adapter = tda; - tdmi->tdmi_mux = dm; - LIST_INSERT_HEAD(&tda->tda_tdmis, tdmi, tdmi_adapter_link); - LIST_INSERT_HEAD(&dm->dm_tdmis, tdmi, tdmi_mux_link); - } - } -} - - - -/** - * - */ -static void -dvb_mux_stop(th_dvb_mux_instance_t *tdmi) -{ - dvb_mux_t *dm = tdmi->tdmi_mux; - th_dvb_adapter_t *tda = tdmi->tdmi_adapter; - assert(dm->dm_current_tdmi == tdmi); - assert(tda->tda_current_tdmi == tdmi); - - dvb_table_flush_all(dm); - epggrab_mux_stop(dm, 0); - - assert(dm->dm_scan_status == DM_SCAN_DONE); - - dm->dm_current_tdmi = NULL; - tda->tda_current_tdmi = NULL; - - printf("NEED TO TAKE CARE OF SERVICES in dvb_mux_stop\n"); -} - - -/** - * - */ -static int -tdmi_compute_weight(const th_dvb_mux_instance_t *tdmi) -{ - const dvb_mux_t *dm = tdmi->tdmi_mux; - if(dm->dm_scan_status == DM_SCAN_CURRENT) - return 1; - return 0; -} - - -/** - * - */ -static void -dvb_mux_initial_scan_timeout(void *aux) -{ - dvb_mux_t *dm = aux; - char buf[100]; - - dvb_mux_nicename(buf, sizeof(buf), dm); - tvhlog(LOG_DEBUG, "dvb", "Initial scan timed out for \"%s\"", buf); - - dvb_mux_initial_scan_done(dm); -} - - -/** - * - */ int -dvb_fe_tune(dvb_mux_t *dm, const char *reason, int weight) +dvb_fe_tune_tdmi(th_dvb_mux_instance_t *tdmi) { - dvb_network_t *dn = dm->dm_dn; - + th_dvb_adapter_t *tda = tdmi->tdmi_adapter; + const dvb_mux_t *dm = tdmi->tdmi_mux; // copy dmc, cause frequency may be change with FE_QPSK dvb_mux_conf_t dmc = dm->dm_conf; dvb_frontend_parameters_t* p = &dmc.dmc_fe_params; - th_dvb_mux_instance_t *tdmi; - - char buf[256]; int r; - - assert(dm->dm_current_tdmi == NULL); - - lock_assert(&global_lock); - - dvb_create_tdmis(dm); - - retry: - // Figure which adapter to use - LIST_FOREACH(tdmi, &dm->dm_tdmis, tdmi_mux_link) - if(!tdmi->tdmi_tune_failed && tdmi->tdmi_adapter->tda_current_tdmi == NULL) - break; - - if(tdmi == NULL) { - // None available, need to strike one out - LIST_FOREACH(tdmi, &dm->dm_tdmis, tdmi_mux_link) { - if(tdmi->tdmi_tune_failed) - continue; - - th_dvb_adapter_t *tda = tdmi->tdmi_adapter; - th_dvb_mux_instance_t *t2 = tda->tda_current_tdmi; - assert(t2 != NULL); - assert(t2 != tdmi); - - if(tdmi_compute_weight(t2) < weight) { - dvb_mux_stop(t2); - break; - } - } - - if(tdmi == NULL) - return SM_CODE_NO_FREE_ADAPTER; - - } - - th_dvb_adapter_t *tda = tdmi->tdmi_adapter; + char buf[256]; dvb_adapter_start(tda); assert(tda->tda_current_tdmi == NULL); - free(tda->tda_tune_reason); - tda->tda_tune_reason = strdup(reason); - tdmi->tdmi_weight = weight; if(tda->tda_fe_type == FE_QPSK) { @@ -574,52 +449,26 @@ dvb_fe_tune(dvb_mux_t *dm, const char *reason, int weight) tvhlog(LOG_ERR, "dvb", "diseqc setup failed %d\n", r); } - dvb_mux_nicename(buf, sizeof(buf), tdmi->tdmi_mux); - tda->tda_fe_monitor_hold = 4; - #if DVB_API_VERSION >= 5 if (tda->tda_fe_type == FE_QPSK) { tvhlog(LOG_DEBUG, "dvb", "\"%s\" tuning via s2api to \"%s\" (%d, %d Baud, " - "%s, %s, %s) for %s", tda->tda_rootpath, buf, p->frequency, p->u.qpsk.symbol_rate, - dvb_mux_fec2str(p->u.qpsk.fec_inner), dvb_mux_delsys2str(dmc.dmc_fe_delsys), - dvb_mux_qam2str(dmc.dmc_fe_modulation), reason); - + "%s, %s, %s)", tda->tda_rootpath, buf, p->frequency, p->u.qpsk.symbol_rate, + dvb_mux_fec2str(p->u.qpsk.fec_inner), dvb_mux_delsys2str(dmc.dmc_fe_delsys), + dvb_mux_qam2str(dmc.dmc_fe_modulation)); r = dvb_fe_tune_s2(tda, &dmc); } else #endif { - tvhlog(LOG_DEBUG, "dvb", "\"%s\" tuning to \"%s\" (%s) fd:%d", tda->tda_rootpath, buf, reason, tda->tda_fe_fd); + tvhlog(LOG_DEBUG, "dvb", "\"%s\" tuning to \"%s\"", + tda->tda_rootpath, dvb_mux_nicename(dm)); r = ioctl(tda->tda_fe_fd, FE_SET_FRONTEND, p); } - if(r != 0) { - tvhlog(LOG_ERR, "dvb", "\"%s\" tuning to \"%s\"" - " -- Front configuration failed -- %s, frequency: %u", - tda->tda_rootpath, buf, strerror(errno), p->frequency); - /* Mark as bad */ - tdmi->tdmi_tune_failed = 1; - goto retry; - } + if(!r) + gtimer_arm(&tda->tda_fe_monitor_timer, dvb_fe_monitor, tda, 1); - tda->tda_current_tdmi = tdmi; - dm->dm_current_tdmi = tdmi; - if(dm->dm_scan_status == DM_SCAN_PENDING) { - TAILQ_REMOVE(&dn->dn_initial_scan_pending_queue, dm, dm_scan_link); - dm->dm_scan_status = DM_SCAN_CURRENT; - TAILQ_INSERT_TAIL(&dn->dn_initial_scan_current_queue, dm, dm_scan_link); - - gtimer_arm(&dm->dm_initial_scan_timeout, dvb_mux_initial_scan_timeout, dm, 10); - } - - - gtimer_arm(&tda->tda_fe_monitor_timer, dvb_fe_monitor, tda, 1); - - dvb_table_add_default(dm); - epggrab_mux_start(dm); - - dvb_adapter_notify(tda); - return 0; + return r; } diff --git a/src/dvb/dvb_multiplex.c b/src/dvb/dvb_multiplex.c index 49fe59f3..00b54484 100644 --- a/src/dvb/dvb_multiplex.c +++ b/src/dvb/dvb_multiplex.c @@ -218,12 +218,10 @@ dvb_mux_create(dvb_network_t *dn, const struct dvb_mux_conf *dmc, } if(save) { - char buf[128]; dvb_mux_save(dm); - dvb_mux_nicename(buf, sizeof(buf), dm); - tvhlog(LOG_DEBUG, "dvb", - "Configuration for mux \"%s\" updated by %s%s", - buf, source, buf2); + tvhlog(LOG_DEBUG, "dvb", + "Configuration for mux \"%s\" updated by %s%s", + dvb_mux_nicename(dm), source, buf2); dvb_mux_notify(dm); } @@ -255,9 +253,8 @@ dvb_mux_create(dvb_network_t *dn, const struct dvb_mux_conf *dmc, memcpy(&dm->dm_conf, dmc, sizeof(struct dvb_mux_conf)); if(source != NULL) { - char buf[128]; - dvb_mux_nicename(buf, sizeof(buf), dm); - tvhlog(LOG_NOTICE, "dvb", "New mux \"%s\" created by %s", buf, source); + tvhlog(LOG_NOTICE, "dvb", "New mux \"%s\" created by %s", + dvb_mux_nicename(dm), source); dvb_mux_save(dm); } @@ -276,7 +273,7 @@ dvb_mux_create(dvb_network_t *dn, const struct dvb_mux_conf *dmc, /** * */ -void +static void dvb_tdmi_destroy(th_dvb_mux_instance_t *tdmi) { LIST_REMOVE(tdmi, tdmi_mux_link); @@ -954,8 +951,7 @@ dvb_mux_build_msg(dvb_mux_t *dm) htsmsg_add_u32(m, "enabled", dm->dm_enabled); htsmsg_add_str(m, "network", dm->dm_network_name ?: ""); - dvb_mux_nicefreq(buf, sizeof(buf), dm); - htsmsg_add_str(m, "freq", buf); + htsmsg_add_str(m, "freq", dvb_mux_nicefreq(dm)); dvb_mux_modulation(buf, sizeof(buf), dm); htsmsg_add_str(m, "mod", buf); @@ -1233,7 +1229,7 @@ dvb_subscription_create_from_tdmi(th_dvb_mux_instance_t *tdmi, s->ths_tdmi = tdmi; LIST_INSERT_HEAD(&tdmi->tdmi_subscriptions, s, ths_tdmi_link); - dvb_fe_tune(tdmi->tdmi_mux, "Full mux subscription", 99999); + dvb_mux_tune(tdmi->tdmi_mux, "Full mux subscription", 99999); abort(); pthread_mutex_lock(&tda->tda_delivery_mutex); streaming_target_connect(&tda->tda_streaming_pad, &s->ths_input); @@ -1254,11 +1250,7 @@ dvb_mux_serialize(struct idnode *self, int full) dvb_mux_t *dm = (dvb_mux_t *)self; htsmsg_t *m = htsmsg_create_map(); htsmsg_add_str(m, "id", idnode_uuid_as_str(&dm->dm_id)); - - char buf[256]; - dvb_mux_nicename(buf, sizeof(buf), dm); - - htsmsg_add_str(m, "text", buf); + htsmsg_add_str(m, "text", dvb_mux_nicename(dm)); return m; } @@ -1295,3 +1287,164 @@ dvb_mux_get_childs(struct idnode *self) v[cnt] = NULL; return v; } + + + +/** + * These are created on the fly + */ +static void +dvb_create_tdmis(dvb_mux_t *dm) +{ + th_dvb_mux_instance_t *tdmi; + dvb_network_t *dn = dm->dm_dn; + th_dvb_adapter_t *tda; + + LIST_FOREACH(tda, &dn->dn_adapters, tda_network_link) { + + LIST_FOREACH(tdmi, &dm->dm_tdmis, tdmi_mux_link) { + if(tdmi->tdmi_adapter != NULL) + break; + } + + if(tdmi == NULL) { + tdmi = calloc(1, sizeof(th_dvb_mux_instance_t)); + tdmi->tdmi_adapter = tda; + tdmi->tdmi_mux = dm; + LIST_INSERT_HEAD(&tda->tda_tdmis, tdmi, tdmi_adapter_link); + LIST_INSERT_HEAD(&dm->dm_tdmis, tdmi, tdmi_mux_link); + } + } +} + + + +/** + * + */ +static void +dvb_mux_stop(th_dvb_mux_instance_t *tdmi) +{ + dvb_mux_t *dm = tdmi->tdmi_mux; + th_dvb_adapter_t *tda = tdmi->tdmi_adapter; + assert(dm->dm_current_tdmi == tdmi); + assert(tda->tda_current_tdmi == tdmi); + + dvb_table_flush_all(dm); + epggrab_mux_stop(dm, 0); + + assert(dm->dm_scan_status == DM_SCAN_DONE); + + dm->dm_current_tdmi = NULL; + tda->tda_current_tdmi = NULL; + + printf("NEED TO TAKE CARE OF SERVICES in dvb_mux_stop\n"); +} + + +/** + * + */ +static int +tdmi_compute_weight(const th_dvb_mux_instance_t *tdmi) +{ + const dvb_mux_t *dm = tdmi->tdmi_mux; + if(dm->dm_scan_status == DM_SCAN_CURRENT) + return 1; + return 0; +} + + +/** + * + */ +static void +dvb_mux_initial_scan_timeout(void *aux) +{ + dvb_mux_t *dm = aux; + tvhlog(LOG_DEBUG, "dvb", "Initial scan timed out for \"%s\"", + dvb_mux_nicename(dm)); + + dvb_mux_initial_scan_done(dm); +} + + +/** + * + */ +int +dvb_mux_tune(dvb_mux_t *dm, const char *reason, int weight) +{ + dvb_network_t *dn = dm->dm_dn; + th_dvb_mux_instance_t *tdmi; + int r; + + assert(dm->dm_current_tdmi == NULL); + + lock_assert(&global_lock); + + dvb_create_tdmis(dm); + + retry: + // Figure which adapter to use + LIST_FOREACH(tdmi, &dm->dm_tdmis, tdmi_mux_link) + if(!tdmi->tdmi_tune_failed && tdmi->tdmi_adapter->tda_current_tdmi == NULL) + break; + + if(tdmi == NULL) { + // None available, need to strike one out + LIST_FOREACH(tdmi, &dm->dm_tdmis, tdmi_mux_link) { + if(tdmi->tdmi_tune_failed) + continue; + + th_dvb_adapter_t *tda = tdmi->tdmi_adapter; + th_dvb_mux_instance_t *t2 = tda->tda_current_tdmi; + assert(t2 != NULL); + assert(t2 != tdmi); + + if(tdmi_compute_weight(t2) < weight) { + dvb_mux_stop(t2); + break; + } + } + + if(tdmi == NULL) + return SM_CODE_NO_FREE_ADAPTER; + + } + + tdmi->tdmi_weight = weight; + + th_dvb_adapter_t *tda = tdmi->tdmi_adapter; + + free(tda->tda_tune_reason); + tda->tda_tune_reason = strdup(reason); + + r = dvb_fe_tune_tdmi(tdmi); + + if(r != 0) { + tvhlog(LOG_ERR, "dvb", "\"%s\" tuning to \"%s\"" + " -- Front configuration failed -- %s", + tda->tda_rootpath, dvb_mux_nicename(dm), strerror(errno)); + + /* Mark as bad */ + tdmi->tdmi_tune_failed = 1; + goto retry; + } + + tda->tda_current_tdmi = tdmi; + dm->dm_current_tdmi = tdmi; + if(dm->dm_scan_status == DM_SCAN_PENDING) { + TAILQ_REMOVE(&dn->dn_initial_scan_pending_queue, dm, dm_scan_link); + dm->dm_scan_status = DM_SCAN_CURRENT; + TAILQ_INSERT_TAIL(&dn->dn_initial_scan_current_queue, dm, dm_scan_link); + + gtimer_arm(&dm->dm_initial_scan_timeout, dvb_mux_initial_scan_timeout, dm, 10); + } + + dvb_table_add_default(dm); + epggrab_mux_start(dm); + + dvb_adapter_notify(tda); + return 0; +} diff --git a/src/dvb/dvb_network.c b/src/dvb/dvb_network.c index 4bc6d4ad..c0818446 100644 --- a/src/dvb/dvb_network.c +++ b/src/dvb/dvb_network.c @@ -235,7 +235,7 @@ dvb_network_initial_scan(void *aux) while((dm = TAILQ_FIRST(&dn->dn_initial_scan_pending_queue)) != NULL) { assert(dm->dm_scan_status == DM_SCAN_PENDING); - if(dvb_fe_tune(dm, "initial scan", 1)) + if(dvb_mux_tune(dm, "initial scan", 1)) break; assert(dm->dm_scan_status == DM_SCAN_CURRENT); } diff --git a/src/dvb/dvb_service.c b/src/dvb/dvb_service.c index 109312e2..98d14650 100644 --- a/src/dvb/dvb_service.c +++ b/src/dvb/dvb_service.c @@ -276,7 +276,6 @@ static void dvb_service_setsourceinfo(service_t *t, struct source_info *si) { dvb_mux_t *dm = t->s_dvb_mux; - char buf[100]; memset(si, 0, sizeof(struct source_info)); @@ -287,8 +286,7 @@ dvb_service_setsourceinfo(service_t *t, struct source_info *si) if(dm->dm_network_name != NULL) si->si_network = strdup(dm->dm_network_name); - dvb_mux_nicename(buf, sizeof(buf), dm); - si->si_mux = strdup(buf); + si->si_mux = strdup(dvb_mux_nicename(dm)); if(t->s_provider != NULL) si->si_provider = strdup(t->s_provider); @@ -364,7 +362,6 @@ dvb_service_find2(dvb_mux_t *dm, uint16_t sid, int pmt_pid, const char *uuid, int *save) { service_t *t; - char buf[200]; lock_assert(&global_lock); @@ -376,8 +373,8 @@ dvb_service_find2(dvb_mux_t *dm, uint16_t sid, int pmt_pid, if(pmt_pid == 0) return NULL; - dvb_mux_nicename(buf, sizeof(buf), dm); - tvhlog(LOG_DEBUG, "dvb", "Add service \"0x%x\" on \"%s\"", sid, buf); + tvhlog(LOG_DEBUG, "dvb", "Add service \"0x%x\" on \"%s\"", sid, + dvb_mux_nicename(dm)); t = service_create(uuid, S_MPEG_TS); if (save) *save = 1; @@ -396,9 +393,9 @@ dvb_service_find2(dvb_mux_t *dm, uint16_t sid, int pmt_pid, t->s_dvb_mux = dm; LIST_INSERT_HEAD(&dm->dm_services, t, s_group_link); - pthread_mutex_lock(&t->s_stream_mutex); + pthread_mutex_lock(&t->s_stream_mutex); service_make_nicename(t); - pthread_mutex_unlock(&t->s_stream_mutex); + pthread_mutex_unlock(&t->s_stream_mutex); return t; } @@ -434,8 +431,7 @@ dvb_service_serialize(service_t *s, int full) htsmsg_add_str(m, "network", dm->dm_network_name ?: ""); - dvb_mux_nicefreq(buf, sizeof(buf), dm); - htsmsg_add_str(m, "mux", buf); + htsmsg_add_str(m, "mux", dvb_mux_nicefreq(dm)); if(s->s_ch != NULL) htsmsg_add_str(m, "channelname", s->s_ch->ch_name); diff --git a/src/dvb/dvb_support.c b/src/dvb/dvb_support.c index c40cc755..fe994229 100644 --- a/src/dvb/dvb_support.c +++ b/src/dvb/dvb_support.c @@ -444,61 +444,54 @@ dvb_adapter_find_by_identifier(const char *identifier) /** * */ -static const char * -nicenum(char *x, size_t siz, unsigned int v) +static void +nicenum(char *x, size_t siz, unsigned int v, const char *postfix) { if(v < 1000) - snprintf(x, siz, "%d", v); + snprintf(x, siz, "%d%s", v, postfix); else if(v < 1000000) - snprintf(x, siz, "%d,%03d", v / 1000, v % 1000); + snprintf(x, siz, "%d,%03d%s", v / 1000, v % 1000, postfix); else if(v < 1000000000) - snprintf(x, siz, "%d,%03d,%03d", - v / 1000000, (v % 1000000) / 1000, v % 1000); - else - snprintf(x, siz, "%d,%03d,%03d,%03d", + snprintf(x, siz, "%d,%03d,%03d%s", + v / 1000000, (v % 1000000) / 1000, v % 1000, postfix); + else + snprintf(x, siz, "%d,%03d,%03d,%03d%s", v / 1000000000, (v % 1000000000) / 1000000, - (v % 1000000) / 1000, v % 1000); - return x; + (v % 1000000) / 1000, v % 1000, postfix); } /** - * + * */ -void -dvb_mux_nicefreq(char *buf, size_t size, const dvb_mux_t *dm) +const char * +dvb_mux_nicefreq(const dvb_mux_t *dm) { - char freq[50]; - - if(dm->dm_dn->dn_fe_type == FE_QPSK) { - nicenum(freq, sizeof(freq), dm->dm_conf.dmc_fe_params.frequency); - snprintf(buf, size, "%s kHz", freq); - } else { - nicenum(freq, sizeof(freq), - dm->dm_conf.dmc_fe_params.frequency / 1000); - snprintf(buf, size, "%s kHz", freq); - } + static char ret[100]; + int f = dm->dm_conf.dmc_fe_params.frequency; + nicenum(ret, sizeof(ret), dm->dm_dn->dn_fe_type == FE_QPSK ? f : f / 1000, + " kHz"); + return ret; } /** - * + * */ -void -dvb_mux_nicename(char *buf, size_t size, dvb_mux_t *dm) +const char * +dvb_mux_nicename(const dvb_mux_t *dm) { - char freq[50]; + static char ret[100]; const char *n = dm->dm_network_name; - if(dm->dm_dn->dn_fe_type == FE_QPSK) { - nicenum(freq, sizeof(freq), dm->dm_conf.dmc_fe_params.frequency); - snprintf(buf, size, "%s%s%s kHz %s", - n?:"", n ? ": ":"", freq, - dvb_polarisation_to_str_long(dm->dm_conf.dmc_polarisation)); - - } else { - nicenum(freq, sizeof(freq), dm->dm_conf.dmc_fe_params.frequency / 1000); - snprintf(buf, size, "%s%s%s kHz", n?:"", n ? ": ":"", freq); - } + snprintf(ret, sizeof(ret), "%s%s%s%s%s", + n ?: "", + n ? ": " : "", + dvb_mux_nicefreq(dm), + dm->dm_dn->dn_fe_type == FE_QPSK ? " " : "", + dm->dm_dn->dn_fe_type == FE_QPSK ? + dvb_polarisation_to_str_long(dm->dm_conf.dmc_polarisation) : + ""); + return ret; } diff --git a/src/dvb/dvb_support.h b/src/dvb/dvb_support.h index ab5ece28..762eaecb 100644 --- a/src/dvb/dvb_support.h +++ b/src/dvb/dvb_support.h @@ -79,10 +79,11 @@ const char *dvb_polarisation_to_str(int pol); const char *dvb_polarisation_to_str_long(int pol); th_dvb_adapter_t *dvb_adapter_find_by_identifier(const char *identifier); th_dvb_mux_instance_t *dvb_mux_find_by_identifier(const char *identifier); -void dvb_mux_nicename(char *buf, size_t size, dvb_mux_t *tdmi); int dvb_mux_badness(th_dvb_mux_instance_t *tdmi); const char *dvb_mux_status(th_dvb_mux_instance_t *tdmi); -void dvb_mux_nicefreq(char *buf, size_t size, const dvb_mux_t *dm); + +const char *dvb_mux_nicefreq(const dvb_mux_t *dm); +const char *dvb_mux_nicename(const dvb_mux_t *dm); void atsc_utf16_to_utf8(uint8_t *src, int len, char *buf, int buflen); diff --git a/src/v4l.c b/src/v4l.c index 9ad9a5c6..6fae6750 100644 --- a/src/v4l.c +++ b/src/v4l.c @@ -289,22 +289,12 @@ v4l_service_save(service_t *t) pthread_mutex_unlock(&t->s_stream_mutex); hts_settings_save(m, "v4lservices/%s/%s", - va->va_identifier, t->s_uuid); + va->va_identifier, idnode_uuid_as_str(&t->s_id)); htsmsg_destroy(m); } -/** - * - */ -static int -v4l_service_quality(service_t *t) -{ - return 100; -} - - /** * */ @@ -349,7 +339,7 @@ v4l_service_find(v4l_adapter_t *va, const char *id, int create) return NULL; LIST_FOREACH(t, &va->va_services, s_group_link) - if(!strcmp(t->s_uuid, id)) + if(!strcmp(idnode_uuid_as_str(&t->s_id), id)) return t; } @@ -371,7 +361,6 @@ v4l_service_find(v4l_adapter_t *va, const char *id, int create) t->s_stop_feed = v4l_service_stop; t->s_config_save = v4l_service_save; t->s_setsourceinfo = v4l_service_setsourceinfo; - t->s_quality_index = v4l_service_quality; t->s_grace_period = v4l_grace_period; t->s_iptv_fd = -1; t->s_v4l_adapter = va; diff --git a/src/webui/extjs_v4l.c b/src/webui/extjs_v4l.c index f7e02630..ad1d4833 100644 --- a/src/webui/extjs_v4l.c +++ b/src/webui/extjs_v4l.c @@ -170,7 +170,7 @@ build_record_v4l(service_t *t) { htsmsg_t *r = htsmsg_create_map(); - htsmsg_add_str(r, "id", t->s_identifier); + // htsmsg_add_str(r, "id", t->s_identifier); // XXX(dvbreorg) htsmsg_add_str(r, "channelname", t->s_ch ? t->s_ch->ch_name : ""); htsmsg_add_u32(r, "frequency", t->s_v4l_frequency);