ハードウェア オフロード オーディオ ドライバーの実装
オフロードされたオーディオ用のドライバーを実装するときは、オフロードされたオーディオ ストリームを処理し、その機能を Windows オーディオ システムに公開できるドライバーを開発します。
このトピックでは、ハードウェア オフロード オーディオ ストリームを処理できるオーディオ アダプター用に開発された、オーディオ ドライバーの実装の詳細について説明します。
このセクションの追加のトピックでは、オフロードされたオーディオ ストリームを処理するハードウェア オーディオ エンジンを実装するオーディオ アダプターのオーディオ ドライバーを開発するときに、注意する必要がある問題について説明します。
オフロードされたオーディオ処理のためのPortclsヘルパーインターフェイス
ハードウェア オフロード - KS フィルター トポロジ
Windows では、オンボード ハードウェア オーディオ エンジンを使用してオーディオ ストリームを処理できるオーディオ アダプターの使用がサポートされています。 このようなオーディオ アダプターを開発するとき、関連付けられているオーディオ ドライバーは、特定の方法でユーザー モード オーディオ システムにこの事実を公開する必要があります。これにより、オーディオ システムがこのアダプターとそのドライバーの機能を検出、使用し、適切に公開できるようになります。
ノード記述子の KSNODETYPE_AUDIO_ENGINE GUID
オーディオ アダプターがオフロードされたオーディオ ストリームを処理できる場合、アダプターのオーディオ ドライバーは、アダプターの KS フィルター内のノードを使用して、この機能を公開します。
オーディオ アダプターがオフロードされたオーディオ ストリームを処理できる場合、アダプターのオーディオ ドライバーは、アダプターの KS フィルター内の特定のノードを使用して、この機能を公開します。
オーディオ ストリームのパス内の各ノードにはノード記述子があります。ハードウェアの負荷がオフの場合、ドライバーは Type 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 レジストリ キーを設定できるようにします。
ノードの種類、KSNODETYPE_AUDIO_ENGINE の GUID の定義は次のとおりです。
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 プロパティ セット内の既存のプロパティもサポートする必要があります。
また、ハードウェア オフロード オーディオ処理のドライバー サポートの実装を完了するために、次のプロパティを KSPROPSETID_ Audio プロパティ セットで使用できます。
KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION
KSPROPERTY_AUDIO_PRESENTATION_POSITION
KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION
ポート クラス ドライバーの更新と不具合レポート
Windows ポート クラス ドライバーは、ハードウェア オフロード オーディオ処理の前のセクションで説明したサポートに加えて、オフロードされたオーディオ ストリームを操作できるドライバーの開発を簡単にする "ヘルパー インターフェイス" を提供しています。 このドライバーが不具合を検出すると、ドライバーがその不具合エラーを報告することができるメカニズムが用意されています。 次のトピックでは、ヘルパー インターフェイスと不具合レポートの詳細について説明します。
オフロードされたオーディオ処理用の Portcls ヘルパー インターフェイス: ハードウェア オフロード オーディオ処理についての前のセクションで説明したサポートに加えて、Windows ポート クラス ドライバーには、オフロードされたオーディオ ストリームを処理できるドライバーの開発を簡素化するための、"ヘルパー インターフェイス" も含まれています。 このドライバーが不具合を検出すると、ドライバーがその不具合エラーを報告することができるメカニズムが用意されています。 次のトピックでは、ヘルパー インターフェイスと不具合レポートの詳細について説明します。