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 版本概述

要求

要求 价值
标头 acxstreams.h
IRQL PASSIVE_LEVEL

另请参阅