| // Copyright 2018-2021 The Khronos Group Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| [[encode-h264]] |
| == Encode H.264 |
| |
| This extension adds H.264 codec specific structures/types needed to support |
| H.264 encoding. |
| Unless otherwise noted, all references to the H.264 specification are to the |
| 2010 edition published by the ITU-T, dated March 2010. |
| This specification is available at http://www.itu.int/rec/T-REC-H.264. |
| |
| |
| === H.264 encode profile |
| |
| An H.264 encode profile is specified by including the |
| slink:VkVideoEncodeH264ProfileEXT structure in the pname:pNext chain of the |
| slink:VkVideoProfileKHR structure when |
| slink:VkVideoProfileKHR::pname:videoCodecOperation is |
| ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT. |
| |
| [open,refpage='VkVideoEncodeH264ProfileEXT',desc='Structure specifying H.264 encode profile',type='structs'] |
| -- |
| The slink:VkVideoEncodeH264ProfileEXT structure is defined as: |
| |
| include::{generated}/api/structs/VkVideoEncodeH264ProfileEXT.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:StdVideoH264ProfileIdc value specifying |
| the H.264 codec profile IDC. |
| |
| include::{generated}/validity/structs/VkVideoEncodeH264ProfileEXT.txt[] |
| -- |
| |
| |
| === Capabilities |
| |
| [open,refpage='VkVideoEncodeH264CapabilitiesEXT',desc='Structure specifying H.264 encode capabilities',type='structs'] |
| -- |
| When flink:vkGetPhysicalDeviceVideoCapabilitiesKHR is called to query the |
| capabilities with parameter pname:videoCodecOperation specified as |
| ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT, a |
| slink:VkVideoEncodeH264CapabilitiesEXT structure can: be chained to |
| slink:VkVideoCapabilitiesKHR to retrieve H.264 extension specific |
| capabilities. |
| |
| The slink:VkVideoEncodeH264CapabilitiesEXT structure is defined as: |
| |
| include::{generated}/api/structs/VkVideoEncodeH264CapabilitiesEXT.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 a bitmask of elink:VkVideoEncodeH264CapabilityFlagBitsEXT |
| describing supported encoding tools. |
| * pname:inputModeFlags is a bitmask of |
| elink:VkVideoEncodeH264InputModeFlagBitsEXT describing supported command |
| buffer input granularities/modes. |
| * pname:outputModeFlags is a bitmask of |
| elink:VkVideoEncodeH264OutputModeFlagBitsEXT describing supported output |
| (bitstream size reporting) granularities/modes. |
| * pname:maxPictureSizeInMbs reports the maximum encoded picture width and |
| height in Macroblocks. |
| * pname:minPictureSizeInMbs reports the minimum encoded picture width and |
| height in Macroblocks. |
| * pname:inputImageDataAlignment reports alignment of data that must: be |
| filled in the input image horizontally and vertically in pixels. |
| Max is 16: Data must: be filled up to Macroblock boundary (no |
| extrapolation/filling is supported by implementation). |
| Min is 1: The implementation will take care of all needed |
| extrapolation/filling up to the next Macroblock boundary. |
| * pname:maxNumL0ReferenceForP reports the maximum number of reference |
| pictures the encoder supports as list0 references for P pictures. |
| * pname:maxNumL0ReferenceForB reports the maximum number of reference |
| pictures the encoder supports as list0 references for B pictures. |
| Reports 0 if B pictures are not supported. |
| * pname:maxNumL1Reference reports the maximum number of reference pictures |
| the encoder supports as list1 references if B pictures are supported. |
| Reports 0 if B pictures are not supported. |
| * pname:qualityLevelCount is the number of discrete quality levels |
| supported. |
| * pname:stdExtensionVersion is the specific H.264 extension name and |
| version supported by this implementation. |
| |
| include::{generated}/validity/structs/VkVideoEncodeH264CapabilitiesEXT.txt[] |
| -- |
| |
| [open,refpage='VkVideoEncodeH264CapabilityFlagsEXT',desc='Bitmask of VkVideoEncodeH264CapabilityFlagBitsEXT',type='flags'] |
| -- |
| include::{generated}/api/flags/VkVideoEncodeH264CapabilityFlagsEXT.txt[] |
| |
| tname:VkVideoEncodeH264CapabilityFlagsEXT is a bitmask type for setting a |
| mask of zero or more elink:VkVideoEncodeH264CapabilityFlagBitsEXT. |
| -- |
| |
| [open,refpage='VkVideoEncodeH264CapabilityFlagBitsEXT',desc='Video encode H.264 capability flags',type='enums'] |
| -- |
| Bits which may: be set in |
| slink:VkVideoEncodeH264CapabilitiesEXT::pname:flags, indicating the encoding |
| tools supported, are: |
| |
| include::{generated}/api/enums/VkVideoEncodeH264CapabilityFlagBitsEXT.txt[] |
| |
| * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT reports if CABAC |
| entropy coding is supported. |
| * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT reports if CAVLC |
| entropy coding is supported. |
| An implementation must: support at least one entropy coding mode. |
| * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BI_PRED_IMPLICIT_BIT_EXT |
| reports if using weighted_bipred_idc_flag from StdVideoH264PpsFlags is |
| supported. |
| * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT reports if |
| enabling transform_8x8_mode_flag in StdVideoH264PpsFlags is supported. |
| * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT reports |
| if setting chroma_qp_index_offset in StdVideoH264PictureParameterSet is |
| supported. |
| * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT |
| reports if setting second_chroma_qp_index_offset in |
| StdVideoH264PictureParameterSet is supported. |
| * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT |
| reports if using STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLED |
| from StdVideoH264DisableDeblockingFilterIdc is supported. |
| * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT |
| reports if using STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLED |
| from StdVideoH264DisableDeblockingFilterIdc is supported. |
| * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT |
| reports if using STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_PARTIAL |
| from StdVideoH264DisableDeblockingFilterIdc is supported. |
| An implementation must: support at least one deblocking filter mode. |
| * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT |
| * ename:VK_VIDEO_ENCODE_H264_CAPABILITY_EVENLY_DISTRIBUTED_SLICE_SIZE_BIT_EXT |
| -- |
| |
| [open,refpage='VkVideoEncodeH264InputModeFlagsEXT',desc='Bitmask of VkVideoEncodeH264InputModeFlagBitsEXT',type='flags'] |
| -- |
| include::{generated}/api/flags/VkVideoEncodeH264InputModeFlagsEXT.txt[] |
| |
| tname:VkVideoEncodeH264InputModeFlagsEXT is a bitmask type for setting a |
| mask of zero or more elink:VkVideoEncodeH264InputModeFlagBitsEXT. |
| -- |
| |
| [open,refpage='VkVideoEncodeH264InputModeFlagBitsEXT',desc='Video encode H.264 input modes',type='enums'] |
| -- |
| The pname:inputModeFlags field reports the various commmand buffer input |
| granularities supported by the implementation as follows: |
| |
| include::{generated}/api/enums/VkVideoEncodeH264InputModeFlagBitsEXT.txt[] |
| |
| * ename:VK_VIDEO_ENCODE_H264_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_H264_INPUT_MODE_NON_VCL_BIT_EXT is not |
| supported. |
| * ename:VK_VIDEO_ENCODE_H264_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_H264_INPUT_MODE_NON_VCL_BIT_EXT is not supported. |
| * ename:VK_VIDEO_ENCODE_H264_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_H264_INPUT_MODE_FRAME_BIT_EXT or |
| ename:VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT. |
| -- |
| |
| [open,refpage='VkVideoEncodeH264OutputModeFlagsEXT',desc='Bitmask of VkVideoEncodeH264OutputModeFlagBitsEXT',type='flags'] |
| -- |
| include::{generated}/api/flags/VkVideoEncodeH264OutputModeFlagsEXT.txt[] |
| |
| tname:VkVideoEncodeH264OutputModeFlagsEXT is a bitmask type for setting a |
| mask of zero or more elink:VkVideoEncodeH264InputModeFlagBitsEXT. |
| -- |
| |
| [open,refpage='VkVideoEncodeH264OutputModeFlagBitsEXT',desc='Video encode H.264 output modes',type='enums'] |
| -- |
| Bits which may: be set in |
| slink:VkVideoEncodeH264CapabilitiesEXT::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/VkVideoEncodeH264OutputModeFlagBitsEXT.txt[] |
| |
| * ename:VK_VIDEO_ENCODE_H264_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_H264_OUTPUT_MODE_NON_VCL_BIT_EXT is not supported. |
| * ename:VK_VIDEO_ENCODE_H264_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_H264_OUTPUT_MODE_NON_VCL_BIT_EXT is not supported. |
| * ename:VK_VIDEO_ENCODE_H264_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_H264_OUTPUT_MODE_FRAME_BIT_EXT or |
| ename:VK_VIDEO_ENCODE_H264_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.264 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 |
| -- |
| |
| |
| === Create Information |
| |
| [open,refpage='VkVideoEncodeH264SessionCreateInfoEXT', desc='Structure specifies H.264 encoder creation parameters', type='structs'] |
| -- |
| A slink:VkVideoEncodeH264SessionCreateInfoEXT structure must: be chained to |
| slink:VkVideoSessionCreateInfoKHR when the function |
| flink:vkCreateVideoSessionKHR is called with pname:videoCodecOperation in |
| slink:VkVideoSessionCreateInfoKHR set to |
| ename:VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT. |
| |
| The sname:VkVideoEncodeH264SessionCreateInfoEXT structure is defined as: |
| |
| include::{generated}/api/structs/VkVideoEncodeH264SessionCreateInfoEXT.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 a bitmask of tlink:VkVideoEncodeH264CreateFlagsEXT |
| specifying H.264 encoder creation flags. |
| * pname:maxPictureSizeInMbs specifies the syntax element |
| pic_width_in_mbs_minus1 + 1 and the syntax element |
| pic_height_in_map_units_minus1 + 1. |
| * pname:pStdExtensionVersion is a pointer to a slink:VkExtensionProperties |
| structure specifying H.264 codec extensions. |
| |
| include::{generated}/validity/structs/VkVideoEncodeH264SessionCreateInfoEXT.txt[] |
| -- |
| |
| [open,refpage='VkVideoEncodeH264CreateFlagsEXT',desc='Bitmask specifying the video encode session creation flags',type='flags'] |
| -- |
| include::{generated}/api/flags/VkVideoEncodeH264CreateFlagsEXT.txt[] |
| |
| tlink:VkVideoEncodeH264CreateFlagsEXT is a bitmask type for setting a mask |
| of zero or more elink:VkVideoEncodeH264CreateFlagBitsEXT. |
| -- |
| |
| [open,refpage='VkVideoEncodeH264CreateFlagBitsEXT',desc='Video encode session creation flags',type='enums'] |
| -- |
| Bits which can: be set in |
| slink:VkVideoEncodeH264SessionCreateInfoEXT::pname:flags are: |
| |
| include::{generated}/api/enums/VkVideoEncodeH264CreateFlagBitsEXT.txt[] |
| |
| * ename:VK_VIDEO_ENCODE_H264_CREATE_DEFAULT_EXT is 0, and specifies no |
| additional creation flags. |
| * ename:VK_VIDEO_ENCODE_H264_CREATE_RESERVED_0_BIT_EXT The current version |
| of the specification has reserved this value for future use. |
| -- |
| |
| |
| === Encoder Parameter Sets |
| |
| To reduce parameter traffic during encoding, the encoder parameter set |
| object supports storing H.264 SPS/PPS parameter sets that may: be later |
| referenced during encoding. |
| |
| [open,refpage='VkVideoEncodeH264SessionParametersCreateInfoEXT',desc='Structure specifies H.264 encoder parameter set information',type='structs'] |
| -- |
| A slink:VkVideoEncodeH264SessionParametersCreateInfoEXT structure holding |
| one H.264 SPS and at least one H.264 PPS paramater set must: be chained to |
| slink:VkVideoSessionParametersCreateInfoKHR when calling |
| flink:vkCreateVideoSessionParametersKHR to store these parameter set(s) with |
| the encoder parameter set object for later reference. |
| The provided H.264 SPS/PPS parameters must: be within the limits specified |
| during encoder creation for the encoder specified in |
| slink:VkVideoSessionParametersCreateInfoKHR. |
| |
| The slink:VkVideoEncodeH264SessionParametersCreateInfoEXT structure is |
| defined as: |
| |
| include::{generated}/api/structs/VkVideoEncodeH264SessionParametersCreateInfoEXT.txt[] |
| |
| * pname:sType is the type of this structure. |
| * pname:pNext is `NULL` or a pointer to a structure extending this |
| structure. |
| * pname:maxSpsStdCount is the maximum number of SPS parameters that the |
| sname:VkVideoSessionParametersKHR can contain. |
| * pname:maxPpsStdCount is the maximum number of PPS parameters that the |
| sname:VkVideoSessionParametersKHR can contain. |
| * pname:pParametersAddInfo is `NULL` or a pointer to a |
| sname:VkVideoEncodeH264SessionParametersAddInfoEXT structure specifying |
| H.264 parameters to add upon object creation. |
| |
| include::{generated}/validity/structs/VkVideoEncodeH264SessionParametersCreateInfoEXT.txt[] |
| -- |
| |
| [open,refpage='VkVideoEncodeH264SessionParametersAddInfoEXT',desc='Structure specifies H.264 encoder parameter set information',type='structs'] |
| -- |
| include::{generated}/api/structs/VkVideoEncodeH264SessionParametersAddInfoEXT.txt[] |
| * pname:sType is the type of this structure. |
| * pname:pNext is `NULL` or a pointer to a structure extending this |
| structure. |
| * pname:spsStdCount is the number of SPS elements in the pname:pSpsStd. |
| Its value must: be less than or equal to the value of |
| pname:maxSpsStdCount. |
| * pname:pSpsStd is a pointer to an array of |
| code:StdVideoH264SequenceParameterSet structures representing H.264 |
| sequence parameter sets. |
| Each element of the array must: have a unique H.264 SPS ID. |
| * pname:ppsStdCount is the number of PPS provided in pname:pPpsStd. |
| Its value must: be less than or equal to the value of |
| pname:maxPpsStdCount. |
| * pname:pPpsStd is a pointer to an array of |
| code:StdVideoH264PictureParameterSet structures representing H.264 |
| picture parameter sets. |
| Each element of the array must: have a unique H.264 SPS-PPS ID pair. |
| |
| .Valid Usage |
| **** |
| * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-spsStdCount-04837]] |
| The values of pname:spsStdCount and pname:ppsStdCount must: be less than |
| or equal to the values of pname:maxSpsStdCount and pname:maxPpsStdCount, |
| respectively |
| * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-maxSpsStdCount-04838]] |
| When the pname:maxSpsStdCount number of parameters of type |
| StdVideoH264SequenceParameterSet in the Video Session Parameters object |
| is reached, no additional parameters of that type can be added to the |
| object. |
| ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made |
| to add additional data to this object at this point |
| * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-maxPpsStdCount-04839]] |
| When the pname:maxPpsStdCount number of parameters of type |
| StdVideoH264PictureParameterSet in the Video Session Parameters object |
| is reached, no additional parameters of that type can be added to the |
| object. |
| ename:VK_ERROR_TOO_MANY_OBJECTS will be returned if an attempt is made |
| to add additional data to this object at this point |
| * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-None-04840]] |
| 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, SPS-PPS IDs |
| * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-None-04841]] |
| Parameter entries that already exist in Video Session Parameters object |
| with a particular SPS-PPS IDs cannot: be replaced nor updated |
| * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-None-04842]] |
| When creating a new object using a Video Session Parameters as a |
| template, the array's parameters with the same SPS-PPS IDs as the ones |
| from the template take precedence |
| * [[VUID-VkVideoEncodeH264SessionParametersAddInfoEXT-None-04843]] |
| SPS/PPS parameters must: comply with the limits specified in |
| slink:VkVideoSessionCreateInfoKHR during Video Session creation |
| **** |
| |
| include::{generated}/validity/structs/VkVideoEncodeH264SessionParametersAddInfoEXT.txt[] |
| -- |
| |
| |
| === Frame Encoding |
| |
| In order to encode a frame, add a slink:VkVideoEncodeH264VclFrameInfoEXT |
| structure to the pname:pNext chain of the slink:VkVideoEncodeInfoKHR |
| structure passed to the flink:vkCmdEncodeVideoKHR command. |
| |
| [open,refpage='VkVideoEncodeH264VclFrameInfoEXT',desc='Structure specifies H.264 encode frame parameters',type='structs'] |
| -- |
| The structure slink:VkVideoEncodeH264VclFrameInfoEXT representing a frame |
| encode operation is defined as: |
| |
| include::{generated}/api/structs/VkVideoEncodeH264VclFrameInfoEXT.txt[] |
| |
| * pname:sType is the type of this structure. |
| * pname:pNext is `NULL` or a pointer to a structure extending this |
| structure. |
| * pname:refDefaultFinalList0EntryCount is the default number of reference |
| List0 entries for all slices of this frame. |
| Each slice may: override this by providing its own List0 entries. |
| * pname:pRefDefaultFinalList0Entries is a pointer to an array of |
| slink:VkVideoEncodeH264DpbSlotInfoEXT structures providing information |
| for each reference List0 entry. |
| The entries provided must: be ordered after all reference List0 |
| modification operations are applied (i.e. final list order). |
| The entires provided must: not reflect decoded picture marking |
| operations in this frame that are applicable to references; the impact |
| of such operations must: be reflected in future frame encode cmds. |
| The slot index in each entry must: match one of the slot indexes |
| provided in pname:pReferenceSlots of the slink:VkVideoEncodeInfoKHR |
| structure to which this structure is chained. |
| * pname:refDefaultFinalList1EntryCount is the default number of reference |
| List1 entries for all slices of this frame. |
| Each slice may: override this by providing its own List1 entries. |
| * pname:pRefDefaultFinalList1Entries is a pointer to an array of |
| slink:VkVideoEncodeH264DpbSlotInfoEXT structures providing information |
| related to each reference List1 entry. |
| The entries provided must: be ordered after all reference List1 |
| modification operations are applied (i.e. final list order). |
| The entires provided must: not reflect decoded picture marking |
| operations in this frame that are applicable to references; the impact |
| of such operations must: be reflected in future frame encode cmds. |
| The slot index in each entry must: match one of the slot indexes |
| provided in pname:pReferenceSlots of the slink:VkVideoEncodeInfoKHR |
| structure to which this structure is chained. |
| * pname:naluSliceEntryCount is the number of NALUs in this frame. |
| * pname:pNaluSliceEntries is a pointer to an array of pname:naluCount |
| slink:VkVideoEncodeH264NaluSliceEXT structures that make up the frame. |
| This is an ordered sequence; the NALUs are generated consecutively in |
| the bitstream buffer (provided in pname:bitstreamBuffer in |
| slink:VkVideoBeginCodingInfoKHR) in the same order as in this array. |
| * pname:pCurrentPictureInfo is a pointer to a |
| slink:VkVideoEncodeH264DpbSlotInfoEXT structure specifying information |
| for the reconstructed picture for this frame. |
| Info provided must: reflect decoded picture marking operations in this |
| frame that are applicable to this frame. |
| The slot index in pCurrentPictureInfo must: match the slot index |
| provided in pname:pSetupReferenceSlot of slink:VkVideoEncodeInfoKHR |
| structure to which this structure is chained to. |
| |
| include::{generated}/validity/structs/VkVideoEncodeH264VclFrameInfoEXT.txt[] |
| -- |
| |
| [open,refpage='VkVideoEncodeH264DpbSlotInfoEXT',desc='Structure specifies H.264 encode DPB picture information',type='structs'] |
| -- |
| The slink:VkVideoEncodeH264DpbSlotInfoEXT structure correlates a DPB Slot |
| index with codec-specific information and is defined as: |
| |
| include::{generated}/api/structs/VkVideoEncodeH264DpbSlotInfoEXT.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 slot index for this picture. |
| pname:slotIndex must: match the pname:slotIndex in |
| pname:pSetupReferenceSlot of slink:VkVideoEncodeInfoKHR in the command |
| used to encode the corresponding picture. |
| * pname:pStdPictureInfo is a pointer to a |
| code:StdVideoEncodeH264PictureInfo structure specifying codec standard |
| specific syntax/information associated with this picture from the H.264 |
| specification. |
| |
| include::{generated}/validity/structs/VkVideoEncodeH264DpbSlotInfoEXT.txt[] |
| -- |
| |
| [open,refpage='VkVideoEncodeH264NaluSliceEXT',desc='Structure specifies H.264 encode slice NALU parameters',type='structs'] |
| -- |
| The structure slink:VkVideoEncodeH264NaluSliceEXT representing a slice is |
| defined as: |
| |
| include::{generated}/api/structs/VkVideoEncodeH264NaluSliceEXT.txt[] |
| * pname:sType is the type of this structure. |
| * pname:pNext is `NULL` or a pointer to a structure extending this |
| structure. |
| * pname:pSliceHeaderStd is a pointer to a |
| code:StdVideoEncodeH264SliceHeader specifying the standard slice header |
| from the H.264 specification. |
| * pname:mbCount is the number of macroblocks in this slice. |
| * pname:refFinalList0EntryCount is the number of active references in |
| List0. |
| If zero, the default frame List0 provided in the enclosing |
| slink:VkVideoEncodeH264VclFrameInfoEXT is used. |
| If non-zero, it overrides the default frame List0 for this slice. |
| * pname:pRefFinalList0Entries is a pointer to a |
| slink:VkVideoEncodeH264DpbSlotInfoEXT specifying DPB information for the |
| active List0 references. |
| The same restrictions related to order of entries and decoded picture |
| marking operations described for List0 in |
| slink:VkVideoEncodeH264VclFrameInfoEXT apply here. |
| * pname:refFinalList1EntryCount is the number of active references in |
| List1. |
| If zero, the default frame List1 provided in the enclosing |
| slink:VkVideoEncodeH264VclFrameInfoEXT is used. |
| If non-zero, it overrides the default frame List1 for this slice. |
| * pname:pRefFinalList1Entries is a pointer to a |
| slink:VkVideoEncodeH264DpbSlotInfoEXT structure specifying DPB |
| information for the active List1 references. |
| The same restrictions related to order of entries and decoded picture |
| marking operations described for List1 in |
| slink:VkVideoEncodeH264VclFrameInfoEXT apply here. |
| * pname:precedingNaluBytes specifies the number of bytes consumed by |
| non-VCL NALUs inserted before this slice (not through this API). |
| * pname:minQp is the minimum quantization parameter when rate control is |
| enabled. |
| * pname:maxQp is the maximum quantization parameter when rate control is |
| enabled. |
| |
| ifdef::editing-notes[] |
| [NOTE] |
| .editing-note |
| ==== |
| TODO: move pname:precedingNaluBytes, pname:minQp, and pname:maxQP to the |
| Frame/SliceRC struct? |
| ==== |
| endif::editing-notes[] |
| |
| When rate control is disabled, pname:minQp and pname:maxQp must: be set to |
| the same QP value. |
| |
| include::{generated}/validity/structs/VkVideoEncodeH264NaluSliceEXT.txt[] |
| -- |
| |
| [open,refpage='VkVideoEncodeH264EmitPictureParametersEXT',desc='Structure specifies H.264 encode SPS NALU insertion parameters',type='structs'] |
| -- |
| The structure slink:VkVideoEncodeH264EmitPictureParametersEXT is defined as: |
| |
| include::{generated}/api/structs/VkVideoEncodeH264EmitPictureParametersEXT.txt[] |
| |
| * pname:sType is the type of this structure. |
| * pname:pNext is `NULL` or a pointer to a structure extending this |
| structure. |
| * pname:spsId is the H.264 SPS ID for the H.264 SPS to insert in the |
| bitstream. |
| The SPS ID must: match the SPS provided in pname:spsStd of |
| slink:VkVideoEncodeH264SessionParametersCreateInfoEXT. |
| This is retrieved from the slink:VkVideoSessionParametersKHR object |
| provided in slink:VkVideoBeginCodingInfoKHR. |
| * 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 a pointer to an array of H.264 PPS IDs for the |
| H.264 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:VkVideoEncodeH264SessionParametersCreateInfoEXT |
| 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/VkVideoEncodeH264EmitPictureParametersEXT.txt[] |
| -- |