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

D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG

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

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

フィールド

フィールドサイズx64x86説明
CdefBitsULONGLONG8+0+0CDEFフィルタ強度を選択するためのビット数。プリセット数を規定する。
CdefDampingMinus3ULONGLONG8+8+8CDEFのダンピング係数から3を引いた値。
CdefYPriStrengthULONGLONG64+16+16輝度の一次CDEF強度配列の先頭。
CdefUVPriStrengthULONGLONG64+80+80色差の一次CDEF強度配列の先頭。
CdefYSecStrengthULONGLONG64+144+144輝度の二次CDEF強度配列の先頭。
CdefUVSecStrengthULONGLONG64+208+208色差の二次CDEF強度配列の先頭。

各言語での定義

#include <windows.h>

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

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

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

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

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_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;
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,
};
type
  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]
struct D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG
{
    ulong CdefBits;
    ulong CdefDampingMinus3;
    ulong[8] CdefYPriStrength;
    ulong[8] CdefUVPriStrength;
    ulong[8] CdefYSecStrength;
    ulong[8] CdefUVSecStrength;
}

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_AV1_CDEF_CONFIG サイズ: 272 バイト(x64)
dim st, 68    ; 4byte整数×68(構造体サイズ 272 / 4 切り上げ)
; CdefBits : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; CdefDampingMinus3 : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; CdefYPriStrength : ULONGLONG (+16, 64byte)  varptr(st)+16 を基点に操作(64byte:入れ子/配列)
; CdefUVPriStrength : ULONGLONG (+80, 64byte)  varptr(st)+80 を基点に操作(64byte:入れ子/配列)
; CdefYSecStrength : ULONGLONG (+144, 64byte)  varptr(st)+144 を基点に操作(64byte:入れ子/配列)
; CdefUVSecStrength : ULONGLONG (+208, 64byte)  varptr(st)+208 を基点に操作(64byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#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

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