h265_profile_level.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * This file is part of FFmpeg.
  3. *
  4. * FFmpeg is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * FFmpeg is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with FFmpeg; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  17. */
  18. #ifndef AVCODEC_H265_PROFILE_LEVEL_H
  19. #define AVCODEC_H265_PROFILE_LEVEL_H
  20. #include <stdint.h>
  21. #include "cbs_h265.h"
  22. typedef struct H265LevelDescriptor {
  23. const char *name;
  24. uint8_t level_idc;
  25. // Table A.6.
  26. uint32_t max_luma_ps;
  27. uint32_t max_cpb_main;
  28. uint32_t max_cpb_high;
  29. uint16_t max_slice_segments_per_picture;
  30. uint8_t max_tile_rows;
  31. uint8_t max_tile_cols;
  32. // Table A.7.
  33. uint32_t max_luma_sr;
  34. uint32_t max_br_main;
  35. uint32_t max_br_high;
  36. uint8_t min_cr_base_main;
  37. uint8_t min_cr_base_high;
  38. } H265LevelDescriptor;
  39. typedef struct H265ProfileDescriptor {
  40. const char *name;
  41. uint8_t profile_idc;
  42. uint8_t high_throughput;
  43. // Tables A.2, A.3 and A.5.
  44. uint8_t max_14bit;
  45. uint8_t max_12bit;
  46. uint8_t max_10bit;
  47. uint8_t max_8bit;
  48. uint8_t max_422chroma;
  49. uint8_t max_420chroma;
  50. uint8_t max_monochrome;
  51. uint8_t intra;
  52. uint8_t one_picture_only;
  53. uint8_t lower_bit_rate;
  54. // Table A.8.
  55. uint16_t cpb_vcl_factor;
  56. uint16_t cpb_nal_factor;
  57. float format_capability_factor;
  58. float min_cr_scale_factor;
  59. uint8_t max_dpb_pic_buf;
  60. } H265ProfileDescriptor;
  61. const H265LevelDescriptor *ff_h265_get_level(int level_idc);
  62. const H265ProfileDescriptor *ff_h265_get_profile(const H265RawProfileTierLevel *ptl);
  63. /**
  64. * Guess the level of a stream from some parameters.
  65. *
  66. * Unknown parameters may be zero, in which case they are ignored.
  67. */
  68. const H265LevelDescriptor *ff_h265_guess_level(const H265RawProfileTierLevel *ptl,
  69. int64_t bitrate,
  70. int width, int height,
  71. int slice_segments,
  72. int tile_rows, int tile_cols,
  73. int max_dec_pic_buffering);
  74. #endif /* AVCODEC_H265_PROFILE_LEVEL_H */