]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
add servicetype HEVC according to DVB specs
authorGlenn-1990 <g_christiaensen@msn.com>
Sat, 9 Apr 2016 20:25:01 +0000 (22:25 +0200)
committerJaroslav Kysela <perex@perex.cz>
Mon, 11 Apr 2016 08:56:16 +0000 (10:56 +0200)
src/input/mpegts/dvb_psi_lib.c
src/service.c
src/service.h

index c8a96d138abb2d25406af43509f48d8e2480b071..d60cc4549f7f67e24b93549cca25ad2b22d6eda9 100644 (file)
@@ -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
index e53a81af41933bbd368d44d1930ca4b640195be2..244c9b07ac96e217f1899e3429ff4ebae1562539 100644 (file)
@@ -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];
 }
 
 
index 32bff5c6bfd9c5c108d47e3facd3b8b885f7897d..a568ccd3b500c6cf4bf6756998e448e64f892eed 100644 (file)
@@ -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 );