@@ -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+
415512static inline const char * h265_get_profile_txt (uint8_t i_profile )
416513{
417514 return i_profile == 0 ? "None" :
0 commit comments