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