EVT_ACX_STREAM_GET_PRESENTATION_POSITION コールバック関数 (acxstreams.h)

EvtAcxStreamGetPresentationPosition は、現在の位置が計算された時点の QPC 値と共に現在の位置を示すようにドライバーに指示します。

構文

EVT_ACX_STREAM_GET_PRESENTATION_POSITION EvtAcxStreamGetPresentationPosition;

NTSTATUS EvtAcxStreamGetPresentationPosition(
  ACXSTREAM Stream,
  PULONGLONG PositionInBlocks,
  PULONGLONG QPCPosition
)
{...}

パラメーター

Stream

ACXSTREAM オブジェクトは、回線によって作成されたオーディオ ストリームを表します。 ストリームは、親回線の要素に基づいて作成された要素の一覧で構成されます。 詳細については、「 ACX - ACX オブジェクトの概要」を参照してください。

PositionInBlocks

ストリームの先頭から現在のデコード後の非圧縮位置へのブロック オフセットを指定します。 "ブロック" は、同じサンプル内のチャネルのグループを指します。 そのため、たとえば PCM ストリームでは、ブロックはフレームと同じです。 ただし、圧縮形式の場合、ブロックはフレーム内の 1 つのサンプルです。 つまり、フレーム内に 1152 個のサンプルがある一般的な MP3 ストリームの場合、1152 ブロックが存在します。

QPCPosition

オーディオ ドライバーがKSAUDIO_PRESENTATION_POSITION呼び出しに応答してプレゼンテーションの位置を読み取る時点でのパフォーマンス カウンターの値を指定します。 ドライバーは、プレゼンテーション位置のスナップショットが取得されたときに、KeQueryPerformanceCounter の呼び出しから読み取られた値を使用して、このフィールドに書き込みます。

戻り値

STATUS_SUCCESS呼び出しが成功した場合は を返します。 それ以外の場合は、適切なエラー コードを返します。 詳細については、「 NTSTATUS 値の使用」を参照してください。

解説

使用例を次に示します。

    //
    // Init streaming callbacks.
    //
    ACX_RT_STREAM_CALLBACKS rtCallbacks;
    ACX_RT_STREAM_CALLBACKS_INIT(&rtCallbacks);

    rtCallbacks.EvtAcxStreamGetPresentationPosition = EvtStreamGetPresentationPosition;

    status = AcxStreamInitAssignAcxRtStreamCallbacks(StreamInit, &rtCallbacks);
PAGED_CODE_SEG
NTSTATUS
EvtStreamGetPresentationPosition(
    _In_ ACXSTREAM      Stream,
    _Out_ PULONGLONG    PositionInBlocks,
    _Out_ PULONGLONG    QPCPosition
)
{
    PSTREAM_CONTEXT ctx;
    ULONG               blockAlign;
    LARGE_INTEGER       qpc;

    PAGED_CODE();

    ctx = GetStreamContext(Stream);

    blockAlign = AcxDataFormatGetBlockAlign(ctx->StreamFormat);

    // Recalculate the stream position that is stored in ctx->StreamPosition
    UpdateStreamPosition(Stream);
    qpc = KeQueryPerformanceCounter(NULL);

    *PositionInBlocks = ctx->StreamPosition / blockAlign;
    *QPCPosition = qpc;

    return STATUS_SUCCESS;
}

ACX の要件

最小 ACX バージョン: 1.0

ACX バージョンの詳細については、「 ACX バージョンの概要」を参照してください。

要件

要件
Header acxstreams.h
IRQL PASSIVE_LEVEL

こちらもご覧ください