次の方法で共有


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

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

構文

NTSTATUS GetPosition(
  [out] PULONGLONG Position
);

パラメーター

[out] Position

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

戻り値

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

注釈

メソッドによって GetPosition 示される位置は、ストリームの先頭からのバイト オフセットとして表されます。 DAC または ADC 内の現在のデータのバイト位置のミニポート ドライバーの最適な推定値を表します。 ミニポート オブジェクトは、取得したマッピングに基づいてストリームの位置を維持するために必要です。マッピングが解放されるか取り消されるかに関係ありません。

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

によって報告される GetPosition 位置は、ドライバーが割り当てた物理バッファーまたはクライアントが割り当てた 1 つの物理バッファーへのオフセットではありません。 代わりに、オフセットはストリーム相対であり、ストリーム全体を含み、最初から最後まで連続する理想的なバッファーへのオフセットと考えることができます。 データを含む実際の物理バッファーを指す内部オフセットは、個別に維持する必要があります。

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

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

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

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

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

要件

要件
対象プラットフォーム ユニバーサル
Header portcls.h (Portcls.h を含む)
IRQL PASSIVE_LEVEL

こちらもご覧ください

IMiniportWavePciStream

KSPROPERTY_AUDIO_POSITION

KSSTATE