diff --git a/docs/html/config_bouquet.html b/docs/html/config_bouquet.html index 9aaa11f4..1970e73e 100644 --- a/docs/html/config_bouquet.html +++ b/docs/html/config_bouquet.html @@ -5,7 +5,7 @@ The bouquets are obtained automatically from the DVB source during the mux scan period. Note that bouquets may use more muxes and only services from scanned muxes are added. The mux with bouquets might require another scan when all muxes are discovered (manually using -a stream for the mux or reset the mux scan state to pending). +the rescan checkbox).

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); }