Sematkan Pabrik

Pabrik pin filter audio menjelaskan semua pin yang dapat digunakan filter. Seperti disebutkan sebelumnya, driver miniport audio menyimpan informasi pin dalam array struktur PCPIN_DESCRIPTOR . Setiap struktur menentukan pabrik pin, dan pabrik pin diidentifikasi oleh indeksnya dalam array. Indeks ini sering disebut sebagai ID pin.

Struktur PCPIN_DESCRIPTOR berisi tabel otomatisasi dan struktur KSPIN_DESCRIPTOR .

Struktur KSPIN_DESCRIPTOR berisi informasi berikut tentang pin di pabrik pin:

  • Arah filter relatif aliran data

  • Arah aliran komunikasi relatif filter (Di semua versi Windows saat ini, filter KS menggunakan RUNPS untuk komunikasi.)

  • Sematkan kategori

  • Nama yang mudah diingat

  • Kemampuan instans

  • Kapabilitas format data

Anggota Kategori dan Nama struktur menentukan kategori pin pabrik pin dan nama yang mudah diingat. Untuk setiap pabrik pin dalam filter, driver miniport menentukan kombinasi Kategori dan GUID Nama yang bersama-sama mengidentifikasi pabrik pin secara unik. Jika dua atau beberapa pabrik pin memiliki nilai Kategori yang sama, setiap pabrik pin memiliki nilai Nama yang membedakannya dari yang lain. Jika hanya satu pabrik pin yang memiliki nilai Kategori tertentu, nilai tersebut cukup untuk mengidentifikasi pabrik pin, dan nilai Nama untuk pabrik pin tersebut dapat diatur ke NULL. Untuk contoh pengkodian, lihat Mengekspos Topologi Filter. Untuk informasi tentang kategori pin, lihat Menyematkan Properti Kategori.

Pabrik pin menentukan rentang format data yang didukungnya sebagai array struktur KSDATARANGE yang diperluas:

  • Pabrik pin yang mendukung rentang format data gelombang atau DirectSound untuk aliran input atau outputnya menentukan array struktur KSDATARANGE_AUDIO .

  • Pabrik pin yang mendukung berbagai format data MIDI atau DirectMusic untuk aliran input atau outputnya menentukan array struktur KSDATARANGE_MUSIC .

KSDATARANGE_AUDIO dan KSDATARANGE_MUSIC adalah versi KSDATARANGE yang diperluas. Untuk contoh kedua jenis rentang data, lihat Format Data Audio dan Rentang Data.

Sebelum menyambungkan pin sink pada satu filter ke pin sumber pada filter lain, penyusun grafik (misalnya, driver sistem SysAudio) dapat mencari rentang data untuk format yang kompatibel. Penyusun grafik biasanya memanggil penangan persimpangan data filter, yang memungkinkan filter itu sendiri untuk memilih format yang kompatibel.

Filter dapat memiliki beberapa pabrik pin, dan pabrik pin dapat mendukung beberapa instans pin.

  • Memiliki beberapa pabrik pin pada filter berguna untuk membedakan jalur data terpisah untuk berbagai jenis data yang mengalir melalui filter. Misalnya, satu pabrik pin mungkin mendukung aliran data PCM, dan pabrik pin lain mungkin mendukung aliran AC-3.

  • Satu filter dapat mendukung penyajian dan pengambilan aliran secara bersamaan. Jalur penyajian dan pengambilan memiliki sekumpulan pabrik filter terpisah.

  • Memiliki beberapa instans pin pada pabrik sink-pin sering menyiratkan pencampuran, dalam hal ini filter berisi simpul SUM (KSNODETYPE_SUM).

Seperti filter, pin adalah objek kernel dan diidentifikasi oleh handel kernel. Handel untuk instans pin dibuat dengan memanggil KsCreatePin. Sebagai objek kernel, pin dapat ditentukan sebagai target IRP. Klien driver menentukan handel pin saat mengirim permintaan IOCTL ke pin.

Saat membangun grafik filter audio, SysAudio menautkan satu filter ke filter lainnya dengan menyambungkan pin mereka. Pin sumber dari satu filter dapat disambungkan ke pin sink filter lain. Data dan IRP dari pin sumber mengalir ke pin sink melalui koneksi ini. Untuk membuat koneksi, pembuat grafik (biasanya SysAudio) membuat pin sumber terlebih dahulu dengan memanggil KsCreatePin dan kemudian membuat pin sink dengan memanggil KsCreatePin lagi. Namun, pada panggilan kedua, klien menentukan bahwa pin sink baru akan disambungkan ke pin sumber yang dibuat di panggilan pertama.