次の方法で共有


WDMAud トポロジ解析

WDMAud システム ドライバーは、ソース ミキサー ラインを解析する前に、まず宛先ミキサー ラインを解析します。 WDMAud が宛先行を解析する順序は、SysAudio が行を検出する順序とは逆です。 たとえば、番号の大きいピンが最初に解析されます。 解析はピンの直接の親から始まり、上流方向に進みます。 各ノードは、パーサーが以下のいずれかの終了条件を検出するまで、これらの規則に従って変換されます:

  • 解析されている現在のノードは SUM ノードです。

  • 現在のノードは MUX ノードです。

  • 現在のノードには複数の親があります。

SUM ノードと MUX ノードは、宛先ラインの従来のターミネータです。 SUM ノードはコントロールを生成しません。 MUX ノードは、MUX によって制御される各ソース行への参照を含む宛先行に MUX コントロールを生成します。

複数の親が検出された場合、解析は直ちに終了します。 ミキサーラインドライバは、この状態を、複数の入力を結び付けることによって形成される"仮想和"として解釈します。

宛先行の名前は、そのピンの KSPROPERTY_PIN_NAME プロパティから返された名前から取得されます。

すべてのコピー先行コントロールが変換された後、WDMAud はソース行の変換を開始します。 繰り返しになりますが、WDMAud がこれらの行を解析する順序は、SysAudio がクエリを実行する順序とは逆です。 また、ソース行が解析される方向は、宛先行が解析される方向とは逆です。 WDMAud は、ピンから開始し、次のいずれかの終了条件を検出するまで、ダウンストリーム方向に進む各行を解析します:

  • パーサーは宛先行を検出します。

  • 変換中の現在のノードは、変換先行に属しています。

  • 現在のノードは SUM ノードです。

  • 現在のノードは MUX ノードです。

宛先行に属するソース行の解析中に MUX が検出されると、コントロールに変換されます。 ただし、これは、宛先行に格納されている MUX の行番号を後で更新するためのプレースホルダーとしてのみ使用されます。 この時点では最終的な行番号はまだ利用できないため、プレースホルダーが必要です。

MUX ノードと SUM ノードはどちらもソース行を終了します。したがって、SUM または MUX と別の SUM または MUX の間のノードは変換されません。

メモ

  1. MUX のライン名は、MUX に供給されるラインが SUM または MUX ノードからのものである場合を除き、ラインのピン名から派生します。 その場合、行の名前は MUX または SUM ノードの名前になります。 ミキサー ドライバーは、これを検出すると、SUM または MUX ノードの名前を使用して仮想ミキサー ラインを構築し、SUM または MUX と MUX の間ですべてのコントロールを変換します。

  2. トポロジの分割は、ノードに複数の子がある場合です。 これは、1 つのピンが 2 つの別々の宛先にルーティングされているが、音量やミュートなどの共通のコントロールを共有している場合に便利です。 分割が発生するたびに、WDMAud ドライバーは新しい行を作成し、分割までに解析されたすべてのコントロールを複製します。 これは、ソース行を終了する SUM ノードを検出した後でも、分割が発生するたびに無条件に発生します。