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

D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC

構造体
サイズx64: 112 バイト / x86: 68 バイト

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

フィールド

フィールドサイズx64x86説明
FlagsD3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS4+0+0エンコードされるフレームの構成フラグを指定する、D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS 列挙型の値のビット単位のOR の組み合わせです。
FrameTypeD3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC4+4+4ピクチャーの種類を指定する、D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC 列挙型の値です。コーデック固有のフラグが、指定した種類をサポートしていることを確認してください。この選択は、ホストが設定した GOP 構造の構成と同期を保つ必要があります。GOP は表示順で定義されますが、このピクチャー種類の選択は GOP に従いつつエンコード順である必要があることに注意してください。
slice_pic_parameter_set_idDWORD4+8+8PPS を参照するために現在のフレームのスライスヘッダーで使用される値を指定する UINT です。
PictureOrderCountNumberDWORD4+12+12現在のフレームの表示順を指定する UINT です。
TemporalLayerIndexDWORD4+16+16時間階層におけるピクチャーのレイヤー番号を指定する UINT です。レイヤーの最大数は D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC で確認してください。
List0ReferenceFramesCountDWORD4+20+20このフレームで使用する過去のフレーム参照の数を指定する UINT です。この値は、D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC で公開された内容と整合している必要があります。
pList0ReferenceFramesDWORD*8/4+24+24このフレームで使用する過去の参照フレームのリストを指定する UINT 配列へのポインターです。この配列内の各整数値は、DPB に保持されているピクチャーを参照するために pReferenceFramesReconPictureDescriptors へのインデックスとなります。
List1ReferenceFramesCountDWORD4+32+28このフレームで使用する未来のフレーム参照の数を指定する UINT です。この値は、D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC で公開された内容と整合している必要があります。
pList1ReferenceFramesDWORD*8/4+40+32このフレームで使用する未来の参照フレームのリストを指定する UINT 配列へのポインターです。この配列内の各整数値は、DPB に保持されているピクチャーを参照するために pReferenceFramesReconPictureDescriptors へのインデックスとなります。
ReferenceFramesReconPictureDescriptorsCountDWORD4+48+36pReferenceFramesReconPictureDescriptors 内のエントリ数を指定する UINT です。
pReferenceFramesReconPictureDescriptorsD3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC*8/4+56+40

D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC.ReferenceFrames に保持されている DPB バッファーの現在の状態を記述する UINT 配列へのポインターです。pList0ReferenceFrames および pList1ReferenceFrames リストのインデックスは、過去/未来の参照からこの記述子の配列へマップされます。

さらにこの記述子の配列は、このフレームの参照ピクチャーを、再構築ピクチャーの配列 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC.ReferenceFrames 内のリソースインデックスへマップします。加えて、各参照ピクチャーについて、エンコード順および表示順の番号と、長期参照であるかどうかを示します。

この配列のサイズは、関連する EncodeFrame コマンドの D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC.ReferenceFrames.NumTextures と常に一致します。

List0RefPicModificationsCountDWORD4+64+44pList0RefPicModifications 内の項目数を指定する UINT です。
pList0RefPicModificationsDWORD*8/4+72+48L0 リストに対する変更コマンドを格納した UINT 配列へのポインターです。
List1RefPicModificationsCountDWORD4+80+52pList1RefPicModifications 内の項目数を指定する UINT です。
pList1RefPicModificationsDWORD*8/4+88+56L1 リストに対する変更コマンドを格納した UINT 配列へのポインターです。
QPMapValuesCountDWORD4+96+60pRateControlQPMap に含まれる要素数を指定する UINT です。これは、フレーム解像度を最も近いアライメント値に切り上げたときの、フレーム内のコーディングブロック数と一致する必要があります。
pRateControlQPMapCHAR*8/4+104+64このフレームの各正方領域に使用する QP マップ値を、行/列のスキャン順で格納した Int8 の配列へのポインターです。QP マップの寸法は、現在の解像度と、正方領域のサイズを示す D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS.QPMapRegionPixelsSize を使用して算出できます。

公式ドキュメント

HEVC エンコードにおいて、関連する EncodeFrame コマンドのピクチャーレベルの制御要素を表します。

解説(Remarks)

次の表は、HEVC エンコードで期待される VPS、SPS、PPS の値を示します。

HEVC の Level_idc マッピング

D3D12 のレベル 期待される general_level_idc 備考
D3D12_VIDEO_ENCODER_LEVELS_HEVC_1 30 なし
D3D12_VIDEO_ENCODER_LEVELS_HEVC_2 60 なし
D3D12_VIDEO_ENCODER_LEVELS_HEVC_21 63 なし
D3D12_VIDEO_ENCODER_LEVELS_HEVC_3 90 なし
D3D12_VIDEO_ENCODER_LEVELS_HEVC_31 93 なし
D3D12_VIDEO_ENCODER_LEVELS_HEVC_4 120 なし
D3D12_VIDEO_ENCODER_LEVELS_HEVC_41 123 なし
D3D12_VIDEO_ENCODER_LEVELS_HEVC_5 150 なし
D3D12_VIDEO_ENCODER_LEVELS_HEVC_51 153 なし
D3D12_VIDEO_ENCODER_LEVELS_HEVC_52 156 なし
D3D12_VIDEO_ENCODER_LEVELS_HEVC_6 180 なし
D3D12_VIDEO_ENCODER_LEVELS_HEVC_61 183 なし
D3D12_VIDEO_ENCODER_LEVELS_HEVC_62 186 なし

HEVC ビデオパラメーターセットの期待値

シンタックス要素 期待される既定値 備考
vps_video_parameter_set_id ユーザー固有 なし
vps_base_layer_internal_flag 0 なし
vps_base_layer_available_flag 0 なし
vps_max_layers_minus1 0 なし
vps_max_sub_layers_minus1 0 なし
vps_temporal_id_nesting_flag 1 なし
vps_reserved_ffff_16bits 0xFFFF なし
general_profile_space 0 なし
general_tier_flag High tier の場合は 1、Main tier の場合は 0 なし
general_profile_idc D3D12_VIDEO_ENCODER_PROFILE_HEVC 列挙値 + 1 なし
general_profile_compatibility_flag[general_profile_space] 1 なし
general_progressive_source_flag 1 なし
general_interlaced_source_flag 0 なし
general_non_packed_constraint_flag 1 なし
general_frame_only_constraint_flag 1 なし
general_reserved_zero_44bits 44 ビットの 0 なし
general_level_idc 上記の表を参照してください なし
vps_sub_layer_ordering_info_present_flag 0 なし
vps_max_dec_pic_buffering_minus1[0] (MaxReferenceFramesInDPB/previous reference frames/ + 1 /additional current frame recon pic/) - 1/*minus1 for header/; なし
vps_max_num_reorder_pics[0] B フレームがない場合は 0。それ以外の場合は vps_max_dec_pic_buffering_minus1。 なし
vps_max_latency_increase_plus1[0] 1 なし
vps_max_layer_id 0 なし
vps_num_layer_sets_minus1 0 なし
vps_timing_info_present_flag 0 なし
vps_extension_flag 0 なし

HEVC シーケンスパラメーターセットの期待値

シンタックス要素 期待される既定値 備考
sps_video_parameter_set_id ユーザー固有 なし
sps_max_sub_layers_minus1 関連する VPS と同じ なし
sps_temporal_id_nesting_flag 関連する VPS と同じ なし
general_profile_space 0 なし
general_tier_flag High tier の場合は 1、Main tier の場合は 0 なし
general_profile_idc D3D12_VIDEO_ENCODER_PROFILE_HEVC 列挙値 + 1 なし
general_profile_compatibility_flag[general_profile_space] 1 なし
general_progressive_source_flag 1 なし
general_interlaced_source_flag 0 なし
general_non_packed_constraint_flag 1 なし
general_frame_only_constraint_flag 1 なし
general_reserved_zero_44bits 44 ビットの 0 なし
general_level_idc 上記の表を参照してください なし
chroma_format_idc 1 NV12 および P010 の場合は 4.2.0
pic_width_in_luma_samples std::ceil(sequenceTargetResolution.Width / SubregionBlockPixelsSize)) * SubregionBlockPixelsSize D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS.SubregionBlockPixelsSize には現在のフレーム解像度を使用します
pic_height_in_luma_samples std::ceil(sequenceTargetResolution.Height / SubregionBlockPixelsSize)) * SubregionBlockPixelsSize D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS.SubregionBlockPixelsSize には現在のフレーム解像度を使用します
conformance_window_flag 解像度が SubregionBlockPixelsSize にアラインされている場合は 0、それ以外の場合は 1 なし
conf_win_left_offset 0 conformance_windows_flag = 1 の場合のみ
conf_win_right_offset (sps.pic_width_in_luma_samples - encodeResolution.Width) >> 1 conformance_windows_flag = 1 の場合のみ
conf_win_top_offset 0 conformance_windows_flag = 1 の場合のみ
conf_win_bottom_offset (sps.pic_height_in_luma_samples - encodeResolution.Height) >> 1 conformance_windows_flag = 1 の場合のみ
bit_depth_luma_minus8 NV12 の場合は 0、P010 の場合は 2 なし
bit_depth_luma_minus8 NV12 の場合は 0、P010 の場合は 2 なし
log2_max_pic_order_cnt_lsb_minus4 D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC に基づく なし
sps_sub_layer_ordering_info_present_flag 関連する VPS と同じ なし
sps_max_dec_pic_buffering_minus1 関連する VPS と同じ なし
sps_max_num_reorder_pics 関連する VPS と同じ なし
sps_max_latency_increase_plus1 関連する VPS と同じ なし
log2_min_luma_coding_block_size_minus3 std::log2(minCuSize) - 3) 例: D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_8x8 の場合は MinCUSize=8
log2_diff_max_min_luma_coding_block_size std::log2(maxCuSize) - std::log2(minCuSize)) 例: D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_16x16 の場合は MaxCUSize=16
log2_min_transform_block_size_minus2 std::log2(minTuSize) - 2) 例: D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_4x4 の場合は MinTuSize=4
log2_diff_max_min_transform_block_size std::log2(maxTuSize) - std::log2(minTuSize)) 例: D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_16x16 の場合は MaxTuSize=16
max_transform_hierarchy_depth_inter D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC に基づく なし
max_transform_hierarchy_depth_inter D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC に基づく なし
scaling_list_enabled_flag 0 なし
amp_enabled_flag D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_ASYMETRIC_MOTION_PARTITION に基づく なし
sample_adaptive_offset_enabled_flag D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_SAO_FILTER に基づく なし
pcm_enabled_flag 0 なし
num_short_term_ref_pic_sets 0 なし
long_term_ref_pics_present_flag D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_LONG_TERM_REFERENCES に基づく なし
num_long_term_ref_pics_sps 0 なし
sps_temporal_mvp_enabled_flag 0 なし
strong_intra_smoothing_enabled_flag 0 なし
vui_parameters_present_flag 0 なし
sps_extension_flag 0 なし

HEVC ピクチャーパラメーターセットの期待値

シンタックス要素 期待される既定値 備考
pps_pic_parameter_set_id ユーザー固有 なし
pps_seq_parameter_set_id ユーザー固有 なし
dependent_slice_segments_enabled_flag 0 なし
output_flag_present_flag 0 なし
num_extra_slice_header_bits 0 なし
sign_data_hiding_enabled_flag 0 なし
cabac_init_present_flag 1 なし
num_ref_idx_lx_default_active_minus1[0] std::max(static_cast<INT>(pictureControl.List0ReferenceFramesCount) - 1, 0)) なし
num_ref_idx_lx_default_active_minus1[1] std::max(static_cast<INT>(pictureControl.List1ReferenceFramesCount) - 1, 0)) なし
init_qp_minus26 0 なし
constrained_intra_pred_flag D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION に基づく なし
transform_skip_enabled_flag D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_TRANSFORM_SKIPPING に基づく なし
cu_qp_delta_enabled_flag 1 なし
diff_cu_qp_delta_depth 0 なし
pps_cb_qp_offset 0 なし
pps_cr_qp_offset 0 なし
pps_slice_chroma_qp_offsets_present_flag 1 なし
weighted_pred_flag 0 この API では重み付き予測はサポートされません
weighted_bipred_flag 0 この API では重み付き予測はサポートされません
transquant_bypass_enabled_flag 0 なし
tiles_enabled_flag 0 なし
entropy_coding_sync_enabled_flag 0 なし
pps_loop_filter_across_slices_enabled_flag D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_DISABLE_LOOP_FILTER_ACROSS_SLICES に基づく なし
deblocking_filter_control_present_flag 1 なし
deblocking_filter_override_enabled_flag 0 なし
pps_deblocking_filter_disabled_flag 0 なし
pps_beta_offset_div2 0 なし
pps_tc_offset_div2 0 なし
pps_scaling_list_data_present_flag 0 なし
lists_modification_present_flag D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC のリスト変更を送信する場合は 1。それ以外の場合は 0 を設定します。 なし
log2_parallel_merge_level_minus2 0 なし
slice_segment_header_extension_present_flag 0 なし
pps_extension_flag 0 なし
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC  (x64 112 / x86 68 バイト)
typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC {
    D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags;
    D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType;
    DWORD slice_pic_parameter_set_id;
    DWORD PictureOrderCountNumber;
    DWORD TemporalLayerIndex;
    DWORD List0ReferenceFramesCount;
    DWORD* pList0ReferenceFrames;
    DWORD List1ReferenceFramesCount;
    DWORD* pList1ReferenceFrames;
    DWORD ReferenceFramesReconPictureDescriptorsCount;
    D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC* pReferenceFramesReconPictureDescriptors;
    DWORD List0RefPicModificationsCount;
    DWORD* pList0RefPicModifications;
    DWORD List1RefPicModificationsCount;
    DWORD* pList1RefPicModifications;
    DWORD QPMapValuesCount;
    CHAR* pRateControlQPMap;
} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC
{
    public int Flags;
    public int FrameType;
    public uint slice_pic_parameter_set_id;
    public uint PictureOrderCountNumber;
    public uint TemporalLayerIndex;
    public uint List0ReferenceFramesCount;
    public IntPtr pList0ReferenceFrames;
    public uint List1ReferenceFramesCount;
    public IntPtr pList1ReferenceFrames;
    public uint ReferenceFramesReconPictureDescriptorsCount;
    public IntPtr pReferenceFramesReconPictureDescriptors;
    public uint List0RefPicModificationsCount;
    public IntPtr pList0RefPicModifications;
    public uint List1RefPicModificationsCount;
    public IntPtr pList1RefPicModifications;
    public uint QPMapValuesCount;
    public IntPtr pRateControlQPMap;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC
    Public Flags As Integer
    Public FrameType As Integer
    Public slice_pic_parameter_set_id As UInteger
    Public PictureOrderCountNumber As UInteger
    Public TemporalLayerIndex As UInteger
    Public List0ReferenceFramesCount As UInteger
    Public pList0ReferenceFrames As IntPtr
    Public List1ReferenceFramesCount As UInteger
    Public pList1ReferenceFrames As IntPtr
    Public ReferenceFramesReconPictureDescriptorsCount As UInteger
    Public pReferenceFramesReconPictureDescriptors As IntPtr
    Public List0RefPicModificationsCount As UInteger
    Public pList0RefPicModifications As IntPtr
    Public List1RefPicModificationsCount As UInteger
    Public pList1RefPicModifications As IntPtr
    Public QPMapValuesCount As UInteger
    Public pRateControlQPMap As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC(ctypes.Structure):
    _fields_ = [
        ("Flags", ctypes.c_int),
        ("FrameType", ctypes.c_int),
        ("slice_pic_parameter_set_id", wintypes.DWORD),
        ("PictureOrderCountNumber", wintypes.DWORD),
        ("TemporalLayerIndex", wintypes.DWORD),
        ("List0ReferenceFramesCount", wintypes.DWORD),
        ("pList0ReferenceFrames", ctypes.c_void_p),
        ("List1ReferenceFramesCount", wintypes.DWORD),
        ("pList1ReferenceFrames", ctypes.c_void_p),
        ("ReferenceFramesReconPictureDescriptorsCount", wintypes.DWORD),
        ("pReferenceFramesReconPictureDescriptors", ctypes.c_void_p),
        ("List0RefPicModificationsCount", wintypes.DWORD),
        ("pList0RefPicModifications", ctypes.c_void_p),
        ("List1RefPicModificationsCount", wintypes.DWORD),
        ("pList1RefPicModifications", ctypes.c_void_p),
        ("QPMapValuesCount", wintypes.DWORD),
        ("pRateControlQPMap", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC {
    pub Flags: i32,
    pub FrameType: i32,
    pub slice_pic_parameter_set_id: u32,
    pub PictureOrderCountNumber: u32,
    pub TemporalLayerIndex: u32,
    pub List0ReferenceFramesCount: u32,
    pub pList0ReferenceFrames: *mut core::ffi::c_void,
    pub List1ReferenceFramesCount: u32,
    pub pList1ReferenceFrames: *mut core::ffi::c_void,
    pub ReferenceFramesReconPictureDescriptorsCount: u32,
    pub pReferenceFramesReconPictureDescriptors: *mut core::ffi::c_void,
    pub List0RefPicModificationsCount: u32,
    pub pList0RefPicModifications: *mut core::ffi::c_void,
    pub List1RefPicModificationsCount: u32,
    pub pList1RefPicModifications: *mut core::ffi::c_void,
    pub QPMapValuesCount: u32,
    pub pRateControlQPMap: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC struct {
	Flags int32
	FrameType int32
	slice_pic_parameter_set_id uint32
	PictureOrderCountNumber uint32
	TemporalLayerIndex uint32
	List0ReferenceFramesCount uint32
	pList0ReferenceFrames uintptr
	List1ReferenceFramesCount uint32
	pList1ReferenceFrames uintptr
	ReferenceFramesReconPictureDescriptorsCount uint32
	pReferenceFramesReconPictureDescriptors uintptr
	List0RefPicModificationsCount uint32
	pList0RefPicModifications uintptr
	List1RefPicModificationsCount uint32
	pList1RefPicModifications uintptr
	QPMapValuesCount uint32
	pRateControlQPMap uintptr
}
type
  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC = record
    Flags: Integer;
    FrameType: Integer;
    slice_pic_parameter_set_id: DWORD;
    PictureOrderCountNumber: DWORD;
    TemporalLayerIndex: DWORD;
    List0ReferenceFramesCount: DWORD;
    pList0ReferenceFrames: Pointer;
    List1ReferenceFramesCount: DWORD;
    pList1ReferenceFrames: Pointer;
    ReferenceFramesReconPictureDescriptorsCount: DWORD;
    pReferenceFramesReconPictureDescriptors: Pointer;
    List0RefPicModificationsCount: DWORD;
    pList0RefPicModifications: Pointer;
    List1RefPicModificationsCount: DWORD;
    pList1RefPicModifications: Pointer;
    QPMapValuesCount: DWORD;
    pRateControlQPMap: Pointer;
  end;
const D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC = extern struct {
    Flags: i32,
    FrameType: i32,
    slice_pic_parameter_set_id: u32,
    PictureOrderCountNumber: u32,
    TemporalLayerIndex: u32,
    List0ReferenceFramesCount: u32,
    pList0ReferenceFrames: ?*anyopaque,
    List1ReferenceFramesCount: u32,
    pList1ReferenceFrames: ?*anyopaque,
    ReferenceFramesReconPictureDescriptorsCount: u32,
    pReferenceFramesReconPictureDescriptors: ?*anyopaque,
    List0RefPicModificationsCount: u32,
    pList0RefPicModifications: ?*anyopaque,
    List1RefPicModificationsCount: u32,
    pList1RefPicModifications: ?*anyopaque,
    QPMapValuesCount: u32,
    pRateControlQPMap: ?*anyopaque,
};
type
  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC {.bycopy.} = object
    Flags: int32
    FrameType: int32
    slice_pic_parameter_set_id: uint32
    PictureOrderCountNumber: uint32
    TemporalLayerIndex: uint32
    List0ReferenceFramesCount: uint32
    pList0ReferenceFrames: pointer
    List1ReferenceFramesCount: uint32
    pList1ReferenceFrames: pointer
    ReferenceFramesReconPictureDescriptorsCount: uint32
    pReferenceFramesReconPictureDescriptors: pointer
    List0RefPicModificationsCount: uint32
    pList0RefPicModifications: pointer
    List1RefPicModificationsCount: uint32
    pList1RefPicModifications: pointer
    QPMapValuesCount: uint32
    pRateControlQPMap: pointer
struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC
{
    int Flags;
    int FrameType;
    uint slice_pic_parameter_set_id;
    uint PictureOrderCountNumber;
    uint TemporalLayerIndex;
    uint List0ReferenceFramesCount;
    void* pList0ReferenceFrames;
    uint List1ReferenceFramesCount;
    void* pList1ReferenceFrames;
    uint ReferenceFramesReconPictureDescriptorsCount;
    void* pReferenceFramesReconPictureDescriptors;
    uint List0RefPicModificationsCount;
    void* pList0RefPicModifications;
    uint List1RefPicModificationsCount;
    void* pList1RefPicModifications;
    uint QPMapValuesCount;
    void* pRateControlQPMap;
}

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_PICTURE_CONTROL_CODEC_DATA_HEVC サイズ: 68 バイト(x86)
dim st, 17    ; 4byte整数×17(構造体サイズ 68 / 4 切り上げ)
; Flags : D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; FrameType : D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; slice_pic_parameter_set_id : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; PictureOrderCountNumber : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; TemporalLayerIndex : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; List0ReferenceFramesCount : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; pList0ReferenceFrames : DWORD* (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; List1ReferenceFramesCount : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; pList1ReferenceFrames : DWORD* (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ReferenceFramesReconPictureDescriptorsCount : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; pReferenceFramesReconPictureDescriptors : D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC* (+40, 4byte)  varptr(st)+40 を基点に操作(4byte:入れ子/配列)
; List0RefPicModificationsCount : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; pList0RefPicModifications : DWORD* (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; List1RefPicModificationsCount : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; pList1RefPicModifications : DWORD* (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; QPMapValuesCount : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; pRateControlQPMap : CHAR* (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC サイズ: 112 バイト(x64)
dim st, 28    ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; Flags : D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; FrameType : D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; slice_pic_parameter_set_id : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; PictureOrderCountNumber : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; TemporalLayerIndex : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; List0ReferenceFramesCount : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; pList0ReferenceFrames : DWORD* (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; List1ReferenceFramesCount : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; pList1ReferenceFrames : DWORD* (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ReferenceFramesReconPictureDescriptorsCount : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; pReferenceFramesReconPictureDescriptors : D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC* (+56, 8byte)  varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; List0RefPicModificationsCount : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; pList0RefPicModifications : DWORD* (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; List1RefPicModificationsCount : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; pList1RefPicModifications : DWORD* (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; QPMapValuesCount : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; pRateControlQPMap : CHAR* (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC
    #field int Flags
    #field int FrameType
    #field int slice_pic_parameter_set_id
    #field int PictureOrderCountNumber
    #field int TemporalLayerIndex
    #field int List0ReferenceFramesCount
    #field intptr pList0ReferenceFrames
    #field int List1ReferenceFramesCount
    #field intptr pList1ReferenceFrames
    #field int ReferenceFramesReconPictureDescriptorsCount
    #field intptr pReferenceFramesReconPictureDescriptors
    #field int List0RefPicModificationsCount
    #field intptr pList0RefPicModifications
    #field int List1RefPicModificationsCount
    #field intptr pList1RefPicModifications
    #field int QPMapValuesCount
    #field intptr pRateControlQPMap
#endstruct

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