1 #ifndef VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 2 #define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1 3 4 /* 5 ** Copyright 2015-2023 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_9 VK_MAKE_VIDEO_STD_VERSION(0, 9, 9) 25 26 #define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_0_9_9 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 StdVideoEncodeH264ReferenceListsInfoFlags { 68 uint32_t ref_pic_list_modification_flag_l0 : 1; 69 uint32_t ref_pic_list_modification_flag_l1 : 1; 70 } StdVideoEncodeH264ReferenceListsInfoFlags; 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 StdVideoEncodeH264ReferenceListsInfo { 87 StdVideoEncodeH264ReferenceListsInfoFlags flags; 88 uint8_t refPicList0EntryCount; 89 uint8_t refPicList1EntryCount; 90 uint8_t refList0ModOpCount; 91 uint8_t refList1ModOpCount; 92 uint8_t refPicMarkingOpCount; 93 uint8_t reserved1[7]; 94 const uint8_t* pRefPicList0Entries; 95 const uint8_t* pRefPicList1Entries; 96 const StdVideoEncodeH264RefListModEntry* pRefList0ModOperations; 97 const StdVideoEncodeH264RefListModEntry* pRefList1ModOperations; 98 const StdVideoEncodeH264RefPicMarkingEntry* pRefPicMarkingOperations; 99 } StdVideoEncodeH264ReferenceListsInfo; 100 101 typedef struct StdVideoEncodeH264PictureInfo { 102 StdVideoEncodeH264PictureInfoFlags flags; 103 uint8_t seq_parameter_set_id; 104 uint8_t pic_parameter_set_id; 105 uint16_t reserved1; 106 StdVideoH264PictureType pictureType; 107 uint32_t frame_num; 108 int32_t PicOrderCnt; 109 } StdVideoEncodeH264PictureInfo; 110 111 typedef struct StdVideoEncodeH264ReferenceInfo { 112 StdVideoEncodeH264ReferenceInfoFlags flags; 113 StdVideoH264PictureType pictureType; 114 uint32_t FrameNum; 115 int32_t PicOrderCnt; 116 uint16_t long_term_pic_num; 117 uint16_t long_term_frame_idx; 118 } StdVideoEncodeH264ReferenceInfo; 119 120 typedef struct StdVideoEncodeH264SliceHeader { 121 StdVideoEncodeH264SliceHeaderFlags flags; 122 uint32_t first_mb_in_slice; 123 StdVideoH264SliceType slice_type; 124 uint16_t idr_pic_id; 125 uint8_t num_ref_idx_l0_active_minus1; 126 uint8_t num_ref_idx_l1_active_minus1; 127 StdVideoH264CabacInitIdc cabac_init_idc; 128 StdVideoH264DisableDeblockingFilterIdc disable_deblocking_filter_idc; 129 int8_t slice_alpha_c0_offset_div2; 130 int8_t slice_beta_offset_div2; 131 uint16_t reserved1; 132 uint32_t reserved2; 133 const StdVideoEncodeH264WeightTable* pWeightTable; 134 } StdVideoEncodeH264SliceHeader; 135 136 137 #ifdef __cplusplus 138 } 139 #endif 140 141 #endif 142