struktur KSPIN_DESCRIPTOR_EX (ks.h)

Struktur KSPIN_DESCRIPTOR_EX menjelaskan karakteristik jenis pin pada jenis filter tertentu.

Sintaks

typedef struct _KSPIN_DESCRIPTOR_EX {
  const KSPIN_DISPATCH         *Dispatch;
  const KSAUTOMATION_TABLE     *AutomationTable;
  KSPIN_DESCRIPTOR             PinDescriptor;
  ULONG                        Flags;
  ULONG                        InstancesPossible;
  ULONG                        InstancesNecessary;
  const KSALLOCATOR_FRAMING_EX *AllocatorFraming;
  PFNKSINTERSECTHANDLEREX      IntersectHandler;
} KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;

Anggota

Dispatch

Penunjuk ke struktur KSPIN_DISPATCH untuk pin ini. Pointer ini bersifat opsional dan hanya boleh disediakan oleh klien yang ingin menerima pemberitahuan. Klien yang perlu melakukan pemrosesan yang ber sentris pin (filter yang berkaitan dengan perutean data, dengan kata lain driver perangkat keras) harus menyediakan tabel pengiriman ini dan pengiriman proses. Lihat KSPIN_DISPATCH untuk informasi selengkapnya.

AutomationTable

Penunjuk ke struktur KSAUTOMATION_TABLE untuk pin ini. Tabel otomatisasi berisi properti, metode, dan peristiwa yang didukung oleh pin. Tabel otomatisasi ini digabungkan dengan tabel otomatisasi yang disediakan oleh AVStream untuk semua pin. Jika klien menyediakan penangan properti, peristiwa, atau metode apa pun yang sudah disediakan oleh AVStream, implementasi klien menggantikan AVStream.

PinDescriptor

Anggota ini menentukan struktur jenis KSPIN_DESCRIPTOR.

Flags

Menentukan nilai tipe ULONG. Ini bisa menjadi kombinasi bendera apa pun yang tercantum dalam daftar berikut. Tentukan bendera menggunakan bitwise OR, dengan pengecualian berikut: KSPIN_FLAG_CRITICAL_PROCESSING dan KSPIN_FLAG_HYPERCRITICAL_PROCESSING saling eksklusif. KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING dan KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL saling eksklusif. KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING dan KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING saling eksklusif. KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY dan KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE saling eksklusif.

KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING

Menunjukkan bahwa minidriver meminta agar proses dikirim terjadi di IRQL DISPATCH_LEVEL alih-alih PASSIVE_LEVEL.

KSPIN_FLAG_CRITICAL_PROCESSING

Jika pemrosesan asinkron telah ditentukan atau jika sistem berjalan pada PASSIVE_LEVEL dan panggilan proses masuk pada DISPATCH_LEVEL, pemrosesan dilakukan dalam item kerja yang diantrekan. Bendera ini menunjukkan bahwa item kerja harus ditempatkan pada antrean kerja penting dibandingkan dengan antrean kerja yang tertunda.

KSPIN_FLAG_HYPERCRITICAL_PROCESSING

Jika pemrosesan asinkron telah ditentukan atau jika sistem berjalan pada PASSIVE_LEVEL dan panggilan proses masuk pada DISPATCH_LEVEL, pemrosesan dilakukan dalam item kerja yang diantrekan. Bendera ini menunjukkan bahwa item kerja harus ditempatkan pada antrean kerja hiperkritik dibandingkan dengan antrean kerja yang tertunda atau antrean kerja penting.

KSPIN_FLAG_ASYNCHRONOUS_PROCESSING

Menunjukkan bahwa pin harus memproses data secara asinkron. Jika bendera ini diatur, AVStream tidak menunggu satu pengiriman proses dipanggil sebelum melanjutkan dengan bingkai tambahan.

KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING

AVStream memanggil pengiriman pemrosesan hanya ketika minidriver secara eksplisit memanggil KsXxxAttemptProcessing. Berguna untuk klien yang berniat untuk langsung melakukan polling antrean, misalnya, waktu DPC untuk mengangkut data ke perangkat keras.

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

Menunjukkan bahwa pemrosesan harus terjadi setiap kali bingkai data masuk ke antrean. Jika bendera ini tidak ditentukan, pengiriman proses hanya dipanggil ketika data masuk ke antrean yang sebelumnya kosong.

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

Menunjukkan bahwa bingkai tidak diperlukan pada pin ini agar pemrosesan dimulai. Bahkan jika tidak ada bingkai dalam antrean, perubahan status sekarang sudah cukup untuk menyebabkan AVStream memanggil pengiriman pemrosesan. Bendera ini hanya berguna untuk filter yang bersifat filter. Pin yang tidak menentukan pemrosesan penundaan bendera ini pada filter jika tidak memiliki bingkai yang tersedia. Pin yang menentukan bendera ini tidak menunda pemrosesan dengan cara ini. Jika pin menentukan bendera ini, menjadi tanggung jawab pengiriman proses untuk memeriksa bingkai yang tersedia.

KSPIN_FLAG_ENFORCE_FIFO

Menentukan bendera ini menyebabkan antrean memaksa IRP ditangani dengan cara first-in-first-out. Jika satu IRP diselesaikan oleh minidriver sebelum IRP yang dikirim sebelumnya, IRP yang lebih baru tidak diselesaikan oleh AVStream sampai IRP sebelumnya telah diselesaikan oleh minidriver.

KSPIN_FLAG_GENERATE_MAPPINGS

Menentukan bendera ini menyebabkan AVStream secara otomatis menghasilkan pemetaan sebar/kumpulkan untuk bingkai antrean saat minidriver mengunci penunjuk aliran yang mereferensikan bingkai tersebut. Klien yang berniat menggunakan fitur ini perlu mendaftarkan objek adaptor DMA mereka dengan AVStream melalui fungsi KsDeviceRegisterAdapterObject . Lihat anggota KSSTREAM_HEADERyang digunakan Data untuk efek bendera ini pada struktur KSSTREAM_HEADER. Lihat juga KSSTREAM_POINTER_OFFSET.

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

Menunjukkan bahwa antrean yang terkait dengan pin harus memiliki penunjuk aliran tepi berikutnya. Penunjuk tepi berikutnya adalah penunjuk aliran khusus yang menunjuk ke data tertua dalam antrean kecuali ada penunjuk kloning pada data yang lebih lama. Setiap bingkai data di jendela antara penunjuk aliran tepi di depan dan di belakang dianggap memiliki setidaknya satu jumlah referensi dan tidak selesai sampai mereka bergerak keluar dari jendela dengan memajukan tepi berikutnya dengan KsPinGetTrailingEdgeStreamPointer dan salah satu fungsi KsStreamPointerAdvanceXxx atau KsStreamPointerUnlock . Pin yang tidak menentukan bendera ini tidak memiliki penunjuk aliran tepi berikutnya.

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

Menunjukkan bahwa AVStream hanya boleh memanggil pin ini untuk diproses saat pin berada di KSSTATE_RUN. Mengubah status pemrosesan minimum dari jeda menjadi berjalan. AVStream memanggil pin ini untuk diproses setelah memberi tahunya untuk menjalankan status, bahkan jika bingkai tiba. Setiap pin yang menentukan bendera ini dan merupakan bagian dari filter yang ber sentris filter menyebabkan filter tidak diproses jika pin yang diberikan tidak dalam KSSTATE_RUN.

KSPIN_FLAG_SPLITTER

Menunjukkan bahwa pin ini (pin output) adalah pemisah. Pin yang menentukan bendera ini harus menunjukkan sejumlah kemungkinan instans yang lebih besar dari satu instans. Ketika instans kedua pin ini dibuat, AVStream secara otomatis menyiapkan pemisah sehingga bingkai yang dikirim ke pin asli disalin ke pin baru. Perhatikan bahwa penyalinan ini dilakukan secara otomatis oleh AVStream. Klien biasanya dapat mengabaikan pin proses yang memiliki pointer Non-NULLDelegateBranch dan CopySource. Anggota ini menunjukkan bahwa pin adalah bagian dari cabang pemisah dan ditangani secara otomatis oleh AVStream. Dalam rilis pasca-DirectX 8.0, bendera ini berfungsi untuk pin pada filter yang berentrik filter dan sentris pin. Rilis yang lebih lama mendukung bendera ini hanya untuk pin pada filter yang ber sentris filter.

KSPIN_FLAG_USE_STANDARD_TRANSPORT

Bendera ini memaksa pin untuk menggunakan mekanisme transportasi standar. Ini mengambil alih semua pemeriksaan lainnya (jenis komunikasi, jenis sedang, jenis antarmuka, dll.) pada pin. Menentukan bendera ini dan KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT menghasilkan transportasi standar yang digunakan. Bendera ini mengambil alih semua pemeriksaan lainnya.

KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT

Menunjukkan bahwa pin tidak menggunakan mekanisme transportasi standar. Pin yang tidak menggunakan mekanisme transportasi standar tidak akan termasuk dalam bagian pipa dan tidak akan memiliki antrean terkait.

KSPIN_FLAG_FIXED_FORMAT

Menunjukkan bahwa pin ini menggunakan format data tetap. Setiap upaya untuk mengatur format data mengembalikan STATUS_INVALID_DEVICE_REQUEST.

KSPIN_FLAG_GENERATE_EOS_EVENTS

Menunjukkan bahwa pin ini menangani permintaan dukungan peristiwa koneksi.

KSPIN_FLAG_RENDERER

Menentukan bahwa pin ini mampu merender bingkai.

KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING

Ketika ditentukan pada pin filter-sentris, menunjukkan bahwa satu atau beberapa instans jenis pin yang dimaksud harus memiliki bingkai yang tersedia untuk memproses data. Saling eksklusif dengan KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING.

Perhatikan bahwa perilaku ini dapat diperoleh melalui KsPinAttachOrGate dengan menyiapkan gerbang ATAU secara manual sebagai gerbang bingkai untuk setiap instans pin dan melampirkan gerbang OR ini ke gerbang AND filter.

Saat menggunakan bendera ini, minidriver tidak dapat memanggil KsPinAttachAndGate atau KsPinAttachOrGate pada instans pin terkait. (Bendera secara efektif melakukan ini untuk Anda untuk kasus OR sederhana.) Lihat juga Pemrosesan Filter-Sentris.

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

Ketika ditentukan pada pin yang ber sentris filter , menunjukkan bahwa pemrosesan dapat terjadi ketika satu atau beberapa instans pin sehingga ditandai berada dalam status eksekusi. Semua pin yang tidak dihentikan masih harus berada setidaknya di jeda untuk memproses data. Jangan gunakan bendera ini jika pin yang sesuai adalah pin output dan pin ini terlibat dalam transformasi di tempat.

KSPIN_FLAG_DENY_USERMODE_ACCESS

Bendera ini mencegah akses mode pengguna ke pin khusus ini.

KSPIN_FLAG_IMPLEMENT_CLOCK

Menunjukkan bahwa pin ini mengekspos jam yang dapat dipilih oleh manajer grafik sebagai jam master. Lihat juga Jam AVStream.

InstancesPossible

Menentukan nilai jenis ULONG yang berisi hitungan jumlah maksimum kemungkinan instans pin ini. Setiap upaya untuk membuat instans lebih dari jumlah pin dari jenis yang diberikan ini gagal. Atur ke KSINSTANCE_INDETERMINATE untuk tidak memiliki batasan jumlah pin yang dibuat.

InstancesNecessary

Menentukan nilai jenis ULONG yang berisi jumlah minimum pin dari jenis pin tertentu yang diperlukan untuk berada dalam status pada atau di atas tingkat pemrosesan minimum untuk berfungsinya filter. Secara default tingkat pemrosesan minimum KSSTATE_PAUSE, meskipun minidriver dapat mengubah perilaku default dengan mengatur anggota Bendera struktur ini ke KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY atau KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE. Setiap upaya untuk mengubah status filter yang tidak memiliki jumlah instans jenis pin ini gagal. Lihat informasi tambahan di bagian Keterangan.

AllocatorFraming

Penunjuk ke struktur KSALLOCATOR_FRAMING_EX yang berisi persyaratan pembingkaian alokator untuk jenis pin ini. Pembingkaian alokator menentukan item seperti persyaratan perataan memori, ukuran bingkai maksimum, dan ukuran bingkai minimum. Anggota ini bisa NULL, yang menunjukkan bahwa pin ini tidak mendukung properti pembingkaian alokator.

IntersectHandler

Penunjuk ke fungsi KStrIntersectHandlerEx yang ditentukan driver untuk menangani persimpangan data. Jika anggota ini NULL, pin menangani kueri persimpangan data untuk rentang data dengan penentu KSDATAFORMAT_SPECIFIER_NONE. Fungsi handler persimpangan menerima rentang data tunggal dari kueri dan rentang data tunggal dari daftar pin rentang data. JENIS, subjenis, dan GUID penentu rentang ini dijamin cocok, meskipun beberapa mungkin kartubebas. Fungsi ini menunjukkan rentang data tidak cocok, atau menghasilkan format data terbaik di irisan dua rentang data. Lihat Persimpangan Rentang Data di AVStream untuk informasi selengkapnya.

Keterangan

AMCap dan Blink mungkin tidak dapat menemukan antarmuka tuner dan crossbar pada driver AVStream Anda jika anggota InstancesNecessary KSPIN_DESCRIPTOR_EX diatur ke nol untuk pin input video analog. Untuk memperbaiki masalah ini, atur InstancesNecessary untuk pin ini ke salah satunya.

Perhatikan bahwa persyaratan pembingkaian alokator pin Anda dapat diabaikan terlepas dari fakta bahwa pembingkaian alokator Anda menentukan bahwa penyelarasan atau ukuran benar-benar diperlukan untuk menjadi nilai tertentu. Jika driver mode kernel Anda terhubung ke filter mode pengguna upstram yang mengalokasikannya dan alokator filter hulu tertentu tidak memahami persyaratan pembingkaian, ini dapat terjadi (contoh tertentu saat ini termasuk pemisah MPEG-2).

Selain itu, jika Anda menentukan KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING dan pin menggunakan mekanisme transportasi standar, Anda harus memiliki objek pemrosesan. Ini berarti harus ada beberapa pengiriman proses yang disediakan (baik di tingkat filter atau pada tingkat pin); bahkan jika fungsi ini tidak pernah dipanggil, fungsi ini harus disediakan dalam keadaan ini.

Persimpangan Rentang Data di Pemisah AVStream dan AVStream.

Persyaratan

Persyaratan Nilai
Header ks.h (termasuk Ks.h)

Lihat juga

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject