[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