DXVAHDDDI_STREAM_DATA 構造体 (d3dumddi.h)
DXVAHDDDI_STREAM_DATA構造体は、処理される入力ストリームを記述します。
構文
typedef struct _DXVAHDDDI_STREAM_DATA {
[in] BOOL Enable;
[in] UINT OutputIndex;
[in] UINT InputFrameOrField;
[in] UINT PastFrames;
[in] UINT FutureFrames;
[in] DXVAHDDDI_SURFACE *pPastSurfaces;
[in] DXVAHDDDI_SURFACE InputSurface;
[in] DXVAHDDDI_SURFACE *pFutureSurfaces;
} DXVAHDDDI_STREAM_DATA;
メンバー
[in] Enable
入力ストリームが有効かどうかを示すブール値。 ランタイムで有効にする入力ストリームの数は、ドライバーがDXVAHDDDI_VPDEVCAPS構造体の MaxStreamStates メンバーに設定する数を超えてはなりません。
[in] OutputIndex
構成される出力フレームの 0 から始まる循環フレーム インデックス番号。
[in] InputFrameOrField
処理される入力フレームまたはフィールドの 0 から始まるフレーム番号。
[in] PastFrames
過去の参照フレームの数。 この数値は、ドライバーがDXVAHDDDI_VPCAPS構造体の PastFrames メンバーに設定する数を超えてはなりません。
[in] FutureFrames
将来の参照フレームの数。 この数値は、ドライバーがDXVAHDDDI_VPCAPS構造体の FutureFrames メンバーに設定する数を超えてはなりません。
[in] pPastSurfaces
過去の参照サーフェスを記述する DXVAHDDDI_SURFACE 構造体の配列。
[in] InputSurface
入力サーフェスを記述する DXVAHDDDI_SURFACE 構造体。
[in] pFutureSurfaces
将来の参照サーフェスを記述する DXVAHDDDI_SURFACE 構造体の配列。
注釈
ドライバーは、pPastSurfaces、InputSurface、および pFutureSurfaces メンバーがプールの種類で指定するサーフェスを割り当てる必要があります。これは、ドライバーがDXVAHDDDI_VPDEVCAPS構造体の InputPool メンバーに設定し、次のいずれかのサーフェスの種類を持ちます。それ以外の場合、ドライバーの VideoProcessBltHD 関数はエラーを返します。
- DXVAHD_SURFACE_TYPE_VIDEO_INPUTまたはDXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATEの種類で作成されるビデオ サーフェス。
- DXVA2_VideoDecodeRenderTarget型で作成されたデコード レンダー ターゲット サーフェス。
- 画面外のプレーンサーフェス。
-
標準と半分のレートでのプログレッシブ形式:
OutputIndex = 0, 0,...
-
2/1 カスタム レートのプログレッシブ形式 (ダブル フレーム レート変換、OutputFrames=2):
OutputIndex = 0、1、0、1,...
-
通常のレートでのインターレース形式:
OutputIndex = 0、1、0、1,...(0: 最初のフィールド、1: 2 番目のフィールド)
-
半値のインターレース形式:
OutputIndex = 0, 0,...(たとえば、1 番目と 2 番目のフィールドは 1 つのフレームにブレンドされます)
-
4/5 カスタム レートでインターレース (3:2 逆テレシネ、OutputFrames=4):
OutputIndex = 0、1、2、3、0、1、2、3,...(0:A、1:B、2:C、3:D フィルム フレーム)
-
通常のレートでのプログレッシブ形式とインターレース形式:
InputFrameOrField = 0、1、2,...
-
プログレッシブ形式とインターレース形式の半分のレート:
InputFrameOrField = 0、2、4,...
-
4/5 カスタム レートでのインターレース形式 (3:2 逆テレシネ、OutputFrames=4、InputFrameOrField=10):
InputFrameOrField = 0、0、0、0、10、10、10、10、20、20、20、20 です,...
-
4/15 カスタム レートのインターレース形式 (8:7 逆テレシネ、OutputFrames=2、InputFrameOrField=15):
InputFrameOrField = 0、0、15、15、30、30 です,...
ただし、ドライバーが通常のレートと半分のレート ( DXVAHDDDI_OUTPUT_RATE 列挙の値) を切り替える場合、ドライバーはリセットを必要としません。
OutputIndex メンバーと InputFrameOrField メンバーの両方が次のプロセス時に変更されていない場合、ドライバーは、ストリーム処理でフレームが変更されていない (一時停止など) と判断します。 そのため、ドライバーは、キャッシュされたデータを使用してフレームを最適化できます。
ドライバーは、より少ない参照フレームが提供されるため、あまり負荷の低いビデオ処理方法にフォールバックする必要があります。 参照サンプルが提供されていない場合、ドライバーは Bob のインターレース解除にフォールバックする必要があります。
アプリケーションは、ドライバーが要求する参照フレームよりも、過去および将来の参照フレームを提供できません。 たとえば、アプリケーションでは、次の条件では、より少ない参照フレームを提供できます。
- フレーム シーケンスの先頭または末尾。
- プログレッシブとインターレースの間の遷移。
- 通常または半分のレートのプログレッシブ ストリーム。
- 高品質のインターレース解除を必要としないサブビデオ ストリーム。
- フレームから回復し、フレーム レートを維持するために参照フレームを調整している間。
- 入力からのフレーム ドロップ (デコーダーのフレーム ドロップなど)。
pPastSurfaces [] = {..., T-3, T-2, T-1}
InputSurface = T
pFutureSurfaces [] = {T+1, T+2, T+3,...}
入力フレームと参照フレームは、 OutputIndex メンバーと InputFrameOrField メンバーの増分に従って、将来の場所から過去の場所から現在の場所に変更されます。 たとえば、ドライバーが次のビデオ処理を実行すると、入力サーフェイスは OutputIndex と InputFrameOrField の増分として変化します。
-
通常のレートでのプログレッシブ形式:
OutputIndex = 0、0、0,...
InputFrameOrField = 0、1、2,...
InputSurface = T、T+1、T+2,...
-
通常のレートでのインターレース形式:
OutputIndex = 0、1、0、1、0、1,...
InputFrameOrField = 0、1、2、3、4、5,...
InputSurface = T、T、T+1、T+1、T+2、T+2,...
-
半値のインターレース形式:
OutputIndex = 0、0、0,...
InputFrameOrField = 0、2、4,...
InputSurface = T、T+1、T+2,...
-
4/5 カスタム レートでのインターレース形式 (3:2 逆テレシネ、OutputFrames=4、InputFrameOrField=10):
OutputIndex = 0、1、2、3、0、1、2、3、0、1、2、3,...
InputFrameOrField = 0、0、0、0、10、10、10、10、20、20、20、20 です,...
InputSurface = T、T、T、T、T+5、T+5、T+5、T+5、T+10、T+10、T+10、T+10,...
-
4/15 カスタム レートのインターレース形式 (8:7 逆テレシネ、OutputFrames=2、InputFrameOrField=15):
OutputIndex = 0、1、0、1、0、1,...
InputFrameOrField = 0、0、15、15、30、30 です,...
InputSurface = T、T、T+7、T+7、T+15、T+15,...(T+7 フレームには 15 番目のフィールドが含まれていることに注意してください)
-[60i -> 60p]
DRV: VPGuid[0] requests 1 past and 2 future reference frames.
APP: Creates VPGuid[0] video processor and set output rate to normal.
APP: Decodes frame 0(A0:A1), 1(A0:B1), 2(B0:C1), 3(C0:C1), 4(D0:D1), ...
:
-APP: VPBltHD(frame x, 0, 1, 2), InputFrameOrField=0, OutputIndex=0
DRV: Bob [0(A0)+0(A1)] = A'
-APP: VPBltHD(frame x, 0, 1, 2), InputFrameOrField=1, OutputIndex=1
DRV: Weave [0(A1)+1(A0)] = A
-APP: VPBltHD(frame 0, 1, 2, 3), InputFrameOrField=2, OutputIndex=0
DRV: Weave [1(A0)+0(A1)] = A
-APP: VPBltHD(frame 0, 1, 2, 3), InputFrameOrField=3, OutputIndex=1
DRV: Weave [1(B1)+2(B0)] = B
-APP: VPBltHD(frame 1, 2, 3, 4), InputFrameOrField=4, OutputIndex=0
DRV: Weave [2(B0)+1(B1)] = B
-APP: VPBltHD(frame 1, 2, 3, 4), InputFrameOrField=5, OutputIndex=1
DRV: Weave [2(C1)+3(C0)] = C
-APP: VPBltHD(frame 2, 3, 4, 5), InputFrameOrField=6, OutputIndex=0
DRV: Weave [3(C0)+3(C1)] = C
-APP: VPBltHD(frame 2, 3, 4, 5), InputFrameOrField=7, OutputIndex=1
DRV: Weave [3(C1)+3(C0)] = C
-APP: VPBltHD(frame 3, 4, 5, 6), InputFrameOrField=8, OutputIndex=0
DRV: Weave [4(D0)+4(D1)] = D
-APP: VPBltHD(frame 3, 4, 5, 6), InputFrameOrField=9, OutputIndex=1
DRV: Weave [4(D1)+4(D0)] = D
:
-[60i -> 24p]
DRV: VPGuid[1] requests 4 future reference frames.
DRV: Exports CustomRate=4/5, OutputFrames=4, InputInterlaced=TRUE, InputFramesOrFields=10.
APP: Creates VPGuid[1] video processor and set output rate to 4/5 custom rate.
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=0
DRV: Bob [0(A0)+0(A1)] = A' (playback or speed mode) or Weave [0(A0)+0(A1)] = A (quality mode)
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=1
DRV: Weave [1(B1)+2(B0)] = B
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=2
DRV: Weave [3(C0)+3(C1)] = C
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=3
DRV: Weave [4(D0)+4(D1)] = D
-APP: VPBltHD(frame 5, 6, 7, 8, 9), InputFrameOrField=10, OutputIndex=0
DRV: Weave [0(A0)+0(A1)] = A
:
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | DXVAHDDDI_STREAM_DATAは、Windows 7 オペレーティング システム以降でサポートされています。 |
Header | d3dumddi.h (D3dumddi.h を含む) |
こちらもご覧ください
DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA