[bTSstream-devel] [Git][videolan/bitstream][master] 2 commits: h265: text description of profiles

Rafaël Carré (@funman) gitlab at videolan.org
Thu Jan 8 10:11:46 UTC 2026



Rafaël Carré pushed to branch master at VideoLAN / bitstream


Commits:
0a54f554 by Rafaël Carré at 2026-01-08T10:44:01+01:00
h265: text description of profiles

- - - - -
fe563b69 by Rafaël Carré at 2026-01-08T10:44:01+01:00
h265: text description of range extension profiles

- - - - -


1 changed file:

- itu/h265.h


Changes:

=====================================
itu/h265.h
=====================================
@@ -412,6 +412,89 @@ static inline uint32_t h265hvcc_get_profile_compatibility(const uint8_t *p)
     return (p[2] << 24) | (p[3] << 16) | (p[4] << 8) | p[5];
 }
 
+static inline const char *h265_get_range_ext_profile(bool max_12bit, bool max_10bit, bool max_8bit, bool max_422chroma, bool max_420chroma, bool max_monochrome, bool intra, bool one_picture_only, bool lower_bit_rate)
+{
+    /* ITU-T H.265 (V9) Table A.2 */
+
+    union constraint {
+        struct {
+            bool max_12bit: 1;
+            bool max_10bit: 1;
+            bool max_8bit: 1;
+            bool max_422chroma: 1;
+            bool max_420chroma: 1;
+            bool max_monochrome: 1;
+            bool intra: 1;
+            bool one_picture_only: 1;
+        };
+        unsigned int constraint;
+    };
+
+    static const struct {
+        const char name[32];
+        union constraint c;
+    } profile_name[] = {
+        { "Monochrome",                     { { 1, 1, 1, 1, 1, 1, 0, 0, } }, },
+        { "Monochrome 10",                  { { 1, 1, 0, 1, 1, 1, 0, 0, } }, },
+        { "Monochrome 12",                  { { 1, 0, 0, 1, 1, 1, 0, 0, } }, },
+        { "Monochrome 16",                  { { 0, 0, 0, 1, 1, 1, 0, 0, } }, },
+        { "Main 12",                        { { 1, 0, 0, 1, 1, 0, 0, 0, } }, },
+        { "Main 4:2:2 10",                  { { 1, 1, 0, 1, 0, 0, 0, 0, } }, },
+        { "Main 4:2:2 12",                  { { 1, 0, 0, 1, 0, 0, 0, 0, } }, },
+        { "Main 4:4:4",                     { { 1, 1, 1, 0, 0, 0, 0, 0, } }, },
+        { "Main 4:4:4 10",                  { { 1, 1, 0, 0, 0, 0, 0, 0, } }, },
+        { "Main 4:4:4 12",                  { { 1, 0, 0, 0, 0, 0, 0, 0, } }, },
+        { "Main Intra",                     { { 1, 1, 1, 1, 1, 0, 1, 0, } }, },
+        { "Main 10 Intra",                  { { 1, 1, 0, 1, 1, 0, 1, 0, } }, },
+        { "Main 12 Intra",                  { { 1, 0, 0, 1, 1, 0, 1, 0, } }, },
+        { "Main 4:2:2 10 Intra",            { { 1, 1, 0, 1, 0, 0, 1, 0, } }, },
+        { "Main 4:2:2 12 Intra",            { { 1, 0, 0, 1, 0, 0, 1, 0, } }, },
+        { "Main 4:4:4 Intra",               { { 1, 1, 1, 0, 0, 0, 1, 0, } }, },
+        { "Main 4:4:4 10 Intra",            { { 1, 1, 0, 0, 0, 0, 1, 0, } }, },
+        { "Main 4:4:4 12 Intra",            { { 1, 0, 0, 0, 0, 0, 1, 0, } }, },
+        { "Main 4:4:4 16 Intra",            { { 0, 0, 0, 0, 0, 0, 1, 0, } }, },
+        { "Main 4:4:4 Still Picture",       { { 1, 1, 1, 0, 0, 0, 1, 1, } }, },
+        { "Main 4:4:4 16 Still Picture",    { { 0, 0, 0, 0, 0, 0, 1, 1, } }, },
+    };
+
+    const union constraint c = {
+        .max_12bit = max_12bit,
+        .max_10bit = max_10bit,
+        .max_8bit = max_8bit,
+        .max_422chroma = max_422chroma,
+        .max_420chroma = max_420chroma,
+        .max_monochrome = max_monochrome,
+        .intra = intra,
+        .one_picture_only = one_picture_only,
+    };
+
+    if (!intra && !lower_bit_rate)
+        goto unknown;
+
+    for (int i = 0; i < sizeof(profile_name) / sizeof(*profile_name); i++)
+        if (profile_name[i].c.constraint == c.constraint)
+            return profile_name[i].name;
+
+unknown:
+    return "Range ext unknown profile";
+}
+
+static inline const char *h265_get_profile_txt(uint8_t i_profile)
+{
+    return i_profile == 0 ? "None" :
+           i_profile == 1 ? "Main" :
+           i_profile == 2 ? "Main 10" :
+           i_profile == 3 ? "Main Still Picture" :
+           i_profile == 4 ? "Range Extension" :
+           i_profile == 5 ? "High Throughput" :
+           i_profile == 6 ? "Multiview Main" :
+           i_profile == 7 ? "Scalable Main" :
+           i_profile == 8 ? "3D Main" :
+           i_profile == 9 ? "Screen-Extended" :
+           i_profile == 10 ? "Scalable Range Extension" :
+           i_profile == 11 ? "Screen-Extended High Throughput" : "Reserved";
+}
+
 static inline void h265hvcc_set_constraint_indicator(uint8_t *p, uint64_t val)
 {
     p[6] = val >> 40;



View it on GitLab: https://code.videolan.org/videolan/bitstream/-/compare/63ba51fe06b17d410670fe5abe506c50bcbcb843...fe563b6956438929d6e7ab7490a860f3ccd453b8

-- 
View it on GitLab: https://code.videolan.org/videolan/bitstream/-/compare/63ba51fe06b17d410670fe5abe506c50bcbcb843...fe563b6956438929d6e7ab7490a860f3ccd453b8
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the biTStream-devel mailing list