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

DXVAHDSW_CALLBACKS

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

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

フィールド

フィールドサイズx64x86説明
CreateDevicePDXVAHDSW_CreateDevice8/4+0+0ソフトウェアビデオプロセッサデバイスを生成するコールバック関数である。
ProposeVideoPrivateFormatPDXVAHDSW_ProposeVideoPrivateFormat8/4+8+4プライベートビデオフォーマットを提案するコールバック関数である。
GetVideoProcessorDeviceCapsPDXVAHDSW_GetVideoProcessorDeviceCaps8/4+16+8ビデオプロセッサデバイス能力を取得するコールバック関数である。
GetVideoProcessorOutputFormatsPDXVAHDSW_GetVideoProcessorOutputFormats8/4+24+12対応出力フォーマット一覧を取得するコールバック関数である。
GetVideoProcessorInputFormatsPDXVAHDSW_GetVideoProcessorInputFormats8/4+32+16対応入力フォーマット一覧を取得するコールバック関数である。
GetVideoProcessorCapsPDXVAHDSW_GetVideoProcessorCaps8/4+40+20ビデオプロセッサ能力を取得するコールバック関数である。
GetVideoProcessorCustomRatesPDXVAHDSW_GetVideoProcessorCustomRates8/4+48+24対応カスタムレート一覧を取得するコールバック関数である。
GetVideoProcessorFilterRangePDXVAHDSW_GetVideoProcessorFilterRange8/4+56+28フィルタの値域を取得するコールバック関数である。
DestroyDevicePDXVAHDSW_DestroyDevice8/4+64+32ソフトウェアビデオプロセッサデバイスを破棄するコールバック関数である。
CreateVideoProcessorPDXVAHDSW_CreateVideoProcessor8/4+72+36ビデオプロセッサインスタンスを生成するコールバック関数である。
SetVideoProcessBltStatePDXVAHDSW_SetVideoProcessBltState8/4+80+40Blt(出力)ステートを設定するコールバック関数である。
GetVideoProcessBltStatePrivatePDXVAHDSW_GetVideoProcessBltStatePrivate8/4+88+44プライベートBltステートを取得するコールバック関数である。
SetVideoProcessStreamStatePDXVAHDSW_SetVideoProcessStreamState8/4+96+48ストリームステートを設定するコールバック関数である。
GetVideoProcessStreamStatePrivatePDXVAHDSW_GetVideoProcessStreamStatePrivate8/4+104+52プライベートストリームステートを取得するコールバック関数である。
VideoProcessBltHDPDXVAHDSW_VideoProcessBltHD8/4+112+56実際のビデオ処理(合成/変換)を実行するコールバック関数である。
DestroyVideoProcessorPDXVAHDSW_DestroyVideoProcessor8/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 Structure
import 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: pointer
struct 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 変数を確保