1// Copyright 2018-2024 The Khronos Group Inc. 2// 3// SPDX-License-Identifier: CC-BY-4.0 4 5include::{generated}/meta/{refprefix}VK_KHR_video_encode_h264.adoc[] 6 7=== Other Extension Metadata 8 9*Last Modified Date*:: 10 2023-12-05 11*IP Status*:: 12 No known IP claims. 13*Contributors*:: 14 - Ahmed Abdelkhalek, AMD 15 - George Hao, AMD 16 - Jake Beju, AMD 17 - Peter Fang, AMD 18 - Ping Liu, Intel 19 - Srinath Kumarapuram, NVIDIA 20 - Tony Zlatinski, NVIDIA 21 - Ravi Chaudhary, NVIDIA 22 - Yang Liu, AMD 23 - Daniel Rakos, RasterGrid 24 - Aidan Fabius, Core Avionics & Industrial Inc. 25 - Lynne Iribarren, Independent 26 27=== Description 28 29This extension builds upon the `apiext:VK_KHR_video_encode_queue` extension 30by adding support for encoding elementary video stream sequences compliant 31with the H.264/AVC video compression standard. 32 33[NOTE] 34.Note 35==== 36This extension was promoted to `KHR` from the provisional extension 37`VK_EXT_video_encode_h264`. 38==== 39 40include::{generated}/interfaces/VK_KHR_video_encode_h264.adoc[] 41 42=== Version History 43 44 * Revision 0, 2018-7-23 (Ahmed Abdelkhalek) 45 ** Initial draft 46 * Revision 0.5, 2020-02-13 (Tony Zlatinski) 47 ** General Spec cleanup 48 ** Added DPB structures 49 ** Change the VCL frame encode structure 50 ** Added a common Non-VCL Picture Paramarameters structure 51 * Revision 1, 2021-03-29 (Tony Zlatinski) 52 ** Spec and API updates 53 * Revision 2, August 1 2021 (Srinath Kumarapuram) 54 ** Rename `VkVideoEncodeH264CapabilitiesFlagsEXT` to 55 `VkVideoEncodeH264CapabilityFlagsEXT` and 56 `VkVideoEncodeH264CapabilitiesFlagsEXT` to 57 `VkVideoEncodeH264CapabilityFlagsEXT`, following Vulkan naming 58 conventions. 59 * Revision 3, 2021-12-08 (Ahmed Abdelkhalek) 60 ** Rate control updates 61 * Revision 4, 2022-02-04 (Ahmed Abdelkhalek) 62 ** Align VkVideoEncodeH264VclFrameInfoEXT structure to similar one in 63 VK_EXT_video_encode_h265 extension 64 * Revision 5, 2022-02-10 (Ahmed Abdelkhalek) 65 ** Updates to encode capability interface 66 * Revision 6, 2022-03-16 (Ahmed Abdelkhalek) 67 ** Relocate Std header version reporting/requesting from this extension to 68 VK_KHR_video_queue extension. 69 ** Remove redundant maxPictureSizeInMbs from 70 VkVideoEncodeH264SessionCreateInfoEXT. 71 ** Remove the now empty VkVideoEncodeH264SessionCreateInfoEXT. 72 * Revision 7, 2022-04-06 (Ahmed Abdelkhalek) 73 ** Add capability flag to report support to use B frame in L1 reference 74 list. 75 ** Add capability flag to report support for disabling SPS 76 direct_8x8_inference_flag. 77 * Revision 8, 2022-07-18 (Daniel Rakos) 78 ** Replace `VkVideoEncodeH264RateControlStructureFlagBitsEXT` bit enum 79 with `VkVideoEncodeH264RateControlStructureEXT` enum 80 ** Rename `VkVideoEncodeH264ProfileEXT` to 81 `VkVideoEncodeH264ProfileInfoEXT` 82 ** Rename `VkVideoEncodeH264ReferenceListsEXT` to 83 `VkVideoEncodeH264ReferenceListsInfoEXT` 84 ** Rename `VkVideoEncodeH264EmitPictureParametersEXT` to 85 `VkVideoEncodeH264EmitPictureParametersInfoEXT` 86 ** Rename `VkVideoEncodeH264NaluSliceEXT` to 87 `VkVideoEncodeH264NaluSliceInfoEXT` 88 * Revision 9, 2022-09-18 (Daniel Rakos) 89 ** Rename `spsStdCount`, `pSpsStd`, `ppsStdCount`, and `pPpsStd` to 90 `stdSPSCount`, `pStdSPSs`, `stdPPSCount`, and `pStdPPSs`, respectively, 91 in `VkVideoEncodeH264SessionParametersAddInfoEXT` 92 ** Rename `maxSpsStdCount` and `maxPpsStdCount` to `maxStdSPSCount` and 93 `maxStdPPSCount`, respectively, in 94 `VkVideoEncodeH264SessionParametersCreateInfoEXT` 95 * Revision 10, 2023-03-06 (Daniel Rakos) 96 ** Removed `VkVideoEncodeH264EmitPictureParametersInfoEXT` 97 ** Changed member types in `VkVideoEncodeH264CapabilitiesEXT` and 98 `VkVideoEncodeH264ReferenceListsInfoEXT` from `uint8_t` to `uint32_t` 99 ** Changed the type of 100 `VkVideoEncodeH264RateControlInfoEXT::temporalLayerCount` and 101 `VkVideoEncodeH264RateControlLayerInfoEXT::temporalLayerId` from 102 `uint8_t` to `uint32_t` 103 ** Removed `VkVideoEncodeH264InputModeFlagsEXT` and 104 `VkVideoEncodeH264OutputModeFlagsEXT` as we only support 105 frame-in-frame-out mode for now 106 ** Rename `pCurrentPictureInfo` in `VkVideoEncodeH264VclFrameInfoEXT` to 107 `pStdPictureInfo` 108 ** Rename `pSliceHeaderStd` in `VkVideoEncodeH264NaluSliceInfoEXT` to 109 `pStdSliceHeader` 110 ** Rename `pReferenceFinalLists` in `VkVideoEncodeH264VclFrameInfoEXT` and 111 `VkVideoEncodeH264NaluSliceInfoEXT` to `pStdReferenceFinalLists` 112 ** Removed the `slotIndex` member of `VkVideoEncodeH264DpbSlotInfoEXT` and 113 changed it to be chained to `VkVideoReferenceSlotInfoKHR` 114 ** Replaced `VkVideoEncodeH264ReferenceListsInfoEXT` with the new Video 115 Std header structure `StdVideoEncodeH264ReferenceLists` that also 116 includes data previously part of the now removed 117 `StdVideoEncodeH264RefMemMgmtCtrlOperations` structure 118 ** Added new capability flag 119 `VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_REFERENCE_FINAL_LISTS_BIT_EXT` 120 * Revision 11, 2023-05-22 (Daniel Rakos) 121 ** Renamed `VkVideoEncodeH264VclFrameInfoEXT` to 122 `VkVideoEncodeH264PictureInfoEXT` 123 ** Added `VkVideoEncodeH264PictureInfoEXT::generatePrefixNalu` and 124 `VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_EXT` to 125 enable the generation of H.264 prefix NALUs when supported by the 126 implementation 127 ** Removed `VkVideoEncodeH264RateControlLayerInfoEXT::temporalLayerId` 128 ** Added `expectDyadicTemporalLayerPattern` capability 129 ** Added the `VkVideoEncodeH264SessionParametersGetInfoEXT` structure to 130 identify the H.264 parameter sets to retrieve encoded parameter data 131 for, and the `VkVideoEncodeH264SessionParametersFeedbackInfoEXT` 132 structure to retrieve H.264 parameter set override information when 133 using the new `vkGetEncodedVideoSessionParametersKHR` command 134 ** Added `VkVideoEncodeH264NaluSliceInfoEXT::constantQp` to specify 135 per-slice constant QP when rate control mode is 136 `VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR` 137 ** Added `VkVideoEncodeH264QualityLevelPropertiesEXT` for retrieving H.264 138 specific quality level recommendations 139 ** Replaced `VkVideoEncodeH264RateControlStructureEXT` enum with the flags 140 type `VkVideoEncodeH264RateControlFlagsEXT` and bits defined in 141 `VkVideoEncodeH264RateControlFlagBitsEXT` and added HRD compliance flag 142 ** Removed `useInitialRcQp` and `initialRcQp` members of 143 `VkVideoEncodeH264RateControlLayerInfoEXT` 144 ** Added `prefersGopRemainingFrames` and `requiresGopRemainingFrames`, and 145 the new `VkVideoEncodeH264GopRemainingFrameInfoEXT` structure to allow 146 specifying remaining frames of each type in the rate control GOP 147 ** Added `maxTemporalLayers`, `maxQp`, and `minQp` capabilities 148 ** Added `maxLevelIdc` capability and new 149 `VkVideoEncodeH264SessionCreateInfoEXT` structure to specify upper 150 bounds on the H.264 level of the produced video bitstream 151 ** Moved capability flags specific to codec syntax restrictions from 152 `VkVideoEncodeH264CapabilityFlagsEXT` to the new 153 `VkVideoEncodeH264StdFlagsEXT` which is now included as a separate 154 `stdSyntaxFlags` member in `VkVideoEncodeH264CapabilitiesEXT` 155 ** Removed codec syntax override values from 156 `VkVideoEncodeH264CapabilitiesEXT` 157 ** Removed `VkVideoEncodeH264NaluSliceInfoEXT::mbCount` and 158 `VK_VIDEO_ENCODE_H264_CAPABILITY_SLICE_MB_COUNT_BIT_EXT` 159 ** Replaced 160 `VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICES_PER_FRAME_BIT_EXT` 161 with the new `maxSliceCount` capability 162 ** Removed capability flag 163 `VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_REFERENCE_FINAL_LISTS_BIT_EXT` 164 and removed `pStdReferenceFinalLists` members from the 165 `VkVideoEncodeH264PictureInfoEXT` and 166 `VkVideoEncodeH264NaluSliceInfoEXT` structures as reference lists info 167 is now included in `pStdPictureInfo` 168 ** Added capability flag 169 `VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_EXT` 170 * Revision 12, 2023-07-19 (Daniel Rakos) 171 ** Added video std capability flags 172 `VK_VIDEO_ENCODE_H264_STD_SLICE_QP_DELTA_BIT_EXT` and 173 `VK_VIDEO_ENCODE_H264_STD_DIFFERENT_SLICE_QP_DELTA_BIT_EXT` 174 ** Fixed optionality of the array members of 175 `VkVideoEncodeH264SessionParametersAddInfoEXT` 176 ** Fixed optionality of `VkVideoEncodeH264RateControlInfoEXT::flags` 177 * Revision 13, 2023-09-04 (Daniel Rakos) 178 ** Change extension from `EXT` to `KHR` 179 ** Extension is no longer provisional 180 * Revision 14, 2023-12-05 (Daniel Rakos) 181 ** Condition reference picture setup based on the value of 182 `StdVideoEncodeH264PictureInfo::flags.is_reference` 183