master
   1/*** Autogenerated by WIDL 10.4 from include/d3d12video.idl - Do not edit ***/
   2
   3#ifdef _WIN32
   4#ifndef __REQUIRED_RPCNDR_H_VERSION__
   5#define __REQUIRED_RPCNDR_H_VERSION__ 475
   6#endif
   7#include <rpc.h>
   8#include <rpcndr.h>
   9#endif
  10
  11#ifndef COM_NO_WINDOWS_H
  12#include <windows.h>
  13#include <ole2.h>
  14#endif
  15
  16#ifndef __d3d12video_h__
  17#define __d3d12video_h__
  18
  19/* Forward declarations */
  20
  21#ifndef __ID3D12VideoDecoderHeap_FWD_DEFINED__
  22#define __ID3D12VideoDecoderHeap_FWD_DEFINED__
  23typedef interface ID3D12VideoDecoderHeap ID3D12VideoDecoderHeap;
  24#ifdef __cplusplus
  25interface ID3D12VideoDecoderHeap;
  26#endif /* __cplusplus */
  27#endif
  28
  29#ifndef __ID3D12VideoDevice_FWD_DEFINED__
  30#define __ID3D12VideoDevice_FWD_DEFINED__
  31typedef interface ID3D12VideoDevice ID3D12VideoDevice;
  32#ifdef __cplusplus
  33interface ID3D12VideoDevice;
  34#endif /* __cplusplus */
  35#endif
  36
  37#ifndef __ID3D12VideoDecoder_FWD_DEFINED__
  38#define __ID3D12VideoDecoder_FWD_DEFINED__
  39typedef interface ID3D12VideoDecoder ID3D12VideoDecoder;
  40#ifdef __cplusplus
  41interface ID3D12VideoDecoder;
  42#endif /* __cplusplus */
  43#endif
  44
  45#ifndef __ID3D12VideoDecodeCommandList_FWD_DEFINED__
  46#define __ID3D12VideoDecodeCommandList_FWD_DEFINED__
  47typedef interface ID3D12VideoDecodeCommandList ID3D12VideoDecodeCommandList;
  48#ifdef __cplusplus
  49interface ID3D12VideoDecodeCommandList;
  50#endif /* __cplusplus */
  51#endif
  52
  53#ifndef __ID3D12VideoDecodeCommandList1_FWD_DEFINED__
  54#define __ID3D12VideoDecodeCommandList1_FWD_DEFINED__
  55typedef interface ID3D12VideoDecodeCommandList1 ID3D12VideoDecodeCommandList1;
  56#ifdef __cplusplus
  57interface ID3D12VideoDecodeCommandList1;
  58#endif /* __cplusplus */
  59#endif
  60
  61#ifndef __ID3D12VideoMotionEstimator_FWD_DEFINED__
  62#define __ID3D12VideoMotionEstimator_FWD_DEFINED__
  63typedef interface ID3D12VideoMotionEstimator ID3D12VideoMotionEstimator;
  64#ifdef __cplusplus
  65interface ID3D12VideoMotionEstimator;
  66#endif /* __cplusplus */
  67#endif
  68
  69#ifndef __ID3D12VideoMotionVectorHeap_FWD_DEFINED__
  70#define __ID3D12VideoMotionVectorHeap_FWD_DEFINED__
  71typedef interface ID3D12VideoMotionVectorHeap ID3D12VideoMotionVectorHeap;
  72#ifdef __cplusplus
  73interface ID3D12VideoMotionVectorHeap;
  74#endif /* __cplusplus */
  75#endif
  76
  77#ifndef __ID3D12VideoDevice1_FWD_DEFINED__
  78#define __ID3D12VideoDevice1_FWD_DEFINED__
  79typedef interface ID3D12VideoDevice1 ID3D12VideoDevice1;
  80#ifdef __cplusplus
  81interface ID3D12VideoDevice1;
  82#endif /* __cplusplus */
  83#endif
  84
  85#ifndef __ID3D12VideoEncodeCommandList_FWD_DEFINED__
  86#define __ID3D12VideoEncodeCommandList_FWD_DEFINED__
  87typedef interface ID3D12VideoEncodeCommandList ID3D12VideoEncodeCommandList;
  88#ifdef __cplusplus
  89interface ID3D12VideoEncodeCommandList;
  90#endif /* __cplusplus */
  91#endif
  92
  93#ifndef __ID3D12VideoExtensionCommand_FWD_DEFINED__
  94#define __ID3D12VideoExtensionCommand_FWD_DEFINED__
  95typedef interface ID3D12VideoExtensionCommand ID3D12VideoExtensionCommand;
  96#ifdef __cplusplus
  97interface ID3D12VideoExtensionCommand;
  98#endif /* __cplusplus */
  99#endif
 100
 101#ifndef __ID3D12VideoDevice2_FWD_DEFINED__
 102#define __ID3D12VideoDevice2_FWD_DEFINED__
 103typedef interface ID3D12VideoDevice2 ID3D12VideoDevice2;
 104#ifdef __cplusplus
 105interface ID3D12VideoDevice2;
 106#endif /* __cplusplus */
 107#endif
 108
 109#ifndef __ID3D12VideoEncodeCommandList1_FWD_DEFINED__
 110#define __ID3D12VideoEncodeCommandList1_FWD_DEFINED__
 111typedef interface ID3D12VideoEncodeCommandList1 ID3D12VideoEncodeCommandList1;
 112#ifdef __cplusplus
 113interface ID3D12VideoEncodeCommandList1;
 114#endif /* __cplusplus */
 115#endif
 116
 117#ifndef __ID3D12VideoEncoder_FWD_DEFINED__
 118#define __ID3D12VideoEncoder_FWD_DEFINED__
 119typedef interface ID3D12VideoEncoder ID3D12VideoEncoder;
 120#ifdef __cplusplus
 121interface ID3D12VideoEncoder;
 122#endif /* __cplusplus */
 123#endif
 124
 125#ifndef __ID3D12VideoEncoderHeap_FWD_DEFINED__
 126#define __ID3D12VideoEncoderHeap_FWD_DEFINED__
 127typedef interface ID3D12VideoEncoderHeap ID3D12VideoEncoderHeap;
 128#ifdef __cplusplus
 129interface ID3D12VideoEncoderHeap;
 130#endif /* __cplusplus */
 131#endif
 132
 133#ifndef __ID3D12VideoDevice3_FWD_DEFINED__
 134#define __ID3D12VideoDevice3_FWD_DEFINED__
 135typedef interface ID3D12VideoDevice3 ID3D12VideoDevice3;
 136#ifdef __cplusplus
 137interface ID3D12VideoDevice3;
 138#endif /* __cplusplus */
 139#endif
 140
 141#ifndef __ID3D12VideoEncodeCommandList2_FWD_DEFINED__
 142#define __ID3D12VideoEncodeCommandList2_FWD_DEFINED__
 143typedef interface ID3D12VideoEncodeCommandList2 ID3D12VideoEncodeCommandList2;
 144#ifdef __cplusplus
 145interface ID3D12VideoEncodeCommandList2;
 146#endif /* __cplusplus */
 147#endif
 148
 149/* Headers for imported files */
 150
 151#include <oaidl.h>
 152#include <ocidl.h>
 153#include <dxgicommon.h>
 154#include <d3d12.h>
 155
 156#ifdef __cplusplus
 157extern "C" {
 158#endif
 159
 160typedef enum D3D12_VIDEO_FIELD_TYPE {
 161    D3D12_VIDEO_FIELD_TYPE_NONE = 0,
 162    D3D12_VIDEO_FIELD_TYPE_INTERLACED_TOP_FIELD_FIRST = 1,
 163    D3D12_VIDEO_FIELD_TYPE_INTERLACED_BOTTOM_FIELD_FIRST = 2
 164} D3D12_VIDEO_FIELD_TYPE;
 165typedef enum D3D12_VIDEO_FRAME_STEREO_FORMAT {
 166    D3D12_VIDEO_FRAME_STEREO_FORMAT_NONE = 0,
 167    D3D12_VIDEO_FRAME_STEREO_FORMAT_MONO = 1,
 168    D3D12_VIDEO_FRAME_STEREO_FORMAT_HORIZONTAL = 2,
 169    D3D12_VIDEO_FRAME_STEREO_FORMAT_VERTICAL = 3,
 170    D3D12_VIDEO_FRAME_STEREO_FORMAT_SEPARATE = 4
 171} D3D12_VIDEO_FRAME_STEREO_FORMAT;
 172typedef enum D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE {
 173    D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_NONE = 0,
 174    D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_FIELD_BASED = 1
 175} D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE;
 176typedef enum D3D12_FEATURE_VIDEO {
 177    D3D12_FEATURE_VIDEO_DECODE_SUPPORT = 0,
 178    D3D12_FEATURE_VIDEO_DECODE_PROFILES = 1,
 179    D3D12_FEATURE_VIDEO_DECODE_FORMATS = 2,
 180    D3D12_FEATURE_VIDEO_DECODE_CONVERSION_SUPPORT = 3,
 181    D3D12_FEATURE_VIDEO_PROCESS_SUPPORT = 5,
 182    D3D12_FEATURE_VIDEO_PROCESS_MAX_INPUT_STREAMS = 6,
 183    D3D12_FEATURE_VIDEO_PROCESS_REFERENCE_INFO = 7,
 184    D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE = 8,
 185    D3D12_FEATURE_VIDEO_PROCESSOR_SIZE = 9,
 186    D3D12_FEATURE_VIDEO_DECODE_PROFILE_COUNT = 10,
 187    D3D12_FEATURE_VIDEO_DECODE_FORMAT_COUNT = 11,
 188    D3D12_FEATURE_VIDEO_ARCHITECTURE = 17,
 189    D3D12_FEATURE_VIDEO_DECODE_HISTOGRAM = 18,
 190    D3D12_FEATURE_VIDEO_FEATURE_AREA_SUPPORT = 19,
 191    D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR = 20,
 192    D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_SIZE = 21,
 193    D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_COUNT = 22,
 194    D3D12_FEATURE_VIDEO_EXTENSION_COMMANDS = 23,
 195    D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT = 24,
 196    D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_PARAMETERS = 25,
 197    D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_SUPPORT = 26,
 198    D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_SIZE = 27,
 199    D3D12_FEATURE_VIDEO_DECODE_PROTECTED_RESOURCES = 28,
 200    D3D12_FEATURE_VIDEO_PROCESS_PROTECTED_RESOURCES = 29,
 201    D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES = 30,
 202    D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE1 = 31,
 203    D3D12_FEATURE_VIDEO_PROCESSOR_SIZE1 = 32,
 204    D3D12_FEATURE_VIDEO_ENCODER_CODEC = 33,
 205    D3D12_FEATURE_VIDEO_ENCODER_PROFILE_LEVEL = 34,
 206    D3D12_FEATURE_VIDEO_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT = 35,
 207    D3D12_FEATURE_VIDEO_ENCODER_OUTPUT_RESOLUTION = 36,
 208    D3D12_FEATURE_VIDEO_ENCODER_INPUT_FORMAT = 37,
 209    D3D12_FEATURE_VIDEO_ENCODER_RATE_CONTROL_MODE = 38,
 210    D3D12_FEATURE_VIDEO_ENCODER_INTRA_REFRESH_MODE = 39,
 211    D3D12_FEATURE_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE = 40,
 212    D3D12_FEATURE_VIDEO_ENCODER_HEAP_SIZE = 41,
 213    D3D12_FEATURE_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT = 42,
 214    D3D12_FEATURE_VIDEO_ENCODER_SUPPORT = 43,
 215    D3D12_FEATURE_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT = 44,
 216    D3D12_FEATURE_VIDEO_ENCODER_RESOURCE_REQUIREMENTS = 45
 217} D3D12_FEATURE_VIDEO;
 218typedef enum D3D12_BITSTREAM_ENCRYPTION_TYPE {
 219    D3D12_BITSTREAM_ENCRYPTION_TYPE_NONE = 0
 220} D3D12_BITSTREAM_ENCRYPTION_TYPE;
 221typedef struct D3D12_VIDEO_DECODE_CONFIGURATION {
 222    GUID DecodeProfile;
 223    D3D12_BITSTREAM_ENCRYPTION_TYPE BitstreamEncryption;
 224    D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE InterlaceType;
 225} D3D12_VIDEO_DECODE_CONFIGURATION;
 226typedef struct D3D12_VIDEO_DECODER_DESC {
 227    UINT NodeMask;
 228    D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
 229} D3D12_VIDEO_DECODER_DESC;
 230typedef struct D3D12_VIDEO_DECODER_HEAP_DESC {
 231    UINT NodeMask;
 232    D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
 233    UINT DecodeWidth;
 234    UINT DecodeHeight;
 235    DXGI_FORMAT Format;
 236    DXGI_RATIONAL FrameRate;
 237    UINT BitRate;
 238    UINT MaxDecodePictureBufferCount;
 239} D3D12_VIDEO_DECODER_HEAP_DESC;
 240typedef struct D3D12_VIDEO_SIZE_RANGE {
 241    UINT MaxWidth;
 242    UINT MaxHeight;
 243    UINT MinWidth;
 244    UINT MinHeight;
 245} D3D12_VIDEO_SIZE_RANGE;
 246typedef enum D3D12_VIDEO_PROCESS_FILTER {
 247    D3D12_VIDEO_PROCESS_FILTER_BRIGHTNESS = 0,
 248    D3D12_VIDEO_PROCESS_FILTER_CONTRAST = 1,
 249    D3D12_VIDEO_PROCESS_FILTER_HUE = 2,
 250    D3D12_VIDEO_PROCESS_FILTER_SATURATION = 3,
 251    D3D12_VIDEO_PROCESS_FILTER_NOISE_REDUCTION = 4,
 252    D3D12_VIDEO_PROCESS_FILTER_EDGE_ENHANCEMENT = 5,
 253    D3D12_VIDEO_PROCESS_FILTER_ANAMORPHIC_SCALING = 6,
 254    D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT = 7
 255} D3D12_VIDEO_PROCESS_FILTER;
 256typedef enum D3D12_VIDEO_PROCESS_FILTER_FLAGS {
 257    D3D12_VIDEO_PROCESS_FILTER_FLAG_NONE = 0x0,
 258    D3D12_VIDEO_PROCESS_FILTER_FLAG_BRIGHTNESS = 1 << D3D12_VIDEO_PROCESS_FILTER_BRIGHTNESS,
 259    D3D12_VIDEO_PROCESS_FILTER_FLAG_CONTRAST = 1 << D3D12_VIDEO_PROCESS_FILTER_CONTRAST,
 260    D3D12_VIDEO_PROCESS_FILTER_FLAG_HUE = 1 << D3D12_VIDEO_PROCESS_FILTER_HUE,
 261    D3D12_VIDEO_PROCESS_FILTER_FLAG_SATURATION = 1 << D3D12_VIDEO_PROCESS_FILTER_SATURATION,
 262    D3D12_VIDEO_PROCESS_FILTER_FLAG_NOISE_REDUCTION = 1 << D3D12_VIDEO_PROCESS_FILTER_NOISE_REDUCTION,
 263    D3D12_VIDEO_PROCESS_FILTER_FLAG_EDGE_ENHANCEMENT = 1 << D3D12_VIDEO_PROCESS_FILTER_EDGE_ENHANCEMENT,
 264    D3D12_VIDEO_PROCESS_FILTER_FLAG_ANAMORPHIC_SCALING = 1 << D3D12_VIDEO_PROCESS_FILTER_ANAMORPHIC_SCALING,
 265    D3D12_VIDEO_PROCESS_FILTER_FLAG_STEREO_ADJUSTMENT = 1 << D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT
 266} D3D12_VIDEO_PROCESS_FILTER_FLAGS;
 267DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FILTER_FLAGS);
 268typedef enum D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS {
 269    D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_NONE = 0x0,
 270    D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_BOB = 0x1,
 271    D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_CUSTOM = 0x80000000
 272} D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS;
 273DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS );
 274typedef struct D3D12_VIDEO_PROCESS_LUMA_KEY {
 275    WINBOOL Enable;
 276    FLOAT Lower;
 277    FLOAT Upper;
 278} D3D12_VIDEO_PROCESS_LUMA_KEY;
 279typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC {
 280    DXGI_FORMAT Format;
 281    DXGI_COLOR_SPACE_TYPE ColorSpace;
 282    DXGI_RATIONAL SourceAspectRatio;
 283    DXGI_RATIONAL DestinationAspectRatio;
 284    DXGI_RATIONAL FrameRate;
 285    D3D12_VIDEO_SIZE_RANGE SourceSizeRange;
 286    D3D12_VIDEO_SIZE_RANGE DestinationSizeRange;
 287    WINBOOL EnableOrientation;
 288    D3D12_VIDEO_PROCESS_FILTER_FLAGS FilterFlags;
 289    D3D12_VIDEO_FRAME_STEREO_FORMAT StereoFormat;
 290    D3D12_VIDEO_FIELD_TYPE FieldType;
 291    D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceMode;
 292    WINBOOL EnableAlphaBlending;
 293    D3D12_VIDEO_PROCESS_LUMA_KEY LumaKey;
 294    UINT NumPastFrames;
 295    UINT NumFutureFrames;
 296    WINBOOL EnableAutoProcessing;
 297} D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC;
 298typedef enum D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE {
 299    D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_OPAQUE = 0,
 300    D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_BACKGROUND = 1,
 301    D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_DESTINATION = 2,
 302    D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_SOURCE_STREAM = 3
 303} D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE;
 304typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC {
 305    DXGI_FORMAT Format;
 306    DXGI_COLOR_SPACE_TYPE ColorSpace;
 307    D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE AlphaFillMode;
 308    UINT AlphaFillModeSourceStreamIndex;
 309    FLOAT BackgroundColor[4];
 310    DXGI_RATIONAL FrameRate;
 311    WINBOOL EnableStereo;
 312} D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC;
 313/*****************************************************************************
 314 * ID3D12VideoDecoderHeap interface
 315 */
 316#ifndef __ID3D12VideoDecoderHeap_INTERFACE_DEFINED__
 317#define __ID3D12VideoDecoderHeap_INTERFACE_DEFINED__
 318
 319DEFINE_GUID(IID_ID3D12VideoDecoderHeap, 0x0946b7c9, 0xebf6, 0x4047, 0xbb,0x73, 0x86,0x83,0xe2,0x7d,0xbb,0x1f);
 320#if defined(__cplusplus) && !defined(CINTERFACE)
 321MIDL_INTERFACE("0946b7c9-ebf6-4047-bb73-8683e27dbb1f")
 322ID3D12VideoDecoderHeap : public ID3D12Pageable
 323{
 324#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
 325    virtual D3D12_VIDEO_DECODER_HEAP_DESC* STDMETHODCALLTYPE GetDesc(
 326        D3D12_VIDEO_DECODER_HEAP_DESC *__ret) = 0;
 327    D3D12_VIDEO_DECODER_HEAP_DESC STDMETHODCALLTYPE GetDesc(
 328        )
 329    {
 330        D3D12_VIDEO_DECODER_HEAP_DESC __ret;
 331        return *GetDesc(&__ret);
 332    }
 333#else
 334    virtual D3D12_VIDEO_DECODER_HEAP_DESC STDMETHODCALLTYPE GetDesc(
 335        ) = 0;
 336#endif
 337
 338};
 339#ifdef __CRT_UUID_DECL
 340__CRT_UUID_DECL(ID3D12VideoDecoderHeap, 0x0946b7c9, 0xebf6, 0x4047, 0xbb,0x73, 0x86,0x83,0xe2,0x7d,0xbb,0x1f)
 341#endif
 342#else
 343typedef struct ID3D12VideoDecoderHeapVtbl {
 344    BEGIN_INTERFACE
 345
 346    /*** IUnknown methods ***/
 347    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
 348        ID3D12VideoDecoderHeap *This,
 349        REFIID riid,
 350        void **ppvObject);
 351
 352    ULONG (STDMETHODCALLTYPE *AddRef)(
 353        ID3D12VideoDecoderHeap *This);
 354
 355    ULONG (STDMETHODCALLTYPE *Release)(
 356        ID3D12VideoDecoderHeap *This);
 357
 358    /*** ID3D12Object methods ***/
 359    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
 360        ID3D12VideoDecoderHeap *This,
 361        REFGUID guid,
 362        UINT *data_size,
 363        void *data);
 364
 365    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
 366        ID3D12VideoDecoderHeap *This,
 367        REFGUID guid,
 368        UINT data_size,
 369        const void *data);
 370
 371    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
 372        ID3D12VideoDecoderHeap *This,
 373        REFGUID guid,
 374        const IUnknown *data);
 375
 376    HRESULT (STDMETHODCALLTYPE *SetName)(
 377        ID3D12VideoDecoderHeap *This,
 378        const WCHAR *name);
 379
 380    /*** ID3D12DeviceChild methods ***/
 381    HRESULT (STDMETHODCALLTYPE *GetDevice)(
 382        ID3D12VideoDecoderHeap *This,
 383        REFIID riid,
 384        void **device);
 385
 386    /*** ID3D12VideoDecoderHeap methods ***/
 387    D3D12_VIDEO_DECODER_HEAP_DESC * (STDMETHODCALLTYPE *GetDesc)(
 388        ID3D12VideoDecoderHeap *This,
 389        D3D12_VIDEO_DECODER_HEAP_DESC *__ret);
 390
 391    END_INTERFACE
 392} ID3D12VideoDecoderHeapVtbl;
 393
 394interface ID3D12VideoDecoderHeap {
 395    CONST_VTBL ID3D12VideoDecoderHeapVtbl* lpVtbl;
 396};
 397
 398#ifdef COBJMACROS
 399#ifndef WIDL_C_INLINE_WRAPPERS
 400/*** IUnknown methods ***/
 401#define ID3D12VideoDecoderHeap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 402#define ID3D12VideoDecoderHeap_AddRef(This) (This)->lpVtbl->AddRef(This)
 403#define ID3D12VideoDecoderHeap_Release(This) (This)->lpVtbl->Release(This)
 404/*** ID3D12Object methods ***/
 405#define ID3D12VideoDecoderHeap_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
 406#define ID3D12VideoDecoderHeap_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
 407#define ID3D12VideoDecoderHeap_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
 408#define ID3D12VideoDecoderHeap_SetName(This,name) (This)->lpVtbl->SetName(This,name)
 409/*** ID3D12DeviceChild methods ***/
 410#define ID3D12VideoDecoderHeap_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
 411/*** ID3D12VideoDecoderHeap methods ***/
 412#define ID3D12VideoDecoderHeap_GetDesc(This) ID3D12VideoDecoderHeap_GetDesc_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
 413#else
 414/*** IUnknown methods ***/
 415static inline HRESULT ID3D12VideoDecoderHeap_QueryInterface(ID3D12VideoDecoderHeap* This,REFIID riid,void **ppvObject) {
 416    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
 417}
 418static inline ULONG ID3D12VideoDecoderHeap_AddRef(ID3D12VideoDecoderHeap* This) {
 419    return This->lpVtbl->AddRef(This);
 420}
 421static inline ULONG ID3D12VideoDecoderHeap_Release(ID3D12VideoDecoderHeap* This) {
 422    return This->lpVtbl->Release(This);
 423}
 424/*** ID3D12Object methods ***/
 425static inline HRESULT ID3D12VideoDecoderHeap_GetPrivateData(ID3D12VideoDecoderHeap* This,REFGUID guid,UINT *data_size,void *data) {
 426    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
 427}
 428static inline HRESULT ID3D12VideoDecoderHeap_SetPrivateData(ID3D12VideoDecoderHeap* This,REFGUID guid,UINT data_size,const void *data) {
 429    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
 430}
 431static inline HRESULT ID3D12VideoDecoderHeap_SetPrivateDataInterface(ID3D12VideoDecoderHeap* This,REFGUID guid,const IUnknown *data) {
 432    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
 433}
 434static inline HRESULT ID3D12VideoDecoderHeap_SetName(ID3D12VideoDecoderHeap* This,const WCHAR *name) {
 435    return This->lpVtbl->SetName(This,name);
 436}
 437/*** ID3D12DeviceChild methods ***/
 438static inline HRESULT ID3D12VideoDecoderHeap_GetDevice(ID3D12VideoDecoderHeap* This,REFIID riid,void **device) {
 439    return This->lpVtbl->GetDevice(This,riid,device);
 440}
 441/*** ID3D12VideoDecoderHeap methods ***/
 442static inline D3D12_VIDEO_DECODER_HEAP_DESC ID3D12VideoDecoderHeap_GetDesc(ID3D12VideoDecoderHeap* This) {
 443    D3D12_VIDEO_DECODER_HEAP_DESC __ret;
 444    return *This->lpVtbl->GetDesc(This,&__ret);
 445}
 446#endif
 447#endif
 448
 449#endif
 450
 451
 452#endif  /* __ID3D12VideoDecoderHeap_INTERFACE_DEFINED__ */
 453
 454/*****************************************************************************
 455 * ID3D12VideoDevice interface
 456 */
 457#ifndef __ID3D12VideoDevice_INTERFACE_DEFINED__
 458#define __ID3D12VideoDevice_INTERFACE_DEFINED__
 459
 460DEFINE_GUID(IID_ID3D12VideoDevice, 0x1f052807, 0x0b46, 0x4acc, 0x8a,0x89, 0x36,0x4f,0x79,0x37,0x18,0xa4);
 461#if defined(__cplusplus) && !defined(CINTERFACE)
 462MIDL_INTERFACE("1f052807-0b46-4acc-8a89-364f793718a4")
 463ID3D12VideoDevice : public IUnknown
 464{
 465    virtual HRESULT STDMETHODCALLTYPE CheckFeatureSupport(
 466        D3D12_FEATURE_VIDEO feature_video,
 467        void *feature_support_data,
 468        UINT feature_support_data_size) = 0;
 469
 470    virtual HRESULT STDMETHODCALLTYPE CreateVideoDecoder(
 471        const D3D12_VIDEO_DECODER_DESC *desc,
 472        REFIID riid,
 473        void **video_decoder) = 0;
 474
 475    virtual HRESULT STDMETHODCALLTYPE CreateVideoDecoderHeap(
 476        const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,
 477        REFIID riid,
 478        void **video_decoder_heap) = 0;
 479
 480    virtual HRESULT STDMETHODCALLTYPE CreateVideoProcessor(
 481        UINT node_mask,
 482        const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,
 483        UINT input_stream_descs_count,
 484        const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,
 485        REFIID riid,
 486        void **video_processor) = 0;
 487
 488};
 489#ifdef __CRT_UUID_DECL
 490__CRT_UUID_DECL(ID3D12VideoDevice, 0x1f052807, 0x0b46, 0x4acc, 0x8a,0x89, 0x36,0x4f,0x79,0x37,0x18,0xa4)
 491#endif
 492#else
 493typedef struct ID3D12VideoDeviceVtbl {
 494    BEGIN_INTERFACE
 495
 496    /*** IUnknown methods ***/
 497    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
 498        ID3D12VideoDevice *This,
 499        REFIID riid,
 500        void **ppvObject);
 501
 502    ULONG (STDMETHODCALLTYPE *AddRef)(
 503        ID3D12VideoDevice *This);
 504
 505    ULONG (STDMETHODCALLTYPE *Release)(
 506        ID3D12VideoDevice *This);
 507
 508    /*** ID3D12VideoDevice methods ***/
 509    HRESULT (STDMETHODCALLTYPE *CheckFeatureSupport)(
 510        ID3D12VideoDevice *This,
 511        D3D12_FEATURE_VIDEO feature_video,
 512        void *feature_support_data,
 513        UINT feature_support_data_size);
 514
 515    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoder)(
 516        ID3D12VideoDevice *This,
 517        const D3D12_VIDEO_DECODER_DESC *desc,
 518        REFIID riid,
 519        void **video_decoder);
 520
 521    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoderHeap)(
 522        ID3D12VideoDevice *This,
 523        const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,
 524        REFIID riid,
 525        void **video_decoder_heap);
 526
 527    HRESULT (STDMETHODCALLTYPE *CreateVideoProcessor)(
 528        ID3D12VideoDevice *This,
 529        UINT node_mask,
 530        const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,
 531        UINT input_stream_descs_count,
 532        const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,
 533        REFIID riid,
 534        void **video_processor);
 535
 536    END_INTERFACE
 537} ID3D12VideoDeviceVtbl;
 538
 539interface ID3D12VideoDevice {
 540    CONST_VTBL ID3D12VideoDeviceVtbl* lpVtbl;
 541};
 542
 543#ifdef COBJMACROS
 544#ifndef WIDL_C_INLINE_WRAPPERS
 545/*** IUnknown methods ***/
 546#define ID3D12VideoDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 547#define ID3D12VideoDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
 548#define ID3D12VideoDevice_Release(This) (This)->lpVtbl->Release(This)
 549/*** ID3D12VideoDevice methods ***/
 550#define ID3D12VideoDevice_CheckFeatureSupport(This,feature_video,feature_support_data,feature_support_data_size) (This)->lpVtbl->CheckFeatureSupport(This,feature_video,feature_support_data,feature_support_data_size)
 551#define ID3D12VideoDevice_CreateVideoDecoder(This,desc,riid,video_decoder) (This)->lpVtbl->CreateVideoDecoder(This,desc,riid,video_decoder)
 552#define ID3D12VideoDevice_CreateVideoDecoderHeap(This,video_decoder_heap_desc,riid,video_decoder_heap) (This)->lpVtbl->CreateVideoDecoderHeap(This,video_decoder_heap_desc,riid,video_decoder_heap)
 553#define ID3D12VideoDevice_CreateVideoProcessor(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,riid,video_processor) (This)->lpVtbl->CreateVideoProcessor(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,riid,video_processor)
 554#else
 555/*** IUnknown methods ***/
 556static inline HRESULT ID3D12VideoDevice_QueryInterface(ID3D12VideoDevice* This,REFIID riid,void **ppvObject) {
 557    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
 558}
 559static inline ULONG ID3D12VideoDevice_AddRef(ID3D12VideoDevice* This) {
 560    return This->lpVtbl->AddRef(This);
 561}
 562static inline ULONG ID3D12VideoDevice_Release(ID3D12VideoDevice* This) {
 563    return This->lpVtbl->Release(This);
 564}
 565/*** ID3D12VideoDevice methods ***/
 566static inline HRESULT ID3D12VideoDevice_CheckFeatureSupport(ID3D12VideoDevice* This,D3D12_FEATURE_VIDEO feature_video,void *feature_support_data,UINT feature_support_data_size) {
 567    return This->lpVtbl->CheckFeatureSupport(This,feature_video,feature_support_data,feature_support_data_size);
 568}
 569static inline HRESULT ID3D12VideoDevice_CreateVideoDecoder(ID3D12VideoDevice* This,const D3D12_VIDEO_DECODER_DESC *desc,REFIID riid,void **video_decoder) {
 570    return This->lpVtbl->CreateVideoDecoder(This,desc,riid,video_decoder);
 571}
 572static inline HRESULT ID3D12VideoDevice_CreateVideoDecoderHeap(ID3D12VideoDevice* This,const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,REFIID riid,void **video_decoder_heap) {
 573    return This->lpVtbl->CreateVideoDecoderHeap(This,video_decoder_heap_desc,riid,video_decoder_heap);
 574}
 575static inline HRESULT ID3D12VideoDevice_CreateVideoProcessor(ID3D12VideoDevice* This,UINT node_mask,const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,UINT input_stream_descs_count,const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,REFIID riid,void **video_processor) {
 576    return This->lpVtbl->CreateVideoProcessor(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,riid,video_processor);
 577}
 578#endif
 579#endif
 580
 581#endif
 582
 583
 584#endif  /* __ID3D12VideoDevice_INTERFACE_DEFINED__ */
 585
 586/*****************************************************************************
 587 * ID3D12VideoDecoder interface
 588 */
 589#ifndef __ID3D12VideoDecoder_INTERFACE_DEFINED__
 590#define __ID3D12VideoDecoder_INTERFACE_DEFINED__
 591
 592DEFINE_GUID(IID_ID3D12VideoDecoder, 0xc59b6bdc, 0x7720, 0x4074, 0xa1,0x36, 0x17,0xa1,0x56,0x03,0x74,0x70);
 593#if defined(__cplusplus) && !defined(CINTERFACE)
 594MIDL_INTERFACE("c59b6bdc-7720-4074-a136-17a156037470")
 595ID3D12VideoDecoder : public ID3D12Pageable
 596{
 597#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
 598    virtual D3D12_VIDEO_DECODER_DESC* STDMETHODCALLTYPE GetDesc(
 599        D3D12_VIDEO_DECODER_DESC *__ret) = 0;
 600    D3D12_VIDEO_DECODER_DESC STDMETHODCALLTYPE GetDesc(
 601        )
 602    {
 603        D3D12_VIDEO_DECODER_DESC __ret;
 604        return *GetDesc(&__ret);
 605    }
 606#else
 607    virtual D3D12_VIDEO_DECODER_DESC STDMETHODCALLTYPE GetDesc(
 608        ) = 0;
 609#endif
 610
 611};
 612#ifdef __CRT_UUID_DECL
 613__CRT_UUID_DECL(ID3D12VideoDecoder, 0xc59b6bdc, 0x7720, 0x4074, 0xa1,0x36, 0x17,0xa1,0x56,0x03,0x74,0x70)
 614#endif
 615#else
 616typedef struct ID3D12VideoDecoderVtbl {
 617    BEGIN_INTERFACE
 618
 619    /*** IUnknown methods ***/
 620    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
 621        ID3D12VideoDecoder *This,
 622        REFIID riid,
 623        void **ppvObject);
 624
 625    ULONG (STDMETHODCALLTYPE *AddRef)(
 626        ID3D12VideoDecoder *This);
 627
 628    ULONG (STDMETHODCALLTYPE *Release)(
 629        ID3D12VideoDecoder *This);
 630
 631    /*** ID3D12Object methods ***/
 632    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
 633        ID3D12VideoDecoder *This,
 634        REFGUID guid,
 635        UINT *data_size,
 636        void *data);
 637
 638    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
 639        ID3D12VideoDecoder *This,
 640        REFGUID guid,
 641        UINT data_size,
 642        const void *data);
 643
 644    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
 645        ID3D12VideoDecoder *This,
 646        REFGUID guid,
 647        const IUnknown *data);
 648
 649    HRESULT (STDMETHODCALLTYPE *SetName)(
 650        ID3D12VideoDecoder *This,
 651        const WCHAR *name);
 652
 653    /*** ID3D12DeviceChild methods ***/
 654    HRESULT (STDMETHODCALLTYPE *GetDevice)(
 655        ID3D12VideoDecoder *This,
 656        REFIID riid,
 657        void **device);
 658
 659    /*** ID3D12VideoDecoder methods ***/
 660    D3D12_VIDEO_DECODER_DESC * (STDMETHODCALLTYPE *GetDesc)(
 661        ID3D12VideoDecoder *This,
 662        D3D12_VIDEO_DECODER_DESC *__ret);
 663
 664    END_INTERFACE
 665} ID3D12VideoDecoderVtbl;
 666
 667interface ID3D12VideoDecoder {
 668    CONST_VTBL ID3D12VideoDecoderVtbl* lpVtbl;
 669};
 670
 671#ifdef COBJMACROS
 672#ifndef WIDL_C_INLINE_WRAPPERS
 673/*** IUnknown methods ***/
 674#define ID3D12VideoDecoder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
 675#define ID3D12VideoDecoder_AddRef(This) (This)->lpVtbl->AddRef(This)
 676#define ID3D12VideoDecoder_Release(This) (This)->lpVtbl->Release(This)
 677/*** ID3D12Object methods ***/
 678#define ID3D12VideoDecoder_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
 679#define ID3D12VideoDecoder_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
 680#define ID3D12VideoDecoder_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
 681#define ID3D12VideoDecoder_SetName(This,name) (This)->lpVtbl->SetName(This,name)
 682/*** ID3D12DeviceChild methods ***/
 683#define ID3D12VideoDecoder_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
 684/*** ID3D12VideoDecoder methods ***/
 685#define ID3D12VideoDecoder_GetDesc(This) ID3D12VideoDecoder_GetDesc_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
 686#else
 687/*** IUnknown methods ***/
 688static inline HRESULT ID3D12VideoDecoder_QueryInterface(ID3D12VideoDecoder* This,REFIID riid,void **ppvObject) {
 689    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
 690}
 691static inline ULONG ID3D12VideoDecoder_AddRef(ID3D12VideoDecoder* This) {
 692    return This->lpVtbl->AddRef(This);
 693}
 694static inline ULONG ID3D12VideoDecoder_Release(ID3D12VideoDecoder* This) {
 695    return This->lpVtbl->Release(This);
 696}
 697/*** ID3D12Object methods ***/
 698static inline HRESULT ID3D12VideoDecoder_GetPrivateData(ID3D12VideoDecoder* This,REFGUID guid,UINT *data_size,void *data) {
 699    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
 700}
 701static inline HRESULT ID3D12VideoDecoder_SetPrivateData(ID3D12VideoDecoder* This,REFGUID guid,UINT data_size,const void *data) {
 702    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
 703}
 704static inline HRESULT ID3D12VideoDecoder_SetPrivateDataInterface(ID3D12VideoDecoder* This,REFGUID guid,const IUnknown *data) {
 705    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
 706}
 707static inline HRESULT ID3D12VideoDecoder_SetName(ID3D12VideoDecoder* This,const WCHAR *name) {
 708    return This->lpVtbl->SetName(This,name);
 709}
 710/*** ID3D12DeviceChild methods ***/
 711static inline HRESULT ID3D12VideoDecoder_GetDevice(ID3D12VideoDecoder* This,REFIID riid,void **device) {
 712    return This->lpVtbl->GetDevice(This,riid,device);
 713}
 714/*** ID3D12VideoDecoder methods ***/
 715static inline D3D12_VIDEO_DECODER_DESC ID3D12VideoDecoder_GetDesc(ID3D12VideoDecoder* This) {
 716    D3D12_VIDEO_DECODER_DESC __ret;
 717    return *This->lpVtbl->GetDesc(This,&__ret);
 718}
 719#endif
 720#endif
 721
 722#endif
 723
 724
 725#endif  /* __ID3D12VideoDecoder_INTERFACE_DEFINED__ */
 726
 727typedef enum D3D12_VIDEO_DECODE_TIER {
 728    D3D12_VIDEO_DECODE_TIER_NOT_SUPPORTED = 0,
 729    D3D12_VIDEO_DECODE_TIER_1 = 1,
 730    D3D12_VIDEO_DECODE_TIER_2 = 2,
 731    D3D12_VIDEO_DECODE_TIER_3 = 3
 732} D3D12_VIDEO_DECODE_TIER;
 733typedef enum D3D12_VIDEO_DECODE_SUPPORT_FLAGS {
 734    D3D12_VIDEO_DECODE_SUPPORT_FLAG_NONE = 0x0,
 735    D3D12_VIDEO_DECODE_SUPPORT_FLAG_SUPPORTED = 0x1
 736} D3D12_VIDEO_DECODE_SUPPORT_FLAGS;
 737DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_SUPPORT_FLAGS);
 738typedef enum D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS {
 739    D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_NONE = 0x0,
 740    D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_HEIGHT_ALIGNMENT_MULTIPLE_32_REQUIRED = 0x1,
 741    D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_POST_PROCESSING_SUPPORTED = 0x2,
 742    D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_REFERENCE_ONLY_ALLOCATIONS_REQUIRED = 0x4,
 743    D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_ALLOW_RESOLUTION_CHANGE_ON_NON_KEY_FRAME = 0x8
 744} D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS;
 745DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS);
 746typedef enum D3D12_VIDEO_DECODE_ARGUMENT_TYPE {
 747    D3D12_VIDEO_DECODE_ARGUMENT_TYPE_PICTURE_PARAMETERS = 0,
 748    D3D12_VIDEO_DECODE_ARGUMENT_TYPE_INVERSE_QUANTIZATION_MATRIX = 1,
 749    D3D12_VIDEO_DECODE_ARGUMENT_TYPE_SLICE_CONTROL = 2,
 750    D3D12_VIDEO_DECODE_ARGUMENT_TYPE_MAX_VALID = 3
 751} D3D12_VIDEO_DECODE_ARGUMENT_TYPE;
 752typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT {
 753    UINT NodeIndex;
 754    D3D12_VIDEO_DECODE_CONFIGURATION Configuration;
 755    UINT Width;
 756    UINT Height;
 757    DXGI_FORMAT DecodeFormat;
 758    DXGI_RATIONAL FrameRate;
 759    UINT BitRate;
 760    D3D12_VIDEO_DECODE_SUPPORT_FLAGS SupportFlags;
 761    D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS ConfigurationFlags;
 762    D3D12_VIDEO_DECODE_TIER DecodeTier;
 763} D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT;
 764typedef struct D3D12_VIDEO_DECODE_FRAME_ARGUMENT {
 765    D3D12_VIDEO_DECODE_ARGUMENT_TYPE Type;
 766    UINT Size;
 767    void *pData;
 768} D3D12_VIDEO_DECODE_FRAME_ARGUMENT;
 769typedef struct D3D12_VIDEO_DECODE_REFERENCE_FRAMES {
 770    UINT NumTexture2Ds;
 771    ID3D12Resource **ppTexture2Ds;
 772    UINT *pSubresources;
 773    ID3D12VideoDecoderHeap **ppHeaps;
 774} D3D12_VIDEO_DECODE_REFERENCE_FRAMES;
 775typedef struct D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM {
 776    ID3D12Resource *pBuffer;
 777    UINT64 Offset;
 778    UINT64 Size;
 779} D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM;
 780typedef struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS {
 781    WINBOOL Enable;
 782    ID3D12Resource *pReferenceTexture2D;
 783    UINT ReferenceSubresource;
 784    DXGI_COLOR_SPACE_TYPE OutputColorSpace;
 785    DXGI_COLOR_SPACE_TYPE DecodeColorSpace;
 786} D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS;
 787typedef struct D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS {
 788    UINT NumFrameArguments;
 789    D3D12_VIDEO_DECODE_FRAME_ARGUMENT FrameArguments[10];
 790    D3D12_VIDEO_DECODE_REFERENCE_FRAMES ReferenceFrames;
 791    D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM CompressedBitstream;
 792    ID3D12VideoDecoderHeap *pHeap;
 793} D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS;
 794typedef struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS {
 795    ID3D12Resource *pOutputTexture2D;
 796    UINT OutputSubresource;
 797    D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS ConversionArguments;
 798} D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS;
 799/*****************************************************************************
 800 * ID3D12VideoDecodeCommandList interface
 801 */
 802#ifndef __ID3D12VideoDecodeCommandList_INTERFACE_DEFINED__
 803#define __ID3D12VideoDecodeCommandList_INTERFACE_DEFINED__
 804
 805DEFINE_GUID(IID_ID3D12VideoDecodeCommandList, 0x3b60536e, 0xad29, 0x4e64, 0xa2,0x69, 0xf8,0x53,0x83,0x7e,0x5e,0x53);
 806#if defined(__cplusplus) && !defined(CINTERFACE)
 807MIDL_INTERFACE("3b60536e-ad29-4e64-a269-f853837e5e53")
 808ID3D12VideoDecodeCommandList : public ID3D12CommandList
 809{
 810    virtual HRESULT STDMETHODCALLTYPE Close(
 811        ) = 0;
 812
 813    virtual HRESULT STDMETHODCALLTYPE Reset(
 814        ID3D12CommandAllocator *allocator) = 0;
 815
 816    virtual void STDMETHODCALLTYPE ClearState(
 817        ) = 0;
 818
 819    virtual void STDMETHODCALLTYPE ResourceBarrier(
 820        UINT barriers_count,
 821        const D3D12_RESOURCE_BARRIER *barriers) = 0;
 822
 823    virtual void STDMETHODCALLTYPE DiscardResource(
 824        ID3D12Resource *resource,
 825        const D3D12_DISCARD_REGION *region) = 0;
 826
 827    virtual void STDMETHODCALLTYPE BeginQuery(
 828        ID3D12QueryHeap *query_heap,
 829        D3D12_QUERY_TYPE type,
 830        UINT index) = 0;
 831
 832    virtual void STDMETHODCALLTYPE EndQuery(
 833        ID3D12QueryHeap *query_heap,
 834        D3D12_QUERY_TYPE type,
 835        UINT index) = 0;
 836
 837    virtual void STDMETHODCALLTYPE ResolveQueryData(
 838        ID3D12QueryHeap *query_heap,
 839        D3D12_QUERY_TYPE type,
 840        UINT start_index,
 841        UINT queries_count,
 842        ID3D12Resource *destination_buffer,
 843        UINT64 aligned_destination_buffer_offset) = 0;
 844
 845    virtual void STDMETHODCALLTYPE SetPredication(
 846        ID3D12Resource *buffer,
 847        UINT64 aligned_buffer_offset,
 848        D3D12_PREDICATION_OP operation) = 0;
 849
 850    virtual void STDMETHODCALLTYPE SetMarker(
 851        UINT metadata,
 852        const void *data,
 853        UINT size) = 0;
 854
 855    virtual void STDMETHODCALLTYPE BeginEvent(
 856        UINT metadata,
 857        const void *data,
 858        UINT size) = 0;
 859
 860    virtual void STDMETHODCALLTYPE EndEvent(
 861        ) = 0;
 862
 863    virtual void STDMETHODCALLTYPE DecodeFrame(
 864        ID3D12VideoDecoder *decoder,
 865        const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *output_arguments,
 866        const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_arguments) = 0;
 867
 868    virtual void STDMETHODCALLTYPE WriteBufferImmediate(
 869        UINT count,
 870        const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *params,
 871        const D3D12_WRITEBUFFERIMMEDIATE_MODE *modes) = 0;
 872
 873};
 874#ifdef __CRT_UUID_DECL
 875__CRT_UUID_DECL(ID3D12VideoDecodeCommandList, 0x3b60536e, 0xad29, 0x4e64, 0xa2,0x69, 0xf8,0x53,0x83,0x7e,0x5e,0x53)
 876#endif
 877#else
 878typedef struct ID3D12VideoDecodeCommandListVtbl {
 879    BEGIN_INTERFACE
 880
 881    /*** IUnknown methods ***/
 882    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
 883        ID3D12VideoDecodeCommandList *This,
 884        REFIID riid,
 885        void **ppvObject);
 886
 887    ULONG (STDMETHODCALLTYPE *AddRef)(
 888        ID3D12VideoDecodeCommandList *This);
 889
 890    ULONG (STDMETHODCALLTYPE *Release)(
 891        ID3D12VideoDecodeCommandList *This);
 892
 893    /*** ID3D12Object methods ***/
 894    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
 895        ID3D12VideoDecodeCommandList *This,
 896        REFGUID guid,
 897        UINT *data_size,
 898        void *data);
 899
 900    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
 901        ID3D12VideoDecodeCommandList *This,
 902        REFGUID guid,
 903        UINT data_size,
 904        const void *data);
 905
 906    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
 907        ID3D12VideoDecodeCommandList *This,
 908        REFGUID guid,
 909        const IUnknown *data);
 910
 911    HRESULT (STDMETHODCALLTYPE *SetName)(
 912        ID3D12VideoDecodeCommandList *This,
 913        const WCHAR *name);
 914
 915    /*** ID3D12DeviceChild methods ***/
 916    HRESULT (STDMETHODCALLTYPE *GetDevice)(
 917        ID3D12VideoDecodeCommandList *This,
 918        REFIID riid,
 919        void **device);
 920
 921    /*** ID3D12CommandList methods ***/
 922    D3D12_COMMAND_LIST_TYPE (STDMETHODCALLTYPE *GetType)(
 923        ID3D12VideoDecodeCommandList *This);
 924
 925    /*** ID3D12VideoDecodeCommandList methods ***/
 926    HRESULT (STDMETHODCALLTYPE *Close)(
 927        ID3D12VideoDecodeCommandList *This);
 928
 929    HRESULT (STDMETHODCALLTYPE *Reset)(
 930        ID3D12VideoDecodeCommandList *This,
 931        ID3D12CommandAllocator *allocator);
 932
 933    void (STDMETHODCALLTYPE *ClearState)(
 934        ID3D12VideoDecodeCommandList *This);
 935
 936    void (STDMETHODCALLTYPE *ResourceBarrier)(
 937        ID3D12VideoDecodeCommandList *This,
 938        UINT barriers_count,
 939        const D3D12_RESOURCE_BARRIER *barriers);
 940
 941    void (STDMETHODCALLTYPE *DiscardResource)(
 942        ID3D12VideoDecodeCommandList *This,
 943        ID3D12Resource *resource,
 944        const D3D12_DISCARD_REGION *region);
 945
 946    void (STDMETHODCALLTYPE *BeginQuery)(
 947        ID3D12VideoDecodeCommandList *This,
 948        ID3D12QueryHeap *query_heap,
 949        D3D12_QUERY_TYPE type,
 950        UINT index);
 951
 952    void (STDMETHODCALLTYPE *EndQuery)(
 953        ID3D12VideoDecodeCommandList *This,
 954        ID3D12QueryHeap *query_heap,
 955        D3D12_QUERY_TYPE type,
 956        UINT index);
 957
 958    void (STDMETHODCALLTYPE *ResolveQueryData)(
 959        ID3D12VideoDecodeCommandList *This,
 960        ID3D12QueryHeap *query_heap,
 961        D3D12_QUERY_TYPE type,
 962        UINT start_index,
 963        UINT queries_count,
 964        ID3D12Resource *destination_buffer,
 965        UINT64 aligned_destination_buffer_offset);
 966
 967    void (STDMETHODCALLTYPE *SetPredication)(
 968        ID3D12VideoDecodeCommandList *This,
 969        ID3D12Resource *buffer,
 970        UINT64 aligned_buffer_offset,
 971        D3D12_PREDICATION_OP operation);
 972
 973    void (STDMETHODCALLTYPE *SetMarker)(
 974        ID3D12VideoDecodeCommandList *This,
 975        UINT metadata,
 976        const void *data,
 977        UINT size);
 978
 979    void (STDMETHODCALLTYPE *BeginEvent)(
 980        ID3D12VideoDecodeCommandList *This,
 981        UINT metadata,
 982        const void *data,
 983        UINT size);
 984
 985    void (STDMETHODCALLTYPE *EndEvent)(
 986        ID3D12VideoDecodeCommandList *This);
 987
 988    void (STDMETHODCALLTYPE *DecodeFrame)(
 989        ID3D12VideoDecodeCommandList *This,
 990        ID3D12VideoDecoder *decoder,
 991        const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *output_arguments,
 992        const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_arguments);
 993
 994    void (STDMETHODCALLTYPE *WriteBufferImmediate)(
 995        ID3D12VideoDecodeCommandList *This,
 996        UINT count,
 997        const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *params,
 998        const D3D12_WRITEBUFFERIMMEDIATE_MODE *modes);
 999
1000    END_INTERFACE
1001} ID3D12VideoDecodeCommandListVtbl;
1002
1003interface ID3D12VideoDecodeCommandList {
1004    CONST_VTBL ID3D12VideoDecodeCommandListVtbl* lpVtbl;
1005};
1006
1007#ifdef COBJMACROS
1008#ifndef WIDL_C_INLINE_WRAPPERS
1009/*** IUnknown methods ***/
1010#define ID3D12VideoDecodeCommandList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
1011#define ID3D12VideoDecodeCommandList_AddRef(This) (This)->lpVtbl->AddRef(This)
1012#define ID3D12VideoDecodeCommandList_Release(This) (This)->lpVtbl->Release(This)
1013/*** ID3D12Object methods ***/
1014#define ID3D12VideoDecodeCommandList_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
1015#define ID3D12VideoDecodeCommandList_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
1016#define ID3D12VideoDecodeCommandList_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
1017#define ID3D12VideoDecodeCommandList_SetName(This,name) (This)->lpVtbl->SetName(This,name)
1018/*** ID3D12DeviceChild methods ***/
1019#define ID3D12VideoDecodeCommandList_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
1020/*** ID3D12CommandList methods ***/
1021#define ID3D12VideoDecodeCommandList_GetType(This) (This)->lpVtbl->GetType(This)
1022/*** ID3D12VideoDecodeCommandList methods ***/
1023#define ID3D12VideoDecodeCommandList_Close(This) (This)->lpVtbl->Close(This)
1024#define ID3D12VideoDecodeCommandList_Reset(This,allocator) (This)->lpVtbl->Reset(This,allocator)
1025#define ID3D12VideoDecodeCommandList_ClearState(This) (This)->lpVtbl->ClearState(This)
1026#define ID3D12VideoDecodeCommandList_ResourceBarrier(This,barriers_count,barriers) (This)->lpVtbl->ResourceBarrier(This,barriers_count,barriers)
1027#define ID3D12VideoDecodeCommandList_DiscardResource(This,resource,region) (This)->lpVtbl->DiscardResource(This,resource,region)
1028#define ID3D12VideoDecodeCommandList_BeginQuery(This,query_heap,type,index) (This)->lpVtbl->BeginQuery(This,query_heap,type,index)
1029#define ID3D12VideoDecodeCommandList_EndQuery(This,query_heap,type,index) (This)->lpVtbl->EndQuery(This,query_heap,type,index)
1030#define ID3D12VideoDecodeCommandList_ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset) (This)->lpVtbl->ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset)
1031#define ID3D12VideoDecodeCommandList_SetPredication(This,buffer,aligned_buffer_offset,operation) (This)->lpVtbl->SetPredication(This,buffer,aligned_buffer_offset,operation)
1032#define ID3D12VideoDecodeCommandList_SetMarker(This,metadata,data,size) (This)->lpVtbl->SetMarker(This,metadata,data,size)
1033#define ID3D12VideoDecodeCommandList_BeginEvent(This,metadata,data,size) (This)->lpVtbl->BeginEvent(This,metadata,data,size)
1034#define ID3D12VideoDecodeCommandList_EndEvent(This) (This)->lpVtbl->EndEvent(This)
1035#define ID3D12VideoDecodeCommandList_DecodeFrame(This,decoder,output_arguments,input_arguments) (This)->lpVtbl->DecodeFrame(This,decoder,output_arguments,input_arguments)
1036#define ID3D12VideoDecodeCommandList_WriteBufferImmediate(This,count,params,modes) (This)->lpVtbl->WriteBufferImmediate(This,count,params,modes)
1037#else
1038/*** IUnknown methods ***/
1039static inline HRESULT ID3D12VideoDecodeCommandList_QueryInterface(ID3D12VideoDecodeCommandList* This,REFIID riid,void **ppvObject) {
1040    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
1041}
1042static inline ULONG ID3D12VideoDecodeCommandList_AddRef(ID3D12VideoDecodeCommandList* This) {
1043    return This->lpVtbl->AddRef(This);
1044}
1045static inline ULONG ID3D12VideoDecodeCommandList_Release(ID3D12VideoDecodeCommandList* This) {
1046    return This->lpVtbl->Release(This);
1047}
1048/*** ID3D12Object methods ***/
1049static inline HRESULT ID3D12VideoDecodeCommandList_GetPrivateData(ID3D12VideoDecodeCommandList* This,REFGUID guid,UINT *data_size,void *data) {
1050    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
1051}
1052static inline HRESULT ID3D12VideoDecodeCommandList_SetPrivateData(ID3D12VideoDecodeCommandList* This,REFGUID guid,UINT data_size,const void *data) {
1053    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
1054}
1055static inline HRESULT ID3D12VideoDecodeCommandList_SetPrivateDataInterface(ID3D12VideoDecodeCommandList* This,REFGUID guid,const IUnknown *data) {
1056    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
1057}
1058static inline HRESULT ID3D12VideoDecodeCommandList_SetName(ID3D12VideoDecodeCommandList* This,const WCHAR *name) {
1059    return This->lpVtbl->SetName(This,name);
1060}
1061/*** ID3D12DeviceChild methods ***/
1062static inline HRESULT ID3D12VideoDecodeCommandList_GetDevice(ID3D12VideoDecodeCommandList* This,REFIID riid,void **device) {
1063    return This->lpVtbl->GetDevice(This,riid,device);
1064}
1065/*** ID3D12CommandList methods ***/
1066static inline D3D12_COMMAND_LIST_TYPE ID3D12VideoDecodeCommandList_GetType(ID3D12VideoDecodeCommandList* This) {
1067    return This->lpVtbl->GetType(This);
1068}
1069/*** ID3D12VideoDecodeCommandList methods ***/
1070static inline HRESULT ID3D12VideoDecodeCommandList_Close(ID3D12VideoDecodeCommandList* This) {
1071    return This->lpVtbl->Close(This);
1072}
1073static inline HRESULT ID3D12VideoDecodeCommandList_Reset(ID3D12VideoDecodeCommandList* This,ID3D12CommandAllocator *allocator) {
1074    return This->lpVtbl->Reset(This,allocator);
1075}
1076static inline void ID3D12VideoDecodeCommandList_ClearState(ID3D12VideoDecodeCommandList* This) {
1077    This->lpVtbl->ClearState(This);
1078}
1079static inline void ID3D12VideoDecodeCommandList_ResourceBarrier(ID3D12VideoDecodeCommandList* This,UINT barriers_count,const D3D12_RESOURCE_BARRIER *barriers) {
1080    This->lpVtbl->ResourceBarrier(This,barriers_count,barriers);
1081}
1082static inline void ID3D12VideoDecodeCommandList_DiscardResource(ID3D12VideoDecodeCommandList* This,ID3D12Resource *resource,const D3D12_DISCARD_REGION *region) {
1083    This->lpVtbl->DiscardResource(This,resource,region);
1084}
1085static inline void ID3D12VideoDecodeCommandList_BeginQuery(ID3D12VideoDecodeCommandList* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT index) {
1086    This->lpVtbl->BeginQuery(This,query_heap,type,index);
1087}
1088static inline void ID3D12VideoDecodeCommandList_EndQuery(ID3D12VideoDecodeCommandList* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT index) {
1089    This->lpVtbl->EndQuery(This,query_heap,type,index);
1090}
1091static inline void ID3D12VideoDecodeCommandList_ResolveQueryData(ID3D12VideoDecodeCommandList* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT start_index,UINT queries_count,ID3D12Resource *destination_buffer,UINT64 aligned_destination_buffer_offset) {
1092    This->lpVtbl->ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset);
1093}
1094static inline void ID3D12VideoDecodeCommandList_SetPredication(ID3D12VideoDecodeCommandList* This,ID3D12Resource *buffer,UINT64 aligned_buffer_offset,D3D12_PREDICATION_OP operation) {
1095    This->lpVtbl->SetPredication(This,buffer,aligned_buffer_offset,operation);
1096}
1097static inline void ID3D12VideoDecodeCommandList_SetMarker(ID3D12VideoDecodeCommandList* This,UINT metadata,const void *data,UINT size) {
1098    This->lpVtbl->SetMarker(This,metadata,data,size);
1099}
1100static inline void ID3D12VideoDecodeCommandList_BeginEvent(ID3D12VideoDecodeCommandList* This,UINT metadata,const void *data,UINT size) {
1101    This->lpVtbl->BeginEvent(This,metadata,data,size);
1102}
1103static inline void ID3D12VideoDecodeCommandList_EndEvent(ID3D12VideoDecodeCommandList* This) {
1104    This->lpVtbl->EndEvent(This);
1105}
1106static inline void ID3D12VideoDecodeCommandList_DecodeFrame(ID3D12VideoDecodeCommandList* This,ID3D12VideoDecoder *decoder,const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *output_arguments,const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_arguments) {
1107    This->lpVtbl->DecodeFrame(This,decoder,output_arguments,input_arguments);
1108}
1109static inline void ID3D12VideoDecodeCommandList_WriteBufferImmediate(ID3D12VideoDecodeCommandList* This,UINT count,const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *params,const D3D12_WRITEBUFFERIMMEDIATE_MODE *modes) {
1110    This->lpVtbl->WriteBufferImmediate(This,count,params,modes);
1111}
1112#endif
1113#endif
1114
1115#endif
1116
1117
1118#endif  /* __ID3D12VideoDecodeCommandList_INTERFACE_DEFINED__ */
1119
1120typedef struct D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM {
1121    UINT64 Offset;
1122    ID3D12Resource *pBuffer;
1123} D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM;
1124typedef struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1 {
1125    WINBOOL Enable;
1126    ID3D12Resource *pReferenceTexture2D;
1127    UINT ReferenceSubresource;
1128    DXGI_COLOR_SPACE_TYPE OutputColorSpace;
1129    DXGI_COLOR_SPACE_TYPE DecodeColorSpace;
1130    UINT OutputWidth;
1131    UINT OutputHeight;
1132} D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1;
1133typedef struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 {
1134    ID3D12Resource *pOutputTexture2D;
1135    UINT OutputSubresource;
1136    D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1 ConversionArguments;
1137    D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM Histograms[4];
1138} D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1;
1139/*****************************************************************************
1140 * ID3D12VideoDecodeCommandList1 interface
1141 */
1142#ifndef __ID3D12VideoDecodeCommandList1_INTERFACE_DEFINED__
1143#define __ID3D12VideoDecodeCommandList1_INTERFACE_DEFINED__
1144
1145DEFINE_GUID(IID_ID3D12VideoDecodeCommandList1, 0xd52f011b, 0xb56e, 0x453c, 0xa0,0x5a, 0xa7,0xf3,0x11,0xc8,0xf4,0x72);
1146#if defined(__cplusplus) && !defined(CINTERFACE)
1147MIDL_INTERFACE("d52f011b-b56e-453c-a05a-a7f311c8f472")
1148ID3D12VideoDecodeCommandList1 : public ID3D12VideoDecodeCommandList
1149{
1150    virtual void STDMETHODCALLTYPE DecodeFrame1(
1151        ID3D12VideoDecoder *decoder,
1152        const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 *output_arguments,
1153        const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_arguments) = 0;
1154
1155};
1156#ifdef __CRT_UUID_DECL
1157__CRT_UUID_DECL(ID3D12VideoDecodeCommandList1, 0xd52f011b, 0xb56e, 0x453c, 0xa0,0x5a, 0xa7,0xf3,0x11,0xc8,0xf4,0x72)
1158#endif
1159#else
1160typedef struct ID3D12VideoDecodeCommandList1Vtbl {
1161    BEGIN_INTERFACE
1162
1163    /*** IUnknown methods ***/
1164    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1165        ID3D12VideoDecodeCommandList1 *This,
1166        REFIID riid,
1167        void **ppvObject);
1168
1169    ULONG (STDMETHODCALLTYPE *AddRef)(
1170        ID3D12VideoDecodeCommandList1 *This);
1171
1172    ULONG (STDMETHODCALLTYPE *Release)(
1173        ID3D12VideoDecodeCommandList1 *This);
1174
1175    /*** ID3D12Object methods ***/
1176    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
1177        ID3D12VideoDecodeCommandList1 *This,
1178        REFGUID guid,
1179        UINT *data_size,
1180        void *data);
1181
1182    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
1183        ID3D12VideoDecodeCommandList1 *This,
1184        REFGUID guid,
1185        UINT data_size,
1186        const void *data);
1187
1188    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
1189        ID3D12VideoDecodeCommandList1 *This,
1190        REFGUID guid,
1191        const IUnknown *data);
1192
1193    HRESULT (STDMETHODCALLTYPE *SetName)(
1194        ID3D12VideoDecodeCommandList1 *This,
1195        const WCHAR *name);
1196
1197    /*** ID3D12DeviceChild methods ***/
1198    HRESULT (STDMETHODCALLTYPE *GetDevice)(
1199        ID3D12VideoDecodeCommandList1 *This,
1200        REFIID riid,
1201        void **device);
1202
1203    /*** ID3D12CommandList methods ***/
1204    D3D12_COMMAND_LIST_TYPE (STDMETHODCALLTYPE *GetType)(
1205        ID3D12VideoDecodeCommandList1 *This);
1206
1207    /*** ID3D12VideoDecodeCommandList methods ***/
1208    HRESULT (STDMETHODCALLTYPE *Close)(
1209        ID3D12VideoDecodeCommandList1 *This);
1210
1211    HRESULT (STDMETHODCALLTYPE *Reset)(
1212        ID3D12VideoDecodeCommandList1 *This,
1213        ID3D12CommandAllocator *allocator);
1214
1215    void (STDMETHODCALLTYPE *ClearState)(
1216        ID3D12VideoDecodeCommandList1 *This);
1217
1218    void (STDMETHODCALLTYPE *ResourceBarrier)(
1219        ID3D12VideoDecodeCommandList1 *This,
1220        UINT barriers_count,
1221        const D3D12_RESOURCE_BARRIER *barriers);
1222
1223    void (STDMETHODCALLTYPE *DiscardResource)(
1224        ID3D12VideoDecodeCommandList1 *This,
1225        ID3D12Resource *resource,
1226        const D3D12_DISCARD_REGION *region);
1227
1228    void (STDMETHODCALLTYPE *BeginQuery)(
1229        ID3D12VideoDecodeCommandList1 *This,
1230        ID3D12QueryHeap *query_heap,
1231        D3D12_QUERY_TYPE type,
1232        UINT index);
1233
1234    void (STDMETHODCALLTYPE *EndQuery)(
1235        ID3D12VideoDecodeCommandList1 *This,
1236        ID3D12QueryHeap *query_heap,
1237        D3D12_QUERY_TYPE type,
1238        UINT index);
1239
1240    void (STDMETHODCALLTYPE *ResolveQueryData)(
1241        ID3D12VideoDecodeCommandList1 *This,
1242        ID3D12QueryHeap *query_heap,
1243        D3D12_QUERY_TYPE type,
1244        UINT start_index,
1245        UINT queries_count,
1246        ID3D12Resource *destination_buffer,
1247        UINT64 aligned_destination_buffer_offset);
1248
1249    void (STDMETHODCALLTYPE *SetPredication)(
1250        ID3D12VideoDecodeCommandList1 *This,
1251        ID3D12Resource *buffer,
1252        UINT64 aligned_buffer_offset,
1253        D3D12_PREDICATION_OP operation);
1254
1255    void (STDMETHODCALLTYPE *SetMarker)(
1256        ID3D12VideoDecodeCommandList1 *This,
1257        UINT metadata,
1258        const void *data,
1259        UINT size);
1260
1261    void (STDMETHODCALLTYPE *BeginEvent)(
1262        ID3D12VideoDecodeCommandList1 *This,
1263        UINT metadata,
1264        const void *data,
1265        UINT size);
1266
1267    void (STDMETHODCALLTYPE *EndEvent)(
1268        ID3D12VideoDecodeCommandList1 *This);
1269
1270    void (STDMETHODCALLTYPE *DecodeFrame)(
1271        ID3D12VideoDecodeCommandList1 *This,
1272        ID3D12VideoDecoder *decoder,
1273        const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *output_arguments,
1274        const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_arguments);
1275
1276    void (STDMETHODCALLTYPE *WriteBufferImmediate)(
1277        ID3D12VideoDecodeCommandList1 *This,
1278        UINT count,
1279        const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *params,
1280        const D3D12_WRITEBUFFERIMMEDIATE_MODE *modes);
1281
1282    /*** ID3D12VideoDecodeCommandList1 methods ***/
1283    void (STDMETHODCALLTYPE *DecodeFrame1)(
1284        ID3D12VideoDecodeCommandList1 *This,
1285        ID3D12VideoDecoder *decoder,
1286        const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 *output_arguments,
1287        const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_arguments);
1288
1289    END_INTERFACE
1290} ID3D12VideoDecodeCommandList1Vtbl;
1291
1292interface ID3D12VideoDecodeCommandList1 {
1293    CONST_VTBL ID3D12VideoDecodeCommandList1Vtbl* lpVtbl;
1294};
1295
1296#ifdef COBJMACROS
1297#ifndef WIDL_C_INLINE_WRAPPERS
1298/*** IUnknown methods ***/
1299#define ID3D12VideoDecodeCommandList1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
1300#define ID3D12VideoDecodeCommandList1_AddRef(This) (This)->lpVtbl->AddRef(This)
1301#define ID3D12VideoDecodeCommandList1_Release(This) (This)->lpVtbl->Release(This)
1302/*** ID3D12Object methods ***/
1303#define ID3D12VideoDecodeCommandList1_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
1304#define ID3D12VideoDecodeCommandList1_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
1305#define ID3D12VideoDecodeCommandList1_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
1306#define ID3D12VideoDecodeCommandList1_SetName(This,name) (This)->lpVtbl->SetName(This,name)
1307/*** ID3D12DeviceChild methods ***/
1308#define ID3D12VideoDecodeCommandList1_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
1309/*** ID3D12CommandList methods ***/
1310#define ID3D12VideoDecodeCommandList1_GetType(This) (This)->lpVtbl->GetType(This)
1311/*** ID3D12VideoDecodeCommandList methods ***/
1312#define ID3D12VideoDecodeCommandList1_Close(This) (This)->lpVtbl->Close(This)
1313#define ID3D12VideoDecodeCommandList1_Reset(This,allocator) (This)->lpVtbl->Reset(This,allocator)
1314#define ID3D12VideoDecodeCommandList1_ClearState(This) (This)->lpVtbl->ClearState(This)
1315#define ID3D12VideoDecodeCommandList1_ResourceBarrier(This,barriers_count,barriers) (This)->lpVtbl->ResourceBarrier(This,barriers_count,barriers)
1316#define ID3D12VideoDecodeCommandList1_DiscardResource(This,resource,region) (This)->lpVtbl->DiscardResource(This,resource,region)
1317#define ID3D12VideoDecodeCommandList1_BeginQuery(This,query_heap,type,index) (This)->lpVtbl->BeginQuery(This,query_heap,type,index)
1318#define ID3D12VideoDecodeCommandList1_EndQuery(This,query_heap,type,index) (This)->lpVtbl->EndQuery(This,query_heap,type,index)
1319#define ID3D12VideoDecodeCommandList1_ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset) (This)->lpVtbl->ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset)
1320#define ID3D12VideoDecodeCommandList1_SetPredication(This,buffer,aligned_buffer_offset,operation) (This)->lpVtbl->SetPredication(This,buffer,aligned_buffer_offset,operation)
1321#define ID3D12VideoDecodeCommandList1_SetMarker(This,metadata,data,size) (This)->lpVtbl->SetMarker(This,metadata,data,size)
1322#define ID3D12VideoDecodeCommandList1_BeginEvent(This,metadata,data,size) (This)->lpVtbl->BeginEvent(This,metadata,data,size)
1323#define ID3D12VideoDecodeCommandList1_EndEvent(This) (This)->lpVtbl->EndEvent(This)
1324#define ID3D12VideoDecodeCommandList1_DecodeFrame(This,decoder,output_arguments,input_arguments) (This)->lpVtbl->DecodeFrame(This,decoder,output_arguments,input_arguments)
1325#define ID3D12VideoDecodeCommandList1_WriteBufferImmediate(This,count,params,modes) (This)->lpVtbl->WriteBufferImmediate(This,count,params,modes)
1326/*** ID3D12VideoDecodeCommandList1 methods ***/
1327#define ID3D12VideoDecodeCommandList1_DecodeFrame1(This,decoder,output_arguments,input_arguments) (This)->lpVtbl->DecodeFrame1(This,decoder,output_arguments,input_arguments)
1328#else
1329/*** IUnknown methods ***/
1330static inline HRESULT ID3D12VideoDecodeCommandList1_QueryInterface(ID3D12VideoDecodeCommandList1* This,REFIID riid,void **ppvObject) {
1331    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
1332}
1333static inline ULONG ID3D12VideoDecodeCommandList1_AddRef(ID3D12VideoDecodeCommandList1* This) {
1334    return This->lpVtbl->AddRef(This);
1335}
1336static inline ULONG ID3D12VideoDecodeCommandList1_Release(ID3D12VideoDecodeCommandList1* This) {
1337    return This->lpVtbl->Release(This);
1338}
1339/*** ID3D12Object methods ***/
1340static inline HRESULT ID3D12VideoDecodeCommandList1_GetPrivateData(ID3D12VideoDecodeCommandList1* This,REFGUID guid,UINT *data_size,void *data) {
1341    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
1342}
1343static inline HRESULT ID3D12VideoDecodeCommandList1_SetPrivateData(ID3D12VideoDecodeCommandList1* This,REFGUID guid,UINT data_size,const void *data) {
1344    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
1345}
1346static inline HRESULT ID3D12VideoDecodeCommandList1_SetPrivateDataInterface(ID3D12VideoDecodeCommandList1* This,REFGUID guid,const IUnknown *data) {
1347    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
1348}
1349static inline HRESULT ID3D12VideoDecodeCommandList1_SetName(ID3D12VideoDecodeCommandList1* This,const WCHAR *name) {
1350    return This->lpVtbl->SetName(This,name);
1351}
1352/*** ID3D12DeviceChild methods ***/
1353static inline HRESULT ID3D12VideoDecodeCommandList1_GetDevice(ID3D12VideoDecodeCommandList1* This,REFIID riid,void **device) {
1354    return This->lpVtbl->GetDevice(This,riid,device);
1355}
1356/*** ID3D12CommandList methods ***/
1357static inline D3D12_COMMAND_LIST_TYPE ID3D12VideoDecodeCommandList1_GetType(ID3D12VideoDecodeCommandList1* This) {
1358    return This->lpVtbl->GetType(This);
1359}
1360/*** ID3D12VideoDecodeCommandList methods ***/
1361static inline HRESULT ID3D12VideoDecodeCommandList1_Close(ID3D12VideoDecodeCommandList1* This) {
1362    return This->lpVtbl->Close(This);
1363}
1364static inline HRESULT ID3D12VideoDecodeCommandList1_Reset(ID3D12VideoDecodeCommandList1* This,ID3D12CommandAllocator *allocator) {
1365    return This->lpVtbl->Reset(This,allocator);
1366}
1367static inline void ID3D12VideoDecodeCommandList1_ClearState(ID3D12VideoDecodeCommandList1* This) {
1368    This->lpVtbl->ClearState(This);
1369}
1370static inline void ID3D12VideoDecodeCommandList1_ResourceBarrier(ID3D12VideoDecodeCommandList1* This,UINT barriers_count,const D3D12_RESOURCE_BARRIER *barriers) {
1371    This->lpVtbl->ResourceBarrier(This,barriers_count,barriers);
1372}
1373static inline void ID3D12VideoDecodeCommandList1_DiscardResource(ID3D12VideoDecodeCommandList1* This,ID3D12Resource *resource,const D3D12_DISCARD_REGION *region) {
1374    This->lpVtbl->DiscardResource(This,resource,region);
1375}
1376static inline void ID3D12VideoDecodeCommandList1_BeginQuery(ID3D12VideoDecodeCommandList1* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT index) {
1377    This->lpVtbl->BeginQuery(This,query_heap,type,index);
1378}
1379static inline void ID3D12VideoDecodeCommandList1_EndQuery(ID3D12VideoDecodeCommandList1* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT index) {
1380    This->lpVtbl->EndQuery(This,query_heap,type,index);
1381}
1382static inline void ID3D12VideoDecodeCommandList1_ResolveQueryData(ID3D12VideoDecodeCommandList1* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT start_index,UINT queries_count,ID3D12Resource *destination_buffer,UINT64 aligned_destination_buffer_offset) {
1383    This->lpVtbl->ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset);
1384}
1385static inline void ID3D12VideoDecodeCommandList1_SetPredication(ID3D12VideoDecodeCommandList1* This,ID3D12Resource *buffer,UINT64 aligned_buffer_offset,D3D12_PREDICATION_OP operation) {
1386    This->lpVtbl->SetPredication(This,buffer,aligned_buffer_offset,operation);
1387}
1388static inline void ID3D12VideoDecodeCommandList1_SetMarker(ID3D12VideoDecodeCommandList1* This,UINT metadata,const void *data,UINT size) {
1389    This->lpVtbl->SetMarker(This,metadata,data,size);
1390}
1391static inline void ID3D12VideoDecodeCommandList1_BeginEvent(ID3D12VideoDecodeCommandList1* This,UINT metadata,const void *data,UINT size) {
1392    This->lpVtbl->BeginEvent(This,metadata,data,size);
1393}
1394static inline void ID3D12VideoDecodeCommandList1_EndEvent(ID3D12VideoDecodeCommandList1* This) {
1395    This->lpVtbl->EndEvent(This);
1396}
1397static inline void ID3D12VideoDecodeCommandList1_DecodeFrame(ID3D12VideoDecodeCommandList1* This,ID3D12VideoDecoder *decoder,const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *output_arguments,const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_arguments) {
1398    This->lpVtbl->DecodeFrame(This,decoder,output_arguments,input_arguments);
1399}
1400static inline void ID3D12VideoDecodeCommandList1_WriteBufferImmediate(ID3D12VideoDecodeCommandList1* This,UINT count,const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *params,const D3D12_WRITEBUFFERIMMEDIATE_MODE *modes) {
1401    This->lpVtbl->WriteBufferImmediate(This,count,params,modes);
1402}
1403/*** ID3D12VideoDecodeCommandList1 methods ***/
1404static inline void ID3D12VideoDecodeCommandList1_DecodeFrame1(ID3D12VideoDecodeCommandList1* This,ID3D12VideoDecoder *decoder,const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 *output_arguments,const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_arguments) {
1405    This->lpVtbl->DecodeFrame1(This,decoder,output_arguments,input_arguments);
1406}
1407#endif
1408#endif
1409
1410#endif
1411
1412
1413#endif  /* __ID3D12VideoDecodeCommandList1_INTERFACE_DEFINED__ */
1414
1415typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE {
1416    D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_8X8 = 0,
1417    D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_16X16 = 1
1418} D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE;
1419typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION {
1420    D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_QUARTER_PEL = 0
1421} D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION;
1422typedef struct D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT {
1423    UINT NodeIndex;
1424    WINBOOL VideoDecodeSupport;
1425    WINBOOL VideoProcessSupport;
1426    WINBOOL VideoEncodeSupport;
1427} D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT;
1428typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_DESC {
1429    UINT NodeMask;
1430    DXGI_FORMAT InputFormat;
1431    D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize;
1432    D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision;
1433    D3D12_VIDEO_SIZE_RANGE SizeRange;
1434} D3D12_VIDEO_MOTION_ESTIMATOR_DESC;
1435/*****************************************************************************
1436 * ID3D12VideoMotionEstimator interface
1437 */
1438#ifndef __ID3D12VideoMotionEstimator_INTERFACE_DEFINED__
1439#define __ID3D12VideoMotionEstimator_INTERFACE_DEFINED__
1440
1441DEFINE_GUID(IID_ID3D12VideoMotionEstimator, 0x33fdae0e, 0x098b, 0x428f, 0x87,0xbb, 0x34,0xb6,0x95,0xde,0x08,0xf8);
1442#if defined(__cplusplus) && !defined(CINTERFACE)
1443MIDL_INTERFACE("33fdae0e-098b-428f-87bb-34b695de08f8")
1444ID3D12VideoMotionEstimator : public ID3D12Pageable
1445{
1446#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
1447    virtual D3D12_VIDEO_MOTION_ESTIMATOR_DESC* STDMETHODCALLTYPE GetDesc(
1448        D3D12_VIDEO_MOTION_ESTIMATOR_DESC *__ret) = 0;
1449    D3D12_VIDEO_MOTION_ESTIMATOR_DESC STDMETHODCALLTYPE GetDesc(
1450        )
1451    {
1452        D3D12_VIDEO_MOTION_ESTIMATOR_DESC __ret;
1453        return *GetDesc(&__ret);
1454    }
1455#else
1456    virtual D3D12_VIDEO_MOTION_ESTIMATOR_DESC STDMETHODCALLTYPE GetDesc(
1457        ) = 0;
1458#endif
1459
1460    virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession(
1461        REFIID riid,
1462        void **protected_session) = 0;
1463
1464};
1465#ifdef __CRT_UUID_DECL
1466__CRT_UUID_DECL(ID3D12VideoMotionEstimator, 0x33fdae0e, 0x098b, 0x428f, 0x87,0xbb, 0x34,0xb6,0x95,0xde,0x08,0xf8)
1467#endif
1468#else
1469typedef struct ID3D12VideoMotionEstimatorVtbl {
1470    BEGIN_INTERFACE
1471
1472    /*** IUnknown methods ***/
1473    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1474        ID3D12VideoMotionEstimator *This,
1475        REFIID riid,
1476        void **ppvObject);
1477
1478    ULONG (STDMETHODCALLTYPE *AddRef)(
1479        ID3D12VideoMotionEstimator *This);
1480
1481    ULONG (STDMETHODCALLTYPE *Release)(
1482        ID3D12VideoMotionEstimator *This);
1483
1484    /*** ID3D12Object methods ***/
1485    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
1486        ID3D12VideoMotionEstimator *This,
1487        REFGUID guid,
1488        UINT *data_size,
1489        void *data);
1490
1491    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
1492        ID3D12VideoMotionEstimator *This,
1493        REFGUID guid,
1494        UINT data_size,
1495        const void *data);
1496
1497    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
1498        ID3D12VideoMotionEstimator *This,
1499        REFGUID guid,
1500        const IUnknown *data);
1501
1502    HRESULT (STDMETHODCALLTYPE *SetName)(
1503        ID3D12VideoMotionEstimator *This,
1504        const WCHAR *name);
1505
1506    /*** ID3D12DeviceChild methods ***/
1507    HRESULT (STDMETHODCALLTYPE *GetDevice)(
1508        ID3D12VideoMotionEstimator *This,
1509        REFIID riid,
1510        void **device);
1511
1512    /*** ID3D12VideoMotionEstimator methods ***/
1513    D3D12_VIDEO_MOTION_ESTIMATOR_DESC * (STDMETHODCALLTYPE *GetDesc)(
1514        ID3D12VideoMotionEstimator *This,
1515        D3D12_VIDEO_MOTION_ESTIMATOR_DESC *__ret);
1516
1517    HRESULT (STDMETHODCALLTYPE *GetProtectedResourceSession)(
1518        ID3D12VideoMotionEstimator *This,
1519        REFIID riid,
1520        void **protected_session);
1521
1522    END_INTERFACE
1523} ID3D12VideoMotionEstimatorVtbl;
1524
1525interface ID3D12VideoMotionEstimator {
1526    CONST_VTBL ID3D12VideoMotionEstimatorVtbl* lpVtbl;
1527};
1528
1529#ifdef COBJMACROS
1530#ifndef WIDL_C_INLINE_WRAPPERS
1531/*** IUnknown methods ***/
1532#define ID3D12VideoMotionEstimator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
1533#define ID3D12VideoMotionEstimator_AddRef(This) (This)->lpVtbl->AddRef(This)
1534#define ID3D12VideoMotionEstimator_Release(This) (This)->lpVtbl->Release(This)
1535/*** ID3D12Object methods ***/
1536#define ID3D12VideoMotionEstimator_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
1537#define ID3D12VideoMotionEstimator_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
1538#define ID3D12VideoMotionEstimator_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
1539#define ID3D12VideoMotionEstimator_SetName(This,name) (This)->lpVtbl->SetName(This,name)
1540/*** ID3D12DeviceChild methods ***/
1541#define ID3D12VideoMotionEstimator_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
1542/*** ID3D12VideoMotionEstimator methods ***/
1543#define ID3D12VideoMotionEstimator_GetDesc(This) ID3D12VideoMotionEstimator_GetDesc_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
1544#define ID3D12VideoMotionEstimator_GetProtectedResourceSession(This,riid,protected_session) (This)->lpVtbl->GetProtectedResourceSession(This,riid,protected_session)
1545#else
1546/*** IUnknown methods ***/
1547static inline HRESULT ID3D12VideoMotionEstimator_QueryInterface(ID3D12VideoMotionEstimator* This,REFIID riid,void **ppvObject) {
1548    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
1549}
1550static inline ULONG ID3D12VideoMotionEstimator_AddRef(ID3D12VideoMotionEstimator* This) {
1551    return This->lpVtbl->AddRef(This);
1552}
1553static inline ULONG ID3D12VideoMotionEstimator_Release(ID3D12VideoMotionEstimator* This) {
1554    return This->lpVtbl->Release(This);
1555}
1556/*** ID3D12Object methods ***/
1557static inline HRESULT ID3D12VideoMotionEstimator_GetPrivateData(ID3D12VideoMotionEstimator* This,REFGUID guid,UINT *data_size,void *data) {
1558    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
1559}
1560static inline HRESULT ID3D12VideoMotionEstimator_SetPrivateData(ID3D12VideoMotionEstimator* This,REFGUID guid,UINT data_size,const void *data) {
1561    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
1562}
1563static inline HRESULT ID3D12VideoMotionEstimator_SetPrivateDataInterface(ID3D12VideoMotionEstimator* This,REFGUID guid,const IUnknown *data) {
1564    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
1565}
1566static inline HRESULT ID3D12VideoMotionEstimator_SetName(ID3D12VideoMotionEstimator* This,const WCHAR *name) {
1567    return This->lpVtbl->SetName(This,name);
1568}
1569/*** ID3D12DeviceChild methods ***/
1570static inline HRESULT ID3D12VideoMotionEstimator_GetDevice(ID3D12VideoMotionEstimator* This,REFIID riid,void **device) {
1571    return This->lpVtbl->GetDevice(This,riid,device);
1572}
1573/*** ID3D12VideoMotionEstimator methods ***/
1574static inline D3D12_VIDEO_MOTION_ESTIMATOR_DESC ID3D12VideoMotionEstimator_GetDesc(ID3D12VideoMotionEstimator* This) {
1575    D3D12_VIDEO_MOTION_ESTIMATOR_DESC __ret;
1576    return *This->lpVtbl->GetDesc(This,&__ret);
1577}
1578static inline HRESULT ID3D12VideoMotionEstimator_GetProtectedResourceSession(ID3D12VideoMotionEstimator* This,REFIID riid,void **protected_session) {
1579    return This->lpVtbl->GetProtectedResourceSession(This,riid,protected_session);
1580}
1581#endif
1582#endif
1583
1584#endif
1585
1586
1587#endif  /* __ID3D12VideoMotionEstimator_INTERFACE_DEFINED__ */
1588
1589typedef struct D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC {
1590    UINT NodeMask;
1591    DXGI_FORMAT InputFormat;
1592    D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize;
1593    D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision;
1594    D3D12_VIDEO_SIZE_RANGE SizeRange;
1595} D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC;
1596/*****************************************************************************
1597 * ID3D12VideoMotionVectorHeap interface
1598 */
1599#ifndef __ID3D12VideoMotionVectorHeap_INTERFACE_DEFINED__
1600#define __ID3D12VideoMotionVectorHeap_INTERFACE_DEFINED__
1601
1602DEFINE_GUID(IID_ID3D12VideoMotionVectorHeap, 0x5be17987, 0x743a, 0x4061, 0x83,0x4b, 0x23,0xd2,0x2d,0xae,0xa5,0x05);
1603#if defined(__cplusplus) && !defined(CINTERFACE)
1604MIDL_INTERFACE("5be17987-743a-4061-834b-23d22daea505")
1605ID3D12VideoMotionVectorHeap : public ID3D12Pageable
1606{
1607#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
1608    virtual D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC* STDMETHODCALLTYPE GetDesc(
1609        D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *__ret) = 0;
1610    D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC STDMETHODCALLTYPE GetDesc(
1611        )
1612    {
1613        D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC __ret;
1614        return *GetDesc(&__ret);
1615    }
1616#else
1617    virtual D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC STDMETHODCALLTYPE GetDesc(
1618        ) = 0;
1619#endif
1620
1621    virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession(
1622        REFIID riid,
1623        void **protected_session) = 0;
1624
1625};
1626#ifdef __CRT_UUID_DECL
1627__CRT_UUID_DECL(ID3D12VideoMotionVectorHeap, 0x5be17987, 0x743a, 0x4061, 0x83,0x4b, 0x23,0xd2,0x2d,0xae,0xa5,0x05)
1628#endif
1629#else
1630typedef struct ID3D12VideoMotionVectorHeapVtbl {
1631    BEGIN_INTERFACE
1632
1633    /*** IUnknown methods ***/
1634    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1635        ID3D12VideoMotionVectorHeap *This,
1636        REFIID riid,
1637        void **ppvObject);
1638
1639    ULONG (STDMETHODCALLTYPE *AddRef)(
1640        ID3D12VideoMotionVectorHeap *This);
1641
1642    ULONG (STDMETHODCALLTYPE *Release)(
1643        ID3D12VideoMotionVectorHeap *This);
1644
1645    /*** ID3D12Object methods ***/
1646    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
1647        ID3D12VideoMotionVectorHeap *This,
1648        REFGUID guid,
1649        UINT *data_size,
1650        void *data);
1651
1652    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
1653        ID3D12VideoMotionVectorHeap *This,
1654        REFGUID guid,
1655        UINT data_size,
1656        const void *data);
1657
1658    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
1659        ID3D12VideoMotionVectorHeap *This,
1660        REFGUID guid,
1661        const IUnknown *data);
1662
1663    HRESULT (STDMETHODCALLTYPE *SetName)(
1664        ID3D12VideoMotionVectorHeap *This,
1665        const WCHAR *name);
1666
1667    /*** ID3D12DeviceChild methods ***/
1668    HRESULT (STDMETHODCALLTYPE *GetDevice)(
1669        ID3D12VideoMotionVectorHeap *This,
1670        REFIID riid,
1671        void **device);
1672
1673    /*** ID3D12VideoMotionVectorHeap methods ***/
1674    D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC * (STDMETHODCALLTYPE *GetDesc)(
1675        ID3D12VideoMotionVectorHeap *This,
1676        D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *__ret);
1677
1678    HRESULT (STDMETHODCALLTYPE *GetProtectedResourceSession)(
1679        ID3D12VideoMotionVectorHeap *This,
1680        REFIID riid,
1681        void **protected_session);
1682
1683    END_INTERFACE
1684} ID3D12VideoMotionVectorHeapVtbl;
1685
1686interface ID3D12VideoMotionVectorHeap {
1687    CONST_VTBL ID3D12VideoMotionVectorHeapVtbl* lpVtbl;
1688};
1689
1690#ifdef COBJMACROS
1691#ifndef WIDL_C_INLINE_WRAPPERS
1692/*** IUnknown methods ***/
1693#define ID3D12VideoMotionVectorHeap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
1694#define ID3D12VideoMotionVectorHeap_AddRef(This) (This)->lpVtbl->AddRef(This)
1695#define ID3D12VideoMotionVectorHeap_Release(This) (This)->lpVtbl->Release(This)
1696/*** ID3D12Object methods ***/
1697#define ID3D12VideoMotionVectorHeap_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
1698#define ID3D12VideoMotionVectorHeap_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
1699#define ID3D12VideoMotionVectorHeap_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
1700#define ID3D12VideoMotionVectorHeap_SetName(This,name) (This)->lpVtbl->SetName(This,name)
1701/*** ID3D12DeviceChild methods ***/
1702#define ID3D12VideoMotionVectorHeap_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
1703/*** ID3D12VideoMotionVectorHeap methods ***/
1704#define ID3D12VideoMotionVectorHeap_GetDesc(This) ID3D12VideoMotionVectorHeap_GetDesc_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
1705#define ID3D12VideoMotionVectorHeap_GetProtectedResourceSession(This,riid,protected_session) (This)->lpVtbl->GetProtectedResourceSession(This,riid,protected_session)
1706#else
1707/*** IUnknown methods ***/
1708static inline HRESULT ID3D12VideoMotionVectorHeap_QueryInterface(ID3D12VideoMotionVectorHeap* This,REFIID riid,void **ppvObject) {
1709    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
1710}
1711static inline ULONG ID3D12VideoMotionVectorHeap_AddRef(ID3D12VideoMotionVectorHeap* This) {
1712    return This->lpVtbl->AddRef(This);
1713}
1714static inline ULONG ID3D12VideoMotionVectorHeap_Release(ID3D12VideoMotionVectorHeap* This) {
1715    return This->lpVtbl->Release(This);
1716}
1717/*** ID3D12Object methods ***/
1718static inline HRESULT ID3D12VideoMotionVectorHeap_GetPrivateData(ID3D12VideoMotionVectorHeap* This,REFGUID guid,UINT *data_size,void *data) {
1719    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
1720}
1721static inline HRESULT ID3D12VideoMotionVectorHeap_SetPrivateData(ID3D12VideoMotionVectorHeap* This,REFGUID guid,UINT data_size,const void *data) {
1722    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
1723}
1724static inline HRESULT ID3D12VideoMotionVectorHeap_SetPrivateDataInterface(ID3D12VideoMotionVectorHeap* This,REFGUID guid,const IUnknown *data) {
1725    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
1726}
1727static inline HRESULT ID3D12VideoMotionVectorHeap_SetName(ID3D12VideoMotionVectorHeap* This,const WCHAR *name) {
1728    return This->lpVtbl->SetName(This,name);
1729}
1730/*** ID3D12DeviceChild methods ***/
1731static inline HRESULT ID3D12VideoMotionVectorHeap_GetDevice(ID3D12VideoMotionVectorHeap* This,REFIID riid,void **device) {
1732    return This->lpVtbl->GetDevice(This,riid,device);
1733}
1734/*** ID3D12VideoMotionVectorHeap methods ***/
1735static inline D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC ID3D12VideoMotionVectorHeap_GetDesc(ID3D12VideoMotionVectorHeap* This) {
1736    D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC __ret;
1737    return *This->lpVtbl->GetDesc(This,&__ret);
1738}
1739static inline HRESULT ID3D12VideoMotionVectorHeap_GetProtectedResourceSession(ID3D12VideoMotionVectorHeap* This,REFIID riid,void **protected_session) {
1740    return This->lpVtbl->GetProtectedResourceSession(This,riid,protected_session);
1741}
1742#endif
1743#endif
1744
1745#endif
1746
1747
1748#endif  /* __ID3D12VideoMotionVectorHeap_INTERFACE_DEFINED__ */
1749
1750/*****************************************************************************
1751 * ID3D12VideoDevice1 interface
1752 */
1753#ifndef __ID3D12VideoDevice1_INTERFACE_DEFINED__
1754#define __ID3D12VideoDevice1_INTERFACE_DEFINED__
1755
1756DEFINE_GUID(IID_ID3D12VideoDevice1, 0x981611ad, 0xa144, 0x4c83, 0x98,0x90, 0xf3,0x0e,0x26,0xd6,0x58,0xab);
1757#if defined(__cplusplus) && !defined(CINTERFACE)
1758MIDL_INTERFACE("981611ad-a144-4c83-9890-f30e26d658ab")
1759ID3D12VideoDevice1 : public ID3D12VideoDevice
1760{
1761    virtual HRESULT STDMETHODCALLTYPE CreateVideoMotionEstimator(
1762        const D3D12_VIDEO_MOTION_ESTIMATOR_DESC *desc,
1763        ID3D12ProtectedResourceSession *protected_resource_session,
1764        REFIID riid,
1765        void **video_motion_estimator) = 0;
1766
1767    virtual HRESULT STDMETHODCALLTYPE CreateVideoMotionVectorHeap(
1768        const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *desc,
1769        ID3D12ProtectedResourceSession *protected_resource_session,
1770        REFIID riid,
1771        void **video_motion_vector_heap) = 0;
1772
1773};
1774#ifdef __CRT_UUID_DECL
1775__CRT_UUID_DECL(ID3D12VideoDevice1, 0x981611ad, 0xa144, 0x4c83, 0x98,0x90, 0xf3,0x0e,0x26,0xd6,0x58,0xab)
1776#endif
1777#else
1778typedef struct ID3D12VideoDevice1Vtbl {
1779    BEGIN_INTERFACE
1780
1781    /*** IUnknown methods ***/
1782    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1783        ID3D12VideoDevice1 *This,
1784        REFIID riid,
1785        void **ppvObject);
1786
1787    ULONG (STDMETHODCALLTYPE *AddRef)(
1788        ID3D12VideoDevice1 *This);
1789
1790    ULONG (STDMETHODCALLTYPE *Release)(
1791        ID3D12VideoDevice1 *This);
1792
1793    /*** ID3D12VideoDevice methods ***/
1794    HRESULT (STDMETHODCALLTYPE *CheckFeatureSupport)(
1795        ID3D12VideoDevice1 *This,
1796        D3D12_FEATURE_VIDEO feature_video,
1797        void *feature_support_data,
1798        UINT feature_support_data_size);
1799
1800    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoder)(
1801        ID3D12VideoDevice1 *This,
1802        const D3D12_VIDEO_DECODER_DESC *desc,
1803        REFIID riid,
1804        void **video_decoder);
1805
1806    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoderHeap)(
1807        ID3D12VideoDevice1 *This,
1808        const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,
1809        REFIID riid,
1810        void **video_decoder_heap);
1811
1812    HRESULT (STDMETHODCALLTYPE *CreateVideoProcessor)(
1813        ID3D12VideoDevice1 *This,
1814        UINT node_mask,
1815        const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,
1816        UINT input_stream_descs_count,
1817        const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,
1818        REFIID riid,
1819        void **video_processor);
1820
1821    /*** ID3D12VideoDevice1 methods ***/
1822    HRESULT (STDMETHODCALLTYPE *CreateVideoMotionEstimator)(
1823        ID3D12VideoDevice1 *This,
1824        const D3D12_VIDEO_MOTION_ESTIMATOR_DESC *desc,
1825        ID3D12ProtectedResourceSession *protected_resource_session,
1826        REFIID riid,
1827        void **video_motion_estimator);
1828
1829    HRESULT (STDMETHODCALLTYPE *CreateVideoMotionVectorHeap)(
1830        ID3D12VideoDevice1 *This,
1831        const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *desc,
1832        ID3D12ProtectedResourceSession *protected_resource_session,
1833        REFIID riid,
1834        void **video_motion_vector_heap);
1835
1836    END_INTERFACE
1837} ID3D12VideoDevice1Vtbl;
1838
1839interface ID3D12VideoDevice1 {
1840    CONST_VTBL ID3D12VideoDevice1Vtbl* lpVtbl;
1841};
1842
1843#ifdef COBJMACROS
1844#ifndef WIDL_C_INLINE_WRAPPERS
1845/*** IUnknown methods ***/
1846#define ID3D12VideoDevice1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
1847#define ID3D12VideoDevice1_AddRef(This) (This)->lpVtbl->AddRef(This)
1848#define ID3D12VideoDevice1_Release(This) (This)->lpVtbl->Release(This)
1849/*** ID3D12VideoDevice methods ***/
1850#define ID3D12VideoDevice1_CheckFeatureSupport(This,feature_video,feature_support_data,feature_support_data_size) (This)->lpVtbl->CheckFeatureSupport(This,feature_video,feature_support_data,feature_support_data_size)
1851#define ID3D12VideoDevice1_CreateVideoDecoder(This,desc,riid,video_decoder) (This)->lpVtbl->CreateVideoDecoder(This,desc,riid,video_decoder)
1852#define ID3D12VideoDevice1_CreateVideoDecoderHeap(This,video_decoder_heap_desc,riid,video_decoder_heap) (This)->lpVtbl->CreateVideoDecoderHeap(This,video_decoder_heap_desc,riid,video_decoder_heap)
1853#define ID3D12VideoDevice1_CreateVideoProcessor(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,riid,video_processor) (This)->lpVtbl->CreateVideoProcessor(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,riid,video_processor)
1854/*** ID3D12VideoDevice1 methods ***/
1855#define ID3D12VideoDevice1_CreateVideoMotionEstimator(This,desc,protected_resource_session,riid,video_motion_estimator) (This)->lpVtbl->CreateVideoMotionEstimator(This,desc,protected_resource_session,riid,video_motion_estimator)
1856#define ID3D12VideoDevice1_CreateVideoMotionVectorHeap(This,desc,protected_resource_session,riid,video_motion_vector_heap) (This)->lpVtbl->CreateVideoMotionVectorHeap(This,desc,protected_resource_session,riid,video_motion_vector_heap)
1857#else
1858/*** IUnknown methods ***/
1859static inline HRESULT ID3D12VideoDevice1_QueryInterface(ID3D12VideoDevice1* This,REFIID riid,void **ppvObject) {
1860    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
1861}
1862static inline ULONG ID3D12VideoDevice1_AddRef(ID3D12VideoDevice1* This) {
1863    return This->lpVtbl->AddRef(This);
1864}
1865static inline ULONG ID3D12VideoDevice1_Release(ID3D12VideoDevice1* This) {
1866    return This->lpVtbl->Release(This);
1867}
1868/*** ID3D12VideoDevice methods ***/
1869static inline HRESULT ID3D12VideoDevice1_CheckFeatureSupport(ID3D12VideoDevice1* This,D3D12_FEATURE_VIDEO feature_video,void *feature_support_data,UINT feature_support_data_size) {
1870    return This->lpVtbl->CheckFeatureSupport(This,feature_video,feature_support_data,feature_support_data_size);
1871}
1872static inline HRESULT ID3D12VideoDevice1_CreateVideoDecoder(ID3D12VideoDevice1* This,const D3D12_VIDEO_DECODER_DESC *desc,REFIID riid,void **video_decoder) {
1873    return This->lpVtbl->CreateVideoDecoder(This,desc,riid,video_decoder);
1874}
1875static inline HRESULT ID3D12VideoDevice1_CreateVideoDecoderHeap(ID3D12VideoDevice1* This,const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,REFIID riid,void **video_decoder_heap) {
1876    return This->lpVtbl->CreateVideoDecoderHeap(This,video_decoder_heap_desc,riid,video_decoder_heap);
1877}
1878static inline HRESULT ID3D12VideoDevice1_CreateVideoProcessor(ID3D12VideoDevice1* This,UINT node_mask,const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,UINT input_stream_descs_count,const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,REFIID riid,void **video_processor) {
1879    return This->lpVtbl->CreateVideoProcessor(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,riid,video_processor);
1880}
1881/*** ID3D12VideoDevice1 methods ***/
1882static inline HRESULT ID3D12VideoDevice1_CreateVideoMotionEstimator(ID3D12VideoDevice1* This,const D3D12_VIDEO_MOTION_ESTIMATOR_DESC *desc,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_motion_estimator) {
1883    return This->lpVtbl->CreateVideoMotionEstimator(This,desc,protected_resource_session,riid,video_motion_estimator);
1884}
1885static inline HRESULT ID3D12VideoDevice1_CreateVideoMotionVectorHeap(ID3D12VideoDevice1* This,const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *desc,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_motion_vector_heap) {
1886    return This->lpVtbl->CreateVideoMotionVectorHeap(This,desc,protected_resource_session,riid,video_motion_vector_heap);
1887}
1888#endif
1889#endif
1890
1891#endif
1892
1893
1894#endif  /* __ID3D12VideoDevice1_INTERFACE_DEFINED__ */
1895
1896typedef struct D3D12_RESOURCE_COORDINATE {
1897    UINT64 X;
1898    UINT Y;
1899    UINT Z;
1900    UINT SubresourceIndex;
1901} D3D12_RESOURCE_COORDINATE;
1902typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT {
1903    ID3D12VideoMotionVectorHeap *pMotionVectorHeap;
1904} D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT;
1905typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_INPUT {
1906    ID3D12Resource *pInputTexture2D;
1907    UINT InputSubresourceIndex;
1908    ID3D12Resource *pReferenceTexture2D;
1909    UINT ReferenceSubresourceIndex;
1910    ID3D12VideoMotionVectorHeap *pHintMotionVectorHeap;
1911} D3D12_VIDEO_MOTION_ESTIMATOR_INPUT;
1912typedef struct D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT {
1913    ID3D12Resource *pMotionVectorTexture2D;
1914    D3D12_RESOURCE_COORDINATE MotionVectorCoordinate;
1915} D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT;
1916typedef struct D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT {
1917    ID3D12VideoMotionVectorHeap *pMotionVectorHeap;
1918    UINT PixelWidth;
1919    UINT PixelHeight;
1920} D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT;
1921/*****************************************************************************
1922 * ID3D12VideoEncodeCommandList interface
1923 */
1924#ifndef __ID3D12VideoEncodeCommandList_INTERFACE_DEFINED__
1925#define __ID3D12VideoEncodeCommandList_INTERFACE_DEFINED__
1926
1927DEFINE_GUID(IID_ID3D12VideoEncodeCommandList, 0x8455293a, 0x0cbd, 0x4831, 0x9b,0x39, 0xfb,0xdb,0xab,0x72,0x47,0x23);
1928#if defined(__cplusplus) && !defined(CINTERFACE)
1929MIDL_INTERFACE("8455293a-0cbd-4831-9b39-fbdbab724723")
1930ID3D12VideoEncodeCommandList : public ID3D12CommandList
1931{
1932    virtual HRESULT STDMETHODCALLTYPE Close(
1933        ) = 0;
1934
1935    virtual HRESULT STDMETHODCALLTYPE Reset(
1936        ID3D12CommandAllocator *allocator) = 0;
1937
1938    virtual void STDMETHODCALLTYPE ClearState(
1939        ) = 0;
1940
1941    virtual void STDMETHODCALLTYPE ResourceBarrier(
1942        UINT barriers_count,
1943        const D3D12_RESOURCE_BARRIER *barriers) = 0;
1944
1945    virtual void STDMETHODCALLTYPE DiscardResource(
1946        ID3D12Resource *resource,
1947        const D3D12_DISCARD_REGION *region) = 0;
1948
1949    virtual void STDMETHODCALLTYPE BeginQuery(
1950        ID3D12QueryHeap *query_heap,
1951        D3D12_QUERY_TYPE type,
1952        UINT index) = 0;
1953
1954    virtual void STDMETHODCALLTYPE EndQuery(
1955        ID3D12QueryHeap *query_heap,
1956        D3D12_QUERY_TYPE type,
1957        UINT index) = 0;
1958
1959    virtual void STDMETHODCALLTYPE ResolveQueryData(
1960        ID3D12QueryHeap *query_heap,
1961        D3D12_QUERY_TYPE type,
1962        UINT start_index,
1963        UINT queries_count,
1964        ID3D12Resource *destination_buffer,
1965        UINT64 aligned_destination_buffer_offset) = 0;
1966
1967    virtual void STDMETHODCALLTYPE SetPredication(
1968        ID3D12Resource *buffer,
1969        UINT64 aligned_buffer_offset,
1970        D3D12_PREDICATION_OP operation) = 0;
1971
1972    virtual void STDMETHODCALLTYPE SetMarker(
1973        UINT metadata,
1974        const void *data,
1975        UINT size) = 0;
1976
1977    virtual void STDMETHODCALLTYPE BeginEvent(
1978        UINT metadata,
1979        const void *data,
1980        UINT size) = 0;
1981
1982    virtual void STDMETHODCALLTYPE EndEvent(
1983        ) = 0;
1984
1985    virtual void STDMETHODCALLTYPE EstimateMotion(
1986        ID3D12VideoMotionEstimator *motion_estimator,
1987        const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *output_arguments,
1988        const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *input_arguments) = 0;
1989
1990    virtual void STDMETHODCALLTYPE ResolveMotionVectorHeap(
1991        const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *output_arguments,
1992        const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *input_arguments) = 0;
1993
1994    virtual void STDMETHODCALLTYPE WriteBufferImmediate(
1995        UINT count,
1996        const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *params,
1997        const D3D12_WRITEBUFFERIMMEDIATE_MODE *modes) = 0;
1998
1999    virtual void STDMETHODCALLTYPE SetProtectedResourceSession(
2000        ID3D12ProtectedResourceSession *protected_resource_session) = 0;
2001
2002};
2003#ifdef __CRT_UUID_DECL
2004__CRT_UUID_DECL(ID3D12VideoEncodeCommandList, 0x8455293a, 0x0cbd, 0x4831, 0x9b,0x39, 0xfb,0xdb,0xab,0x72,0x47,0x23)
2005#endif
2006#else
2007typedef struct ID3D12VideoEncodeCommandListVtbl {
2008    BEGIN_INTERFACE
2009
2010    /*** IUnknown methods ***/
2011    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2012        ID3D12VideoEncodeCommandList *This,
2013        REFIID riid,
2014        void **ppvObject);
2015
2016    ULONG (STDMETHODCALLTYPE *AddRef)(
2017        ID3D12VideoEncodeCommandList *This);
2018
2019    ULONG (STDMETHODCALLTYPE *Release)(
2020        ID3D12VideoEncodeCommandList *This);
2021
2022    /*** ID3D12Object methods ***/
2023    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
2024        ID3D12VideoEncodeCommandList *This,
2025        REFGUID guid,
2026        UINT *data_size,
2027        void *data);
2028
2029    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
2030        ID3D12VideoEncodeCommandList *This,
2031        REFGUID guid,
2032        UINT data_size,
2033        const void *data);
2034
2035    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
2036        ID3D12VideoEncodeCommandList *This,
2037        REFGUID guid,
2038        const IUnknown *data);
2039
2040    HRESULT (STDMETHODCALLTYPE *SetName)(
2041        ID3D12VideoEncodeCommandList *This,
2042        const WCHAR *name);
2043
2044    /*** ID3D12DeviceChild methods ***/
2045    HRESULT (STDMETHODCALLTYPE *GetDevice)(
2046        ID3D12VideoEncodeCommandList *This,
2047        REFIID riid,
2048        void **device);
2049
2050    /*** ID3D12CommandList methods ***/
2051    D3D12_COMMAND_LIST_TYPE (STDMETHODCALLTYPE *GetType)(
2052        ID3D12VideoEncodeCommandList *This);
2053
2054    /*** ID3D12VideoEncodeCommandList methods ***/
2055    HRESULT (STDMETHODCALLTYPE *Close)(
2056        ID3D12VideoEncodeCommandList *This);
2057
2058    HRESULT (STDMETHODCALLTYPE *Reset)(
2059        ID3D12VideoEncodeCommandList *This,
2060        ID3D12CommandAllocator *allocator);
2061
2062    void (STDMETHODCALLTYPE *ClearState)(
2063        ID3D12VideoEncodeCommandList *This);
2064
2065    void (STDMETHODCALLTYPE *ResourceBarrier)(
2066        ID3D12VideoEncodeCommandList *This,
2067        UINT barriers_count,
2068        const D3D12_RESOURCE_BARRIER *barriers);
2069
2070    void (STDMETHODCALLTYPE *DiscardResource)(
2071        ID3D12VideoEncodeCommandList *This,
2072        ID3D12Resource *resource,
2073        const D3D12_DISCARD_REGION *region);
2074
2075    void (STDMETHODCALLTYPE *BeginQuery)(
2076        ID3D12VideoEncodeCommandList *This,
2077        ID3D12QueryHeap *query_heap,
2078        D3D12_QUERY_TYPE type,
2079        UINT index);
2080
2081    void (STDMETHODCALLTYPE *EndQuery)(
2082        ID3D12VideoEncodeCommandList *This,
2083        ID3D12QueryHeap *query_heap,
2084        D3D12_QUERY_TYPE type,
2085        UINT index);
2086
2087    void (STDMETHODCALLTYPE *ResolveQueryData)(
2088        ID3D12VideoEncodeCommandList *This,
2089        ID3D12QueryHeap *query_heap,
2090        D3D12_QUERY_TYPE type,
2091        UINT start_index,
2092        UINT queries_count,
2093        ID3D12Resource *destination_buffer,
2094        UINT64 aligned_destination_buffer_offset);
2095
2096    void (STDMETHODCALLTYPE *SetPredication)(
2097        ID3D12VideoEncodeCommandList *This,
2098        ID3D12Resource *buffer,
2099        UINT64 aligned_buffer_offset,
2100        D3D12_PREDICATION_OP operation);
2101
2102    void (STDMETHODCALLTYPE *SetMarker)(
2103        ID3D12VideoEncodeCommandList *This,
2104        UINT metadata,
2105        const void *data,
2106        UINT size);
2107
2108    void (STDMETHODCALLTYPE *BeginEvent)(
2109        ID3D12VideoEncodeCommandList *This,
2110        UINT metadata,
2111        const void *data,
2112        UINT size);
2113
2114    void (STDMETHODCALLTYPE *EndEvent)(
2115        ID3D12VideoEncodeCommandList *This);
2116
2117    void (STDMETHODCALLTYPE *EstimateMotion)(
2118        ID3D12VideoEncodeCommandList *This,
2119        ID3D12VideoMotionEstimator *motion_estimator,
2120        const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *output_arguments,
2121        const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *input_arguments);
2122
2123    void (STDMETHODCALLTYPE *ResolveMotionVectorHeap)(
2124        ID3D12VideoEncodeCommandList *This,
2125        const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *output_arguments,
2126        const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *input_arguments);
2127
2128    void (STDMETHODCALLTYPE *WriteBufferImmediate)(
2129        ID3D12VideoEncodeCommandList *This,
2130        UINT count,
2131        const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *params,
2132        const D3D12_WRITEBUFFERIMMEDIATE_MODE *modes);
2133
2134    void (STDMETHODCALLTYPE *SetProtectedResourceSession)(
2135        ID3D12VideoEncodeCommandList *This,
2136        ID3D12ProtectedResourceSession *protected_resource_session);
2137
2138    END_INTERFACE
2139} ID3D12VideoEncodeCommandListVtbl;
2140
2141interface ID3D12VideoEncodeCommandList {
2142    CONST_VTBL ID3D12VideoEncodeCommandListVtbl* lpVtbl;
2143};
2144
2145#ifdef COBJMACROS
2146#ifndef WIDL_C_INLINE_WRAPPERS
2147/*** IUnknown methods ***/
2148#define ID3D12VideoEncodeCommandList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
2149#define ID3D12VideoEncodeCommandList_AddRef(This) (This)->lpVtbl->AddRef(This)
2150#define ID3D12VideoEncodeCommandList_Release(This) (This)->lpVtbl->Release(This)
2151/*** ID3D12Object methods ***/
2152#define ID3D12VideoEncodeCommandList_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
2153#define ID3D12VideoEncodeCommandList_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
2154#define ID3D12VideoEncodeCommandList_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
2155#define ID3D12VideoEncodeCommandList_SetName(This,name) (This)->lpVtbl->SetName(This,name)
2156/*** ID3D12DeviceChild methods ***/
2157#define ID3D12VideoEncodeCommandList_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
2158/*** ID3D12CommandList methods ***/
2159#define ID3D12VideoEncodeCommandList_GetType(This) (This)->lpVtbl->GetType(This)
2160/*** ID3D12VideoEncodeCommandList methods ***/
2161#define ID3D12VideoEncodeCommandList_Close(This) (This)->lpVtbl->Close(This)
2162#define ID3D12VideoEncodeCommandList_Reset(This,allocator) (This)->lpVtbl->Reset(This,allocator)
2163#define ID3D12VideoEncodeCommandList_ClearState(This) (This)->lpVtbl->ClearState(This)
2164#define ID3D12VideoEncodeCommandList_ResourceBarrier(This,barriers_count,barriers) (This)->lpVtbl->ResourceBarrier(This,barriers_count,barriers)
2165#define ID3D12VideoEncodeCommandList_DiscardResource(This,resource,region) (This)->lpVtbl->DiscardResource(This,resource,region)
2166#define ID3D12VideoEncodeCommandList_BeginQuery(This,query_heap,type,index) (This)->lpVtbl->BeginQuery(This,query_heap,type,index)
2167#define ID3D12VideoEncodeCommandList_EndQuery(This,query_heap,type,index) (This)->lpVtbl->EndQuery(This,query_heap,type,index)
2168#define ID3D12VideoEncodeCommandList_ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset) (This)->lpVtbl->ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset)
2169#define ID3D12VideoEncodeCommandList_SetPredication(This,buffer,aligned_buffer_offset,operation) (This)->lpVtbl->SetPredication(This,buffer,aligned_buffer_offset,operation)
2170#define ID3D12VideoEncodeCommandList_SetMarker(This,metadata,data,size) (This)->lpVtbl->SetMarker(This,metadata,data,size)
2171#define ID3D12VideoEncodeCommandList_BeginEvent(This,metadata,data,size) (This)->lpVtbl->BeginEvent(This,metadata,data,size)
2172#define ID3D12VideoEncodeCommandList_EndEvent(This) (This)->lpVtbl->EndEvent(This)
2173#define ID3D12VideoEncodeCommandList_EstimateMotion(This,motion_estimator,output_arguments,input_arguments) (This)->lpVtbl->EstimateMotion(This,motion_estimator,output_arguments,input_arguments)
2174#define ID3D12VideoEncodeCommandList_ResolveMotionVectorHeap(This,output_arguments,input_arguments) (This)->lpVtbl->ResolveMotionVectorHeap(This,output_arguments,input_arguments)
2175#define ID3D12VideoEncodeCommandList_WriteBufferImmediate(This,count,params,modes) (This)->lpVtbl->WriteBufferImmediate(This,count,params,modes)
2176#define ID3D12VideoEncodeCommandList_SetProtectedResourceSession(This,protected_resource_session) (This)->lpVtbl->SetProtectedResourceSession(This,protected_resource_session)
2177#else
2178/*** IUnknown methods ***/
2179static inline HRESULT ID3D12VideoEncodeCommandList_QueryInterface(ID3D12VideoEncodeCommandList* This,REFIID riid,void **ppvObject) {
2180    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
2181}
2182static inline ULONG ID3D12VideoEncodeCommandList_AddRef(ID3D12VideoEncodeCommandList* This) {
2183    return This->lpVtbl->AddRef(This);
2184}
2185static inline ULONG ID3D12VideoEncodeCommandList_Release(ID3D12VideoEncodeCommandList* This) {
2186    return This->lpVtbl->Release(This);
2187}
2188/*** ID3D12Object methods ***/
2189static inline HRESULT ID3D12VideoEncodeCommandList_GetPrivateData(ID3D12VideoEncodeCommandList* This,REFGUID guid,UINT *data_size,void *data) {
2190    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
2191}
2192static inline HRESULT ID3D12VideoEncodeCommandList_SetPrivateData(ID3D12VideoEncodeCommandList* This,REFGUID guid,UINT data_size,const void *data) {
2193    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
2194}
2195static inline HRESULT ID3D12VideoEncodeCommandList_SetPrivateDataInterface(ID3D12VideoEncodeCommandList* This,REFGUID guid,const IUnknown *data) {
2196    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
2197}
2198static inline HRESULT ID3D12VideoEncodeCommandList_SetName(ID3D12VideoEncodeCommandList* This,const WCHAR *name) {
2199    return This->lpVtbl->SetName(This,name);
2200}
2201/*** ID3D12DeviceChild methods ***/
2202static inline HRESULT ID3D12VideoEncodeCommandList_GetDevice(ID3D12VideoEncodeCommandList* This,REFIID riid,void **device) {
2203    return This->lpVtbl->GetDevice(This,riid,device);
2204}
2205/*** ID3D12CommandList methods ***/
2206static inline D3D12_COMMAND_LIST_TYPE ID3D12VideoEncodeCommandList_GetType(ID3D12VideoEncodeCommandList* This) {
2207    return This->lpVtbl->GetType(This);
2208}
2209/*** ID3D12VideoEncodeCommandList methods ***/
2210static inline HRESULT ID3D12VideoEncodeCommandList_Close(ID3D12VideoEncodeCommandList* This) {
2211    return This->lpVtbl->Close(This);
2212}
2213static inline HRESULT ID3D12VideoEncodeCommandList_Reset(ID3D12VideoEncodeCommandList* This,ID3D12CommandAllocator *allocator) {
2214    return This->lpVtbl->Reset(This,allocator);
2215}
2216static inline void ID3D12VideoEncodeCommandList_ClearState(ID3D12VideoEncodeCommandList* This) {
2217    This->lpVtbl->ClearState(This);
2218}
2219static inline void ID3D12VideoEncodeCommandList_ResourceBarrier(ID3D12VideoEncodeCommandList* This,UINT barriers_count,const D3D12_RESOURCE_BARRIER *barriers) {
2220    This->lpVtbl->ResourceBarrier(This,barriers_count,barriers);
2221}
2222static inline void ID3D12VideoEncodeCommandList_DiscardResource(ID3D12VideoEncodeCommandList* This,ID3D12Resource *resource,const D3D12_DISCARD_REGION *region) {
2223    This->lpVtbl->DiscardResource(This,resource,region);
2224}
2225static inline void ID3D12VideoEncodeCommandList_BeginQuery(ID3D12VideoEncodeCommandList* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT index) {
2226    This->lpVtbl->BeginQuery(This,query_heap,type,index);
2227}
2228static inline void ID3D12VideoEncodeCommandList_EndQuery(ID3D12VideoEncodeCommandList* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT index) {
2229    This->lpVtbl->EndQuery(This,query_heap,type,index);
2230}
2231static inline void ID3D12VideoEncodeCommandList_ResolveQueryData(ID3D12VideoEncodeCommandList* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT start_index,UINT queries_count,ID3D12Resource *destination_buffer,UINT64 aligned_destination_buffer_offset) {
2232    This->lpVtbl->ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset);
2233}
2234static inline void ID3D12VideoEncodeCommandList_SetPredication(ID3D12VideoEncodeCommandList* This,ID3D12Resource *buffer,UINT64 aligned_buffer_offset,D3D12_PREDICATION_OP operation) {
2235    This->lpVtbl->SetPredication(This,buffer,aligned_buffer_offset,operation);
2236}
2237static inline void ID3D12VideoEncodeCommandList_SetMarker(ID3D12VideoEncodeCommandList* This,UINT metadata,const void *data,UINT size) {
2238    This->lpVtbl->SetMarker(This,metadata,data,size);
2239}
2240static inline void ID3D12VideoEncodeCommandList_BeginEvent(ID3D12VideoEncodeCommandList* This,UINT metadata,const void *data,UINT size) {
2241    This->lpVtbl->BeginEvent(This,metadata,data,size);
2242}
2243static inline void ID3D12VideoEncodeCommandList_EndEvent(ID3D12VideoEncodeCommandList* This) {
2244    This->lpVtbl->EndEvent(This);
2245}
2246static inline void ID3D12VideoEncodeCommandList_EstimateMotion(ID3D12VideoEncodeCommandList* This,ID3D12VideoMotionEstimator *motion_estimator,const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *output_arguments,const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *input_arguments) {
2247    This->lpVtbl->EstimateMotion(This,motion_estimator,output_arguments,input_arguments);
2248}
2249static inline void ID3D12VideoEncodeCommandList_ResolveMotionVectorHeap(ID3D12VideoEncodeCommandList* This,const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *output_arguments,const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *input_arguments) {
2250    This->lpVtbl->ResolveMotionVectorHeap(This,output_arguments,input_arguments);
2251}
2252static inline void ID3D12VideoEncodeCommandList_WriteBufferImmediate(ID3D12VideoEncodeCommandList* This,UINT count,const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *params,const D3D12_WRITEBUFFERIMMEDIATE_MODE *modes) {
2253    This->lpVtbl->WriteBufferImmediate(This,count,params,modes);
2254}
2255static inline void ID3D12VideoEncodeCommandList_SetProtectedResourceSession(ID3D12VideoEncodeCommandList* This,ID3D12ProtectedResourceSession *protected_resource_session) {
2256    This->lpVtbl->SetProtectedResourceSession(This,protected_resource_session);
2257}
2258#endif
2259#endif
2260
2261#endif
2262
2263
2264#endif  /* __ID3D12VideoEncodeCommandList_INTERFACE_DEFINED__ */
2265
2266typedef struct D3D12_VIDEO_EXTENSION_COMMAND_DESC {
2267    UINT NodeMask;
2268    GUID CommandId;
2269} D3D12_VIDEO_EXTENSION_COMMAND_DESC;
2270/*****************************************************************************
2271 * ID3D12VideoExtensionCommand interface
2272 */
2273#ifndef __ID3D12VideoExtensionCommand_INTERFACE_DEFINED__
2274#define __ID3D12VideoExtensionCommand_INTERFACE_DEFINED__
2275
2276DEFINE_GUID(IID_ID3D12VideoExtensionCommand, 0x554e41e8, 0xae8e, 0x4a8c, 0xb7,0xd2, 0x5b,0x4f,0x27,0x4a,0x30,0xe4);
2277#if defined(__cplusplus) && !defined(CINTERFACE)
2278MIDL_INTERFACE("554e41e8-ae8e-4a8c-b7d2-5b4f274a30e4")
2279ID3D12VideoExtensionCommand : public ID3D12Pageable
2280{
2281#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
2282    virtual D3D12_VIDEO_EXTENSION_COMMAND_DESC* STDMETHODCALLTYPE GetDesc(
2283        D3D12_VIDEO_EXTENSION_COMMAND_DESC *__ret) = 0;
2284    D3D12_VIDEO_EXTENSION_COMMAND_DESC STDMETHODCALLTYPE GetDesc(
2285        )
2286    {
2287        D3D12_VIDEO_EXTENSION_COMMAND_DESC __ret;
2288        return *GetDesc(&__ret);
2289    }
2290#else
2291    virtual D3D12_VIDEO_EXTENSION_COMMAND_DESC STDMETHODCALLTYPE GetDesc(
2292        ) = 0;
2293#endif
2294
2295    virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession(
2296        REFIID riid,
2297        void **protected_session) = 0;
2298
2299};
2300#ifdef __CRT_UUID_DECL
2301__CRT_UUID_DECL(ID3D12VideoExtensionCommand, 0x554e41e8, 0xae8e, 0x4a8c, 0xb7,0xd2, 0x5b,0x4f,0x27,0x4a,0x30,0xe4)
2302#endif
2303#else
2304typedef struct ID3D12VideoExtensionCommandVtbl {
2305    BEGIN_INTERFACE
2306
2307    /*** IUnknown methods ***/
2308    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2309        ID3D12VideoExtensionCommand *This,
2310        REFIID riid,
2311        void **ppvObject);
2312
2313    ULONG (STDMETHODCALLTYPE *AddRef)(
2314        ID3D12VideoExtensionCommand *This);
2315
2316    ULONG (STDMETHODCALLTYPE *Release)(
2317        ID3D12VideoExtensionCommand *This);
2318
2319    /*** ID3D12Object methods ***/
2320    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
2321        ID3D12VideoExtensionCommand *This,
2322        REFGUID guid,
2323        UINT *data_size,
2324        void *data);
2325
2326    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
2327        ID3D12VideoExtensionCommand *This,
2328        REFGUID guid,
2329        UINT data_size,
2330        const void *data);
2331
2332    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
2333        ID3D12VideoExtensionCommand *This,
2334        REFGUID guid,
2335        const IUnknown *data);
2336
2337    HRESULT (STDMETHODCALLTYPE *SetName)(
2338        ID3D12VideoExtensionCommand *This,
2339        const WCHAR *name);
2340
2341    /*** ID3D12DeviceChild methods ***/
2342    HRESULT (STDMETHODCALLTYPE *GetDevice)(
2343        ID3D12VideoExtensionCommand *This,
2344        REFIID riid,
2345        void **device);
2346
2347    /*** ID3D12VideoExtensionCommand methods ***/
2348    D3D12_VIDEO_EXTENSION_COMMAND_DESC * (STDMETHODCALLTYPE *GetDesc)(
2349        ID3D12VideoExtensionCommand *This,
2350        D3D12_VIDEO_EXTENSION_COMMAND_DESC *__ret);
2351
2352    HRESULT (STDMETHODCALLTYPE *GetProtectedResourceSession)(
2353        ID3D12VideoExtensionCommand *This,
2354        REFIID riid,
2355        void **protected_session);
2356
2357    END_INTERFACE
2358} ID3D12VideoExtensionCommandVtbl;
2359
2360interface ID3D12VideoExtensionCommand {
2361    CONST_VTBL ID3D12VideoExtensionCommandVtbl* lpVtbl;
2362};
2363
2364#ifdef COBJMACROS
2365#ifndef WIDL_C_INLINE_WRAPPERS
2366/*** IUnknown methods ***/
2367#define ID3D12VideoExtensionCommand_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
2368#define ID3D12VideoExtensionCommand_AddRef(This) (This)->lpVtbl->AddRef(This)
2369#define ID3D12VideoExtensionCommand_Release(This) (This)->lpVtbl->Release(This)
2370/*** ID3D12Object methods ***/
2371#define ID3D12VideoExtensionCommand_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
2372#define ID3D12VideoExtensionCommand_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
2373#define ID3D12VideoExtensionCommand_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
2374#define ID3D12VideoExtensionCommand_SetName(This,name) (This)->lpVtbl->SetName(This,name)
2375/*** ID3D12DeviceChild methods ***/
2376#define ID3D12VideoExtensionCommand_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
2377/*** ID3D12VideoExtensionCommand methods ***/
2378#define ID3D12VideoExtensionCommand_GetDesc(This) ID3D12VideoExtensionCommand_GetDesc_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
2379#define ID3D12VideoExtensionCommand_GetProtectedResourceSession(This,riid,protected_session) (This)->lpVtbl->GetProtectedResourceSession(This,riid,protected_session)
2380#else
2381/*** IUnknown methods ***/
2382static inline HRESULT ID3D12VideoExtensionCommand_QueryInterface(ID3D12VideoExtensionCommand* This,REFIID riid,void **ppvObject) {
2383    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
2384}
2385static inline ULONG ID3D12VideoExtensionCommand_AddRef(ID3D12VideoExtensionCommand* This) {
2386    return This->lpVtbl->AddRef(This);
2387}
2388static inline ULONG ID3D12VideoExtensionCommand_Release(ID3D12VideoExtensionCommand* This) {
2389    return This->lpVtbl->Release(This);
2390}
2391/*** ID3D12Object methods ***/
2392static inline HRESULT ID3D12VideoExtensionCommand_GetPrivateData(ID3D12VideoExtensionCommand* This,REFGUID guid,UINT *data_size,void *data) {
2393    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
2394}
2395static inline HRESULT ID3D12VideoExtensionCommand_SetPrivateData(ID3D12VideoExtensionCommand* This,REFGUID guid,UINT data_size,const void *data) {
2396    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
2397}
2398static inline HRESULT ID3D12VideoExtensionCommand_SetPrivateDataInterface(ID3D12VideoExtensionCommand* This,REFGUID guid,const IUnknown *data) {
2399    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
2400}
2401static inline HRESULT ID3D12VideoExtensionCommand_SetName(ID3D12VideoExtensionCommand* This,const WCHAR *name) {
2402    return This->lpVtbl->SetName(This,name);
2403}
2404/*** ID3D12DeviceChild methods ***/
2405static inline HRESULT ID3D12VideoExtensionCommand_GetDevice(ID3D12VideoExtensionCommand* This,REFIID riid,void **device) {
2406    return This->lpVtbl->GetDevice(This,riid,device);
2407}
2408/*** ID3D12VideoExtensionCommand methods ***/
2409static inline D3D12_VIDEO_EXTENSION_COMMAND_DESC ID3D12VideoExtensionCommand_GetDesc(ID3D12VideoExtensionCommand* This) {
2410    D3D12_VIDEO_EXTENSION_COMMAND_DESC __ret;
2411    return *This->lpVtbl->GetDesc(This,&__ret);
2412}
2413static inline HRESULT ID3D12VideoExtensionCommand_GetProtectedResourceSession(ID3D12VideoExtensionCommand* This,REFIID riid,void **protected_session) {
2414    return This->lpVtbl->GetProtectedResourceSession(This,riid,protected_session);
2415}
2416#endif
2417#endif
2418
2419#endif
2420
2421
2422#endif  /* __ID3D12VideoExtensionCommand_INTERFACE_DEFINED__ */
2423
2424/*****************************************************************************
2425 * ID3D12VideoDevice2 interface
2426 */
2427#ifndef __ID3D12VideoDevice2_INTERFACE_DEFINED__
2428#define __ID3D12VideoDevice2_INTERFACE_DEFINED__
2429
2430DEFINE_GUID(IID_ID3D12VideoDevice2, 0xf019ac49, 0xf838, 0x4a95, 0x9b,0x17, 0x57,0x94,0x37,0xc8,0xf5,0x13);
2431#if defined(__cplusplus) && !defined(CINTERFACE)
2432MIDL_INTERFACE("f019ac49-f838-4a95-9b17-579437c8f513")
2433ID3D12VideoDevice2 : public ID3D12VideoDevice1
2434{
2435    virtual HRESULT STDMETHODCALLTYPE CreateVideoDecoder1(
2436        const D3D12_VIDEO_DECODER_DESC *desc,
2437        ID3D12ProtectedResourceSession *protected_resource_session,
2438        REFIID riid,
2439        void **video_decoder) = 0;
2440
2441    virtual HRESULT STDMETHODCALLTYPE CreateVideoDecoderHeap1(
2442        const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,
2443        ID3D12ProtectedResourceSession *protected_resource_session,
2444        REFIID riid,
2445        void **video_decoder_heap) = 0;
2446
2447    virtual HRESULT STDMETHODCALLTYPE CreateVideoProcessor1(
2448        UINT node_mask,
2449        const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,
2450        UINT input_stream_descs_count,
2451        const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,
2452        ID3D12ProtectedResourceSession *protected_resource_session,
2453        REFIID riid,
2454        void **video_processor) = 0;
2455
2456    virtual HRESULT STDMETHODCALLTYPE CreateVideoExtensionCommand(
2457        const D3D12_VIDEO_EXTENSION_COMMAND_DESC *desc,
2458        const void *creation_parameters,
2459        SIZE_T creation_parameters_data_size_in_bytes,
2460        ID3D12ProtectedResourceSession *protected_resource_session,
2461        REFIID riid,
2462        void **video_extension_command) = 0;
2463
2464    virtual HRESULT STDMETHODCALLTYPE ExecuteExtensionCommand(
2465        ID3D12VideoExtensionCommand *extension_command,
2466        const void *execution_parameters,
2467        SIZE_T execution_parameters_size_in_bytes,
2468        void *output_data,
2469        SIZE_T output_data_size_in_bytes) = 0;
2470
2471};
2472#ifdef __CRT_UUID_DECL
2473__CRT_UUID_DECL(ID3D12VideoDevice2, 0xf019ac49, 0xf838, 0x4a95, 0x9b,0x17, 0x57,0x94,0x37,0xc8,0xf5,0x13)
2474#endif
2475#else
2476typedef struct ID3D12VideoDevice2Vtbl {
2477    BEGIN_INTERFACE
2478
2479    /*** IUnknown methods ***/
2480    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2481        ID3D12VideoDevice2 *This,
2482        REFIID riid,
2483        void **ppvObject);
2484
2485    ULONG (STDMETHODCALLTYPE *AddRef)(
2486        ID3D12VideoDevice2 *This);
2487
2488    ULONG (STDMETHODCALLTYPE *Release)(
2489        ID3D12VideoDevice2 *This);
2490
2491    /*** ID3D12VideoDevice methods ***/
2492    HRESULT (STDMETHODCALLTYPE *CheckFeatureSupport)(
2493        ID3D12VideoDevice2 *This,
2494        D3D12_FEATURE_VIDEO feature_video,
2495        void *feature_support_data,
2496        UINT feature_support_data_size);
2497
2498    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoder)(
2499        ID3D12VideoDevice2 *This,
2500        const D3D12_VIDEO_DECODER_DESC *desc,
2501        REFIID riid,
2502        void **video_decoder);
2503
2504    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoderHeap)(
2505        ID3D12VideoDevice2 *This,
2506        const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,
2507        REFIID riid,
2508        void **video_decoder_heap);
2509
2510    HRESULT (STDMETHODCALLTYPE *CreateVideoProcessor)(
2511        ID3D12VideoDevice2 *This,
2512        UINT node_mask,
2513        const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,
2514        UINT input_stream_descs_count,
2515        const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,
2516        REFIID riid,
2517        void **video_processor);
2518
2519    /*** ID3D12VideoDevice1 methods ***/
2520    HRESULT (STDMETHODCALLTYPE *CreateVideoMotionEstimator)(
2521        ID3D12VideoDevice2 *This,
2522        const D3D12_VIDEO_MOTION_ESTIMATOR_DESC *desc,
2523        ID3D12ProtectedResourceSession *protected_resource_session,
2524        REFIID riid,
2525        void **video_motion_estimator);
2526
2527    HRESULT (STDMETHODCALLTYPE *CreateVideoMotionVectorHeap)(
2528        ID3D12VideoDevice2 *This,
2529        const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *desc,
2530        ID3D12ProtectedResourceSession *protected_resource_session,
2531        REFIID riid,
2532        void **video_motion_vector_heap);
2533
2534    /*** ID3D12VideoDevice2 methods ***/
2535    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoder1)(
2536        ID3D12VideoDevice2 *This,
2537        const D3D12_VIDEO_DECODER_DESC *desc,
2538        ID3D12ProtectedResourceSession *protected_resource_session,
2539        REFIID riid,
2540        void **video_decoder);
2541
2542    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoderHeap1)(
2543        ID3D12VideoDevice2 *This,
2544        const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,
2545        ID3D12ProtectedResourceSession *protected_resource_session,
2546        REFIID riid,
2547        void **video_decoder_heap);
2548
2549    HRESULT (STDMETHODCALLTYPE *CreateVideoProcessor1)(
2550        ID3D12VideoDevice2 *This,
2551        UINT node_mask,
2552        const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,
2553        UINT input_stream_descs_count,
2554        const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,
2555        ID3D12ProtectedResourceSession *protected_resource_session,
2556        REFIID riid,
2557        void **video_processor);
2558
2559    HRESULT (STDMETHODCALLTYPE *CreateVideoExtensionCommand)(
2560        ID3D12VideoDevice2 *This,
2561        const D3D12_VIDEO_EXTENSION_COMMAND_DESC *desc,
2562        const void *creation_parameters,
2563        SIZE_T creation_parameters_data_size_in_bytes,
2564        ID3D12ProtectedResourceSession *protected_resource_session,
2565        REFIID riid,
2566        void **video_extension_command);
2567
2568    HRESULT (STDMETHODCALLTYPE *ExecuteExtensionCommand)(
2569        ID3D12VideoDevice2 *This,
2570        ID3D12VideoExtensionCommand *extension_command,
2571        const void *execution_parameters,
2572        SIZE_T execution_parameters_size_in_bytes,
2573        void *output_data,
2574        SIZE_T output_data_size_in_bytes);
2575
2576    END_INTERFACE
2577} ID3D12VideoDevice2Vtbl;
2578
2579interface ID3D12VideoDevice2 {
2580    CONST_VTBL ID3D12VideoDevice2Vtbl* lpVtbl;
2581};
2582
2583#ifdef COBJMACROS
2584#ifndef WIDL_C_INLINE_WRAPPERS
2585/*** IUnknown methods ***/
2586#define ID3D12VideoDevice2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
2587#define ID3D12VideoDevice2_AddRef(This) (This)->lpVtbl->AddRef(This)
2588#define ID3D12VideoDevice2_Release(This) (This)->lpVtbl->Release(This)
2589/*** ID3D12VideoDevice methods ***/
2590#define ID3D12VideoDevice2_CheckFeatureSupport(This,feature_video,feature_support_data,feature_support_data_size) (This)->lpVtbl->CheckFeatureSupport(This,feature_video,feature_support_data,feature_support_data_size)
2591#define ID3D12VideoDevice2_CreateVideoDecoder(This,desc,riid,video_decoder) (This)->lpVtbl->CreateVideoDecoder(This,desc,riid,video_decoder)
2592#define ID3D12VideoDevice2_CreateVideoDecoderHeap(This,video_decoder_heap_desc,riid,video_decoder_heap) (This)->lpVtbl->CreateVideoDecoderHeap(This,video_decoder_heap_desc,riid,video_decoder_heap)
2593#define ID3D12VideoDevice2_CreateVideoProcessor(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,riid,video_processor) (This)->lpVtbl->CreateVideoProcessor(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,riid,video_processor)
2594/*** ID3D12VideoDevice1 methods ***/
2595#define ID3D12VideoDevice2_CreateVideoMotionEstimator(This,desc,protected_resource_session,riid,video_motion_estimator) (This)->lpVtbl->CreateVideoMotionEstimator(This,desc,protected_resource_session,riid,video_motion_estimator)
2596#define ID3D12VideoDevice2_CreateVideoMotionVectorHeap(This,desc,protected_resource_session,riid,video_motion_vector_heap) (This)->lpVtbl->CreateVideoMotionVectorHeap(This,desc,protected_resource_session,riid,video_motion_vector_heap)
2597/*** ID3D12VideoDevice2 methods ***/
2598#define ID3D12VideoDevice2_CreateVideoDecoder1(This,desc,protected_resource_session,riid,video_decoder) (This)->lpVtbl->CreateVideoDecoder1(This,desc,protected_resource_session,riid,video_decoder)
2599#define ID3D12VideoDevice2_CreateVideoDecoderHeap1(This,video_decoder_heap_desc,protected_resource_session,riid,video_decoder_heap) (This)->lpVtbl->CreateVideoDecoderHeap1(This,video_decoder_heap_desc,protected_resource_session,riid,video_decoder_heap)
2600#define ID3D12VideoDevice2_CreateVideoProcessor1(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,protected_resource_session,riid,video_processor) (This)->lpVtbl->CreateVideoProcessor1(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,protected_resource_session,riid,video_processor)
2601#define ID3D12VideoDevice2_CreateVideoExtensionCommand(This,desc,creation_parameters,creation_parameters_data_size_in_bytes,protected_resource_session,riid,video_extension_command) (This)->lpVtbl->CreateVideoExtensionCommand(This,desc,creation_parameters,creation_parameters_data_size_in_bytes,protected_resource_session,riid,video_extension_command)
2602#define ID3D12VideoDevice2_ExecuteExtensionCommand(This,extension_command,execution_parameters,execution_parameters_size_in_bytes,output_data,output_data_size_in_bytes) (This)->lpVtbl->ExecuteExtensionCommand(This,extension_command,execution_parameters,execution_parameters_size_in_bytes,output_data,output_data_size_in_bytes)
2603#else
2604/*** IUnknown methods ***/
2605static inline HRESULT ID3D12VideoDevice2_QueryInterface(ID3D12VideoDevice2* This,REFIID riid,void **ppvObject) {
2606    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
2607}
2608static inline ULONG ID3D12VideoDevice2_AddRef(ID3D12VideoDevice2* This) {
2609    return This->lpVtbl->AddRef(This);
2610}
2611static inline ULONG ID3D12VideoDevice2_Release(ID3D12VideoDevice2* This) {
2612    return This->lpVtbl->Release(This);
2613}
2614/*** ID3D12VideoDevice methods ***/
2615static inline HRESULT ID3D12VideoDevice2_CheckFeatureSupport(ID3D12VideoDevice2* This,D3D12_FEATURE_VIDEO feature_video,void *feature_support_data,UINT feature_support_data_size) {
2616    return This->lpVtbl->CheckFeatureSupport(This,feature_video,feature_support_data,feature_support_data_size);
2617}
2618static inline HRESULT ID3D12VideoDevice2_CreateVideoDecoder(ID3D12VideoDevice2* This,const D3D12_VIDEO_DECODER_DESC *desc,REFIID riid,void **video_decoder) {
2619    return This->lpVtbl->CreateVideoDecoder(This,desc,riid,video_decoder);
2620}
2621static inline HRESULT ID3D12VideoDevice2_CreateVideoDecoderHeap(ID3D12VideoDevice2* This,const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,REFIID riid,void **video_decoder_heap) {
2622    return This->lpVtbl->CreateVideoDecoderHeap(This,video_decoder_heap_desc,riid,video_decoder_heap);
2623}
2624static inline HRESULT ID3D12VideoDevice2_CreateVideoProcessor(ID3D12VideoDevice2* This,UINT node_mask,const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,UINT input_stream_descs_count,const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,REFIID riid,void **video_processor) {
2625    return This->lpVtbl->CreateVideoProcessor(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,riid,video_processor);
2626}
2627/*** ID3D12VideoDevice1 methods ***/
2628static inline HRESULT ID3D12VideoDevice2_CreateVideoMotionEstimator(ID3D12VideoDevice2* This,const D3D12_VIDEO_MOTION_ESTIMATOR_DESC *desc,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_motion_estimator) {
2629    return This->lpVtbl->CreateVideoMotionEstimator(This,desc,protected_resource_session,riid,video_motion_estimator);
2630}
2631static inline HRESULT ID3D12VideoDevice2_CreateVideoMotionVectorHeap(ID3D12VideoDevice2* This,const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *desc,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_motion_vector_heap) {
2632    return This->lpVtbl->CreateVideoMotionVectorHeap(This,desc,protected_resource_session,riid,video_motion_vector_heap);
2633}
2634/*** ID3D12VideoDevice2 methods ***/
2635static inline HRESULT ID3D12VideoDevice2_CreateVideoDecoder1(ID3D12VideoDevice2* This,const D3D12_VIDEO_DECODER_DESC *desc,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_decoder) {
2636    return This->lpVtbl->CreateVideoDecoder1(This,desc,protected_resource_session,riid,video_decoder);
2637}
2638static inline HRESULT ID3D12VideoDevice2_CreateVideoDecoderHeap1(ID3D12VideoDevice2* This,const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_decoder_heap) {
2639    return This->lpVtbl->CreateVideoDecoderHeap1(This,video_decoder_heap_desc,protected_resource_session,riid,video_decoder_heap);
2640}
2641static inline HRESULT ID3D12VideoDevice2_CreateVideoProcessor1(ID3D12VideoDevice2* This,UINT node_mask,const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,UINT input_stream_descs_count,const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_processor) {
2642    return This->lpVtbl->CreateVideoProcessor1(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,protected_resource_session,riid,video_processor);
2643}
2644static inline HRESULT ID3D12VideoDevice2_CreateVideoExtensionCommand(ID3D12VideoDevice2* This,const D3D12_VIDEO_EXTENSION_COMMAND_DESC *desc,const void *creation_parameters,SIZE_T creation_parameters_data_size_in_bytes,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_extension_command) {
2645    return This->lpVtbl->CreateVideoExtensionCommand(This,desc,creation_parameters,creation_parameters_data_size_in_bytes,protected_resource_session,riid,video_extension_command);
2646}
2647static inline HRESULT ID3D12VideoDevice2_ExecuteExtensionCommand(ID3D12VideoDevice2* This,ID3D12VideoExtensionCommand *extension_command,const void *execution_parameters,SIZE_T execution_parameters_size_in_bytes,void *output_data,SIZE_T output_data_size_in_bytes) {
2648    return This->lpVtbl->ExecuteExtensionCommand(This,extension_command,execution_parameters,execution_parameters_size_in_bytes,output_data,output_data_size_in_bytes);
2649}
2650#endif
2651#endif
2652
2653#endif
2654
2655
2656#endif  /* __ID3D12VideoDevice2_INTERFACE_DEFINED__ */
2657
2658/*****************************************************************************
2659 * ID3D12VideoEncodeCommandList1 interface
2660 */
2661#ifndef __ID3D12VideoEncodeCommandList1_INTERFACE_DEFINED__
2662#define __ID3D12VideoEncodeCommandList1_INTERFACE_DEFINED__
2663
2664DEFINE_GUID(IID_ID3D12VideoEncodeCommandList1, 0x94971eca, 0x2bdb, 0x4769, 0x88,0xcf, 0x36,0x75,0xea,0x75,0x7e,0xbc);
2665#if defined(__cplusplus) && !defined(CINTERFACE)
2666MIDL_INTERFACE("94971eca-2bdb-4769-88cf-3675ea757ebc")
2667ID3D12VideoEncodeCommandList1 : public ID3D12VideoEncodeCommandList
2668{
2669    virtual void STDMETHODCALLTYPE InitializeExtensionCommand(
2670        ID3D12VideoExtensionCommand *extension_command,
2671        const void *initialization_parameters,
2672        SIZE_T initialization_parameters_size_in_bytes) = 0;
2673
2674    virtual void STDMETHODCALLTYPE ExecuteExtensionCommand(
2675        ID3D12VideoExtensionCommand *extension_command,
2676        const void *execution_parameters,
2677        SIZE_T execution_parameters_size_in_bytes) = 0;
2678
2679};
2680#ifdef __CRT_UUID_DECL
2681__CRT_UUID_DECL(ID3D12VideoEncodeCommandList1, 0x94971eca, 0x2bdb, 0x4769, 0x88,0xcf, 0x36,0x75,0xea,0x75,0x7e,0xbc)
2682#endif
2683#else
2684typedef struct ID3D12VideoEncodeCommandList1Vtbl {
2685    BEGIN_INTERFACE
2686
2687    /*** IUnknown methods ***/
2688    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2689        ID3D12VideoEncodeCommandList1 *This,
2690        REFIID riid,
2691        void **ppvObject);
2692
2693    ULONG (STDMETHODCALLTYPE *AddRef)(
2694        ID3D12VideoEncodeCommandList1 *This);
2695
2696    ULONG (STDMETHODCALLTYPE *Release)(
2697        ID3D12VideoEncodeCommandList1 *This);
2698
2699    /*** ID3D12Object methods ***/
2700    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
2701        ID3D12VideoEncodeCommandList1 *This,
2702        REFGUID guid,
2703        UINT *data_size,
2704        void *data);
2705
2706    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
2707        ID3D12VideoEncodeCommandList1 *This,
2708        REFGUID guid,
2709        UINT data_size,
2710        const void *data);
2711
2712    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
2713        ID3D12VideoEncodeCommandList1 *This,
2714        REFGUID guid,
2715        const IUnknown *data);
2716
2717    HRESULT (STDMETHODCALLTYPE *SetName)(
2718        ID3D12VideoEncodeCommandList1 *This,
2719        const WCHAR *name);
2720
2721    /*** ID3D12DeviceChild methods ***/
2722    HRESULT (STDMETHODCALLTYPE *GetDevice)(
2723        ID3D12VideoEncodeCommandList1 *This,
2724        REFIID riid,
2725        void **device);
2726
2727    /*** ID3D12CommandList methods ***/
2728    D3D12_COMMAND_LIST_TYPE (STDMETHODCALLTYPE *GetType)(
2729        ID3D12VideoEncodeCommandList1 *This);
2730
2731    /*** ID3D12VideoEncodeCommandList methods ***/
2732    HRESULT (STDMETHODCALLTYPE *Close)(
2733        ID3D12VideoEncodeCommandList1 *This);
2734
2735    HRESULT (STDMETHODCALLTYPE *Reset)(
2736        ID3D12VideoEncodeCommandList1 *This,
2737        ID3D12CommandAllocator *allocator);
2738
2739    void (STDMETHODCALLTYPE *ClearState)(
2740        ID3D12VideoEncodeCommandList1 *This);
2741
2742    void (STDMETHODCALLTYPE *ResourceBarrier)(
2743        ID3D12VideoEncodeCommandList1 *This,
2744        UINT barriers_count,
2745        const D3D12_RESOURCE_BARRIER *barriers);
2746
2747    void (STDMETHODCALLTYPE *DiscardResource)(
2748        ID3D12VideoEncodeCommandList1 *This,
2749        ID3D12Resource *resource,
2750        const D3D12_DISCARD_REGION *region);
2751
2752    void (STDMETHODCALLTYPE *BeginQuery)(
2753        ID3D12VideoEncodeCommandList1 *This,
2754        ID3D12QueryHeap *query_heap,
2755        D3D12_QUERY_TYPE type,
2756        UINT index);
2757
2758    void (STDMETHODCALLTYPE *EndQuery)(
2759        ID3D12VideoEncodeCommandList1 *This,
2760        ID3D12QueryHeap *query_heap,
2761        D3D12_QUERY_TYPE type,
2762        UINT index);
2763
2764    void (STDMETHODCALLTYPE *ResolveQueryData)(
2765        ID3D12VideoEncodeCommandList1 *This,
2766        ID3D12QueryHeap *query_heap,
2767        D3D12_QUERY_TYPE type,
2768        UINT start_index,
2769        UINT queries_count,
2770        ID3D12Resource *destination_buffer,
2771        UINT64 aligned_destination_buffer_offset);
2772
2773    void (STDMETHODCALLTYPE *SetPredication)(
2774        ID3D12VideoEncodeCommandList1 *This,
2775        ID3D12Resource *buffer,
2776        UINT64 aligned_buffer_offset,
2777        D3D12_PREDICATION_OP operation);
2778
2779    void (STDMETHODCALLTYPE *SetMarker)(
2780        ID3D12VideoEncodeCommandList1 *This,
2781        UINT metadata,
2782        const void *data,
2783        UINT size);
2784
2785    void (STDMETHODCALLTYPE *BeginEvent)(
2786        ID3D12VideoEncodeCommandList1 *This,
2787        UINT metadata,
2788        const void *data,
2789        UINT size);
2790
2791    void (STDMETHODCALLTYPE *EndEvent)(
2792        ID3D12VideoEncodeCommandList1 *This);
2793
2794    void (STDMETHODCALLTYPE *EstimateMotion)(
2795        ID3D12VideoEncodeCommandList1 *This,
2796        ID3D12VideoMotionEstimator *motion_estimator,
2797        const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *output_arguments,
2798        const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *input_arguments);
2799
2800    void (STDMETHODCALLTYPE *ResolveMotionVectorHeap)(
2801        ID3D12VideoEncodeCommandList1 *This,
2802        const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *output_arguments,
2803        const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *input_arguments);
2804
2805    void (STDMETHODCALLTYPE *WriteBufferImmediate)(
2806        ID3D12VideoEncodeCommandList1 *This,
2807        UINT count,
2808        const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *params,
2809        const D3D12_WRITEBUFFERIMMEDIATE_MODE *modes);
2810
2811    void (STDMETHODCALLTYPE *SetProtectedResourceSession)(
2812        ID3D12VideoEncodeCommandList1 *This,
2813        ID3D12ProtectedResourceSession *protected_resource_session);
2814
2815    /*** ID3D12VideoEncodeCommandList1 methods ***/
2816    void (STDMETHODCALLTYPE *InitializeExtensionCommand)(
2817        ID3D12VideoEncodeCommandList1 *This,
2818        ID3D12VideoExtensionCommand *extension_command,
2819        const void *initialization_parameters,
2820        SIZE_T initialization_parameters_size_in_bytes);
2821
2822    void (STDMETHODCALLTYPE *ExecuteExtensionCommand)(
2823        ID3D12VideoEncodeCommandList1 *This,
2824        ID3D12VideoExtensionCommand *extension_command,
2825        const void *execution_parameters,
2826        SIZE_T execution_parameters_size_in_bytes);
2827
2828    END_INTERFACE
2829} ID3D12VideoEncodeCommandList1Vtbl;
2830
2831interface ID3D12VideoEncodeCommandList1 {
2832    CONST_VTBL ID3D12VideoEncodeCommandList1Vtbl* lpVtbl;
2833};
2834
2835#ifdef COBJMACROS
2836#ifndef WIDL_C_INLINE_WRAPPERS
2837/*** IUnknown methods ***/
2838#define ID3D12VideoEncodeCommandList1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
2839#define ID3D12VideoEncodeCommandList1_AddRef(This) (This)->lpVtbl->AddRef(This)
2840#define ID3D12VideoEncodeCommandList1_Release(This) (This)->lpVtbl->Release(This)
2841/*** ID3D12Object methods ***/
2842#define ID3D12VideoEncodeCommandList1_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
2843#define ID3D12VideoEncodeCommandList1_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
2844#define ID3D12VideoEncodeCommandList1_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
2845#define ID3D12VideoEncodeCommandList1_SetName(This,name) (This)->lpVtbl->SetName(This,name)
2846/*** ID3D12DeviceChild methods ***/
2847#define ID3D12VideoEncodeCommandList1_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
2848/*** ID3D12CommandList methods ***/
2849#define ID3D12VideoEncodeCommandList1_GetType(This) (This)->lpVtbl->GetType(This)
2850/*** ID3D12VideoEncodeCommandList methods ***/
2851#define ID3D12VideoEncodeCommandList1_Close(This) (This)->lpVtbl->Close(This)
2852#define ID3D12VideoEncodeCommandList1_Reset(This,allocator) (This)->lpVtbl->Reset(This,allocator)
2853#define ID3D12VideoEncodeCommandList1_ClearState(This) (This)->lpVtbl->ClearState(This)
2854#define ID3D12VideoEncodeCommandList1_ResourceBarrier(This,barriers_count,barriers) (This)->lpVtbl->ResourceBarrier(This,barriers_count,barriers)
2855#define ID3D12VideoEncodeCommandList1_DiscardResource(This,resource,region) (This)->lpVtbl->DiscardResource(This,resource,region)
2856#define ID3D12VideoEncodeCommandList1_BeginQuery(This,query_heap,type,index) (This)->lpVtbl->BeginQuery(This,query_heap,type,index)
2857#define ID3D12VideoEncodeCommandList1_EndQuery(This,query_heap,type,index) (This)->lpVtbl->EndQuery(This,query_heap,type,index)
2858#define ID3D12VideoEncodeCommandList1_ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset) (This)->lpVtbl->ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset)
2859#define ID3D12VideoEncodeCommandList1_SetPredication(This,buffer,aligned_buffer_offset,operation) (This)->lpVtbl->SetPredication(This,buffer,aligned_buffer_offset,operation)
2860#define ID3D12VideoEncodeCommandList1_SetMarker(This,metadata,data,size) (This)->lpVtbl->SetMarker(This,metadata,data,size)
2861#define ID3D12VideoEncodeCommandList1_BeginEvent(This,metadata,data,size) (This)->lpVtbl->BeginEvent(This,metadata,data,size)
2862#define ID3D12VideoEncodeCommandList1_EndEvent(This) (This)->lpVtbl->EndEvent(This)
2863#define ID3D12VideoEncodeCommandList1_EstimateMotion(This,motion_estimator,output_arguments,input_arguments) (This)->lpVtbl->EstimateMotion(This,motion_estimator,output_arguments,input_arguments)
2864#define ID3D12VideoEncodeCommandList1_ResolveMotionVectorHeap(This,output_arguments,input_arguments) (This)->lpVtbl->ResolveMotionVectorHeap(This,output_arguments,input_arguments)
2865#define ID3D12VideoEncodeCommandList1_WriteBufferImmediate(This,count,params,modes) (This)->lpVtbl->WriteBufferImmediate(This,count,params,modes)
2866#define ID3D12VideoEncodeCommandList1_SetProtectedResourceSession(This,protected_resource_session) (This)->lpVtbl->SetProtectedResourceSession(This,protected_resource_session)
2867/*** ID3D12VideoEncodeCommandList1 methods ***/
2868#define ID3D12VideoEncodeCommandList1_InitializeExtensionCommand(This,extension_command,initialization_parameters,initialization_parameters_size_in_bytes) (This)->lpVtbl->InitializeExtensionCommand(This,extension_command,initialization_parameters,initialization_parameters_size_in_bytes)
2869#define ID3D12VideoEncodeCommandList1_ExecuteExtensionCommand(This,extension_command,execution_parameters,execution_parameters_size_in_bytes) (This)->lpVtbl->ExecuteExtensionCommand(This,extension_command,execution_parameters,execution_parameters_size_in_bytes)
2870#else
2871/*** IUnknown methods ***/
2872static inline HRESULT ID3D12VideoEncodeCommandList1_QueryInterface(ID3D12VideoEncodeCommandList1* This,REFIID riid,void **ppvObject) {
2873    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
2874}
2875static inline ULONG ID3D12VideoEncodeCommandList1_AddRef(ID3D12VideoEncodeCommandList1* This) {
2876    return This->lpVtbl->AddRef(This);
2877}
2878static inline ULONG ID3D12VideoEncodeCommandList1_Release(ID3D12VideoEncodeCommandList1* This) {
2879    return This->lpVtbl->Release(This);
2880}
2881/*** ID3D12Object methods ***/
2882static inline HRESULT ID3D12VideoEncodeCommandList1_GetPrivateData(ID3D12VideoEncodeCommandList1* This,REFGUID guid,UINT *data_size,void *data) {
2883    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
2884}
2885static inline HRESULT ID3D12VideoEncodeCommandList1_SetPrivateData(ID3D12VideoEncodeCommandList1* This,REFGUID guid,UINT data_size,const void *data) {
2886    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
2887}
2888static inline HRESULT ID3D12VideoEncodeCommandList1_SetPrivateDataInterface(ID3D12VideoEncodeCommandList1* This,REFGUID guid,const IUnknown *data) {
2889    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
2890}
2891static inline HRESULT ID3D12VideoEncodeCommandList1_SetName(ID3D12VideoEncodeCommandList1* This,const WCHAR *name) {
2892    return This->lpVtbl->SetName(This,name);
2893}
2894/*** ID3D12DeviceChild methods ***/
2895static inline HRESULT ID3D12VideoEncodeCommandList1_GetDevice(ID3D12VideoEncodeCommandList1* This,REFIID riid,void **device) {
2896    return This->lpVtbl->GetDevice(This,riid,device);
2897}
2898/*** ID3D12CommandList methods ***/
2899static inline D3D12_COMMAND_LIST_TYPE ID3D12VideoEncodeCommandList1_GetType(ID3D12VideoEncodeCommandList1* This) {
2900    return This->lpVtbl->GetType(This);
2901}
2902/*** ID3D12VideoEncodeCommandList methods ***/
2903static inline HRESULT ID3D12VideoEncodeCommandList1_Close(ID3D12VideoEncodeCommandList1* This) {
2904    return This->lpVtbl->Close(This);
2905}
2906static inline HRESULT ID3D12VideoEncodeCommandList1_Reset(ID3D12VideoEncodeCommandList1* This,ID3D12CommandAllocator *allocator) {
2907    return This->lpVtbl->Reset(This,allocator);
2908}
2909static inline void ID3D12VideoEncodeCommandList1_ClearState(ID3D12VideoEncodeCommandList1* This) {
2910    This->lpVtbl->ClearState(This);
2911}
2912static inline void ID3D12VideoEncodeCommandList1_ResourceBarrier(ID3D12VideoEncodeCommandList1* This,UINT barriers_count,const D3D12_RESOURCE_BARRIER *barriers) {
2913    This->lpVtbl->ResourceBarrier(This,barriers_count,barriers);
2914}
2915static inline void ID3D12VideoEncodeCommandList1_DiscardResource(ID3D12VideoEncodeCommandList1* This,ID3D12Resource *resource,const D3D12_DISCARD_REGION *region) {
2916    This->lpVtbl->DiscardResource(This,resource,region);
2917}
2918static inline void ID3D12VideoEncodeCommandList1_BeginQuery(ID3D12VideoEncodeCommandList1* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT index) {
2919    This->lpVtbl->BeginQuery(This,query_heap,type,index);
2920}
2921static inline void ID3D12VideoEncodeCommandList1_EndQuery(ID3D12VideoEncodeCommandList1* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT index) {
2922    This->lpVtbl->EndQuery(This,query_heap,type,index);
2923}
2924static inline void ID3D12VideoEncodeCommandList1_ResolveQueryData(ID3D12VideoEncodeCommandList1* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT start_index,UINT queries_count,ID3D12Resource *destination_buffer,UINT64 aligned_destination_buffer_offset) {
2925    This->lpVtbl->ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset);
2926}
2927static inline void ID3D12VideoEncodeCommandList1_SetPredication(ID3D12VideoEncodeCommandList1* This,ID3D12Resource *buffer,UINT64 aligned_buffer_offset,D3D12_PREDICATION_OP operation) {
2928    This->lpVtbl->SetPredication(This,buffer,aligned_buffer_offset,operation);
2929}
2930static inline void ID3D12VideoEncodeCommandList1_SetMarker(ID3D12VideoEncodeCommandList1* This,UINT metadata,const void *data,UINT size) {
2931    This->lpVtbl->SetMarker(This,metadata,data,size);
2932}
2933static inline void ID3D12VideoEncodeCommandList1_BeginEvent(ID3D12VideoEncodeCommandList1* This,UINT metadata,const void *data,UINT size) {
2934    This->lpVtbl->BeginEvent(This,metadata,data,size);
2935}
2936static inline void ID3D12VideoEncodeCommandList1_EndEvent(ID3D12VideoEncodeCommandList1* This) {
2937    This->lpVtbl->EndEvent(This);
2938}
2939static inline void ID3D12VideoEncodeCommandList1_EstimateMotion(ID3D12VideoEncodeCommandList1* This,ID3D12VideoMotionEstimator *motion_estimator,const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *output_arguments,const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *input_arguments) {
2940    This->lpVtbl->EstimateMotion(This,motion_estimator,output_arguments,input_arguments);
2941}
2942static inline void ID3D12VideoEncodeCommandList1_ResolveMotionVectorHeap(ID3D12VideoEncodeCommandList1* This,const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *output_arguments,const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *input_arguments) {
2943    This->lpVtbl->ResolveMotionVectorHeap(This,output_arguments,input_arguments);
2944}
2945static inline void ID3D12VideoEncodeCommandList1_WriteBufferImmediate(ID3D12VideoEncodeCommandList1* This,UINT count,const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *params,const D3D12_WRITEBUFFERIMMEDIATE_MODE *modes) {
2946    This->lpVtbl->WriteBufferImmediate(This,count,params,modes);
2947}
2948static inline void ID3D12VideoEncodeCommandList1_SetProtectedResourceSession(ID3D12VideoEncodeCommandList1* This,ID3D12ProtectedResourceSession *protected_resource_session) {
2949    This->lpVtbl->SetProtectedResourceSession(This,protected_resource_session);
2950}
2951/*** ID3D12VideoEncodeCommandList1 methods ***/
2952static inline void ID3D12VideoEncodeCommandList1_InitializeExtensionCommand(ID3D12VideoEncodeCommandList1* This,ID3D12VideoExtensionCommand *extension_command,const void *initialization_parameters,SIZE_T initialization_parameters_size_in_bytes) {
2953    This->lpVtbl->InitializeExtensionCommand(This,extension_command,initialization_parameters,initialization_parameters_size_in_bytes);
2954}
2955static inline void ID3D12VideoEncodeCommandList1_ExecuteExtensionCommand(ID3D12VideoEncodeCommandList1* This,ID3D12VideoExtensionCommand *extension_command,const void *execution_parameters,SIZE_T execution_parameters_size_in_bytes) {
2956    This->lpVtbl->ExecuteExtensionCommand(This,extension_command,execution_parameters,execution_parameters_size_in_bytes);
2957}
2958#endif
2959#endif
2960
2961#endif
2962
2963
2964#endif  /* __ID3D12VideoEncodeCommandList1_INTERFACE_DEFINED__ */
2965
2966DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG2, 0xee27417f, 0x5e28, 0x4e65, 0xbe, 0xea, 0x1d, 0x26, 0xb5, 0x08, 0xad, 0xc9);
2967DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG1_AND_MPEG2, 0x86695f12, 0x340e, 0x4f04, 0x9f, 0xd3, 0x92, 0x53, 0xdd, 0x32, 0x74, 0x60);
2968DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264, 0x1b81be68, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);
2969DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_STEREO_PROGRESSIVE, 0xd79be8da, 0x0cf1, 0x4c81, 0xb8, 0x2a, 0x69, 0xa4, 0xe2, 0x36, 0xf4, 0x3d);
2970DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_STEREO, 0xf9aaccbb, 0xc2b6, 0x4cfc, 0x87, 0x79, 0x57, 0x07, 0xb1, 0x76, 0x05, 0x52);
2971DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_MULTIVIEW, 0x705b9d82, 0x76cf, 0x49d6, 0xb7, 0xe6, 0xac, 0x88, 0x72, 0xdb, 0x01, 0x3c);
2972DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VC1, 0x1b81beA3, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);
2973DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VC1_D2010, 0x1b81beA4, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);
2974DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG4PT2_SIMPLE, 0xefd64d74, 0xc9e8,0x41d7,0xa5,0xe9,0xe9,0xb0,0xe3,0x9f,0xa3,0x19);
2975DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG4PT2_ADVSIMPLE_NOGMC, 0xed418a9f, 0x010d, 0x4eda, 0x9a, 0xe3, 0x9a, 0x65, 0x35, 0x8d, 0x8d, 0x2e);
2976DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN, 0x5b11d51b, 0x2f4c, 0x4452, 0xbc, 0xc3, 0x09, 0xf2, 0xa1, 0x16, 0x0c, 0xc0);
2977DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10, 0x107af0e0, 0xef1a, 0x4d19, 0xab, 0xa8, 0x67, 0xa1, 0x63, 0x07, 0x3d, 0x13);
2978DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP9, 0x463707f8, 0xa1d0, 0x4585, 0x87, 0x6d, 0x83, 0xaa, 0x6d, 0x60, 0xb8, 0x9e);
2979DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP9_10BIT_PROFILE2, 0xa4c749ef, 0x6ecf, 0x48aa, 0x84, 0x48, 0x50, 0xa7, 0xa1, 0x16, 0x5f, 0xf7);
2980DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP8, 0x90b899ea, 0x3a62, 0x4705, 0x88, 0xb3, 0x8d, 0xf0, 0x4b, 0x27, 0x44, 0xe7);
2981DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE0, 0xb8be4ccb, 0xcf53, 0x46ba, 0x8d, 0x59, 0xd6, 0xb8, 0xa6, 0xda, 0x5d, 0x2a);
2982DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE1, 0x6936ff0f, 0x45b1, 0x4163, 0x9c, 0xc1, 0x64, 0x6e, 0xf6, 0x94, 0x61, 0x08);
2983DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE2, 0x0c5f2aa1, 0xe541, 0x4089, 0xbb, 0x7b, 0x98, 0x11, 0x0a, 0x19, 0xd7, 0xc8);
2984DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2, 0x17127009, 0xa00f, 0x4ce1, 0x99, 0x4e, 0xbf, 0x40, 0x81, 0xf6, 0xf3, 0xf0);
2985DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2_420, 0x2d80bed6, 0x9cac, 0x4835, 0x9e, 0x91, 0x32, 0x7b, 0xbc, 0x4f, 0x9e, 0xe8);
2986typedef enum D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE {
2987    D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_ABSOLUTE_QP_MAP = 0,
2988    D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_CQP = 1,
2989    D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_CBR = 2,
2990    D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_VBR = 3,
2991    D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_QVBR = 4
2992} D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE;
2993typedef enum D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS {
2994    D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_NONE = 0x0,
2995    D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_DELTA_QP = 0x1,
2996    D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_FRAME_ANALYSIS = 0x2,
2997    D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_QP_RANGE = 0x4,
2998    D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_INITIAL_QP = 0x8,
2999    D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_MAX_FRAME_SIZE = 0x10,
3000    D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_VBV_SIZES = 0x20
3001} D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS;
3002DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS);
3003typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP {
3004    UINT ConstantQP_FullIntracodedFrame;
3005    UINT ConstantQP_InterPredictedFrame_PrevRefOnly;
3006    UINT ConstantQP_InterPredictedFrame_BiDirectionalRef;
3007} D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP;
3008typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR {
3009    UINT InitialQP;
3010    UINT MinQP;
3011    UINT MaxQP;
3012    UINT64 MaxFrameBitSize;
3013    UINT64 TargetBitRate;
3014    UINT64 VBVCapacity;
3015    UINT64 InitialVBVFullness;
3016} D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR;
3017typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR {
3018    UINT InitialQP;
3019    UINT MinQP;
3020    UINT MaxQP;
3021    UINT64 MaxFrameBitSize;
3022    UINT64 TargetAvgBitRate;
3023    UINT64 PeakBitRate;
3024    UINT64 VBVCapacity;
3025    UINT64 InitialVBVFullness;
3026} D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR;
3027typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR {
3028    UINT InitialQP;
3029    UINT MinQP;
3030    UINT MaxQP;
3031    UINT64 MaxFrameBitSize;
3032    UINT64 TargetAvgBitRate;
3033    UINT64 PeakBitRate;
3034    UINT ConstantQualityTarget;
3035} D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR;
3036typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS {
3037    UINT DataSize;
3038    __C89_NAMELESS union {
3039        const D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP *pConfiguration_CQP;
3040        const D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR *pConfiguration_CBR;
3041        const D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR *pConfiguration_VBR;
3042        const D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR *pConfiguration_QVBR;
3043    } __C89_NAMELESSUNIONNAME;
3044} D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS;
3045typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL {
3046    D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE Mode;
3047    D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS Flags;
3048    D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS ConfigParams;
3049    DXGI_RATIONAL TargetFrameRate;
3050} D3D12_VIDEO_ENCODER_RATE_CONTROL;
3051typedef enum D3D12_VIDEO_ENCODER_CODEC {
3052    D3D12_VIDEO_ENCODER_CODEC_H264 = 0,
3053    D3D12_VIDEO_ENCODER_CODEC_HEVC = 1
3054} D3D12_VIDEO_ENCODER_CODEC;
3055typedef enum D3D12_VIDEO_ENCODER_PROFILE_H264 {
3056    D3D12_VIDEO_ENCODER_PROFILE_H264_MAIN = 0,
3057    D3D12_VIDEO_ENCODER_PROFILE_H264_HIGH = 1,
3058    D3D12_VIDEO_ENCODER_PROFILE_H264_HIGH_10 = 2
3059} D3D12_VIDEO_ENCODER_PROFILE_H264;
3060typedef enum D3D12_VIDEO_ENCODER_PROFILE_HEVC {
3061    D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN = 0,
3062    D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10 = 1
3063} D3D12_VIDEO_ENCODER_PROFILE_HEVC;
3064typedef struct D3D12_VIDEO_ENCODER_PROFILE_DESC {
3065    UINT DataSize;
3066    __C89_NAMELESS union {
3067        D3D12_VIDEO_ENCODER_PROFILE_H264 *pH264Profile;
3068        D3D12_VIDEO_ENCODER_PROFILE_HEVC *pHEVCProfile;
3069    } __C89_NAMELESSUNIONNAME;
3070} D3D12_VIDEO_ENCODER_PROFILE_DESC;
3071typedef enum D3D12_VIDEO_ENCODER_LEVELS_H264 {
3072    D3D12_VIDEO_ENCODER_LEVELS_H264_1 = 0,
3073    D3D12_VIDEO_ENCODER_LEVELS_H264_1b = 1,
3074    D3D12_VIDEO_ENCODER_LEVELS_H264_11 = 2,
3075    D3D12_VIDEO_ENCODER_LEVELS_H264_12 = 3,
3076    D3D12_VIDEO_ENCODER_LEVELS_H264_13 = 4,
3077    D3D12_VIDEO_ENCODER_LEVELS_H264_2 = 5,
3078    D3D12_VIDEO_ENCODER_LEVELS_H264_21 = 6,
3079    D3D12_VIDEO_ENCODER_LEVELS_H264_22 = 7,
3080    D3D12_VIDEO_ENCODER_LEVELS_H264_3 = 8,
3081    D3D12_VIDEO_ENCODER_LEVELS_H264_31 = 9,
3082    D3D12_VIDEO_ENCODER_LEVELS_H264_32 = 10,
3083    D3D12_VIDEO_ENCODER_LEVELS_H264_4 = 11,
3084    D3D12_VIDEO_ENCODER_LEVELS_H264_41 = 12,
3085    D3D12_VIDEO_ENCODER_LEVELS_H264_42 = 13,
3086    D3D12_VIDEO_ENCODER_LEVELS_H264_5 = 14,
3087    D3D12_VIDEO_ENCODER_LEVELS_H264_51 = 15,
3088    D3D12_VIDEO_ENCODER_LEVELS_H264_52 = 16,
3089    D3D12_VIDEO_ENCODER_LEVELS_H264_6 = 17,
3090    D3D12_VIDEO_ENCODER_LEVELS_H264_61 = 18,
3091    D3D12_VIDEO_ENCODER_LEVELS_H264_62 = 19
3092} D3D12_VIDEO_ENCODER_LEVELS_H264;
3093typedef enum D3D12_VIDEO_ENCODER_TIER_HEVC {
3094    D3D12_VIDEO_ENCODER_TIER_HEVC_MAIN = 0,
3095    D3D12_VIDEO_ENCODER_TIER_HEVC_HIGH = 1
3096} D3D12_VIDEO_ENCODER_TIER_HEVC;
3097typedef enum D3D12_VIDEO_ENCODER_LEVELS_HEVC {
3098    D3D12_VIDEO_ENCODER_LEVELS_HEVC_1 = 0,
3099    D3D12_VIDEO_ENCODER_LEVELS_HEVC_2 = 1,
3100    D3D12_VIDEO_ENCODER_LEVELS_HEVC_21 = 2,
3101    D3D12_VIDEO_ENCODER_LEVELS_HEVC_3 = 3,
3102    D3D12_VIDEO_ENCODER_LEVELS_HEVC_31 = 4,
3103    D3D12_VIDEO_ENCODER_LEVELS_HEVC_4 = 5,
3104    D3D12_VIDEO_ENCODER_LEVELS_HEVC_41 = 6,
3105    D3D12_VIDEO_ENCODER_LEVELS_HEVC_5 = 7,
3106    D3D12_VIDEO_ENCODER_LEVELS_HEVC_51 = 8,
3107    D3D12_VIDEO_ENCODER_LEVELS_HEVC_52 = 9,
3108    D3D12_VIDEO_ENCODER_LEVELS_HEVC_6 = 10,
3109    D3D12_VIDEO_ENCODER_LEVELS_HEVC_61 = 11,
3110    D3D12_VIDEO_ENCODER_LEVELS_HEVC_62 = 12
3111} D3D12_VIDEO_ENCODER_LEVELS_HEVC;
3112typedef struct D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC {
3113    D3D12_VIDEO_ENCODER_LEVELS_HEVC Level;
3114    D3D12_VIDEO_ENCODER_TIER_HEVC Tier;
3115} D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC;
3116typedef struct D3D12_VIDEO_ENCODER_LEVEL_SETTING {
3117    UINT DataSize;
3118    __C89_NAMELESS union {
3119        D3D12_VIDEO_ENCODER_LEVELS_H264 *pH264LevelSetting;
3120        D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC *pHEVCLevelSetting;
3121    } __C89_NAMELESSUNIONNAME;
3122} D3D12_VIDEO_ENCODER_LEVEL_SETTING;
3123typedef struct D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC {
3124    UINT Width;
3125    UINT Height;
3126} D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC;
3127typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_MODE {
3128    UINT NodeIndex;
3129    D3D12_VIDEO_ENCODER_CODEC Codec;
3130    D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE RateControlMode;
3131    WINBOOL IsSupported;
3132} D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_MODE;
3133typedef enum D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE {
3134    D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_NONE = 0,
3135    D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_ROW_BASED = 1
3136} D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE;
3137typedef enum D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE {
3138    D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_FULL_FRAME = 0,
3139    D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_BYTES_PER_SUBREGION = 1,
3140    D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_SQUARE_UNITS_PER_SUBREGION_ROW_UNALIGNED = 2,
3141    D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_ROWS_PER_SUBREGION = 3,
3142    D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_SUBREGIONS_PER_FRAME = 4
3143} D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE;
3144typedef enum D3D12_VIDEO_ENCODER_HEAP_FLAGS {
3145    D3D12_VIDEO_ENCODER_HEAP_FLAG_NONE = 0x0
3146} D3D12_VIDEO_ENCODER_HEAP_FLAGS;
3147DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_HEAP_FLAGS);
3148typedef struct D3D12_VIDEO_ENCODER_HEAP_DESC {
3149    UINT NodeMask;
3150    D3D12_VIDEO_ENCODER_HEAP_FLAGS Flags;
3151    D3D12_VIDEO_ENCODER_CODEC EncodeCodec;
3152    D3D12_VIDEO_ENCODER_PROFILE_DESC EncodeProfile;
3153    D3D12_VIDEO_ENCODER_LEVEL_SETTING EncodeLevel;
3154    UINT ResolutionsListCount;
3155    const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *pResolutionList;
3156} D3D12_VIDEO_ENCODER_HEAP_DESC;
3157typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS {
3158    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_NONE = 0x0,
3159    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_CABAC_ENCODING_SUPPORT = 0x1,
3160    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_INTRA_SLICE_CONSTRAINED_ENCODING_SUPPORT = 0x2,
3161    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_BFRAME_LTR_COMBINED_SUPPORT = 0x4,
3162    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_ADAPTIVE_8x8_TRANSFORM_ENCODING_SUPPORT = 0x8,
3163    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_DIRECT_SPATIAL_ENCODING_SUPPORT = 0x10,
3164    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_DIRECT_TEMPORAL_ENCODING_SUPPORT = 0x20,
3165    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_CONSTRAINED_INTRAPREDICTION_SUPPORT = 0x40
3166} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS;
3167DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS);
3168typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES {
3169    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED = 0,
3170    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_1_DISABLE_ALL_SLICE_BLOCK_EDGES = 1,
3171    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_2_DISABLE_SLICE_BOUNDARIES_BLOCKS = 2,
3172    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_3_USE_TWO_STAGE_DEBLOCKING = 3,
3173    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_4_DISABLE_CHROMA_BLOCK_EDGES = 4,
3174    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES = 5,
3175    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING = 6
3176} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES;
3177typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS {
3178    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_NONE = 0x0,
3179    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,
3180    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,
3181    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,
3182    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,
3183    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,
3184    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,
3185    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
3186} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS;
3187DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS);
3188typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 {
3189    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS SupportFlags;
3190    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS DisableDeblockingFilterSupportedModes;
3191} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264;
3192typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS {
3193    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_NONE = 0x0,
3194    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_BFRAME_LTR_COMBINED_SUPPORT = 0x1,
3195    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SLICE_CONSTRAINED_ENCODING_SUPPORT = 0x2,
3196    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CONSTRAINED_INTRAPREDICTION_SUPPORT = 0x4,
3197    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_SAO_FILTER_SUPPORT = 0x8,
3198    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_ASYMETRIC_MOTION_PARTITION_SUPPORT = 0x10,
3199    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_ASYMETRIC_MOTION_PARTITION_REQUIRED = 0x20,
3200    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_SUPPORT = 0x40,
3201    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_DISABLING_LOOP_FILTER_ACROSS_SLICES_SUPPORT = 0x80,
3202    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_P_FRAMES_IMPLEMENTED_AS_LOW_DELAY_B_FRAMES = 0x100
3203} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS;
3204DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS);
3205typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE {
3206    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_8x8 = 0,
3207    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_16x16 = 1,
3208    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_32x32 = 2,
3209    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_64x64 = 3
3210} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE;
3211typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE {
3212    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_4x4 = 0,
3213    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_8x8 = 1,
3214    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_16x16 = 2,
3215    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_32x32 = 3
3216} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE;
3217typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC {
3218    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS SupportFlags;
3219    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize;
3220    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize;
3221    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize;
3222    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize;
3223    UCHAR max_transform_hierarchy_depth_inter;
3224    UCHAR max_transform_hierarchy_depth_intra;
3225} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC;
3226typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT {
3227    UINT DataSize;
3228    __C89_NAMELESS union {
3229        D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 *pH264Support;
3230        D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC *pHEVCSupport;
3231    } __C89_NAMELESSUNIONNAME;
3232} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT;
3233typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT {
3234    UINT NodeIndex;
3235    D3D12_VIDEO_ENCODER_CODEC Codec;
3236    D3D12_VIDEO_ENCODER_PROFILE_DESC Profile;
3237    WINBOOL IsSupported;
3238    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT CodecSupportLimits;
3239} D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT;
3240typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264 {
3241    UINT MaxL0ReferencesForP;
3242    UINT MaxL0ReferencesForB;
3243    UINT MaxL1ReferencesForB;
3244    UINT MaxLongTermReferences;
3245    UINT MaxDPBCapacity;
3246} D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264;
3247typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC {
3248    UINT MaxL0ReferencesForP;
3249    UINT MaxL0ReferencesForB;
3250    UINT MaxL1ReferencesForB;
3251    UINT MaxLongTermReferences;
3252    UINT MaxDPBCapacity;
3253} D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC;
3254typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT {
3255    UINT DataSize;
3256    __C89_NAMELESS union {
3257        D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264 *pH264Support;
3258        D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC *pHEVCSupport;
3259    } __C89_NAMELESSUNIONNAME;
3260} D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT;
3261typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT {
3262    UINT NodeIndex;
3263    D3D12_VIDEO_ENCODER_CODEC Codec;
3264    D3D12_VIDEO_ENCODER_PROFILE_DESC Profile;
3265    WINBOOL IsSupported;
3266    D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT PictureSupport;
3267} D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT;
3268typedef enum D3D12_VIDEO_ENCODER_SUPPORT_FLAGS {
3269    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_NONE = 0x0,
3270    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_GENERAL_SUPPORT_OK = 0x1,
3271    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_RECONFIGURATION_AVAILABLE = 0x2,
3272    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE = 0x4,
3273    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_VBV_SIZE_CONFIG_AVAILABLE = 0x8,
3274    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_FRAME_ANALYSIS_AVAILABLE = 0x10,
3275    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RECONSTRUCTED_FRAMES_REQUIRE_TEXTURE_ARRAYS = 0x20,
3276    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_DELTA_QP_AVAILABLE = 0x40,
3277    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SUBREGION_LAYOUT_RECONFIGURATION_AVAILABLE = 0x80,
3278    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_ADJUSTABLE_QP_RANGE_AVAILABLE = 0x100,
3279    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_INITIAL_QP_AVAILABLE = 0x200,
3280    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_MAX_FRAME_SIZE_AVAILABLE = 0x400,
3281    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SEQUENCE_GOP_RECONFIGURATION_AVAILABLE = 0x800,
3282    D3D12_VIDEO_ENCODER_SUPPORT_FLAG_MOTION_ESTIMATION_PRECISION_MODE_LIMIT_AVAILABLE = 0x1000
3283} D3D12_VIDEO_ENCODER_SUPPORT_FLAGS;
3284DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SUPPORT_FLAGS);
3285typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS {
3286    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_NONE = 0x0,
3287    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION = 0x1,
3288    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM = 0x2,
3289    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING = 0x4,
3290    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ALLOW_REQUEST_INTRA_CONSTRAINED_SLICES = 0x8
3291} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS;
3292DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS);
3293typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES {
3294    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_DISABLED = 0,
3295    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_TEMPORAL = 1,
3296    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_SPATIAL = 2
3297} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES;
3298typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264 {
3299    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS ConfigurationFlags;
3300    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES DirectModeConfig;
3301    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES DisableDeblockingFilterConfig;
3302} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264;
3303typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS {
3304    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_NONE = 0x0,
3305    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_DISABLE_LOOP_FILTER_ACROSS_SLICES = 0x1,
3306    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ALLOW_REQUEST_INTRA_CONSTRAINED_SLICES = 0x2,
3307    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_SAO_FILTER = 0x4,
3308    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_LONG_TERM_REFERENCES = 0x8,
3309    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_ASYMETRIC_MOTION_PARTITION = 0x10,
3310    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_TRANSFORM_SKIPPING = 0x20,
3311    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION = 0x40
3312} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS;
3313DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS);
3314typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC {
3315    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS ConfigurationFlags;
3316    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize;
3317    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize;
3318    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize;
3319    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize;
3320    UCHAR max_transform_hierarchy_depth_inter;
3321    UCHAR max_transform_hierarchy_depth_intra;
3322} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC;
3323typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION {
3324    UINT DataSize;
3325    __C89_NAMELESS union {
3326        D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264 *pH264Config;
3327        D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC *pHEVCConfig;
3328    } __C89_NAMELESSUNIONNAME;
3329} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION;
3330typedef struct D3D12_VIDEO_ENCODER_INTRA_REFRESH {
3331    D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE Mode;
3332    UINT IntraRefreshDuration;
3333} D3D12_VIDEO_ENCODER_INTRA_REFRESH;
3334typedef enum D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE {
3335    D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_MAXIMUM = 0,
3336    D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_FULL_PIXEL = 1,
3337    D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_HALF_PIXEL = 2,
3338    D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_QUARTER_PIXEL = 3
3339} D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE;
3340typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS {
3341    UINT MaxSubregionsNumber;
3342    UINT MaxIntraRefreshFrameDuration;
3343    UINT SubregionBlockPixelsSize;
3344    UINT QPMapRegionPixelsSize;
3345} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS;
3346typedef enum D3D12_VIDEO_ENCODER_VALIDATION_FLAGS {
3347    D3D12_VIDEO_ENCODER_VALIDATION_FLAG_NONE = 0x0,
3348    D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_NOT_SUPPORTED = 0x1,
3349    D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INPUT_FORMAT_NOT_SUPPORTED = 0x8,
3350    D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_CONFIGURATION_NOT_SUPPORTED = 0x10,
3351    D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_MODE_NOT_SUPPORTED = 0x20,
3352    D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED = 0x40,
3353    D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INTRA_REFRESH_MODE_NOT_SUPPORTED = 0x80,
3354    D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED = 0x100,
3355    D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST = 0x200,
3356    D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED = 0x800
3357} D3D12_VIDEO_ENCODER_VALIDATION_FLAGS;
3358DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_VALIDATION_FLAGS);
3359typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 {
3360    UINT GOPLength;
3361    UINT PPicturePeriod;
3362    UCHAR pic_order_cnt_type;
3363    UCHAR log2_max_frame_num_minus4;
3364    UCHAR log2_max_pic_order_cnt_lsb_minus4;
3365} D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264;
3366typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC {
3367    UINT GOPLength;
3368    UINT PPicturePeriod;
3369    UCHAR log2_max_pic_order_cnt_lsb_minus4;
3370} D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC;
3371typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE {
3372    UINT DataSize;
3373    __C89_NAMELESS union {
3374        D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 *pH264GroupOfPictures;
3375        D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC *pHEVCGroupOfPictures;
3376    } __C89_NAMELESSUNIONNAME;
3377} D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE;
3378typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT {
3379    UINT NodeIndex;
3380    D3D12_VIDEO_ENCODER_CODEC Codec;
3381    DXGI_FORMAT InputFormat;
3382    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration;
3383    D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence;
3384    D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl;
3385    D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefresh;
3386    D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding;
3387    UINT ResolutionsListCount;
3388    const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *pResolutionList;
3389    UINT MaxReferenceFramesInDPB;
3390    D3D12_VIDEO_ENCODER_VALIDATION_FLAGS ValidationFlags;
3391    D3D12_VIDEO_ENCODER_SUPPORT_FLAGS SupportFlags;
3392    D3D12_VIDEO_ENCODER_PROFILE_DESC SuggestedProfile;
3393    D3D12_VIDEO_ENCODER_LEVEL_SETTING SuggestedLevel;
3394    D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS *pResolutionDependentSupport;
3395} D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT;
3396typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS {
3397    UINT NodeIndex;
3398    D3D12_VIDEO_ENCODER_CODEC Codec;
3399    D3D12_VIDEO_ENCODER_PROFILE_DESC Profile;
3400    DXGI_FORMAT InputFormat;
3401    D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC PictureTargetResolution;
3402    WINBOOL IsSupported;
3403    UINT CompressedBitstreamBufferAccessAlignment;
3404    UINT EncoderMetadataBufferAccessAlignment;
3405    UINT MaxEncoderOutputMetadataBufferSize;
3406} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS;
3407typedef enum D3D12_VIDEO_ENCODER_FLAGS {
3408    D3D12_VIDEO_ENCODER_FLAG_NONE = 0x0
3409} D3D12_VIDEO_ENCODER_FLAGS;
3410DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_FLAGS);
3411typedef struct D3D12_VIDEO_ENCODER_DESC {
3412    UINT NodeMask;
3413    D3D12_VIDEO_ENCODER_FLAGS Flags;
3414    D3D12_VIDEO_ENCODER_CODEC EncodeCodec;
3415    D3D12_VIDEO_ENCODER_PROFILE_DESC EncodeProfile;
3416    DXGI_FORMAT InputFormat;
3417    D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration;
3418    D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE MaxMotionEstimationPrecision;
3419} D3D12_VIDEO_ENCODER_DESC;
3420/*****************************************************************************
3421 * ID3D12VideoEncoder interface
3422 */
3423#ifndef __ID3D12VideoEncoder_INTERFACE_DEFINED__
3424#define __ID3D12VideoEncoder_INTERFACE_DEFINED__
3425
3426DEFINE_GUID(IID_ID3D12VideoEncoder, 0x2e0d212d, 0x8df9, 0x44a6, 0xa7,0x70, 0xbb,0x28,0x9b,0x18,0x27,0x37);
3427#if defined(__cplusplus) && !defined(CINTERFACE)
3428MIDL_INTERFACE("2e0d212d-8df9-44a6-a770-bb289b182737")
3429ID3D12VideoEncoder : public ID3D12Pageable
3430{
3431    virtual UINT STDMETHODCALLTYPE GetNodeMask(
3432        ) = 0;
3433
3434    virtual D3D12_VIDEO_ENCODER_FLAGS STDMETHODCALLTYPE GetEncoderFlags(
3435        ) = 0;
3436
3437    virtual D3D12_VIDEO_ENCODER_CODEC STDMETHODCALLTYPE GetCodec(
3438        ) = 0;
3439
3440    virtual HRESULT STDMETHODCALLTYPE GetCodecProfile(
3441        D3D12_VIDEO_ENCODER_PROFILE_DESC dst_profile) = 0;
3442
3443    virtual HRESULT STDMETHODCALLTYPE GetCodecConfiguration(
3444        D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION dst_codec_config) = 0;
3445
3446    virtual DXGI_FORMAT STDMETHODCALLTYPE GetInputFormat(
3447        ) = 0;
3448
3449    virtual D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE STDMETHODCALLTYPE GetMaxMotionEstimationPrecision(
3450        ) = 0;
3451
3452};
3453#ifdef __CRT_UUID_DECL
3454__CRT_UUID_DECL(ID3D12VideoEncoder, 0x2e0d212d, 0x8df9, 0x44a6, 0xa7,0x70, 0xbb,0x28,0x9b,0x18,0x27,0x37)
3455#endif
3456#else
3457typedef struct ID3D12VideoEncoderVtbl {
3458    BEGIN_INTERFACE
3459
3460    /*** IUnknown methods ***/
3461    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3462        ID3D12VideoEncoder *This,
3463        REFIID riid,
3464        void **ppvObject);
3465
3466    ULONG (STDMETHODCALLTYPE *AddRef)(
3467        ID3D12VideoEncoder *This);
3468
3469    ULONG (STDMETHODCALLTYPE *Release)(
3470        ID3D12VideoEncoder *This);
3471
3472    /*** ID3D12Object methods ***/
3473    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
3474        ID3D12VideoEncoder *This,
3475        REFGUID guid,
3476        UINT *data_size,
3477        void *data);
3478
3479    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
3480        ID3D12VideoEncoder *This,
3481        REFGUID guid,
3482        UINT data_size,
3483        const void *data);
3484
3485    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
3486        ID3D12VideoEncoder *This,
3487        REFGUID guid,
3488        const IUnknown *data);
3489
3490    HRESULT (STDMETHODCALLTYPE *SetName)(
3491        ID3D12VideoEncoder *This,
3492        const WCHAR *name);
3493
3494    /*** ID3D12DeviceChild methods ***/
3495    HRESULT (STDMETHODCALLTYPE *GetDevice)(
3496        ID3D12VideoEncoder *This,
3497        REFIID riid,
3498        void **device);
3499
3500    /*** ID3D12VideoEncoder methods ***/
3501    UINT (STDMETHODCALLTYPE *GetNodeMask)(
3502        ID3D12VideoEncoder *This);
3503
3504    D3D12_VIDEO_ENCODER_FLAGS (STDMETHODCALLTYPE *GetEncoderFlags)(
3505        ID3D12VideoEncoder *This);
3506
3507    D3D12_VIDEO_ENCODER_CODEC (STDMETHODCALLTYPE *GetCodec)(
3508        ID3D12VideoEncoder *This);
3509
3510    HRESULT (STDMETHODCALLTYPE *GetCodecProfile)(
3511        ID3D12VideoEncoder *This,
3512        D3D12_VIDEO_ENCODER_PROFILE_DESC dst_profile);
3513
3514    HRESULT (STDMETHODCALLTYPE *GetCodecConfiguration)(
3515        ID3D12VideoEncoder *This,
3516        D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION dst_codec_config);
3517
3518    DXGI_FORMAT (STDMETHODCALLTYPE *GetInputFormat)(
3519        ID3D12VideoEncoder *This);
3520
3521    D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE (STDMETHODCALLTYPE *GetMaxMotionEstimationPrecision)(
3522        ID3D12VideoEncoder *This);
3523
3524    END_INTERFACE
3525} ID3D12VideoEncoderVtbl;
3526
3527interface ID3D12VideoEncoder {
3528    CONST_VTBL ID3D12VideoEncoderVtbl* lpVtbl;
3529};
3530
3531#ifdef COBJMACROS
3532#ifndef WIDL_C_INLINE_WRAPPERS
3533/*** IUnknown methods ***/
3534#define ID3D12VideoEncoder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
3535#define ID3D12VideoEncoder_AddRef(This) (This)->lpVtbl->AddRef(This)
3536#define ID3D12VideoEncoder_Release(This) (This)->lpVtbl->Release(This)
3537/*** ID3D12Object methods ***/
3538#define ID3D12VideoEncoder_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
3539#define ID3D12VideoEncoder_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
3540#define ID3D12VideoEncoder_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
3541#define ID3D12VideoEncoder_SetName(This,name) (This)->lpVtbl->SetName(This,name)
3542/*** ID3D12DeviceChild methods ***/
3543#define ID3D12VideoEncoder_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
3544/*** ID3D12VideoEncoder methods ***/
3545#define ID3D12VideoEncoder_GetNodeMask(This) (This)->lpVtbl->GetNodeMask(This)
3546#define ID3D12VideoEncoder_GetEncoderFlags(This) (This)->lpVtbl->GetEncoderFlags(This)
3547#define ID3D12VideoEncoder_GetCodec(This) (This)->lpVtbl->GetCodec(This)
3548#define ID3D12VideoEncoder_GetCodecProfile(This,dst_profile) (This)->lpVtbl->GetCodecProfile(This,dst_profile)
3549#define ID3D12VideoEncoder_GetCodecConfiguration(This,dst_codec_config) (This)->lpVtbl->GetCodecConfiguration(This,dst_codec_config)
3550#define ID3D12VideoEncoder_GetInputFormat(This) (This)->lpVtbl->GetInputFormat(This)
3551#define ID3D12VideoEncoder_GetMaxMotionEstimationPrecision(This) (This)->lpVtbl->GetMaxMotionEstimationPrecision(This)
3552#else
3553/*** IUnknown methods ***/
3554static inline HRESULT ID3D12VideoEncoder_QueryInterface(ID3D12VideoEncoder* This,REFIID riid,void **ppvObject) {
3555    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
3556}
3557static inline ULONG ID3D12VideoEncoder_AddRef(ID3D12VideoEncoder* This) {
3558    return This->lpVtbl->AddRef(This);
3559}
3560static inline ULONG ID3D12VideoEncoder_Release(ID3D12VideoEncoder* This) {
3561    return This->lpVtbl->Release(This);
3562}
3563/*** ID3D12Object methods ***/
3564static inline HRESULT ID3D12VideoEncoder_GetPrivateData(ID3D12VideoEncoder* This,REFGUID guid,UINT *data_size,void *data) {
3565    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
3566}
3567static inline HRESULT ID3D12VideoEncoder_SetPrivateData(ID3D12VideoEncoder* This,REFGUID guid,UINT data_size,const void *data) {
3568    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
3569}
3570static inline HRESULT ID3D12VideoEncoder_SetPrivateDataInterface(ID3D12VideoEncoder* This,REFGUID guid,const IUnknown *data) {
3571    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
3572}
3573static inline HRESULT ID3D12VideoEncoder_SetName(ID3D12VideoEncoder* This,const WCHAR *name) {
3574    return This->lpVtbl->SetName(This,name);
3575}
3576/*** ID3D12DeviceChild methods ***/
3577static inline HRESULT ID3D12VideoEncoder_GetDevice(ID3D12VideoEncoder* This,REFIID riid,void **device) {
3578    return This->lpVtbl->GetDevice(This,riid,device);
3579}
3580/*** ID3D12VideoEncoder methods ***/
3581static inline UINT ID3D12VideoEncoder_GetNodeMask(ID3D12VideoEncoder* This) {
3582    return This->lpVtbl->GetNodeMask(This);
3583}
3584static inline D3D12_VIDEO_ENCODER_FLAGS ID3D12VideoEncoder_GetEncoderFlags(ID3D12VideoEncoder* This) {
3585    return This->lpVtbl->GetEncoderFlags(This);
3586}
3587static inline D3D12_VIDEO_ENCODER_CODEC ID3D12VideoEncoder_GetCodec(ID3D12VideoEncoder* This) {
3588    return This->lpVtbl->GetCodec(This);
3589}
3590static inline HRESULT ID3D12VideoEncoder_GetCodecProfile(ID3D12VideoEncoder* This,D3D12_VIDEO_ENCODER_PROFILE_DESC dst_profile) {
3591    return This->lpVtbl->GetCodecProfile(This,dst_profile);
3592}
3593static inline HRESULT ID3D12VideoEncoder_GetCodecConfiguration(ID3D12VideoEncoder* This,D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION dst_codec_config) {
3594    return This->lpVtbl->GetCodecConfiguration(This,dst_codec_config);
3595}
3596static inline DXGI_FORMAT ID3D12VideoEncoder_GetInputFormat(ID3D12VideoEncoder* This) {
3597    return This->lpVtbl->GetInputFormat(This);
3598}
3599static inline D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE ID3D12VideoEncoder_GetMaxMotionEstimationPrecision(ID3D12VideoEncoder* This) {
3600    return This->lpVtbl->GetMaxMotionEstimationPrecision(This);
3601}
3602#endif
3603#endif
3604
3605#endif
3606
3607
3608#endif  /* __ID3D12VideoEncoder_INTERFACE_DEFINED__ */
3609
3610/*****************************************************************************
3611 * ID3D12VideoEncoderHeap interface
3612 */
3613#ifndef __ID3D12VideoEncoderHeap_INTERFACE_DEFINED__
3614#define __ID3D12VideoEncoderHeap_INTERFACE_DEFINED__
3615
3616DEFINE_GUID(IID_ID3D12VideoEncoderHeap, 0x22b35d96, 0x876a, 0x44c0, 0xb2,0x5e, 0xfb,0x8c,0x9c,0x7f,0x1c,0x4a);
3617#if defined(__cplusplus) && !defined(CINTERFACE)
3618MIDL_INTERFACE("22b35d96-876a-44c0-b25e-fb8c9c7f1c4a")
3619ID3D12VideoEncoderHeap : public ID3D12Pageable
3620{
3621    virtual UINT STDMETHODCALLTYPE GetNodeMask(
3622        ) = 0;
3623
3624    virtual D3D12_VIDEO_ENCODER_HEAP_FLAGS STDMETHODCALLTYPE GetEncoderHeapFlags(
3625        ) = 0;
3626
3627    virtual D3D12_VIDEO_ENCODER_CODEC STDMETHODCALLTYPE GetCodec(
3628        ) = 0;
3629
3630    virtual HRESULT STDMETHODCALLTYPE GetCodecProfile(
3631        D3D12_VIDEO_ENCODER_PROFILE_DESC dst_profile) = 0;
3632
3633    virtual HRESULT STDMETHODCALLTYPE GetCodecLevel(
3634        D3D12_VIDEO_ENCODER_LEVEL_SETTING dst_level) = 0;
3635
3636    virtual UINT STDMETHODCALLTYPE GetResolutionListCount(
3637        ) = 0;
3638
3639    virtual HRESULT STDMETHODCALLTYPE GetResolutionList(
3640        const UINT resolutions_list_count,
3641        D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *resolution_list) = 0;
3642
3643};
3644#ifdef __CRT_UUID_DECL
3645__CRT_UUID_DECL(ID3D12VideoEncoderHeap, 0x22b35d96, 0x876a, 0x44c0, 0xb2,0x5e, 0xfb,0x8c,0x9c,0x7f,0x1c,0x4a)
3646#endif
3647#else
3648typedef struct ID3D12VideoEncoderHeapVtbl {
3649    BEGIN_INTERFACE
3650
3651    /*** IUnknown methods ***/
3652    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3653        ID3D12VideoEncoderHeap *This,
3654        REFIID riid,
3655        void **ppvObject);
3656
3657    ULONG (STDMETHODCALLTYPE *AddRef)(
3658        ID3D12VideoEncoderHeap *This);
3659
3660    ULONG (STDMETHODCALLTYPE *Release)(
3661        ID3D12VideoEncoderHeap *This);
3662
3663    /*** ID3D12Object methods ***/
3664    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
3665        ID3D12VideoEncoderHeap *This,
3666        REFGUID guid,
3667        UINT *data_size,
3668        void *data);
3669
3670    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
3671        ID3D12VideoEncoderHeap *This,
3672        REFGUID guid,
3673        UINT data_size,
3674        const void *data);
3675
3676    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
3677        ID3D12VideoEncoderHeap *This,
3678        REFGUID guid,
3679        const IUnknown *data);
3680
3681    HRESULT (STDMETHODCALLTYPE *SetName)(
3682        ID3D12VideoEncoderHeap *This,
3683        const WCHAR *name);
3684
3685    /*** ID3D12DeviceChild methods ***/
3686    HRESULT (STDMETHODCALLTYPE *GetDevice)(
3687        ID3D12VideoEncoderHeap *This,
3688        REFIID riid,
3689        void **device);
3690
3691    /*** ID3D12VideoEncoderHeap methods ***/
3692    UINT (STDMETHODCALLTYPE *GetNodeMask)(
3693        ID3D12VideoEncoderHeap *This);
3694
3695    D3D12_VIDEO_ENCODER_HEAP_FLAGS (STDMETHODCALLTYPE *GetEncoderHeapFlags)(
3696        ID3D12VideoEncoderHeap *This);
3697
3698    D3D12_VIDEO_ENCODER_CODEC (STDMETHODCALLTYPE *GetCodec)(
3699        ID3D12VideoEncoderHeap *This);
3700
3701    HRESULT (STDMETHODCALLTYPE *GetCodecProfile)(
3702        ID3D12VideoEncoderHeap *This,
3703        D3D12_VIDEO_ENCODER_PROFILE_DESC dst_profile);
3704
3705    HRESULT (STDMETHODCALLTYPE *GetCodecLevel)(
3706        ID3D12VideoEncoderHeap *This,
3707        D3D12_VIDEO_ENCODER_LEVEL_SETTING dst_level);
3708
3709    UINT (STDMETHODCALLTYPE *GetResolutionListCount)(
3710        ID3D12VideoEncoderHeap *This);
3711
3712    HRESULT (STDMETHODCALLTYPE *GetResolutionList)(
3713        ID3D12VideoEncoderHeap *This,
3714        const UINT resolutions_list_count,
3715        D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *resolution_list);
3716
3717    END_INTERFACE
3718} ID3D12VideoEncoderHeapVtbl;
3719
3720interface ID3D12VideoEncoderHeap {
3721    CONST_VTBL ID3D12VideoEncoderHeapVtbl* lpVtbl;
3722};
3723
3724#ifdef COBJMACROS
3725#ifndef WIDL_C_INLINE_WRAPPERS
3726/*** IUnknown methods ***/
3727#define ID3D12VideoEncoderHeap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
3728#define ID3D12VideoEncoderHeap_AddRef(This) (This)->lpVtbl->AddRef(This)
3729#define ID3D12VideoEncoderHeap_Release(This) (This)->lpVtbl->Release(This)
3730/*** ID3D12Object methods ***/
3731#define ID3D12VideoEncoderHeap_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
3732#define ID3D12VideoEncoderHeap_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
3733#define ID3D12VideoEncoderHeap_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
3734#define ID3D12VideoEncoderHeap_SetName(This,name) (This)->lpVtbl->SetName(This,name)
3735/*** ID3D12DeviceChild methods ***/
3736#define ID3D12VideoEncoderHeap_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
3737/*** ID3D12VideoEncoderHeap methods ***/
3738#define ID3D12VideoEncoderHeap_GetNodeMask(This) (This)->lpVtbl->GetNodeMask(This)
3739#define ID3D12VideoEncoderHeap_GetEncoderHeapFlags(This) (This)->lpVtbl->GetEncoderHeapFlags(This)
3740#define ID3D12VideoEncoderHeap_GetCodec(This) (This)->lpVtbl->GetCodec(This)
3741#define ID3D12VideoEncoderHeap_GetCodecProfile(This,dst_profile) (This)->lpVtbl->GetCodecProfile(This,dst_profile)
3742#define ID3D12VideoEncoderHeap_GetCodecLevel(This,dst_level) (This)->lpVtbl->GetCodecLevel(This,dst_level)
3743#define ID3D12VideoEncoderHeap_GetResolutionListCount(This) (This)->lpVtbl->GetResolutionListCount(This)
3744#define ID3D12VideoEncoderHeap_GetResolutionList(This,resolutions_list_count,resolution_list) (This)->lpVtbl->GetResolutionList(This,resolutions_list_count,resolution_list)
3745#else
3746/*** IUnknown methods ***/
3747static inline HRESULT ID3D12VideoEncoderHeap_QueryInterface(ID3D12VideoEncoderHeap* This,REFIID riid,void **ppvObject) {
3748    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
3749}
3750static inline ULONG ID3D12VideoEncoderHeap_AddRef(ID3D12VideoEncoderHeap* This) {
3751    return This->lpVtbl->AddRef(This);
3752}
3753static inline ULONG ID3D12VideoEncoderHeap_Release(ID3D12VideoEncoderHeap* This) {
3754    return This->lpVtbl->Release(This);
3755}
3756/*** ID3D12Object methods ***/
3757static inline HRESULT ID3D12VideoEncoderHeap_GetPrivateData(ID3D12VideoEncoderHeap* This,REFGUID guid,UINT *data_size,void *data) {
3758    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
3759}
3760static inline HRESULT ID3D12VideoEncoderHeap_SetPrivateData(ID3D12VideoEncoderHeap* This,REFGUID guid,UINT data_size,const void *data) {
3761    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
3762}
3763static inline HRESULT ID3D12VideoEncoderHeap_SetPrivateDataInterface(ID3D12VideoEncoderHeap* This,REFGUID guid,const IUnknown *data) {
3764    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
3765}
3766static inline HRESULT ID3D12VideoEncoderHeap_SetName(ID3D12VideoEncoderHeap* This,const WCHAR *name) {
3767    return This->lpVtbl->SetName(This,name);
3768}
3769/*** ID3D12DeviceChild methods ***/
3770static inline HRESULT ID3D12VideoEncoderHeap_GetDevice(ID3D12VideoEncoderHeap* This,REFIID riid,void **device) {
3771    return This->lpVtbl->GetDevice(This,riid,device);
3772}
3773/*** ID3D12VideoEncoderHeap methods ***/
3774static inline UINT ID3D12VideoEncoderHeap_GetNodeMask(ID3D12VideoEncoderHeap* This) {
3775    return This->lpVtbl->GetNodeMask(This);
3776}
3777static inline D3D12_VIDEO_ENCODER_HEAP_FLAGS ID3D12VideoEncoderHeap_GetEncoderHeapFlags(ID3D12VideoEncoderHeap* This) {
3778    return This->lpVtbl->GetEncoderHeapFlags(This);
3779}
3780static inline D3D12_VIDEO_ENCODER_CODEC ID3D12VideoEncoderHeap_GetCodec(ID3D12VideoEncoderHeap* This) {
3781    return This->lpVtbl->GetCodec(This);
3782}
3783static inline HRESULT ID3D12VideoEncoderHeap_GetCodecProfile(ID3D12VideoEncoderHeap* This,D3D12_VIDEO_ENCODER_PROFILE_DESC dst_profile) {
3784    return This->lpVtbl->GetCodecProfile(This,dst_profile);
3785}
3786static inline HRESULT ID3D12VideoEncoderHeap_GetCodecLevel(ID3D12VideoEncoderHeap* This,D3D12_VIDEO_ENCODER_LEVEL_SETTING dst_level) {
3787    return This->lpVtbl->GetCodecLevel(This,dst_level);
3788}
3789static inline UINT ID3D12VideoEncoderHeap_GetResolutionListCount(ID3D12VideoEncoderHeap* This) {
3790    return This->lpVtbl->GetResolutionListCount(This);
3791}
3792static inline HRESULT ID3D12VideoEncoderHeap_GetResolutionList(ID3D12VideoEncoderHeap* This,const UINT resolutions_list_count,D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *resolution_list) {
3793    return This->lpVtbl->GetResolutionList(This,resolutions_list_count,resolution_list);
3794}
3795#endif
3796#endif
3797
3798#endif
3799
3800
3801#endif  /* __ID3D12VideoEncoderHeap_INTERFACE_DEFINED__ */
3802
3803/*****************************************************************************
3804 * ID3D12VideoDevice3 interface
3805 */
3806#ifndef __ID3D12VideoDevice3_INTERFACE_DEFINED__
3807#define __ID3D12VideoDevice3_INTERFACE_DEFINED__
3808
3809DEFINE_GUID(IID_ID3D12VideoDevice3, 0x4243adb4, 0x3a32, 0x4666, 0x97,0x3c, 0x0c,0xcc,0x56,0x25,0xdc,0x44);
3810#if defined(__cplusplus) && !defined(CINTERFACE)
3811MIDL_INTERFACE("4243adb4-3a32-4666-973c-0ccc5625dc44")
3812ID3D12VideoDevice3 : public ID3D12VideoDevice2
3813{
3814    virtual HRESULT STDMETHODCALLTYPE CreateVideoEncoder(
3815        const D3D12_VIDEO_ENCODER_DESC *desc,
3816        REFIID riid,
3817        void **video_encoder) = 0;
3818
3819    virtual HRESULT STDMETHODCALLTYPE CreateVideoEncoderHeap(
3820        const D3D12_VIDEO_ENCODER_HEAP_DESC *desc,
3821        REFIID riid,
3822        void **video_encoder_heap) = 0;
3823
3824};
3825#ifdef __CRT_UUID_DECL
3826__CRT_UUID_DECL(ID3D12VideoDevice3, 0x4243adb4, 0x3a32, 0x4666, 0x97,0x3c, 0x0c,0xcc,0x56,0x25,0xdc,0x44)
3827#endif
3828#else
3829typedef struct ID3D12VideoDevice3Vtbl {
3830    BEGIN_INTERFACE
3831
3832    /*** IUnknown methods ***/
3833    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3834        ID3D12VideoDevice3 *This,
3835        REFIID riid,
3836        void **ppvObject);
3837
3838    ULONG (STDMETHODCALLTYPE *AddRef)(
3839        ID3D12VideoDevice3 *This);
3840
3841    ULONG (STDMETHODCALLTYPE *Release)(
3842        ID3D12VideoDevice3 *This);
3843
3844    /*** ID3D12VideoDevice methods ***/
3845    HRESULT (STDMETHODCALLTYPE *CheckFeatureSupport)(
3846        ID3D12VideoDevice3 *This,
3847        D3D12_FEATURE_VIDEO feature_video,
3848        void *feature_support_data,
3849        UINT feature_support_data_size);
3850
3851    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoder)(
3852        ID3D12VideoDevice3 *This,
3853        const D3D12_VIDEO_DECODER_DESC *desc,
3854        REFIID riid,
3855        void **video_decoder);
3856
3857    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoderHeap)(
3858        ID3D12VideoDevice3 *This,
3859        const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,
3860        REFIID riid,
3861        void **video_decoder_heap);
3862
3863    HRESULT (STDMETHODCALLTYPE *CreateVideoProcessor)(
3864        ID3D12VideoDevice3 *This,
3865        UINT node_mask,
3866        const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,
3867        UINT input_stream_descs_count,
3868        const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,
3869        REFIID riid,
3870        void **video_processor);
3871
3872    /*** ID3D12VideoDevice1 methods ***/
3873    HRESULT (STDMETHODCALLTYPE *CreateVideoMotionEstimator)(
3874        ID3D12VideoDevice3 *This,
3875        const D3D12_VIDEO_MOTION_ESTIMATOR_DESC *desc,
3876        ID3D12ProtectedResourceSession *protected_resource_session,
3877        REFIID riid,
3878        void **video_motion_estimator);
3879
3880    HRESULT (STDMETHODCALLTYPE *CreateVideoMotionVectorHeap)(
3881        ID3D12VideoDevice3 *This,
3882        const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *desc,
3883        ID3D12ProtectedResourceSession *protected_resource_session,
3884        REFIID riid,
3885        void **video_motion_vector_heap);
3886
3887    /*** ID3D12VideoDevice2 methods ***/
3888    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoder1)(
3889        ID3D12VideoDevice3 *This,
3890        const D3D12_VIDEO_DECODER_DESC *desc,
3891        ID3D12ProtectedResourceSession *protected_resource_session,
3892        REFIID riid,
3893        void **video_decoder);
3894
3895    HRESULT (STDMETHODCALLTYPE *CreateVideoDecoderHeap1)(
3896        ID3D12VideoDevice3 *This,
3897        const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,
3898        ID3D12ProtectedResourceSession *protected_resource_session,
3899        REFIID riid,
3900        void **video_decoder_heap);
3901
3902    HRESULT (STDMETHODCALLTYPE *CreateVideoProcessor1)(
3903        ID3D12VideoDevice3 *This,
3904        UINT node_mask,
3905        const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,
3906        UINT input_stream_descs_count,
3907        const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,
3908        ID3D12ProtectedResourceSession *protected_resource_session,
3909        REFIID riid,
3910        void **video_processor);
3911
3912    HRESULT (STDMETHODCALLTYPE *CreateVideoExtensionCommand)(
3913        ID3D12VideoDevice3 *This,
3914        const D3D12_VIDEO_EXTENSION_COMMAND_DESC *desc,
3915        const void *creation_parameters,
3916        SIZE_T creation_parameters_data_size_in_bytes,
3917        ID3D12ProtectedResourceSession *protected_resource_session,
3918        REFIID riid,
3919        void **video_extension_command);
3920
3921    HRESULT (STDMETHODCALLTYPE *ExecuteExtensionCommand)(
3922        ID3D12VideoDevice3 *This,
3923        ID3D12VideoExtensionCommand *extension_command,
3924        const void *execution_parameters,
3925        SIZE_T execution_parameters_size_in_bytes,
3926        void *output_data,
3927        SIZE_T output_data_size_in_bytes);
3928
3929    /*** ID3D12VideoDevice3 methods ***/
3930    HRESULT (STDMETHODCALLTYPE *CreateVideoEncoder)(
3931        ID3D12VideoDevice3 *This,
3932        const D3D12_VIDEO_ENCODER_DESC *desc,
3933        REFIID riid,
3934        void **video_encoder);
3935
3936    HRESULT (STDMETHODCALLTYPE *CreateVideoEncoderHeap)(
3937        ID3D12VideoDevice3 *This,
3938        const D3D12_VIDEO_ENCODER_HEAP_DESC *desc,
3939        REFIID riid,
3940        void **video_encoder_heap);
3941
3942    END_INTERFACE
3943} ID3D12VideoDevice3Vtbl;
3944
3945interface ID3D12VideoDevice3 {
3946    CONST_VTBL ID3D12VideoDevice3Vtbl* lpVtbl;
3947};
3948
3949#ifdef COBJMACROS
3950#ifndef WIDL_C_INLINE_WRAPPERS
3951/*** IUnknown methods ***/
3952#define ID3D12VideoDevice3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
3953#define ID3D12VideoDevice3_AddRef(This) (This)->lpVtbl->AddRef(This)
3954#define ID3D12VideoDevice3_Release(This) (This)->lpVtbl->Release(This)
3955/*** ID3D12VideoDevice methods ***/
3956#define ID3D12VideoDevice3_CheckFeatureSupport(This,feature_video,feature_support_data,feature_support_data_size) (This)->lpVtbl->CheckFeatureSupport(This,feature_video,feature_support_data,feature_support_data_size)
3957#define ID3D12VideoDevice3_CreateVideoDecoder(This,desc,riid,video_decoder) (This)->lpVtbl->CreateVideoDecoder(This,desc,riid,video_decoder)
3958#define ID3D12VideoDevice3_CreateVideoDecoderHeap(This,video_decoder_heap_desc,riid,video_decoder_heap) (This)->lpVtbl->CreateVideoDecoderHeap(This,video_decoder_heap_desc,riid,video_decoder_heap)
3959#define ID3D12VideoDevice3_CreateVideoProcessor(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,riid,video_processor) (This)->lpVtbl->CreateVideoProcessor(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,riid,video_processor)
3960/*** ID3D12VideoDevice1 methods ***/
3961#define ID3D12VideoDevice3_CreateVideoMotionEstimator(This,desc,protected_resource_session,riid,video_motion_estimator) (This)->lpVtbl->CreateVideoMotionEstimator(This,desc,protected_resource_session,riid,video_motion_estimator)
3962#define ID3D12VideoDevice3_CreateVideoMotionVectorHeap(This,desc,protected_resource_session,riid,video_motion_vector_heap) (This)->lpVtbl->CreateVideoMotionVectorHeap(This,desc,protected_resource_session,riid,video_motion_vector_heap)
3963/*** ID3D12VideoDevice2 methods ***/
3964#define ID3D12VideoDevice3_CreateVideoDecoder1(This,desc,protected_resource_session,riid,video_decoder) (This)->lpVtbl->CreateVideoDecoder1(This,desc,protected_resource_session,riid,video_decoder)
3965#define ID3D12VideoDevice3_CreateVideoDecoderHeap1(This,video_decoder_heap_desc,protected_resource_session,riid,video_decoder_heap) (This)->lpVtbl->CreateVideoDecoderHeap1(This,video_decoder_heap_desc,protected_resource_session,riid,video_decoder_heap)
3966#define ID3D12VideoDevice3_CreateVideoProcessor1(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,protected_resource_session,riid,video_processor) (This)->lpVtbl->CreateVideoProcessor1(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,protected_resource_session,riid,video_processor)
3967#define ID3D12VideoDevice3_CreateVideoExtensionCommand(This,desc,creation_parameters,creation_parameters_data_size_in_bytes,protected_resource_session,riid,video_extension_command) (This)->lpVtbl->CreateVideoExtensionCommand(This,desc,creation_parameters,creation_parameters_data_size_in_bytes,protected_resource_session,riid,video_extension_command)
3968#define ID3D12VideoDevice3_ExecuteExtensionCommand(This,extension_command,execution_parameters,execution_parameters_size_in_bytes,output_data,output_data_size_in_bytes) (This)->lpVtbl->ExecuteExtensionCommand(This,extension_command,execution_parameters,execution_parameters_size_in_bytes,output_data,output_data_size_in_bytes)
3969/*** ID3D12VideoDevice3 methods ***/
3970#define ID3D12VideoDevice3_CreateVideoEncoder(This,desc,riid,video_encoder) (This)->lpVtbl->CreateVideoEncoder(This,desc,riid,video_encoder)
3971#define ID3D12VideoDevice3_CreateVideoEncoderHeap(This,desc,riid,video_encoder_heap) (This)->lpVtbl->CreateVideoEncoderHeap(This,desc,riid,video_encoder_heap)
3972#else
3973/*** IUnknown methods ***/
3974static inline HRESULT ID3D12VideoDevice3_QueryInterface(ID3D12VideoDevice3* This,REFIID riid,void **ppvObject) {
3975    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
3976}
3977static inline ULONG ID3D12VideoDevice3_AddRef(ID3D12VideoDevice3* This) {
3978    return This->lpVtbl->AddRef(This);
3979}
3980static inline ULONG ID3D12VideoDevice3_Release(ID3D12VideoDevice3* This) {
3981    return This->lpVtbl->Release(This);
3982}
3983/*** ID3D12VideoDevice methods ***/
3984static inline HRESULT ID3D12VideoDevice3_CheckFeatureSupport(ID3D12VideoDevice3* This,D3D12_FEATURE_VIDEO feature_video,void *feature_support_data,UINT feature_support_data_size) {
3985    return This->lpVtbl->CheckFeatureSupport(This,feature_video,feature_support_data,feature_support_data_size);
3986}
3987static inline HRESULT ID3D12VideoDevice3_CreateVideoDecoder(ID3D12VideoDevice3* This,const D3D12_VIDEO_DECODER_DESC *desc,REFIID riid,void **video_decoder) {
3988    return This->lpVtbl->CreateVideoDecoder(This,desc,riid,video_decoder);
3989}
3990static inline HRESULT ID3D12VideoDevice3_CreateVideoDecoderHeap(ID3D12VideoDevice3* This,const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,REFIID riid,void **video_decoder_heap) {
3991    return This->lpVtbl->CreateVideoDecoderHeap(This,video_decoder_heap_desc,riid,video_decoder_heap);
3992}
3993static inline HRESULT ID3D12VideoDevice3_CreateVideoProcessor(ID3D12VideoDevice3* This,UINT node_mask,const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,UINT input_stream_descs_count,const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,REFIID riid,void **video_processor) {
3994    return This->lpVtbl->CreateVideoProcessor(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,riid,video_processor);
3995}
3996/*** ID3D12VideoDevice1 methods ***/
3997static inline HRESULT ID3D12VideoDevice3_CreateVideoMotionEstimator(ID3D12VideoDevice3* This,const D3D12_VIDEO_MOTION_ESTIMATOR_DESC *desc,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_motion_estimator) {
3998    return This->lpVtbl->CreateVideoMotionEstimator(This,desc,protected_resource_session,riid,video_motion_estimator);
3999}
4000static inline HRESULT ID3D12VideoDevice3_CreateVideoMotionVectorHeap(ID3D12VideoDevice3* This,const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *desc,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_motion_vector_heap) {
4001    return This->lpVtbl->CreateVideoMotionVectorHeap(This,desc,protected_resource_session,riid,video_motion_vector_heap);
4002}
4003/*** ID3D12VideoDevice2 methods ***/
4004static inline HRESULT ID3D12VideoDevice3_CreateVideoDecoder1(ID3D12VideoDevice3* This,const D3D12_VIDEO_DECODER_DESC *desc,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_decoder) {
4005    return This->lpVtbl->CreateVideoDecoder1(This,desc,protected_resource_session,riid,video_decoder);
4006}
4007static inline HRESULT ID3D12VideoDevice3_CreateVideoDecoderHeap1(ID3D12VideoDevice3* This,const D3D12_VIDEO_DECODER_HEAP_DESC *video_decoder_heap_desc,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_decoder_heap) {
4008    return This->lpVtbl->CreateVideoDecoderHeap1(This,video_decoder_heap_desc,protected_resource_session,riid,video_decoder_heap);
4009}
4010static inline HRESULT ID3D12VideoDevice3_CreateVideoProcessor1(ID3D12VideoDevice3* This,UINT node_mask,const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *output_stream_desc,UINT input_stream_descs_count,const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *input_stream_descs,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_processor) {
4011    return This->lpVtbl->CreateVideoProcessor1(This,node_mask,output_stream_desc,input_stream_descs_count,input_stream_descs,protected_resource_session,riid,video_processor);
4012}
4013static inline HRESULT ID3D12VideoDevice3_CreateVideoExtensionCommand(ID3D12VideoDevice3* This,const D3D12_VIDEO_EXTENSION_COMMAND_DESC *desc,const void *creation_parameters,SIZE_T creation_parameters_data_size_in_bytes,ID3D12ProtectedResourceSession *protected_resource_session,REFIID riid,void **video_extension_command) {
4014    return This->lpVtbl->CreateVideoExtensionCommand(This,desc,creation_parameters,creation_parameters_data_size_in_bytes,protected_resource_session,riid,video_extension_command);
4015}
4016static inline HRESULT ID3D12VideoDevice3_ExecuteExtensionCommand(ID3D12VideoDevice3* This,ID3D12VideoExtensionCommand *extension_command,const void *execution_parameters,SIZE_T execution_parameters_size_in_bytes,void *output_data,SIZE_T output_data_size_in_bytes) {
4017    return This->lpVtbl->ExecuteExtensionCommand(This,extension_command,execution_parameters,execution_parameters_size_in_bytes,output_data,output_data_size_in_bytes);
4018}
4019/*** ID3D12VideoDevice3 methods ***/
4020static inline HRESULT ID3D12VideoDevice3_CreateVideoEncoder(ID3D12VideoDevice3* This,const D3D12_VIDEO_ENCODER_DESC *desc,REFIID riid,void **video_encoder) {
4021    return This->lpVtbl->CreateVideoEncoder(This,desc,riid,video_encoder);
4022}
4023static inline HRESULT ID3D12VideoDevice3_CreateVideoEncoderHeap(ID3D12VideoDevice3* This,const D3D12_VIDEO_ENCODER_HEAP_DESC *desc,REFIID riid,void **video_encoder_heap) {
4024    return This->lpVtbl->CreateVideoEncoderHeap(This,desc,riid,video_encoder_heap);
4025}
4026#endif
4027#endif
4028
4029#endif
4030
4031
4032#endif  /* __ID3D12VideoDevice3_INTERFACE_DEFINED__ */
4033
4034typedef enum D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 {
4035    D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_I_FRAME = 0,
4036    D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_P_FRAME = 1,
4037    D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_B_FRAME = 2,
4038    D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME = 3
4039} D3D12_VIDEO_ENCODER_FRAME_TYPE_H264;
4040typedef struct D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264 {
4041    UINT ReconstructedPictureResourceIndex;
4042    WINBOOL IsLongTermReference;
4043    UINT LongTermPictureIdx;
4044    UINT PictureOrderCountNumber;
4045    UINT FrameDecodingOrderNumber;
4046    UINT TemporalLayerIndex;
4047} D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264;
4048typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS {
4049    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_NONE = 0x0,
4050    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES = 0x1
4051} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS;
4052DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS);
4053typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION {
4054    UCHAR memory_management_control_operation;
4055    UINT difference_of_pic_nums_minus1;
4056    UINT long_term_pic_num;
4057    UINT long_term_frame_idx;
4058    UINT max_long_term_frame_idx_plus1;
4059} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION;
4060typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION {
4061    UCHAR modification_of_pic_nums_idc;
4062    UINT abs_diff_pic_num_minus1;
4063    UINT long_term_pic_num;
4064} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION;
4065typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 {
4066    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS Flags;
4067    D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 FrameType;
4068    UINT pic_parameter_set_id;
4069    UINT idr_pic_id;
4070    UINT PictureOrderCountNumber;
4071    UINT FrameDecodingOrderNumber;
4072    UINT TemporalLayerIndex;
4073    UINT List0ReferenceFramesCount;
4074    UINT *pList0ReferenceFrames;
4075    UINT List1ReferenceFramesCount;
4076    UINT *pList1ReferenceFrames;
4077    UINT ReferenceFramesReconPictureDescriptorsCount;
4078    D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264 *pReferenceFramesReconPictureDescriptors;
4079    UCHAR adaptive_ref_pic_marking_mode_flag;
4080    UINT RefPicMarkingOperationsCommandsCount;
4081    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION *pRefPicMarkingOperationsCommands;
4082    UINT List0RefPicModificationsCount;
4083    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION *pList0RefPicModifications;
4084    UINT List1RefPicModificationsCount;
4085    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION *pList1RefPicModifications;
4086    UINT QPMapValuesCount;
4087    INT8 *pRateControlQPMap;
4088} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264;
4089typedef enum D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC {
4090    D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_I_FRAME = 0,
4091    D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_P_FRAME = 1,
4092    D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_B_FRAME = 2,
4093    D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_IDR_FRAME = 3
4094} D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC;
4095typedef struct D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC {
4096    UINT ReconstructedPictureResourceIndex;
4097    WINBOOL IsRefUsedByCurrentPic;
4098    WINBOOL IsLongTermReference;
4099    UINT PictureOrderCountNumber;
4100    UINT TemporalLayerIndex;
4101} D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC;
4102typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS {
4103    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_NONE = 0x0,
4104    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES = 0x1
4105} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS;
4106DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS);
4107typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC {
4108    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags;
4109    D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType;
4110    UINT slice_pic_parameter_set_id;
4111    UINT PictureOrderCountNumber;
4112    UINT TemporalLayerIndex;
4113    UINT List0ReferenceFramesCount;
4114    UINT *pList0ReferenceFrames;
4115    UINT List1ReferenceFramesCount;
4116    UINT *pList1ReferenceFrames;
4117    UINT ReferenceFramesReconPictureDescriptorsCount;
4118    D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC *pReferenceFramesReconPictureDescriptors;
4119    UINT List0RefPicModificationsCount;
4120    UINT *pList0RefPicModifications;
4121    UINT List1RefPicModificationsCount;
4122    UINT *pList1RefPicModifications;
4123    UINT QPMapValuesCount;
4124    INT8 *pRateControlQPMap;
4125} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC;
4126typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA {
4127    UINT DataSize;
4128    __C89_NAMELESS union {
4129        D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 *pH264PicData;
4130        D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC *pHEVCPicData;
4131    } __C89_NAMELESSUNIONNAME;
4132} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA;
4133typedef struct D3D12_VIDEO_ENCODE_REFERENCE_FRAMES {
4134    UINT NumTexture2Ds;
4135    ID3D12Resource **ppTexture2Ds;
4136    UINT *pSubresources;
4137} D3D12_VIDEO_ENCODE_REFERENCE_FRAMES;
4138typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS {
4139    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_NONE = 0x0,
4140    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_USED_AS_REFERENCE_PICTURE = 0x1
4141} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS;
4142DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS);
4143typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC {
4144    UINT IntraRefreshFrameIndex;
4145    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS Flags;
4146    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA PictureControlCodecData;
4147    D3D12_VIDEO_ENCODE_REFERENCE_FRAMES ReferenceFrames;
4148} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC;
4149typedef enum D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS {
4150    D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_NONE = 0x0,
4151    D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_RESOLUTION_CHANGE = 0x1,
4152    D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_RATE_CONTROL_CHANGE = 0x2,
4153    D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_SUBREGION_LAYOUT_CHANGE = 0x4,
4154    D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_REQUEST_INTRA_REFRESH = 0x8,
4155    D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_GOP_SEQUENCE_CHANGE = 0x10
4156} D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS;
4157DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS);
4158typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES {
4159    __C89_NAMELESS union {
4160        UINT MaxBytesPerSlice;
4161        UINT NumberOfCodingUnitsPerSlice;
4162        UINT NumberOfRowsPerSlice;
4163        UINT NumberOfSlicesPerFrame;
4164    } __C89_NAMELESSUNIONNAME;
4165} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES;
4166typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA {
4167    UINT DataSize;
4168    __C89_NAMELESS union {
4169        const D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES *pSlicesPartition_H264;
4170        const D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES *pSlicesPartition_HEVC;
4171    } __C89_NAMELESSUNIONNAME;
4172} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA;
4173typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC {
4174    D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS Flags;
4175    D3D12_VIDEO_ENCODER_INTRA_REFRESH IntraRefreshConfig;
4176    D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl;
4177    D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC PictureTargetResolution;
4178    D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SelectedLayoutMode;
4179    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA FrameSubregionsLayoutData;
4180    D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence;
4181} D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC;
4182typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS {
4183    D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC SequenceControlDesc;
4184    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC PictureControlDesc;
4185    ID3D12Resource *pInputFrame;
4186    UINT InputFrameSubresource;
4187    UINT CurrentFrameBitstreamMetadataSize;
4188} D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS;
4189typedef struct D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM {
4190    ID3D12Resource *pBuffer;
4191    UINT64 FrameStartOffset;
4192} D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM;
4193typedef struct D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE {
4194    ID3D12Resource *pReconstructedPicture;
4195    UINT ReconstructedPictureSubresource;
4196} D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE;
4197typedef struct D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA {
4198    UINT64 bSize;
4199    UINT64 bStartOffset;
4200    UINT64 bHeaderSize;
4201} D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA;
4202typedef enum D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS {
4203    D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_NO_ERROR = 0x0,
4204    D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_CODEC_PICTURE_CONTROL_NOT_SUPPORTED = 0x1,
4205    D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_SUBREGION_LAYOUT_CONFIGURATION_NOT_SUPPORTED = 0x2,
4206    D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_INVALID_REFERENCE_PICTURES = 0x4,
4207    D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_RECONFIGURATION_REQUEST_NOT_SUPPORTED = 0x8,
4208    D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_INVALID_METADATA_BUFFER_SOURCE = 0x10
4209} D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS;
4210DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS);
4211typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS {
4212    UINT64 AverageQP;
4213    UINT64 IntraCodingUnitsCount;
4214    UINT64 InterCodingUnitsCount;
4215    UINT64 SkipCodingUnitsCount;
4216    UINT64 AverageMotionEstimationXDirection;
4217    UINT64 AverageMotionEstimationYDirection;
4218} D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS;
4219typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA {
4220    UINT64 EncodeErrorFlags;
4221    D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS EncodeStats;
4222    UINT64 EncodedBitstreamWrittenBytesCount;
4223    UINT64 WrittenSubregionsCount;
4224} D3D12_VIDEO_ENCODER_OUTPUT_METADATA;
4225typedef struct D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER {
4226    ID3D12Resource *pBuffer;
4227    UINT64 Offset;
4228} D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER;
4229typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS {
4230    D3D12_VIDEO_ENCODER_CODEC EncoderCodec;
4231    D3D12_VIDEO_ENCODER_PROFILE_DESC EncoderProfile;
4232    DXGI_FORMAT EncoderInputFormat;
4233    D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncodedPictureEffectiveResolution;
4234    D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER HWLayoutMetadata;
4235} D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS;
4236typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS {
4237    D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER ResolvedLayoutMetadata;
4238} D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS;
4239typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS {
4240    D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM Bitstream;
4241    D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE ReconstructedPicture;
4242    D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER EncoderOutputMetadata;
4243} D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS;
4244/*****************************************************************************
4245 * ID3D12VideoEncodeCommandList2 interface
4246 */
4247#ifndef __ID3D12VideoEncodeCommandList2_INTERFACE_DEFINED__
4248#define __ID3D12VideoEncodeCommandList2_INTERFACE_DEFINED__
4249
4250DEFINE_GUID(IID_ID3D12VideoEncodeCommandList2, 0x895491e2, 0xe701, 0x46a9, 0x9a,0x1f, 0x8d,0x34,0x80,0xed,0x86,0x7a);
4251#if defined(__cplusplus) && !defined(CINTERFACE)
4252MIDL_INTERFACE("895491e2-e701-46a9-9a1f-8d3480ed867a")
4253ID3D12VideoEncodeCommandList2 : public ID3D12VideoEncodeCommandList1
4254{
4255    virtual void STDMETHODCALLTYPE EncodeFrame(
4256        ID3D12VideoEncoder *encoder,
4257        ID3D12VideoEncoderHeap *heap,
4258        const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS *input_arguments,
4259        const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS *output_arguments) = 0;
4260
4261    virtual void STDMETHODCALLTYPE ResolveEncoderOutputMetadata(
4262        const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS *input_arguments,
4263        const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS *output_arguments) = 0;
4264
4265};
4266#ifdef __CRT_UUID_DECL
4267__CRT_UUID_DECL(ID3D12VideoEncodeCommandList2, 0x895491e2, 0xe701, 0x46a9, 0x9a,0x1f, 0x8d,0x34,0x80,0xed,0x86,0x7a)
4268#endif
4269#else
4270typedef struct ID3D12VideoEncodeCommandList2Vtbl {
4271    BEGIN_INTERFACE
4272
4273    /*** IUnknown methods ***/
4274    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
4275        ID3D12VideoEncodeCommandList2 *This,
4276        REFIID riid,
4277        void **ppvObject);
4278
4279    ULONG (STDMETHODCALLTYPE *AddRef)(
4280        ID3D12VideoEncodeCommandList2 *This);
4281
4282    ULONG (STDMETHODCALLTYPE *Release)(
4283        ID3D12VideoEncodeCommandList2 *This);
4284
4285    /*** ID3D12Object methods ***/
4286    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
4287        ID3D12VideoEncodeCommandList2 *This,
4288        REFGUID guid,
4289        UINT *data_size,
4290        void *data);
4291
4292    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
4293        ID3D12VideoEncodeCommandList2 *This,
4294        REFGUID guid,
4295        UINT data_size,
4296        const void *data);
4297
4298    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
4299        ID3D12VideoEncodeCommandList2 *This,
4300        REFGUID guid,
4301        const IUnknown *data);
4302
4303    HRESULT (STDMETHODCALLTYPE *SetName)(
4304        ID3D12VideoEncodeCommandList2 *This,
4305        const WCHAR *name);
4306
4307    /*** ID3D12DeviceChild methods ***/
4308    HRESULT (STDMETHODCALLTYPE *GetDevice)(
4309        ID3D12VideoEncodeCommandList2 *This,
4310        REFIID riid,
4311        void **device);
4312
4313    /*** ID3D12CommandList methods ***/
4314    D3D12_COMMAND_LIST_TYPE (STDMETHODCALLTYPE *GetType)(
4315        ID3D12VideoEncodeCommandList2 *This);
4316
4317    /*** ID3D12VideoEncodeCommandList methods ***/
4318    HRESULT (STDMETHODCALLTYPE *Close)(
4319        ID3D12VideoEncodeCommandList2 *This);
4320
4321    HRESULT (STDMETHODCALLTYPE *Reset)(
4322        ID3D12VideoEncodeCommandList2 *This,
4323        ID3D12CommandAllocator *allocator);
4324
4325    void (STDMETHODCALLTYPE *ClearState)(
4326        ID3D12VideoEncodeCommandList2 *This);
4327
4328    void (STDMETHODCALLTYPE *ResourceBarrier)(
4329        ID3D12VideoEncodeCommandList2 *This,
4330        UINT barriers_count,
4331        const D3D12_RESOURCE_BARRIER *barriers);
4332
4333    void (STDMETHODCALLTYPE *DiscardResource)(
4334        ID3D12VideoEncodeCommandList2 *This,
4335        ID3D12Resource *resource,
4336        const D3D12_DISCARD_REGION *region);
4337
4338    void (STDMETHODCALLTYPE *BeginQuery)(
4339        ID3D12VideoEncodeCommandList2 *This,
4340        ID3D12QueryHeap *query_heap,
4341        D3D12_QUERY_TYPE type,
4342        UINT index);
4343
4344    void (STDMETHODCALLTYPE *EndQuery)(
4345        ID3D12VideoEncodeCommandList2 *This,
4346        ID3D12QueryHeap *query_heap,
4347        D3D12_QUERY_TYPE type,
4348        UINT index);
4349
4350    void (STDMETHODCALLTYPE *ResolveQueryData)(
4351        ID3D12VideoEncodeCommandList2 *This,
4352        ID3D12QueryHeap *query_heap,
4353        D3D12_QUERY_TYPE type,
4354        UINT start_index,
4355        UINT queries_count,
4356        ID3D12Resource *destination_buffer,
4357        UINT64 aligned_destination_buffer_offset);
4358
4359    void (STDMETHODCALLTYPE *SetPredication)(
4360        ID3D12VideoEncodeCommandList2 *This,
4361        ID3D12Resource *buffer,
4362        UINT64 aligned_buffer_offset,
4363        D3D12_PREDICATION_OP operation);
4364
4365    void (STDMETHODCALLTYPE *SetMarker)(
4366        ID3D12VideoEncodeCommandList2 *This,
4367        UINT metadata,
4368        const void *data,
4369        UINT size);
4370
4371    void (STDMETHODCALLTYPE *BeginEvent)(
4372        ID3D12VideoEncodeCommandList2 *This,
4373        UINT metadata,
4374        const void *data,
4375        UINT size);
4376
4377    void (STDMETHODCALLTYPE *EndEvent)(
4378        ID3D12VideoEncodeCommandList2 *This);
4379
4380    void (STDMETHODCALLTYPE *EstimateMotion)(
4381        ID3D12VideoEncodeCommandList2 *This,
4382        ID3D12VideoMotionEstimator *motion_estimator,
4383        const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *output_arguments,
4384        const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *input_arguments);
4385
4386    void (STDMETHODCALLTYPE *ResolveMotionVectorHeap)(
4387        ID3D12VideoEncodeCommandList2 *This,
4388        const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *output_arguments,
4389        const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *input_arguments);
4390
4391    void (STDMETHODCALLTYPE *WriteBufferImmediate)(
4392        ID3D12VideoEncodeCommandList2 *This,
4393        UINT count,
4394        const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *params,
4395        const D3D12_WRITEBUFFERIMMEDIATE_MODE *modes);
4396
4397    void (STDMETHODCALLTYPE *SetProtectedResourceSession)(
4398        ID3D12VideoEncodeCommandList2 *This,
4399        ID3D12ProtectedResourceSession *protected_resource_session);
4400
4401    /*** ID3D12VideoEncodeCommandList1 methods ***/
4402    void (STDMETHODCALLTYPE *InitializeExtensionCommand)(
4403        ID3D12VideoEncodeCommandList2 *This,
4404        ID3D12VideoExtensionCommand *extension_command,
4405        const void *initialization_parameters,
4406        SIZE_T initialization_parameters_size_in_bytes);
4407
4408    void (STDMETHODCALLTYPE *ExecuteExtensionCommand)(
4409        ID3D12VideoEncodeCommandList2 *This,
4410        ID3D12VideoExtensionCommand *extension_command,
4411        const void *execution_parameters,
4412        SIZE_T execution_parameters_size_in_bytes);
4413
4414    /*** ID3D12VideoEncodeCommandList2 methods ***/
4415    void (STDMETHODCALLTYPE *EncodeFrame)(
4416        ID3D12VideoEncodeCommandList2 *This,
4417        ID3D12VideoEncoder *encoder,
4418        ID3D12VideoEncoderHeap *heap,
4419        const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS *input_arguments,
4420        const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS *output_arguments);
4421
4422    void (STDMETHODCALLTYPE *ResolveEncoderOutputMetadata)(
4423        ID3D12VideoEncodeCommandList2 *This,
4424        const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS *input_arguments,
4425        const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS *output_arguments);
4426
4427    END_INTERFACE
4428} ID3D12VideoEncodeCommandList2Vtbl;
4429
4430interface ID3D12VideoEncodeCommandList2 {
4431    CONST_VTBL ID3D12VideoEncodeCommandList2Vtbl* lpVtbl;
4432};
4433
4434#ifdef COBJMACROS
4435#ifndef WIDL_C_INLINE_WRAPPERS
4436/*** IUnknown methods ***/
4437#define ID3D12VideoEncodeCommandList2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
4438#define ID3D12VideoEncodeCommandList2_AddRef(This) (This)->lpVtbl->AddRef(This)
4439#define ID3D12VideoEncodeCommandList2_Release(This) (This)->lpVtbl->Release(This)
4440/*** ID3D12Object methods ***/
4441#define ID3D12VideoEncodeCommandList2_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
4442#define ID3D12VideoEncodeCommandList2_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
4443#define ID3D12VideoEncodeCommandList2_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
4444#define ID3D12VideoEncodeCommandList2_SetName(This,name) (This)->lpVtbl->SetName(This,name)
4445/*** ID3D12DeviceChild methods ***/
4446#define ID3D12VideoEncodeCommandList2_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
4447/*** ID3D12CommandList methods ***/
4448#define ID3D12VideoEncodeCommandList2_GetType(This) (This)->lpVtbl->GetType(This)
4449/*** ID3D12VideoEncodeCommandList methods ***/
4450#define ID3D12VideoEncodeCommandList2_Close(This) (This)->lpVtbl->Close(This)
4451#define ID3D12VideoEncodeCommandList2_Reset(This,allocator) (This)->lpVtbl->Reset(This,allocator)
4452#define ID3D12VideoEncodeCommandList2_ClearState(This) (This)->lpVtbl->ClearState(This)
4453#define ID3D12VideoEncodeCommandList2_ResourceBarrier(This,barriers_count,barriers) (This)->lpVtbl->ResourceBarrier(This,barriers_count,barriers)
4454#define ID3D12VideoEncodeCommandList2_DiscardResource(This,resource,region) (This)->lpVtbl->DiscardResource(This,resource,region)
4455#define ID3D12VideoEncodeCommandList2_BeginQuery(This,query_heap,type,index) (This)->lpVtbl->BeginQuery(This,query_heap,type,index)
4456#define ID3D12VideoEncodeCommandList2_EndQuery(This,query_heap,type,index) (This)->lpVtbl->EndQuery(This,query_heap,type,index)
4457#define ID3D12VideoEncodeCommandList2_ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset) (This)->lpVtbl->ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset)
4458#define ID3D12VideoEncodeCommandList2_SetPredication(This,buffer,aligned_buffer_offset,operation) (This)->lpVtbl->SetPredication(This,buffer,aligned_buffer_offset,operation)
4459#define ID3D12VideoEncodeCommandList2_SetMarker(This,metadata,data,size) (This)->lpVtbl->SetMarker(This,metadata,data,size)
4460#define ID3D12VideoEncodeCommandList2_BeginEvent(This,metadata,data,size) (This)->lpVtbl->BeginEvent(This,metadata,data,size)
4461#define ID3D12VideoEncodeCommandList2_EndEvent(This) (This)->lpVtbl->EndEvent(This)
4462#define ID3D12VideoEncodeCommandList2_EstimateMotion(This,motion_estimator,output_arguments,input_arguments) (This)->lpVtbl->EstimateMotion(This,motion_estimator,output_arguments,input_arguments)
4463#define ID3D12VideoEncodeCommandList2_ResolveMotionVectorHeap(This,output_arguments,input_arguments) (This)->lpVtbl->ResolveMotionVectorHeap(This,output_arguments,input_arguments)
4464#define ID3D12VideoEncodeCommandList2_WriteBufferImmediate(This,count,params,modes) (This)->lpVtbl->WriteBufferImmediate(This,count,params,modes)
4465#define ID3D12VideoEncodeCommandList2_SetProtectedResourceSession(This,protected_resource_session) (This)->lpVtbl->SetProtectedResourceSession(This,protected_resource_session)
4466/*** ID3D12VideoEncodeCommandList1 methods ***/
4467#define ID3D12VideoEncodeCommandList2_InitializeExtensionCommand(This,extension_command,initialization_parameters,initialization_parameters_size_in_bytes) (This)->lpVtbl->InitializeExtensionCommand(This,extension_command,initialization_parameters,initialization_parameters_size_in_bytes)
4468#define ID3D12VideoEncodeCommandList2_ExecuteExtensionCommand(This,extension_command,execution_parameters,execution_parameters_size_in_bytes) (This)->lpVtbl->ExecuteExtensionCommand(This,extension_command,execution_parameters,execution_parameters_size_in_bytes)
4469/*** ID3D12VideoEncodeCommandList2 methods ***/
4470#define ID3D12VideoEncodeCommandList2_EncodeFrame(This,encoder,heap,input_arguments,output_arguments) (This)->lpVtbl->EncodeFrame(This,encoder,heap,input_arguments,output_arguments)
4471#define ID3D12VideoEncodeCommandList2_ResolveEncoderOutputMetadata(This,input_arguments,output_arguments) (This)->lpVtbl->ResolveEncoderOutputMetadata(This,input_arguments,output_arguments)
4472#else
4473/*** IUnknown methods ***/
4474static inline HRESULT ID3D12VideoEncodeCommandList2_QueryInterface(ID3D12VideoEncodeCommandList2* This,REFIID riid,void **ppvObject) {
4475    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
4476}
4477static inline ULONG ID3D12VideoEncodeCommandList2_AddRef(ID3D12VideoEncodeCommandList2* This) {
4478    return This->lpVtbl->AddRef(This);
4479}
4480static inline ULONG ID3D12VideoEncodeCommandList2_Release(ID3D12VideoEncodeCommandList2* This) {
4481    return This->lpVtbl->Release(This);
4482}
4483/*** ID3D12Object methods ***/
4484static inline HRESULT ID3D12VideoEncodeCommandList2_GetPrivateData(ID3D12VideoEncodeCommandList2* This,REFGUID guid,UINT *data_size,void *data) {
4485    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
4486}
4487static inline HRESULT ID3D12VideoEncodeCommandList2_SetPrivateData(ID3D12VideoEncodeCommandList2* This,REFGUID guid,UINT data_size,const void *data) {
4488    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
4489}
4490static inline HRESULT ID3D12VideoEncodeCommandList2_SetPrivateDataInterface(ID3D12VideoEncodeCommandList2* This,REFGUID guid,const IUnknown *data) {
4491    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
4492}
4493static inline HRESULT ID3D12VideoEncodeCommandList2_SetName(ID3D12VideoEncodeCommandList2* This,const WCHAR *name) {
4494    return This->lpVtbl->SetName(This,name);
4495}
4496/*** ID3D12DeviceChild methods ***/
4497static inline HRESULT ID3D12VideoEncodeCommandList2_GetDevice(ID3D12VideoEncodeCommandList2* This,REFIID riid,void **device) {
4498    return This->lpVtbl->GetDevice(This,riid,device);
4499}
4500/*** ID3D12CommandList methods ***/
4501static inline D3D12_COMMAND_LIST_TYPE ID3D12VideoEncodeCommandList2_GetType(ID3D12VideoEncodeCommandList2* This) {
4502    return This->lpVtbl->GetType(This);
4503}
4504/*** ID3D12VideoEncodeCommandList methods ***/
4505static inline HRESULT ID3D12VideoEncodeCommandList2_Close(ID3D12VideoEncodeCommandList2* This) {
4506    return This->lpVtbl->Close(This);
4507}
4508static inline HRESULT ID3D12VideoEncodeCommandList2_Reset(ID3D12VideoEncodeCommandList2* This,ID3D12CommandAllocator *allocator) {
4509    return This->lpVtbl->Reset(This,allocator);
4510}
4511static inline void ID3D12VideoEncodeCommandList2_ClearState(ID3D12VideoEncodeCommandList2* This) {
4512    This->lpVtbl->ClearState(This);
4513}
4514static inline void ID3D12VideoEncodeCommandList2_ResourceBarrier(ID3D12VideoEncodeCommandList2* This,UINT barriers_count,const D3D12_RESOURCE_BARRIER *barriers) {
4515    This->lpVtbl->ResourceBarrier(This,barriers_count,barriers);
4516}
4517static inline void ID3D12VideoEncodeCommandList2_DiscardResource(ID3D12VideoEncodeCommandList2* This,ID3D12Resource *resource,const D3D12_DISCARD_REGION *region) {
4518    This->lpVtbl->DiscardResource(This,resource,region);
4519}
4520static inline void ID3D12VideoEncodeCommandList2_BeginQuery(ID3D12VideoEncodeCommandList2* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT index) {
4521    This->lpVtbl->BeginQuery(This,query_heap,type,index);
4522}
4523static inline void ID3D12VideoEncodeCommandList2_EndQuery(ID3D12VideoEncodeCommandList2* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT index) {
4524    This->lpVtbl->EndQuery(This,query_heap,type,index);
4525}
4526static inline void ID3D12VideoEncodeCommandList2_ResolveQueryData(ID3D12VideoEncodeCommandList2* This,ID3D12QueryHeap *query_heap,D3D12_QUERY_TYPE type,UINT start_index,UINT queries_count,ID3D12Resource *destination_buffer,UINT64 aligned_destination_buffer_offset) {
4527    This->lpVtbl->ResolveQueryData(This,query_heap,type,start_index,queries_count,destination_buffer,aligned_destination_buffer_offset);
4528}
4529static inline void ID3D12VideoEncodeCommandList2_SetPredication(ID3D12VideoEncodeCommandList2* This,ID3D12Resource *buffer,UINT64 aligned_buffer_offset,D3D12_PREDICATION_OP operation) {
4530    This->lpVtbl->SetPredication(This,buffer,aligned_buffer_offset,operation);
4531}
4532static inline void ID3D12VideoEncodeCommandList2_SetMarker(ID3D12VideoEncodeCommandList2* This,UINT metadata,const void *data,UINT size) {
4533    This->lpVtbl->SetMarker(This,metadata,data,size);
4534}
4535static inline void ID3D12VideoEncodeCommandList2_BeginEvent(ID3D12VideoEncodeCommandList2* This,UINT metadata,const void *data,UINT size) {
4536    This->lpVtbl->BeginEvent(This,metadata,data,size);
4537}
4538static inline void ID3D12VideoEncodeCommandList2_EndEvent(ID3D12VideoEncodeCommandList2* This) {
4539    This->lpVtbl->EndEvent(This);
4540}
4541static inline void ID3D12VideoEncodeCommandList2_EstimateMotion(ID3D12VideoEncodeCommandList2* This,ID3D12VideoMotionEstimator *motion_estimator,const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *output_arguments,const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *input_arguments) {
4542    This->lpVtbl->EstimateMotion(This,motion_estimator,output_arguments,input_arguments);
4543}
4544static inline void ID3D12VideoEncodeCommandList2_ResolveMotionVectorHeap(ID3D12VideoEncodeCommandList2* This,const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *output_arguments,const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *input_arguments) {
4545    This->lpVtbl->ResolveMotionVectorHeap(This,output_arguments,input_arguments);
4546}
4547static inline void ID3D12VideoEncodeCommandList2_WriteBufferImmediate(ID3D12VideoEncodeCommandList2* This,UINT count,const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *params,const D3D12_WRITEBUFFERIMMEDIATE_MODE *modes) {
4548    This->lpVtbl->WriteBufferImmediate(This,count,params,modes);
4549}
4550static inline void ID3D12VideoEncodeCommandList2_SetProtectedResourceSession(ID3D12VideoEncodeCommandList2* This,ID3D12ProtectedResourceSession *protected_resource_session) {
4551    This->lpVtbl->SetProtectedResourceSession(This,protected_resource_session);
4552}
4553/*** ID3D12VideoEncodeCommandList1 methods ***/
4554static inline void ID3D12VideoEncodeCommandList2_InitializeExtensionCommand(ID3D12VideoEncodeCommandList2* This,ID3D12VideoExtensionCommand *extension_command,const void *initialization_parameters,SIZE_T initialization_parameters_size_in_bytes) {
4555    This->lpVtbl->InitializeExtensionCommand(This,extension_command,initialization_parameters,initialization_parameters_size_in_bytes);
4556}
4557static inline void ID3D12VideoEncodeCommandList2_ExecuteExtensionCommand(ID3D12VideoEncodeCommandList2* This,ID3D12VideoExtensionCommand *extension_command,const void *execution_parameters,SIZE_T execution_parameters_size_in_bytes) {
4558    This->lpVtbl->ExecuteExtensionCommand(This,extension_command,execution_parameters,execution_parameters_size_in_bytes);
4559}
4560/*** ID3D12VideoEncodeCommandList2 methods ***/
4561static inline void ID3D12VideoEncodeCommandList2_EncodeFrame(ID3D12VideoEncodeCommandList2* This,ID3D12VideoEncoder *encoder,ID3D12VideoEncoderHeap *heap,const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS *input_arguments,const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS *output_arguments) {
4562    This->lpVtbl->EncodeFrame(This,encoder,heap,input_arguments,output_arguments);
4563}
4564static inline void ID3D12VideoEncodeCommandList2_ResolveEncoderOutputMetadata(ID3D12VideoEncodeCommandList2* This,const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS *input_arguments,const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS *output_arguments) {
4565    This->lpVtbl->ResolveEncoderOutputMetadata(This,input_arguments,output_arguments);
4566}
4567#endif
4568#endif
4569
4570#endif
4571
4572
4573#endif  /* __ID3D12VideoEncodeCommandList2_INTERFACE_DEFINED__ */
4574
4575/* Begin additional prototypes for all interfaces */
4576
4577
4578/* End additional prototypes */
4579
4580#ifdef __cplusplus
4581}
4582#endif
4583
4584#endif /* __d3d12video_h__ */