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 流中,块与帧相同。 但是,对于压缩格式,块是帧中的单个示例。 这意味着,对于帧中包含 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

另请参阅