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 構造体の配列。

注釈

ドライバーは、pPastSurfacesInputSurface、および pFutureSurfaces メンバーがプールの種類で指定するサーフェスを割り当てる必要があります。これは、ドライバーがDXVAHDDDI_VPDEVCAPS構造体の InputPool メンバーに設定し、次のいずれかのサーフェスの種類を持ちます。それ以外の場合、ドライバーの VideoProcessBltHD 関数はエラーを返します。

  • DXVAHD_SURFACE_TYPE_VIDEO_INPUTまたはDXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATEの種類で作成されるビデオ サーフェス。
  • DXVA2_VideoDecodeRenderTarget型で作成されたデコード レンダー ターゲット サーフェス。
  • 画面外のプレーンサーフェス。
OutputIndex メンバーは、出力のフレーム インデックス番号を示す 0 から始まる循環番号です。 ドライバーは、この出力インデックス情報を使用して、特定のパターンまたはサイクルでビデオ処理を実行します。特に、ドライバーがデインターレース、フレーム レート変換、逆テレシネを実行する場合です。 たとえば、次の出力インデックス パターンでは、ドライバーは示されたビデオ処理を実行します。
  • 標準と半分のレートでのプログレッシブ形式:

    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 から始まる数値です。 たとえば、次の入力フレームまたはフィールド番号を使用すると、ドライバーは示されたビデオ処理を実行できます。
  • 通常のレートでのプログレッシブ形式とインターレース形式:

    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 です,...

アプリケーションでは、ドライバーが内部処理状態をリセットできるように、フレーム形式または出力レートが変更されたときに OutputIndex メンバーと InputFrameOrField メンバーの両方がリセットされるようにする必要があります。 フレーム形式または出力レートの変更の詳細については、「 DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATADXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA」を参照してください。

ただし、ドライバーが通常のレートと半分のレート ( DXVAHDDDI_OUTPUT_RATE 列挙の値) を切り替える場合、ドライバーはリセットを必要としません。

OutputIndex メンバーと InputFrameOrField メンバーの両方が次のプロセス時に変更されていない場合、ドライバーは、ストリーム処理でフレームが変更されていない (一時停止など) と判断します。 そのため、ドライバーは、キャッシュされたデータを使用してフレームを最適化できます。

ドライバーは、より少ない参照フレームが提供されるため、あまり負荷の低いビデオ処理方法にフォールバックする必要があります。 参照サンプルが提供されていない場合、ドライバーは Bob のインターレース解除にフォールバックする必要があります。

アプリケーションは、ドライバーが要求する参照フレームよりも、過去および将来の参照フレームを提供できません。 たとえば、アプリケーションでは、次の条件では、より少ない参照フレームを提供できます。

  • フレーム シーケンスの先頭または末尾。
  • プログレッシブとインターレースの間の遷移。
  • 通常または半分のレートのプログレッシブ ストリーム。
  • 高品質のインターレース解除を必要としないサブビデオ ストリーム。
  • フレームから回復し、フレーム レートを維持するために参照フレームを調整している間。
  • 入力からのフレーム ドロップ (デコーダーのフレーム ドロップなど)。
pPastSurfaces および pFutureSurfaces 配列メンバーには、過去と将来の両方の参照フレームが、古いフレームから新しいフレームまで一時的な順序で継続的に提供されます。 たとえば、次の例に示すように、配列内の要素の順序は次のようになります。

pPastSurfaces [] = {..., T-3, T-2, T-1}

InputSurface = T

pFutureSurfaces [] = {T+1, T+2, T+3,...}

入力フレームと参照フレームは、 OutputIndex メンバーと InputFrameOrField メンバーの増分に従って、将来の場所から過去の場所から現在の場所に変更されます。 たとえば、ドライバーが次のビデオ処理を実行すると、入力サーフェイスは OutputIndexInputFrameOrField の増分として変化します。

  • 通常のレートでのプログレッシブ形式:

    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 番目のフィールドが含まれていることに注意してください)

次の擬似コード例は、3:2 プルダウン、30 フレーム (60 フィールド)/秒のインターレース コンテンツで逆 Telecine (IVTC) を実行しているときに、アプリケーション (APP) とドライバー (DRV) の間の相互作用を示しています。
-[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_OUTPUT_RATE

DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA

DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA

DXVAHDDDI_SURFACE

DXVAHDDDI_VPCAPS

DXVAHDDDI_VPDEVCAPS

VideoProcessBltHD