Bagikan melalui


Pemrosesan berpusat pada pin

Saat menulis minidriver AVStream, Anda menyediakan filter yang menggunakan salah satu dari dua paradigma pemrosesan: pemrosesan pin-sentris atau pemrosesan yang ber sentris filter.

Pemrosesan berbasis pin berarti bahwa AVStream memanggil rutin proses pin minidriver saat bingkai baru tiba di antrean pin.

Pemrosesan terpusat pada filter berarti bahwa AVStream memanggil rutinitas pemrosesan filter minidriver ketika ada bingkai data yang tersedia pada setiap pin yang diinisiasi. Perhatikan bahwa definisi ini menentukan perilaku default; minidriver dapat mengubah perilaku default dengan mengatur bendera dalam struktur KSPIN_DESCRIPTOR_EX .

Secara umum, filter perangkat lunak menggunakan pemrosesan yang berfokus pada filter dan filter perangkat keras menggunakan pemrosesan yang berfokus pada pin. Misalnya, perangkat keras yang mengubah atau merender data dapat merutekan data melalui filter yang berfokus pada pin. Ada kasus langka di mana peran ini dapat dibalik.

Untuk menyediakan filter yang berpusat pada pin, minidriver menyediakan penunjuk ke rutinitas panggilan balik AVStrMiniPinProcess di setiap struktur KSPIN_DISPATCH; jangan menyediakan dispatch pemrosesan dalam struktur KSFILTER_DISPATCH.

Jika minidriver tidak mengubah pengaturan flag dalam struktur KSPIN_DESCRIPTOR_EX, AVStream memanggil rutinitas panggilan balik AVStrMiniPinProcess yang disediakan vendor dalam tiga situasi:

  • Pin beralih ke status pemrosesan minimum. Frame harus sudah ada dalam antrean, dan pin harus bertransisi dari di bawah status pemrosesan minimum ke setidaknya status pemrosesan minimum.

  • Bingkai baru tiba. Pin harus berada setidaknya dalam status pemrosesan minimum dan tidak boleh ada frame di atau di depan sisi terdepan.

  • Minidriver secara eksplisit memanggil KsPinAttemptProcessing.

Secara default, jeda adalah status pemrosesan minimum.

Selain itu, AVStream tidak memanggil proses penanganan pin jika gerbang AND pada pin tertutup. Jika Anda menggunakan rutinitas KSGATEXxx untuk menambahkan input tambahan ke gerbang AND pin, misalnya, pengiriman proses Anda tidak akan dipanggil.

Ketika AVStream memanggil AVStrMiniPinProcess, AVStrMiniPinProcess menyediakan pointer ke objek pin yang memiliki data yang tersedia. Pengiriman pemrosesan minidriver kemudian dapat memperoleh pointer tepi terkemuka dengan memanggil KsPinGetLeadingEdgeStreamPointer. Minidriver kemudian memanipulasi data aliran menggunakan API penunjuk aliran .

Minidriver yang menggunakan pemrosesan yang berpusat pada pin dapat memodifikasi saat AVStream memanggil pengiriman AVStrMiniPinProcess dengan mengatur bendera dalam struktur KSPIN_DESCRIPTOR_EX yang relevan. Deskripsi flag di halaman referensi KSPIN_DESCRIPTOR_EX sangat relevan dengan vendor yang menerapkan filter yang berpusat pada pin.

Upaya pemrosesan mungkin gagal jika minidriver menahan mutex pemrosesan melalui KsPinAcquireProcessingMutex. Masalah juga dapat muncul jika minidriver secara langsung memanipulasi gerbang dengan menggunakan panggilan KSGATE* .

Driver Sampel Perangkat Keras Simulasi AVStream (AVSHwS) dalam sampel Windows Driver Kit adalah driver tangkapan berfokus pada pin untuk perangkat keras yang disimulasikan. Sampel Avshws menunjukkan cara menerapkan DMA melalui AVStream.