Implementasi driver audio yang dibongkar perangkat keras
Ketika Anda mengimplementasikan driver untuk audio offload, Anda mengembangkan driver yang dapat memproses aliran audio yang dibongkar, dan untuk mengekspos kemampuan tersebut ke sistem audio Windows.
Topik ini menyajikan detail implementasi untuk driver audio yang dikembangkan untuk adaptor audio yang mampu memproses aliran audio yang dibongkar perangkat keras.
Topik tambahan di bagian ini membahas masalah yang harus Anda ketahui ketika Anda mengembangkan driver audio untuk adaptor audio yang mengimplementasikan mesin audio perangkat keras untuk menangani aliran audio yang dibongkar.
Antarmuka Pembantu Portcls untuk Pemrosesan Audio Yang Dibongkar
Pelaporan Glitch untuk Audio Yang Dibongkar
Offload perangkat keras - Topologi filter KS
Windows mendukung penggunaan adaptor audio yang dapat menggunakan mesin audio perangkat keras on-board untuk memproses aliran audio. Ketika Anda mengembangkan adaptor audio seperti itu, driver audio terkait harus mengekspos fakta ini ke sistem audio mode pengguna dengan cara tertentu, sehingga sistem audio dapat menemukan, menggunakan, dan mengekspos fitur adaptor ini dengan benar dan drivernya.
GUID KSNODETYPE_AUDIO_ENGINE untuk deskriptor simpul
Jika adaptor audio mampu memproses aliran audio yang dibongkar, driver audio adaptor mengekspos kemampuan ini dengan menggunakan simpul di filter KS untuk adaptor.
Jika adaptor audio mampu memproses aliran audio yang dibongkar, driver audio adaptor mengekspos kemampuan ini dengan menggunakan simpul tertentu di filter KS untuk adaptor.
Setiap simpul di jalur aliran audio memiliki deskriptor simpul, untuk perangkat keras tidak dimuat, driver harus mengatur Jenis GUID ke KSNODETYPE_AUDIO_ENGINE.
Berikut adalah contoh bagaimana driver dapat mengonfigurasi deskriptor simpul untuk simpul ini:
typedef struct _KSNODE_DESCRIPTOR {
const KSAUTOMATION_TABLE *AutomationTable; // drv specific
const GUID *Type; // must be set to KSNODETYPE_AUDIO_ENGINE
const GUID *Name; // drv specific (KSNODETYPE_AUDIO_ENGINE?)
} KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;
Jika NAMA GUID diatur ke KSNODETYPE_AUDIO_ENGINE, maka Anda harus membuat string nama default untuk simpul ini. Anda kemudian menambahkan string tersebut ke ks.inf, sehingga selama penginstalan driver, string dapat digunakan untuk mengisi kunci registri MediaCategories .
Definisi GUID untuk jenis node, KSNODETYPE_AUDIO_ENGINE, adalah sebagai berikut:
Code style
#define STATIC_KSNODETYPE_AUDIO_ENGINE\
0x35caf6e4, 0xf3b3, 0x4168, 0xbb, 0x4b, 0x55, 0xe7, 0x7a, 0x46, 0x1c, 0x7e
DEFINE_GUIDSTRUCT("35CAF6E4-F3B3-4168-BB4B-55E77A461C7E", KSNODETYPE_AUDIO_ENGINE);
#define KSNODETYPE_AUDIO_ENGINE DEFINE_GUIDNAMED(KSNODETYPE_AUDIO_ENGINE)
Untuk informasi selengkapnya, lihat file header ksmedia.h .
Dan berdasarkan informasi sebelumnya, deskriptor untuk simpul miniport dapat terlihat seperti berikut:
PCNODE_DESCRIPTOR MiniportNodes[] =
{
// KSNODE_WAVE_AUDIO_ENGINE
{
0, // Flags
NULL, // AutomationTable
&KSNODETYPE_AUDIO_ENGINE, // Type KSNODETYPE_AUDIO_ENGINE
NULL // Name
}
};
Properti KS KSPROPSETID_AudioEngine diatur untuk mesin audio
Set properti KSPROPSETID_AudioEngine digunakan untuk mendukung mesin audio perangkat keras dan pemrosesan audio yang dibongkar perangkat keras. Jadi driver untuk adaptor yang dapat memproses aliran audio yang dibongkar harus mendukung properti dalam set properti baru ini.
Kumpulan properti, KSPROPSETID_AudioEngine, didefinisikan sebagai berikut:
#define STATIC_KSPROPSETID_AudioEngine\
0x3A2F82DCL, 0x886F, 0x4BAA, 0x9E, 0xB4, 0x8, 0x2B, 0x90, 0x25, 0xC5, 0x36
DEFINE_GUIDSTRUCT("3A2F82DC-886F-4BAA-9EB4-082B9025C536", KSPROPSETID_AudioEngine);
#define KSPROPSETID_AudioEngine DEFINE_GUIDNAMED(KSPROPSETID_AudioEngine)
Nama properti dalam set properti ini ditentukan dalam enum KSPROPERTY_AUDIOENGINE , dan driver harus mendukung nama-nama ini.
Berikut adalah properti dalam kumpulan properti KSPROPSETID_AudioEngine :
KSPROPERTY_AUDIOENGINE_BUFFER_SIZE_RANGE
KSPROPERTY_AUDIOENGINE_DESCRIPTOR
KSPROPERTY_AUDIOENGINE_DEVICEFORMAT
KSPROPERTY_AUDIOENGINE_GFXENABLE
KSPROPERTY_AUDIOENGINE_LFXENABLE
KSPROPERTY_AUDIOENGINE_LOOPBACK_PROTECTION
KSPROPERTY_AUDIOENGINE_MIXFORMAT
KSPROPERTY_AUDIOENGINE_SUPPORTEDDEVICEFORMATS
KSPROPERTY_AUDIOENGINE_VOLUMELEVEL
Properti yang diperlukan dalam kumpulan properti audio KSPROPSETID_
Selain mendukung properti dalam kumpulan properti KSPROPSETID_AudioEngine , driver juga harus mendukung properti yang ada berikut ini dalam kumpulan properti KSPROPSETID_Audio :
Dan untuk menyelesaikan implementasi dukungan driver untuk pemrosesan audio yang dibongkar perangkat keras, properti tersedia untuk kumpulan properti audio KSPROPSETID_ .
KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION
KSPROPERTY_AUDIO_PRESENTATION_POSITION
KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION
Pembaruan driver kelas port dan pelaporan kesalahan
Selain dukungan yang dijelaskan di bagian sebelumnya untuk pemrosesan audio yang dibongkar perangkat keras, driver kelas port Windows menyediakan "antarmuka pembantu" untuk mempermudah pengembangan driver yang dapat bekerja dengan aliran audio yang dibongkar. Dan ketika driver seperti itu mendeteksi gangguan, ada mekanisme untuk memungkinkan driver melaporkan kesalahan kesalahan. Topik berikut memberikan detail selengkapnya tentang antarmuka pembantu dan pelaporan kesalahan:
Antarmuka Pembantu Portcls untuk Pemrosesan Audio Yang Dibongkar Selain dukungan yang dijelaskan di bagian sebelumnya untuk pemrosesan audio yang dibongkar perangkat keras, driver kelas port Windows juga telah menyertakan "antarmuka pembantu" untuk mempermudah pengembangan driver yang dapat bekerja dengan aliran audio yang dibongkar. Dan ketika driver seperti itu mendeteksi gangguan, ada mekanisme untuk memungkinkan driver melaporkan kesalahan kesalahan. Topik berikut memberikan detail selengkapnya tentang antarmuka pembantu dan pelaporan kesalahan: