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.
Jika filter menggunakan pemrosesan yang berfokus pada filter, maka secara default AVStream memanggil fungsi callback AVStrMiniFilterProcess yang disediakan oleh minidriver saat ada kerangka data yang tersedia pada setiap instans pin. Minidriver dapat mengubah perilaku default ini dengan mengatur anggota Bendera dari struktur KSPIN_DESCRIPTOR_EX .
Untuk menerapkan pemrosesan yang berpusat pada filter, berikan penunjuk ke rutinitas panggilan balik AVStrMiniFilterProcess yang disediakan minidriver di anggota Proses struktur KSFILTER_DISPATCH . Atur anggota Proses dari KSPIN_DISPATCH ke NULL.
AVStream memanggil AVStrMiniFilterProcess hanya ketika semua kondisi berikut terpenuhi:
Bingkai tersedia pada pin yang memerlukan bingkai agar pemrosesan dapat berlangsung. Minidriver dapat mengubah perilaku pemrosesan dengan mengatur bendera di anggota BenderaKSPIN_DESCRIPTOR_EX. Perhatikan kombinasi flag yang saling mengecualikan, yaitu KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING dan KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING. Minidriver juga dapat memodifikasi kumpulan pin yang memerlukan frame melalui penggunaan rutinitas KsPinAttachAndGate atau KsPinAttachOrGate.
Jumlah instance pin sama dengan atau lebih besar dari anggota InstancesNecessary dalam struktur KSPIN_DESCRIPTOR_EX. Anggota ClientState dari struktur KSPIN menentukan enumerator KSSTATE tertentu tempat pin saat ini ditetapkan. Setelah InstancesNecessary terpenuhi, pin tambahan dalam status KSSTATE_STOP tidak akan mencegah pemrosesan filter.
Jumlah instans pin yang diperlukan terpenuhi (sebagaimana ditentukan oleh anggota InstancesNecessary dari struktur KSPIN_DESCRIPTOR_EX .
Minidriver belum menutup gerbang kontrol proses filter dengan menggunakan fungsi KSGATEXxx .
Dalam rutinitas panggilan balik AVStrMiniFilterProcess, minidriver menerima pointer ke array struktur KSPROCESSPIN_INDEXENTRY. AVStream mengurutkan array struktur KSPROCESSPIN_INDEXENTRY berdasarkan ID pin.
Contoh kode berikut menggambarkan cara menggunakan struktur pin proses. Kode diambil dari sampel AVStream Filter-Centric Simulated Capture Driver (Avssamp), yang menunjukkan cara menulis driver pengambilan yang berpusat pada filter. Kode sumber dan deskripsi sampel ini disertakan dalam unduhan sampel Windows Driver Kit.
Minidriver menerima array struktur KSPROCESSPIN_INDEXENTRY dalam pengaturan proses filternya. Dalam contoh ini, minidriver mengekstrak struktur KSPROCESSPIN pertama dari KSPROCESSPIN_INDEXENTRY pada indeks VIDEO_PIN_ID.
NTSTATUS
CCaptureFilter::
Process (
IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
)
{
PKSPROCESSPIN VideoPin = NULL;
...
VideoPin = ProcessPinsIndex [VIDEO_PIN_ID].Pins [0];
...
}
Minidriver tidak boleh merujuk ke ProcessPinsIndex [n].Pin [0] sebelum memverifikasi bahwa anggota Count dari ProcessPinsIndex [n] setidaknya satu, atau bahwa anggota InstancesNecessary dari struktur KSPIN_DESCRIPTOR_EX yang terkandung dalam Pin [0] setidaknya satu. (Jika yang terakhir benar, pin dijamin ada.)
Kemudian, untuk menentukan pin untuk mengambil bingkai, rutinitas panggilan balik AVStrMiniFilterProcess meneruskan pointer ke struktur KSPROCESSPIN ke CaptureFrame, rutinitas pengambilan yang disediakan vendor:
VidCapPin -> CaptureFrame (VideoPin, m_Tick);
Rutinitas penangkapan kemudian dapat menyalin ke atau dari anggota Data dari struktur KSPROCESSPIN. Ini mungkin juga memperbarui anggota BytesUsed dan Terminasi struktur ini, seperti dalam contoh berikut:
RtlCopyMemory ( ProcessPin -> Data,
m_SynthesisBuffer,
m_VideoInfoHeader -> bmiHeader.biSizeImage
);
ProcessPin -> BytesUsed = m_VideoInfoHeader -> bmiHeader.biSizeImage;
ProcessPin -> Terminate = TRUE;
Minidriver juga dapat mengakses struktur header aliran yang sesuai dengan penunjuk aliran dan pin saat ini:
PKSSTREAM_HEADER StreamHeader = ProcessPin -> StreamPointer -> StreamHeader;
Sebagian besar minidriver yang menggunakan pemrosesan berfokus pada filter menggunakan penunjuk aliran hanya untuk mengakses header aliran. Dalam model yang berfokus pada filter, AVStream memanipulasi penunjuk aliran secara internal. Akibatnya, minidriver harus melanjutkan dengan hati-hati jika mereka memanipulasi penunjuk aliran dalam driver yang berpusat pada filter.