Path: blob/21.2-virgl/include/vk_video/vulkan_video_codec_h265std.h
4558 views
/*1** Copyright (c) 2019-2021 The Khronos Group Inc.2**3** SPDX-License-Identifier: Apache-2.04*/56#ifndef VULKAN_VIDEO_CODEC_H265STD_H_7#define VULKAN_VIDEO_CODEC_H265STD_H_ 189#ifdef __cplusplus10extern "C" {11#endif1213#include "vk_video/vulkan_video_codecs_common.h"1415// Vulkan 0.5 version number WIP16#define VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_5 VK_MAKE_VIDEO_STD_VERSION(0, 5, 0) // Patch version should always be set to 01718// Format must be in the form XX.XX where the first two digits are the major and the second two, the minor.19#define VK_STD_VULKAN_VIDEO_CODEC_H265_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_520#define VK_STD_VULKAN_VIDEO_CODEC_H265_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265"2122typedef enum StdVideoH265ChromaFormatIdc {23std_video_h265_chroma_format_idc_monochrome = 0,24std_video_h265_chroma_format_idc_420 = 1,25std_video_h265_chroma_format_idc_422 = 2,26std_video_h265_chroma_format_idc_444 = 3,27} StdVideoH265ChromaFormatIdc;2829typedef enum StdVideoH265ProfileIdc {30std_video_h265_profile_idc_main = 1,31std_video_h265_profile_idc_main_10 = 2,32std_video_h265_profile_idc_main_still_picture = 3,33std_video_h265_profile_idc_format_range_extensions = 4,34std_video_h265_profile_idc_scc_extensions = 9,35std_video_h265_profile_idc_invalid = 0x7FFFFFFF36} StdVideoH265ProfileIdc;3738typedef enum StdVideoH265Level {39std_video_h265_level_1_0 = 0,40std_video_h265_level_2_0 = 1,41std_video_h265_level_2_1 = 2,42std_video_h265_level_3_0 = 3,43std_video_h265_level_3_1 = 4,44std_video_h265_level_4_0 = 5,45std_video_h265_level_4_1 = 6,46std_video_h265_level_5_0 = 7,47std_video_h265_level_5_1 = 8,48std_video_h265_level_5_2 = 9,49std_video_h265_level_6_0 = 10,50std_video_h265_level_6_1 = 11,51std_video_h265_level_6_2 = 12,52std_video_h265_level_invalid = 0x7FFFFFFF53} StdVideoH265Level;545556typedef struct StdVideoH265DecPicBufMgr57{58uint32_t max_latency_increase_plus1[7];59uint8_t max_dec_pic_buffering_minus1[7];60uint8_t max_num_reorder_pics[7];61} StdVideoH265DecPicBufMgr;6263typedef struct StdVideoH265SubLayerHrdParameters {64uint32_t bit_rate_value_minus1[32];65uint32_t cpb_size_value_minus1[32];66uint32_t cpb_size_du_value_minus1[32];67uint32_t bit_rate_du_value_minus1[32];68uint32_t cbr_flag; // each bit represents a range of CpbCounts (bit 0 - cpb_cnt_minus1) per sub-layer69} StdVideoH265SubLayerHrdParameters;7071typedef struct StdVideoH265HrdFlags {72uint32_t nal_hrd_parameters_present_flag : 1;73uint32_t vcl_hrd_parameters_present_flag : 1;74uint32_t sub_pic_hrd_params_present_flag : 1;75uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1;76uint8_t fixed_pic_rate_general_flag; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus177uint8_t fixed_pic_rate_within_cvs_flag; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus178uint8_t low_delay_hrd_flag; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus179} StdVideoH265HrdFlags;8081typedef struct StdVideoH265HrdParameters {82uint8_t tick_divisor_minus2;83uint8_t du_cpb_removal_delay_increment_length_minus1;84uint8_t dpb_output_delay_du_length_minus1;85uint8_t bit_rate_scale;86uint8_t cpb_size_scale;87uint8_t cpb_size_du_scale;88uint8_t initial_cpb_removal_delay_length_minus1;89uint8_t au_cpb_removal_delay_length_minus1;90uint8_t dpb_output_delay_length_minus1;91uint8_t cpb_cnt_minus1[7];92uint16_t elemental_duration_in_tc_minus1[7];93StdVideoH265SubLayerHrdParameters* SubLayerHrdParametersNal[7];94StdVideoH265SubLayerHrdParameters* SubLayerHrdParametersVcl[7];95StdVideoH265HrdFlags flags;96} StdVideoH265HrdParameters;9798typedef struct StdVideoH265VpsFlags {99uint32_t vps_temporal_id_nesting_flag : 1;100uint32_t vps_sub_layer_ordering_info_present_flag : 1;101uint32_t vps_timing_info_present_flag : 1;102uint32_t vps_poc_proportional_to_timing_flag : 1;103} StdVideoH265VpsFlags;104105typedef struct StdVideoH265VideoParameterSet106{107uint8_t vps_video_parameter_set_id;108uint8_t vps_max_sub_layers_minus1;109uint32_t vps_num_units_in_tick;110uint32_t vps_time_scale;111uint32_t vps_num_ticks_poc_diff_one_minus1;112StdVideoH265DecPicBufMgr* pDecPicBufMgr;113StdVideoH265HrdParameters* hrd_parameters;114StdVideoH265VpsFlags flags;115} StdVideoH265VideoParameterSet;116117typedef struct StdVideoH265ScalingLists118{119uint8_t ScalingList4x4[6][16]; // ScalingList[ 0 ][ MatrixID ][ i ] (sizeID = 0)120uint8_t ScalingList8x8[6][64]; // ScalingList[ 1 ][ MatrixID ][ i ] (sizeID = 1)121uint8_t ScalingList16x16[6][64]; // ScalingList[ 2 ][ MatrixID ][ i ] (sizeID = 2)122uint8_t ScalingList32x32[2][64]; // ScalingList[ 3 ][ MatrixID ][ i ] (sizeID = 3)123uint8_t ScalingListDCCoef16x16[6]; // scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8, sizeID = 2124uint8_t ScalingListDCCoef32x32[2]; // scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8. sizeID = 3125} StdVideoH265ScalingLists;126127typedef struct StdVideoH265SpsVuiFlags {128uint32_t aspect_ratio_info_present_flag : 1;129uint32_t overscan_info_present_flag : 1;130uint32_t overscan_appropriate_flag : 1;131uint32_t video_signal_type_present_flag : 1;132uint32_t video_full_range_flag : 1;133uint32_t colour_description_present_flag : 1;134uint32_t chroma_loc_info_present_flag : 1;135uint32_t neutral_chroma_indication_flag : 1;136uint32_t field_seq_flag : 1;137uint32_t frame_field_info_present_flag : 1;138uint32_t default_display_window_flag : 1;139uint32_t vui_timing_info_present_flag : 1;140uint32_t vui_poc_proportional_to_timing_flag : 1;141uint32_t vui_hrd_parameters_present_flag : 1;142uint32_t bitstream_restriction_flag : 1;143uint32_t tiles_fixed_structure_flag : 1;144uint32_t motion_vectors_over_pic_boundaries_flag : 1;145uint32_t restricted_ref_pic_lists_flag : 1;146} StdVideoH265SpsVuiFlags;147148typedef struct StdVideoH265SequenceParameterSetVui {149uint8_t aspect_ratio_idc;150uint16_t sar_width;151uint16_t sar_height;152uint8_t video_format;153uint8_t colour_primaries;154uint8_t transfer_characteristics;155uint8_t matrix_coeffs;156uint8_t chroma_sample_loc_type_top_field;157uint8_t chroma_sample_loc_type_bottom_field;158uint16_t def_disp_win_left_offset;159uint16_t def_disp_win_right_offset;160uint16_t def_disp_win_top_offset;161uint16_t def_disp_win_bottom_offset;162uint32_t vui_num_units_in_tick;163uint32_t vui_time_scale;164uint32_t vui_num_ticks_poc_diff_one_minus1;165StdVideoH265HrdParameters* hrd_parameters;166uint16_t min_spatial_segmentation_idc;167uint8_t max_bytes_per_pic_denom;168uint8_t max_bits_per_min_cu_denom;169uint8_t log2_max_mv_length_horizontal;170uint8_t log2_max_mv_length_vertical;171StdVideoH265SpsVuiFlags flags;172} StdVideoH265SequenceParameterSetVui;173174typedef struct StdVideoH265PredictorPaletteEntries175{176uint16_t PredictorPaletteEntries[3][128];177} StdVideoH265PredictorPaletteEntries;178179180typedef struct StdVideoH265SpsFlags {181uint32_t sps_temporal_id_nesting_flag : 1;182uint32_t separate_colour_plane_flag : 1;183uint32_t scaling_list_enabled_flag : 1;184uint32_t sps_scaling_list_data_present_flag : 1;185uint32_t amp_enabled_flag : 1;186uint32_t sample_adaptive_offset_enabled_flag : 1;187uint32_t pcm_enabled_flag : 1;188uint32_t pcm_loop_filter_disabled_flag : 1;189uint32_t long_term_ref_pics_present_flag : 1;190uint32_t sps_temporal_mvp_enabled_flag : 1;191uint32_t strong_intra_smoothing_enabled_flag : 1;192uint32_t vui_parameters_present_flag : 1;193uint32_t sps_extension_present_flag : 1;194uint32_t sps_range_extension_flag : 1;195196// extension SPS flags, valid when std_video_h265_profile_idc_format_range_extensions is set197uint32_t transform_skip_rotation_enabled_flag : 1;198uint32_t transform_skip_context_enabled_flag : 1;199uint32_t implicit_rdpcm_enabled_flag : 1;200uint32_t explicit_rdpcm_enabled_flag : 1;201uint32_t extended_precision_processing_flag : 1;202uint32_t intra_smoothing_disabled_flag : 1;203uint32_t high_precision_offsets_enabled_flag : 1;204uint32_t persistent_rice_adaptation_enabled_flag : 1;205uint32_t cabac_bypass_alignment_enabled_flag : 1;206207// extension SPS flags, valid when std_video_h265_profile_idc_scc_extensions is set208uint32_t sps_curr_pic_ref_enabled_flag : 1;209uint32_t palette_mode_enabled_flag : 1;210uint32_t sps_palette_predictor_initializer_present_flag : 1;211uint32_t intra_boundary_filtering_disabled_flag : 1;212} StdVideoH265SpsFlags;213214typedef struct StdVideoH265SequenceParameterSet215{216StdVideoH265ProfileIdc profile_idc;217StdVideoH265Level level_idc;218uint32_t pic_width_in_luma_samples;219uint32_t pic_height_in_luma_samples;220uint8_t sps_video_parameter_set_id;221uint8_t sps_max_sub_layers_minus1;222uint8_t sps_seq_parameter_set_id;223uint8_t chroma_format_idc;224uint8_t bit_depth_luma_minus8;225uint8_t bit_depth_chroma_minus8;226uint8_t log2_max_pic_order_cnt_lsb_minus4;227uint8_t sps_max_dec_pic_buffering_minus1;228uint8_t log2_min_luma_coding_block_size_minus3;229uint8_t log2_diff_max_min_luma_coding_block_size;230uint8_t log2_min_luma_transform_block_size_minus2;231uint8_t log2_diff_max_min_luma_transform_block_size;232uint8_t max_transform_hierarchy_depth_inter;233uint8_t max_transform_hierarchy_depth_intra;234uint8_t num_short_term_ref_pic_sets;235uint8_t num_long_term_ref_pics_sps;236uint8_t pcm_sample_bit_depth_luma_minus1;237uint8_t pcm_sample_bit_depth_chroma_minus1;238uint8_t log2_min_pcm_luma_coding_block_size_minus3;239uint8_t log2_diff_max_min_pcm_luma_coding_block_size;240uint32_t conf_win_left_offset;241uint32_t conf_win_right_offset;242uint32_t conf_win_top_offset;243uint32_t conf_win_bottom_offset;244StdVideoH265DecPicBufMgr* pDecPicBufMgr;245StdVideoH265SpsFlags flags;246StdVideoH265ScalingLists* pScalingLists; // Must be a valid pointer if sps_scaling_list_data_present_flag is set247StdVideoH265SequenceParameterSetVui* pSequenceParameterSetVui; // Must be a valid pointer if StdVideoH265SpsFlags:vui_parameters_present_flag is set palette_max_size;248249// extension SPS flags, valid when std_video_h265_profile_idc_scc_extensions is set250uint8_t palette_max_size;251uint8_t delta_palette_max_predictor_size;252uint8_t motion_vector_resolution_control_idc;253uint8_t sps_num_palette_predictor_initializer_minus1;254StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries; // Must be a valid pointer if sps_palette_predictor_initializer_present_flag is set255} StdVideoH265SequenceParameterSet;256257258typedef struct StdVideoH265PpsFlags {259uint32_t dependent_slice_segments_enabled_flag : 1;260uint32_t output_flag_present_flag : 1;261uint32_t sign_data_hiding_enabled_flag : 1;262uint32_t cabac_init_present_flag : 1;263uint32_t constrained_intra_pred_flag : 1;264uint32_t transform_skip_enabled_flag : 1;265uint32_t cu_qp_delta_enabled_flag : 1;266uint32_t pps_slice_chroma_qp_offsets_present_flag : 1;267uint32_t weighted_pred_flag : 1;268uint32_t weighted_bipred_flag : 1;269uint32_t transquant_bypass_enabled_flag : 1;270uint32_t tiles_enabled_flag : 1;271uint32_t entropy_coding_sync_enabled_flag : 1;272uint32_t uniform_spacing_flag : 1;273uint32_t loop_filter_across_tiles_enabled_flag : 1;274uint32_t pps_loop_filter_across_slices_enabled_flag : 1;275uint32_t deblocking_filter_control_present_flag : 1;276uint32_t deblocking_filter_override_enabled_flag : 1;277uint32_t pps_deblocking_filter_disabled_flag : 1;278uint32_t pps_scaling_list_data_present_flag : 1;279uint32_t lists_modification_present_flag : 1;280uint32_t slice_segment_header_extension_present_flag : 1;281uint32_t pps_extension_present_flag : 1;282283// extension PPS flags, valid when std_video_h265_profile_idc_format_range_extensions is set284uint32_t cross_component_prediction_enabled_flag : 1;285uint32_t chroma_qp_offset_list_enabled_flag : 1;286287// extension PPS flags, valid when std_video_h265_profile_idc_scc_extensions is set288uint32_t pps_curr_pic_ref_enabled_flag : 1;289uint32_t residual_adaptive_colour_transform_enabled_flag : 1;290uint32_t pps_slice_act_qp_offsets_present_flag : 1;291uint32_t pps_palette_predictor_initializer_present_flag : 1;292uint32_t monochrome_palette_flag : 1;293uint32_t pps_range_extension_flag : 1;294} StdVideoH265PpsFlags;295296typedef struct StdVideoH265PictureParameterSet297{298uint8_t pps_pic_parameter_set_id;299uint8_t pps_seq_parameter_set_id;300uint8_t num_extra_slice_header_bits;301uint8_t num_ref_idx_l0_default_active_minus1;302uint8_t num_ref_idx_l1_default_active_minus1;303int8_t init_qp_minus26;304uint8_t diff_cu_qp_delta_depth;305int8_t pps_cb_qp_offset;306int8_t pps_cr_qp_offset;307uint8_t num_tile_columns_minus1;308uint8_t num_tile_rows_minus1;309uint16_t column_width_minus1[19];310uint16_t row_height_minus1[21];311int8_t pps_beta_offset_div2;312int8_t pps_tc_offset_div2;313uint8_t log2_parallel_merge_level_minus2;314StdVideoH265PpsFlags flags;315StdVideoH265ScalingLists* pScalingLists; // Must be a valid pointer if pps_scaling_list_data_present_flag is set316317// extension PPS, valid when std_video_h265_profile_idc_format_range_extensions is set318uint8_t log2_max_transform_skip_block_size_minus2;319uint8_t diff_cu_chroma_qp_offset_depth;320uint8_t chroma_qp_offset_list_len_minus1;321int8_t cb_qp_offset_list[6];322int8_t cr_qp_offset_list[6];323uint8_t log2_sao_offset_scale_luma;324uint8_t log2_sao_offset_scale_chroma;325326// extension PPS, valid when std_video_h265_profile_idc_scc_extensions is set327int8_t pps_act_y_qp_offset_plus5;328int8_t pps_act_cb_qp_offset_plus5;329int8_t pps_act_cr_qp_offset_plus5;330uint8_t pps_num_palette_predictor_initializer;331uint8_t luma_bit_depth_entry_minus8;332uint8_t chroma_bit_depth_entry_minus8;333StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries; // Must be a valid pointer if pps_palette_predictor_initializer_present_flag is set334} StdVideoH265PictureParameterSet;335336#ifdef __cplusplus337}338#endif339340#endif // VULKAN_VIDEO_CODEC_H265STD_H_341342343