Bagikan melalui


Pengantar Penunjuk Aliran

Dalam model kelas stream yang lebih lama, minidriver bertanggung jawab untuk mempertahankan antrean blok permintaan aliran data (SRB) sendiri. AVStream menyediakan fungsionalitas ini melalui abstraksi penunjuk aliran. Penunjuk aliran adalah referensi ke bingkai data AVStream tertentu.

Minidriver yang menggunakan pemrosesan berbasis pin (sebagian besar driver perangkat keras) menggunakan penunjuk aliran untuk mengelola antrean pin. Setiap pin memiliki antrean buffer data independen. Ketika paket data tiba di pin (baik permintaan baca atau tulis), AVStream menambahkan paket ke antrean dan mungkin akan memanggil proses penanganan pin.

Minidriver yang menggunakan pemrosesan yang berfokus pada filter tidak boleh menggunakan penunjuk aliran secara langsung. Lihat pemrosesan yang berfokus pada filter untuk informasi selengkapnya.

Secara bawaan, setiap antrean memiliki penunjuk aliran utama. Secara opsional, ini dapat memiliki penunjuk aliran tepi berikutnya jika bendera tepi berikutnya ditentukan. Minidriver dapat membuat penunjuk aliran baru dengan memanggil KsStreamPointerClone.

Anda hanya dapat memindahkan penunjuk aliran ke satu arah: ke bingkai yang lebih baru. Ini disebut memajukan pointer stream.

Memajukan Penunjuk Aliran

Saat Anda memajukan penunjuk aliran, Anda menggerakkannya ke frame yang lebih baru, atau memajukannya beberapa byte dalam frame saat ini. Misalnya, minidriver dapat menggeser penunjuk aliran dari kedatangan bingkai pertama ke kedatangan bingkai kedua.

Untuk memajukan penunjuk aliran, filter yang berpusat pada pin dapat memanggil KsStreamPointerAdvance atau KsStreamPointerUnlock dengan parameter Eject diatur ke TRUE.

Jumlah Referensi Bingkai

Bingkai dengan penunjuk aliran yang menunjuk ke mereka adalah referensi yang dihitung, seperti halnya bingkai yang ada di jendela antara tepi depan dan akhir.

Ketika minidriver selesai dengan penunjuk aliran, secara opsional dapat memanggil KsStreamPointerSetStatusCode untuk menentukan kode kesalahan untuk menyelesaikan paket permintaan I/O (IRP) yang diberikan. Minidriver kemudian harus memanggil KsStreamPointerDelete. AVStream kemudian mengurangi jumlah referensi pada bingkai yang sebelumnya direferensikan oleh penunjuk aliran yang dihapus. Penunjuk aliran data awal dan akhir tidak dapat dihapus.