Win32 API 日本語リファレンス
ホームMedia.MediaFoundation › D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA

D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA

構造体
サイズx64: 1792 バイト / x86: 1776 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
FlagsD3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS4+0+0ピクチャ制御の各種オプションを示すD3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS。
FrameTypeD3D12_VIDEO_ENCODER_AV1_FRAME_TYPE4+4+4符号化するフレームの種別を示すD3D12_VIDEO_ENCODER_AV1_FRAME_TYPE。
CompoundPredictionTypeD3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE4+8+8複合予測の種別を示すD3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE。
InterpolationFilterD3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS4+12+12動き補償の補間フィルタを示すD3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS。
FrameRestorationConfigD3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG24+16+16フレーム復元フィルタ設定を示すD3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG。
TxModeD3D12_VIDEO_ENCODER_AV1_TX_MODE4+40+40変換モードを示すD3D12_VIDEO_ENCODER_AV1_TX_MODE。
SuperResDenominatorDWORD4+44+44スーパー解像度のスケーリング分母。解像度復元の倍率を表す。
OrderHintDWORD4+48+48このフレームの順序ヒント値。
PictureIndexDWORD4+52+52このフレームの識別インデックス。
TemporalLayerIndexPlus1DWORD4+56+56時間レイヤーインデックスに1を加えた値。0は未指定。
SpatialLayerIndexPlus1DWORD4+60+60空間レイヤーインデックスに1を加えた値。0は未指定。
ReferenceFramesReconPictureDescriptorsD3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR512+64+64参照フレームの再構成ピクチャ記述子配列の先頭。
ReferenceIndicesDWORD28+576+576各参照スロットに割り当てる参照ピクチャのインデックス配列の先頭。
PrimaryRefFrameDWORD4+604+604コンテキスト継承元となる主参照フレームのインデックス。
RefreshFrameFlagsDWORD4+608+608符号化後に更新する参照スロットをビットで示す値。
LoopFilterD3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG144+616+616ループフィルタ設定を示すD3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG。
LoopFilterDeltaD3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG24+760+760ループフィルタデルタ設定を示すD3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG。
QuantizationD3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG80+784+784量子化設定を示すD3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG。
QuantizationDeltaD3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG16+864+864量子化デルタ設定を示すD3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG。
CDEFD3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG272+880+880CDEFフィルタ設定を示すD3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG。
QPMapValuesCountDWORD4+1152+1152pRateControlQPMapが指すQPマップ値の個数。
pRateControlQPMapSHORT*8/4+1160+1156ブロック単位のQP指定マップへのポインタ(SHORT配列)。NULL可。
CustomSegmentationD3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG608+1168+1160カスタムセグメンテーション設定を示すD3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG。
CustomSegmentsMapD3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP16/8+1776+1768カスタムセグメントマップを示すD3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP。

各言語での定義

#include <windows.h>

// D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG  (x64 24 / x86 24 バイト)
typedef struct D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG {
    D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE FrameRestorationType[3];
    D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE LoopRestorationPixelSize[3];
} D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG;

// D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO  (x64 40 / x86 40 バイト)
typedef struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO {
    D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION TransformationType;
    INT TransformationMatrix[8];
    BOOL InvalidAffineSet;
} D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO;

// D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR  (x64 64 / x86 64 バイト)
typedef struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR {
    DWORD ReconstructedPictureResourceIndex;
    DWORD TemporalLayerIndexPlus1;
    DWORD SpatialLayerIndexPlus1;
    D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE FrameType;
    D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO WarpedMotionInfo;
    DWORD OrderHint;
    DWORD PictureIndex;
} D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR;

// D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG  (x64 144 / x86 144 バイト)
typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG {
    ULONGLONG LoopFilterLevel[2];
    ULONGLONG LoopFilterLevelU;
    ULONGLONG LoopFilterLevelV;
    ULONGLONG LoopFilterSharpnessLevel;
    ULONGLONG LoopFilterDeltaEnabled;
    ULONGLONG UpdateRefDelta;
    LONGLONG RefDeltas[8];
    ULONGLONG UpdateModeDelta;
    LONGLONG ModeDeltas[2];
} D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG;

// D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG  (x64 24 / x86 24 バイト)
typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG {
    ULONGLONG DeltaLFPresent;
    ULONGLONG DeltaLFMulti;
    ULONGLONG DeltaLFRes;
} D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG;

// D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG  (x64 80 / x86 80 バイト)
typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG {
    ULONGLONG BaseQIndex;
    LONGLONG YDCDeltaQ;
    LONGLONG UDCDeltaQ;
    LONGLONG UACDeltaQ;
    LONGLONG VDCDeltaQ;
    LONGLONG VACDeltaQ;
    ULONGLONG UsingQMatrix;
    ULONGLONG QMY;
    ULONGLONG QMU;
    ULONGLONG QMV;
} D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG;

// D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG  (x64 16 / x86 16 バイト)
typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG {
    ULONGLONG DeltaQPresent;
    ULONGLONG DeltaQRes;
} D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG;

// D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG  (x64 272 / x86 272 バイト)
typedef struct D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG {
    ULONGLONG CdefBits;
    ULONGLONG CdefDampingMinus3;
    ULONGLONG CdefYPriStrength[8];
    ULONGLONG CdefUVPriStrength[8];
    ULONGLONG CdefYSecStrength[8];
    ULONGLONG CdefUVSecStrength[8];
} D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG;

// D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA  (x64 72 / x86 72 バイト)
typedef struct D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA {
    ULONGLONG EnabledFeatures;
    LONGLONG FeatureValue[8];
} D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA;

// D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG  (x64 608 / x86 608 バイト)
typedef struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG {
    ULONGLONG UpdateMap;
    ULONGLONG TemporalUpdate;
    ULONGLONG UpdateData;
    ULONGLONG NumSegments;
    D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA SegmentsData[8];
} D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG;

// D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP  (x64 16 / x86 8 バイト)
typedef struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP {
    DWORD SegmentsMapByteSize;
    BYTE* pSegmentsMap;
} D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP;

// D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA  (x64 1792 / x86 1776 バイト)
typedef struct D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA {
    D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS Flags;
    D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE FrameType;
    D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE CompoundPredictionType;
    D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS InterpolationFilter;
    D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG FrameRestorationConfig;
    D3D12_VIDEO_ENCODER_AV1_TX_MODE TxMode;
    DWORD SuperResDenominator;
    DWORD OrderHint;
    DWORD PictureIndex;
    DWORD TemporalLayerIndexPlus1;
    DWORD SpatialLayerIndexPlus1;
    D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR ReferenceFramesReconPictureDescriptors[8];
    DWORD ReferenceIndices[7];
    DWORD PrimaryRefFrame;
    DWORD RefreshFrameFlags;
    D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG LoopFilter;
    D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG LoopFilterDelta;
    D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG Quantization;
    D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG QuantizationDelta;
    D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG CDEF;
    DWORD QPMapValuesCount;
    SHORT* pRateControlQPMap;
    D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG CustomSegmentation;
    D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP CustomSegmentsMap;
} D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public int[] FrameRestorationType;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public int[] LoopRestorationPixelSize;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO
{
    public int TransformationType;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public int[] TransformationMatrix;
    [MarshalAs(UnmanagedType.Bool)] public bool InvalidAffineSet;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR
{
    public uint ReconstructedPictureResourceIndex;
    public uint TemporalLayerIndexPlus1;
    public uint SpatialLayerIndexPlus1;
    public int FrameType;
    public D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO WarpedMotionInfo;
    public uint OrderHint;
    public uint PictureIndex;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public ulong[] LoopFilterLevel;
    public ulong LoopFilterLevelU;
    public ulong LoopFilterLevelV;
    public ulong LoopFilterSharpnessLevel;
    public ulong LoopFilterDeltaEnabled;
    public ulong UpdateRefDelta;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public long[] RefDeltas;
    public ulong UpdateModeDelta;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public long[] ModeDeltas;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG
{
    public ulong DeltaLFPresent;
    public ulong DeltaLFMulti;
    public ulong DeltaLFRes;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG
{
    public ulong BaseQIndex;
    public long YDCDeltaQ;
    public long UDCDeltaQ;
    public long UACDeltaQ;
    public long VDCDeltaQ;
    public long VACDeltaQ;
    public ulong UsingQMatrix;
    public ulong QMY;
    public ulong QMU;
    public ulong QMV;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG
{
    public ulong DeltaQPresent;
    public ulong DeltaQRes;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG
{
    public ulong CdefBits;
    public ulong CdefDampingMinus3;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public ulong[] CdefYPriStrength;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public ulong[] CdefUVPriStrength;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public ulong[] CdefYSecStrength;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public ulong[] CdefUVSecStrength;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA
{
    public ulong EnabledFeatures;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public long[] FeatureValue;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG
{
    public ulong UpdateMap;
    public ulong TemporalUpdate;
    public ulong UpdateData;
    public ulong NumSegments;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA[] SegmentsData;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP
{
    public uint SegmentsMapByteSize;
    public IntPtr pSegmentsMap;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA
{
    public int Flags;
    public int FrameType;
    public int CompoundPredictionType;
    public int InterpolationFilter;
    public D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG FrameRestorationConfig;
    public int TxMode;
    public uint SuperResDenominator;
    public uint OrderHint;
    public uint PictureIndex;
    public uint TemporalLayerIndexPlus1;
    public uint SpatialLayerIndexPlus1;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR[] ReferenceFramesReconPictureDescriptors;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)] public uint[] ReferenceIndices;
    public uint PrimaryRefFrame;
    public uint RefreshFrameFlags;
    public D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG LoopFilter;
    public D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG LoopFilterDelta;
    public D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG Quantization;
    public D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG QuantizationDelta;
    public D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG CDEF;
    public uint QPMapValuesCount;
    public IntPtr pRateControlQPMap;
    public D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG CustomSegmentation;
    public D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP CustomSegmentsMap;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Public FrameRestorationType() As Integer
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Public LoopRestorationPixelSize() As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO
    Public TransformationType As Integer
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public TransformationMatrix() As Integer
    <MarshalAs(UnmanagedType.Bool)> Public InvalidAffineSet As Boolean
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR
    Public ReconstructedPictureResourceIndex As UInteger
    Public TemporalLayerIndexPlus1 As UInteger
    Public SpatialLayerIndexPlus1 As UInteger
    Public FrameType As Integer
    Public WarpedMotionInfo As D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO
    Public OrderHint As UInteger
    Public PictureIndex As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public LoopFilterLevel() As ULong
    Public LoopFilterLevelU As ULong
    Public LoopFilterLevelV As ULong
    Public LoopFilterSharpnessLevel As ULong
    Public LoopFilterDeltaEnabled As ULong
    Public UpdateRefDelta As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public RefDeltas() As Long
    Public UpdateModeDelta As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public ModeDeltas() As Long
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG
    Public DeltaLFPresent As ULong
    Public DeltaLFMulti As ULong
    Public DeltaLFRes As ULong
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG
    Public BaseQIndex As ULong
    Public YDCDeltaQ As Long
    Public UDCDeltaQ As Long
    Public UACDeltaQ As Long
    Public VDCDeltaQ As Long
    Public VACDeltaQ As Long
    Public UsingQMatrix As ULong
    Public QMY As ULong
    Public QMU As ULong
    Public QMV As ULong
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG
    Public DeltaQPresent As ULong
    Public DeltaQRes As ULong
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG
    Public CdefBits As ULong
    Public CdefDampingMinus3 As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public CdefYPriStrength() As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public CdefUVPriStrength() As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public CdefYSecStrength() As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public CdefUVSecStrength() As ULong
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA
    Public EnabledFeatures As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public FeatureValue() As Long
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG
    Public UpdateMap As ULong
    Public TemporalUpdate As ULong
    Public UpdateData As ULong
    Public NumSegments As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public SegmentsData() As D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP
    Public SegmentsMapByteSize As UInteger
    Public pSegmentsMap As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA
    Public Flags As Integer
    Public FrameType As Integer
    Public CompoundPredictionType As Integer
    Public InterpolationFilter As Integer
    Public FrameRestorationConfig As D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG
    Public TxMode As Integer
    Public SuperResDenominator As UInteger
    Public OrderHint As UInteger
    Public PictureIndex As UInteger
    Public TemporalLayerIndexPlus1 As UInteger
    Public SpatialLayerIndexPlus1 As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public ReferenceFramesReconPictureDescriptors() As D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=7)> Public ReferenceIndices() As UInteger
    Public PrimaryRefFrame As UInteger
    Public RefreshFrameFlags As UInteger
    Public LoopFilter As D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG
    Public LoopFilterDelta As D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG
    Public Quantization As D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG
    Public QuantizationDelta As D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG
    Public CDEF As D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG
    Public QPMapValuesCount As UInteger
    Public pRateControlQPMap As IntPtr
    Public CustomSegmentation As D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG
    Public CustomSegmentsMap As D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP
End Structure
import ctypes
from ctypes import wintypes

class D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG(ctypes.Structure):
    _fields_ = [
        ("FrameRestorationType", ctypes.c_int * 3),
        ("LoopRestorationPixelSize", ctypes.c_int * 3),
    ]

class D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO(ctypes.Structure):
    _fields_ = [
        ("TransformationType", ctypes.c_int),
        ("TransformationMatrix", ctypes.c_int * 8),
        ("InvalidAffineSet", wintypes.BOOL),
    ]

class D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR(ctypes.Structure):
    _fields_ = [
        ("ReconstructedPictureResourceIndex", wintypes.DWORD),
        ("TemporalLayerIndexPlus1", wintypes.DWORD),
        ("SpatialLayerIndexPlus1", wintypes.DWORD),
        ("FrameType", ctypes.c_int),
        ("WarpedMotionInfo", D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO),
        ("OrderHint", wintypes.DWORD),
        ("PictureIndex", wintypes.DWORD),
    ]

class D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG(ctypes.Structure):
    _fields_ = [
        ("LoopFilterLevel", ctypes.c_ulonglong * 2),
        ("LoopFilterLevelU", ctypes.c_ulonglong),
        ("LoopFilterLevelV", ctypes.c_ulonglong),
        ("LoopFilterSharpnessLevel", ctypes.c_ulonglong),
        ("LoopFilterDeltaEnabled", ctypes.c_ulonglong),
        ("UpdateRefDelta", ctypes.c_ulonglong),
        ("RefDeltas", ctypes.c_longlong * 8),
        ("UpdateModeDelta", ctypes.c_ulonglong),
        ("ModeDeltas", ctypes.c_longlong * 2),
    ]

class D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG(ctypes.Structure):
    _fields_ = [
        ("DeltaLFPresent", ctypes.c_ulonglong),
        ("DeltaLFMulti", ctypes.c_ulonglong),
        ("DeltaLFRes", ctypes.c_ulonglong),
    ]

class D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG(ctypes.Structure):
    _fields_ = [
        ("BaseQIndex", ctypes.c_ulonglong),
        ("YDCDeltaQ", ctypes.c_longlong),
        ("UDCDeltaQ", ctypes.c_longlong),
        ("UACDeltaQ", ctypes.c_longlong),
        ("VDCDeltaQ", ctypes.c_longlong),
        ("VACDeltaQ", ctypes.c_longlong),
        ("UsingQMatrix", ctypes.c_ulonglong),
        ("QMY", ctypes.c_ulonglong),
        ("QMU", ctypes.c_ulonglong),
        ("QMV", ctypes.c_ulonglong),
    ]

class D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG(ctypes.Structure):
    _fields_ = [
        ("DeltaQPresent", ctypes.c_ulonglong),
        ("DeltaQRes", ctypes.c_ulonglong),
    ]

class D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG(ctypes.Structure):
    _fields_ = [
        ("CdefBits", ctypes.c_ulonglong),
        ("CdefDampingMinus3", ctypes.c_ulonglong),
        ("CdefYPriStrength", ctypes.c_ulonglong * 8),
        ("CdefUVPriStrength", ctypes.c_ulonglong * 8),
        ("CdefYSecStrength", ctypes.c_ulonglong * 8),
        ("CdefUVSecStrength", ctypes.c_ulonglong * 8),
    ]

class D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA(ctypes.Structure):
    _fields_ = [
        ("EnabledFeatures", ctypes.c_ulonglong),
        ("FeatureValue", ctypes.c_longlong * 8),
    ]

class D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG(ctypes.Structure):
    _fields_ = [
        ("UpdateMap", ctypes.c_ulonglong),
        ("TemporalUpdate", ctypes.c_ulonglong),
        ("UpdateData", ctypes.c_ulonglong),
        ("NumSegments", ctypes.c_ulonglong),
        ("SegmentsData", D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA * 8),
    ]

class D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP(ctypes.Structure):
    _fields_ = [
        ("SegmentsMapByteSize", wintypes.DWORD),
        ("pSegmentsMap", ctypes.c_void_p),
    ]

class D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA(ctypes.Structure):
    _fields_ = [
        ("Flags", ctypes.c_int),
        ("FrameType", ctypes.c_int),
        ("CompoundPredictionType", ctypes.c_int),
        ("InterpolationFilter", ctypes.c_int),
        ("FrameRestorationConfig", D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG),
        ("TxMode", ctypes.c_int),
        ("SuperResDenominator", wintypes.DWORD),
        ("OrderHint", wintypes.DWORD),
        ("PictureIndex", wintypes.DWORD),
        ("TemporalLayerIndexPlus1", wintypes.DWORD),
        ("SpatialLayerIndexPlus1", wintypes.DWORD),
        ("ReferenceFramesReconPictureDescriptors", D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR * 8),
        ("ReferenceIndices", wintypes.DWORD * 7),
        ("PrimaryRefFrame", wintypes.DWORD),
        ("RefreshFrameFlags", wintypes.DWORD),
        ("LoopFilter", D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG),
        ("LoopFilterDelta", D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG),
        ("Quantization", D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG),
        ("QuantizationDelta", D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG),
        ("CDEF", D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG),
        ("QPMapValuesCount", wintypes.DWORD),
        ("pRateControlQPMap", ctypes.c_void_p),
        ("CustomSegmentation", D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG),
        ("CustomSegmentsMap", D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP),
    ]
#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG {
    pub FrameRestorationType: [i32; 3],
    pub LoopRestorationPixelSize: [i32; 3],
}

#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO {
    pub TransformationType: i32,
    pub TransformationMatrix: [i32; 8],
    pub InvalidAffineSet: i32,
}

#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR {
    pub ReconstructedPictureResourceIndex: u32,
    pub TemporalLayerIndexPlus1: u32,
    pub SpatialLayerIndexPlus1: u32,
    pub FrameType: i32,
    pub WarpedMotionInfo: D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO,
    pub OrderHint: u32,
    pub PictureIndex: u32,
}

#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG {
    pub LoopFilterLevel: [u64; 2],
    pub LoopFilterLevelU: u64,
    pub LoopFilterLevelV: u64,
    pub LoopFilterSharpnessLevel: u64,
    pub LoopFilterDeltaEnabled: u64,
    pub UpdateRefDelta: u64,
    pub RefDeltas: [i64; 8],
    pub UpdateModeDelta: u64,
    pub ModeDeltas: [i64; 2],
}

#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG {
    pub DeltaLFPresent: u64,
    pub DeltaLFMulti: u64,
    pub DeltaLFRes: u64,
}

#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG {
    pub BaseQIndex: u64,
    pub YDCDeltaQ: i64,
    pub UDCDeltaQ: i64,
    pub UACDeltaQ: i64,
    pub VDCDeltaQ: i64,
    pub VACDeltaQ: i64,
    pub UsingQMatrix: u64,
    pub QMY: u64,
    pub QMU: u64,
    pub QMV: u64,
}

#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG {
    pub DeltaQPresent: u64,
    pub DeltaQRes: u64,
}

#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG {
    pub CdefBits: u64,
    pub CdefDampingMinus3: u64,
    pub CdefYPriStrength: [u64; 8],
    pub CdefUVPriStrength: [u64; 8],
    pub CdefYSecStrength: [u64; 8],
    pub CdefUVSecStrength: [u64; 8],
}

#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA {
    pub EnabledFeatures: u64,
    pub FeatureValue: [i64; 8],
}

#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG {
    pub UpdateMap: u64,
    pub TemporalUpdate: u64,
    pub UpdateData: u64,
    pub NumSegments: u64,
    pub SegmentsData: [D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA; 8],
}

#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP {
    pub SegmentsMapByteSize: u32,
    pub pSegmentsMap: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA {
    pub Flags: i32,
    pub FrameType: i32,
    pub CompoundPredictionType: i32,
    pub InterpolationFilter: i32,
    pub FrameRestorationConfig: D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG,
    pub TxMode: i32,
    pub SuperResDenominator: u32,
    pub OrderHint: u32,
    pub PictureIndex: u32,
    pub TemporalLayerIndexPlus1: u32,
    pub SpatialLayerIndexPlus1: u32,
    pub ReferenceFramesReconPictureDescriptors: [D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR; 8],
    pub ReferenceIndices: [u32; 7],
    pub PrimaryRefFrame: u32,
    pub RefreshFrameFlags: u32,
    pub LoopFilter: D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG,
    pub LoopFilterDelta: D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG,
    pub Quantization: D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG,
    pub QuantizationDelta: D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG,
    pub CDEF: D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG,
    pub QPMapValuesCount: u32,
    pub pRateControlQPMap: *mut core::ffi::c_void,
    pub CustomSegmentation: D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG,
    pub CustomSegmentsMap: D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP,
}
import "golang.org/x/sys/windows"

type D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG struct {
	FrameRestorationType [3]int32
	LoopRestorationPixelSize [3]int32
}

type D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO struct {
	TransformationType int32
	TransformationMatrix [8]int32
	InvalidAffineSet int32
}

type D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR struct {
	ReconstructedPictureResourceIndex uint32
	TemporalLayerIndexPlus1 uint32
	SpatialLayerIndexPlus1 uint32
	FrameType int32
	WarpedMotionInfo D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO
	OrderHint uint32
	PictureIndex uint32
}

type D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG struct {
	LoopFilterLevel [2]uint64
	LoopFilterLevelU uint64
	LoopFilterLevelV uint64
	LoopFilterSharpnessLevel uint64
	LoopFilterDeltaEnabled uint64
	UpdateRefDelta uint64
	RefDeltas [8]int64
	UpdateModeDelta uint64
	ModeDeltas [2]int64
}

type D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG struct {
	DeltaLFPresent uint64
	DeltaLFMulti uint64
	DeltaLFRes uint64
}

type D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG struct {
	BaseQIndex uint64
	YDCDeltaQ int64
	UDCDeltaQ int64
	UACDeltaQ int64
	VDCDeltaQ int64
	VACDeltaQ int64
	UsingQMatrix uint64
	QMY uint64
	QMU uint64
	QMV uint64
}

type D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG struct {
	DeltaQPresent uint64
	DeltaQRes uint64
}

type D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG struct {
	CdefBits uint64
	CdefDampingMinus3 uint64
	CdefYPriStrength [8]uint64
	CdefUVPriStrength [8]uint64
	CdefYSecStrength [8]uint64
	CdefUVSecStrength [8]uint64
}

type D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA struct {
	EnabledFeatures uint64
	FeatureValue [8]int64
}

type D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG struct {
	UpdateMap uint64
	TemporalUpdate uint64
	UpdateData uint64
	NumSegments uint64
	SegmentsData [8]D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA
}

type D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP struct {
	SegmentsMapByteSize uint32
	pSegmentsMap uintptr
}

type D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA struct {
	Flags int32
	FrameType int32
	CompoundPredictionType int32
	InterpolationFilter int32
	FrameRestorationConfig D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG
	TxMode int32
	SuperResDenominator uint32
	OrderHint uint32
	PictureIndex uint32
	TemporalLayerIndexPlus1 uint32
	SpatialLayerIndexPlus1 uint32
	ReferenceFramesReconPictureDescriptors [8]D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR
	ReferenceIndices [7]uint32
	PrimaryRefFrame uint32
	RefreshFrameFlags uint32
	LoopFilter D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG
	LoopFilterDelta D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG
	Quantization D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG
	QuantizationDelta D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG
	CDEF D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG
	QPMapValuesCount uint32
	pRateControlQPMap uintptr
	CustomSegmentation D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG
	CustomSegmentsMap D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP
}
type
  D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG = record
    FrameRestorationType: array[0..2] of Integer;
    LoopRestorationPixelSize: array[0..2] of Integer;
  end;

  D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO = record
    TransformationType: Integer;
    TransformationMatrix: array[0..7] of Integer;
    InvalidAffineSet: BOOL;
  end;

  D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR = record
    ReconstructedPictureResourceIndex: DWORD;
    TemporalLayerIndexPlus1: DWORD;
    SpatialLayerIndexPlus1: DWORD;
    FrameType: Integer;
    WarpedMotionInfo: D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO;
    OrderHint: DWORD;
    PictureIndex: DWORD;
  end;

  D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG = record
    LoopFilterLevel: array[0..1] of UInt64;
    LoopFilterLevelU: UInt64;
    LoopFilterLevelV: UInt64;
    LoopFilterSharpnessLevel: UInt64;
    LoopFilterDeltaEnabled: UInt64;
    UpdateRefDelta: UInt64;
    RefDeltas: array[0..7] of Int64;
    UpdateModeDelta: UInt64;
    ModeDeltas: array[0..1] of Int64;
  end;

  D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG = record
    DeltaLFPresent: UInt64;
    DeltaLFMulti: UInt64;
    DeltaLFRes: UInt64;
  end;

  D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG = record
    BaseQIndex: UInt64;
    YDCDeltaQ: Int64;
    UDCDeltaQ: Int64;
    UACDeltaQ: Int64;
    VDCDeltaQ: Int64;
    VACDeltaQ: Int64;
    UsingQMatrix: UInt64;
    QMY: UInt64;
    QMU: UInt64;
    QMV: UInt64;
  end;

  D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG = record
    DeltaQPresent: UInt64;
    DeltaQRes: UInt64;
  end;

  D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG = record
    CdefBits: UInt64;
    CdefDampingMinus3: UInt64;
    CdefYPriStrength: array[0..7] of UInt64;
    CdefUVPriStrength: array[0..7] of UInt64;
    CdefYSecStrength: array[0..7] of UInt64;
    CdefUVSecStrength: array[0..7] of UInt64;
  end;

  D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA = record
    EnabledFeatures: UInt64;
    FeatureValue: array[0..7] of Int64;
  end;

  D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG = record
    UpdateMap: UInt64;
    TemporalUpdate: UInt64;
    UpdateData: UInt64;
    NumSegments: UInt64;
    SegmentsData: array[0..7] of D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA;
  end;

  D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP = record
    SegmentsMapByteSize: DWORD;
    pSegmentsMap: Pointer;
  end;

  D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA = record
    Flags: Integer;
    FrameType: Integer;
    CompoundPredictionType: Integer;
    InterpolationFilter: Integer;
    FrameRestorationConfig: D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG;
    TxMode: Integer;
    SuperResDenominator: DWORD;
    OrderHint: DWORD;
    PictureIndex: DWORD;
    TemporalLayerIndexPlus1: DWORD;
    SpatialLayerIndexPlus1: DWORD;
    ReferenceFramesReconPictureDescriptors: array[0..7] of D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR;
    ReferenceIndices: array[0..6] of DWORD;
    PrimaryRefFrame: DWORD;
    RefreshFrameFlags: DWORD;
    LoopFilter: D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG;
    LoopFilterDelta: D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG;
    Quantization: D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG;
    QuantizationDelta: D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG;
    CDEF: D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG;
    QPMapValuesCount: DWORD;
    pRateControlQPMap: Pointer;
    CustomSegmentation: D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG;
    CustomSegmentsMap: D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP;
  end;
const D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG = extern struct {
    FrameRestorationType: [3]i32,
    LoopRestorationPixelSize: [3]i32,
};

const D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO = extern struct {
    TransformationType: i32,
    TransformationMatrix: [8]i32,
    InvalidAffineSet: i32,
};

const D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR = extern struct {
    ReconstructedPictureResourceIndex: u32,
    TemporalLayerIndexPlus1: u32,
    SpatialLayerIndexPlus1: u32,
    FrameType: i32,
    WarpedMotionInfo: D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO,
    OrderHint: u32,
    PictureIndex: u32,
};

const D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG = extern struct {
    LoopFilterLevel: [2]u64,
    LoopFilterLevelU: u64,
    LoopFilterLevelV: u64,
    LoopFilterSharpnessLevel: u64,
    LoopFilterDeltaEnabled: u64,
    UpdateRefDelta: u64,
    RefDeltas: [8]i64,
    UpdateModeDelta: u64,
    ModeDeltas: [2]i64,
};

const D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG = extern struct {
    DeltaLFPresent: u64,
    DeltaLFMulti: u64,
    DeltaLFRes: u64,
};

const D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG = extern struct {
    BaseQIndex: u64,
    YDCDeltaQ: i64,
    UDCDeltaQ: i64,
    UACDeltaQ: i64,
    VDCDeltaQ: i64,
    VACDeltaQ: i64,
    UsingQMatrix: u64,
    QMY: u64,
    QMU: u64,
    QMV: u64,
};

const D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG = extern struct {
    DeltaQPresent: u64,
    DeltaQRes: u64,
};

const D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG = extern struct {
    CdefBits: u64,
    CdefDampingMinus3: u64,
    CdefYPriStrength: [8]u64,
    CdefUVPriStrength: [8]u64,
    CdefYSecStrength: [8]u64,
    CdefUVSecStrength: [8]u64,
};

const D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA = extern struct {
    EnabledFeatures: u64,
    FeatureValue: [8]i64,
};

const D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG = extern struct {
    UpdateMap: u64,
    TemporalUpdate: u64,
    UpdateData: u64,
    NumSegments: u64,
    SegmentsData: [8]D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA,
};

const D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP = extern struct {
    SegmentsMapByteSize: u32,
    pSegmentsMap: ?*anyopaque,
};

const D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA = extern struct {
    Flags: i32,
    FrameType: i32,
    CompoundPredictionType: i32,
    InterpolationFilter: i32,
    FrameRestorationConfig: D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG,
    TxMode: i32,
    SuperResDenominator: u32,
    OrderHint: u32,
    PictureIndex: u32,
    TemporalLayerIndexPlus1: u32,
    SpatialLayerIndexPlus1: u32,
    ReferenceFramesReconPictureDescriptors: [8]D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR,
    ReferenceIndices: [7]u32,
    PrimaryRefFrame: u32,
    RefreshFrameFlags: u32,
    LoopFilter: D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG,
    LoopFilterDelta: D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG,
    Quantization: D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG,
    QuantizationDelta: D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG,
    CDEF: D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG,
    QPMapValuesCount: u32,
    pRateControlQPMap: ?*anyopaque,
    CustomSegmentation: D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG,
    CustomSegmentsMap: D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP,
};
type
  D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG {.bycopy.} = object
    FrameRestorationType: array[3, int32]
    LoopRestorationPixelSize: array[3, int32]

  D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO {.bycopy.} = object
    TransformationType: int32
    TransformationMatrix: array[8, int32]
    InvalidAffineSet: int32

  D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR {.bycopy.} = object
    ReconstructedPictureResourceIndex: uint32
    TemporalLayerIndexPlus1: uint32
    SpatialLayerIndexPlus1: uint32
    FrameType: int32
    WarpedMotionInfo: D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO
    OrderHint: uint32
    PictureIndex: uint32

  D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG {.bycopy.} = object
    LoopFilterLevel: array[2, uint64]
    LoopFilterLevelU: uint64
    LoopFilterLevelV: uint64
    LoopFilterSharpnessLevel: uint64
    LoopFilterDeltaEnabled: uint64
    UpdateRefDelta: uint64
    RefDeltas: array[8, int64]
    UpdateModeDelta: uint64
    ModeDeltas: array[2, int64]

  D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG {.bycopy.} = object
    DeltaLFPresent: uint64
    DeltaLFMulti: uint64
    DeltaLFRes: uint64

  D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG {.bycopy.} = object
    BaseQIndex: uint64
    YDCDeltaQ: int64
    UDCDeltaQ: int64
    UACDeltaQ: int64
    VDCDeltaQ: int64
    VACDeltaQ: int64
    UsingQMatrix: uint64
    QMY: uint64
    QMU: uint64
    QMV: uint64

  D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG {.bycopy.} = object
    DeltaQPresent: uint64
    DeltaQRes: uint64

  D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG {.bycopy.} = object
    CdefBits: uint64
    CdefDampingMinus3: uint64
    CdefYPriStrength: array[8, uint64]
    CdefUVPriStrength: array[8, uint64]
    CdefYSecStrength: array[8, uint64]
    CdefUVSecStrength: array[8, uint64]

  D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA {.bycopy.} = object
    EnabledFeatures: uint64
    FeatureValue: array[8, int64]

  D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG {.bycopy.} = object
    UpdateMap: uint64
    TemporalUpdate: uint64
    UpdateData: uint64
    NumSegments: uint64
    SegmentsData: array[8, D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA]

  D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP {.bycopy.} = object
    SegmentsMapByteSize: uint32
    pSegmentsMap: pointer

  D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA {.bycopy.} = object
    Flags: int32
    FrameType: int32
    CompoundPredictionType: int32
    InterpolationFilter: int32
    FrameRestorationConfig: D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG
    TxMode: int32
    SuperResDenominator: uint32
    OrderHint: uint32
    PictureIndex: uint32
    TemporalLayerIndexPlus1: uint32
    SpatialLayerIndexPlus1: uint32
    ReferenceFramesReconPictureDescriptors: array[8, D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR]
    ReferenceIndices: array[7, uint32]
    PrimaryRefFrame: uint32
    RefreshFrameFlags: uint32
    LoopFilter: D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG
    LoopFilterDelta: D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG
    Quantization: D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG
    QuantizationDelta: D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG
    CDEF: D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG
    QPMapValuesCount: uint32
    pRateControlQPMap: pointer
    CustomSegmentation: D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG
    CustomSegmentsMap: D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP
struct D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG
{
    int[3] FrameRestorationType;
    int[3] LoopRestorationPixelSize;
}

struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO
{
    int TransformationType;
    int[8] TransformationMatrix;
    int InvalidAffineSet;
}

struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR
{
    uint ReconstructedPictureResourceIndex;
    uint TemporalLayerIndexPlus1;
    uint SpatialLayerIndexPlus1;
    int FrameType;
    D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO WarpedMotionInfo;
    uint OrderHint;
    uint PictureIndex;
}

struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG
{
    ulong[2] LoopFilterLevel;
    ulong LoopFilterLevelU;
    ulong LoopFilterLevelV;
    ulong LoopFilterSharpnessLevel;
    ulong LoopFilterDeltaEnabled;
    ulong UpdateRefDelta;
    long[8] RefDeltas;
    ulong UpdateModeDelta;
    long[2] ModeDeltas;
}

struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG
{
    ulong DeltaLFPresent;
    ulong DeltaLFMulti;
    ulong DeltaLFRes;
}

struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG
{
    ulong BaseQIndex;
    long YDCDeltaQ;
    long UDCDeltaQ;
    long UACDeltaQ;
    long VDCDeltaQ;
    long VACDeltaQ;
    ulong UsingQMatrix;
    ulong QMY;
    ulong QMU;
    ulong QMV;
}

struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG
{
    ulong DeltaQPresent;
    ulong DeltaQRes;
}

struct D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG
{
    ulong CdefBits;
    ulong CdefDampingMinus3;
    ulong[8] CdefYPriStrength;
    ulong[8] CdefUVPriStrength;
    ulong[8] CdefYSecStrength;
    ulong[8] CdefUVSecStrength;
}

struct D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA
{
    ulong EnabledFeatures;
    long[8] FeatureValue;
}

struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG
{
    ulong UpdateMap;
    ulong TemporalUpdate;
    ulong UpdateData;
    ulong NumSegments;
    D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA[8] SegmentsData;
}

struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP
{
    uint SegmentsMapByteSize;
    void* pSegmentsMap;
}

struct D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA
{
    int Flags;
    int FrameType;
    int CompoundPredictionType;
    int InterpolationFilter;
    D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG FrameRestorationConfig;
    int TxMode;
    uint SuperResDenominator;
    uint OrderHint;
    uint PictureIndex;
    uint TemporalLayerIndexPlus1;
    uint SpatialLayerIndexPlus1;
    D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR[8] ReferenceFramesReconPictureDescriptors;
    uint[7] ReferenceIndices;
    uint PrimaryRefFrame;
    uint RefreshFrameFlags;
    D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG LoopFilter;
    D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG LoopFilterDelta;
    D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG Quantization;
    D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG QuantizationDelta;
    D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG CDEF;
    uint QPMapValuesCount;
    void* pRateControlQPMap;
    D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG CustomSegmentation;
    D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP CustomSegmentsMap;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA サイズ: 1776 バイト(x86)
dim st, 444    ; 4byte整数×444(構造体サイズ 1776 / 4 切り上げ)
; Flags : D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; FrameType : D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; CompoundPredictionType : D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; InterpolationFilter : D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; FrameRestorationConfig : D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG (+16, 24byte)  varptr(st)+16 を基点に操作(24byte:入れ子/配列)
; TxMode : D3D12_VIDEO_ENCODER_AV1_TX_MODE (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; SuperResDenominator : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; OrderHint : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; PictureIndex : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; TemporalLayerIndexPlus1 : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; SpatialLayerIndexPlus1 : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; ReferenceFramesReconPictureDescriptors : D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR (+64, 512byte)  varptr(st)+64 を基点に操作(512byte:入れ子/配列)
; ReferenceIndices : DWORD (+576, 28byte)  varptr(st)+576 を基点に操作(28byte:入れ子/配列)
; PrimaryRefFrame : DWORD (+604, 4byte)  st.151 = 値  /  値 = st.151   (lpoke/lpeek も可)
; RefreshFrameFlags : DWORD (+608, 4byte)  st.152 = 値  /  値 = st.152   (lpoke/lpeek も可)
; LoopFilter : D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG (+616, 144byte)  varptr(st)+616 を基点に操作(144byte:入れ子/配列)
; LoopFilterDelta : D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG (+760, 24byte)  varptr(st)+760 を基点に操作(24byte:入れ子/配列)
; Quantization : D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG (+784, 80byte)  varptr(st)+784 を基点に操作(80byte:入れ子/配列)
; QuantizationDelta : D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG (+864, 16byte)  varptr(st)+864 を基点に操作(16byte:入れ子/配列)
; CDEF : D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG (+880, 272byte)  varptr(st)+880 を基点に操作(272byte:入れ子/配列)
; QPMapValuesCount : DWORD (+1152, 4byte)  st.288 = 値  /  値 = st.288   (lpoke/lpeek も可)
; pRateControlQPMap : SHORT* (+1156, 4byte)  st.289 = 値  /  値 = st.289   (lpoke/lpeek も可)
; CustomSegmentation : D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG (+1160, 608byte)  varptr(st)+1160 を基点に操作(608byte:入れ子/配列)
; CustomSegmentsMap : D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP (+1768, 8byte)  varptr(st)+1768 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA サイズ: 1792 バイト(x64)
dim st, 448    ; 4byte整数×448(構造体サイズ 1792 / 4 切り上げ)
; Flags : D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; FrameType : D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; CompoundPredictionType : D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; InterpolationFilter : D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; FrameRestorationConfig : D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG (+16, 24byte)  varptr(st)+16 を基点に操作(24byte:入れ子/配列)
; TxMode : D3D12_VIDEO_ENCODER_AV1_TX_MODE (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; SuperResDenominator : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; OrderHint : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; PictureIndex : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; TemporalLayerIndexPlus1 : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; SpatialLayerIndexPlus1 : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; ReferenceFramesReconPictureDescriptors : D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR (+64, 512byte)  varptr(st)+64 を基点に操作(512byte:入れ子/配列)
; ReferenceIndices : DWORD (+576, 28byte)  varptr(st)+576 を基点に操作(28byte:入れ子/配列)
; PrimaryRefFrame : DWORD (+604, 4byte)  st.151 = 値  /  値 = st.151   (lpoke/lpeek も可)
; RefreshFrameFlags : DWORD (+608, 4byte)  st.152 = 値  /  値 = st.152   (lpoke/lpeek も可)
; LoopFilter : D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG (+616, 144byte)  varptr(st)+616 を基点に操作(144byte:入れ子/配列)
; LoopFilterDelta : D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG (+760, 24byte)  varptr(st)+760 を基点に操作(24byte:入れ子/配列)
; Quantization : D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG (+784, 80byte)  varptr(st)+784 を基点に操作(80byte:入れ子/配列)
; QuantizationDelta : D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG (+864, 16byte)  varptr(st)+864 を基点に操作(16byte:入れ子/配列)
; CDEF : D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG (+880, 272byte)  varptr(st)+880 を基点に操作(272byte:入れ子/配列)
; QPMapValuesCount : DWORD (+1152, 4byte)  st.288 = 値  /  値 = st.288   (lpoke/lpeek も可)
; pRateControlQPMap : SHORT* (+1160, 8byte)  qpoke st,1160,値 / qpeek(st,1160)  ※IronHSPのみ。3.7/3.8は lpoke st,1160,下位 : lpoke st,1164,上位
; CustomSegmentation : D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG (+1168, 608byte)  varptr(st)+1168 を基点に操作(608byte:入れ子/配列)
; CustomSegmentsMap : D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP (+1776, 16byte)  varptr(st)+1776 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG
    #field int FrameRestorationType 3
    #field int LoopRestorationPixelSize 3
#endstruct

#defstruct global D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO
    #field int TransformationType
    #field int TransformationMatrix 8
    #field bool InvalidAffineSet
#endstruct

#defstruct global D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR
    #field int ReconstructedPictureResourceIndex
    #field int TemporalLayerIndexPlus1
    #field int SpatialLayerIndexPlus1
    #field int FrameType
    #field D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO WarpedMotionInfo
    #field int OrderHint
    #field int PictureIndex
#endstruct

#defstruct global D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG
    #field int64 LoopFilterLevel 2
    #field int64 LoopFilterLevelU
    #field int64 LoopFilterLevelV
    #field int64 LoopFilterSharpnessLevel
    #field int64 LoopFilterDeltaEnabled
    #field int64 UpdateRefDelta
    #field int64 RefDeltas 8
    #field int64 UpdateModeDelta
    #field int64 ModeDeltas 2
#endstruct

#defstruct global D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG
    #field int64 DeltaLFPresent
    #field int64 DeltaLFMulti
    #field int64 DeltaLFRes
#endstruct

#defstruct global D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG
    #field int64 BaseQIndex
    #field int64 YDCDeltaQ
    #field int64 UDCDeltaQ
    #field int64 UACDeltaQ
    #field int64 VDCDeltaQ
    #field int64 VACDeltaQ
    #field int64 UsingQMatrix
    #field int64 QMY
    #field int64 QMU
    #field int64 QMV
#endstruct

#defstruct global D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG
    #field int64 DeltaQPresent
    #field int64 DeltaQRes
#endstruct

#defstruct global D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG
    #field int64 CdefBits
    #field int64 CdefDampingMinus3
    #field int64 CdefYPriStrength 8
    #field int64 CdefUVPriStrength 8
    #field int64 CdefYSecStrength 8
    #field int64 CdefUVSecStrength 8
#endstruct

#defstruct global D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA
    #field int64 EnabledFeatures
    #field int64 FeatureValue 8
#endstruct

#defstruct global D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG
    #field int64 UpdateMap
    #field int64 TemporalUpdate
    #field int64 UpdateData
    #field int64 NumSegments
    #field D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA SegmentsData 8
#endstruct

#defstruct global D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP
    #field int SegmentsMapByteSize
    #field intptr pSegmentsMap
#endstruct

#defstruct global D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA
    #field int Flags
    #field int FrameType
    #field int CompoundPredictionType
    #field int InterpolationFilter
    #field D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG FrameRestorationConfig
    #field int TxMode
    #field int SuperResDenominator
    #field int OrderHint
    #field int PictureIndex
    #field int TemporalLayerIndexPlus1
    #field int SpatialLayerIndexPlus1
    #field D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR ReferenceFramesReconPictureDescriptors 8
    #field int ReferenceIndices 7
    #field int PrimaryRefFrame
    #field int RefreshFrameFlags
    #field D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG LoopFilter
    #field D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG LoopFilterDelta
    #field D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG Quantization
    #field D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG QuantizationDelta
    #field D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG CDEF
    #field int QPMapValuesCount
    #field intptr pRateControlQPMap
    #field D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG CustomSegmentation
    #field D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP CustomSegmentsMap
#endstruct

stdim st, D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA        ; NSTRUCT 変数を確保
st->Flags = 100
mes "Flags=" + st->Flags