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 de 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 dos objetos ACX.

PositionInBlocks

Especifica o deslocamento de bloco do início do fluxo para a posição atual pós-decodificada e descompactada 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 é um único exemplo 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 da chamada KeQueryPerformanceCounter quando um instantâneo é tirado da posição da apresentação.

Valor de retorno

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.

Observações

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

Consulte também