Bagikan melalui


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.

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 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 :

KSPROPERTY_AUDIO_MUTE

KSPROPERTY_AUDIO_PEAKMETER2

KSPROPERTY_AUDIO_VOLUMELEVEL

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:

Implementasi Driver Audio Yang Dibongkar Perangkat Keras

Objek Pemrosesan Windows Audio