Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
bouquet: fix the per-bouquet LCN handling
  • Loading branch information
perexg committed Nov 8, 2014
1 parent 1af5f9f commit bdaab51
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 22 deletions.
39 changes: 21 additions & 18 deletions src/bouquet.c
Expand Up @@ -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;

Expand All @@ -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);
bq->bq_saveflag = 1;
}

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;
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;
if (bq->bq_enabled && bq->bq_maptoch)
bouquet_map_channel(bq, s);
} 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);
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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));
}

Expand Down
2 changes: 1 addition & 1 deletion src/bouquet.h
Expand Up @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions src/input/mpegts/dvb_psi.c
Expand Up @@ -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
Expand Down Expand Up @@ -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);
}
Expand Down
2 changes: 1 addition & 1 deletion src/service.h
Expand Up @@ -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;

Expand Down

0 comments on commit bdaab51

Please sign in to comment.