Share via


硬體卸除音訊驅動程序實作

當您實作卸除音訊的驅動程式時,您會開發能夠處理卸除音訊數據流的驅動程式,以及向 Windows 音訊系統公開該功能。

本主題提供音訊驅動程序的實作詳細數據,該驅動程式是針對能夠處理硬體卸除音訊數據流的音訊適配卡所開發的。

本節中的這些其他主題將討論當您為實作硬體音訊引擎來處理卸除音訊數據流的音訊適配卡開發音訊驅動程式時,應該注意的問題。

卸除音訊處理的 Portcls 協助程式介面

卸除音訊的故障報告

硬體卸除 - KS 篩選拓撲

Windows 支援使用可使用內建硬體音訊引擎來處理音訊數據流的音訊適配卡。 當您開發這類音訊配接器時,相關聯的音訊驅動程序必須以特定方式向使用者模式音訊系統公開這項事實,讓音訊系統可以探索、使用及正確公開此適配卡及其驅動程式的功能。

此圖顯示在硬體中實作效果的 DSP 設備系統。

節點描述項的KSNODETYPE_AUDIO_ENGINE GUID

如果音訊配接器能夠處理卸除的音訊數據流,配接器的音訊驅動程式會使用適配卡的 KS 篩選器中的節點來公開這項功能。

如果音訊配接器能夠處理卸除的音訊串流,配接器的音訊驅動程式會使用適配卡的 KS 篩選器中的特定節點來公開這項功能。

音訊數據流路徑中的每個節點都有節點描述元,針對硬體關閉負載,驅動程式必須將 類型 GUID 設定為 KSNODETYPE_AUDIO_ENGINE

以下是驅動程式如何為此節點設定節點描述元的範例:

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;

如果 Name GUID 設定為 KSNODETYPE_AUDIO_ENGINE,則必須為此節點建立預設名稱字串。 接著,您將該字串新增至 ks.inf,以便在安裝驅動程式期間,字串可用來填入 MediaCategories 登錄機碼。

節點類型的 GUID 定義 KSNODETYPE_AUDIO_ENGINE如下:

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)

如需詳細資訊,請參閱 ksmedia.h 頭檔。

而且根據上述資訊,迷你埠節點的描述項看起來可能如下所示:

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

音訊引擎的KSPROPSETID_AudioEngine KS 屬性集

KSPROPSETID_AudioEngine屬性集可用來支援硬體音訊引擎和硬體卸除的音訊處理。 因此,可以處理卸除音訊數據流的適配卡驅動程序必須支援這個新屬性集中的屬性。

屬性集 KSPROPSETID_AudioEngine定義如下:

#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)

此屬性集中的屬性名稱定義於 KSPROPERTY_AUDIOENGINE 列舉中,而且驅動程式必須支援這些名稱。

以下是 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

KSPROPSETID_ Audio 屬性集中的必要屬性

除了支援 KSPROPSETID_AudioEngine 屬性集中的屬性之外,驅動程式也必須支援 KSPROPSETID_Audio 屬性集中的下列現有屬性:

KSPROPERTY_AUDIO_MUTE

KSPROPERTY_AUDIO_PEAKMETER2

KSPROPERTY_AUDIO_VOLUMELEVEL

若要完成硬體卸除音訊處理的驅動程式支持實作,KSPROPSETID_ Audio 屬性集可以使用屬性。

KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION

KSPROPERTY_AUDIO_PRESENTATION_POSITION

KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION

埠類別驅動程式更新和問題報告

除了上述硬體卸除音訊處理章節中所述的支援之外,Windows 埠類別驅動程式還提供「協助程式介面」,讓您能夠輕鬆地開發可搭配卸除音訊數據流使用的驅動程式。 當這類驅動程式偵測到問題時,有一種機制可讓驅動程式報告問題錯誤。 下列主題提供協助程式介面和問題報告的詳細資料:

卸除音訊處理的 Portcls 協助程式介面 除了上述硬體卸除音訊處理章節中所述的支援之外,Windows 埠類別驅動程式也包含「協助程式介面」,讓您能夠輕鬆地開發可搭配卸除音訊數據流使用的驅動程式。 當這類驅動程式偵測到問題時,有一種機制可讓驅動程式報告問題錯誤。 下列主題提供協助程式介面和問題報告的詳細資料:

硬體卸除音訊驅動程序實作

Windows 音訊處理物件