From: Jaroslav Kysela Date: Fri, 7 Nov 2014 10:03:38 +0000 (+0100) Subject: bouquet: prepare storage for tags X-Git-Tag: v4.1~819 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=abef9138713249ecc29076a565997c0df440c2a0;p=thirdparty%2Ftvheadend.git bouquet: prepare storage for tags --- diff --git a/docs/html/config_bouquet.html b/docs/html/config_bouquet.html index 9aaa11f4b..1970e73e0 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 13d6bc656..b0840f736 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 0a992f262..bf37c1924 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 bf3dde8f6..27a694c76 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); }