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 |