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

DXVA_ConfigPictureDecode

構造体
サイズx64: 76 バイト / x86: 76 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
dwFunctionDWORD4+0+0DXVAデコード処理関数を識別する番号である。
dwReservedBitsDWORD12+4+4予約ビット。将来拡張用で0を設定する。
guidConfigBitstreamEncryptionGUID16+16+16ビットストリームバッファの暗号化方式を示すGUIDである。
guidConfigMBcontrolEncryptionGUID16+32+32マクロブロック制御バッファの暗号化方式を示すGUIDである。
guidConfigResidDiffEncryptionGUID16+48+48残差データバッファの暗号化方式を示すGUIDである。
bConfigBitstreamRawBYTE1+64+64ビットストリームを生(raw)形式で渡すか否かを示す設定値である。
bConfigMBcontrolRasterOrderBYTE1+65+65マクロブロック制御をラスタ順で渡すか否かを示す設定値である。
bConfigResidDiffHostBYTE1+66+66残差差分をホスト側で計算するか否かを示す設定値である。
bConfigSpatialResid8BYTE1+67+67空間領域残差を8ビットで表現するか否かを示す設定値である。
bConfigResid8SubtractionBYTE1+68+688ビット残差の減算方式を示す設定値である。
bConfigSpatialHost8or9ClippingBYTE1+69+69空間領域ホスト側の8/9ビットクリッピング方式を示す設定値である。
bConfigSpatialResidInterleavedBYTE1+70+70空間領域残差をインターリーブ配置するか否かを示す設定値である。
bConfigIntraResidUnsignedBYTE1+71+71イントラ残差を符号なしで表現するか否かを示す設定値である。
bConfigResidDiffAcceleratorBYTE1+72+72残差差分計算をアクセラレータ側で行うか否かを示す設定値である。
bConfigHostInverseScanBYTE1+73+73逆スキャンをホスト側で行うか否かを示す設定値である。
bConfigSpecificIDCTBYTE1+74+74特定のIDCT実装を使用するか否かを示す設定値である。
bConfig4GroupedCoefsBYTE1+75+75係数を4個単位でグループ化するか否かを示す設定値である。

各言語での定義

#include <windows.h>

// DXVA_ConfigPictureDecode  (x64 76 / x86 76 バイト)
#pragma pack(push, 1)
typedef struct DXVA_ConfigPictureDecode {
    DWORD dwFunction;
    DWORD dwReservedBits[3];
    GUID guidConfigBitstreamEncryption;
    GUID guidConfigMBcontrolEncryption;
    GUID guidConfigResidDiffEncryption;
    BYTE bConfigBitstreamRaw;
    BYTE bConfigMBcontrolRasterOrder;
    BYTE bConfigResidDiffHost;
    BYTE bConfigSpatialResid8;
    BYTE bConfigResid8Subtraction;
    BYTE bConfigSpatialHost8or9Clipping;
    BYTE bConfigSpatialResidInterleaved;
    BYTE bConfigIntraResidUnsigned;
    BYTE bConfigResidDiffAccelerator;
    BYTE bConfigHostInverseScan;
    BYTE bConfigSpecificIDCT;
    BYTE bConfig4GroupedCoefs;
} DXVA_ConfigPictureDecode;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct DXVA_ConfigPictureDecode
{
    public uint dwFunction;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public uint[] dwReservedBits;
    public Guid guidConfigBitstreamEncryption;
    public Guid guidConfigMBcontrolEncryption;
    public Guid guidConfigResidDiffEncryption;
    public byte bConfigBitstreamRaw;
    public byte bConfigMBcontrolRasterOrder;
    public byte bConfigResidDiffHost;
    public byte bConfigSpatialResid8;
    public byte bConfigResid8Subtraction;
    public byte bConfigSpatialHost8or9Clipping;
    public byte bConfigSpatialResidInterleaved;
    public byte bConfigIntraResidUnsigned;
    public byte bConfigResidDiffAccelerator;
    public byte bConfigHostInverseScan;
    public byte bConfigSpecificIDCT;
    public byte bConfig4GroupedCoefs;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure DXVA_ConfigPictureDecode
    Public dwFunction As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Public dwReservedBits() As UInteger
    Public guidConfigBitstreamEncryption As Guid
    Public guidConfigMBcontrolEncryption As Guid
    Public guidConfigResidDiffEncryption As Guid
    Public bConfigBitstreamRaw As Byte
    Public bConfigMBcontrolRasterOrder As Byte
    Public bConfigResidDiffHost As Byte
    Public bConfigSpatialResid8 As Byte
    Public bConfigResid8Subtraction As Byte
    Public bConfigSpatialHost8or9Clipping As Byte
    Public bConfigSpatialResidInterleaved As Byte
    Public bConfigIntraResidUnsigned As Byte
    Public bConfigResidDiffAccelerator As Byte
    Public bConfigHostInverseScan As Byte
    Public bConfigSpecificIDCT As Byte
    Public bConfig4GroupedCoefs As Byte
End Structure
import ctypes
from ctypes import wintypes

class DXVA_ConfigPictureDecode(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("dwFunction", wintypes.DWORD),
        ("dwReservedBits", wintypes.DWORD * 3),
        ("guidConfigBitstreamEncryption", GUID),
        ("guidConfigMBcontrolEncryption", GUID),
        ("guidConfigResidDiffEncryption", GUID),
        ("bConfigBitstreamRaw", ctypes.c_ubyte),
        ("bConfigMBcontrolRasterOrder", ctypes.c_ubyte),
        ("bConfigResidDiffHost", ctypes.c_ubyte),
        ("bConfigSpatialResid8", ctypes.c_ubyte),
        ("bConfigResid8Subtraction", ctypes.c_ubyte),
        ("bConfigSpatialHost8or9Clipping", ctypes.c_ubyte),
        ("bConfigSpatialResidInterleaved", ctypes.c_ubyte),
        ("bConfigIntraResidUnsigned", ctypes.c_ubyte),
        ("bConfigResidDiffAccelerator", ctypes.c_ubyte),
        ("bConfigHostInverseScan", ctypes.c_ubyte),
        ("bConfigSpecificIDCT", ctypes.c_ubyte),
        ("bConfig4GroupedCoefs", ctypes.c_ubyte),
    ]
#[repr(C, packed(1))]
pub struct DXVA_ConfigPictureDecode {
    pub dwFunction: u32,
    pub dwReservedBits: [u32; 3],
    pub guidConfigBitstreamEncryption: GUID,
    pub guidConfigMBcontrolEncryption: GUID,
    pub guidConfigResidDiffEncryption: GUID,
    pub bConfigBitstreamRaw: u8,
    pub bConfigMBcontrolRasterOrder: u8,
    pub bConfigResidDiffHost: u8,
    pub bConfigSpatialResid8: u8,
    pub bConfigResid8Subtraction: u8,
    pub bConfigSpatialHost8or9Clipping: u8,
    pub bConfigSpatialResidInterleaved: u8,
    pub bConfigIntraResidUnsigned: u8,
    pub bConfigResidDiffAccelerator: u8,
    pub bConfigHostInverseScan: u8,
    pub bConfigSpecificIDCT: u8,
    pub bConfig4GroupedCoefs: u8,
}
import "golang.org/x/sys/windows"

type DXVA_ConfigPictureDecode struct {
	dwFunction uint32
	dwReservedBits [3]uint32
	guidConfigBitstreamEncryption windows.GUID
	guidConfigMBcontrolEncryption windows.GUID
	guidConfigResidDiffEncryption windows.GUID
	bConfigBitstreamRaw byte
	bConfigMBcontrolRasterOrder byte
	bConfigResidDiffHost byte
	bConfigSpatialResid8 byte
	bConfigResid8Subtraction byte
	bConfigSpatialHost8or9Clipping byte
	bConfigSpatialResidInterleaved byte
	bConfigIntraResidUnsigned byte
	bConfigResidDiffAccelerator byte
	bConfigHostInverseScan byte
	bConfigSpecificIDCT byte
	bConfig4GroupedCoefs byte
}
type
  DXVA_ConfigPictureDecode = packed record
    dwFunction: DWORD;
    dwReservedBits: array[0..2] of DWORD;
    guidConfigBitstreamEncryption: TGUID;
    guidConfigMBcontrolEncryption: TGUID;
    guidConfigResidDiffEncryption: TGUID;
    bConfigBitstreamRaw: Byte;
    bConfigMBcontrolRasterOrder: Byte;
    bConfigResidDiffHost: Byte;
    bConfigSpatialResid8: Byte;
    bConfigResid8Subtraction: Byte;
    bConfigSpatialHost8or9Clipping: Byte;
    bConfigSpatialResidInterleaved: Byte;
    bConfigIntraResidUnsigned: Byte;
    bConfigResidDiffAccelerator: Byte;
    bConfigHostInverseScan: Byte;
    bConfigSpecificIDCT: Byte;
    bConfig4GroupedCoefs: Byte;
  end;
const DXVA_ConfigPictureDecode = extern struct {
    dwFunction: u32,
    dwReservedBits: [3]u32,
    guidConfigBitstreamEncryption: GUID,
    guidConfigMBcontrolEncryption: GUID,
    guidConfigResidDiffEncryption: GUID,
    bConfigBitstreamRaw: u8,
    bConfigMBcontrolRasterOrder: u8,
    bConfigResidDiffHost: u8,
    bConfigSpatialResid8: u8,
    bConfigResid8Subtraction: u8,
    bConfigSpatialHost8or9Clipping: u8,
    bConfigSpatialResidInterleaved: u8,
    bConfigIntraResidUnsigned: u8,
    bConfigResidDiffAccelerator: u8,
    bConfigHostInverseScan: u8,
    bConfigSpecificIDCT: u8,
    bConfig4GroupedCoefs: u8,
};
type
  DXVA_ConfigPictureDecode {.packed.} = object
    dwFunction: uint32
    dwReservedBits: array[3, uint32]
    guidConfigBitstreamEncryption: GUID
    guidConfigMBcontrolEncryption: GUID
    guidConfigResidDiffEncryption: GUID
    bConfigBitstreamRaw: uint8
    bConfigMBcontrolRasterOrder: uint8
    bConfigResidDiffHost: uint8
    bConfigSpatialResid8: uint8
    bConfigResid8Subtraction: uint8
    bConfigSpatialHost8or9Clipping: uint8
    bConfigSpatialResidInterleaved: uint8
    bConfigIntraResidUnsigned: uint8
    bConfigResidDiffAccelerator: uint8
    bConfigHostInverseScan: uint8
    bConfigSpecificIDCT: uint8
    bConfig4GroupedCoefs: uint8
align(1)
struct DXVA_ConfigPictureDecode
{
    uint dwFunction;
    uint[3] dwReservedBits;
    GUID guidConfigBitstreamEncryption;
    GUID guidConfigMBcontrolEncryption;
    GUID guidConfigResidDiffEncryption;
    ubyte bConfigBitstreamRaw;
    ubyte bConfigMBcontrolRasterOrder;
    ubyte bConfigResidDiffHost;
    ubyte bConfigSpatialResid8;
    ubyte bConfigResid8Subtraction;
    ubyte bConfigSpatialHost8or9Clipping;
    ubyte bConfigSpatialResidInterleaved;
    ubyte bConfigIntraResidUnsigned;
    ubyte bConfigResidDiffAccelerator;
    ubyte bConfigHostInverseScan;
    ubyte bConfigSpecificIDCT;
    ubyte bConfig4GroupedCoefs;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DXVA_ConfigPictureDecode サイズ: 76 バイト(x64)
dim st, 19    ; 4byte整数×19(構造体サイズ 76 / 4 切り上げ)
; dwFunction : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwReservedBits : DWORD (+4, 12byte)  varptr(st)+4 を基点に操作(12byte:入れ子/配列)
; guidConfigBitstreamEncryption : GUID (+16, 16byte)  varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; guidConfigMBcontrolEncryption : GUID (+32, 16byte)  varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; guidConfigResidDiffEncryption : GUID (+48, 16byte)  varptr(st)+48 を基点に操作(16byte:入れ子/配列)
; bConfigBitstreamRaw : BYTE (+64, 1byte)  poke st,64,値  /  値 = peek(st,64)
; bConfigMBcontrolRasterOrder : BYTE (+65, 1byte)  poke st,65,値  /  値 = peek(st,65)
; bConfigResidDiffHost : BYTE (+66, 1byte)  poke st,66,値  /  値 = peek(st,66)
; bConfigSpatialResid8 : BYTE (+67, 1byte)  poke st,67,値  /  値 = peek(st,67)
; bConfigResid8Subtraction : BYTE (+68, 1byte)  poke st,68,値  /  値 = peek(st,68)
; bConfigSpatialHost8or9Clipping : BYTE (+69, 1byte)  poke st,69,値  /  値 = peek(st,69)
; bConfigSpatialResidInterleaved : BYTE (+70, 1byte)  poke st,70,値  /  値 = peek(st,70)
; bConfigIntraResidUnsigned : BYTE (+71, 1byte)  poke st,71,値  /  値 = peek(st,71)
; bConfigResidDiffAccelerator : BYTE (+72, 1byte)  poke st,72,値  /  値 = peek(st,72)
; bConfigHostInverseScan : BYTE (+73, 1byte)  poke st,73,値  /  値 = peek(st,73)
; bConfigSpecificIDCT : BYTE (+74, 1byte)  poke st,74,値  /  値 = peek(st,74)
; bConfig4GroupedCoefs : BYTE (+75, 1byte)  poke st,75,値  /  値 = peek(st,75)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global DXVA_ConfigPictureDecode, pack=1
    #field int dwFunction
    #field int dwReservedBits 3
    #field GUID guidConfigBitstreamEncryption
    #field GUID guidConfigMBcontrolEncryption
    #field GUID guidConfigResidDiffEncryption
    #field byte bConfigBitstreamRaw
    #field byte bConfigMBcontrolRasterOrder
    #field byte bConfigResidDiffHost
    #field byte bConfigSpatialResid8
    #field byte bConfigResid8Subtraction
    #field byte bConfigSpatialHost8or9Clipping
    #field byte bConfigSpatialResidInterleaved
    #field byte bConfigIntraResidUnsigned
    #field byte bConfigResidDiffAccelerator
    #field byte bConfigHostInverseScan
    #field byte bConfigSpecificIDCT
    #field byte bConfig4GroupedCoefs
#endstruct

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