// Copyright 2018-2021 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

[[encode-h265]]
== Encode H.265

This extension adds H.265 codec-specific structures/types needed to support
H.265 video encoding.
Unless otherwise noted, all references to the H.265 specification are to the
2013 edition published by the ITU-T, dated April 2013.
This specification is available at http://www.itu.int/rec/T-REC-H.265.


=== H.265 encode profile

An H.265 encode profile is specified by including the
slink:VkVideoEncodeH265ProfileEXT structure in the pname:pNext chain of the
slink:VkVideoProfileKHR structure when
slink:VkVideoProfileKHR::pname:videoCodecOperation is
ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT.

[open,refpage='VkVideoEncodeH265ProfileEXT',desc='Structure specifying H.265 encode profile',type='structs']
--
The sname:VkVideoEncodeH265ProfileEXT structure is defined as:

include::{generated}/api/structs/VkVideoEncodeH265ProfileEXT.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:stdProfileIdc is a code:StdVideoH265ProfileIdc value specifying
    the H.265 codec profile IDC.

include::{generated}/validity/structs/VkVideoEncodeH265ProfileEXT.txt[]
--


=== Capabilities

[open,refpage='VkVideoEncodeH265CapabilitiesEXT',desc='Structure specifying H.265 encode capabilities',type='structs']
--
When calling flink:vkGetPhysicalDeviceVideoCapabilitiesKHR with
pname:pVideoProfile->videoCodecOperation specified as
ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, the
slink:VkVideoEncodeH265CapabilitiesEXT structure must: be included in the
pname:pNext chain of the slink:VkVideoCapabilitiesKHR structure to retrieve
H.265-specific capabilities for video encoding.

The sname:VkVideoEncodeH265CapabilitiesEXT structure is defined as:

include::{generated}/api/structs/VkVideoEncodeH265CapabilitiesEXT.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:flags is reserved for future use.
  * pname:inputModeFlags is a bitmask of
    elink:VkVideoEncodeH265InputModeFlagBitsEXT describing the command
    buffer input granularities/modes supported by the implementation.
  * pname:outputModeFlags is a bitmask of
    elink:VkVideoEncodeH265OutputModeFlagBitsEXT describing the output
    (bitstream size reporting) granularities/modes supported by the
    implementation.
  * pname:ctbSizes is a bitmask of elink:VkVideoEncodeH265CtbSizeFlagBitsEXT
    describing the supported CTB sizes.
  * pname:inputImageDataAlignment reports the alignment, in pixels, for the
    width and height of the picture data within the images used in video
    encoding.
  * pname:maxNumL0ReferenceForP reports the maximum number of reference
    pictures the implementation supports in the reference list L0 for P
    pictures.
  * pname:maxNumL0ReferenceForB reports the maximum number of reference
    pictures the implementation supports in the reference list L0 for B
    pictures.
    The reported value is `0` if encoding of B pictures is not supported.
  * pname:maxNumL1Reference reports the maximum number of reference pictures
    the implementation supports in the reference list L1 if encoding of B
    pictures is supported.
    The reported value is `0` if encoding of B pictures is not supported.
  * pname:maxNumSubLayers reports the maximum number of sublayers.
  * pname:qualityLevelCount is the number of quality levels supported.
  * pname:stdExtensionVersion is a slink:VkExtensionProperties structure in
    which the H.265 extension name and version supported by the
    implementation are returned.

include::{generated}/validity/structs/VkVideoEncodeH265CapabilitiesEXT.txt[]
--

[open,refpage='VkVideoEncodeH265CapabilityFlagsEXT',desc='Reserved for future use',type='flags']
--
include::{generated}/api/flags/VkVideoEncodeH265CapabilityFlagsEXT.txt[]

tname:VkVideoEncodeH265CapabilityFlagsEXT is a bitmask type for setting a
mask, but is currently reserved for future use.

// ... a mask of zero or more elink:VkVideoEncodeH265CapabilityFlagBitsEXT.
--

[open,refpage='VkVideoEncodeH265InputModeFlagsEXT',desc='Bitmask of VkVideoEncodeH265InputModeFlagBitsEXT',type='flags']
--
include::{generated}/api/flags/VkVideoEncodeH265InputModeFlagsEXT.txt[]

tname:VkVideoEncodeH265InputModeFlagsEXT is a bitmask type for setting a
mask of zero or more elink:VkVideoEncodeH265InputModeFlagBitsEXT.
--

[open,refpage='VkVideoEncodeH265InputModeFlagBitsEXT',desc='Video encode H.265 input modes',type='enums']
--
Bits which may: be set in
slink:VkVideoEncodeH265CapabilitiesEXT::pname:inputModeFlags, indicating the
commmand buffer input granularities supported by the implementation, are:

include::{generated}/api/enums/VkVideoEncodeH265InputModeFlagBitsEXT.txt[]

  * ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT indicates that a
    single command buffer must: at least encode an entire frame.
    Any non-VCL NALUs must: be encoded using the same command buffer as the
    frame if ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT is not
    supported.
  * ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_BIT_EXT indicates that a
    single command buffer must: at least encode a single slice.
    Any non-VCL NALUs must: be encoded using the same command buffer as the
    first slice of the frame if
    ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT is not supported.
  * ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT indicates that a
    single command buffer may: encode a non-VCL NALU by itself.

An implementation must: support at least one of
ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT or
ename:VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_BIT_EXT.
--

[open,refpage='VkVideoEncodeH265OutputModeFlagsEXT',desc='Bitmask of VkVideoEncodeH265OutputModeFlagBitsEXT',type='flags']
--
include::{generated}/api/flags/VkVideoEncodeH265OutputModeFlagsEXT.txt[]

tname:VkVideoEncodeH265OutputModeFlagsEXT is a bitmask type for setting a
mask of zero or more elink:VkVideoEncodeH265OutputModeFlagBitsEXT.
--

[open,refpage='VkVideoEncodeH265OutputModeFlagBitsEXT',desc='Video encode H.265 output modes',type='enums']
--
Bits which may: be set in
slink:VkVideoEncodeH265CapabilitiesEXT::pname:outputModeFlags, indicating
the minimum bitstream generation commands that must: be included between
each flink:vkCmdBeginVideoCodingKHR and flink:vkCmdEndVideoCodingKHR pair
(henceforth simply begin/end pair), are:

include::{generated}/api/enums/VkVideoEncodeH265OutputModeFlagBitsEXT.txt[]

  * ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT indicates that
    calls to generate all NALUs of a frame must: be included within a single
    begin/end pair.
    Any non-VCL NALUs must: be encoded within the same begin/end pair if
    ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT is not supported.
  * ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_BIT_EXT indicates that each
    begin/end pair must: encode at least one slice.
    Any non-VCL NALUs must: be encoded within the same begin/end pair as the
    first slice of the frame if
    ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT is not supported.
  * ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT indicates that
    each begin/end pair may: encode only a non-VCL NALU by itself.
    An implementation must: support at least one of
    ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT or
    ename:VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_BIT_EXT.

A single begin/end pair must: not encode more than a single frame.

The bitstreams of NALUs generated within a single begin/end pair are written
continuously into the same bitstream buffer (any padding between the NALUs
must: be compliant to the H.265 standard).

The supported input modes must: be coarser or equal to the supported output
modes.
For example, it is illegal to report slice input is supported but only frame
output is supported.

An implementation must: report one of the following combinations of
input/output modes:

  * Input: Frame, Output: Frame
  * Input: Frame, Output: Frame and Non-VCL
  * Input: Frame, Output: Slice
  * Input: Frame, Output: Slice and Non-VCL
  * Input: Slice, Output: Slice
  * Input: Slice, Output: Slice and Non-VCL
  * Input: Frame and Non-VCL, Output: Frame and Non-VCL
  * Input: Frame and Non-VCL, Output: Slice and Non-VCL
  * Input: Slice and Non-VCL, Output: Slice and Non-VCL
--

[open,refpage='VkVideoEncodeH265CtbSizeFlagsEXT',desc='Bitmask of VkVideoEncodeH265CtbSizeFlagBitsEXT',type='flags']
--
include::{generated}/api/flags/VkVideoEncodeH265CtbSizeFlagsEXT.txt[]

tname:VkVideoEncodeH265CtbSizeFlagsEXT is a bitmask type for setting a mask
of zero or more elink:VkVideoEncodeH265CtbSizeFlagBitsEXT.
--

[open,refpage='VkVideoEncodeH265CtbSizeFlagBitsEXT',desc='Supported CTB sizes for H.265 video encode',type='enums']
--
Bits which may: be set in
slink:VkVideoEncodeH265CapabilitiesEXT::pname:ctbSizes, indicating the CTB
sizes supported by the implementation, are:

include::{generated}/api/enums/VkVideoEncodeH265CtbSizeFlagBitsEXT.txt[]

  * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_8_BIT_EXT specifies that a CTB size
    of 8x8 is supported.
  * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT specifies that a CTB size
    of 16x16 is supported.
  * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT specifies that a CTB size
    of 32x32 is supported.
  * ename:VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT specifies that a CTB size
    of 64x64 is supported.
--


=== Create Information

[open,refpage='VkVideoEncodeH265SessionCreateInfoEXT', desc='Structure specifies H.265 encoder creation parameters', type='structs']
--
When creating a Video Session object with
slink:VkVideoSessionCreateInfoKHR::pname:pVideoProfile->videoCodecOperation
specified as ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT, add a
slink:VkVideoEncodeH265SessionCreateInfoEXT structure to the pname:pNext
chain of the slink:VkVideoSessionCreateInfoKHR structure passed to
flink:vkCreateVideoSessionKHR in order to specify the H.265-specific video
encoder session creation parameters.

The sname:VkVideoEncodeH265SessionCreateInfoEXT structure is defined as:

include::{generated}/api/structs/VkVideoEncodeH265SessionCreateInfoEXT.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:flags is reserved for future use.
  * pname:pStdExtensionVersion is a pointer to a slink:VkExtensionProperties
    structure specifying the H.265 codec extension version.

include::{generated}/validity/structs/VkVideoEncodeH265SessionCreateInfoEXT.txt[]
--

[open,refpage='VkVideoEncodeH265CreateFlagsEXT',desc='Reserved for future use',type='flags']
--
include::{generated}/api/flags/VkVideoEncodeH265CreateFlagsEXT.txt[]

tname:VkVideoEncodeH265CreateFlagsEXT is a bitmask type for setting a mask,
but is currently reserved for future use.
--


=== Encoder H.265 Video Session Parameters Object

When creating a Video Session Parameters object, add a
slink:VkVideoEncodeH265SessionParametersCreateInfoEXT structure to the
pname:pNext chain of the slink:VkVideoSessionParametersCreateInfoKHR
structure passed to flink:vkCreateVideoSessionParametersKHR in order to
specify the H.265-specific video encoder session parameters.

[open,refpage='VkVideoEncodeH265SessionParametersCreateInfoEXT',desc='Structure specifies H.265 encoder parameter set info',type='structs']
--
The sname:VkVideoEncodeH265SessionParametersCreateInfoEXT structure is
defined as:

include::{generated}/api/structs/VkVideoEncodeH265SessionParametersCreateInfoEXT.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:maxVpsStdCount is the maximum number of entries of type
    code:StdVideoH265VideoParameterSet within
    sname:VkVideoSessionParametersKHR.
  * pname:maxSpsStdCount is the maximum number of entries of type
    code:StdVideoH265SequenceParameterSet within
    sname:VkVideoSessionParametersKHR.
  * pname:maxPpsStdCount is the maximum number of entries of type
    code:StdVideoH265PictureParameterSet within
    sname:VkVideoSessionParametersKHR.
  * pname:pParametersAddInfo is `NULL` or a pointer to a
    slink:VkVideoEncodeH265SessionParametersAddInfoEXT structure specifying
    the video session parameters to add upon creation of this object.

When a slink:VkVideoSessionParametersKHR object contains
pname:maxVpsStdCount code:StdVideoH265VideoParameterSet entries, no
additional code:StdVideoH265VideoParameterSet entries can be added to it,
and ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
to add these entries.
When a slink:VkVideoSessionParametersKHR object contains
pname:maxSpsStdCount code:StdVideoH265SequenceParameterSet entries, no
additional code:StdVideoH265SequenceParameterSet entries can be added to it,
and ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
to add these entries.
When a slink:VkVideoSessionParametersKHR object contains
pname:maxPpsStdCount code:StdVideoH265PictureParameterSet entries, no
additional code:StdVideoH265PictureParameterSet entries can be added to it,
and ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made
to add these entries.

include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersCreateInfoEXT.txt[]
--

[open,refpage='VkVideoEncodeH265SessionParametersAddInfoEXT',desc='Structure specifies H.265 encoder parameter set info',type='structs']
--
The sname:VkVideoEncodeH265SessionParametersAddInfoEXT structure is defined
as:

include::{generated}/api/structs/VkVideoEncodeH265SessionParametersAddInfoEXT.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:vpsStdCount is the number of VPS elements in pname:pVpsStd.
  * pname:pVpsStd is a pointer to an array of pname:vpsStdCount
    code:StdVideoH265VideoParameterSet structures representing H.265 video
    parameter sets.
  * pname:spsStdCount is the number of SPS elements in pname:pSpsStd.
  * pname:pSpsStd is a pointer to an array of pname:spsStdCount
    code:StdVideoH265SequenceParameterSet structures representing H.265
    sequence parameter sets.
  * pname:ppsStdCount is the number of PPS elements in pname:pPpsStd.
  * pname:pPpsStd is a pointer to an array of pname:ppsStdCount
    code:StdVideoH265PictureParameterSet structures representing H.265
    picture parameter sets.

include::{generated}/validity/structs/VkVideoEncodeH265SessionParametersAddInfoEXT.txt[]

.Valid Usage
****
  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-vpsStdCount-06438]]
    The values of pname:vpsStdCount, pname:spsStdCount and pname:ppsStdCount
    must: be less than or equal to the values of
    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT::pname:maxVpsStdCount,
    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT:pname:maxSpsStdCount,
    and
    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT:pname:maxPpsStdCount,
    respectively
  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pVpsStd-06439]]
    Each code:StdVideoH265VideoParameterSet entry in pname:pVpsStd must:
    have a unique H.265 VPS ID
  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pSpsStd-06440]]
    Each code:StdVideoH265SequenceParameterSet entry in pname:pSpsStd must:
    have a unique H.265 VPS-SPS ID pair
  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-pPpsStd-06441]]
    Each code:StdVideoH265PictureParameterSet entry in pname:pPpsStd must:
    have a unique H.265 VPS-SPS-PPS ID tuple
  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06442]]
    Each entry to be added must: have a unique, to the rest of the parameter
    array entries and the existing parameters in the Video Session
    Parameters Object that is being updated, VPS-SPS-PPS IDs
  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06443]]
    Parameter entries that already exist in Video Session Parameters object
    with a particular VPS-SPS-PPS IDs must: not be replaced nor updated
  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06444]]
    When creating a new object using a Video Session Parameters as a
    template, the array's parameters with the same VPS-SPS-PPS IDs as the
    ones from the template take precedence
  * [[VUID-VkVideoEncodeH265SessionParametersAddInfoEXT-None-06445]]
    VPS/SPS/PPS parameters must: comply with the limits specified in
    slink:VkVideoSessionCreateInfoKHR during Video Session creation
****
--


=== Frame Encoding

In order to encode a frame, add a slink:VkVideoEncodeH265VclFrameInfoEXT
structure to the pname:pNext chain of the slink:VkVideoEncodeInfoKHR
structure passed to the flink:vkCmdEncodeVideoKHR command.

[open,refpage='VkVideoEncodeH265VclFrameInfoEXT',desc='Structure specifies H.265 encode frame parameters',type='structs']
--
The structure slink:VkVideoEncodeH265VclFrameInfoEXT representing a frame
encode operation is defined as:

include::{generated}/api/structs/VkVideoEncodeH265VclFrameInfoEXT.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:pReferenceFinalLists is `NULL` or a pointer to a
    slink:VkVideoEncodeH265ReferenceListsEXT structure specifying the
    reference lists to be used for the current picture.
  * pname:naluSliceEntryCount is the number of slice NALUs in the frame.
  * pname:pNaluSliceEntries is a pointer to an array of
    slink:VkVideoEncodeH265NaluSliceEXT structures specifying the division
    of the current picture into slices and the properties of these slices.
  * pname:pCurrentPictureInfo is a pointer to a
    code:StdVideoEncodeH265PictureInfo structure specifying the syntax and
    other codec-specific information from the H.265 specification,
    associated with this picture.

include::{generated}/validity/structs/VkVideoEncodeH265VclFrameInfoEXT.txt[]
--

[open,refpage='VkVideoEncodeH265NaluSliceEXT',desc='Structure specifies H.265 encode slice NALU parameters',type='structs']
--
The structure slink:VkVideoEncodeH265NaluSliceEXT representing a slice is
defined as:

include::{generated}/api/structs/VkVideoEncodeH265NaluSliceEXT.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:ctbCount is the number of CTBs in this slice.
  * pname:pReferenceFinalLists is `NULL` or a pointer to a
    slink:VkVideoEncodeH265ReferenceListsEXT structure specifying the
    reference lists to be used for the current slice.
    If pname:pReferenceFinalLists is not `NULL`, these reference lists
    override the reference lists provided in
    slink:VkVideoEncodeH265VclFrameInfoEXT::pname:pReferenceFinalLists.
  * pname:pSliceHeaderStd is a pointer to a
    code:StdVideoEncodeH265SliceHeader structure specifying the slice header
    for the current slice.

include::{generated}/validity/structs/VkVideoEncodeH265NaluSliceEXT.txt[]
--

[open,refpage='VkVideoEncodeH265DpbSlotInfoEXT',desc='Structure specifies H.265 encode decoded pic info',type='structs']
--
The structure slink:VkVideoEncodeH265DpbSlotInfoEXT, representing a
reconstructed picture that is being used as a reference picture, is defined
as:

include::{generated}/api/structs/VkVideoEncodeH265DpbSlotInfoEXT.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:slotIndex is the <<dpb-slot, DPB Slot>> index for this picture.
  * pname:pStdReferenceInfo is a pointer to a
    code:StdVideoEncodeH265ReferenceInfo structure specifying the syntax and
    other codec-specific information from the H.265 specification,
    associated with this reference picture.

include::{generated}/validity/structs/VkVideoEncodeH265DpbSlotInfoEXT.txt[]
--

[open,refpage='VkVideoEncodeH265ReferenceListsEXT',desc='Structure specifies H.265 reference frame lists',type='structs']
--
The structure slink:VkVideoEncodeH265ReferenceListsEXT representing
reference lists is defined as:

include::{generated}/api/structs/VkVideoEncodeH265ReferenceListsEXT.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:referenceList0EntryCount is the number of reference pictures in
    reference list L0 and is identical to
    code:StdVideoEncodeH265SliceHeader::pname:num_ref_idx_l0_active_minus1 + 1.
  * pname:pReferenceList0Entries is a pointer to an array of
    pname:referenceList0EntryCount slink:VkVideoEncodeH265DpbSlotInfoEXT
    structures specifying the reference list L0 entries for the current
    picture.
  * pname:referenceList1EntryCount is the number of reference pictures in
    reference list L1 and is identical to
    code:StdVideoEncodeH265SliceHeader::pname:num_ref_idx_l1_active_minus1 + 1.
  * pname:pReferenceList1Entries is a pointer to an array of
    pname:referenceList1EntryCount slink:VkVideoEncodeH265DpbSlotInfoEXT
    structures specifying the reference list L1 entries for the current
    picture.
  * pname:pReferenceModifications is a pointer to a
    code:StdVideoEncodeH265ReferenceModifications structure specifying
    reference list modifications.

include::{generated}/validity/structs/VkVideoEncodeH265ReferenceListsEXT.txt[]
--

[open,refpage='VkVideoEncodeH265EmitPictureParametersEXT',desc='Structure specifies H.265 encode VPS NALU insertion parameters',type='structs']
--
The structure slink:VkVideoEncodeH265EmitPictureParametersEXT is defined as:

include::{generated}/api/structs/VkVideoEncodeH265EmitPictureParametersEXT.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:vpsId is the H.265 VPS ID for the H.265 VPS to insert in the
    bitstream.
    The VPS ID must: match the VPS provided in pname:vpsStd of
    slink:VkVideoEncodeH265SessionParametersCreateInfoEXT.
    This is retrieved from the slink:VkVideoSessionParametersKHR object
    provided in slink:VkVideoBeginCodingInfoKHR.
  * pname:spsId is the H.265 SPS ID for the H.265 SPS to insert in the
    bitstream.
    The SPS ID must: match one of the IDs of the SPS(s) provided in
    pname:pSpsStd of slink:VkVideoEncodeH265SessionParametersCreateInfoEXT
    to identify the SPS parameter set to insert in the bitstream.
    This is retrieved from the slink:VkVideoSessionParametersKHR object
    provided in slink:VkVideoBeginCodingInfoKHR.
  * pname:emitVpsEnable enables the emitting of the VPS structure with id of
    pname:vpsId.
  * pname:emitSpsEnable enables the emitting of the SPS structure with id of
    pname:spsId.
  * pname:ppsIdEntryCount is the number of entries in the
    pname:ppsIdEntries.
    If this parameter is `0` then no pps entries are going to be emitted in
    the bitstream.
  * pname:ppsIdEntries is the H.265 PPS IDs for the H.265 PPS to insert in
    the bitstream.
    The PPS IDs must: match one of the IDs of the PPS(s) provided in
    pname:pPpsStd of slink:VkVideoEncodeH265SessionParametersCreateInfoEXT
    to identify the PPS parameter set to insert in the bitstream.
    This is retrieved from the slink:VkVideoSessionParametersKHR object
    provided in slink:VkVideoBeginCodingInfoKHR.

include::{generated}/validity/structs/VkVideoEncodeH265EmitPictureParametersEXT.txt[]
--
