EVT_ACX_STREAM_GET_PRESENTATION_POSITION função de retorno de chamada (acxstreams.h)
EvtAcxStreamGetPresentationPosition informa ao driver para indicar a posição atual junto com o valor QPC no momento em que a posição atual foi calculada.
Sintaxe
EVT_ACX_STREAM_GET_PRESENTATION_POSITION EvtAcxStreamGetPresentationPosition;
NTSTATUS EvtAcxStreamGetPresentationPosition(
ACXSTREAM Stream,
PULONGLONG PositionInBlocks,
PULONGLONG QPCPosition
)
{...}
Parâmetros
Stream
Um objeto ACXSTREAM representa um fluxo de áudio criado por um circuito. O fluxo é composto por uma lista de elementos criados com base nos elementos do circuito pai. Para obter mais informações, consulte ACX – Resumo de objetos ACX.
PositionInBlocks
Especifica o deslocamento de bloco do início do fluxo para a posição pós-decodificada e descompactada atual no fluxo. Um "bloco" refere-se ao grupo de canais no mesmo exemplo. Portanto, por exemplo, em um fluxo de PCM, um bloco é o mesmo que um quadro. No entanto, para formatos compactados, um bloco é uma única amostra dentro de um quadro. Isso significa que, para um fluxo MP3 típico que tem 1152 amostras em um quadro, há 1152 blocos.
QPCPosition
Especifica o valor do contador de desempenho no momento em que o driver de áudio lê a posição da apresentação em resposta à chamada KSAUDIO_PRESENTATION_POSITION. Um driver grava nesse campo com o valor lido chamando KeQueryPerformanceCounter quando um instantâneo é obtido da posição da apresentação.
Retornar valor
Retorna STATUS_SUCCESS
se a chamada foi bem-sucedida. Caso contrário, ele retornará um código de erro apropriado. Para obter mais informações, consulte Usando valores NTSTATUS.
Comentários
Exemplo
O uso de exemplo é mostrado abaixo.
//
// 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;
}
Requisitos do ACX
Versão mínima do ACX: 1.0
Para obter mais informações sobre versões do ACX, consulte Visão geral da versão do ACX.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | acxstreams.h |
IRQL | PASSIVE_LEVEL |