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

DXVA_BufferDescription

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

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

フィールド

フィールドサイズx64x86説明
dwTypeIndexDWORD4+0+0バッファの種類を示すインデックスである。
dwBufferIndexDWORD4+4+4デコード用バッファ配列内でのバッファインデックスである。
dwDataOffsetDWORD4+8+8バッファ内で有効データが始まるバイトオフセットである。
dwDataSizeDWORD4+12+12バッファ内の有効データのバイトサイズである。
dwFirstMBaddressDWORD4+16+16このバッファが対象とする先頭マクロブロックのアドレスである。
dwNumMBsInBufferDWORD4+20+20このバッファに含まれるマクロブロックの数である。
dwWidthDWORD4+24+24対象データの幅(ピクセル)を示す。
dwHeightDWORD4+28+28対象データの高さ(ピクセル)を示す。
dwStrideDWORD4+32+321行あたりのバイト数(ストライド)を示す。
dwReservedBitsDWORD4+36+36予約ビット。将来拡張用で0を設定する。

各言語での定義

#include <windows.h>

// DXVA_BufferDescription  (x64 40 / x86 40 バイト)
#pragma pack(push, 1)
typedef struct DXVA_BufferDescription {
    DWORD dwTypeIndex;
    DWORD dwBufferIndex;
    DWORD dwDataOffset;
    DWORD dwDataSize;
    DWORD dwFirstMBaddress;
    DWORD dwNumMBsInBuffer;
    DWORD dwWidth;
    DWORD dwHeight;
    DWORD dwStride;
    DWORD dwReservedBits;
} DXVA_BufferDescription;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct DXVA_BufferDescription
{
    public uint dwTypeIndex;
    public uint dwBufferIndex;
    public uint dwDataOffset;
    public uint dwDataSize;
    public uint dwFirstMBaddress;
    public uint dwNumMBsInBuffer;
    public uint dwWidth;
    public uint dwHeight;
    public uint dwStride;
    public uint dwReservedBits;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure DXVA_BufferDescription
    Public dwTypeIndex As UInteger
    Public dwBufferIndex As UInteger
    Public dwDataOffset As UInteger
    Public dwDataSize As UInteger
    Public dwFirstMBaddress As UInteger
    Public dwNumMBsInBuffer As UInteger
    Public dwWidth As UInteger
    Public dwHeight As UInteger
    Public dwStride As UInteger
    Public dwReservedBits As UInteger
End Structure
import ctypes
from ctypes import wintypes

class DXVA_BufferDescription(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("dwTypeIndex", wintypes.DWORD),
        ("dwBufferIndex", wintypes.DWORD),
        ("dwDataOffset", wintypes.DWORD),
        ("dwDataSize", wintypes.DWORD),
        ("dwFirstMBaddress", wintypes.DWORD),
        ("dwNumMBsInBuffer", wintypes.DWORD),
        ("dwWidth", wintypes.DWORD),
        ("dwHeight", wintypes.DWORD),
        ("dwStride", wintypes.DWORD),
        ("dwReservedBits", wintypes.DWORD),
    ]
#[repr(C, packed(1))]
pub struct DXVA_BufferDescription {
    pub dwTypeIndex: u32,
    pub dwBufferIndex: u32,
    pub dwDataOffset: u32,
    pub dwDataSize: u32,
    pub dwFirstMBaddress: u32,
    pub dwNumMBsInBuffer: u32,
    pub dwWidth: u32,
    pub dwHeight: u32,
    pub dwStride: u32,
    pub dwReservedBits: u32,
}
import "golang.org/x/sys/windows"

type DXVA_BufferDescription struct {
	dwTypeIndex uint32
	dwBufferIndex uint32
	dwDataOffset uint32
	dwDataSize uint32
	dwFirstMBaddress uint32
	dwNumMBsInBuffer uint32
	dwWidth uint32
	dwHeight uint32
	dwStride uint32
	dwReservedBits uint32
}
type
  DXVA_BufferDescription = packed record
    dwTypeIndex: DWORD;
    dwBufferIndex: DWORD;
    dwDataOffset: DWORD;
    dwDataSize: DWORD;
    dwFirstMBaddress: DWORD;
    dwNumMBsInBuffer: DWORD;
    dwWidth: DWORD;
    dwHeight: DWORD;
    dwStride: DWORD;
    dwReservedBits: DWORD;
  end;
const DXVA_BufferDescription = extern struct {
    dwTypeIndex: u32,
    dwBufferIndex: u32,
    dwDataOffset: u32,
    dwDataSize: u32,
    dwFirstMBaddress: u32,
    dwNumMBsInBuffer: u32,
    dwWidth: u32,
    dwHeight: u32,
    dwStride: u32,
    dwReservedBits: u32,
};
type
  DXVA_BufferDescription {.packed.} = object
    dwTypeIndex: uint32
    dwBufferIndex: uint32
    dwDataOffset: uint32
    dwDataSize: uint32
    dwFirstMBaddress: uint32
    dwNumMBsInBuffer: uint32
    dwWidth: uint32
    dwHeight: uint32
    dwStride: uint32
    dwReservedBits: uint32
align(1)
struct DXVA_BufferDescription
{
    uint dwTypeIndex;
    uint dwBufferIndex;
    uint dwDataOffset;
    uint dwDataSize;
    uint dwFirstMBaddress;
    uint dwNumMBsInBuffer;
    uint dwWidth;
    uint dwHeight;
    uint dwStride;
    uint dwReservedBits;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DXVA_BufferDescription サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; dwTypeIndex : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwBufferIndex : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwDataOffset : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwDataSize : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwFirstMBaddress : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwNumMBsInBuffer : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwWidth : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwHeight : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwStride : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; dwReservedBits : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DXVA_BufferDescription, pack=1
    #field int dwTypeIndex
    #field int dwBufferIndex
    #field int dwDataOffset
    #field int dwDataSize
    #field int dwFirstMBaddress
    #field int dwNumMBsInBuffer
    #field int dwWidth
    #field int dwHeight
    #field int dwStride
    #field int dwReservedBits
#endstruct

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