ホーム › Media.MediaFoundation › D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS
D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| EncoderCodec | D3D12_VIDEO_ENCODER_CODEC | 4 | +0 | +0 | 解決対象メタデータに対応するエンコードコーデックを指定する。 |
| EncoderProfile | D3D12_VIDEO_ENCODER_PROFILE_DESC | 16/8 | +8 | +4 | 解決対象メタデータに対応するプロファイル記述子を指定する。 |
| EncoderInputFormat | DXGI_FORMAT | 4 | +24 | +12 | 解決対象メタデータに対応する入力DXGIフォーマットを指定する。 |
| EncodedPictureEffectiveResolution | D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC | 8 | +28 | +16 | 符号化されたピクチャの実効解像度を指定する。 |
| HWLayoutMetadata | D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER | 16 | +40 | +24 | ハードウェア依存レイアウトの未解決メタデータバッファを指定する。 |
各言語での定義
#include <windows.h>
// D3D12_VIDEO_ENCODER_PROFILE_DESC (x64 16 / x86 8 バイト)
typedef struct D3D12_VIDEO_ENCODER_PROFILE_DESC {
DWORD DataSize;
_Anonymous_e__Union Anonymous;
} D3D12_VIDEO_ENCODER_PROFILE_DESC;
// D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC (x64 8 / x86 8 バイト)
typedef struct D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC {
DWORD Width;
DWORD Height;
} D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC;
// D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER (x64 16 / x86 16 バイト)
typedef struct D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER {
ID3D12Resource* pBuffer;
ULONGLONG Offset;
} D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER;
// D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS (x64 56 / x86 40 バイト)
typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS {
D3D12_VIDEO_ENCODER_CODEC EncoderCodec;
D3D12_VIDEO_ENCODER_PROFILE_DESC EncoderProfile;
DXGI_FORMAT EncoderInputFormat;
D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncodedPictureEffectiveResolution;
D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER HWLayoutMetadata;
} D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_PROFILE_DESC
{
public uint DataSize;
public _Anonymous_e__Union Anonymous;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
{
public uint Width;
public uint Height;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER
{
public IntPtr pBuffer;
public ulong Offset;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS
{
public int EncoderCodec;
public D3D12_VIDEO_ENCODER_PROFILE_DESC EncoderProfile;
public int EncoderInputFormat;
public D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncodedPictureEffectiveResolution;
public D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER HWLayoutMetadata;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_PROFILE_DESC
Public DataSize As UInteger
Public Anonymous As _Anonymous_e__Union
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
Public Width As UInteger
Public Height As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER
Public pBuffer As IntPtr
Public Offset As ULong
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS
Public EncoderCodec As Integer
Public EncoderProfile As D3D12_VIDEO_ENCODER_PROFILE_DESC
Public EncoderInputFormat As Integer
Public EncodedPictureEffectiveResolution As D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
Public HWLayoutMetadata As D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER
End Structureimport ctypes
from ctypes import wintypes
class D3D12_VIDEO_ENCODER_PROFILE_DESC(ctypes.Structure):
_fields_ = [
("DataSize", wintypes.DWORD),
("Anonymous", _Anonymous_e__Union),
]
class D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC(ctypes.Structure):
_fields_ = [
("Width", wintypes.DWORD),
("Height", wintypes.DWORD),
]
class D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER(ctypes.Structure):
_fields_ = [
("pBuffer", ctypes.c_void_p),
("Offset", ctypes.c_ulonglong),
]
class D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS(ctypes.Structure):
_fields_ = [
("EncoderCodec", ctypes.c_int),
("EncoderProfile", D3D12_VIDEO_ENCODER_PROFILE_DESC),
("EncoderInputFormat", ctypes.c_int),
("EncodedPictureEffectiveResolution", D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC),
("HWLayoutMetadata", D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER),
]#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_PROFILE_DESC {
pub DataSize: u32,
pub Anonymous: _Anonymous_e__Union,
}
#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC {
pub Width: u32,
pub Height: u32,
}
#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER {
pub pBuffer: *mut core::ffi::c_void,
pub Offset: u64,
}
#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS {
pub EncoderCodec: i32,
pub EncoderProfile: D3D12_VIDEO_ENCODER_PROFILE_DESC,
pub EncoderInputFormat: i32,
pub EncodedPictureEffectiveResolution: D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC,
pub HWLayoutMetadata: D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER,
}import "golang.org/x/sys/windows"
type D3D12_VIDEO_ENCODER_PROFILE_DESC struct {
DataSize uint32
Anonymous _Anonymous_e__Union
}
type D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC struct {
Width uint32
Height uint32
}
type D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER struct {
pBuffer uintptr
Offset uint64
}
type D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS struct {
EncoderCodec int32
EncoderProfile D3D12_VIDEO_ENCODER_PROFILE_DESC
EncoderInputFormat int32
EncodedPictureEffectiveResolution D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
HWLayoutMetadata D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER
}type
D3D12_VIDEO_ENCODER_PROFILE_DESC = record
DataSize: DWORD;
Anonymous: _Anonymous_e__Union;
end;
D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC = record
Width: DWORD;
Height: DWORD;
end;
D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER = record
pBuffer: Pointer;
Offset: UInt64;
end;
D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS = record
EncoderCodec: Integer;
EncoderProfile: D3D12_VIDEO_ENCODER_PROFILE_DESC;
EncoderInputFormat: Integer;
EncodedPictureEffectiveResolution: D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC;
HWLayoutMetadata: D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER;
end;const D3D12_VIDEO_ENCODER_PROFILE_DESC = extern struct {
DataSize: u32,
Anonymous: _Anonymous_e__Union,
};
const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC = extern struct {
Width: u32,
Height: u32,
};
const D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER = extern struct {
pBuffer: ?*anyopaque,
Offset: u64,
};
const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS = extern struct {
EncoderCodec: i32,
EncoderProfile: D3D12_VIDEO_ENCODER_PROFILE_DESC,
EncoderInputFormat: i32,
EncodedPictureEffectiveResolution: D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC,
HWLayoutMetadata: D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER,
};type
D3D12_VIDEO_ENCODER_PROFILE_DESC {.bycopy.} = object
DataSize: uint32
Anonymous: _Anonymous_e__Union
D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC {.bycopy.} = object
Width: uint32
Height: uint32
D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER {.bycopy.} = object
pBuffer: pointer
Offset: uint64
D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS {.bycopy.} = object
EncoderCodec: int32
EncoderProfile: D3D12_VIDEO_ENCODER_PROFILE_DESC
EncoderInputFormat: int32
EncodedPictureEffectiveResolution: D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
HWLayoutMetadata: D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFERstruct D3D12_VIDEO_ENCODER_PROFILE_DESC
{
uint DataSize;
_Anonymous_e__Union Anonymous;
}
struct D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
{
uint Width;
uint Height;
}
struct D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER
{
void* pBuffer;
ulong Offset;
}
struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS
{
int EncoderCodec;
D3D12_VIDEO_ENCODER_PROFILE_DESC EncoderProfile;
int EncoderInputFormat;
D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncodedPictureEffectiveResolution;
D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER HWLayoutMetadata;
}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_RESOLVE_METADATA_INPUT_ARGUMENTS サイズ: 40 バイト(x86)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; EncoderCodec : D3D12_VIDEO_ENCODER_CODEC (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; EncoderProfile : D3D12_VIDEO_ENCODER_PROFILE_DESC (+4, 8byte) varptr(st)+4 を基点に操作(8byte:入れ子/配列)
; EncoderInputFormat : DXGI_FORMAT (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; EncodedPictureEffectiveResolution : D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC (+16, 8byte) varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; HWLayoutMetadata : D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER (+24, 16byte) varptr(st)+24 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS サイズ: 56 バイト(x64)
dim st, 14 ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; EncoderCodec : D3D12_VIDEO_ENCODER_CODEC (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; EncoderProfile : D3D12_VIDEO_ENCODER_PROFILE_DESC (+8, 16byte) varptr(st)+8 を基点に操作(16byte:入れ子/配列)
; EncoderInputFormat : DXGI_FORMAT (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; EncodedPictureEffectiveResolution : D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC (+28, 8byte) varptr(st)+28 を基点に操作(8byte:入れ子/配列)
; HWLayoutMetadata : D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER (+40, 16byte) varptr(st)+40 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global D3D12_VIDEO_ENCODER_PROFILE_DESC
#field int DataSize
#field byte Anonymous 8
#endstruct
#defstruct global D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC
#field int Width
#field int Height
#endstruct
#defstruct global D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER
#field intptr pBuffer
#field int64 Offset
#endstruct
#defstruct global D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS
#field int EncoderCodec
#field D3D12_VIDEO_ENCODER_PROFILE_DESC EncoderProfile
#field int EncoderInputFormat
#field D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncodedPictureEffectiveResolution
#field D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER HWLayoutMetadata
#endstruct
stdim st, D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS ; NSTRUCT 変数を確保
st->EncoderCodec = 100
mes "EncoderCodec=" + st->EncoderCodec