Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Secara bawaan, setiap antrean AVStream berisi penunjuk aliran di tepi depan. Ujung depan menunjuk ke bingkai baru saat mereka tiba dalam antrean. Secara khusus, tepi depan awalnya menunjuk ke kerangka pertama yang tiba di antrean dan tidak bergerak hingga minidriver memindahkannya. AVStream membuat tepi terdepan, yang kemudian ada untuk masa pakai antrean. Minidriver dapat memanipulasi tepi depan menggunakan fungsi yang disediakan oleh Microsoft.
Ketika bingkai baru tiba dalam antrean, AVStream mengatur ujung depan untuk menunjuk ke bingkai ini, dengan syarat ujung depan belum menunjuk ke bingkai.
Untuk mendapatkan penunjuk ke aliran utama, minidriver memanggil KsPinGetLeadingEdgeStreamPointer.
Minidriver bertanggung jawab untuk memajukan tepi depan dalam semua situasi kecuali dua yang dirangkum dalam tabel berikut.
| Situasi | Perilaku AVStream |
|---|---|
Bingkai tiba dalam antrean yang sebelumnya kosong. |
AVStream mengatur tepi depan untuk menunjuk ke bingkai ini. |
Ujung terdepan menunjuk ke bingkai. IRP yang sesuai dengan bingkai ini dibatalkan. |
AVStream memimpin inovasi. Tepi depan sekarang menunjuk ke bingkai yang lebih baru. |
Lihat Pengenalan ke Stream Pointers untuk informasi lebih lanjut tentang mengembangkan penunjuk stream.
Menentukan Penunjuk Aliran Edge Akhir
Minidriver dapat menetapkan bahwa antrean memiliki penunjuk aliran di ujung hilir. Tepi belakang biasanya menunjukkan bingkai tertua yang menarik bagi minidriver. Untuk menentukan tepi tertinggal, tetapkan flag KSPIN_FLAG_DISTINCT_TRAILING_EDGE di Flags anggota KSPIN_DESCRIPTOR_EX struktur yang relevan. Kemudian panggil KsPinGetTrailingEdgeStreamPointer untuk mendapatkan pointer ke penunjuk aliran tepi berikutnya.
Ketika tepi trailing maju, penghitung referensi pada frame yang sebelumnya ditunjukkannya turun ke nol dan frame selesai. Jika bingkai adalah yang terakhir terkandung dalam IRP-nya, pin sink menyelesaikan IRP ke pemanggil; pin sumber mengirimkan IRP ke pin tempat pin tersambung.
Mempertahankan Jendela Bingkai
Sebagai hasil dari aturan jumlah referensi frame yang dijelaskan dalam Pengenalan Stream Pointers, sebuah frame di antara tepi depan dan tepi belakang tetap berada dalam antrean hingga dibatalkan, bahkan jika frame tersebut tidak direferensikan oleh stream pointer. Dengan demikian, minidriver dapat menggunakan pointer ujung depan dan belakang untuk mempertahankan jendela kerja dari beberapa bingkai yang berdekatan dan kontinu. Bingkai di jendela mungkin menunggu pemrosesan atau pengisian, misalnya.
Dalam diagram berikut, bingkai terlama berada di bagian bawah. Bingkai baru tiba di bagian atas. Angka di setiap bingkai adalah jumlah referensi untuk bingkai tersebut. Ketika penunjuk aliran maju, mereka bergerak naik dalam diagram ini.
Antrean paling kiri menunjukkan bagaimana minidriver dapat menggunakan tepi belakang untuk membuat kumpulan bingkai kerja. Setiap bingkai antara tepi depan dan belakang memiliki jumlah referensi satu meskipun tidak ada penunjuk aliran yang mereferensikan bingkai ini.
Antrean tengah adalah contoh Cloning Stream Pointers. Driver telah berulang kali mengkloning dan kemudian memajukan tepi depan, seperti yang dijelaskan dalam langkah-langkah proses pin di Layanan AVStream DMA.
Antrean paling kanan menunjukkan bagaimana minidriver dapat mempertahankan hitungan referensi untuk bingkai di belakang ujung belakang dengan menggunakan klon penunjuk aliran.