From: Adam Sutton Date: Fri, 10 May 2013 13:31:58 +0000 (+0100) Subject: mpegts: added missing LCN processing X-Git-Tag: v3.9^2~197 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=00f0137bb69ffb128288441dfabb3e928afc4334;p=thirdparty%2Ftvheadend.git mpegts: added missing LCN processing --- diff --git a/src/input/mpegts/dvb_psi.c b/src/input/mpegts/dvb_psi.c index 3dbbd149c..d80fc12f2 100644 --- a/src/input/mpegts/dvb_psi.c +++ b/src/input/mpegts/dvb_psi.c @@ -336,6 +336,35 @@ dvb_desc_service_list return 0; } +static int +dvb_desc_local_channel + ( const char *dstr, const uint8_t *ptr, int len, mpegts_mux_t *mm ) +{ + int save = 0; + uint16_t sid, lcn; + + while(len >= 4) { + sid = (ptr[0] << 8) | ptr[1]; + lcn = ((ptr[2] & 3) << 8) | ptr[3]; + tvhtrace(dstr, " sid %d lcn %d", sid, lcn); + if (lcn && mm) { + mpegts_service_t *s = mpegts_service_find(mm, sid, 0, NULL, &save); + if (s) { + if (s->s_dvb_channel_num != lcn) { + s->s_dvb_channel_num = lcn; + s->s_config_save((service_t*)s); + service_refresh_channel((service_t*)s); + } + } + } + ptr += 4; + len -= 4; + } + return 0; +} + + + /* ************************************************************************** * Tables * *************************************************************************/ @@ -550,6 +579,8 @@ dvb_nit_callback mpegts_mux_set_default_authority(mux, dauth); break; case DVB_DESC_LOCAL_CHAN: + if (dvb_desc_local_channel(dstr, dptr, dlen, mux)) + return -1; break; case DVB_DESC_SERVICE_LIST: if (dvb_desc_service_list(dstr, dptr, dlen, mux))