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.
Anggota OutputIndex adalah nomor siklik berbasis nol yang menunjukkan nomor indeks bingkai output. Driver menggunakan informasi indeks output ini untuk melakukan pemrosesan video dalam pola atau siklus tertentu, terutama ketika driver melakukan deinterlacing, konversi kecepatan bingkai, dan telesin terbalik. Misalnya, dengan pola indeks output berikut, driver melakukan pemrosesan video yang ditunjukkan:
  • 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)

Anggota InputFrameOrField adalah angka berbasis nol yang menunjukkan bingkai atau nomor bidang permukaan input. Misalnya, dengan nomor input-frame-or-field berikut, driver dapat melakukan pemrosesan video yang ditunjukkan:
  • 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,...

Aplikasi harus menyebabkan anggota OutputIndex dan InputFrameOrField diatur ulang ketika format bingkai atau laju output diubah sehingga driver dapat mengatur ulang status pemrosesan internalnya. Untuk informasi selengkapnya tentang mengubah format bingkai atau laju output, lihat DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA dan DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA.

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).
Bingkai referensi masa lalu dan masa depan disediakan dalam anggota array pPastSurfaces dan pFutureSurfaces dalam urutan temporal dari bingkai yang lebih lama ke yang lebih baru terus menerus. Misalnya, urutan elemen dalam array seperti yang ditunjukkan dalam contoh berikut:

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)

Contoh pseudo-code berikut menunjukkan interaksi antara aplikasi (APP) dan driver (DRV) saat melakukan Inverse Telecine (IVTC) pada pull-down 3:2, 30 bingkai (60 bidang) per detik konten terjalin:
-[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_OUTPUT_RATE

DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA

DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA

DXVAHDDDI_SURFACE

DXVAHDDDI_VPCAPS

DXVAHDDDI_VPDEVCAPS

VideoProcessBltHD