Compartilhar via


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

Confira também