2 * Copyright (C) 2023 Biswapriyo Nath
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 import
"dxgicommon.idl";
24 typedef enum D3D12_VIDEO_FIELD_TYPE
26 D3D12_VIDEO_FIELD_TYPE_NONE
= 0,
27 D3D12_VIDEO_FIELD_TYPE_INTERLACED_TOP_FIELD_FIRST
= 1,
28 D3D12_VIDEO_FIELD_TYPE_INTERLACED_BOTTOM_FIELD_FIRST
= 2,
29 } D3D12_VIDEO_FIELD_TYPE
;
31 typedef enum D3D12_VIDEO_FRAME_STEREO_FORMAT
33 D3D12_VIDEO_FRAME_STEREO_FORMAT_NONE
= 0,
34 D3D12_VIDEO_FRAME_STEREO_FORMAT_MONO
= 1,
35 D3D12_VIDEO_FRAME_STEREO_FORMAT_HORIZONTAL
= 2,
36 D3D12_VIDEO_FRAME_STEREO_FORMAT_VERTICAL
= 3,
37 D3D12_VIDEO_FRAME_STEREO_FORMAT_SEPARATE
= 4,
38 } D3D12_VIDEO_FRAME_STEREO_FORMAT
;
40 typedef enum D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE
42 D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_NONE
= 0,
43 D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_FIELD_BASED
= 1,
44 } D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE
;
46 typedef enum D3D12_FEATURE_VIDEO
48 D3D12_FEATURE_VIDEO_DECODE_SUPPORT
= 0,
49 D3D12_FEATURE_VIDEO_DECODE_PROFILES
= 1,
50 D3D12_FEATURE_VIDEO_DECODE_FORMATS
= 2,
51 D3D12_FEATURE_VIDEO_DECODE_CONVERSION_SUPPORT
= 3,
52 D3D12_FEATURE_VIDEO_PROCESS_SUPPORT
= 5,
53 D3D12_FEATURE_VIDEO_PROCESS_MAX_INPUT_STREAMS
= 6,
54 D3D12_FEATURE_VIDEO_PROCESS_REFERENCE_INFO
= 7,
55 D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE
= 8,
56 D3D12_FEATURE_VIDEO_PROCESSOR_SIZE
= 9,
57 D3D12_FEATURE_VIDEO_DECODE_PROFILE_COUNT
= 10,
58 D3D12_FEATURE_VIDEO_DECODE_FORMAT_COUNT
= 11,
59 D3D12_FEATURE_VIDEO_ARCHITECTURE
= 17,
60 D3D12_FEATURE_VIDEO_DECODE_HISTOGRAM
= 18,
61 D3D12_FEATURE_VIDEO_FEATURE_AREA_SUPPORT
= 19,
62 D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR
= 20,
63 D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_SIZE
= 21,
64 D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_COUNT
= 22,
65 D3D12_FEATURE_VIDEO_EXTENSION_COMMANDS
= 23,
66 D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT
= 24,
67 D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_PARAMETERS
= 25,
68 D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_SUPPORT
= 26,
69 D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_SIZE
= 27,
70 D3D12_FEATURE_VIDEO_DECODE_PROTECTED_RESOURCES
= 28,
71 D3D12_FEATURE_VIDEO_PROCESS_PROTECTED_RESOURCES
= 29,
72 D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES
= 30,
73 D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE1
= 31,
74 D3D12_FEATURE_VIDEO_PROCESSOR_SIZE1
= 32,
75 D3D12_FEATURE_VIDEO_ENCODER_CODEC
= 33,
76 D3D12_FEATURE_VIDEO_ENCODER_PROFILE_LEVEL
= 34,
77 D3D12_FEATURE_VIDEO_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT
= 35,
78 D3D12_FEATURE_VIDEO_ENCODER_OUTPUT_RESOLUTION
= 36,
79 D3D12_FEATURE_VIDEO_ENCODER_INPUT_FORMAT
= 37,
80 D3D12_FEATURE_VIDEO_ENCODER_RATE_CONTROL_MODE
= 38,
81 D3D12_FEATURE_VIDEO_ENCODER_INTRA_REFRESH_MODE
= 39,
82 D3D12_FEATURE_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE
= 40,
83 D3D12_FEATURE_VIDEO_ENCODER_HEAP_SIZE
= 41,
84 D3D12_FEATURE_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT
= 42,
85 D3D12_FEATURE_VIDEO_ENCODER_SUPPORT
= 43,
86 D3D12_FEATURE_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT
= 44,
87 D3D12_FEATURE_VIDEO_ENCODER_RESOURCE_REQUIREMENTS
= 45,
88 } D3D12_FEATURE_VIDEO
;
90 typedef enum D3D12_BITSTREAM_ENCRYPTION_TYPE
92 D3D12_BITSTREAM_ENCRYPTION_TYPE_NONE
= 0,
93 } D3D12_BITSTREAM_ENCRYPTION_TYPE
;
95 typedef struct D3D12_VIDEO_DECODE_CONFIGURATION
98 D3D12_BITSTREAM_ENCRYPTION_TYPE BitstreamEncryption
;
99 D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE InterlaceType
;
100 } D3D12_VIDEO_DECODE_CONFIGURATION
;
102 typedef struct D3D12_VIDEO_DECODER_DESC
105 D3D12_VIDEO_DECODE_CONFIGURATION Configuration
;
106 } D3D12_VIDEO_DECODER_DESC
;
108 typedef struct D3D12_VIDEO_DECODER_HEAP_DESC
111 D3D12_VIDEO_DECODE_CONFIGURATION Configuration
;
115 DXGI_RATIONAL FrameRate
;
117 UINT MaxDecodePictureBufferCount
;
118 } D3D12_VIDEO_DECODER_HEAP_DESC
;
120 typedef struct D3D12_VIDEO_SIZE_RANGE
126 } D3D12_VIDEO_SIZE_RANGE
;
128 typedef enum D3D12_VIDEO_PROCESS_FILTER
130 D3D12_VIDEO_PROCESS_FILTER_BRIGHTNESS
= 0,
131 D3D12_VIDEO_PROCESS_FILTER_CONTRAST
= 1,
132 D3D12_VIDEO_PROCESS_FILTER_HUE
= 2,
133 D3D12_VIDEO_PROCESS_FILTER_SATURATION
= 3,
134 D3D12_VIDEO_PROCESS_FILTER_NOISE_REDUCTION
= 4,
135 D3D12_VIDEO_PROCESS_FILTER_EDGE_ENHANCEMENT
= 5,
136 D3D12_VIDEO_PROCESS_FILTER_ANAMORPHIC_SCALING
= 6,
137 D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT
= 7,
138 } D3D12_VIDEO_PROCESS_FILTER
;
140 typedef enum D3D12_VIDEO_PROCESS_FILTER_FLAGS
142 D3D12_VIDEO_PROCESS_FILTER_FLAG_NONE
= 0x0,
143 D3D12_VIDEO_PROCESS_FILTER_FLAG_BRIGHTNESS
= (1 << D3D12_VIDEO_PROCESS_FILTER_BRIGHTNESS
),
144 D3D12_VIDEO_PROCESS_FILTER_FLAG_CONTRAST
= (1 << D3D12_VIDEO_PROCESS_FILTER_CONTRAST
),
145 D3D12_VIDEO_PROCESS_FILTER_FLAG_HUE
= (1 << D3D12_VIDEO_PROCESS_FILTER_HUE
),
146 D3D12_VIDEO_PROCESS_FILTER_FLAG_SATURATION
= (1 << D3D12_VIDEO_PROCESS_FILTER_SATURATION
),
147 D3D12_VIDEO_PROCESS_FILTER_FLAG_NOISE_REDUCTION
= (1 << D3D12_VIDEO_PROCESS_FILTER_NOISE_REDUCTION
),
148 D3D12_VIDEO_PROCESS_FILTER_FLAG_EDGE_ENHANCEMENT
= (1 << D3D12_VIDEO_PROCESS_FILTER_EDGE_ENHANCEMENT
),
149 D3D12_VIDEO_PROCESS_FILTER_FLAG_ANAMORPHIC_SCALING
= (1 << D3D12_VIDEO_PROCESS_FILTER_ANAMORPHIC_SCALING
),
150 D3D12_VIDEO_PROCESS_FILTER_FLAG_STEREO_ADJUSTMENT
= (1 << D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT
),
151 } D3D12_VIDEO_PROCESS_FILTER_FLAGS
;
152 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FILTER_FLAGS);")
154 typedef enum D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS
156 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_NONE
= 0x0,
157 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_BOB
= 0x1,
158 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_CUSTOM
= 0x80000000,
159 } D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS
;
160 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS );")
162 typedef struct D3D12_VIDEO_PROCESS_LUMA_KEY
167 } D3D12_VIDEO_PROCESS_LUMA_KEY
;
169 typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC
172 DXGI_COLOR_SPACE_TYPE ColorSpace
;
173 DXGI_RATIONAL SourceAspectRatio
;
174 DXGI_RATIONAL DestinationAspectRatio
;
175 DXGI_RATIONAL FrameRate
;
176 D3D12_VIDEO_SIZE_RANGE SourceSizeRange
;
177 D3D12_VIDEO_SIZE_RANGE DestinationSizeRange
;
178 BOOL EnableOrientation
;
179 D3D12_VIDEO_PROCESS_FILTER_FLAGS FilterFlags
;
180 D3D12_VIDEO_FRAME_STEREO_FORMAT StereoFormat
;
181 D3D12_VIDEO_FIELD_TYPE FieldType
;
182 D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceMode
;
183 BOOL EnableAlphaBlending
;
184 D3D12_VIDEO_PROCESS_LUMA_KEY LumaKey
;
186 UINT NumFutureFrames
;
187 BOOL EnableAutoProcessing
;
188 } D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC
;
190 typedef enum D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE
192 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_OPAQUE
= 0,
193 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_BACKGROUND
= 1,
194 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_DESTINATION
= 2,
195 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_SOURCE_STREAM
= 3,
196 } D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE
;
198 typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC
201 DXGI_COLOR_SPACE_TYPE ColorSpace
;
202 D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE AlphaFillMode
;
203 UINT AlphaFillModeSourceStreamIndex
;
204 FLOAT BackgroundColor
[4];
205 DXGI_RATIONAL FrameRate
;
207 } D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC
;
210 uuid(0946b7c9
-ebf6
-4047-bb73
-8683e27dbb1f
),
213 pointer_default(unique)
215 interface ID3D12VideoDecoderHeap
: ID3D12Pageable
217 D3D12_VIDEO_DECODER_HEAP_DESC GetDesc
();
221 uuid(1f052807
-0b46
-4acc
-8a89
-364f793718a4
),
224 pointer_default(unique)
226 interface ID3D12VideoDevice
: IUnknown
228 HRESULT CheckFeatureSupport
(
229 D3D12_FEATURE_VIDEO feature_video
,
230 [in, out] void *feature_support_data
,
231 UINT feature_support_data_size
234 HRESULT CreateVideoDecoder
(
235 [in] const D3D12_VIDEO_DECODER_DESC
*desc
,
237 [out, iid_is(riid
)] void **video_decoder
240 HRESULT CreateVideoDecoderHeap
(
241 [in] const D3D12_VIDEO_DECODER_HEAP_DESC
*video_decoder_heap_desc
,
243 [out, iid_is(riid
)] void **video_decoder_heap
246 HRESULT CreateVideoProcessor
(
248 [in] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC
*output_stream_desc
,
249 [in] UINT input_stream_descs_count
,
250 [in] const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC
*input_stream_descs
,
252 [out, iid_is(riid
)] void **video_processor
257 uuid(c59b6bdc
-7720-4074-a136
-17a156037470
),
260 pointer_default(unique)
262 interface ID3D12VideoDecoder
: ID3D12Pageable
264 D3D12_VIDEO_DECODER_DESC GetDesc
();
267 typedef enum D3D12_VIDEO_DECODE_TIER
269 D3D12_VIDEO_DECODE_TIER_NOT_SUPPORTED
= 0,
270 D3D12_VIDEO_DECODE_TIER_1
= 1,
271 D3D12_VIDEO_DECODE_TIER_2
= 2,
272 D3D12_VIDEO_DECODE_TIER_3
= 3,
273 } D3D12_VIDEO_DECODE_TIER
;
275 typedef enum D3D12_VIDEO_DECODE_SUPPORT_FLAGS
277 D3D12_VIDEO_DECODE_SUPPORT_FLAG_NONE
= 0x0,
278 D3D12_VIDEO_DECODE_SUPPORT_FLAG_SUPPORTED
= 0x1,
279 } D3D12_VIDEO_DECODE_SUPPORT_FLAGS
;
280 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_SUPPORT_FLAGS);")
282 typedef enum D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS
284 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_NONE
= 0x0,
285 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_HEIGHT_ALIGNMENT_MULTIPLE_32_REQUIRED
= 0x1,
286 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_POST_PROCESSING_SUPPORTED
= 0x2,
287 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_REFERENCE_ONLY_ALLOCATIONS_REQUIRED
= 0x4,
288 D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_ALLOW_RESOLUTION_CHANGE_ON_NON_KEY_FRAME
= 0x8,
289 } D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS
;
290 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS);")
292 typedef enum D3D12_VIDEO_DECODE_ARGUMENT_TYPE
294 D3D12_VIDEO_DECODE_ARGUMENT_TYPE_PICTURE_PARAMETERS
= 0,
295 D3D12_VIDEO_DECODE_ARGUMENT_TYPE_INVERSE_QUANTIZATION_MATRIX
= 1,
296 D3D12_VIDEO_DECODE_ARGUMENT_TYPE_SLICE_CONTROL
= 2,
297 D3D12_VIDEO_DECODE_ARGUMENT_TYPE_MAX_VALID
= 3,
298 } D3D12_VIDEO_DECODE_ARGUMENT_TYPE
;
300 typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT
303 D3D12_VIDEO_DECODE_CONFIGURATION Configuration
;
306 DXGI_FORMAT DecodeFormat
;
307 DXGI_RATIONAL FrameRate
;
309 D3D12_VIDEO_DECODE_SUPPORT_FLAGS SupportFlags
;
310 D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS ConfigurationFlags
;
311 D3D12_VIDEO_DECODE_TIER DecodeTier
;
312 } D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT
;
314 typedef struct D3D12_VIDEO_DECODE_FRAME_ARGUMENT
316 D3D12_VIDEO_DECODE_ARGUMENT_TYPE Type
;
319 } D3D12_VIDEO_DECODE_FRAME_ARGUMENT
;
321 typedef struct D3D12_VIDEO_DECODE_REFERENCE_FRAMES
324 ID3D12Resource
**ppTexture2Ds
;
326 ID3D12VideoDecoderHeap
**ppHeaps
;
327 } D3D12_VIDEO_DECODE_REFERENCE_FRAMES
;
329 typedef struct D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM
331 ID3D12Resource
*pBuffer
;
334 } D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM
;
336 typedef struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS
339 ID3D12Resource
*pReferenceTexture2D
;
340 UINT ReferenceSubresource
;
341 DXGI_COLOR_SPACE_TYPE OutputColorSpace
;
342 DXGI_COLOR_SPACE_TYPE DecodeColorSpace
;
343 } D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS
;
345 typedef struct D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS
347 UINT NumFrameArguments
;
348 D3D12_VIDEO_DECODE_FRAME_ARGUMENT FrameArguments
[D3D12_VIDEO_DECODE_MAX_ARGUMENTS
];
349 D3D12_VIDEO_DECODE_REFERENCE_FRAMES ReferenceFrames
;
350 D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM CompressedBitstream
;
351 ID3D12VideoDecoderHeap
*pHeap
;
352 } D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS
;
354 typedef struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS
356 ID3D12Resource
*pOutputTexture2D
;
357 UINT OutputSubresource
;
358 D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS ConversionArguments
;
359 } D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS
;
362 uuid(3b60536e
-ad29
-4e64
-a269
-f853837e5e53
),
365 pointer_default(unique)
367 interface ID3D12VideoDecodeCommandList
: ID3D12CommandList
372 [in] ID3D12CommandAllocator
*allocator
377 void ResourceBarrier
(
378 [in] UINT barriers_count
,
379 [in] const D3D12_RESOURCE_BARRIER
*barriers
382 void DiscardResource
(
383 [in] ID3D12Resource
*resource
,
384 [in, optional] const D3D12_DISCARD_REGION
*region
388 [in] ID3D12QueryHeap
*query_heap
,
389 [in] D3D12_QUERY_TYPE type
,
394 [in] ID3D12QueryHeap
*query_heap
,
395 [in] D3D12_QUERY_TYPE type
,
399 void ResolveQueryData
(
400 [in] ID3D12QueryHeap
*query_heap
,
401 [in] D3D12_QUERY_TYPE type
,
402 [in] UINT start_index
,
403 [in] UINT queries_count
,
404 [in] ID3D12Resource
*destination_buffer
,
405 [in] UINT64 aligned_destination_buffer_offset
409 [in, optional] ID3D12Resource
*buffer
,
410 [in] UINT64 aligned_buffer_offset
,
411 [in] D3D12_PREDICATION_OP operation
416 [in] const void *data
,
422 [in] const void *data
,
429 [in] ID3D12VideoDecoder
*decoder
,
430 [in] const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS
*output_arguments
,
431 [in] const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS
*input_arguments
434 void WriteBufferImmediate
(
436 [in] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER
*params
,
437 [in, optional] const D3D12_WRITEBUFFERIMMEDIATE_MODE
*modes
441 typedef struct D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM
444 ID3D12Resource
*pBuffer
;
445 } D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM
;
447 typedef struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1
450 ID3D12Resource
*pReferenceTexture2D
;
451 UINT ReferenceSubresource
;
452 DXGI_COLOR_SPACE_TYPE OutputColorSpace
;
453 DXGI_COLOR_SPACE_TYPE DecodeColorSpace
;
456 } D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1
;
458 typedef struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1
460 ID3D12Resource
*pOutputTexture2D
;
461 UINT OutputSubresource
;
462 D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1 ConversionArguments
;
463 D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM Histograms
[D3D12_VIDEO_DECODE_MAX_HISTOGRAM_COMPONENTS
];
464 } D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1
;
467 uuid(d52f011b
-b56e
-453c
-a05a
-a7f311c8f472
),
470 pointer_default(unique)
472 interface ID3D12VideoDecodeCommandList1
: ID3D12VideoDecodeCommandList
475 [in] ID3D12VideoDecoder
*decoder
,
476 [in] const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1
*output_arguments
,
477 [in] const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS
*input_arguments
481 typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE
483 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_8X8
= 0,
484 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_16X16
= 1,
485 } D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE
;
487 typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION
489 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_QUARTER_PEL
= 0,
490 } D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION
;
492 typedef struct D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT
495 BOOL VideoDecodeSupport
;
496 BOOL VideoProcessSupport
;
497 BOOL VideoEncodeSupport
;
498 } D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT
;
500 typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_DESC
503 DXGI_FORMAT InputFormat
;
504 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize
;
505 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision
;
506 D3D12_VIDEO_SIZE_RANGE SizeRange
;
507 } D3D12_VIDEO_MOTION_ESTIMATOR_DESC
;
510 uuid(33fdae0e
-098b
-428f
-87bb
-34b695de08f8
),
513 pointer_default(unique)
515 interface ID3D12VideoMotionEstimator
: ID3D12Pageable
517 D3D12_VIDEO_MOTION_ESTIMATOR_DESC GetDesc
();
519 HRESULT GetProtectedResourceSession
(
521 [out, iid_is(riid
)] void **protected_session
525 typedef struct D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC
528 DXGI_FORMAT InputFormat
;
529 D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize
;
530 D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision
;
531 D3D12_VIDEO_SIZE_RANGE SizeRange
;
532 } D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC
;
535 uuid(5be17987
-743a
-4061-834b
-23d22daea505
),
538 pointer_default(unique)
540 interface ID3D12VideoMotionVectorHeap
: ID3D12Pageable
542 D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC GetDesc
();
544 HRESULT GetProtectedResourceSession
(
546 [out, iid_is(riid
)] void **protected_session
551 uuid(981611ad
-a144
-4c83
-9890-f30e26d658ab
),
554 pointer_default(unique)
556 interface ID3D12VideoDevice1
: ID3D12VideoDevice
558 HRESULT CreateVideoMotionEstimator
(
559 [in] const D3D12_VIDEO_MOTION_ESTIMATOR_DESC
*desc
,
560 [in, optional] ID3D12ProtectedResourceSession
*protected_resource_session
,
562 [out, iid_is(riid
)] void **video_motion_estimator
565 HRESULT CreateVideoMotionVectorHeap
(
566 [in] const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC
*desc
,
567 [in, optional] ID3D12ProtectedResourceSession
*protected_resource_session
,
569 [out, iid_is(riid
)] void **video_motion_vector_heap
573 typedef struct D3D12_RESOURCE_COORDINATE
578 UINT SubresourceIndex
;
579 } D3D12_RESOURCE_COORDINATE
;
581 typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT
583 ID3D12VideoMotionVectorHeap
*pMotionVectorHeap
;
584 } D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT
;
586 typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_INPUT
588 ID3D12Resource
*pInputTexture2D
;
589 UINT InputSubresourceIndex
;
590 ID3D12Resource
*pReferenceTexture2D
;
591 UINT ReferenceSubresourceIndex
;
592 ID3D12VideoMotionVectorHeap
*pHintMotionVectorHeap
;
593 } D3D12_VIDEO_MOTION_ESTIMATOR_INPUT
;
595 typedef struct D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT
597 ID3D12Resource
*pMotionVectorTexture2D
;
598 D3D12_RESOURCE_COORDINATE MotionVectorCoordinate
;
599 } D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT
;
601 typedef struct D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT
603 ID3D12VideoMotionVectorHeap
*pMotionVectorHeap
;
606 } D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT
;
609 uuid(8455293a
-0cbd
-4831-9b39
-fbdbab724723
),
612 pointer_default(unique)
614 interface ID3D12VideoEncodeCommandList
: ID3D12CommandList
619 [in] ID3D12CommandAllocator
*allocator
624 void ResourceBarrier
(
625 [in] UINT barriers_count
,
626 [in] const D3D12_RESOURCE_BARRIER
*barriers
629 void DiscardResource
(
630 [in] ID3D12Resource
*resource
,
631 [in, optional] const D3D12_DISCARD_REGION
*region
635 [in] ID3D12QueryHeap
*query_heap
,
636 [in] D3D12_QUERY_TYPE type
,
641 [in] ID3D12QueryHeap
*query_heap
,
642 [in] D3D12_QUERY_TYPE type
,
646 void ResolveQueryData
(
647 [in] ID3D12QueryHeap
*query_heap
,
648 [in] D3D12_QUERY_TYPE type
,
649 [in] UINT start_index
,
650 [in] UINT queries_count
,
651 [in] ID3D12Resource
*destination_buffer
,
652 [in] UINT64 aligned_destination_buffer_offset
656 [in, optional] ID3D12Resource
*buffer
,
657 [in] UINT64 aligned_buffer_offset
,
658 [in] D3D12_PREDICATION_OP operation
663 [in] const void *data
,
669 [in] const void *data
,
676 [in] ID3D12VideoMotionEstimator
*motion_estimator
,
677 [in] const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT
*output_arguments
,
678 [in] const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT
*input_arguments
681 void ResolveMotionVectorHeap
(
682 [in] const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT
*output_arguments
,
683 [in] const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT
*input_arguments
686 void WriteBufferImmediate
(
688 [in] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER
*params
,
689 [in] const D3D12_WRITEBUFFERIMMEDIATE_MODE
*modes
692 void SetProtectedResourceSession
(
693 [in, optional]ID3D12ProtectedResourceSession
*protected_resource_session
697 typedef struct D3D12_VIDEO_EXTENSION_COMMAND_DESC
701 } D3D12_VIDEO_EXTENSION_COMMAND_DESC
;
704 uuid(554e41e8
-ae8e
-4a8c
-b7d2
-5b4f274a30e4
),
707 pointer_default(unique)
709 interface ID3D12VideoExtensionCommand
: ID3D12Pageable
711 D3D12_VIDEO_EXTENSION_COMMAND_DESC GetDesc
();
713 HRESULT GetProtectedResourceSession
(
715 [out, iid_is(riid
)] void **protected_session
720 uuid(f019ac49
-f838
-4a95
-9b17
-579437c8f513
),
723 pointer_default(unique)
725 interface ID3D12VideoDevice2
: ID3D12VideoDevice1
727 HRESULT CreateVideoDecoder1
(
728 [in] const D3D12_VIDEO_DECODER_DESC
*desc
,
729 [in, optional] ID3D12ProtectedResourceSession
*protected_resource_session
,
731 [out, iid_is(riid
)] void **video_decoder
734 HRESULT CreateVideoDecoderHeap1
(
735 [in] const D3D12_VIDEO_DECODER_HEAP_DESC
*video_decoder_heap_desc
,
736 [in, optional] ID3D12ProtectedResourceSession
*protected_resource_session
,
738 [out, iid_is(riid
)] void **video_decoder_heap
741 HRESULT CreateVideoProcessor1
(
743 [in] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC
*output_stream_desc
,
744 [in] UINT input_stream_descs_count
,
745 [in] const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC
*input_stream_descs
,
746 [in, optional] ID3D12ProtectedResourceSession
*protected_resource_session
,
748 [out, iid_is(riid
)] void **video_processor
751 HRESULT CreateVideoExtensionCommand
(
752 [in] const D3D12_VIDEO_EXTENSION_COMMAND_DESC
*desc
,
753 [in] const void *creation_parameters
,
754 [in] SIZE_T creation_parameters_data_size_in_bytes
,
755 [in, optional] ID3D12ProtectedResourceSession
*protected_resource_session
,
757 [out] void **video_extension_command
760 HRESULT ExecuteExtensionCommand
(
761 [in] ID3D12VideoExtensionCommand
*extension_command
,
762 [in] const void *execution_parameters
,
763 [in] SIZE_T execution_parameters_size_in_bytes
,
764 [out] void *output_data
,
765 [in] SIZE_T output_data_size_in_bytes
770 uuid(94971eca
-2bdb
-4769-88cf
-3675ea757ebc
),
773 pointer_default(unique)
775 interface ID3D12VideoEncodeCommandList1
: ID3D12VideoEncodeCommandList
777 void InitializeExtensionCommand
(
778 [in] ID3D12VideoExtensionCommand
*extension_command
,
779 [in] const void *initialization_parameters
,
780 [in] SIZE_T initialization_parameters_size_in_bytes
783 void ExecuteExtensionCommand
(
784 [in] ID3D12VideoExtensionCommand
*extension_command
,
785 [in] const void *execution_parameters
,
786 [in] SIZE_T execution_parameters_size_in_bytes
790 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG2, 0xee27417f, 0x5e28, 0x4e65, 0xbe, 0xea, 0x1d, 0x26, 0xb5, 0x08, 0xad, 0xc9);")
791 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG1_AND_MPEG2, 0x86695f12, 0x340e, 0x4f04, 0x9f, 0xd3, 0x92, 0x53, 0xdd, 0x32, 0x74, 0x60);")
792 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264, 0x1b81be68, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);")
793 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_STEREO_PROGRESSIVE, 0xd79be8da, 0x0cf1, 0x4c81, 0xb8, 0x2a, 0x69, 0xa4, 0xe2, 0x36, 0xf4, 0x3d);")
794 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_STEREO, 0xf9aaccbb, 0xc2b6, 0x4cfc, 0x87, 0x79, 0x57, 0x07, 0xb1, 0x76, 0x05, 0x52);")
795 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_MULTIVIEW, 0x705b9d82, 0x76cf, 0x49d6, 0xb7, 0xe6, 0xac, 0x88, 0x72, 0xdb, 0x01, 0x3c);")
796 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VC1, 0x1b81beA3, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);")
797 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VC1_D2010, 0x1b81beA4, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);")
798 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG4PT2_SIMPLE, 0xefd64d74, 0xc9e8,0x41d7,0xa5,0xe9,0xe9,0xb0,0xe3,0x9f,0xa3,0x19);")
799 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG4PT2_ADVSIMPLE_NOGMC, 0xed418a9f, 0x010d, 0x4eda, 0x9a, 0xe3, 0x9a, 0x65, 0x35, 0x8d, 0x8d, 0x2e);")
800 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN, 0x5b11d51b, 0x2f4c, 0x4452, 0xbc, 0xc3, 0x09, 0xf2, 0xa1, 0x16, 0x0c, 0xc0);")
801 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10, 0x107af0e0, 0xef1a, 0x4d19, 0xab, 0xa8, 0x67, 0xa1, 0x63, 0x07, 0x3d, 0x13);")
802 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP9, 0x463707f8, 0xa1d0, 0x4585, 0x87, 0x6d, 0x83, 0xaa, 0x6d, 0x60, 0xb8, 0x9e);")
803 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP9_10BIT_PROFILE2, 0xa4c749ef, 0x6ecf, 0x48aa, 0x84, 0x48, 0x50, 0xa7, 0xa1, 0x16, 0x5f, 0xf7);")
804 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP8, 0x90b899ea, 0x3a62, 0x4705, 0x88, 0xb3, 0x8d, 0xf0, 0x4b, 0x27, 0x44, 0xe7);")
805 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE0, 0xb8be4ccb, 0xcf53, 0x46ba, 0x8d, 0x59, 0xd6, 0xb8, 0xa6, 0xda, 0x5d, 0x2a);")
806 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE1, 0x6936ff0f, 0x45b1, 0x4163, 0x9c, 0xc1, 0x64, 0x6e, 0xf6, 0x94, 0x61, 0x08);")
807 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE2, 0x0c5f2aa1, 0xe541, 0x4089, 0xbb, 0x7b, 0x98, 0x11, 0x0a, 0x19, 0xd7, 0xc8);")
808 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2, 0x17127009, 0xa00f, 0x4ce1, 0x99, 0x4e, 0xbf, 0x40, 0x81, 0xf6, 0xf3, 0xf0);")
809 cpp_quote
("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2_420, 0x2d80bed6, 0x9cac, 0x4835, 0x9e, 0x91, 0x32, 0x7b, 0xbc, 0x4f, 0x9e, 0xe8);")
811 typedef enum D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE
813 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_ABSOLUTE_QP_MAP
= 0,
814 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_CQP
= 1,
815 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_CBR
= 2,
816 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_VBR
= 3,
817 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_QVBR
= 4,
818 } D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE
;
820 typedef enum D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS
822 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_NONE
= 0x0,
823 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_DELTA_QP
= 0x1,
824 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_FRAME_ANALYSIS
= 0x2,
825 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_QP_RANGE
= 0x4,
826 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_INITIAL_QP
= 0x8,
827 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_MAX_FRAME_SIZE
= 0x10,
828 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_VBV_SIZES
= 0x20,
829 } D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS
;
830 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS);")
832 typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP
834 UINT ConstantQP_FullIntracodedFrame
;
835 UINT ConstantQP_InterPredictedFrame_PrevRefOnly
;
836 UINT ConstantQP_InterPredictedFrame_BiDirectionalRef
;
837 } D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP
;
839 typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR
844 UINT64 MaxFrameBitSize
;
845 UINT64 TargetBitRate
;
847 UINT64 InitialVBVFullness
;
848 } D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR
;
850 typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR
855 UINT64 MaxFrameBitSize
;
856 UINT64 TargetAvgBitRate
;
859 UINT64 InitialVBVFullness
;
860 } D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR
;
862 typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR
867 UINT64 MaxFrameBitSize
;
868 UINT64 TargetAvgBitRate
;
870 UINT ConstantQualityTarget
;
871 } D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR
;
873 typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS
878 const D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP
*pConfiguration_CQP
;
879 const D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR
*pConfiguration_CBR
;
880 const D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR
*pConfiguration_VBR
;
881 const D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR
*pConfiguration_QVBR
;
883 } D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS
;
885 typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL
887 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE Mode
;
888 D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS Flags
;
889 D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS ConfigParams
;
890 DXGI_RATIONAL TargetFrameRate
;
891 } D3D12_VIDEO_ENCODER_RATE_CONTROL
;
893 typedef enum D3D12_VIDEO_ENCODER_CODEC
895 D3D12_VIDEO_ENCODER_CODEC_H264
= 0,
896 D3D12_VIDEO_ENCODER_CODEC_HEVC
= 1,
897 } D3D12_VIDEO_ENCODER_CODEC
;
899 typedef enum D3D12_VIDEO_ENCODER_PROFILE_H264
901 D3D12_VIDEO_ENCODER_PROFILE_H264_MAIN
= 0,
902 D3D12_VIDEO_ENCODER_PROFILE_H264_HIGH
= 1,
903 D3D12_VIDEO_ENCODER_PROFILE_H264_HIGH_10
= 2,
904 } D3D12_VIDEO_ENCODER_PROFILE_H264
;
906 typedef enum D3D12_VIDEO_ENCODER_PROFILE_HEVC
908 D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN
= 0,
909 D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10
= 1,
910 } D3D12_VIDEO_ENCODER_PROFILE_HEVC
;
912 typedef struct D3D12_VIDEO_ENCODER_PROFILE_DESC
917 D3D12_VIDEO_ENCODER_PROFILE_H264
*pH264Profile
;
918 D3D12_VIDEO_ENCODER_PROFILE_HEVC
*pHEVCProfile
;
920 } D3D12_VIDEO_ENCODER_PROFILE_DESC
;
922 typedef enum D3D12_VIDEO_ENCODER_LEVELS_H264
924 D3D12_VIDEO_ENCODER_LEVELS_H264_1
= 0,
925 D3D12_VIDEO_ENCODER_LEVELS_H264_1b
= 1,
926 D3D12_VIDEO_ENCODER_LEVELS_H264_11
= 2,
927 D3D12_VIDEO_ENCODER_LEVELS_H264_12
= 3,
928 D3D12_VIDEO_ENCODER_LEVELS_H264_13
= 4,
929 D3D12_VIDEO_ENCODER_LEVELS_H264_2
= 5,
930 D3D12_VIDEO_ENCODER_LEVELS_H264_21
= 6,
931 D3D12_VIDEO_ENCODER_LEVELS_H264_22
= 7,
932 D3D12_VIDEO_ENCODER_LEVELS_H264_3
= 8,
933 D3D12_VIDEO_ENCODER_LEVELS_H264_31
= 9,
934 D3D12_VIDEO_ENCODER_LEVELS_H264_32
= 10,
935 D3D12_VIDEO_ENCODER_LEVELS_H264_4
= 11,
936 D3D12_VIDEO_ENCODER_LEVELS_H264_41
= 12,
937 D3D12_VIDEO_ENCODER_LEVELS_H264_42
= 13,
938 D3D12_VIDEO_ENCODER_LEVELS_H264_5
= 14,
939 D3D12_VIDEO_ENCODER_LEVELS_H264_51
= 15,
940 D3D12_VIDEO_ENCODER_LEVELS_H264_52
= 16,
941 D3D12_VIDEO_ENCODER_LEVELS_H264_6
= 17,
942 D3D12_VIDEO_ENCODER_LEVELS_H264_61
= 18,
943 D3D12_VIDEO_ENCODER_LEVELS_H264_62
= 19,
944 } D3D12_VIDEO_ENCODER_LEVELS_H264
;
946 typedef enum D3D12_VIDEO_ENCODER_TIER_HEVC
948 D3D12_VIDEO_ENCODER_TIER_HEVC_MAIN
= 0,
949 D3D12_VIDEO_ENCODER_TIER_HEVC_HIGH
= 1,
950 } D3D12_VIDEO_ENCODER_TIER_HEVC
;
952 typedef enum D3D12_VIDEO_ENCODER_LEVELS_HEVC
954 D3D12_VIDEO_ENCODER_LEVELS_HEVC_1
= 0,
955 D3D12_VIDEO_ENCODER_LEVELS_HEVC_2
= 1,
956 D3D12_VIDEO_ENCODER_LEVELS_HEVC_21
= 2,
957 D3D12_VIDEO_ENCODER_LEVELS_HEVC_3
= 3,
958 D3D12_VIDEO_ENCODER_LEVELS_HEVC_31
= 4,
959 D3D12_VIDEO_ENCODER_LEVELS_HEVC_4
= 5,
960 D3D12_VIDEO_ENCODER_LEVELS_HEVC_41
= 6,
961 D3D12_VIDEO_ENCODER_LEVELS_HEVC_5
= 7,
962 D3D12_VIDEO_ENCODER_LEVELS_HEVC_51
= 8,
963 D3D12_VIDEO_ENCODER_LEVELS_HEVC_52
= 9,
964 D3D12_VIDEO_ENCODER_LEVELS_HEVC_6
= 10,
965 D3D12_VIDEO_ENCODER_LEVELS_HEVC_61
= 11,
966 D3D12_VIDEO_ENCODER_LEVELS_HEVC_62
= 12,
967 } D3D12_VIDEO_ENCODER_LEVELS_HEVC
;
969 typedef struct D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC
971 D3D12_VIDEO_ENCODER_LEVELS_HEVC Level
;
972 D3D12_VIDEO_ENCODER_TIER_HEVC Tier
;
973 } D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC
;
975 typedef struct D3D12_VIDEO_ENCODER_LEVEL_SETTING
980 D3D12_VIDEO_ENCODER_LEVELS_H264
*pH264LevelSetting
;
981 D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC
*pHEVCLevelSetting
;
983 } D3D12_VIDEO_ENCODER_LEVEL_SETTING
;
985 typedef struct D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
989 } D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
;
991 typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_MODE
994 D3D12_VIDEO_ENCODER_CODEC Codec
;
995 D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE RateControlMode
;
997 } D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_MODE
;
999 typedef enum D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE
1001 D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_NONE
= 0,
1002 D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_ROW_BASED
= 1,
1003 } D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE
;
1005 typedef enum D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE
1007 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_FULL_FRAME
= 0,
1008 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_BYTES_PER_SUBREGION
= 1,
1009 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_SQUARE_UNITS_PER_SUBREGION_ROW_UNALIGNED
= 2,
1010 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_ROWS_PER_SUBREGION
= 3,
1011 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_SUBREGIONS_PER_FRAME
= 4,
1012 } D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE
;
1014 typedef enum D3D12_VIDEO_ENCODER_HEAP_FLAGS
1016 D3D12_VIDEO_ENCODER_HEAP_FLAG_NONE
= 0x0,
1017 } D3D12_VIDEO_ENCODER_HEAP_FLAGS
;
1018 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_HEAP_FLAGS);")
1020 typedef struct D3D12_VIDEO_ENCODER_HEAP_DESC
1023 D3D12_VIDEO_ENCODER_HEAP_FLAGS Flags
;
1024 D3D12_VIDEO_ENCODER_CODEC EncodeCodec
;
1025 D3D12_VIDEO_ENCODER_PROFILE_DESC EncodeProfile
;
1026 D3D12_VIDEO_ENCODER_LEVEL_SETTING EncodeLevel
;
1027 UINT ResolutionsListCount
;
1028 const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
*pResolutionList
;
1029 } D3D12_VIDEO_ENCODER_HEAP_DESC
;
1031 typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS
1033 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_NONE
= 0x0,
1034 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_CABAC_ENCODING_SUPPORT
= 0x1,
1035 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_INTRA_SLICE_CONSTRAINED_ENCODING_SUPPORT
= 0x2,
1036 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_BFRAME_LTR_COMBINED_SUPPORT
= 0x4,
1037 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_ADAPTIVE_8x8_TRANSFORM_ENCODING_SUPPORT
= 0x8,
1038 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_DIRECT_SPATIAL_ENCODING_SUPPORT
= 0x10,
1039 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_DIRECT_TEMPORAL_ENCODING_SUPPORT
= 0x20,
1040 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_CONSTRAINED_INTRAPREDICTION_SUPPORT
= 0x40,
1041 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS
;
1042 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS);")
1044 typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES
1046 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED
= 0,
1047 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_1_DISABLE_ALL_SLICE_BLOCK_EDGES
= 1,
1048 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_2_DISABLE_SLICE_BOUNDARIES_BLOCKS
= 2,
1049 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_3_USE_TWO_STAGE_DEBLOCKING
= 3,
1050 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_4_DISABLE_CHROMA_BLOCK_EDGES
= 4,
1051 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES
= 5,
1052 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING
= 6,
1053 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES
;
1055 typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS
1057 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_NONE
= 0x0,
1058 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED
= (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED
),
1059 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_1_DISABLE_ALL_SLICE_BLOCK_EDGES
= (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_1_DISABLE_ALL_SLICE_BLOCK_EDGES
),
1060 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_2_DISABLE_SLICE_BOUNDARIES_BLOCKS
= (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_2_DISABLE_SLICE_BOUNDARIES_BLOCKS
),
1061 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_3_USE_TWO_STAGE_DEBLOCKING
= (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_3_USE_TWO_STAGE_DEBLOCKING
),
1062 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_4_DISABLE_CHROMA_BLOCK_EDGES
= (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_4_DISABLE_CHROMA_BLOCK_EDGES
),
1063 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES
= (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES
),
1064 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING
= (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING
),
1065 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS
;
1066 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS);")
1068 typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264
1070 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS SupportFlags
;
1071 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS DisableDeblockingFilterSupportedModes
;
1072 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264
;
1074 typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS
1076 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_NONE
= 0x0,
1077 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_BFRAME_LTR_COMBINED_SUPPORT
= 0x1,
1078 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SLICE_CONSTRAINED_ENCODING_SUPPORT
= 0x2,
1079 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CONSTRAINED_INTRAPREDICTION_SUPPORT
= 0x4,
1080 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_SAO_FILTER_SUPPORT
= 0x8,
1081 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_ASYMETRIC_MOTION_PARTITION_SUPPORT
= 0x10,
1082 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_ASYMETRIC_MOTION_PARTITION_REQUIRED
= 0x20,
1083 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_SUPPORT
= 0x40,
1084 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_DISABLING_LOOP_FILTER_ACROSS_SLICES_SUPPORT
= 0x80,
1085 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_P_FRAMES_IMPLEMENTED_AS_LOW_DELAY_B_FRAMES
= 0x100,
1086 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS
;
1087 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS);")
1089 typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE
{
1090 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_8x8
= 0,
1091 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_16x16
= 1,
1092 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_32x32
= 2,
1093 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_64x64
= 3,
1094 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE
;
1096 typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE
{
1097 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_4x4
= 0,
1098 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_8x8
= 1,
1099 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_16x16
= 2,
1100 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_32x32
= 3,
1101 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE
;
1103 typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC
1105 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS SupportFlags
;
1106 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize
;
1107 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize
;
1108 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize
;
1109 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize
;
1110 UCHAR max_transform_hierarchy_depth_inter
;
1111 UCHAR max_transform_hierarchy_depth_intra
;
1112 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC
;
1114 typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT
1119 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264
*pH264Support
;
1120 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC
*pHEVCSupport
;
1122 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT
;
1124 typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT
1127 D3D12_VIDEO_ENCODER_CODEC Codec
;
1128 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile
;
1130 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT CodecSupportLimits
;
1131 } D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT
;
1133 typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264
1135 UINT MaxL0ReferencesForP
;
1136 UINT MaxL0ReferencesForB
;
1137 UINT MaxL1ReferencesForB
;
1138 UINT MaxLongTermReferences
;
1139 UINT MaxDPBCapacity
;
1140 } D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264
;
1142 typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC
1144 UINT MaxL0ReferencesForP
;
1145 UINT MaxL0ReferencesForB
;
1146 UINT MaxL1ReferencesForB
;
1147 UINT MaxLongTermReferences
;
1148 UINT MaxDPBCapacity
;
1149 } D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC
;
1151 typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT
1156 D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264
*pH264Support
;
1157 D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC
*pHEVCSupport
;
1159 } D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT
;
1161 typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT
1164 D3D12_VIDEO_ENCODER_CODEC Codec
;
1165 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile
;
1167 D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT PictureSupport
;
1168 } D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT
;
1170 typedef enum D3D12_VIDEO_ENCODER_SUPPORT_FLAGS
1172 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_NONE
= 0x0,
1173 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_GENERAL_SUPPORT_OK
= 0x1,
1174 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_RECONFIGURATION_AVAILABLE
= 0x2,
1175 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE
= 0x4,
1176 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_VBV_SIZE_CONFIG_AVAILABLE
= 0x8,
1177 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_FRAME_ANALYSIS_AVAILABLE
= 0x10,
1178 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RECONSTRUCTED_FRAMES_REQUIRE_TEXTURE_ARRAYS
= 0x20,
1179 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_DELTA_QP_AVAILABLE
= 0x40,
1180 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SUBREGION_LAYOUT_RECONFIGURATION_AVAILABLE
= 0x80,
1181 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_ADJUSTABLE_QP_RANGE_AVAILABLE
= 0x100,
1182 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_INITIAL_QP_AVAILABLE
= 0x200,
1183 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_MAX_FRAME_SIZE_AVAILABLE
= 0x400,
1184 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SEQUENCE_GOP_RECONFIGURATION_AVAILABLE
= 0x800,
1185 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_MOTION_ESTIMATION_PRECISION_MODE_LIMIT_AVAILABLE
= 0x1000,
1186 } D3D12_VIDEO_ENCODER_SUPPORT_FLAGS
;
1187 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SUPPORT_FLAGS);")
1189 typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS
1191 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_NONE
= 0x0,
1192 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION
= 0x1,
1193 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM
= 0x2,
1194 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING
= 0x4,
1195 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ALLOW_REQUEST_INTRA_CONSTRAINED_SLICES
= 0x8,
1196 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS
;
1197 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS);")
1199 typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES
{
1200 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_DISABLED
= 0,
1201 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_TEMPORAL
= 1,
1202 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_SPATIAL
= 2,
1203 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES
;
1205 typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264
1207 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS ConfigurationFlags
;
1208 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES DirectModeConfig
;
1209 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES DisableDeblockingFilterConfig
;
1210 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264
;
1212 typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS
1214 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_NONE
= 0x0,
1215 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_DISABLE_LOOP_FILTER_ACROSS_SLICES
= 0x1,
1216 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ALLOW_REQUEST_INTRA_CONSTRAINED_SLICES
= 0x2,
1217 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_SAO_FILTER
= 0x4,
1218 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_LONG_TERM_REFERENCES
= 0x8,
1219 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_ASYMETRIC_MOTION_PARTITION
= 0x10,
1220 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_TRANSFORM_SKIPPING
= 0x20,
1221 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION
= 0x40,
1222 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS
;
1223 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS);")
1225 typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC
{
1226 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS ConfigurationFlags
;
1227 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize
;
1228 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize
;
1229 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize
;
1230 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize
;
1231 UCHAR max_transform_hierarchy_depth_inter
;
1232 UCHAR max_transform_hierarchy_depth_intra
;
1233 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC
;
1235 typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION
1240 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264
*pH264Config
;
1241 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC
*pHEVCConfig
;
1243 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION
;
1245 typedef struct D3D12_VIDEO_ENCODER_INTRA_REFRESH
1247 D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE Mode
;
1248 UINT IntraRefreshDuration
;
1249 } D3D12_VIDEO_ENCODER_INTRA_REFRESH
;
1251 typedef enum D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE
1253 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_MAXIMUM
= 0,
1254 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_FULL_PIXEL
= 1,
1255 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_HALF_PIXEL
= 2,
1256 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_QUARTER_PIXEL
= 3,
1257 } D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE
;
1259 typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS
1261 UINT MaxSubregionsNumber
;
1262 UINT MaxIntraRefreshFrameDuration
;
1263 UINT SubregionBlockPixelsSize
;
1264 UINT QPMapRegionPixelsSize
;
1265 } D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS
;
1267 typedef enum D3D12_VIDEO_ENCODER_VALIDATION_FLAGS
1269 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_NONE
= 0x0,
1270 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_NOT_SUPPORTED
= 0x1,
1271 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INPUT_FORMAT_NOT_SUPPORTED
= 0x8,
1272 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_CONFIGURATION_NOT_SUPPORTED
= 0x10,
1273 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_MODE_NOT_SUPPORTED
= 0x20,
1274 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED
= 0x40,
1275 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INTRA_REFRESH_MODE_NOT_SUPPORTED
= 0x80,
1276 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED
= 0x100,
1277 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST
= 0x200,
1278 D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED
= 0x800,
1279 } D3D12_VIDEO_ENCODER_VALIDATION_FLAGS
;
1280 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_VALIDATION_FLAGS);")
1282 typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264
1285 UINT PPicturePeriod
;
1286 UCHAR pic_order_cnt_type
;
1287 UCHAR log2_max_frame_num_minus4
;
1288 UCHAR log2_max_pic_order_cnt_lsb_minus4
;
1289 } D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264
;
1291 typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC
1294 UINT PPicturePeriod
;
1295 UCHAR log2_max_pic_order_cnt_lsb_minus4
;
1296 } D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC
;
1298 typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE
1303 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264
*pH264GroupOfPictures
;
1304 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC
*pHEVCGroupOfPictures
;
1306 } D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE
;
1308 typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT
1311 D3D12_VIDEO_ENCODER_CODEC Codec
;
1312 DXGI_FORMAT InputFormat
;
1313 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration
;
1314 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence
;
1315 D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl
;
1316 D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefresh
;
1317 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding
;
1318 UINT ResolutionsListCount
;
1319 const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
*pResolutionList
;
1320 UINT MaxReferenceFramesInDPB
;
1321 D3D12_VIDEO_ENCODER_VALIDATION_FLAGS ValidationFlags
;
1322 D3D12_VIDEO_ENCODER_SUPPORT_FLAGS SupportFlags
;
1323 D3D12_VIDEO_ENCODER_PROFILE_DESC SuggestedProfile
;
1324 D3D12_VIDEO_ENCODER_LEVEL_SETTING SuggestedLevel
;
1325 D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS
*pResolutionDependentSupport
;
1326 } D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT
;
1328 typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS
1331 D3D12_VIDEO_ENCODER_CODEC Codec
;
1332 D3D12_VIDEO_ENCODER_PROFILE_DESC Profile
;
1333 DXGI_FORMAT InputFormat
;
1334 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC PictureTargetResolution
;
1336 UINT CompressedBitstreamBufferAccessAlignment
;
1337 UINT EncoderMetadataBufferAccessAlignment
;
1338 UINT MaxEncoderOutputMetadataBufferSize
;
1339 } D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS
;
1341 typedef enum D3D12_VIDEO_ENCODER_FLAGS
1343 D3D12_VIDEO_ENCODER_FLAG_NONE
= 0x0,
1344 } D3D12_VIDEO_ENCODER_FLAGS
;
1345 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_FLAGS);")
1347 typedef struct D3D12_VIDEO_ENCODER_DESC
1350 D3D12_VIDEO_ENCODER_FLAGS Flags
;
1351 D3D12_VIDEO_ENCODER_CODEC EncodeCodec
;
1352 D3D12_VIDEO_ENCODER_PROFILE_DESC EncodeProfile
;
1353 DXGI_FORMAT InputFormat
;
1354 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration
;
1355 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE MaxMotionEstimationPrecision
;
1356 } D3D12_VIDEO_ENCODER_DESC
;
1359 uuid(2e0d212d
-8df9
-44a6
-a770
-bb289b182737
),
1362 pointer_default(unique)
1364 interface ID3D12VideoEncoder
: ID3D12Pageable
1368 D3D12_VIDEO_ENCODER_FLAGS GetEncoderFlags
();
1370 D3D12_VIDEO_ENCODER_CODEC GetCodec
();
1372 HRESULT GetCodecProfile
(
1373 [in, out] D3D12_VIDEO_ENCODER_PROFILE_DESC dst_profile
1376 HRESULT GetCodecConfiguration
(
1377 [in, out] D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION dst_codec_config
1380 DXGI_FORMAT GetInputFormat
();
1382 D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE GetMaxMotionEstimationPrecision
();
1386 uuid(22b35d96
-876a
-44c0
-b25e
-fb8c9c7f1c4a
),
1389 pointer_default(unique)
1391 interface ID3D12VideoEncoderHeap
: ID3D12Pageable
1395 D3D12_VIDEO_ENCODER_HEAP_FLAGS GetEncoderHeapFlags
();
1397 D3D12_VIDEO_ENCODER_CODEC GetCodec
();
1399 HRESULT GetCodecProfile
(
1400 [in, out] D3D12_VIDEO_ENCODER_PROFILE_DESC dst_profile
1403 HRESULT GetCodecLevel
(
1404 [in, out] D3D12_VIDEO_ENCODER_LEVEL_SETTING dst_level
1407 UINT GetResolutionListCount
();
1409 HRESULT GetResolutionList
(
1410 [in] const UINT resolutions_list_count
,
1411 [out] D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
*resolution_list
1416 uuid(4243adb4
-3a32
-4666-973c
-0ccc5625dc44
),
1419 pointer_default(unique)
1421 interface ID3D12VideoDevice3
: ID3D12VideoDevice2
1423 HRESULT CreateVideoEncoder
(
1424 [in] const D3D12_VIDEO_ENCODER_DESC
*desc
,
1426 [out] void **video_encoder
1429 HRESULT CreateVideoEncoderHeap
(
1430 [in] const D3D12_VIDEO_ENCODER_HEAP_DESC
*desc
,
1432 [out] void **video_encoder_heap
1436 typedef enum D3D12_VIDEO_ENCODER_FRAME_TYPE_H264
1438 D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_I_FRAME
= 0,
1439 D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_P_FRAME
= 1,
1440 D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_B_FRAME
= 2,
1441 D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME
= 3,
1442 } D3D12_VIDEO_ENCODER_FRAME_TYPE_H264
;
1444 typedef struct D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264
1446 UINT ReconstructedPictureResourceIndex
;
1447 BOOL IsLongTermReference
;
1448 UINT LongTermPictureIdx
;
1449 UINT PictureOrderCountNumber
;
1450 UINT FrameDecodingOrderNumber
;
1451 UINT TemporalLayerIndex
;
1452 } D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264
;
1454 typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS
1456 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_NONE
= 0x0,
1457 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES
= 0x1,
1458 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS
;
1459 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS);")
1461 typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION
1463 UCHAR memory_management_control_operation
;
1464 UINT difference_of_pic_nums_minus1
;
1465 UINT long_term_pic_num
;
1466 UINT long_term_frame_idx
;
1467 UINT max_long_term_frame_idx_plus1
;
1468 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION
;
1470 typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION
1472 UCHAR modification_of_pic_nums_idc
;
1473 UINT abs_diff_pic_num_minus1
;
1474 UINT long_term_pic_num
;
1475 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION
;
1477 typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264
1479 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS Flags
;
1480 D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 FrameType
;
1481 UINT pic_parameter_set_id
;
1483 UINT PictureOrderCountNumber
;
1484 UINT FrameDecodingOrderNumber
;
1485 UINT TemporalLayerIndex
;
1486 UINT List0ReferenceFramesCount
;
1487 UINT
*pList0ReferenceFrames
;
1488 UINT List1ReferenceFramesCount
;
1489 UINT
*pList1ReferenceFrames
;
1490 UINT ReferenceFramesReconPictureDescriptorsCount
;
1491 D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264
*pReferenceFramesReconPictureDescriptors
;
1492 UCHAR adaptive_ref_pic_marking_mode_flag
;
1493 UINT RefPicMarkingOperationsCommandsCount
;
1494 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION
*pRefPicMarkingOperationsCommands
;
1495 UINT List0RefPicModificationsCount
;
1496 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION
*pList0RefPicModifications
;
1497 UINT List1RefPicModificationsCount
;
1498 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION
*pList1RefPicModifications
;
1499 UINT QPMapValuesCount
;
1500 INT8
*pRateControlQPMap
;
1501 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264
;
1503 typedef enum D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC
1505 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_I_FRAME
= 0,
1506 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_P_FRAME
= 1,
1507 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_B_FRAME
= 2,
1508 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_IDR_FRAME
= 3,
1509 } D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC
;
1511 typedef struct D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC
1513 UINT ReconstructedPictureResourceIndex
;
1514 BOOL IsRefUsedByCurrentPic
;
1515 BOOL IsLongTermReference
;
1516 UINT PictureOrderCountNumber
;
1517 UINT TemporalLayerIndex
;
1518 } D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC
;
1520 typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS
1522 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_NONE
= 0x0,
1523 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES
= 0x1,
1524 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS
;
1525 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS);")
1527 typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC
1529 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags
;
1530 D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType
;
1531 UINT slice_pic_parameter_set_id
;
1532 UINT PictureOrderCountNumber
;
1533 UINT TemporalLayerIndex
;
1534 UINT List0ReferenceFramesCount
;
1535 UINT
*pList0ReferenceFrames
;
1536 UINT List1ReferenceFramesCount
;
1537 UINT
*pList1ReferenceFrames
;
1538 UINT ReferenceFramesReconPictureDescriptorsCount
;
1539 D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC
*pReferenceFramesReconPictureDescriptors
;
1540 UINT List0RefPicModificationsCount
;
1541 UINT
*pList0RefPicModifications
;
1542 UINT List1RefPicModificationsCount
;
1543 UINT
*pList1RefPicModifications
;
1544 UINT QPMapValuesCount
;
1545 INT8
*pRateControlQPMap
;
1546 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC
;
1548 typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA
1553 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264
*pH264PicData
;
1554 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC
*pHEVCPicData
;
1556 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA
;
1558 typedef struct D3D12_VIDEO_ENCODE_REFERENCE_FRAMES
1561 ID3D12Resource
**ppTexture2Ds
;
1562 UINT
*pSubresources
;
1563 } D3D12_VIDEO_ENCODE_REFERENCE_FRAMES
;
1565 typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS
1567 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_NONE
= 0x0,
1568 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_USED_AS_REFERENCE_PICTURE
= 0x1,
1569 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS
;
1570 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS);")
1572 typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC
1574 UINT IntraRefreshFrameIndex
;
1575 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS Flags
;
1576 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA PictureControlCodecData
;
1577 D3D12_VIDEO_ENCODE_REFERENCE_FRAMES ReferenceFrames
;
1578 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC
;
1580 typedef enum D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS
1582 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_NONE
= 0x0,
1583 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_RESOLUTION_CHANGE
= 0x1,
1584 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_RATE_CONTROL_CHANGE
= 0x2,
1585 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_SUBREGION_LAYOUT_CHANGE
= 0x4,
1586 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_REQUEST_INTRA_REFRESH
= 0x8,
1587 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_GOP_SEQUENCE_CHANGE
= 0x10,
1588 } D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS
;
1589 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS);")
1591 typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES
1595 UINT MaxBytesPerSlice
;
1596 UINT NumberOfCodingUnitsPerSlice
;
1597 UINT NumberOfRowsPerSlice
;
1598 UINT NumberOfSlicesPerFrame
;
1600 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES
;
1602 typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA
1607 const D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES
*pSlicesPartition_H264
;
1608 const D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES
*pSlicesPartition_HEVC
;
1610 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA
;
1612 typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC
1614 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS Flags
;
1615 D3D12_VIDEO_ENCODER_INTRA_REFRESH IntraRefreshConfig
;
1616 D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl
;
1617 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC PictureTargetResolution
;
1618 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SelectedLayoutMode
;
1619 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA FrameSubregionsLayoutData
;
1620 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence
;
1621 } D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC
;
1623 typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS
1625 D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC SequenceControlDesc
;
1626 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC PictureControlDesc
;
1627 ID3D12Resource
*pInputFrame
;
1628 UINT InputFrameSubresource
;
1629 UINT CurrentFrameBitstreamMetadataSize
;
1630 } D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS
;
1632 typedef struct D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM
1634 ID3D12Resource
*pBuffer
;
1635 UINT64 FrameStartOffset
;
1636 } D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM
;
1638 typedef struct D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE
1640 ID3D12Resource
*pReconstructedPicture
;
1641 UINT ReconstructedPictureSubresource
;
1642 } D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE
;
1644 typedef struct D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA
1647 UINT64 bStartOffset
;
1649 } D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA
;
1651 typedef enum D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS
1653 D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_NO_ERROR
= 0x0,
1654 D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_CODEC_PICTURE_CONTROL_NOT_SUPPORTED
= 0x1,
1655 D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_SUBREGION_LAYOUT_CONFIGURATION_NOT_SUPPORTED
= 0x2,
1656 D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_INVALID_REFERENCE_PICTURES
= 0x4,
1657 D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_RECONFIGURATION_REQUEST_NOT_SUPPORTED
= 0x8,
1658 D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_INVALID_METADATA_BUFFER_SOURCE
= 0x10,
1659 } D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS
;
1660 cpp_quote
("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS);")
1662 typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS
1665 UINT64 IntraCodingUnitsCount
;
1666 UINT64 InterCodingUnitsCount
;
1667 UINT64 SkipCodingUnitsCount
;
1668 UINT64 AverageMotionEstimationXDirection
;
1669 UINT64 AverageMotionEstimationYDirection
;
1670 } D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS
;
1672 typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA
1674 UINT64 EncodeErrorFlags
;
1675 D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS EncodeStats
;
1676 UINT64 EncodedBitstreamWrittenBytesCount
;
1677 UINT64 WrittenSubregionsCount
;
1678 } D3D12_VIDEO_ENCODER_OUTPUT_METADATA
;
1680 typedef struct D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER
1682 ID3D12Resource
*pBuffer
;
1684 } D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER
;
1686 typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS
1688 D3D12_VIDEO_ENCODER_CODEC EncoderCodec
;
1689 D3D12_VIDEO_ENCODER_PROFILE_DESC EncoderProfile
;
1690 DXGI_FORMAT EncoderInputFormat
;
1691 D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncodedPictureEffectiveResolution
;
1692 D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER HWLayoutMetadata
;
1693 } D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS
;
1695 typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS
1697 D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER ResolvedLayoutMetadata
;
1698 } D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS
;
1700 typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS
1702 D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM Bitstream
;
1703 D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE ReconstructedPicture
;
1704 D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER EncoderOutputMetadata
;
1705 } D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS
;
1708 uuid(895491e2
-e701
-46a9
-9a1f
-8d3480ed867a
),
1711 pointer_default(unique)
1713 interface ID3D12VideoEncodeCommandList2
: ID3D12VideoEncodeCommandList1
1716 [in] ID3D12VideoEncoder
*encoder
,
1717 [in] ID3D12VideoEncoderHeap
*heap
,
1718 [in] const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS
*input_arguments
,
1719 [in] const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS
*output_arguments
1722 void ResolveEncoderOutputMetadata
(
1723 [in] const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS
*input_arguments
,
1724 [in] const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS
*output_arguments