bouquet: fix the per-bouquet LCN handling
This commit is contained in:
parent
1af5f9f5d1
commit
bdaab51c30
4 changed files with 27 additions and 24 deletions
|
@ -245,7 +245,7 @@ bouquet_map_channel(bouquet_t *bq, service_t *t)
|
|||
*
|
||||
*/
|
||||
void
|
||||
bouquet_add_service(bouquet_t *bq, service_t *s, uint32_t lcn)
|
||||
bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn)
|
||||
{
|
||||
service_lcn_t *tl;
|
||||
|
||||
|
@ -254,25 +254,28 @@ bouquet_add_service(bouquet_t *bq, service_t *s, uint32_t lcn)
|
|||
if (!idnode_set_exists(bq->bq_services, &s->s_id)) {
|
||||
tvhtrace("bouquet", "add service %s to %s", s->s_nicename, bq->bq_name ?: "<unknown>");
|
||||
idnode_set_add(bq->bq_services, &s->s_id, NULL);
|
||||
|
||||
LIST_FOREACH(tl, &s->s_lcns, sl_link)
|
||||
if (tl->sl_bouquet == bq) {
|
||||
tl->sl_lcn = lcn;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!tl) {
|
||||
tl = calloc(1, sizeof(*tl));
|
||||
tl->sl_bouquet = bq;
|
||||
tl->sl_lcn = lcn;
|
||||
LIST_INSERT_HEAD(&s->s_lcns, tl, sl_link);
|
||||
}
|
||||
tl->sl_seen = 1;
|
||||
|
||||
bq->bq_saveflag = 1;
|
||||
if (bq->bq_enabled && bq->bq_maptoch)
|
||||
bouquet_map_channel(bq, s);
|
||||
}
|
||||
|
||||
LIST_FOREACH(tl, &s->s_lcns, sl_link)
|
||||
if (tl->sl_bouquet == bq)
|
||||
break;
|
||||
|
||||
if (!tl) {
|
||||
tl = calloc(1, sizeof(*tl));
|
||||
tl->sl_bouquet = bq;
|
||||
LIST_INSERT_HEAD(&s->s_lcns, tl, sl_link);
|
||||
bq->bq_saveflag = 1;
|
||||
} else {
|
||||
if (tl->sl_lcn != lcn)
|
||||
bq->bq_saveflag = 1;
|
||||
}
|
||||
tl->sl_lcn = lcn;
|
||||
tl->sl_seen = 1;
|
||||
|
||||
if (bq->bq_enabled && bq->bq_maptoch)
|
||||
bouquet_map_channel(bq, s);
|
||||
|
||||
if (!bq->bq_in_load &&
|
||||
!idnode_set_exists(bq->bq_active_services, &s->s_id))
|
||||
idnode_set_add(bq->bq_active_services, &s->s_id, NULL);
|
||||
|
@ -407,7 +410,7 @@ bouquet_get_channel_number(bouquet_t *bq, service_t *t)
|
|||
|
||||
LIST_FOREACH(tl, &t->s_lcns, sl_link)
|
||||
if (tl->sl_bouquet == bq)
|
||||
return (int64_t)tl->sl_lcn * CHANNEL_SPLIT;
|
||||
return (int64_t)tl->sl_lcn;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -629,7 +632,7 @@ bouquet_class_services_get ( void *obj )
|
|||
/* Add all */
|
||||
for (z = 0; z < bq->bq_services->is_count; z++) {
|
||||
t = (service_t *)bq->bq_services->is_array[z];
|
||||
htsmsg_add_u32(m, idnode_uuid_as_str(&t->s_id),
|
||||
htsmsg_add_s64(m, idnode_uuid_as_str(&t->s_id),
|
||||
bouquet_get_channel_number(bq, t));
|
||||
}
|
||||
|
||||
|
|
|
@ -77,7 +77,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, uint32_t lcn);
|
||||
void bouquet_add_service(bouquet_t *bq, service_t *s, uint64_t lcn);
|
||||
void bouquet_completed(bouquet_t *bq);
|
||||
|
||||
uint64_t bouquet_get_channel_number(bouquet_t *bq, service_t *t);
|
||||
|
|
|
@ -524,7 +524,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, lcn);
|
||||
bouquet_add_service(fr->bouquet, (service_t *)s, lcn * CHANNEL_SPLIT);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -687,7 +687,7 @@ dvb_bskyb_local_channels
|
|||
if (!fs) {
|
||||
fs = calloc(1, sizeof(*fs));
|
||||
fs->sid = sid;
|
||||
fs->regionid = regionid == 0xff ? 0xffff : regionid;
|
||||
fs->regionid = regionid != 0xff ? regionid : 0xffff;
|
||||
fs->lcn = lcn != 0xffff ? lcn : 0;
|
||||
TAILQ_INSERT_TAIL(&b->fservices, fs, link);
|
||||
}
|
||||
|
|
|
@ -186,7 +186,7 @@ void service_instance_list_clear(service_instance_list_t *sil);
|
|||
typedef struct service_lcn {
|
||||
LIST_ENTRY(service_lcn) sl_link;
|
||||
void *sl_bouquet;
|
||||
uint32_t sl_lcn;
|
||||
uint64_t sl_lcn;
|
||||
uint8_t sl_seen;
|
||||
} service_lcn_t;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue