ホーム › Media.MediaFoundation › D3D12_VIDEO_ENCODER_OUTPUT_METADATA
D3D12_VIDEO_ENCODER_OUTPUT_METADATA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| EncodeErrorFlags | ULONGLONG | 8 | +0 | +0 | エンコード処理中に発生したエラーを示すフラグである。0で正常。 |
| EncodeStats | D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS | 48 | +8 | +8 | 当該フレームのエンコード統計情報(QP/CU数等)を格納する。 |
| EncodedBitstreamWrittenBytesCount | ULONGLONG | 8 | +56 | +56 | 出力ビットストリームに実際に書き込まれたバイト数を示す。 |
| WrittenSubregionsCount | ULONGLONG | 8 | +64 | +64 | 出力された有効なサブリージョン(スライス)の数を示す。 |
各言語での定義
#include <windows.h>
// D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS (x64 48 / x86 48 バイト)
typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS {
ULONGLONG AverageQP;
ULONGLONG IntraCodingUnitsCount;
ULONGLONG InterCodingUnitsCount;
ULONGLONG SkipCodingUnitsCount;
ULONGLONG AverageMotionEstimationXDirection;
ULONGLONG AverageMotionEstimationYDirection;
} D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS;
// D3D12_VIDEO_ENCODER_OUTPUT_METADATA (x64 72 / x86 72 バイト)
typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA {
ULONGLONG EncodeErrorFlags;
D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS EncodeStats;
ULONGLONG EncodedBitstreamWrittenBytesCount;
ULONGLONG WrittenSubregionsCount;
} D3D12_VIDEO_ENCODER_OUTPUT_METADATA;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS
{
public ulong AverageQP;
public ulong IntraCodingUnitsCount;
public ulong InterCodingUnitsCount;
public ulong SkipCodingUnitsCount;
public ulong AverageMotionEstimationXDirection;
public ulong AverageMotionEstimationYDirection;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA
{
public ulong EncodeErrorFlags;
public D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS EncodeStats;
public ulong EncodedBitstreamWrittenBytesCount;
public ulong WrittenSubregionsCount;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS
Public AverageQP As ULong
Public IntraCodingUnitsCount As ULong
Public InterCodingUnitsCount As ULong
Public SkipCodingUnitsCount As ULong
Public AverageMotionEstimationXDirection As ULong
Public AverageMotionEstimationYDirection As ULong
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3D12_VIDEO_ENCODER_OUTPUT_METADATA
Public EncodeErrorFlags As ULong
Public EncodeStats As D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS
Public EncodedBitstreamWrittenBytesCount As ULong
Public WrittenSubregionsCount As ULong
End Structureimport ctypes
from ctypes import wintypes
class D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS(ctypes.Structure):
_fields_ = [
("AverageQP", ctypes.c_ulonglong),
("IntraCodingUnitsCount", ctypes.c_ulonglong),
("InterCodingUnitsCount", ctypes.c_ulonglong),
("SkipCodingUnitsCount", ctypes.c_ulonglong),
("AverageMotionEstimationXDirection", ctypes.c_ulonglong),
("AverageMotionEstimationYDirection", ctypes.c_ulonglong),
]
class D3D12_VIDEO_ENCODER_OUTPUT_METADATA(ctypes.Structure):
_fields_ = [
("EncodeErrorFlags", ctypes.c_ulonglong),
("EncodeStats", D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS),
("EncodedBitstreamWrittenBytesCount", ctypes.c_ulonglong),
("WrittenSubregionsCount", ctypes.c_ulonglong),
]#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS {
pub AverageQP: u64,
pub IntraCodingUnitsCount: u64,
pub InterCodingUnitsCount: u64,
pub SkipCodingUnitsCount: u64,
pub AverageMotionEstimationXDirection: u64,
pub AverageMotionEstimationYDirection: u64,
}
#[repr(C)]
pub struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA {
pub EncodeErrorFlags: u64,
pub EncodeStats: D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS,
pub EncodedBitstreamWrittenBytesCount: u64,
pub WrittenSubregionsCount: u64,
}import "golang.org/x/sys/windows"
type D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS struct {
AverageQP uint64
IntraCodingUnitsCount uint64
InterCodingUnitsCount uint64
SkipCodingUnitsCount uint64
AverageMotionEstimationXDirection uint64
AverageMotionEstimationYDirection uint64
}
type D3D12_VIDEO_ENCODER_OUTPUT_METADATA struct {
EncodeErrorFlags uint64
EncodeStats D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS
EncodedBitstreamWrittenBytesCount uint64
WrittenSubregionsCount uint64
}type
D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS = record
AverageQP: UInt64;
IntraCodingUnitsCount: UInt64;
InterCodingUnitsCount: UInt64;
SkipCodingUnitsCount: UInt64;
AverageMotionEstimationXDirection: UInt64;
AverageMotionEstimationYDirection: UInt64;
end;
D3D12_VIDEO_ENCODER_OUTPUT_METADATA = record
EncodeErrorFlags: UInt64;
EncodeStats: D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS;
EncodedBitstreamWrittenBytesCount: UInt64;
WrittenSubregionsCount: UInt64;
end;const D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS = extern struct {
AverageQP: u64,
IntraCodingUnitsCount: u64,
InterCodingUnitsCount: u64,
SkipCodingUnitsCount: u64,
AverageMotionEstimationXDirection: u64,
AverageMotionEstimationYDirection: u64,
};
const D3D12_VIDEO_ENCODER_OUTPUT_METADATA = extern struct {
EncodeErrorFlags: u64,
EncodeStats: D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS,
EncodedBitstreamWrittenBytesCount: u64,
WrittenSubregionsCount: u64,
};type
D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS {.bycopy.} = object
AverageQP: uint64
IntraCodingUnitsCount: uint64
InterCodingUnitsCount: uint64
SkipCodingUnitsCount: uint64
AverageMotionEstimationXDirection: uint64
AverageMotionEstimationYDirection: uint64
D3D12_VIDEO_ENCODER_OUTPUT_METADATA {.bycopy.} = object
EncodeErrorFlags: uint64
EncodeStats: D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS
EncodedBitstreamWrittenBytesCount: uint64
WrittenSubregionsCount: uint64struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS
{
ulong AverageQP;
ulong IntraCodingUnitsCount;
ulong InterCodingUnitsCount;
ulong SkipCodingUnitsCount;
ulong AverageMotionEstimationXDirection;
ulong AverageMotionEstimationYDirection;
}
struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA
{
ulong EncodeErrorFlags;
D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS EncodeStats;
ulong EncodedBitstreamWrittenBytesCount;
ulong WrittenSubregionsCount;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; D3D12_VIDEO_ENCODER_OUTPUT_METADATA サイズ: 72 バイト(x64)
dim st, 18 ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; EncodeErrorFlags : ULONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; EncodeStats : D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS (+8, 48byte) varptr(st)+8 を基点に操作(48byte:入れ子/配列)
; EncodedBitstreamWrittenBytesCount : ULONGLONG (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; WrittenSubregionsCount : ULONGLONG (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS
#field int64 AverageQP
#field int64 IntraCodingUnitsCount
#field int64 InterCodingUnitsCount
#field int64 SkipCodingUnitsCount
#field int64 AverageMotionEstimationXDirection
#field int64 AverageMotionEstimationYDirection
#endstruct
#defstruct global D3D12_VIDEO_ENCODER_OUTPUT_METADATA
#field int64 EncodeErrorFlags
#field D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS EncodeStats
#field int64 EncodedBitstreamWrittenBytesCount
#field int64 WrittenSubregionsCount
#endstruct
stdim st, D3D12_VIDEO_ENCODER_OUTPUT_METADATA ; NSTRUCT 変数を確保
st->EncodeErrorFlags = 100
mes "EncodeErrorFlags=" + st->EncodeErrorFlags