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