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 |