From: Glenn-1990 Date: Sat, 9 Apr 2016 20:25:01 +0000 (+0200) Subject: add servicetype HEVC according to DVB specs X-Git-Tag: v4.2.1~679 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4eb3de6dc3ddafc8372e99aba1a68ab9ffeaffd9;p=thirdparty%2Ftvheadend.git add servicetype HEVC according to DVB specs --- diff --git a/src/input/mpegts/dvb_psi_lib.c b/src/input/mpegts/dvb_psi_lib.c index c8a96d138..d60cc4549 100644 --- a/src/input/mpegts/dvb_psi_lib.c +++ b/src/input/mpegts/dvb_psi_lib.c @@ -41,6 +41,7 @@ static const int dvb_servicetype_map[][2] = { { 0xA6, ST_HDTV }, /* Bell TV tiered HDTV */ { 0xA8, ST_SDTV }, /* DN advanced SDTV */ { 0xD3, ST_SDTV }, /* SKY TV SDTV */ + { 0x1F, ST_UHDTV }, /* HEVC (assume all HEVC content is UHD?) */ }; int diff --git a/src/service.c b/src/service.c index e53a81af4..244c9b07a 100644 --- a/src/service.c +++ b/src/service.c @@ -155,7 +155,8 @@ service_type_auto_list ( void *o, const char *lang ) { N_("None"), ST_NONE }, { N_("Radio"), ST_RADIO }, { N_("SD TV"), ST_SDTV }, - { N_("HD TV"), ST_HDTV } + { N_("HD TV"), ST_HDTV }, + { N_("UHD TV"), ST_UHDTV } }; return strtab2htsmsg(tab, 1, lang); } @@ -1194,7 +1195,27 @@ service_is_hdtv(service_t *t) else if (s_type == ST_NONE) { elementary_stream_t *st; TAILQ_FOREACH(st, &t->s_components, es_link) - if (SCT_ISVIDEO(st->es_type) && st->es_height >= 720) + if (SCT_ISVIDEO(st->es_type) && + st->es_height >= 720 && st->es_height <= 1080) + return 1; + } + return 0; +} + +int +service_is_uhdtv(service_t *t) +{ + char s_type; + if(t->s_type_user == ST_UNSET) + s_type = t->s_servicetype; + else + s_type = t->s_type_user; + if (s_type == ST_UHDTV) + return 1; + else if (s_type == ST_NONE) { + elementary_stream_t *st; + TAILQ_FOREACH(st, &t->s_components, es_link) + if (SCT_ISVIDEO(st->es_type) && st->es_height > 1080) return 1; } return 0; @@ -1246,12 +1267,13 @@ const char * service_servicetype_txt ( service_t *s ) { static const char *types[] = { - "HDTV", "SDTV", "Radio", "Other" + "HDTV", "SDTV", "Radio", "UHDTV", "Other" }; if (service_is_hdtv(s)) return types[0]; if (service_is_sdtv(s)) return types[1]; if (service_is_radio(s)) return types[2]; - return types[3]; + if (service_is_uhdtv(s)) return types[3]; + return types[4]; } diff --git a/src/service.h b/src/service.h index 32bff5c6b..a568ccd3b 100644 --- a/src/service.h +++ b/src/service.h @@ -276,6 +276,7 @@ typedef struct service { ST_OTHER, ST_SDTV, ST_HDTV, + ST_UHDTV, ST_RADIO } s_servicetype; @@ -541,10 +542,11 @@ const char *service_servicetype_txt(service_t *t); int service_has_audio_or_video(service_t *t); int service_is_sdtv(service_t *t); +int service_is_uhdtv(service_t *t); int service_is_hdtv(service_t *t); int service_is_radio(service_t *t); int service_is_other(service_t *t); -#define service_is_tv(s) (service_is_hdtv(s) || service_is_sdtv(s)) +#define service_is_tv(s) (service_is_hdtv(s) || service_is_sdtv(s) || service_is_uhdtv(s)) int service_is_encrypted ( service_t *t );