ホーム › Media.MediaFoundation › DXVA_BufferDescription
DXVA_BufferDescription
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwTypeIndex | DWORD | 4 | +0 | +0 | バッファの種類を示すインデックスである。 |
| dwBufferIndex | DWORD | 4 | +4 | +4 | デコード用バッファ配列内でのバッファインデックスである。 |
| dwDataOffset | DWORD | 4 | +8 | +8 | バッファ内で有効データが始まるバイトオフセットである。 |
| dwDataSize | DWORD | 4 | +12 | +12 | バッファ内の有効データのバイトサイズである。 |
| dwFirstMBaddress | DWORD | 4 | +16 | +16 | このバッファが対象とする先頭マクロブロックのアドレスである。 |
| dwNumMBsInBuffer | DWORD | 4 | +20 | +20 | このバッファに含まれるマクロブロックの数である。 |
| dwWidth | DWORD | 4 | +24 | +24 | 対象データの幅(ピクセル)を示す。 |
| dwHeight | DWORD | 4 | +28 | +28 | 対象データの高さ(ピクセル)を示す。 |
| dwStride | DWORD | 4 | +32 | +32 | 1行あたりのバイト数(ストライド)を示す。 |
| dwReservedBits | DWORD | 4 | +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 Structureimport 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: uint32align(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