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

D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG

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

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

フィールド

フィールドサイズx64x86説明
BaseQIndexULONGLONG8+0+0基準量子化インデックス(0〜255)。フレーム全体の品質基準を表す。
YDCDeltaQLONGLONG8+8+8輝度DC成分の量子化デルタ(符号付き)。
UDCDeltaQLONGLONG8+16+16色差U DC成分の量子化デルタ(符号付き)。
UACDeltaQLONGLONG8+24+24色差U AC成分の量子化デルタ(符号付き)。
VDCDeltaQLONGLONG8+32+32色差V DC成分の量子化デルタ(符号付き)。
VACDeltaQLONGLONG8+40+40色差V AC成分の量子化デルタ(符号付き)。
UsingQMatrixULONGLONG8+48+48量子化行列(QMatrix)を使用するか否かを示すフラグ。
QMYULONGLONG8+56+56輝度成分に用いる量子化行列のインデックス。
QMUULONGLONG8+64+64色差U成分に用いる量子化行列のインデックス。
QMVULONGLONG8+72+72色差V成分に用いる量子化行列のインデックス。

各言語での定義

#include <windows.h>

// 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;
using System;
using System.Runtime.InteropServices;

[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;
}
Imports System.Runtime.InteropServices

<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
import ctypes
from ctypes import wintypes

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),
    ]
#[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,
}
import "golang.org/x/sys/windows"

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_CONFIG = record
    BaseQIndex: UInt64;
    YDCDeltaQ: Int64;
    UDCDeltaQ: Int64;
    UACDeltaQ: Int64;
    VDCDeltaQ: Int64;
    VACDeltaQ: Int64;
    UsingQMatrix: UInt64;
    QMY: UInt64;
    QMU: UInt64;
    QMV: UInt64;
  end;
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,
};
type
  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
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;
}

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_CODEC_AV1_QUANTIZATION_CONFIG サイズ: 80 バイト(x64)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; BaseQIndex : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; YDCDeltaQ : LONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; UDCDeltaQ : LONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; UACDeltaQ : LONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; VDCDeltaQ : LONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; VACDeltaQ : LONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; UsingQMatrix : ULONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; QMY : ULONGLONG (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; QMU : ULONGLONG (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; QMV : ULONGLONG (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#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

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