Compartilhar via


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

O evento EvtAcxStreamReleaseHardware instrui o driver a liberar qualquer hardware alocado para o fluxo e colocar o fluxo no estado Parar.

Sintaxe

EVT_ACX_STREAM_RELEASE_HARDWARE EvtAcxStreamReleaseHardware;

NTSTATUS EvtAcxStreamReleaseHardware(
  ACXSTREAM Stream
)
{...}

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.

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

Um AcxStream dá suporte a estados diferentes. Esses estados indicam quando o áudio está fluindo (estado RUN), o áudio não está fluindo, mas o hardware de áudio está preparado (estado PAUSE) ou o áudio não está fluindo e o hardware de áudio não está preparado (estado STOP).

O evento EvtAcxStreamReleaseHardware fará a transição do estado do fluxo do estado Pausar para o estado Parar. O driver deve liberar todos os recursos de hardware que foram alocados para streaming nesse evento, como mecanismos de DMA. Depois que o fluxo estiver no estado Stop, o driver poderá receber o evento EvtAcxStreamPrepareHardware para fazer a transição para o estado Pause ou o objeto ACXSTREAM poderá ser destruído.

Os Eventos ACX são análogos aos estados KS, conforme descrito nesta tabela.

Estado de Início Estado final Evento de driver ACX chamado Observações
STOP ADQUIRIR PrepareHardware O driver executa alocações e preparações de hardware
ADQUIRIR PAUSE (Sem chamada)
PAUSE EXECUTAR Executar
EXECUTAR PAUSE Pausar
PAUSE ADQUIRIR (Sem chamada)
ADQUIRIR STOP ReleaseHardware O driver libera alocações de hardware

Quando o trabalho com o fluxo é concluído, EvtAcxStreamFreeRtPackets é chamado após EvtAcxStreamReleaseHardware. Isso permite que a fase de hardware de lançamento conclua a desalocação da largura de banda, liberando recursos de DMA e qualquer outra limpeza associada, para ocorrer antes que os buffers RT alocados sejam liberados.

Limpeza de Memória

O descarte dos recursos do fluxo pode ser feito na limpeza de contexto de fluxo do driver (não destruir). Nunca coloque o descarte de nada que seja compartilhado no contexto de um objeto destruir o retorno de chamada. Estas diretrizes se aplicam a todos os objetos ACX.

O retorno de chamada de destruição é invocado depois que o último ref se foi, quando é desconhecido.

O retorno de chamada de limpeza do fluxo é chamado quando o identificador é fechado. Uma exceção a isso é quando o driver criou o fluxo em seu retorno de chamada. Se o ACX não tiver adicionado esse fluxo à ponte de fluxo pouco antes de retornar da operação de criação de fluxo, o fluxo será cancelado como assíncrono e o thread atual retornará um erro para o cliente create-stream. O fluxo não deve ter nenhuma alocação de mem alocada neste momento.

Exemplo

O uso de exemplo é mostrado abaixo.

    ACX_STREAM_CALLBACKS streamCallbacks;
    ACX_STREAM_CALLBACKS_INIT(&streamCallbacks);
    streamCallbacks.EvtAcxStreamReleaseHardware = EvtStreamReleaseHardware;
    ...
    status = AcxStreamInitAssignAcxStreamCallbacks(StreamInit, &streamCallbacks);
PAGED_CODE_SEG
NTSTATUS
EvtStreamReleaseHardware(
    _In_ ACXSTREAM Stream
    )
{
    PSTREAM_CONTEXT ctx;
    NTSTATUS        status;

    PAGED_CODE();

    ctx = GetStreamContext(Stream);

    status = ReleaseStreamHardware(Stream);

    ctx->StreamState = AcxStreamStateStop;

    return status;
}

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