Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico discute circuitos ACX. Para obter uma visão geral do ACX e da lista de termos ACX, consulte a visão geral das extensões de classe de áudio ACX.
Conforme descrito em Resumo de objetos ACX, um objeto AcxCircuit representa um caminho de áudio parcial ou completo para um dispositivo de áudio percebido pelo usuário (alto-falantes, microfone etc.). Um AcxCircuit tem pelo menos um pino de entrada e um pino de saída (ACXPIN) e pode agregar um ou mais AcxElements como objetos. O circuito representa um ponto de extremidade existente e suas funcionalidades.
E o ACX Stream é um componente de driver criado para representar um fluxo de áudio, criado por um Circuito. O Fluxo é composto por uma lista de elementos criados com base nos elementos do circuito pai. Um Circuito de Fluxo é um circuito em uma arquitetura de múltiplas pilhas (caminho de áudio parcial) que interage diretamente com o serviço de streaming em modo de usuário mais elevado. Um Circuito Principal é um circuito em uma arquitetura de várias pilhas (caminho de áudio parcial) que fornece a identidade do dispositivo de ponto de extremidade de áudio.
Identificação do circuito ACX
Cada circuito ACX tem um identificador de circuito. O ACX define o seguinte:
Nome (str), identifica exclusivamente esse tipo de dispositivo de áudio de circuito. Ele é usado para localizar a configuração do INF e faz parte do link simbólico usado para acessar esse circuito de um dispositivo remoto. Exemplo: "Render0", "Render1" ou "Capture0".
Link simbólico. Um link simbólico é associado a todos os circuitos expostos. Os clientes usam esse link simbólico para abrir um caminho de comunicação com o dispositivo/circuito.
ID do componente do circuito (guid). Identifica exclusivamente a instância de circuito (específica do fornecedor). Ele não poderá ser usado nas associações AcxCircuitTemplate se o URI do Circuito tiver sido especificado.
URI do componente do circuito (str). Identifica exclusivamente a instância de circuito (específica do fornecedor). Ele não pode ser usado nas associações AcxCircuitTemplate se a ID do circuito tiver sido especificada.
ID do componente do Circuit Factory (guid). Identifica exclusivamente a instância de fábrica do circuito (específica do fornecedor). Ele não poderá ser usado nas associações AcxCircuitTemplate se o URI da Fábrica de Circuitos tiver sido especificado.
URI do componente do Circuit Factory (str). Identifica exclusivamente a instância de fábrica do circuito (específica do fornecedor). Ele não poderá ser usado nas associações AcxCircuitTemplate se a ID da Fábrica de Circuitos tiver sido especificada.
AcxCircuitCreate
A função AcxCircuitCreate é usada para criar um ACXCIRCUIT. Uma estrutura de ACXCIRCUIT_INIT opaca usada pela função AcxCircuitCreate. AcxCircuitInitAllocate é usado para inicializar a estrutura de ACXCIRCUIT_INIT.
AcxFactoryCircuit
Um driver do ACX também pode criar objetos AcxFactoryCircuit (provedores de circuito) durante a sequência de inicialização usando a função AcxFactoryCircuitCreate e a função AcxDeviceAddFactoryCircuit.
Composição do circuito ACX
O ACX associa circuitos até que eles formem um caminho de áudio completo. O ACX usa associações de áudio para conectar circuitos de áudio juntos. Para obter mais informações, consulte composição multicircuit ACX.
Criação dinâmica do circuito ACX (a qualquer momento)
O ACX pode criar um circuito dinâmico sob demanda. Para fazer isso, o driver aloca uma estrutura de WDFDEVICE_INIT chamando WdfPdoInitAllocate. Em seguida, o driver especifica quais callbacks de PnP/energia deseja receber e cria o dispositivo. O driver instancia o novo dispositivo/circuito chamando AcxDeviceAddCircuitDevice. Para obter mais informações, consulte a enumeração de dispositivo ACX.
Remoção dinâmica do circuito ACX
O driver invoca AcxDeviceRemoveCircuitDevice para remover o dispositivo de áudio da lista de dispositivos. Isso dispara a sequência de desligamento na entidade de circuito/circuito ACX. O circuito/dispositivo é excluído de forma assíncrona. Para obter mais informações, consulte a enumeração de dispositivo ACX.
AcxDeviceRemoveCircuit e AcxDeviceDetachCircuit
Há duas maneiras comuns de gerenciar o encerramento do circuito. AcxDeviceDetachCircuit ou AcxDeviceRemoveCircuit.
Se o chamador invocar o AcxDeviceDetachCircuit , ele não deverá chamar AcxDeviceRemoveCircuit. Se o driver de chamada quiser excluir o circuito após AcxDeviceDetachCircuit, ele deverá usar WdfObjectDelete.
Ao chamar AcxDeviceRemoveCircuit, o driver chamador instrui o ACX a remover o circuito e excluí-lo do dispositivo. Nesse caso, não é necessário chamar WdfObjectDelete no circuito.
Em resumo, AcxDeviceDetachCircuit significa que o driver possui o gerenciamento do tempo de vida dos objetos do circuito, AcxDeviceRemoveCircuit significa que o circuito será removido e excluído.
Para obter informações gerais sobre o gerenciamento do ciclo de vida do objeto WDF, consulte o ciclo de vida do objeto framework.
AcxDeviceRemoveCircuitDevice
Diferentemente do encerramento do circuito discutido acima, AcxDeviceRemoveCircuitDevice é usado pelo driver de áudio para remover um ponto de extremidade de áudio existente e pode ser chamado a qualquer momento durante o ciclo de vida do driver.
Os drivers também podem optar por sempre destruir e recriar dispositivos de áudio na redistribuição. Esse é o mesmo cenário acima quando o dispositivo detecta que as novas configurações não são compatíveis com as antigas.
A exclusão do circuito deve ser feita em retornos de chamada EvtDevicePrepareHardware/EvtDeviceReleaseHardware, e o novo circuito é recriado em EvtDevicePrepareHardware. O driver exclui um circuito cancelando o registro do circuito (usando AcxDeviceRemoveCircuit).
Função de retorno de chamada EvtAcxCircuitReleaseHardware (EVT_ACX_CIRCUIT_RELEASE_HARDWARE)
Se um driver tiver registrado uma função de retorno de chamada EvtAcxCircuitReleaseHardware, o framework a chamará durante as seguintes transições:
- Rebalanceamento de recursos
- Remoção ordenada
- Remoção surpresa
A estrutura ACX chama a função de retorno de chamada EvtAcxCircuitReleaseHardware depois que a estrutura do WDF parou de enviar solicitações de E/S para o dispositivo, todas as interrupções atribuídas ao dispositivo foram desabilitadas e desconectadas e o dispositivo foi desativado.
A estrutura ACX chama a função de retorno de chamada EvtAcxCircuitReleaseHardware antes que a estrutura do WDF chame a função de retorno de chamada EvtDeviceReleaseHardware do driver.
Quando a estrutura chama o EvtAcxCircuitReleaseHardware, o PDO para o dispositivo ainda existe e pode ser consultado para obter informações do dispositivo que estão disponíveis no estado desligado, por exemplo, o estado de configuração de PCI.
Além disso, os recursos de hardware traduzidos fornecidos pela estrutura para EvtDeviceReleaseHardware ainda são atribuídos ao dispositivo. A principal finalidade dessa função de retorno de chamada é liberar esses recursos e, em particular, cancelar o mapeamento de todos os recursos de memória mapeados pela função de retorno de chamada EvtAcxCircuitPrepareHardware do driver. O driver também pode usar esse retorno de chamada para executar qualquer outra atividade de gerenciamento ACXCIRCUIT que possa ser necessária no estado de desligamento. Normalmente, todas as outras operações de desligamento de hardware devem ocorrer na função de retorno de chamada EvtDeviceD0Exit do driver.
A estrutura ACX sempre chama a função de retorno de chamada EvtAcxCircuitReleaseHardware do driver se a função de retorno de chamada EvtAcxCircuitPrepareHardware do driver tiver sido chamada, a menos que o EvtAcxCircuitPrepareHardware tenha retornado um código de falha.
Para obter mais informações sobre recursos de hardware, consulte Introdução aos recursos de hardware.
Função de callback de EvtAcxFactoryCircuitReleaseHardware (EVT_ACX_FACTORY_CIRCUIT_RELEASE_HARDWARE)
Quando o framework chama o EvtAcxFactoryCircuitReleaseHardware, o PDO para o dispositivo ainda existe e pode ser consultado para obter informações do dispositivo que estão disponíveis no estado de desligamento, por exemplo, o estado de configuração de PCI.
Além disso, os recursos de hardware traduzidos fornecidos pela estrutura para EvtDeviceReleaseHardware ainda são atribuídos ao dispositivo. A principal finalidade dessa função de retorno de chamada é liberar esses recursos e, em particular, cancelar o mapeamento de todos os recursos de memória mapeados pela função de retorno de chamada EvtAcxCircuitPrepareHardware do driver. O driver também pode usar esse retorno de chamada para executar qualquer outra atividade de gerenciamento ACXCIRCUIT que possa ser necessária no estado de desligamento. Normalmente, todas as outras operações de desligamento de hardware devem ocorrer na função de retorno de chamada EvtDeviceD0Exit do driver.
A estrutura ACX sempre chama a função de retorno de chamada EvtAcxFactoryCircuitReleaseHardware do driver se a função de retorno de chamada EvtAcxFactoryCircuitPrepareHardware do driver tiver sido chamada, a menos que o EvtAcxFactoryCircuitPrepareHardware tenha retornado um código de falha.
Para obter mais informações sobre como gerenciar objetos WDF e de circuito, consulte o Gerenciamento de Tempo de Vida do Driver WDF do ACX.
Consulte também
Visão geral de extensões de classe de áudio ACX
Comunicações entre driver de várias pilhas do ACX