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).
</p>
<p>
*
*/
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;
return 0;
}
+/*
+ *
+ */
+static uint32_t
+bouquet_get_tag_number(bouquet_t *bq, service_t *t)
+{
+ return 0;
+}
+
/**
*
*/
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;
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);
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);
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);
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);
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
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);
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);
}