Compartilhar via


EVT_ACX_STREAM_GET_CAPTURE_PACKET função de retorno de chamada (acxstreams.h)

EvtAcxStreamGetCapturePacket informa ao driver para indicar qual pacote (baseado em 0) foi completamente preenchido mais recentemente, incluindo o valor de QPC no momento em que o driver começou a preencher o pacote.

Sintaxe

EVT_ACX_STREAM_GET_CAPTURE_PACKET EvtAcxStreamGetCapturePacket;

NTSTATUS EvtAcxStreamGetCapturePacket(
  ACXSTREAM Stream,
  PULONG LastCapturePacket,
  PULONGLONG QPCPacketStart,
  PBOOLEAN MoreData
)
{...}

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.

LastCapturePacket

Um valor que indica a posição do último pacote capturado. Este é um índice baseado em 0 que indica quantos pacotes completos de dados foram capturados.

QPCPacketStart

Um valor que indica a hora de início do último pacote capturado.

MoreData

Retornará TRUE se houver mais dados prontos imediatamente. Opcionalmente, o sistema operacional pode chamar essa rotina imediatamente novamente depois de processar o pacote para obter as próximas informações do pacote. Se o driver retornar FALSE, a captura estará operando em tempo real.

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

Antes de ler dados de áudio capturados do buffer de áudio, o sistema operacional chama essa rotina para obter informações sobre os dados disponíveis.

O número do pacote identifica um pacote dentro do fluxo. Isso é redefinido para zero quando EVT_ACX_STREAM_RELEASEHARDWARE foi chamado para o fluxo. O número avança com cada buffer capturado. No número do pacote, o sistema operacional pode derivar o local do pacote dentro do buffer de áudio e também pode derivar a posição do fluxo do pacote em relação ao início do fluxo.

O sistema operacional pode chamar essa rotina a qualquer momento. Na operação normal, o sistema operacional chama essa rotina depois que o driver chama AcxRtStreamNotifyPacketComplete ou depois que uma chamada anterior retorna true para MoreData. Quando o sistema operacional chama essa rotina, o driver pode assumir que o sistema operacional terminou de ler todos os pacotes anteriores. Se o hardware tiver capturado dados suficientes, o driver poderá imediatamente estourar o próximo pacote completo para o buffer de áudio e chamar AcxRtStreamNotifyPacketComplete novamente. No caso de estouro de captura (quando o sistema operacional não lê dados rapidamente o suficiente), o driver de áudio pode remover ou substituir alguns dados de áudio. O driver de áudio descarta ou substitui os dados mais antigos primeiro. O driver de áudio pode continuar avançando seu contador de pacotes interno, embora o sistema operacional possa não ter lido os dados.

Exemplo

O uso de exemplo é mostrado abaixo.

#pragma code_seg("PAGE")
NTSTATUS
CodecC_EvtStreamGetCapturePacket(
    _In_ ACXSTREAM          Stream,
    _Out_ ULONG           * LastCapturePacket,
    _Out_ ULONGLONG       * QPCPacketStart,
    _Out_ BOOLEAN         * MoreData
)
{
    PCODEC_STREAM_CONTEXT ctx;
    CCaptureStreamEngine* streamEngine = nullptr;
    ULONG currentPacket;
    LONGLONG qpcPacketStart;

    PAGED_CODE();

    ctx = GetCodecStreamContext(Stream);
    // Retrieve the current packet that is being written to by the audio hardware
    currentPacket = (ULONG)InterlockedCompareExchange((LONG*)&ctx->CurrentPacket, -1, -1);
    qpcPacketStart = InterlockedCompareExchange64(&ctx->LastPacketStart.QuadPart, -1, -1);

    // The Last capture packet is the packet before the current packet.
    *LastCapturePacket = currentPacket - 1;
    *QPCPacketStart = (ULONGLONG)qpcPacketStart;
    *MoreData = FALSE;

    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