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 |