次の方法で共有


IMiniportWaveCyclicStream::GetPosition メソッド (portcls.h)

GetPosition メソッドは、ストリームの現在位置を取得します。

構文

NTSTATUS GetPosition(
  [out] PULONG Position
);

パラメーター

[out] Position

位置値の出力ポインター。 このパラメーターは、メソッドがストリームの現在のバイト位置を書き込む呼び出し元によって割り当てられた変数を指します。

戻り値

GetPosition は、呼び出しが成功した場合にSTATUS_SUCCESSを返します。 それ以外の場合、メソッドは適切なエラー コードを返します。

備考

GetPosition は、ストリームの現在の再生位置またはレコード位置を報告します。 位置は、DMA バッファーの先頭からのバイト オフセットとして表され、DAC または ADC に現在データのバイト位置のミニポート ドライバーの最適な推定値を表します。

ストリームの初期化直後の位置は 0 です。 KSSTATE_STOP状態に遷移すると (KSSTATE 参照)、位置が 0 にリセットされます。 KSSTATE_RUNからKSSTATE_PAUSEまたはKSSTATE_ACQUIREへの遷移によってストリームが停止すると、位置が固定されます。 ストリームがKSSTATE_PAUSEまたはKSSTATE_ACQUIREからKSSTATE_RUNに遷移すると、固定解除されます。

GetPosition は、循環バッファーへのオフセットとして位置を指定します。 位置が環状バッファーの末尾に達すると、バッファーの先頭に折り返されます。 そのため、位置がバッファー サイズを超えることはありません。

GetPosition 呼び出しによって取得されるオフセット値は、次のいずれかであることに注意してください。

  • レンダー ストリームの場合、GetPosition メソッドは再生位置を取得します。これは、DAC を介して現在再生され、スピーカー ジャックを介して送信されているサンプルのバイト オフセットです。
  • キャプチャ ストリームの場合、GetPosition メソッドは、マイク ジャックを介して受信し、ADC によってキャプチャされる最新のサンプルのバイト オフセットであるレコード位置を取得します。
オーディオ デバイスの DMA エンジンが現在オーディオ バッファーから読み取ったり、オーディオ バッファーに書き込んだりしているサンプルのオフセットではありません。

一部のオーディオ ハードウェアには、各 DAC または ADC の現在のサンプルのバイト オフセットを追跡する位置レジスタが含まれています。その場合、GetPosition メソッドは、適切なストリームの位置レジスタの内容を単に取得します。 その他のオーディオ ハードウェアは、オーディオ バッファーに DMA ポインターをドライバーを提供することしかできません。その場合、GetPosition メソッドは、現在の DMA 位置とデバイス内部のバッファリング遅延に基づいて DAC または ADC のバイト オフセットの最適な推定値を提供する必要があります。

再生ストリームまたはキャプチャ ストリームの一部を内部的にバッファーするオーディオ ハードウェアでは、正確な位置の読み取りが困難になる場合があります。 この場合、ドライバーは可能な限り正確に現在の位置を推定する必要があります。 たとえば、オーディオ デバイスが再生ストリームを内部バッファーにプリフェッチする場合、ドライバーは、再生位置を適切に推定するためにバッファー サイズとタイミング情報の両方を考慮する必要があります。

WaveCyclic ポート ドライバーは、KSPROPERTY_AUDIO_POSITIONのプロパティ ハンドラーを実装します。 このプロパティ ハンドラーは、ミニポート ドライバーから現在の再生またはレコードの位置を取得する GetPosition メソッドを呼び出します。 詳細については、「Audio Position プロパティの」を参照してください。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー portcls.h (Portcls.h を含む)
IRQL <=DISPATCH_LEVEL

関連項目

IMiniportWaveCyclicStream

KSPROPERTY_AUDIO_POSITION

KSSTATE