ホーム › Media.MediaFoundation › DXVAHD_STREAM_DATA
DXVAHD_STREAM_DATA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Enable | BOOL | 4 | +0 | +0 | この入力ストリームを有効にするかどうかを指定します。値が TRUE の場合、VideoProcessBltHD メソッドはこのストリームを出力サーフェスにブリットします。それ以外の場合、このストリームはブリットされません。同時に有効にできるストリームの最大数は、DXVAHD_VPDEVCAPS 構造体の MaxInputStreams メンバーで示されます。 |
| OutputIndex | DWORD | 4 | +4 | +4 | 出力フレームの 0 から始まるインデックス番号です。「解説」を参照してください。 |
| InputFrameOrField | DWORD | 4 | +8 | +8 | 入力フレームまたはフィールドの 0 から始まるインデックス番号です。「解説」を参照してください。 |
| PastFrames | DWORD | 4 | +12 | +12 | 過去の参照フレームの数です。この値は、DXVAHD_VPCAPS 構造体の PastFrames メンバーの値以下でなければなりません。 |
| FutureFrames | DWORD | 4 | +16 | +16 | 未来の参照フレームの数です。この値は、DXVAHD_VPCAPS 構造体の FutureFrames メンバーの値以下でなければなりません。 |
| ppPastSurfaces | IDirect3DSurface9** | 8/4 | +24 | +20 | 呼び出し元が割り当てた IDirect3DSurface9 ポインターの配列へのポインターです。この配列には、ビデオ処理操作で使用する過去の参照フレームが格納されます。配列の要素数は PastFrames メンバーの値と等しくなります。 |
| pInputSurface | IDirect3DSurface9* | 8/4 | +32 | +24 | 現在の入力フレームを格納している Microsoft Direct3D サーフェスの IDirect3DSurface9 インターフェイスへのポインターです。 |
| ppFutureSurfaces | IDirect3DSurface9** | 8/4 | +40 | +28 | 呼び出し元が割り当てた IDirect3DSurface9 ポインターの配列へのポインターです。この配列には、ビデオ処理操作で使用する未来の参照フレームが格納されます。配列の要素数は FutureFrames メンバーの値と等しくなります。 |
公式ドキュメント
IDXVAHD_VideoProcessor::VideoProcessBltHD メソッドのストリームごとのデータを格納します。
解説(Remarks)
入力サーフェス
Direct3D サーフェスは、DXVAHD_VPDEVCAPS 構造体の InputPool メンバーで指定されたメモリプールに割り当てる必要があります。使用できるサーフェスの種類は次のとおりです。- DXVAHD_SURFACE_TYPE_VIDEO_INPUT または DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE 型のビデオサーフェス。IDXVAHD_Device::CreateVideoSurface を参照してください。
- DXVA2_VideoDecoderRenderTarget 型のデコーダーレンダーターゲットサーフェス。IDirectXVideoAccelerationService::CreateSurface を参照してください。
- オフスクリーンプレーンサーフェス。
- ppPastSurfaces: { …, T-3, T-2, T-1 }
- ppInputSurface: T
- ppFutureSurfaces: { T+1, T+2, T+3, … }
- ビデオシーケンスの先頭または末尾
- プログレッシブ入力の場合
- プログレッシブ入力とインターレース入力の切り替え中
- 高いインターレース解除品質を必要としないサブストリームの場合
- フレームをドロップしている間
入力インデックスと出力インデックス
OutputIndex メンバーと InputFrameOrField メンバーは、入力フレームまたはフィールドと出力フレームを対応付けるために使用します。OutputIndex メンバーの値は周期的であり、1 周期ごとに 0 にリセットされます。以下にパターンの例を示します。
- 通常のレートのプログレッシブビデオ。各入力フレームから 1 つの出力フレームが生成されます。
- 出力インデックス: 0, 0, 0, 0, …
- 入力インデックス: 0, 1, 2, 3, …
- 通常のレートのインターレースビデオ。各インターレースフレーム (2 つのフィールド) から 2 つの出力フレームが生成されます。
- 出力インデックス: 0, 1, 0, 1, …
- 入力インデックス: 0, 1, 2, 3, …
- 出力レートが 2/1 のプログレッシブビデオ。各入力フレームから 1 つの出力フレームが生成されます。
- 出力インデックス: 0, 1, 0, 1, …
- 入力インデックス: 0, 1, 2, 3, …
- 出力レートが 1/2 のインターレースビデオ。各インターレースフレームから 1 つの出力フレームが生成されます (2 つのフィールドがブレンドされて 1 つのフレームになります)。
- 出力インデックス: 0, 0, 0, 0, …
- 入力インデックス: 0, 2, 4, 6, …
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// DXVAHD_STREAM_DATA (x64 48 / x86 32 バイト)
typedef struct DXVAHD_STREAM_DATA {
BOOL Enable;
DWORD OutputIndex;
DWORD InputFrameOrField;
DWORD PastFrames;
DWORD FutureFrames;
IDirect3DSurface9** ppPastSurfaces;
IDirect3DSurface9* pInputSurface;
IDirect3DSurface9** ppFutureSurfaces;
} DXVAHD_STREAM_DATA;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DXVAHD_STREAM_DATA
{
[MarshalAs(UnmanagedType.Bool)] public bool Enable;
public uint OutputIndex;
public uint InputFrameOrField;
public uint PastFrames;
public uint FutureFrames;
public IntPtr ppPastSurfaces;
public IntPtr pInputSurface;
public IntPtr ppFutureSurfaces;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DXVAHD_STREAM_DATA
<MarshalAs(UnmanagedType.Bool)> Public Enable As Boolean
Public OutputIndex As UInteger
Public InputFrameOrField As UInteger
Public PastFrames As UInteger
Public FutureFrames As UInteger
Public ppPastSurfaces As IntPtr
Public pInputSurface As IntPtr
Public ppFutureSurfaces As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class DXVAHD_STREAM_DATA(ctypes.Structure):
_fields_ = [
("Enable", wintypes.BOOL),
("OutputIndex", wintypes.DWORD),
("InputFrameOrField", wintypes.DWORD),
("PastFrames", wintypes.DWORD),
("FutureFrames", wintypes.DWORD),
("ppPastSurfaces", ctypes.c_void_p),
("pInputSurface", ctypes.c_void_p),
("ppFutureSurfaces", ctypes.c_void_p),
]#[repr(C)]
pub struct DXVAHD_STREAM_DATA {
pub Enable: i32,
pub OutputIndex: u32,
pub InputFrameOrField: u32,
pub PastFrames: u32,
pub FutureFrames: u32,
pub ppPastSurfaces: *mut core::ffi::c_void,
pub pInputSurface: *mut core::ffi::c_void,
pub ppFutureSurfaces: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type DXVAHD_STREAM_DATA struct {
Enable int32
OutputIndex uint32
InputFrameOrField uint32
PastFrames uint32
FutureFrames uint32
ppPastSurfaces uintptr
pInputSurface uintptr
ppFutureSurfaces uintptr
}type
DXVAHD_STREAM_DATA = record
Enable: BOOL;
OutputIndex: DWORD;
InputFrameOrField: DWORD;
PastFrames: DWORD;
FutureFrames: DWORD;
ppPastSurfaces: Pointer;
pInputSurface: Pointer;
ppFutureSurfaces: Pointer;
end;const DXVAHD_STREAM_DATA = extern struct {
Enable: i32,
OutputIndex: u32,
InputFrameOrField: u32,
PastFrames: u32,
FutureFrames: u32,
ppPastSurfaces: ?*anyopaque,
pInputSurface: ?*anyopaque,
ppFutureSurfaces: ?*anyopaque,
};type
DXVAHD_STREAM_DATA {.bycopy.} = object
Enable: int32
OutputIndex: uint32
InputFrameOrField: uint32
PastFrames: uint32
FutureFrames: uint32
ppPastSurfaces: pointer
pInputSurface: pointer
ppFutureSurfaces: pointerstruct DXVAHD_STREAM_DATA
{
int Enable;
uint OutputIndex;
uint InputFrameOrField;
uint PastFrames;
uint FutureFrames;
void* ppPastSurfaces;
void* pInputSurface;
void* ppFutureSurfaces;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DXVAHD_STREAM_DATA サイズ: 32 バイト(x86)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; Enable : BOOL (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; OutputIndex : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; InputFrameOrField : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; PastFrames : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; FutureFrames : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; ppPastSurfaces : IDirect3DSurface9** (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; pInputSurface : IDirect3DSurface9* (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ppFutureSurfaces : IDirect3DSurface9** (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DXVAHD_STREAM_DATA サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; Enable : BOOL (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; OutputIndex : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; InputFrameOrField : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; PastFrames : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; FutureFrames : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; ppPastSurfaces : IDirect3DSurface9** (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pInputSurface : IDirect3DSurface9* (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; ppFutureSurfaces : IDirect3DSurface9** (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DXVAHD_STREAM_DATA
#field bool Enable
#field int OutputIndex
#field int InputFrameOrField
#field int PastFrames
#field int FutureFrames
#field intptr ppPastSurfaces
#field intptr pInputSurface
#field intptr ppFutureSurfaces
#endstruct
stdim st, DXVAHD_STREAM_DATA ; NSTRUCT 変数を確保
st->Enable = 100
mes "Enable=" + st->Enable