次の方法で共有


ハードウェア オフロード オーディオ ドライバーの実装

オフロードされたオーディオ用のドライバーを実装するときは、オフロードされたオーディオ ストリームを処理し、その機能を Windows オーディオ システムに公開できるドライバーを開発します。

このトピックでは、ハードウェア オフロード オーディオ ストリームを処理できるオーディオ アダプター用に開発された、オーディオ ドライバーの実装の詳細について説明します。

このセクションの追加のトピックでは、オフロードされたオーディオ ストリームを処理するハードウェア オーディオ エンジンを実装するオーディオ アダプターのオーディオ ドライバーを開発するときに、注意する必要がある問題について説明します。

オフロードされたオーディオ処理のためのPortclsヘルパーインターフェイス

オフロードされたオーディオに関するグリッチ レポート

ハードウェア オフロード - KS フィルター トポロジ

Windows では、オンボード ハードウェア オーディオ エンジンを使用してオーディオ ストリームを処理できるオーディオ アダプターの使用がサポートされています。 このようなオーディオ アダプターを開発するとき、関連付けられているオーディオ ドライバーは、特定の方法でユーザー モード オーディオ システムにこの事実を公開する必要があります。これにより、オーディオ システムがこのアダプターとそのドライバーの機能を検出、使用し、適切に公開できるようになります。

Diagram showing a DSP-equipped system implementing effects in hardware.

ノード記述子の KSNODETYPE_AUDIO_ENGINE GUID

オーディオ アダプターがオフロードされたオーディオ ストリームを処理できる場合、アダプターのオーディオ ドライバーは、アダプターの KS フィルター内のノードを使用して、この機能を公開します。

オーディオ アダプターがオフロードされたオーディオ ストリームを処理できる場合、アダプターのオーディオ ドライバーは、アダプターの KS フィルター内の特定のノードを使用して、この機能を公開します。

オーディオ ストリームのパス内の各ノードにはノード記述子があります。ハードウェアの負荷がオフの場合、ドライバーは Type GUIDKSNODETYPE_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 プロパティ セット内の既存のプロパティもサポートする必要があります。

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 オーディオ処理オブジェクト