From abef9138713249ecc29076a565997c0df440c2a0 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela
diff --git a/src/bouquet.c b/src/bouquet.c index 13d6bc65..b0840f73 100644 --- a/src/bouquet.c +++ b/src/bouquet.c @@ -247,7 +247,7 @@ bouquet_map_channel(bouquet_t *bq, service_t *t) * */ void -bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn) +bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn, uint32_t tag) { service_lcn_t *tl; channel_service_mapping_t *csm; @@ -465,6 +465,15 @@ bouquet_get_channel_number(bouquet_t *bq, service_t *t) return 0; } +/* + * + */ +static uint32_t +bouquet_get_tag_number(bouquet_t *bq, service_t *t) +{ + return 0; +} + /** * */ @@ -692,16 +701,22 @@ bouquet_class_chtag_ref_set ( void *obj, const void *p ) static const void * bouquet_class_services_get ( void *obj ) { - htsmsg_t *m = htsmsg_create_map(); + htsmsg_t *m = htsmsg_create_map(), *e; bouquet_t *bq = obj; service_t *t; + int64_t lcn; + uint32_t tag; size_t z; /* Add all */ for (z = 0; z < bq->bq_services->is_count; z++) { t = (service_t *)bq->bq_services->is_array[z]; - htsmsg_add_s64(m, idnode_uuid_as_str(&t->s_id), - bouquet_get_channel_number0(bq, t)); + e = htsmsg_create_map(); + if ((lcn = bouquet_get_channel_number0(bq, t)) != 0) + htsmsg_add_s64(e, "lcn", lcn); + if ((tag = bouquet_get_tag_number(bq, t)) != 0) + htsmsg_add_s64(e, "tag", lcn); + htsmsg_add_msg(m, idnode_uuid_as_str(&t->s_id), e); } return m; @@ -888,9 +903,11 @@ void bouquet_service_resolve(void) { bouquet_t *bq; + htsmsg_t *e; htsmsg_field_t *f; service_t *s; - uint32_t lcn; + int64_t lcn; + uint32_t tag; int saveflag; lock_assert(&global_lock); @@ -901,10 +918,12 @@ bouquet_service_resolve(void) saveflag = bq->bq_saveflag; if (bq->bq_enabled) { HTSMSG_FOREACH(f, bq->bq_services_waiting) { - if (htsmsg_field_get_u32(f, &lcn)) continue; + if ((e = htsmsg_field_get_map(f)) == NULL) continue; + lcn = htsmsg_get_s64_or_default(e, "lcn", 0); + tag = htsmsg_get_u32_or_default(e, "tag", 0); s = service_find_by_identifier(f->hmf_name); if (s) - bouquet_add_service(bq, s, lcn); + bouquet_add_service(bq, s, lcn, tag); } } htsmsg_destroy(bq->bq_services_waiting); diff --git a/src/bouquet.h b/src/bouquet.h index 0a992f26..bf37c192 100644 --- a/src/bouquet.h +++ b/src/bouquet.h @@ -82,7 +82,7 @@ bouquet_t * bouquet_find_by_source(const char *name, const char *src, int create void bouquet_map_to_channels(bouquet_t *bq); void bouquet_notify_channels(bouquet_t *bq); -void bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn); +void bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn, uint32_t tag); void bouquet_completed(bouquet_t *bq, uint32_t seen); uint64_t bouquet_get_channel_number(bouquet_t *bq, service_t *t); diff --git a/src/input/mpegts/dvb_psi.c b/src/input/mpegts/dvb_psi.c index bf3dde8f..27a694c7 100644 --- a/src/input/mpegts/dvb_psi.c +++ b/src/input/mpegts/dvb_psi.c @@ -399,7 +399,7 @@ dvb_desc_service_list bs->svc = s; TAILQ_INSERT_TAIL(&bi->services, bs, link); } else if (bq) { - bouquet_add_service(bq, (service_t *)s, 0); + bouquet_add_service(bq, (service_t *)s, 0, 0); } if (save) s->s_config_save((service_t*)s); @@ -527,7 +527,7 @@ dvb_freesat_add_service snprintf(name, sizeof(name), "%s: %s", bi->name, fr->name); fr->bouquet = bouquet_find_by_source(name, src, 1); } - bouquet_add_service(fr->bouquet, (service_t *)s, (int64_t)lcn * CHANNEL_SPLIT); + bouquet_add_service(fr->bouquet, (service_t *)s, (int64_t)lcn * CHANNEL_SPLIT, 0); } static void @@ -1178,7 +1178,7 @@ dvb_bat_completed dvb_bouquet_comment(bq, bi->mm); TAILQ_FOREACH(bs, &bi->services, link) - bouquet_add_service(bq, (service_t *)bs->svc, 0); + bouquet_add_service(bq, (service_t *)bs->svc, 0, 0); bouquet_completed(bq, bi->services_count); @@ -1747,7 +1747,7 @@ dvb_fs_sdt_callback s = mpegts_service_find(mux, service_id, 0, 1, &save); charset = dvb_charset_find(mn, mux, s); if (bq && s) { - bouquet_add_service(bq, (service_t *)s, 0); + bouquet_add_service(bq, (service_t *)s, 0, 0); } else { tvhtrace(mt->mt_name, " service not found (bq %p, svc %p)", bq, s); }