Path: blob/21.2-virgl/include/vk_video/vulkan_video_codec_h264std.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_H264STD_H_7#define VULKAN_VIDEO_CODEC_H264STD_H_ 189#ifdef __cplusplus10extern "C" {11#endif1213#include "vk_video/vulkan_video_codecs_common.h"1415// Vulkan 0.9 provisional Vulkan video H.264 encode and decode std specification version number16#define VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9 VK_MAKE_VIDEO_STD_VERSION(0, 9, 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_H264_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_920#define VK_STD_VULKAN_VIDEO_CODEC_H264_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264"2122// *************************************************23// Video H.264 common definitions:24// *************************************************2526typedef enum StdVideoH264ChromaFormatIdc {27std_video_h264_chroma_format_idc_monochrome = 0,28std_video_h264_chroma_format_idc_420 = 1,29std_video_h264_chroma_format_idc_422 = 2,30std_video_h264_chroma_format_idc_444 = 3,31} StdVideoH264ChromaFormatIdc;3233typedef enum StdVideoH264ProfileIdc {34std_video_h264_profile_idc_baseline = 66, /* Only constrained baseline is supported */35std_video_h264_profile_idc_main = 77,36std_video_h264_profile_idc_high = 100,37std_video_h264_profile_idc_high_444_predictive = 244,38std_video_h264_profile_idc_invalid = 0x7FFFFFFF39} StdVideoH264ProfileIdc;4041typedef enum StdVideoH264Level {42std_video_h264_level_1_0 = 0,43std_video_h264_level_1_1 = 1,44std_video_h264_level_1_2 = 2,45std_video_h264_level_1_3 = 3,46std_video_h264_level_2_0 = 4,47std_video_h264_level_2_1 = 5,48std_video_h264_level_2_2 = 6,49std_video_h264_level_3_0 = 7,50std_video_h264_level_3_1 = 8,51std_video_h264_level_3_2 = 9,52std_video_h264_level_4_0 = 10,53std_video_h264_level_4_1 = 11,54std_video_h264_level_4_2 = 12,55std_video_h264_level_5_0 = 13,56std_video_h264_level_5_1 = 14,57std_video_h264_level_5_2 = 15,58std_video_h264_level_6_0 = 16,59std_video_h264_level_6_1 = 17,60std_video_h264_level_6_2 = 18,61std_video_h264_level_invalid = 0x7FFFFFFF62} StdVideoH264Level;6364typedef enum StdVideoH264PocType {65std_video_h264_poc_type_0 = 0,66std_video_h264_poc_type_1 = 1,67std_video_h264_poc_type_2 = 2,68std_video_h264_poc_type_invalid = 0x7FFFFFFF69} StdVideoH264PocType;7071typedef enum StdVideoH264AspectRatioIdc {72std_video_h264_aspect_ratio_idc_unspecified = 0,73std_video_h264_aspect_ratio_idc_square = 1,74std_video_h264_aspect_ratio_idc_12_11 = 2,75std_video_h264_aspect_ratio_idc_10_11 = 3,76std_video_h264_aspect_ratio_idc_16_11 = 4,77std_video_h264_aspect_ratio_idc_40_33 = 5,78std_video_h264_aspect_ratio_idc_24_11 = 6,79std_video_h264_aspect_ratio_idc_20_11 = 7,80std_video_h264_aspect_ratio_idc_32_11 = 8,81std_video_h264_aspect_ratio_idc_80_33 = 9,82std_video_h264_aspect_ratio_idc_18_11 = 10,83std_video_h264_aspect_ratio_idc_15_11 = 11,84std_video_h264_aspect_ratio_idc_64_33 = 12,85std_video_h264_aspect_ratio_idc_160_99 = 13,86std_video_h264_aspect_ratio_idc_4_3 = 14,87std_video_h264_aspect_ratio_idc_3_2 = 15,88std_video_h264_aspect_ratio_idc_2_1 = 16,89std_video_h264_aspect_ratio_idc_extended_sar = 255,90std_video_h264_aspect_ratio_idc_invalid = 0x7FFFFFFF91} StdVideoH264AspectRatioIdc;9293typedef enum StdVideoH264WeightedBiPredIdc {94std_video_h264_default_weighted_b_slices_prediction_idc = 0,95std_video_h264_explicit_weighted_b_slices_prediction_idc = 1,96std_video_h264_implicit_weighted_b_slices_prediction_idc = 2,97std_video_h264_invalid_weighted_b_slices_prediction_idc = 0x7FFFFFFF98} StdVideoH264WeightedBiPredIdc;99100typedef enum StdVideoH264ModificationOfPicNumsIdc {101std_video_h264_modification_of_pic_nums_idc_short_term_subtract = 0,102std_video_h264_modification_of_pic_nums_idc_short_term_add = 1,103std_video_h264_modification_of_pic_nums_idc_long_term = 2,104std_video_h264_modification_of_pic_nums_idc_end = 3,105std_video_h264_modification_of_pic_nums_idc_invalid = 0x7FFFFFFF106} StdVideoH264ModificationOfPicNumsIdc;107108typedef enum StdVideoH264MemMgmtControlOp {109std_video_h264_mem_mgmt_control_op_end = 0,110std_video_h264_mem_mgmt_control_op_unmark_short_term = 1,111std_video_h264_mem_mgmt_control_op_unmark_long_term = 2,112std_video_h264_mem_mgmt_control_op_mark_long_term = 3,113std_video_h264_mem_mgmt_control_op_set_max_long_term_index = 4,114std_video_h264_mem_mgmt_control_op_unmark_all = 5,115std_video_h264_mem_mgmt_control_op_mark_current_as_long_term = 6,116std_video_h264_mem_mgmt_control_op_invalid = 0x7FFFFFFF117} StdVideoH264MemMgmtControlOp;118119typedef enum StdVideoH264CabacInitIdc {120std_video_h264_cabac_init_idc_0 = 0,121std_video_h264_cabac_init_idc_1 = 1,122std_video_h264_cabac_init_idc_2 = 2,123std_video_h264_cabac_init_idc_invalid = 0x7FFFFFFF124} StdVideoH264CabacInitIdc;125126typedef enum StdVideoH264DisableDeblockingFilterIdc {127std_video_h264_disable_deblocking_filter_idc_disabled = 0,128std_video_h264_disable_deblocking_filter_idc_enabled = 1,129std_video_h264_disable_deblocking_filter_idc_partial = 2,130std_video_h264_disable_deblocking_filter_idc_invalid = 0x7FFFFFFF131} StdVideoH264DisableDeblockingFilterIdc;132133typedef enum StdVideoH264PictureType {134std_video_h264_picture_type_i = 0,135std_video_h264_picture_type_p = 1,136std_video_h264_picture_type_b = 2,137std_video_h264_picture_type_invalid = 0x7FFFFFFF138} StdVideoH264PictureType;139140typedef enum StdVideoH264SliceType {141std_video_h264_slice_type_i = 0,142std_video_h264_slice_type_p = 1,143std_video_h264_slice_type_b = 2,144std_video_h264_slice_type_invalid = 0x7FFFFFFF145} StdVideoH264SliceType;146147typedef enum StdVideoH264NonVclNaluType {148std_video_h264_non_vcl_nalu_type_sps = 0,149std_video_h264_non_vcl_nalu_type_pps = 1,150std_video_h264_non_vcl_nalu_type_aud = 2,151std_video_h264_non_vcl_nalu_type_prefix = 3,152std_video_h264_non_vcl_nalu_type_end_of_sequence = 4,153std_video_h264_non_vcl_nalu_type_end_of_stream = 5,154std_video_h264_non_vcl_nalu_type_precoded = 6,155std_video_h264_non_vcl_nalu_type_invalid = 0x7FFFFFFF156} StdVideoH264NonVclNaluType;157158typedef struct StdVideoH264SpsVuiFlags {159uint32_t aspect_ratio_info_present_flag:1;160uint32_t overscan_info_present_flag:1;161uint32_t overscan_appropriate_flag:1;162uint32_t video_signal_type_present_flag:1;163uint32_t video_full_range_flag:1;164uint32_t color_description_present_flag:1;165uint32_t chroma_loc_info_present_flag:1;166uint32_t timing_info_present_flag:1;167uint32_t fixed_frame_rate_flag:1;168uint32_t bitstream_restriction_flag:1;169uint32_t nal_hrd_parameters_present_flag:1;170uint32_t vcl_hrd_parameters_present_flag:1;171} StdVideoH264SpsVuiFlags;172173typedef struct StdVideoH264HrdParameters {174uint8_t cpb_cnt_minus1;175uint8_t bit_rate_scale;176uint8_t cpb_size_scale;177uint32_t bit_rate_value_minus1[32];178uint32_t cpb_size_value_minus1[32];179uint8_t cbr_flag[32];180uint32_t initial_cpb_removal_delay_length_minus1;181uint32_t cpb_removal_delay_length_minus1;182uint32_t dpb_output_delay_length_minus1;183uint32_t time_offset_length;184} StdVideoH264HrdParameters;185186typedef struct StdVideoH264SequenceParameterSetVui {187StdVideoH264AspectRatioIdc aspect_ratio_idc;188uint16_t sar_width;189uint16_t sar_height;190uint8_t video_format;191uint8_t color_primaries;192uint8_t transfer_characteristics;193uint8_t matrix_coefficients;194uint32_t num_units_in_tick;195uint32_t time_scale;196StdVideoH264HrdParameters hrd_parameters;197uint8_t num_reorder_frames;198uint8_t max_dec_frame_buffering;199StdVideoH264SpsVuiFlags flags;200} StdVideoH264SequenceParameterSetVui;201202typedef struct StdVideoH264SpsFlags {203uint32_t constraint_set0_flag:1;204uint32_t constraint_set1_flag:1;205uint32_t constraint_set2_flag:1;206uint32_t constraint_set3_flag:1;207uint32_t constraint_set4_flag:1;208uint32_t constraint_set5_flag:1;209uint32_t direct_8x8_inference_flag:1;210uint32_t mb_adaptive_frame_field_flag:1;211uint32_t frame_mbs_only_flag:1;212uint32_t delta_pic_order_always_zero_flag:1;213uint32_t residual_colour_transform_flag:1;214uint32_t gaps_in_frame_num_value_allowed_flag:1;215uint32_t first_picture_after_seek_flag:1; // where is this being documented?216uint32_t qpprime_y_zero_transform_bypass_flag:1;217uint32_t frame_cropping_flag:1;218uint32_t scaling_matrix_present_flag:1;219uint32_t vui_parameters_present_flag:1;220} StdVideoH264SpsFlags;221222typedef struct StdVideoH264ScalingLists223{224// scaling_list_present_mask has one bit for each225// seq_scaling_list_present_flag[i] for SPS OR226// pic_scaling_list_present_flag[i] for PPS,227// bit 0 - 5 are for each entry of ScalingList4x4228// bit 6 - 7 are for each entry plus 6 for ScalingList8x8229uint8_t scaling_list_present_mask;230// use_default_scaling_matrix_mask has one bit for each231// UseDefaultScalingMatrix4x4Flag[ i ] and232// UseDefaultScalingMatrix8x8Flag[ i - 6 ] for SPS OR PPS233// bit 0 - 5 are for each entry of ScalingList4x4234// bit 6 - 7 are for each entry plus 6 for ScalingList8x8235uint8_t use_default_scaling_matrix_mask;236uint8_t ScalingList4x4[6][16];237uint8_t ScalingList8x8[2][64];238} StdVideoH264ScalingLists;239240typedef struct StdVideoH264SequenceParameterSet241{242StdVideoH264ProfileIdc profile_idc;243StdVideoH264Level level_idc;244uint8_t seq_parameter_set_id;245StdVideoH264ChromaFormatIdc chroma_format_idc;246uint8_t bit_depth_luma_minus8;247uint8_t bit_depth_chroma_minus8;248uint8_t log2_max_frame_num_minus4;249StdVideoH264PocType pic_order_cnt_type;250uint8_t log2_max_pic_order_cnt_lsb_minus4;251int32_t offset_for_non_ref_pic;252int32_t offset_for_top_to_bottom_field;253uint8_t num_ref_frames_in_pic_order_cnt_cycle;254uint8_t max_num_ref_frames;255uint32_t pic_width_in_mbs_minus1;256uint32_t pic_height_in_map_units_minus1;257uint32_t frame_crop_left_offset;258uint32_t frame_crop_right_offset;259uint32_t frame_crop_top_offset;260uint32_t frame_crop_bottom_offset;261StdVideoH264SpsFlags flags;262int32_t offset_for_ref_frame[255]; // The number of valid values are defined by the num_ref_frames_in_pic_order_cnt_cycle263StdVideoH264ScalingLists* pScalingLists; // Must be a valid pointer if scaling_matrix_present_flag is set264StdVideoH264SequenceParameterSetVui* pSequenceParameterSetVui; // Must be a valid pointer if StdVideoH264SpsFlags:vui_parameters_present_flag is set265} StdVideoH264SequenceParameterSet;266267typedef struct StdVideoH264PpsFlags {268uint32_t transform_8x8_mode_flag:1;269uint32_t redundant_pic_cnt_present_flag:1;270uint32_t constrained_intra_pred_flag:1;271uint32_t deblocking_filter_control_present_flag:1;272uint32_t weighted_bipred_idc_flag:1;273uint32_t weighted_pred_flag:1;274uint32_t pic_order_present_flag:1;275uint32_t entropy_coding_mode_flag:1;276uint32_t scaling_matrix_present_flag:1;277} StdVideoH264PpsFlags;278279typedef struct StdVideoH264PictureParameterSet280{281uint8_t seq_parameter_set_id;282uint8_t pic_parameter_set_id;283uint8_t num_ref_idx_l0_default_active_minus1;284uint8_t num_ref_idx_l1_default_active_minus1;285StdVideoH264WeightedBiPredIdc weighted_bipred_idc;286int8_t pic_init_qp_minus26;287int8_t pic_init_qs_minus26;288int8_t chroma_qp_index_offset;289int8_t second_chroma_qp_index_offset;290StdVideoH264PpsFlags flags;291StdVideoH264ScalingLists* pScalingLists; // Must be a valid pointer if StdVideoH264PpsFlags::scaling_matrix_present_flag is set.292} StdVideoH264PictureParameterSet;293294#ifdef __cplusplus295}296#endif297298#endif // VULKAN_VIDEO_CODEC_H264STD_H_299300301