1 #ifndef VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 2 #define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1 3 4 /* 5 ** Copyright 2015-2022 The Khronos Group Inc. 6 ** 7 ** SPDX-License-Identifier: Apache-2.0 8 */ 9 10 /* 11 ** This header is generated from the Khronos Vulkan XML API Registry. 12 ** 13 */ 14 15 16 #ifdef __cplusplus 17 extern "C" { 18 #endif 19 20 21 22 #define vulkan_video_codec_h264std_encode 1 23 // Vulkan 0.9 provisional Vulkan video H.264 encode std specification version number 24 #define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_0_9_8 VK_MAKE_VIDEO_STD_VERSION(0, 9, 8) 25 26 #define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_0_9_8 27 #define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_encode" 28 typedef struct StdVideoEncodeH264WeightTableFlags { 29 uint32_t luma_weight_l0_flag; 30 uint32_t chroma_weight_l0_flag; 31 uint32_t luma_weight_l1_flag; 32 uint32_t chroma_weight_l1_flag; 33 } StdVideoEncodeH264WeightTableFlags; 34 35 typedef struct StdVideoEncodeH264WeightTable { 36 StdVideoEncodeH264WeightTableFlags flags; 37 uint8_t luma_log2_weight_denom; 38 uint8_t chroma_log2_weight_denom; 39 int8_t luma_weight_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; 40 int8_t luma_offset_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; 41 int8_t chroma_weight_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; 42 int8_t chroma_offset_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; 43 int8_t luma_weight_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; 44 int8_t luma_offset_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; 45 int8_t chroma_weight_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; 46 int8_t chroma_offset_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; 47 } StdVideoEncodeH264WeightTable; 48 49 typedef struct StdVideoEncodeH264SliceHeaderFlags { 50 uint32_t direct_spatial_mv_pred_flag : 1; 51 uint32_t num_ref_idx_active_override_flag : 1; 52 uint32_t no_output_of_prior_pics_flag : 1; 53 uint32_t adaptive_ref_pic_marking_mode_flag : 1; 54 uint32_t no_prior_references_available_flag : 1; 55 } StdVideoEncodeH264SliceHeaderFlags; 56 57 typedef struct StdVideoEncodeH264PictureInfoFlags { 58 uint32_t idr_flag : 1; 59 uint32_t is_reference_flag : 1; 60 uint32_t used_for_long_term_reference : 1; 61 } StdVideoEncodeH264PictureInfoFlags; 62 63 typedef struct StdVideoEncodeH264ReferenceInfoFlags { 64 uint32_t used_for_long_term_reference : 1; 65 } StdVideoEncodeH264ReferenceInfoFlags; 66 67 typedef struct StdVideoEncodeH264RefMgmtFlags { 68 uint32_t ref_pic_list_modification_l0_flag : 1; 69 uint32_t ref_pic_list_modification_l1_flag : 1; 70 } StdVideoEncodeH264RefMgmtFlags; 71 72 typedef struct StdVideoEncodeH264RefListModEntry { 73 StdVideoH264ModificationOfPicNumsIdc modification_of_pic_nums_idc; 74 uint16_t abs_diff_pic_num_minus1; 75 uint16_t long_term_pic_num; 76 } StdVideoEncodeH264RefListModEntry; 77 78 typedef struct StdVideoEncodeH264RefPicMarkingEntry { 79 StdVideoH264MemMgmtControlOp operation; 80 uint16_t difference_of_pic_nums_minus1; 81 uint16_t long_term_pic_num; 82 uint16_t long_term_frame_idx; 83 uint16_t max_long_term_frame_idx_plus1; 84 } StdVideoEncodeH264RefPicMarkingEntry; 85 86 typedef struct StdVideoEncodeH264RefMemMgmtCtrlOperations { 87 StdVideoEncodeH264RefMgmtFlags flags; 88 uint8_t refList0ModOpCount; 89 const StdVideoEncodeH264RefListModEntry* pRefList0ModOperations; 90 uint8_t refList1ModOpCount; 91 const StdVideoEncodeH264RefListModEntry* pRefList1ModOperations; 92 uint8_t refPicMarkingOpCount; 93 const StdVideoEncodeH264RefPicMarkingEntry* pRefPicMarkingOperations; 94 } StdVideoEncodeH264RefMemMgmtCtrlOperations; 95 96 typedef struct StdVideoEncodeH264PictureInfo { 97 StdVideoEncodeH264PictureInfoFlags flags; 98 uint8_t seq_parameter_set_id; 99 uint8_t pic_parameter_set_id; 100 StdVideoH264PictureType pictureType; 101 uint32_t frame_num; 102 int32_t PicOrderCnt; 103 } StdVideoEncodeH264PictureInfo; 104 105 typedef struct StdVideoEncodeH264ReferenceInfo { 106 StdVideoEncodeH264ReferenceInfoFlags flags; 107 uint32_t FrameNum; 108 int32_t PicOrderCnt; 109 uint16_t long_term_pic_num; 110 uint16_t long_term_frame_idx; 111 } StdVideoEncodeH264ReferenceInfo; 112 113 typedef struct StdVideoEncodeH264SliceHeader { 114 StdVideoEncodeH264SliceHeaderFlags flags; 115 uint32_t first_mb_in_slice; 116 StdVideoH264SliceType slice_type; 117 uint16_t idr_pic_id; 118 uint8_t num_ref_idx_l0_active_minus1; 119 uint8_t num_ref_idx_l1_active_minus1; 120 StdVideoH264CabacInitIdc cabac_init_idc; 121 StdVideoH264DisableDeblockingFilterIdc disable_deblocking_filter_idc; 122 int8_t slice_alpha_c0_offset_div2; 123 int8_t slice_beta_offset_div2; 124 const StdVideoEncodeH264WeightTable* pWeightTable; 125 } StdVideoEncodeH264SliceHeader; 126 127 128 #ifdef __cplusplus 129 } 130 #endif 131 132 #endif 133