ホーム › Media.MediaFoundation › DXVAHDSW_CALLBACKS
DXVAHDSW_CALLBACKS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| CreateDevice | PDXVAHDSW_CreateDevice | 8/4 | +0 | +0 | ソフトウェアビデオプロセッサデバイスを生成するコールバック関数である。 |
| ProposeVideoPrivateFormat | PDXVAHDSW_ProposeVideoPrivateFormat | 8/4 | +8 | +4 | プライベートビデオフォーマットを提案するコールバック関数である。 |
| GetVideoProcessorDeviceCaps | PDXVAHDSW_GetVideoProcessorDeviceCaps | 8/4 | +16 | +8 | ビデオプロセッサデバイス能力を取得するコールバック関数である。 |
| GetVideoProcessorOutputFormats | PDXVAHDSW_GetVideoProcessorOutputFormats | 8/4 | +24 | +12 | 対応出力フォーマット一覧を取得するコールバック関数である。 |
| GetVideoProcessorInputFormats | PDXVAHDSW_GetVideoProcessorInputFormats | 8/4 | +32 | +16 | 対応入力フォーマット一覧を取得するコールバック関数である。 |
| GetVideoProcessorCaps | PDXVAHDSW_GetVideoProcessorCaps | 8/4 | +40 | +20 | ビデオプロセッサ能力を取得するコールバック関数である。 |
| GetVideoProcessorCustomRates | PDXVAHDSW_GetVideoProcessorCustomRates | 8/4 | +48 | +24 | 対応カスタムレート一覧を取得するコールバック関数である。 |
| GetVideoProcessorFilterRange | PDXVAHDSW_GetVideoProcessorFilterRange | 8/4 | +56 | +28 | フィルタの値域を取得するコールバック関数である。 |
| DestroyDevice | PDXVAHDSW_DestroyDevice | 8/4 | +64 | +32 | ソフトウェアビデオプロセッサデバイスを破棄するコールバック関数である。 |
| CreateVideoProcessor | PDXVAHDSW_CreateVideoProcessor | 8/4 | +72 | +36 | ビデオプロセッサインスタンスを生成するコールバック関数である。 |
| SetVideoProcessBltState | PDXVAHDSW_SetVideoProcessBltState | 8/4 | +80 | +40 | Blt(出力)ステートを設定するコールバック関数である。 |
| GetVideoProcessBltStatePrivate | PDXVAHDSW_GetVideoProcessBltStatePrivate | 8/4 | +88 | +44 | プライベートBltステートを取得するコールバック関数である。 |
| SetVideoProcessStreamState | PDXVAHDSW_SetVideoProcessStreamState | 8/4 | +96 | +48 | ストリームステートを設定するコールバック関数である。 |
| GetVideoProcessStreamStatePrivate | PDXVAHDSW_GetVideoProcessStreamStatePrivate | 8/4 | +104 | +52 | プライベートストリームステートを取得するコールバック関数である。 |
| VideoProcessBltHD | PDXVAHDSW_VideoProcessBltHD | 8/4 | +112 | +56 | 実際のビデオ処理(合成/変換)を実行するコールバック関数である。 |
| DestroyVideoProcessor | PDXVAHDSW_DestroyVideoProcessor | 8/4 | +120 | +60 | ビデオプロセッサインスタンスを破棄するコールバック関数である。 |
各言語での定義
#include <windows.h>
// DXVAHDSW_CALLBACKS (x64 128 / x86 64 バイト)
typedef struct DXVAHDSW_CALLBACKS {
PDXVAHDSW_CreateDevice CreateDevice;
PDXVAHDSW_ProposeVideoPrivateFormat ProposeVideoPrivateFormat;
PDXVAHDSW_GetVideoProcessorDeviceCaps GetVideoProcessorDeviceCaps;
PDXVAHDSW_GetVideoProcessorOutputFormats GetVideoProcessorOutputFormats;
PDXVAHDSW_GetVideoProcessorInputFormats GetVideoProcessorInputFormats;
PDXVAHDSW_GetVideoProcessorCaps GetVideoProcessorCaps;
PDXVAHDSW_GetVideoProcessorCustomRates GetVideoProcessorCustomRates;
PDXVAHDSW_GetVideoProcessorFilterRange GetVideoProcessorFilterRange;
PDXVAHDSW_DestroyDevice DestroyDevice;
PDXVAHDSW_CreateVideoProcessor CreateVideoProcessor;
PDXVAHDSW_SetVideoProcessBltState SetVideoProcessBltState;
PDXVAHDSW_GetVideoProcessBltStatePrivate GetVideoProcessBltStatePrivate;
PDXVAHDSW_SetVideoProcessStreamState SetVideoProcessStreamState;
PDXVAHDSW_GetVideoProcessStreamStatePrivate GetVideoProcessStreamStatePrivate;
PDXVAHDSW_VideoProcessBltHD VideoProcessBltHD;
PDXVAHDSW_DestroyVideoProcessor DestroyVideoProcessor;
} DXVAHDSW_CALLBACKS;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DXVAHDSW_CALLBACKS
{
public IntPtr CreateDevice;
public IntPtr ProposeVideoPrivateFormat;
public IntPtr GetVideoProcessorDeviceCaps;
public IntPtr GetVideoProcessorOutputFormats;
public IntPtr GetVideoProcessorInputFormats;
public IntPtr GetVideoProcessorCaps;
public IntPtr GetVideoProcessorCustomRates;
public IntPtr GetVideoProcessorFilterRange;
public IntPtr DestroyDevice;
public IntPtr CreateVideoProcessor;
public IntPtr SetVideoProcessBltState;
public IntPtr GetVideoProcessBltStatePrivate;
public IntPtr SetVideoProcessStreamState;
public IntPtr GetVideoProcessStreamStatePrivate;
public IntPtr VideoProcessBltHD;
public IntPtr DestroyVideoProcessor;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DXVAHDSW_CALLBACKS
Public CreateDevice As IntPtr
Public ProposeVideoPrivateFormat As IntPtr
Public GetVideoProcessorDeviceCaps As IntPtr
Public GetVideoProcessorOutputFormats As IntPtr
Public GetVideoProcessorInputFormats As IntPtr
Public GetVideoProcessorCaps As IntPtr
Public GetVideoProcessorCustomRates As IntPtr
Public GetVideoProcessorFilterRange As IntPtr
Public DestroyDevice As IntPtr
Public CreateVideoProcessor As IntPtr
Public SetVideoProcessBltState As IntPtr
Public GetVideoProcessBltStatePrivate As IntPtr
Public SetVideoProcessStreamState As IntPtr
Public GetVideoProcessStreamStatePrivate As IntPtr
Public VideoProcessBltHD As IntPtr
Public DestroyVideoProcessor As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class DXVAHDSW_CALLBACKS(ctypes.Structure):
_fields_ = [
("CreateDevice", ctypes.c_void_p),
("ProposeVideoPrivateFormat", ctypes.c_void_p),
("GetVideoProcessorDeviceCaps", ctypes.c_void_p),
("GetVideoProcessorOutputFormats", ctypes.c_void_p),
("GetVideoProcessorInputFormats", ctypes.c_void_p),
("GetVideoProcessorCaps", ctypes.c_void_p),
("GetVideoProcessorCustomRates", ctypes.c_void_p),
("GetVideoProcessorFilterRange", ctypes.c_void_p),
("DestroyDevice", ctypes.c_void_p),
("CreateVideoProcessor", ctypes.c_void_p),
("SetVideoProcessBltState", ctypes.c_void_p),
("GetVideoProcessBltStatePrivate", ctypes.c_void_p),
("SetVideoProcessStreamState", ctypes.c_void_p),
("GetVideoProcessStreamStatePrivate", ctypes.c_void_p),
("VideoProcessBltHD", ctypes.c_void_p),
("DestroyVideoProcessor", ctypes.c_void_p),
]#[repr(C)]
pub struct DXVAHDSW_CALLBACKS {
pub CreateDevice: *mut core::ffi::c_void,
pub ProposeVideoPrivateFormat: *mut core::ffi::c_void,
pub GetVideoProcessorDeviceCaps: *mut core::ffi::c_void,
pub GetVideoProcessorOutputFormats: *mut core::ffi::c_void,
pub GetVideoProcessorInputFormats: *mut core::ffi::c_void,
pub GetVideoProcessorCaps: *mut core::ffi::c_void,
pub GetVideoProcessorCustomRates: *mut core::ffi::c_void,
pub GetVideoProcessorFilterRange: *mut core::ffi::c_void,
pub DestroyDevice: *mut core::ffi::c_void,
pub CreateVideoProcessor: *mut core::ffi::c_void,
pub SetVideoProcessBltState: *mut core::ffi::c_void,
pub GetVideoProcessBltStatePrivate: *mut core::ffi::c_void,
pub SetVideoProcessStreamState: *mut core::ffi::c_void,
pub GetVideoProcessStreamStatePrivate: *mut core::ffi::c_void,
pub VideoProcessBltHD: *mut core::ffi::c_void,
pub DestroyVideoProcessor: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type DXVAHDSW_CALLBACKS struct {
CreateDevice uintptr
ProposeVideoPrivateFormat uintptr
GetVideoProcessorDeviceCaps uintptr
GetVideoProcessorOutputFormats uintptr
GetVideoProcessorInputFormats uintptr
GetVideoProcessorCaps uintptr
GetVideoProcessorCustomRates uintptr
GetVideoProcessorFilterRange uintptr
DestroyDevice uintptr
CreateVideoProcessor uintptr
SetVideoProcessBltState uintptr
GetVideoProcessBltStatePrivate uintptr
SetVideoProcessStreamState uintptr
GetVideoProcessStreamStatePrivate uintptr
VideoProcessBltHD uintptr
DestroyVideoProcessor uintptr
}type
DXVAHDSW_CALLBACKS = record
CreateDevice: Pointer;
ProposeVideoPrivateFormat: Pointer;
GetVideoProcessorDeviceCaps: Pointer;
GetVideoProcessorOutputFormats: Pointer;
GetVideoProcessorInputFormats: Pointer;
GetVideoProcessorCaps: Pointer;
GetVideoProcessorCustomRates: Pointer;
GetVideoProcessorFilterRange: Pointer;
DestroyDevice: Pointer;
CreateVideoProcessor: Pointer;
SetVideoProcessBltState: Pointer;
GetVideoProcessBltStatePrivate: Pointer;
SetVideoProcessStreamState: Pointer;
GetVideoProcessStreamStatePrivate: Pointer;
VideoProcessBltHD: Pointer;
DestroyVideoProcessor: Pointer;
end;const DXVAHDSW_CALLBACKS = extern struct {
CreateDevice: ?*anyopaque,
ProposeVideoPrivateFormat: ?*anyopaque,
GetVideoProcessorDeviceCaps: ?*anyopaque,
GetVideoProcessorOutputFormats: ?*anyopaque,
GetVideoProcessorInputFormats: ?*anyopaque,
GetVideoProcessorCaps: ?*anyopaque,
GetVideoProcessorCustomRates: ?*anyopaque,
GetVideoProcessorFilterRange: ?*anyopaque,
DestroyDevice: ?*anyopaque,
CreateVideoProcessor: ?*anyopaque,
SetVideoProcessBltState: ?*anyopaque,
GetVideoProcessBltStatePrivate: ?*anyopaque,
SetVideoProcessStreamState: ?*anyopaque,
GetVideoProcessStreamStatePrivate: ?*anyopaque,
VideoProcessBltHD: ?*anyopaque,
DestroyVideoProcessor: ?*anyopaque,
};type
DXVAHDSW_CALLBACKS {.bycopy.} = object
CreateDevice: pointer
ProposeVideoPrivateFormat: pointer
GetVideoProcessorDeviceCaps: pointer
GetVideoProcessorOutputFormats: pointer
GetVideoProcessorInputFormats: pointer
GetVideoProcessorCaps: pointer
GetVideoProcessorCustomRates: pointer
GetVideoProcessorFilterRange: pointer
DestroyDevice: pointer
CreateVideoProcessor: pointer
SetVideoProcessBltState: pointer
GetVideoProcessBltStatePrivate: pointer
SetVideoProcessStreamState: pointer
GetVideoProcessStreamStatePrivate: pointer
VideoProcessBltHD: pointer
DestroyVideoProcessor: pointerstruct DXVAHDSW_CALLBACKS
{
void* CreateDevice;
void* ProposeVideoPrivateFormat;
void* GetVideoProcessorDeviceCaps;
void* GetVideoProcessorOutputFormats;
void* GetVideoProcessorInputFormats;
void* GetVideoProcessorCaps;
void* GetVideoProcessorCustomRates;
void* GetVideoProcessorFilterRange;
void* DestroyDevice;
void* CreateVideoProcessor;
void* SetVideoProcessBltState;
void* GetVideoProcessBltStatePrivate;
void* SetVideoProcessStreamState;
void* GetVideoProcessStreamStatePrivate;
void* VideoProcessBltHD;
void* DestroyVideoProcessor;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DXVAHDSW_CALLBACKS サイズ: 64 バイト(x86)
dim st, 16 ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; CreateDevice : PDXVAHDSW_CreateDevice (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; ProposeVideoPrivateFormat : PDXVAHDSW_ProposeVideoPrivateFormat (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; GetVideoProcessorDeviceCaps : PDXVAHDSW_GetVideoProcessorDeviceCaps (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; GetVideoProcessorOutputFormats : PDXVAHDSW_GetVideoProcessorOutputFormats (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; GetVideoProcessorInputFormats : PDXVAHDSW_GetVideoProcessorInputFormats (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; GetVideoProcessorCaps : PDXVAHDSW_GetVideoProcessorCaps (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; GetVideoProcessorCustomRates : PDXVAHDSW_GetVideoProcessorCustomRates (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; GetVideoProcessorFilterRange : PDXVAHDSW_GetVideoProcessorFilterRange (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; DestroyDevice : PDXVAHDSW_DestroyDevice (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; CreateVideoProcessor : PDXVAHDSW_CreateVideoProcessor (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; SetVideoProcessBltState : PDXVAHDSW_SetVideoProcessBltState (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; GetVideoProcessBltStatePrivate : PDXVAHDSW_GetVideoProcessBltStatePrivate (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; SetVideoProcessStreamState : PDXVAHDSW_SetVideoProcessStreamState (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; GetVideoProcessStreamStatePrivate : PDXVAHDSW_GetVideoProcessStreamStatePrivate (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; VideoProcessBltHD : PDXVAHDSW_VideoProcessBltHD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; DestroyVideoProcessor : PDXVAHDSW_DestroyVideoProcessor (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DXVAHDSW_CALLBACKS サイズ: 128 バイト(x64)
dim st, 32 ; 4byte整数×32(構造体サイズ 128 / 4 切り上げ)
; CreateDevice : PDXVAHDSW_CreateDevice (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; ProposeVideoPrivateFormat : PDXVAHDSW_ProposeVideoPrivateFormat (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; GetVideoProcessorDeviceCaps : PDXVAHDSW_GetVideoProcessorDeviceCaps (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; GetVideoProcessorOutputFormats : PDXVAHDSW_GetVideoProcessorOutputFormats (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; GetVideoProcessorInputFormats : PDXVAHDSW_GetVideoProcessorInputFormats (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; GetVideoProcessorCaps : PDXVAHDSW_GetVideoProcessorCaps (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; GetVideoProcessorCustomRates : PDXVAHDSW_GetVideoProcessorCustomRates (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; GetVideoProcessorFilterRange : PDXVAHDSW_GetVideoProcessorFilterRange (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; DestroyDevice : PDXVAHDSW_DestroyDevice (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; CreateVideoProcessor : PDXVAHDSW_CreateVideoProcessor (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; SetVideoProcessBltState : PDXVAHDSW_SetVideoProcessBltState (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; GetVideoProcessBltStatePrivate : PDXVAHDSW_GetVideoProcessBltStatePrivate (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; SetVideoProcessStreamState : PDXVAHDSW_SetVideoProcessStreamState (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; GetVideoProcessStreamStatePrivate : PDXVAHDSW_GetVideoProcessStreamStatePrivate (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; VideoProcessBltHD : PDXVAHDSW_VideoProcessBltHD (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; DestroyVideoProcessor : PDXVAHDSW_DestroyVideoProcessor (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DXVAHDSW_CALLBACKS
#field intptr CreateDevice
#field intptr ProposeVideoPrivateFormat
#field intptr GetVideoProcessorDeviceCaps
#field intptr GetVideoProcessorOutputFormats
#field intptr GetVideoProcessorInputFormats
#field intptr GetVideoProcessorCaps
#field intptr GetVideoProcessorCustomRates
#field intptr GetVideoProcessorFilterRange
#field intptr DestroyDevice
#field intptr CreateVideoProcessor
#field intptr SetVideoProcessBltState
#field intptr GetVideoProcessBltStatePrivate
#field intptr SetVideoProcessStreamState
#field intptr GetVideoProcessStreamStatePrivate
#field intptr VideoProcessBltHD
#field intptr DestroyVideoProcessor
#endstruct
stdim st, DXVAHDSW_CALLBACKS ; NSTRUCT 変数を確保