struktur KSSTREAM_HEADER (ks.h)

Struktur KSSTREAM_HEADER adalah struktur panjang variabel yang menjelaskan paket data yang akan dibaca dari atau ditulis ke pin driver streaming.

Sintaks

typedef struct {
  ULONG    Size;
  ULONG    TypeSpecificFlags;
  KSTIME   PresentationTime;
  LONGLONG Duration;
  ULONG    FrameExtent;
  ULONG    DataUsed;
  PVOID    Data;
  ULONG    OptionsFlags;
  ULONG    Reserved;
} KSSTREAM_HEADER, *PKSSTREAM_HEADER;

Anggota

Size

Menentukan ukuran, dalam byte, dari struktur. Ini harus setidaknya ukuranof (KSSTREAM_HEADER).

TypeSpecificFlags

Menentukan bendera yang khusus untuk format data. Satu-satunya bendera yang saat ini didukung untuk TypeSpecificFlags adalah KS_AM_UseNewCSSKey. Bendera ini menunjukkan bahwa dekoder perangkat keras harus beralih ke kunci dekripsi CSS (Content Scramble System) antrean berikutnya, karena sampel data yang segera mengikuti header adalah sampel data pertama tempat kunci judul baru diterapkan.

PresentationTime

Struktur KSTIME yang menentukan waktu presentasi untuk buffer aliran terkait dalam unit 100 nanodetik. Untuk informasi selengkapnya, lihat bagian Keterangan.

Duration

Menentukan durasi segmen aliran ini dalam unit yang sama dengan waktu presentasi (100 unit nanodetik). Atur ke nol saat tidak digunakan.

FrameExtent

Menentukan ukuran seluruh bingkai. Wilayah dalam jangkauan bingkai tersedia untuk filter, dan ukuran data yang valid yang dihasilkan untuk operasi streaming tercermin dalam anggota DataUsed .

DataUsed

Untuk operasi tulis, anggota ini menentukan jumlah byte dalam bingkai yang valid saat mengirimkan bingkai ke driver tingkat bawah. Header tidak dimodifikasi pada operasi tulis; namun, anggota Informasi dari struktur IO_STATUS_BLOCK berisi jumlah total byte yang benar-benar ditulis. Untuk operasi baca, anggota ini tidak digunakan saat mengirimkan bingkai ke driver tingkat bawah dan harus diatur ke nol. Saat dikembalikan, anggota ini berisi jumlah byte yang benar-benar diisi dalam bingkai ini dan anggota Informasi dari struktur IO_STATUS_BLOCK berisi ukuran daftar header yang benar-benar digunakan. Perhatikan bahwa jika minidriver menentukan KSPIN_FLAG_GENERATE_MAPPINGS dalam KSPIN_DESCRIPTOR_EX, saat penunjuk aliran maju melewati bingkai, Data Digunakan diatur ke Hitungan dikurangi Sisa (anggota KSSTREAM_POINTER_OFFSET). Jika driver tidak menentukan bendera ini, minidriver bertanggung jawab untuk mengatur DataUsed.

Data

Menentukan alamat virtual buffer data.

OptionsFlags

Menentukan berbagai atribut aliran data. Anggota OptionsFlags dapat memiliki nilai yang tercantum dalam tabel berikut.

Nilai Deskripsi
KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY Menentukan bahwa telah ada penghentian dalam aliran data sebelum data yang terkandung dalam paket ini. Ini menyiratkan bahwa filter mungkin perlu mengatur ulang status internalnya sebelum memproses data. Tidak ada buffer data aktual yang perlu dilampirkan.
KSSTREAM_HEADER_OPTIONSF_DURATIONVALID Menentukan bahwa anggota Durasi struktur ini valid.
KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE Menunjukkan bahwa bingkai ini mewakili akhir urutan foto.
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM Menunjukkan bahwa bingkai ini mewakili akhir aliran data.
KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE Jika aliran dijeda, buffer ini harus dibersihkan. Bendera ini digunakan, misalnya, oleh sumber data langsung, di mana jeda merender data saat ini kedaluarsa.
KSSTREAM_HEADER_OPTIONSF_FRAMEINFO Menunjukkan bahwa ada struktur KS_FRAME_INFO setelah KSSTREAM_HEADER.
KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA Buffer data ini adalah awal dari data yang diulang. Driver harus mengulang data ini sampai secara eksplisit berhenti.
KSSTREAM_HEADER_OPTIONSF_METADATA Menunjukkan bahwa ada KSSTREAM_METADATA_INFO yang mengikuti KS_FRAME_INFO setelah KSSTREAM_HEADER. Bendera ini hanya ada jika KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA didukung.
KSSTREAM_HEADER_OPTIONSF_PREROLL Data dalam buffer ini digunakan untuk prime status perangkat. Ini adalah opsi khusus aliran.
KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT Aliran data berada pada titik alami untuk splicing. Klien menggunakan ini, misalnya, saat mengirim data yang menggunakan kompresi antar-bingkai, seperti video MPEG, untuk menunjukkan bahwa aman untuk memata-matai pada saat ini.
KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY Ada penghentian dalam aliran data setelah paket ini. Bendera ini dapat digunakan untuk antarmuka berorientasi posisi untuk menunjukkan akhir data aliran. Tidak ada buffer data aktual yang perlu dilampirkan.
KSSTREAM_HEADER_OPTIONSF_TIMEVALID Menentukan bahwa anggota PresentationTime dari struktur ini valid. Menunjukkan bahwa buffer ini memiliki tanda waktu yang valid yang terkait dengannya.
KSSTREAM_HEADER_OPTIONSF_TYPECHANGED Menandakan bahwa format data untuk aliran ini telah berubah. Jika bendera ini diatur, anggota Data berisi struktur KSDATAFORMAT yang berisi format baru. Bendera ini hanya berlaku untuk aliran yang sebelumnya telah menegosiasikan perubahan jenis dinamis. Untuk operasi tulis, sertakan format data baru sebagai pengganti sampel media. Jika ukuran ekstensi khusus media dimodifikasi, header ini harus menjadi header terakhir dalam daftar header untuk permintaan aliran yang diberikan. Selama permintaan baca, I/O lebih lanjut tetap tertunda hingga format baru diambil melalui KSPROPERTY_CONNECTION_DATAFORMAT. Untuk operasi tulis, header tidak boleh diperluas, dan harus menjadi satu-satunya header dalam operasi tulis.
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER Menentukan bahwa anggota Data header stream menunjuk ke struktur jenis VRAM_SURFACE_INFO. Modul proksi KS yang disediakan sistem mengatur bendera ini untuk menunjukkan bahwa modul ini menangkap langsung ke VRAM.
KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER Menentukan bahwa anggota Data KSSTREAM_HEADER berisi salinan mode kernel dari buffer asli. Ksproxy menetapkan bendera ini untuk transfer data kecil selama pengambilan WVDDM (Windows Vista Display Driver Model). Jika bendera ini tidak diatur, KS menggunakan I/O langsung ke dalam buffer Data .

Reserved

Dicadangkan untuk penggunaan internal.

Keterangan

Struktur ini dapat diikuti dalam memori dengan informasi tambahan khusus untuk jenis data dalam paket data.

Waktu presentasi biasanya dalam unit 100 nanodetik; namun, format standar kali ini didasarkan pada format data. Anda dapat menormalkan waktu presentasi dengan menggunakan sebagai pecahan penskalaan KSSTREAM_HEADER. PresentationTime.Numerator dibagi dengan KSSTREAM_HEADER. PresentationTime.Denominator .

Konversi harus menggunakan numerator terlebih dahulu, lalu penyebar, untuk mengurangi kesalahan pembulatan. Misalnya, aliran audio mungkin menyajikan waktu saat ini sebagai offset byte di aliran data:

#define BITS_PER_BYTE8
#define NANOSECONDS10000000

StreamHdr->PresentationTime.Numerator = BITS_PER_BYTE * NANOSECONDS;
StreamHdr->PresentationTime.Denominator = BitsPerSample * Channels * Frequency;
StreamHdr->PresentationTime.Time = ByteOffset;
StreamHdr->Duration = ByteLength;

Pada IOCTL_KS_READ_STREAM, bagian header stream diisi oleh panggilan. Setiap KSSTREAM_HEADER. Elemen DataUsed berisi jumlah aktual byte yang dibaca, yang kurang dari atau sama dengan setiap KSSTREAM_HEADER. FrameExtent. Elemen pIrp-IoStatus.Information> berisi ukuran total data header yang akan dikembalikan, yaitu setidaknya satu sizeof(KSSTREAM_HEADER).

Pada IOCTL_KS_WRITE_STREAM, elemen anggota harus diinisialisasi, dan setiap KSSTREAM_HEADER. Elemen DataUsed berisi jumlah byte yang akan ditulis. Jumlah aktual dari total byte yang ditulis dikembalikan dalam pIrp-IoStatus.Information>. Ini kurang dari atau sama dengan total semua KSSTREAM_HEADER. Elemen DataUsed di header.

Jika Anda menggunakan antarmuka IKsReferenceClock untuk mendapatkan tanda waktu yang akan ditempatkan di anggota PresentationTime KSSTREAM_HEADER, lihat Jam AVStream untuk informasi selengkapnya.

Persyaratan

Persyaratan Nilai
Header ks.h (termasuk Ks.h)

Lihat juga

KSDATAFORMAT