オフロードされたオーディオ処理のためのPortclsヘルパーインターフェイス
このトピックでは、オフロードされたオーディオ処理をサポートするドライバーの実装を簡略化するため、マイクロソフトがオーディオ ポート クラス ドライバー (PortCls) に追加したヘルパー インターフェイスについて説明します。
ハードウェアによってオフロードされたオーディオ ストリームを処理できるオーディオ アダプターで動作する WaveRT ミニポート ドライバーを開発する場合、ミニポート ドライバーは、オーディオ データをストリームまたは処理する PortCls と連携します。
PortCls は、オフロード関連のすべてのカーネル ストリーミング (KS) プロパティを処理できます。そのため、ハードウェアによってオフロードされたオーディオ ストリームの処理のサポートを公開する WaveRT ミニポート ドライバーを簡単に開発できます。 更新の結果として、PortCls は、新しく定義された 2 つのインターフェイスを介して、ハードウェアやドライバー固有の操作の基になるミニポート ドライバーのみ呼び出します。
これらのインターフェイスを操作するには、インターフェイスごとに 1 つずつ、2 つのクラスを開発する必要があります。
IMiniportAudioEngineNode の操作
IMiniportAudioEngineNode を操作するために開発するクラスは、IMiniportWaveRT から継承する必要もあります。 IMiniportAudioEngineNode で定義されているメソッドを使用すると、ドライバーは KS フィルター ハンドルを介してオーディオ エンジンにアクセスする KS プロパティを使用できます。 クラス/インターフェイス階層は次のとおりです。
したがって、たとえば、CYourMiniportWaveRT というクラスを開発する場合、前の図からわかるように、CYourMiniportWaveRT は、2 つの親インターフェイスに定義されているすべてのメソッド (Operations として表示されます) を実装する必要があります。
このようなクラスのスケルトン テンプレートには、次のコードが含まれています。
class CMiniportWaveRT :
public IMiniportWaveRT,
public IMiniportAudioEngineNode,
public CUnknown
{
...
IMP_IMiniportWaveRT;
IMP_IMiniportAudioEngineNode;
...
};
Portcls.h ヘッダー ファイルは、これらのインターフェイスを定義します。
IMiniportStreamAudioEngineNode の使用
2 番目のインターフェイス IMiniportStreamAudioEngineNode を使用するために開発するクラスも、IMiniportWaveRTStreamNotification から継承する必要があります。 IMiniportStreamAudioEngineNode で定義されているメソッドを使用すると、ドライバーは、ピン インスタンス ハンドルを介してオーディオ エンジンにアクセスする KS プロパティを使用することができます。 クラス/インターフェイス階層は次のとおりです。
したがって、たとえば、CYourMiniportWaveRTStream というクラスを開発する場合、前の図からわかるように、CYourMiniportWaveRTStream は、2 つの親インターフェイスに定義されているすべてのメソッドを実装する必要があります。
このようなクラスのスケルトン テンプレートには、次のコードが含まれています。
class CMiniportWaveRTStream :
public IMiniportWaveRTStreamNotification,
public IMiniportStreamAudioEngineNode,
public CUnknown
{
...
IMP_IMiniportWaveRTStream;
IMP_IMiniportWaveRTStreamNotification;
IMP_IMiniportStreamAudioEngineNode;
...
};
Portcls.h ヘッダー ファイルは、これらのインターフェイスを定義します。 ハードウェアによってオフロードされたオーディオ ストリームを処理できるドライバーを開発する方法について詳しくは、「ハードウェアによってオフロードされたオーディオ ドライバーの実装」をご覧ください。