次の方法で共有


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

入力ストリームが有効かどうかを指定するブール値。 ランタイムが有効にする入力ストリームの数は、MaxStreamStatesDXVAHDDDI_VPDEVCAPS 構造体のメンバーにドライバーが設定する数を超えてはなりません。

[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、0、10、10、10、20、20、20、20,...

  • 4/15 カスタム レートでのインターレース形式 (8:7 逆テレシネ、OutputFrames=2、InputFrameOrField=15):

    InputFrameOrField = 0、0、15、15、30、30,...

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

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

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

参照フレームが少ないため、ドライバーは、あまり負荷の少ないビデオ処理方法にフォールバックする必要があります。 参照サンプルが提供されていない場合、ドライバーは 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、0、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 フィールド)/秒のインターレース コンテンツで逆テレシン (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 オペレーティング システム以降でサポートされています。
ヘッダー 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