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
組成之輸出畫面的以零起始迴圈框架索引編號。
[in] InputFrameOrField
所處理之輸入畫面格或字段的以零起始的框架編號。
[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: first field, 1: second field)
-
以半速率交錯格式:
OutputIndex = 0,0,... (例如,第一個和第二個字段會混合到一個框架)
-
以 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,...
-
以 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,...
InputSurface = 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
:
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 7 操作系統開始,支援DXVAHDDDI_STREAM_DATA。 |
標頭 | d3dumddi.h (include D3dumddi.h) |
另請參閱
DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA