1// Copyright 2018-2023 The Khronos Group Inc. 2// 3// SPDX-License-Identifier: CC-BY-4.0 4 5[[encode-h265]] 6== Encode H.265 7 8The `apiext:VK_EXT_video_encode_h265` extension adds H.265 codec-specific 9structures/types needed to support H.265 video encoding. 10Unless otherwise noted, all references to the H.265 specification are to the 112013 edition published by the ITU-T, dated April 2013. 12This specification is available at https://www.itu.int/rec/T-REC-H.265. 13 14[NOTE] 15.Note 16==== 17Refer to the <<preamble, Preamble>> for information on how the Khronos 18Intellectual Property Rights Policy relates to normative references to 19external materials not created by Khronos. 20==== 21 22 23=== H.265 Encode Profile 24 25An H.265 encode profile is specified by including the 26slink:VkVideoEncodeH265ProfileInfoEXT structure in the pname:pNext chain of 27the slink:VkVideoProfileInfoKHR structure when 28slink:VkVideoProfileInfoKHR::pname:videoCodecOperation is 29ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT. 30 31[open,refpage='VkVideoEncodeH265ProfileInfoEXT',desc='Structure specifying H.265 encode profile',type='structs'] 32-- 33The sname:VkVideoEncodeH265ProfileInfoEXT structure is defined as: 34 35include::{generated}/api/structs/VkVideoEncodeH265ProfileInfoEXT.adoc[] 36 37 * pname:sType is a elink:VkStructureType value identifying this structure. 38 * pname:pNext is `NULL` or a pointer to a structure extending this 39 structure. 40 * pname:stdProfileIdc is a code:StdVideoH265ProfileIdc value specifying 41 the H.265 codec profile IDC. 42 43include::{generated}/validity/structs/VkVideoEncodeH265ProfileInfoEXT.adoc[] 44-- 45 46 47=== Capabilities 48 49[open,refpage='VkVideoEncodeH265CapabilitiesEXT',desc='Structure specifying H.265 encode capabilities',type='structs'] 50-- 51When calling flink:vkGetPhysicalDeviceVideoCapabilitiesKHR with 52pname:pVideoProfile->videoCodecOperation specified as 53ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, the 54slink:VkVideoEncodeH265CapabilitiesEXT structure must: be included in the 55pname:pNext chain of the slink:VkVideoCapabilitiesKHR structure to retrieve 56more capabilities specific to H.265 video encoding. 57 58The sname:VkVideoEncodeH265CapabilitiesEXT structure is defined as: 59 60include::{generated}/api/structs/VkVideoEncodeH265CapabilitiesEXT.adoc[] 61 62 * pname:sType is a elink:VkStructureType value identifying this structure. 63 * pname:pNext is `NULL` or a pointer to a structure extending this 64 structure. 65 * pname:flags is a bitmask of elink:VkVideoEncodeH265CapabilityFlagBitsEXT 66 indicating supported H.265 encoding capabilities. 67 * pname:maxLevelIdc is a code:StdVideoH265LevelIdc value indicating the 68 maximum H.265 level supported. 69 * pname:maxSliceSegmentCount indicates the maximum number of slice 70 segments that can: be encoded for a single picture. 71 Further restrictions may: apply to the number of slice segments that 72 can: be encoded for a single picture depending on other capabilities and 73 codec-specific rules. 74 * pname:maxTiles indicates the maximum number of H.265 tile columns and 75 rows that can: be encoded for a single picture. 76 Further restrictions may: apply to the number of H.265 tiles that can: 77 be encoded for a single picture depending on other capabilities and 78 codec-specific rules. 79 * pname:ctbSizes is a bitmask of elink:VkVideoEncodeH265CtbSizeFlagBitsEXT 80 describing the supported CTB sizes. 81 * pname:transformBlockSizes is a bitmask of 82 elink:VkVideoEncodeH265TransformBlockSizeFlagBitsEXT describing the 83 supported transform block sizes. 84 * pname:maxPPictureL0ReferenceCount indicates the maximum number of 85 reference pictures the implementation supports in the reference list L0 86 for P pictures. 87 * pname:maxBPictureL0ReferenceCount indicates the maximum number of 88 reference pictures the implementation supports in the reference list L0 89 for B pictures. 90 The reported value is `0` if encoding of B pictures is not supported. 91 * pname:maxL1ReferenceCount indicates the maximum number of reference 92 pictures the implementation supports in the reference list L1 if 93 encoding of B pictures is supported. 94 The reported value is `0` if encoding of B pictures is not supported. 95 * pname:maxSubLayerCount indicates the maximum number of H.265 sub-layers 96 supported by the implementation. 97 * pname:expectDyadicTemporalSubLayerPattern indicates that the 98 implementation's rate control algorithms expect the application to use a 99 dyadic temporal sub-layer pattern when encoding multiple temporal 100 sub-layers. 101 * pname:minQp indicates the minimum QP value supported. 102 * pname:maxQp indicates the maximum QP value supported. 103 * pname:prefersGopRemainingFrames indicates that the implementation's rate 104 control algorithm prefers the application to specify the number of 105 frames of each type remaining in the current group of pictures. 106 * pname:requiresGopRemainingFrames indicates that the implementation's 107 rate control algorithm requires the application to specify the number of 108 frames of each type remaining in the current group of pictures. 109 * pname:stdSyntaxFlags is a bitmask of 110 elink:VkVideoEncodeH265StdFlagBitsEXT indicating capabilities related to 111 H.265 syntax elements. 112 113include::{generated}/validity/structs/VkVideoEncodeH265CapabilitiesEXT.adoc[] 114-- 115 116[open,refpage='VkVideoEncodeH265CapabilityFlagBitsEXT',desc='Video encode H.265 capability flags',type='enums'] 117-- 118Bits which may: be set in 119slink:VkVideoEncodeH265CapabilitiesEXT::pname:flags indicating the supported 120H.265 encoding capabilities, are: 121 122include::{generated}/api/enums/VkVideoEncodeH265CapabilityFlagBitsEXT.adoc[] 123 124 * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_EXT indicates 125 if the implementation guarantees generating a HRD compliant bitstream if 126 code:nal_hrd_parameters_present_flag, 127 code:vcl_hrd_parameters_present_flag, or 128 code:sub_pic_hrd_params_present_flag are enabled in 129 code:StdVideoH265HrdFlags, or code:vui_hrd_parameters_present_flag is 130 enabled in code:StdVideoH265SpsVuiFlags. 131 * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_EXT 132 indicates that when code:weighted_pred_flag or code:weighted_bipred_flag 133 in code:StdVideoH265PpsFlags are enabled, the implementation is able to 134 internally decide syntax for code:pred_weight_table. 135 * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_EXT 136 indicates that each slice segment in a frame with a single or multiple 137 tiles per slice may begin or finish at any offset in a CTB row. 138 If not supported, all slice segments in such a frame must: begin at the 139 start of a CTB row (and hence each slice segment must: finish at the end 140 of a CTB row). 141 Also indicates that each slice segment in a frame with multiple slices 142 per tile may begin or finish at any offset within the enclosing tile's 143 CTB row. 144 If not supported, slice segments in such a frame must: begin at the 145 start of the enclosing tile's CTB row (and hence each slice segment 146 must: finish at the end of the enclosing tile's CTB row). 147 * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_EXT 148 indicates that when a frame is encoded with multiple slice segments, the 149 implementation allows encoding each slice segment with a different 150 code:StdVideoEncodeH265SliceSegmentHeader::code:slice_type. 151 If not supported, all slice segments of the frame must: be encoded with 152 the same code:slice_type which corresponds to the picture type of the 153 frame. 154 For example, all slice segments of a P-frame would be encoded as 155 P-slices. 156 * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_EXT 157 indicates support for using a B frame as L0 reference. 158 * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT 159 indicates support for using a B frame as L1 reference. 160 * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_EXT 161 indicates support for specifying different QP values in the members of 162 slink:VkVideoEncodeH265QpEXT. 163 * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_EXT 164 indicates support for specifying different constant QP values for each 165 slice segment. 166 * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_EXT 167 indicates if encoding multiple tiles per slice segment is supported. 168 If not set, the implementation is only able to encode a single tile for 169 each slice segment. 170 * ename:VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_EXT 171 indicates if encoding multiple slice segments per tile is supported. 172 If not set, the implementation is only able to encode a single slice 173 segment for each tile. 174-- 175 176[open,refpage='VkVideoEncodeH265CapabilityFlagsEXT',desc='Bitmask of VkVideoEncodeH265CapabilityFlagBitsEXT',type='flags'] 177-- 178include::{generated}/api/flags/VkVideoEncodeH265CapabilityFlagsEXT.adoc[] 179 180tname:VkVideoEncodeH265CapabilityFlagsEXT is a bitmask type for setting a 181mask of zero or more elink:VkVideoEncodeH265CapabilityFlagBitsEXT. 182-- 183 184[open,refpage='VkVideoEncodeH265StdFlagBitsEXT',desc='Video encode H.265 syntax capability flags',type='enums'] 185-- 186Bits which may: be set in 187slink:VkVideoEncodeH265CapabilitiesEXT::pname:stdSyntaxFlags, indicating the 188capabilities related to the H.265 syntax elements, are: 189 190include::{generated}/api/enums/VkVideoEncodeH265StdFlagBitsEXT.adoc[] 191 192 * ename:VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_EXT 193 indicates if enabling code:separate_colour_plane_flag in 194 code:StdVideoH265SpsFlags is supported. 195 * ename:VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_EXT 196 indicates if enabling code:sample_adaptive_offset_enabled_flag in 197 code:StdVideoH265SpsFlags is supported. 198 * ename:VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_EXT 199 indicates if enabling code:scaling_list_enabled_flag and 200 code:sps_scaling_list_data_present_flag in code:StdVideoH265SpsFlags, or 201 enabling code:pps_scaling_list_data_present_flag in 202 code:StdVideoH265PpsFlags are supported. 203 * ename:VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_EXT indicates if 204 enabling code:pcm_enable_flag in code:StdVideoH265SpsFlags is supported. 205 * ename:VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_EXT 206 indicates if enabling code:sps_temporal_mvp_enabled_flag in 207 code:StdVideoH265SpsFlags is supported. 208 * ename:VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_EXT indicates if 209 setting non-zero code:init_qp_minus26 in 210 code:StdVideoH265PictureParameterSet is supported. 211 * ename:VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_EXT indicates 212 if enabling code:weighted_pred_flag in code:StdVideoH265PpsFlags is 213 supported. 214 * ename:VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_EXT 215 indicates if enabling code:weighted_bipred_flag in 216 code:StdVideoH265PpsFlags is supported. 217 * ename:VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_EXT 218 indicates if setting non-zero value for 219 code:log2_parallel_merge_level_minus2 in 220 code:StdVideoH265PictureParameterSet is supported. 221 * ename:VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_EXT 222 indicates if enabling code:sign_data_hiding_enabled_flag in 223 code:StdVideoH265PpsFlags is supported. 224 * ename:VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_EXT 225 indicates if enabling code:transform_skip_enabled_flag in 226 code:StdVideoH265PpsFlags is supported. 227 * ename:VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_EXT 228 indicates if disabling code:transform_skip_enabled_flag in 229 code:StdVideoH265PpsFlags is supported. 230 Implementations must: report at least one of 231 ename:VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_EXT 232 and 233 ename:VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_EXT 234 as supported. 235 * ename:VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_EXT 236 indicates if enabling code:pps_slice_chroma_qp_offsets_present_flag in 237 code:StdVideoH265PpsFlags is supported. 238 * ename:VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_EXT 239 indicates if enabling code:transquant_bypass_enabled_flag in 240 code:StdVideoH265PpsFlags is supported. 241 * ename:VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_EXT 242 indicates if enabling code:constrained_intra_pred_flag in 243 code:StdVideoH265PpsFlags is supported. 244 * ename:VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_EXT 245 indicates if enabling code:entropy_coding_sync_enabled_flag in 246 code:StdVideoH265PpsFlags is supported. 247 * ename:VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_EXT 248 indicates if enabling code:deblocking_filter_override_enabled_flag in 249 code:StdVideoH265PpsFlags is supported. 250 * ename:VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_EXT 251 indicates if enabling code:dependent_slice_segments_enabled_flag in 252 code:StdVideoH265PpsFlags is supported. 253 * ename:VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_EXT 254 indicates if enabling code:dependent_slice_segment_flag in 255 code:StdVideoEncodeH265SliceHeaderFlags is supported. 256 * ename:VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_EXT indicates whether 257 the implementation supports using the application-provided value for 258 code:StdVideoEncodeH265SliceSegmentHeader::code:slice_qp_delta when that 259 value is identical across the slice segments of the encoded frame. 260 * ename:VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_EXT 261 indicates whether the implementation supports using the 262 application-provided value for 263 code:StdVideoEncodeH265SliceSegmentHeader::code:slice_qp_delta when that 264 value is different across the slice segments of the encoded frame. 265-- 266 267[open,refpage='VkVideoEncodeH265StdFlagsEXT',desc='Bitmask of VkVideoEncodeH265StdFlagBitsEXT',type='flags'] 268-- 269include::{generated}/api/flags/VkVideoEncodeH265StdFlagsEXT.adoc[] 270 271tname:VkVideoEncodeH265StdFlagsEXT is a bitmask type for setting a mask of 272zero or more elink:VkVideoEncodeH265StdFlagBitsEXT. 273-- 274 275[open,refpage='VkVideoEncodeH265CtbSizeFlagsEXT',desc='Bitmask of VkVideoEncodeH265CtbSizeFlagBitsEXT',type='flags'] 276-- 277include::{generated}/api/flags/VkVideoEncodeH265CtbSizeFlagsEXT.adoc[] 278 279tname:VkVideoEncodeH265CtbSizeFlagsEXT is a bitmask type for setting a mask 280of zero or more elink:VkVideoEncodeH265CtbSizeFlagBitsEXT. 281Implementations must: set at least one of 282ename:VkVideoEncodeH265CtbSizeFlagBitsEXT. 283-- 284 285[open,refpage='VkVideoEncodeH265CtbSizeFlagBitsEXT',desc='Supported CTB sizes for H.265 video encode',type='enums'] 286-- 287Bits which may: be set in 288slink:VkVideoEncodeH265CapabilitiesEXT::pname:ctbSizes, indicating the CTB 289sizes supported by the implementation, are: 290 291include::{generated}/api/enums/VkVideoEncodeH265CtbSizeFlagBitsEXT.adoc[] 292 293 * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT specifies that a CTB size 294 of 16x16 is supported. 295 * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT specifies that a CTB size 296 of 32x32 is supported. 297 * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT specifies that a CTB size 298 of 64x64 is supported. 299-- 300 301[open,refpage='VkVideoEncodeH265TransformBlockSizeFlagsEXT',desc='Bitmask of VkVideoEncodeH265TransformBlockSizeFlagBitsEXT',type='flags'] 302-- 303include::{generated}/api/flags/VkVideoEncodeH265TransformBlockSizeFlagsEXT.adoc[] 304 305tname:VkVideoEncodeH265TransformBlockSizeFlagsEXT is a bitmask type for 306setting a mask of zero or more 307elink:VkVideoEncodeH265TransformBlockSizeFlagBitsEXT. 308Implementations must: set at least one of 309ename:VkVideoEncodeH265TransformBlockSizeFlagBitsEXT. 310-- 311 312[open,refpage='VkVideoEncodeH265TransformBlockSizeFlagBitsEXT',desc='Supported transform block sizes for H.265 video encode',type='enums'] 313-- 314Bits which may: be set in 315slink:VkVideoEncodeH265CapabilitiesEXT::pname:transformBlockSizes, 316indicating the transform block sizes supported by the implementation, are: 317 318include::{generated}/api/enums/VkVideoEncodeH265TransformBlockSizeFlagBitsEXT.adoc[] 319 320 * ename:VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_EXT specifies that 321 a transform block size of 4x4 is supported. 322 * ename:VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_EXT specifies that 323 a transform block size of 8x8 is supported. 324 * ename:VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_EXT specifies 325 that a transform block size of 16x16 is supported. 326 * ename:VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_EXT specifies 327 that a transform block size of 32x32 is supported. 328-- 329 330 331=== H.265 Encode Quality Level Properties 332 333[open,refpage='VkVideoEncodeH265QualityLevelPropertiesEXT',desc='Structure describing the H.265 encode quality level properties',type='structs'] 334-- 335When calling flink:vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR 336with pname:pVideoProfile->videoCodecOperation specified as 337ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, the 338slink:VkVideoEncodeH265QualityLevelPropertiesEXT structure can: be included 339in the pname:pNext chain of the slink:VkVideoEncodeQualityLevelPropertiesKHR 340structure to retrieve additional video encode quality level properties 341specific to H.265 encoding. 342 343The slink:VkVideoEncodeH265QualityLevelPropertiesEXT structure is defined 344as: 345 346include::{generated}/api/structs/VkVideoEncodeH265QualityLevelPropertiesEXT.adoc[] 347 348 * pname:sType is a elink:VkStructureType value identifying this structure. 349 * pname:pNext is `NULL` or a pointer to a structure extending this 350 structure. 351 * pname:preferredRateControlFlags is a bitmask of 352 elink:VkVideoEncodeH265RateControlFlagBitsEXT values indicating the 353 preferred flags to use for 354 slink:VkVideoEncodeH265RateControlInfoEXT::pname:flags. 355 * pname:preferredGopFrameCount indicates the preferred value to use for 356 slink:VkVideoEncodeH265RateControlInfoEXT::pname:gopFrameCount. 357 * pname:preferredIdrPeriod indicates the preferred value to use for 358 slink:VkVideoEncodeH265RateControlInfoEXT::pname:idrPeriod. 359 * pname:preferredConsecutiveBFrameCount indicates the preferred value to 360 use for 361 slink:VkVideoEncodeH265RateControlInfoEXT::pname:consecutiveBFrameCount. 362 * pname:preferredSubLayerCount indicates the preferred value to use for 363 slink:VkVideoEncodeH265RateControlInfoEXT::pname:subLayerCount. 364 * pname:preferredConstantQp indicates the preferred values to use for 365 slink:VkVideoEncodeH265NaluSliceSegmentInfoEXT::pname:constantQp for 366 each picture type when using rate control mode 367 ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR. 368 * pname:preferredMaxL0ReferenceCount indicates the preferred maximum 369 number of reference pictures to use in the reference list L0. 370 * pname:preferredMaxL1ReferenceCount indicates the preferred maximum 371 number of reference pictures to use in the reference list L1. 372 373include::{generated}/validity/structs/VkVideoEncodeH265QualityLevelPropertiesEXT.adoc[] 374-- 375 376 377=== H.265 Encode Session 378 379Additional parameters can be specified when creating a video session with an 380H.265 encode profile by including an instance of the 381slink:VkVideoEncodeH265SessionCreateInfoEXT structure in the pname:pNext 382chain of slink:VkVideoSessionCreateInfoKHR. 383 384[open,refpage='VkVideoEncodeH265SessionCreateInfoEXT',desc='Structure specifies H.265 encode session parameters',type='structs'] 385-- 386The sname:VkVideoEncodeH265SessionCreateInfoEXT structure is defined as: 387 388include::{generated}/api/structs/VkVideoEncodeH265SessionCreateInfoEXT.adoc[] 389 390 * pname:sType is a elink:VkStructureType value identifying this structure. 391 * pname:pNext is `NULL` or a pointer to a structure extending this 392 structure. 393 * pname:useMaxLevelIdc indicates whether the value of pname:maxLevelIdc 394 should be used by the implementation. 395 When it is set to ename:VK_FALSE, the implementation ignores the value 396 of pname:maxLevelIdc and uses the value of 397 slink:VkVideoEncodeH265CapabilitiesEXT::pname:maxLevelIdc, as reported 398 by flink:vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile. 399 * pname:maxLevelIdc provides the upper bound on the H.265 level for the 400 video bitstreams produced by the created video session. 401 402include::{generated}/validity/structs/VkVideoEncodeH265SessionCreateInfoEXT.adoc[] 403-- 404 405 406=== Encoder H.265 Video Session Parameters Object 407 408When creating a Video Session Parameters object, add a 409slink:VkVideoEncodeH265SessionParametersCreateInfoEXT structure to the 410pname:pNext chain of the slink:VkVideoSessionParametersCreateInfoKHR 411structure passed to flink:vkCreateVideoSessionParametersKHR in order to 412specify the H.265-specific video encoder session parameters. 413 414[open,refpage='VkVideoEncodeH265SessionParametersCreateInfoEXT',desc='Structure specifies H.265 encoder parameter set info',type='structs'] 415-- 416The sname:VkVideoEncodeH265SessionParametersCreateInfoEXT structure is 417defined as: 418 419include::{generated}/api/structs/VkVideoEncodeH265SessionParametersCreateInfoEXT.adoc[] 420 421 * pname:sType is a elink:VkStructureType value identifying this structure. 422 * pname:pNext is `NULL` or a pointer to a structure extending this 423 structure. 424 * pname:maxStdVPSCount is the maximum number of entries of type 425 code:StdVideoH265VideoParameterSet within 426 sname:VkVideoSessionParametersKHR. 427 * pname:maxStdSPSCount is the maximum number of entries of type 428 code:StdVideoH265SequenceParameterSet within 429 sname:VkVideoSessionParametersKHR. 430 * pname:maxStdPPSCount is the maximum number of entries of type 431 code:StdVideoH265PictureParameterSet within 432 sname:VkVideoSessionParametersKHR. 433 * pname:pParametersAddInfo is `NULL` or a pointer to a 434 slink:VkVideoEncodeH265SessionParametersAddInfoEXT structure specifying 435 the video session parameters to add upon creation of this object. 436 437When a slink:VkVideoSessionParametersKHR object contains 438pname:maxStdVPSCount code:StdVideoH265VideoParameterSet entries, no 439additional code:StdVideoH265VideoParameterSet entries can be added to it, 440and ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made 441to add these entries. 442When a slink:VkVideoSessionParametersKHR object contains 443pname:maxStdSPSCount code:StdVideoH265SequenceParameterSet entries, no 444additional code:StdVideoH265SequenceParameterSet entries can be added to it, 445and ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made 446to add these entries. 447When a slink:VkVideoSessionParametersKHR object contains 448pname:maxStdPPSCount code:StdVideoH265PictureParameterSet entries, no 449additional code:StdVideoH265PictureParameterSet entries can be added to it, 450and ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made 451to add these entries. 452 453include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersCreateInfoEXT.adoc[] 454-- 455 456[open,refpage='VkVideoEncodeH265SessionParametersAddInfoEXT',desc='Structure specifies H.265 encoder parameter set info',type='structs'] 457-- 458The sname:VkVideoEncodeH265SessionParametersAddInfoEXT structure is defined 459as: 460 461include::{generated}/api/structs/VkVideoEncodeH265SessionParametersAddInfoEXT.adoc[] 462 463 * pname:sType is a elink:VkStructureType value identifying this structure. 464 * pname:pNext is `NULL` or a pointer to a structure extending this 465 structure. 466 * pname:stdVPSCount is the number of VPS elements in pname:pStdVPSs. 467 * pname:pStdVPSs is a pointer to an array of pname:stdVPSCount 468 code:StdVideoH265VideoParameterSet structures representing H.265 video 469 parameter sets. 470 * pname:stdSPSCount is the number of SPS elements in pname:pStdSPSs. 471 * pname:pStdSPSs is a pointer to an array of pname:stdSPSCount 472 code:StdVideoH265SequenceParameterSet structures representing H.265 473 sequence parameter sets. 474 * pname:stdPPSCount is the number of PPS elements in pname:pStdPPSs. 475 * pname:pStdPPSs is a pointer to an array of pname:stdPPSCount 476 code:StdVideoH265PictureParameterSet structures representing H.265 477 picture parameter sets. 478 479include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersAddInfoEXT.adoc[] 480 481.Valid Usage 482**** 483 * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-stdVPSCount-06438]] 484 The values of pname:stdVPSCount, pname:stdSPSCount and pname:stdPPSCount 485 must: be less than or equal to the values of 486 slink:VkVideoEncodeH265SessionParametersCreateInfoEXT::pname:maxStdVPSCount, 487 slink:VkVideoEncodeH265SessionParametersCreateInfoEXT:pname:maxStdSPSCount, 488 and 489 slink:VkVideoEncodeH265SessionParametersCreateInfoEXT:pname:maxStdPPSCount, 490 respectively 491 * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pStdVPSs-06439]] 492 Each code:StdVideoH265VideoParameterSet entry in pname:pStdVPSs must: 493 have a unique H.265 VPS ID 494 * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pStdSPSs-06440]] 495 Each code:StdVideoH265SequenceParameterSet entry in pname:pStdSPSs must: 496 have a unique H.265 VPS-SPS ID pair 497 * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pStdPPSs-06441]] 498 Each code:StdVideoH265PictureParameterSet entry in pname:pStdPPSs must: 499 have a unique H.265 VPS-SPS-PPS ID tuple 500 * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06442]] 501 Each entry to be added must: have a unique, to the rest of the parameter 502 array entries and the existing parameters in the Video Session 503 Parameters Object that is being updated, VPS-SPS-PPS IDs 504 * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06443]] 505 Parameter entries that already exist in Video Session Parameters object 506 with a particular VPS-SPS-PPS IDs must: not be replaced nor updated 507 * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06444]] 508 When creating a new object using a Video Session Parameters as a 509 template, the array's parameters with the same VPS-SPS-PPS IDs as the 510 ones from the template take precedence 511 * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06445]] 512 VPS/SPS/PPS parameters must: comply with the limits specified in 513 slink:VkVideoSessionCreateInfoKHR during Video Session creation 514**** 515-- 516 517[open,refpage='VkVideoEncodeH265SessionParametersGetInfoEXT',desc='Structure specifying parameters for retrieving encoded H.265 parameter set data',type='structs'] 518-- 519The sname:VkVideoEncodeH265SessionParametersGetInfoEXT structure is defined 520as: 521 522include::{generated}/api/structs/VkVideoEncodeH265SessionParametersGetInfoEXT.adoc[] 523 524 * pname:sType is a elink:VkStructureType value identifying this structure. 525 * pname:pNext is `NULL` or a pointer to a structure extending this 526 structure. 527 * pname:writeStdVPS indicates whether the encoded H.265 video parameter 528 set identified by pname:stdVPSId is requested to be retrieved. 529 * pname:writeStdSPS indicates whether the encoded H.265 sequence parameter 530 set identified by the pair constructed from pname:stdVPSId and 531 pname:stdSPSId is requested to be retrieved. 532 * pname:writeStdPPS indicates whether the encoded H.265 picture parameter 533 set identified by the triplet constructed from pname:stdVPSId, 534 pname:stdSPSId, and pname:stdPPSId is requested to be retrieved. 535 * pname:stdVPSId specifies the H.265 video parameter set ID used to 536 identify the retrieved H.265 video, sequence, and/or picture parameter 537 set(s). 538 * pname:stdSPSId specifies the H.265 sequence parameter set ID used to 539 identify the retrieved H.265 sequence and/or picture parameter set(s) 540 when pname:writeStdSPS and/or pname:writeStdPPS is set to ename:VK_TRUE. 541 * pname:stdPPSId specifies the H.265 picture parameter set ID used to 542 identify the retrieved H.265 picture parameter set when 543 pname:writeStdPPS is set to ename:VK_TRUE. 544 545When this structure is specified in the pname:pNext chain of the 546slink:VkVideoEncodeSessionParametersGetInfoKHR structure passed to 547flink:vkGetEncodedVideoSessionParametersKHR, the command will write encoded 548parameter data to the output buffer in the following order: 549 550 . The H.265 video parameter set identified by pname:stdVPSId, if 551 pname:writeStdVPS is set to ename:VK_TRUE. 552 . The H.265 sequence parameter set identified by the pair constructed from 553 pname:stdVPSId and pname:stdSPSId, if pname:writeStdSPS is set to 554 ename:VK_TRUE. 555 . The H.265 picture parameter set identified by the triplet constructed 556 from pname:stdVPSId, pname:stdSPSId, and pname:stdPPSId, if 557 pname:writeStdPPS is set to ename:VK_TRUE. 558 559include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersGetInfoEXT.adoc[] 560-- 561 562[open,refpage='VkVideoEncodeH265SessionParametersFeedbackInfoEXT',desc='Structure providing feedback about the requested H.265 video session parameters',type='structs'] 563-- 564The sname:VkVideoEncodeH265SessionParametersFeedbackInfoEXT structure is 565defined as: 566 567include::{generated}/api/structs/VkVideoEncodeH265SessionParametersFeedbackInfoEXT.adoc[] 568 569 * pname:sType is a elink:VkStructureType value identifying this structure. 570 * pname:pNext is `NULL` or a pointer to a structure extending this 571 structure. 572 * pname:hasStdVPSOverrides indicates whether any of the parameters of the 573 requested H.265 video parameter set, if one was requested via 574 slink:VkVideoEncodeH265SessionParametersGetInfoEXT::pname:writeStdVPS, 575 were overridden by the implementation. 576 * pname:hasStdSPSOverrides indicates whether any of the parameters of the 577 requested H.265 sequence parameter set, if one was requested via 578 slink:VkVideoEncodeH265SessionParametersGetInfoEXT::pname:writeStdSPS, 579 were overridden by the implementation. 580 * pname:hasStdPPSOverrides indicates whether any of the parameters of the 581 requested H.265 picture parameter set, if one was requested via 582 slink:VkVideoEncodeH265SessionParametersGetInfoEXT::pname:writeStdPPS, 583 were overridden by the implementation. 584 585include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersFeedbackInfoEXT.adoc[] 586-- 587 588 589=== Frame Encoding 590 591In order to encode a frame, add a slink:VkVideoEncodeH265PictureInfoEXT 592structure to the pname:pNext chain of the slink:VkVideoEncodeInfoKHR 593structure passed to the flink:vkCmdEncodeVideoKHR command. 594 595[open,refpage='VkVideoEncodeH265PictureInfoEXT',desc='Structure specifies H.265 encode frame parameters',type='structs'] 596-- 597The slink:VkVideoEncodeH265PictureInfoEXT structure representing a frame 598encode operation is defined as: 599 600include::{generated}/api/structs/VkVideoEncodeH265PictureInfoEXT.adoc[] 601 602 * pname:sType is a elink:VkStructureType value identifying this structure. 603 * pname:pNext is `NULL` or a pointer to a structure extending this 604 structure. 605 * pname:naluSliceSegmentEntryCount is the number of slice segment NALUs in 606 the frame. 607 * pname:pNaluSliceSegmentEntries is a pointer to an array of 608 slink:VkVideoEncodeH265NaluSliceSegmentInfoEXT structures specifying the 609 division of the current picture into slice segments and the properties 610 of these slice segments. 611 * pname:pStdPictureInfo is a pointer to a 612 code:StdVideoEncodeH265PictureInfo structure specifying the syntax and 613 other codec-specific information from the H.265 specification, 614 associated with this picture. 615 616include::{generated}/validity/structs/VkVideoEncodeH265PictureInfoEXT.adoc[] 617-- 618 619[open,refpage='VkVideoEncodeH265NaluSliceSegmentInfoEXT',desc='Structure specifies H.265 encode slice segment NALU parameters',type='structs'] 620-- 621The slink:VkVideoEncodeH265NaluSliceSegmentInfoEXT structure representing a 622slice segment is defined as: 623 624include::{generated}/api/structs/VkVideoEncodeH265NaluSliceSegmentInfoEXT.adoc[] 625 626 * pname:sType is a elink:VkStructureType value identifying this structure. 627 * pname:pNext is `NULL` or a pointer to a structure extending this 628 structure. 629 * pname:constantQp is the QP to use for the slice segment if the current 630 rate control mode configured for the video session is 631 ename:VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR. 632 * pname:pStdSliceSegmentHeader is a pointer to a 633 code:StdVideoEncodeH265SliceSegmentHeader structure specifying the slice 634 segment header for the current slice segment. 635 636include::{generated}/validity/structs/VkVideoEncodeH265NaluSliceSegmentInfoEXT.adoc[] 637-- 638 639[open,refpage='VkVideoEncodeH265DpbSlotInfoEXT',desc='Structure specifies H.265 encode decoded pic info',type='structs'] 640-- 641The slink:VkVideoEncodeH265DpbSlotInfoEXT structure, representing a 642reconstructed picture that is being used as a reference picture, is defined 643as: 644 645include::{generated}/api/structs/VkVideoEncodeH265DpbSlotInfoEXT.adoc[] 646 647 * pname:sType is a elink:VkStructureType value identifying this structure. 648 * pname:pNext is `NULL` or a pointer to a structure extending this 649 structure. 650 * pname:pStdReferenceInfo is a pointer to a 651 code:StdVideoEncodeH265ReferenceInfo structure specifying the syntax and 652 other codec-specific information from the H.265 specification, 653 associated with this reference picture. 654 655include::{generated}/validity/structs/VkVideoEncodeH265DpbSlotInfoEXT.adoc[] 656-- 657 658 659=== Rate Control 660 661[open,refpage='VkVideoEncodeH265RateControlInfoEXT',desc='Structure describing H.265 stream rate control parameters',type='structs'] 662-- 663The sname:VkVideoEncodeH265RateControlInfoEXT structure is defined as: 664 665include::{generated}/api/structs/VkVideoEncodeH265RateControlInfoEXT.adoc[] 666 667 * pname:sType is a elink:VkStructureType value identifying this structure. 668 * pname:pNext is `NULL` or a pointer to a structure extending this 669 structure. 670 * pname:flags is a bitmask of 671 elink:VkVideoEncodeH265RateControlFlagBitsEXT specifying H.265 rate 672 control flags. 673 * pname:gopFrameCount is the number of frames contained within the group 674 of pictures (GOP), starting from an intra frame and until the next intra 675 frame. 676 If it is set to 0, the implementation chooses a suitable value. 677 If it is set to code:UINT32_MAX, the GOP length is treated as infinite. 678 * pname:idrPeriod is the interval, in terms of number of frames, between 679 two IDR frames. 680 If it is set to 0, the implementation chooses a suitable value. 681 If it is set to code:UINT32_MAX, the IDR period is treated as infinite. 682 * pname:consecutiveBFrameCount is the number of consecutive B-frames 683 between I- and/or P-frames within the GOP. 684 * pname:subLayerCount specifies the number of sub layers enabled in the 685 stream. 686 687In order to provide H.265-specific stream rate control parameters, add a 688sname:VkVideoEncodeH265RateControlInfoEXT structure to the pname:pNext chain 689of the slink:VkVideoEncodeRateControlInfoKHR structure in the pname:pNext 690chain of the slink:VkVideoCodingControlInfoKHR structure passed to the 691flink:vkCmdControlVideoCodingKHR command. 692 693The parameters from this structure act as a guidance for implementations to 694apply various rate control heuristics. 695 696It is possible to infer the picture type to be used when encoding a frame, 697on the basis of the values provided for pname:consecutiveBFrameCount, 698pname:idrPeriod, and pname:gopFrameCount, but this inferred picture type 699will not be used by implementations to override the picture type provided in 700flink:vkCmdEncodeVideoKHR. 701Additionally, it is not required for the video session to be reset if the 702inferred picture type does not match the actual picture type. 703 704include::{generated}/validity/structs/VkVideoEncodeH265RateControlInfoEXT.adoc[] 705-- 706 707[open,refpage='VkVideoEncodeH265RateControlFlagBitsEXT',desc='H.265 encode rate control bits',type='enums'] 708-- 709Bits which can: be set in 710slink:VkVideoEncodeH265RateControlInfoEXT::pname:flags, specifying H.265 711rate control flags, are: 712 713include::{generated}/api/enums/VkVideoEncodeH265RateControlFlagBitsEXT.adoc[] 714 715 * ename:VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_EXT 716 specifies that rate control should: attempt to produce an HRD compliant 717 bitstream. 718 * ename:VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_EXT specifies 719 that the application intends to use a regular GOP structure according to 720 the parameters specified in the pname:gopFrameCount, pname:idrPeriod, 721 and pname:consecutiveBFrameCount members of the 722 slink:VkVideoEncodeH265RateControlInfoEXT structure. 723 * ename:VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_EXT 724 specifies that the application intends to follow a flat reference 725 pattern. 726 * ename:VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_EXT 727 specifies that the application intends to follow a dyadic reference 728 pattern. 729 * ename:VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_EXT 730 specifies that the application intends to follow a dyadic temporal 731 sub-layer pattern. 732-- 733 734 735[open,refpage='VkVideoEncodeH265RateControlFlagsEXT',desc='Bitmask specifying H.265 encode rate control flags',type='flags'] 736-- 737include::{generated}/api/flags/VkVideoEncodeH265RateControlFlagsEXT.adoc[] 738 739tname:VkVideoEncodeH265RateControlFlagsEXT is a bitmask type for setting a 740mask of zero or more elink:VkVideoEncodeH265RateControlFlagBitsEXT. 741-- 742 743[open,refpage='VkVideoEncodeH265RateControlLayerInfoEXT',desc='Structure describing H.265 per-layer rate control parameters',type='structs'] 744-- 745The sname:VkVideoEncodeH265RateControlLayerInfoEXT structure is defined as: 746 747include::{generated}/api/structs/VkVideoEncodeH265RateControlLayerInfoEXT.adoc[] 748 749 * pname:sType is a elink:VkStructureType value identifying this structure. 750 * pname:pNext is `NULL` or a pointer to a structure extending this 751 structure. 752 * pname:useMinQp indicates whether the values within pname:minQp should be 753 used by the implementation. 754 When it is set to ename:VK_FALSE, the implementation ignores the values 755 in pname:minQp and chooses suitable values. 756 * pname:minQp provides the lower bound on the QP values for each picture 757 type, to be used in rate control calculations. 758 * pname:useMaxQp indicates whether the values within pname:maxQp should be 759 used by the implementation. 760 When it is set to ename:VK_FALSE, the implementation ignores the values 761 in pname:maxQp and chooses suitable values. 762 * pname:maxQp provides the upper bound on the QP values for each picture 763 type, to be used in rate control calculations. 764 * pname:useMaxFrameSize indicates whether the values within 765 pname:maxFrameSize should be used by the implementation. 766 * pname:maxFrameSize provides the upper bound on the encoded frame size 767 for each picture type. 768 The implementation does not guarantee the encoded frame sizes will be 769 within the specified limits, however these limits may: be used as a 770 guide in rate control calculations. 771 If enabled and not set properly, the pname:maxQp limit may prevent the 772 implementation from respecting the pname:maxFrameSize limit. 773 774H.265-specific per-layer rate control parameters must: be specified by 775adding a sname:VkVideoEncodeH265RateControlLayerInfoEXT structure to the 776pname:pNext chain of each slink:VkVideoEncodeRateControlLayerInfoKHR 777structure in a call to flink:vkCmdControlVideoCodingKHR command, when the 778command buffer context has an active video encode H.265 session. 779 780include::{generated}/validity/structs/VkVideoEncodeH265RateControlLayerInfoEXT.adoc[] 781-- 782 783[open,refpage='VkVideoEncodeH265QpEXT',desc='Structure describing H.265 QP values per picture type',type='structs'] 784-- 785The sname:VkVideoEncodeH265QpEXT structure is defined as: 786 787include::{generated}/api/structs/VkVideoEncodeH265QpEXT.adoc[] 788 789 * pname:qpI is the QP to be used for I-frames. 790 * pname:qpP is the QP to be used for P-frames. 791 * pname:qpB is the QP to be used for B-frames. 792 793include::{generated}/validity/structs/VkVideoEncodeH265QpEXT.adoc[] 794-- 795 796[open,refpage='VkVideoEncodeH265FrameSizeEXT',desc='Structure describing frame size values per H.265 picture type',type='structs'] 797-- 798The sname:VkVideoEncodeH265FrameSizeEXT structure is defined as: 799 800include::{generated}/api/structs/VkVideoEncodeH265FrameSizeEXT.adoc[] 801 802 * pname:frameISize is the size in bytes to be used for I-frames. 803 * pname:framePSize is the size in bytes to be used for P-frames. 804 * pname:frameBSize is the size in bytes to be used for B-frames. 805 806include::{generated}/validity/structs/VkVideoEncodeH265FrameSizeEXT.adoc[] 807-- 808 809[open,refpage='VkVideoEncodeH265GopRemainingFrameInfoEXT',desc='Structure specifying H.265 encode rate control GOP remaining frame counts',type='structs'] 810-- 811The sname:VkVideoEncodeH265GopRemainingFrameInfoEXT structure is defined as: 812 813include::{generated}/api/structs/VkVideoEncodeH265GopRemainingFrameInfoEXT.adoc[] 814 815 * pname:sType is a elink:VkStructureType value identifying this structure. 816 * pname:pNext is `NULL` or a pointer to a structure extending this 817 structure. 818 * pname:useGopRemainingFrames indicates whether the implementation's rate 819 control algorithm should: use the values specified in 820 pname:gopRemainingI, pname:gopRemainingP, and pname:gopRemainingB. 821 If pname:useGopRemainingFrames is ename:VK_FALSE, then the values of 822 pname:gopRemainingI, pname:gopRemainingP, and pname:gopRemainingB are 823 ignored. 824 * pname:gopRemainingI specifies the number of I-frames the 825 implementation's rate control algorithm should: assume to be remaining 826 in the GOP prior to executing the video encode operation. 827 * pname:gopRemainingP specifies the number of P-frames the 828 implementation's rate control algorithm should: assume to be remaining 829 in the GOP prior to executing the video encode operation. 830 * pname:gopRemainingB specifies the number of B-frames the 831 implementation's rate control algorithm should: assume to be remaining 832 in the GOP prior to executing the video encode operation. 833 834Setting pname:useGopRemainingFrames to ename:VK_TRUE and including this 835structure in the pname:pNext chain of slink:VkVideoEncodeInfoKHR is only 836mandatory if the 837slink:VkVideoEncodeH265CapabilitiesEXT::pname:requiresGopRemainingFrames 838reported for the used <<video-profiles,video profile>> is ename:VK_TRUE. 839However, implementations may: use these remaining frame counts, when 840specified, even when it is not required. 841In particular, when the application does not use a regular GOP structure, 842these values may: provide additional guidance for the implementation's rate 843control algorithm. 844 845The slink:VkVideoEncodeH265CapabilitiesEXT::pname:prefersGopRemainingFrames 846capability is also used to indicate that the implementation's rate control 847algorithm may: operate more accurately if the application specifies the 848remaining frame counts using this structure. 849 850As with other rate control guidance values, if the effective order and 851number of frames encoded by the application are not in line with the 852remaining frame counts specified in this structure at any given point, then 853the behavior of the implementation's rate control algorithm may: deviate 854from the one expected by the application. 855 856include::{generated}/validity/structs/VkVideoEncodeH265GopRemainingFrameInfoEXT.adoc[] 857-- 858