• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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