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) |