From 45d00a3dd153d790f7c81ca7335b1144e03df940 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 13 Oct 2014 20:15:40 +0200 Subject: [PATCH] mpegts network: Allow to ignore the channel numbers set by a provider --- src/input/mpegts.h | 1 + src/input/mpegts/mpegts_network.c | 7 +++++++ src/input/mpegts/mpegts_service.c | 11 ++++++++--- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/input/mpegts.h b/src/input/mpegts.h index b6a0e24a..addb8f9a 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -291,6 +291,7 @@ struct mpegts_network int mn_skipinitscan; char *mn_charset; int mn_idlescan; + int mn_ignore_chnum; }; typedef enum mpegts_mux_scan_state diff --git a/src/input/mpegts/mpegts_network.c b/src/input/mpegts/mpegts_network.c index 9cbefe1f..d7f8561c 100644 --- a/src/input/mpegts/mpegts_network.c +++ b/src/input/mpegts/mpegts_network.c @@ -149,6 +149,13 @@ const idclass_t mpegts_network_class = .def.i = 0, .notify = mpegts_network_class_idlescan_notify, }, + { + .type = PT_BOOL, + .id = "ignore_chnum", + .name = "Ignore Provider's Channel Numbers", + .off = offsetof(mpegts_network_t, mn_ignore_chnum), + .def.i = 0, + }, { .type = PT_STR, .id = "charset", diff --git a/src/input/mpegts/mpegts_service.c b/src/input/mpegts/mpegts_service.c index e1dba191..b966f8c6 100644 --- a/src/input/mpegts/mpegts_service.c +++ b/src/input/mpegts/mpegts_service.c @@ -376,10 +376,15 @@ mpegts_service_grace_period(service_t *t) static int64_t mpegts_service_channel_number ( service_t *s ) { - int r = ((mpegts_service_t*)s)->s_dvb_channel_num * CHANNEL_SPLIT + - ((mpegts_service_t*)s)->s_dvb_channel_minor; + mpegts_service_t *ms = (mpegts_service_t*)s; + int r; + + if (ms->s_dvb_mux->mm_network->mn_ignore_chnum) + return 0; + + r = ms->s_dvb_channel_num * CHANNEL_SPLIT + ms->s_dvb_channel_minor; if (r <= 0) - r = ((mpegts_service_t*)s)->s_dvb_opentv_chnum * CHANNEL_SPLIT; + r = ms->s_dvb_opentv_chnum * CHANNEL_SPLIT; return r; }