Skip to content

Commit 98d1ce5

Browse files
committed
h265: text description of range extension profiles
1 parent 686ec4d commit 98d1ce5

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

itu/h265.h

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,103 @@ static inline uint32_t h265hvcc_get_profile_compatibility(const uint8_t *p)
412412
return (p[2] << 24) | (p[3] << 16) | (p[4] << 8) | p[5];
413413
}
414414

415+
static 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)
416+
{
417+
/* ITU-T H.265 (V9) Table A.2 */
418+
419+
#define H265_CONSTRAINT_MAX_12BIT 7
420+
#define H265_CONSTRAINT_MAX_10BIT 6
421+
#define H265_CONSTRAINT_MAX_8BIT 5
422+
#define H265_CONSTRAINT_MAX_422CHROMA 4
423+
#define H265_CONSTRAINT_MAX_420CHROMA 3
424+
#define H265_CONSTRAINT_MAX_MONOCHROME 2
425+
#define H265_CONSTRAINT_INTRA 1
426+
#define H265_CONSTRAINT_ONE_PICTURE_ONLY 0
427+
428+
#define H265_PROFILE_16_BIT 0
429+
#define H265_PROFILE_12_BIT (1 << H265_CONSTRAINT_MAX_12BIT)
430+
#define H265_PROFILE_10_BIT (1 << H265_CONSTRAINT_MAX_12BIT | 1 << H265_CONSTRAINT_MAX_10BIT)
431+
#define H265_PROFILE_8_BIT (1 << H265_CONSTRAINT_MAX_12BIT | 1 << H265_CONSTRAINT_MAX_10BIT | 1 << H265_CONSTRAINT_MAX_8BIT)
432+
433+
#define H265_PROFILE_INTRA (1 << H265_CONSTRAINT_INTRA)
434+
435+
#define H265_PROFILE_STILL_PICTURE (H265_PROFILE_INTRA | 1 << H265_CONSTRAINT_ONE_PICTURE_ONLY)
436+
437+
#define H265_PROFILE_444 0
438+
#define H265_PROFILE_422 (1 << H265_CONSTRAINT_MAX_422CHROMA)
439+
#define H265_PROFILE_420 (1 << H265_CONSTRAINT_MAX_422CHROMA | 1 << H265_CONSTRAINT_MAX_420CHROMA)
440+
441+
#define H265_PROFILE_MONOCHROME (H265_PROFILE_420 | 1 << H265_CONSTRAINT_MAX_MONOCHROME)
442+
443+
uint8_t constraint = (!!max_12bit << H265_CONSTRAINT_MAX_12BIT) |
444+
(!!max_10bit << H265_CONSTRAINT_MAX_10BIT) |
445+
(!!max_8bit << H265_CONSTRAINT_MAX_8BIT) |
446+
(!!max_422chroma << H265_CONSTRAINT_MAX_422CHROMA) |
447+
(!!max_420chroma << H265_CONSTRAINT_MAX_420CHROMA) |
448+
(!!max_monochrome << H265_CONSTRAINT_MAX_MONOCHROME) |
449+
(!!intra << H265_CONSTRAINT_INTRA) |
450+
(!!one_picture_only << H265_CONSTRAINT_ONE_PICTURE_ONLY);
451+
452+
if (!intra && !lower_bit_rate)
453+
goto unknown;
454+
455+
switch (constraint) {
456+
case H265_PROFILE_MONOCHROME | H265_PROFILE_8_BIT:
457+
return "Monochrome";
458+
case H265_PROFILE_MONOCHROME | H265_PROFILE_10_BIT:
459+
return "Monochrome 10";
460+
case H265_PROFILE_MONOCHROME | H265_PROFILE_12_BIT:
461+
return "Monochrome 12";
462+
case H265_PROFILE_MONOCHROME | H265_PROFILE_16_BIT:
463+
return "Monochrome 16";
464+
465+
case H265_PROFILE_12_BIT | H265_PROFILE_420:
466+
return "Main 12";
467+
case H265_PROFILE_10_BIT | H265_PROFILE_422:
468+
return "Main 4:2:2 10";
469+
case H265_PROFILE_12_BIT | H265_PROFILE_422:
470+
return "Main 4:2:2 12";
471+
472+
case H265_PROFILE_8_BIT | H265_PROFILE_444:
473+
return "Main 4:4:4";
474+
case H265_PROFILE_10_BIT | H265_PROFILE_444:
475+
return "Main 4:4:4 10";
476+
case H265_PROFILE_12_BIT | H265_PROFILE_444:
477+
return "Main 4:4:4 12";
478+
479+
case H265_PROFILE_8_BIT | H265_PROFILE_420 | H265_PROFILE_INTRA:
480+
return "Main Intra";
481+
case H265_PROFILE_10_BIT | H265_PROFILE_420 | H265_PROFILE_INTRA:
482+
return "Main 10 Intra";
483+
case H265_PROFILE_12_BIT | H265_PROFILE_420 | H265_PROFILE_INTRA:
484+
return "Main 12 Intra";
485+
486+
case H265_PROFILE_10_BIT | H265_PROFILE_422 | H265_PROFILE_INTRA:
487+
return "Main 4:2:2 10 Intra";
488+
case H265_PROFILE_12_BIT | H265_PROFILE_422 | H265_PROFILE_INTRA:
489+
return "Main 4:2:2 12 Intra";
490+
491+
case H265_PROFILE_8_BIT | H265_PROFILE_444 | H265_PROFILE_INTRA:
492+
return "Main 4:4:4 Intra";
493+
case H265_PROFILE_10_BIT | H265_PROFILE_444 | H265_PROFILE_INTRA:
494+
return "Main 4:4:4 10 Intra";
495+
case H265_PROFILE_12_BIT | H265_PROFILE_444 | H265_PROFILE_INTRA:
496+
return "Main 4:4:4 12 Intra";
497+
case H265_PROFILE_16_BIT | H265_PROFILE_444 | H265_PROFILE_INTRA:
498+
return "Main 4:4:4 16 Intra";
499+
500+
case H265_PROFILE_8_BIT | H265_PROFILE_444 | H265_PROFILE_STILL_PICTURE:
501+
return "Main 4:4:4 Still Picture";
502+
case H265_PROFILE_16_BIT | H265_PROFILE_444 | H265_PROFILE_STILL_PICTURE:
503+
return "Main 4:4:4 16 Still Picture";
504+
default:
505+
break;
506+
};
507+
508+
unknown:
509+
return "Range ext unknown profile";
510+
}
511+
415512
static inline const char *h265_get_profile_txt(uint8_t i_profile)
416513
{
417514
return i_profile == 0 ? "None" :

0 commit comments

Comments
 (0)