Bagikan melalui


Implementasi driver audio yang diperbantukan oleh perangkat keras

Ketika Anda mengimplementasikan driver untuk audio yang di-offload, Anda mengembangkan driver yang dapat memproses aliran audio yang di-offload, serta memperlihatkan kemampuan tersebut kepada sistem audio Windows.

Topik ini menyajikan detail implementasi untuk driver audio yang dikembangkan untuk adaptor audio yang bisa memproses aliran audio dengan offload 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 dilepas.

Antarmuka Pembantu Portcls untuk Pemrosesan Audio yang Dioper ke Luar

Pelaporan Glitch untuk Audio Yang Dilepas

Pengalihan beban 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.

Diagram memperlihatkan sistem yang dilengkapi DSP yang mengimplementasikan efek dalam perangkat keras.

GUID KSNODETYPE_AUDIO_ENGINE untuk deskriptor simpul

Jika adaptor audio mampu memproses aliran audio yang dilepas, driver audio adaptor mengekspos kemampuan ini dengan menggunakan node di filter KS untuk adaptor.

Jika adaptor audio mampu memproses aliran audio yang dilepas, 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 pemindahan beban perangkat keras, 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 bisa terlihat seperti berikut:

PCNODE_DESCRIPTOR MiniportNodes[] =
{
    // KSNODE_WAVE_AUDIO_ENGINE
    {
        0,                          // Flags
        NULL,                       // AutomationTable
        &KSNODETYPE_AUDIO_ENGINE,   // Type  KSNODETYPE_AUDIO_ENGINE
        NULL                        // Name
    }
};

Set properti KS KSPROPSETID_AudioEngine untuk mesin audio

Set properti KSPROPSETID_AudioEngine digunakan untuk mendukung mesin audio perangkat keras dan pemrosesan audio yang di-offload ke perangkat keras. Jadi driver untuk adaptor yang dapat memproses aliran audio yang dilepaskan harus mendukung properti dalam kumpulan 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 didefinisikan 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 :

KSPROPERTY_AUDIO_MUTE

KSPROPERTY_AUDIO_PEAKMETER2

KSPROPERTY_AUDIO_VOLUMELEVEL

Dan untuk menyelesaikan implementasi dukungan driver untuk pemrosesan audio yang diproses oleh perangkat keras, properti tersedia untuk kumpulan properti KSPROPSETID_ Audio.

KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION

KSPROPERTY_AUDIO_PRESENTATION_POSITION

KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION

Pembaruan driver kelas port dan pelaporan gangguan

Selain dukungan yang dijelaskan di bagian sebelumnya untuk pemrosesan audio yang dialihkan ke perangkat keras, driver kelas port Windows menyediakan "antarmuka pendukung" untuk mempermudah dalam mengembangkan driver yang dapat bekerja dengan aliran audio yang dialihkan. Dan ketika pengandar seperti itu mendeteksi gangguan, ada mekanisme yang memungkinkan pengandar melaporkan kesalahan gangguan. Topik berikut memberikan detail selengkapnya tentang antarmuka pembantu dan pelaporan kesalahan:

Antarmuka Pembantu Portcls untuk Pemrosesan Audio Yang Dilepas Selain dukungan yang dijelaskan di bagian sebelumnya untuk pemrosesan audio yang dilepas perangkat keras, driver kelas port Windows juga telah mencakup "antarmuka pembantu" untuk mempermudah pengembangan driver yang dapat bekerja dengan aliran audio yang dilepas. Dan ketika driver seperti itu mendeteksi gangguan, ada mekanisme sehingga driver dapat melaporkan kesalahan. Topik berikut memberikan detail selengkapnya tentang antarmuka pembantu dan pelaporan kesalahan:

Objek Pemrosesan Audio Windows