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_h265.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 - Chunbo Chen, Intel 18 - Ping Liu, Intel 19 - Srinath Kumarapuram, NVIDIA 20 - Tony Zlatinski, NVIDIA 21 - Ravi Chaudhary, NVIDIA 22 - Daniel Rakos, RasterGrid 23 - Aidan Fabius, Core Avionics & Industrial Inc. 24 - Lynne Iribarren, Independent 25 26=== Description 27 28This extension builds upon the `apiext:VK_KHR_video_encode_queue` extension 29by adding support for encoding elementary video stream sequences compliant 30with the H.265/HEVC video compression standard. 31 32[NOTE] 33.Note 34==== 35This extension was promoted to `KHR` from the provisional extension 36`VK_EXT_video_encode_h265`. 37==== 38 39include::{generated}/interfaces/VK_KHR_video_encode_h265.adoc[] 40 41=== Version History 42 43 * Revision 0, 2019-11-14 (Ahmed Abdelkhalek) 44 ** Initial draft 45 * Revision 0.5, 2020-02-13 (Tony Zlatinski) 46 ** General Spec cleanup 47 ** Added DPB structures 48 ** Change the VCL frame encode structure 49 ** Added a common Non-VCL Picture Paramarameters structure 50 * Revision 2, Oct 10 2021 (Srinath Kumarapuram) 51 ** Vulkan Video Encode h.265 update and spec edits 52 * Revision 3, 2021-12-08 (Ahmed Abdelkhalek) 53 ** Rate control updates 54 * Revision 4, 2022-01-11 (Ahmed Abdelkhalek) 55 ** Replace occurrences of "`slice`" by "`slice segment`" and rename 56 structures/enums to reflect this. 57 * Revision 5, 2022-02-10 (Ahmed Abdelkhalek) 58 ** Updates to encode capability interface 59 * Revision 6, 2022-03-16 (Ahmed Abdelkhalek) 60 ** Relocate Std header version reporting/requesting from this extension to 61 VK_KHR_video_queue extension. 62 ** Remove the now empty VkVideoEncodeH265SessionCreateInfoEXT. 63 * Revision 7, 2022-03-24 (Ahmed Abdelkhalek) 64 ** Add capability flags to report support to disable transform skip and 65 support to use B frame in L1 reference list. 66 * Revision 8, 2022-07-18 (Daniel Rakos) 67 ** Replace `VkVideoEncodeH265RateControlStructureFlagBitsEXT` bit enum 68 with `VkVideoEncodeH265RateControlStructureEXT` enum 69 ** Rename `VkVideoEncodeH265ProfileEXT` to 70 `VkVideoEncodeH265ProfileInfoEXT` 71 ** Rename `VkVideoEncodeH265ReferenceListsEXT` to 72 `VkVideoEncodeH265ReferenceListsInfoEXT` 73 ** Rename `VkVideoEncodeH265EmitPictureParametersEXT` to 74 `VkVideoEncodeH265EmitPictureParametersInfoEXT` 75 ** Rename `VkVideoEncodeH265NaluSliceSegmentEXT` to 76 `VkVideoEncodeH265NaluSliceSegmentInfoEXT` 77 * Revision 9, 2022-09-18 (Daniel Rakos) 78 ** Rename `vpsStdCount`, `pVpsStd`, `spsStdCount`, `pSpsStd`, 79 `ppsStdCount`, and `pPpsStd` to `stdVPSCount`, `pStdVPSs`, 80 `stdSPSCount`, `pStdSPSs`, `stdPPSCount`, and `pStdPPSs`, respectively, 81 in `VkVideoEncodeH265SessionParametersAddInfoEXT` 82 ** Rename `maxVpsStdCount`, `maxSpsStdCount`, and `maxPpsStdCount` to 83 `maxStdVPSCount`, `maxStdSPSCount` and `maxStdPPSCount`, respectively, 84 in `VkVideoEncodeH265SessionParametersCreateInfoEXT` 85 * Revision 10, 2023-03-06 (Daniel Rakos) 86 ** Removed `VkVideoEncodeH265EmitPictureParametersInfoEXT` 87 ** Changed member types in `VkVideoEncodeH265CapabilitiesEXT` and 88 `VkVideoEncodeH265ReferenceListsInfoEXT` from `uint8_t` to `uint32_t` 89 ** Changed the type of 90 `VkVideoEncodeH265RateControlInfoEXT::subLayerCount` and 91 `VkVideoEncodeH265RateControlLayerInfoEXT::temporalId` from `uint8_t` 92 to `uint32_t` 93 ** Removed `VkVideoEncodeH265InputModeFlagsEXT` and 94 `VkVideoEncodeH265OutputModeFlagsEXT` as we only support 95 frame-in-frame-out mode for now 96 ** Rename `pCurrentPictureInfo` in `VkVideoEncodeH265VclFrameInfoEXT` to 97 `pStdPictureInfo` 98 ** Rename `pSliceSegmentHeaderStd` in 99 `VkVideoEncodeH265NaluSliceSegmentInfoEXT` to `pStdSliceSegmentHeader` 100 ** Rename `pReferenceFinalLists` in `VkVideoEncodeH265VclFrameInfoEXT` and 101 `VkVideoEncodeH265NaluSliceSegmentInfoEXT` to `pStdReferenceFinalLists` 102 ** Removed the `slotIndex` member of `VkVideoEncodeH265DpbSlotInfoEXT` and 103 changed it to be chained to `VkVideoReferenceSlotInfoKHR` 104 ** Replaced `VkVideoEncodeH265ReferenceListsInfoEXT` with the new Video 105 Std header structure `StdVideoEncodeH265ReferenceLists` 106 ** Added new capability flag 107 `VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_REFERENCE_FINAL_LISTS_BIT_EXT` 108 * Revision 11, 2023-05-26 (Daniel Rakos) 109 ** Renamed `VkVideoEncodeH265VclFrameInfoEXT` to 110 `VkVideoEncodeH265PictureInfoEXT` 111 ** Removed `VkVideoEncodeH265RateControlLayerInfoEXT::temporalId` 112 ** Added `expectDyadicTemporalSubLayerPattern` capability 113 ** Added the `VkVideoEncodeH265SessionParametersGetInfoEXT` structure to 114 identify the H.265 parameter sets to retrieve encoded parameter data 115 for, and the `VkVideoEncodeH265SessionParametersFeedbackInfoEXT` 116 structure to retrieve H.265 parameter set override information when 117 using the new `vkGetEncodedVideoSessionParametersKHR` command 118 ** Added `VkVideoEncodeH265NaluSliceSegmentInfoEXT::constantQp` to specify 119 per-slice segment constant QP when rate control mode is 120 `VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR` 121 ** Added `VkVideoEncodeH265QualityLevelPropertiesEXT` for retrieving H.265 122 specific quality level recommendations 123 ** Replaced `VkVideoEncodeH265RateControlStructureEXT` enum with the flags 124 type `VkVideoEncodeH265RateControlFlagsEXT` and bits defined in 125 `VkVideoEncodeH265RateControlFlagBitsEXT` and added HRD compliance flag 126 ** Removed `useInitialRcQp` and `initialRcQp` members of 127 `VkVideoEncodeH265RateControlLayerInfoEXT` 128 ** Added `prefersGopRemainingFrames` and `requiresGopRemainingFrames`, and 129 the new `VkVideoEncodeH265GopRemainingFrameInfoEXT` structure to allow 130 specifying remaining frames of each type in the rate control GOP 131 ** Renamed `maxSubLayersCount` capability to `maxSubLayerCount` 132 ** Added `maxQp`, and `minQp` capabilities 133 ** Added `maxLevelIdc` capability and new 134 `VkVideoEncodeH265SessionCreateInfoEXT` structure to specify upper 135 bounds on the H.265 level of the produced video bitstream 136 ** Moved capability flags specific to codec syntax restrictions from 137 `VkVideoEncodeH265CapabilityFlagsEXT` to the new 138 `VkVideoEncodeH265StdFlagsEXT` which is now included as a separate 139 `stdSyntaxFlags` member in `VkVideoEncodeH265CapabilitiesEXT` 140 ** Added `std` prefix to codec syntax capabilities in 141 `VkVideoEncodeH265CapabilitiesEXT` 142 ** Removed `VkVideoEncodeH265NaluSliceSegmentInfoEXT::ctbCount` and 143 `VK_VIDEO_ENCODE_H265_CAPABILITY_SLICE_SEGMENT_CTB_COUNT_BIT_EXT` 144 ** Replaced 145 `VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_FRAME_BIT_EXT` 146 with the new `maxSliceSegmentCount` capability 147 ** Added `maxTiles` capability 148 ** Removed codec syntax min/max capabilities from 149 `VkVideoEncodeH265CapabilitiesEXT` 150 ** Removed capability flag 151 `VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_REFERENCE_FINAL_LISTS_BIT_EXT` 152 and removed `pStdReferenceFinalLists` members from the 153 `VkVideoEncodeH265PictureInfoEXT` and 154 `VkVideoEncodeH265NaluSliceSegmentInfoEXT` structures as reference 155 lists info is now included in `pStdPictureInfo` 156 ** Added capability flag 157 `VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_EXT` 158 * Revision 12, 2023-07-19 (Daniel Rakos) 159 ** Added video std capability flags 160 `VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_EXT` and 161 `VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_EXT` 162 ** Fixed optionality of the array members of 163 `VkVideoEncodeH265SessionParametersAddInfoEXT` 164 ** Fixed optionality of `VkVideoEncodeH265RateControlInfoEXT::flags` 165 * Revision 13, 2023-09-04 (Daniel Rakos) 166 ** Change extension from `EXT` to `KHR` 167 ** Extension is no longer provisional 168 * Revision 14, 2023-12-05 (Daniel Rakos) 169 ** Condition reference picture setup based on the value of 170 `StdVideoEncodeH265PictureInfo::flags.is_reference` 171