struktur DXVAHDDDI_STREAM_DATA (d3dumddi.h)
Struktur DXVAHDDDI_STREAM_DATA menjelaskan aliran input yang diproses.
Sintaks
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;
Anggota
[in] Enable
Nilai Boolean yang menentukan apakah aliran input diaktifkan. Jumlah aliran input yang diaktifkan runtime tidak boleh lebih dari angka, yang ditetapkan driver di anggota MaxStreamStates dari struktur DXVAHDDDI_VPDEVCAPS .
[in] OutputIndex
Nomor indeks bingkai siklik berbasis nol dari bingkai output yang disusun.
[in] InputFrameOrField
Nomor bingkai berbasis nol dari bingkai input atau bidang yang diproses.
[in] PastFrames
Jumlah bingkai referensi sebelumnya. Angka ini tidak boleh lebih dari angka yang ditetapkan driver di anggota PastFrames dari struktur DXVAHDDDI_VPCAPS .
[in] FutureFrames
Jumlah bingkai referensi di masa mendatang. Angka ini tidak boleh lebih dari angka yang ditetapkan driver di anggota FutureFrames dari struktur DXVAHDDDI_VPCAPS .
[in] pPastSurfaces
Array struktur DXVAHDDDI_SURFACE yang menjelaskan permukaan referensi sebelumnya.
[in] InputSurface
Struktur DXVAHDDDI_SURFACE yang menjelaskan permukaan input.
[in] pFutureSurfaces
Array struktur DXVAHDDDI_SURFACE yang menjelaskan permukaan referensi di masa mendatang.
Keterangan
Driver harus mengalokasikan permukaan yang ditentukan oleh anggota pPastSurfaces, InputSurface, dan pFutureSurfaces dalam jenis kumpulan, yang ditetapkan driver dalam anggota InputPool dari struktur DXVAHDDDI_VPDEVCAPS , dan dengan salah satu jenis permukaan berikut; jika tidak, fungsi VideoProcessBltHD driver mengembalikan kesalahan.
- Permukaan video yang dibuat dengan jenis DXVAHD_SURFACE_TYPE_VIDEO_INPUT atau DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE.
- Permukaan target render dekode yang dibuat dengan jenis DXVA2_VideoDecodeRenderTarget.
- Permukaan polos di luar layar.
-
Format progresif pada tingkat normal dan setengah:
OutputIndex = 0, 0,...
-
Format progresif pada tingkat kustom 2/1 (konversi kecepatan bingkai ganda, OutputFrames=2):
OutputIndex = 0, 1, 0, 1,...
-
Format interlaced pada laju normal:
OutputIndex = 0, 1, 0, 1,... (0: bidang pertama, 1: bidang kedua)
-
Format interlaced pada setengah laju:
OutputIndex = 0, 0,... (misalnya, bidang pertama dan kedua dipadukan ke satu bingkai)
-
Terjalin pada tingkat kustom 4/5 (3:2 telecine terbalik, OutputFrames=4):
OutputIndex = 0, 1, 2, 3, 0, 1, 2, 3,... (0:A, 1:B, 2:C, bingkai film 3:D)
-
Format progresif dan format interlaced pada laju normal:
InputFrameOrField = 0, 1, 2,...
-
Format progresif dan format interlaced pada setengah laju:
InputFrameOrField = 0, 2, 4,...
-
Format interlaced pada tingkat kustom 4/5 (telecine terbalik 3:2, OutputFrames=4 dan InputFrameOrField=10):
InputFrameOrField = 0, 0, 0, 0, 10, 10, 10, 10, 20, 20, 20, 20,...
-
Format interlaced pada tingkat kustom 4/15 (telecine terbalik 8:7, OutputFrames=2 dan InputFrameOrField=15):
InputFrameOrField = 0, 0, 15, 15, 30, 30,...
Namun, jika driver beralih antara laju normal dan setengah (nilai dari enumerasi DXVAHDDDI_OUTPUT_RATE ), driver seharusnya tidak memerlukan reset.
Jika anggota OutputIndex dan InputFrameOrField tetap tidak berubah pada waktu proses berikutnya, driver menentukan bahwa bingkai tidak berubah (misalnya, dijeda) dalam pemrosesan aliran. Oleh karena itu, driver dapat mengoptimalkan bingkai dengan menggunakan data cache.
Driver harus mundur ke metode pemrosesan video yang kurang intensif karena bingkai referensi yang disediakan lebih sedikit. Driver harus mundur ke Bob de-interlacing ketika tidak ada sampel referensi yang disediakan.
Aplikasi dapat memberikan bingkai referensi yang kurang lampau dan di masa mendatang daripada bingkai referensi yang diminta driver. Misalnya, aplikasi dapat memberikan bingkai referensi yang lebih sedikit dalam kondisi berikut:
- Di awal atau di akhir urutan bingkai.
- Transisi antara progresif dan interlaced.
- Aliran progresif tingkat normal atau setengah.
- Aliran sub-video yang tidak memerlukan de-interlacing berkualitas tinggi.
- Saat membatasi bingkai referensi untuk pulih dari frame drop dan untuk menjaga kecepatan bingkai.
- Bingkai yang dihilangkan dari input (misalnya, bingkai turun di dekoder).
pPastSurfaces [] = {..., T-3, T-2, T-1}
InputSurface = T
pFutureSurfaces [] = {T+1, T+2, T+3,...}
Bingkai input dan referensi mengubah lokasi dari lokasi di masa mendatang ke lokasi sebelumnya melalui lokasi saat ini karena kenaikan anggota OutputIndex dan InputFrameOrField . Misalnya, permukaan input berubah saat outputIndex dan InputFrameOrField meningkat ketika driver melakukan pemrosesan video berikut:
-
Format progresif pada tingkat normal:
OutputIndex = 0, 0, 0,...
InputFrameOrField = 0, 1, 2,...
InputSurface = T, T+1, T+2,...
-
Format interlaced pada laju normal:
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,...
-
Format interlaced pada setengah laju:
OutputIndex = 0, 0, 0,...
InputFrameOrField = 0, 2, 4,...
InputSurface = T, T+1, T+2,...
-
Format interlaced pada tingkat kustom 4/5 (telecine terbalik 3:2, OutputFrames=4 dan 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,...
-
Format interlaced pada tingkat kustom 4/15 (telecine terbalik 8:7, OutputFrames=2 dan 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,... (perhatikan bahwa bingkai T+7 berisi bidang ke-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
:
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | DXVAHDDDI_STREAM_DATA didukung dimulai dengan sistem operasi Windows 7. |
Header | d3dumddi.h (termasuk D3dumddi.h) |
Lihat juga
DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA