Compartir a través de


Circuitos ACX

En este tema se describen los circuitos ACX. Para obtener información general sobre ACX y la lista de términos de ACX, consulte Introducción a las extensiones de clase de audio de ACX.

Como se describe en Resumen de objetos ACX, un objeto AcxCircuit representa una ruta de acceso de audio parcial o completa a un dispositivo de audio percibido por el usuario (altavoces, micrófono, etc.). Un AcxCircuit tiene al menos un pin de entrada y un pin de salida (ACXPIN), y puede agregar uno o varios AcxElements como objetos. El circuito representa un punto de conexión existente y sus funcionalidades.

Y ACX Stream es un componente de controlador que se crea para representar una secuencia de audio, creada por un circuito. El objeto Stream se compone de una lista de elementos creados en función de los elementos del circuito primario. Un Stream Circuit es un circuito en una arquitectura multicapas (trayectoria parcial de audio) que se conecta directamente con un servicio de transmisión en modo de usuario avanzado. Un circuito principal es un circuito en una arquitectura de pila múltiple (camino de audio parcial) que proporciona la identidad del dispositivo de extremo de audio.

Identificación del circuito ACX

Cada circuito ACX tiene un identificador de circuito. ACX define lo siguiente:

  • Nombre (str), identifica de forma única este tipo de dispositivo de audio del circuito. Se usa para localizar la configuración de INF y forma parte del vínculo simbólico que se usa para acceder a este circuito desde un dispositivo remoto. Ejemplo: "Render0", "Render1" o "Capture0".

  • Vínculo simbólico. Un vínculo simbólico está asociado a todos los circuitos expuestos. Los clientes usan este vínculo simbólico para abrir una ruta de comunicación con el dispositivo o circuito.

  • ID de componente del circuito (guid). Identifica de forma única la instancia del circuito (específica del proveedor). No se puede usar en los enlaces de AcxCircuitTemplate si se especificó el URI del circuito.

  • URI de componente (str) del circuito. Identifica de forma única la instancia del circuito (específica del proveedor). No se puede usar en los enlaces AcxCircuitTemplate si se especificó el identificador del circuito.

  • Identificador de componente (guid) de Circuit Factory. Identifica de forma única la instancia del generador de circuitos (específica del proveedor). No se puede usar en las vinculaciones de AcxCircuitTemplate si se especificó el URI de Fábrica de Circuitos.

  • URI de componente (str) de Circuit Factory. Identifica de forma única la instancia del generador de circuitos (específica del proveedor). No se puede usar en las vinculaciones de AcxCircuitTemplate si se especificó el Circuit Factory ID.

AcxCircuitCreate

La función AcxCircuitCreate se usa para crear un ACXCIRCUIT. Estructura ACXCIRCUIT_INIT opaca que es utilizada por la función AcxCircuitCreate. AcxCircuitInitAllocate se usa para inicializar la estructura de ACXCIRCUIT_INIT.

AcxFactoryCircuit

Un controlador ACX también puede crear objetos AcxFactoryCircuit (proveedores de circuitos) durante la secuencia de encendido mediante la función AcxFactoryCircuitCreate y la función AcxDeviceAddFactoryCircuit.

Composición del circuito ACX

ACX enlaza los circuitos hasta que forman un camino de audio completo. ACX usa enlaces de audio para conectar circuitos de audio juntos. Para obtener más información, consulte Composición multicircuito de ACX.

Creación dinámica del circuito ACX (en cualquier momento)

ACX puede crear un circuito dinámico a petición. Para ello, el controlador asigna una estructura de WDFDEVICE_INIT llamando a WdfPdoInitAllocate. A continuación, el controlador especifica las devoluciones de llamada PnP/power que quiere recibir y crea el dispositivo. El controlador crea una instancia del nuevo dispositivo o circuito llamando a AcxDeviceAddCircuitDevice. Para obtener más información, consulte Enumeración de dispositivos ACX.

Eliminación dinámica del circuito ACX

El controlador invoca AcxDeviceRemoveCircuitDevice para quitar el dispositivo de audio de la lista de dispositivos. Esto desencadena la secuencia de apagado en la entidad del dispositivo/circuito ACX. El dispositivo o circuito del circuito se elimina de forma asincrónica. Para obtener más información, consulte Enumeración de dispositivos ACX.

AcxDeviceRemoveCircuit y AcxDeviceDetachCircuit

Hay dos maneras comunes de administrar la terminación del circuito. AcxDeviceDetachCircuit o AcxDeviceRemoveCircuit.

Si el autor de la llamada invoca acxDeviceDetachCircuit , no debe llamar a AcxDeviceRemoveCircuit. Si el controlador de llamada desea eliminar el circuito después de AcxDeviceDetachCircuit, debe usar WdfObjectDelete.

Al llamar a AcxDeviceRemoveCircuit , el controlador de llamada indica a ACX que quite este circuito y elimínelo del dispositivo. En este caso no es necesario llamar a WdfObjectDelete en el circuito.

En resumen, AcxDeviceDetachCircuit significa que el controlador gestiona el ciclo de vida de los objetos del circuito, AcxDeviceRemoveCircuit significa que el circuito se quitará y eliminará.

Para obtener información general sobre la administración de la duración de objetos de WDF, vea Ciclo de vida de objetos de marco.

AcxDeviceRemoveCircuitDevice

A diferencia de la terminación del circuito descrita anteriormente, el controlador de audio usa AcxDeviceRemoveCircuitDevice para quitar un punto de conexión de audio existente y se puede llamar en cualquier momento durante el ciclo de vida del controlador.

Los controladores también pueden optar por destruir y volver a crear dispositivos de audio al reequilibrar. Este es el mismo escenario anterior cuando el dispositivo detecta que la nueva configuración no es compatible con las anteriores.

La eliminación del circuito debe realizarse en las devoluciones de llamada EvtDevicePrepareHardware/EvtDeviceReleaseHardware y el nuevo circuito se vuelve a crear en EvtDevicePrepareHardware. El controlador elimina un circuito anulando el registro del circuito (mediante AcxDeviceRemoveCircuit).

Función de devolución de llamada EvtAcxCircuitReleaseHardware (EVT_ACX_CIRCUIT_RELEASE_HARDWARE)

Si un controlador ha registrado una función de devolución de llamada EvtAcxCircuitReleaseHardware, el framework llama a esta función durante las transiciones siguientes:

  • Reequilibrio de recursos
  • Eliminación ordenada
  • Eliminación de sorpresas

El marco de ACX llama a la función de devolución de llamada EvtAcxCircuitReleaseHardware después de que el marco de WDF haya dejado de enviar solicitudes de E/S al dispositivo, las interrupciones asignadas al dispositivo se han deshabilitado y desconectado, y el dispositivo se ha desactivado.

El marco de ACX llama a la función de devolución de llamada EvtAcxCircuitReleaseHardware antes de que el marco WDF llame a la función de devolución de llamada EvtDeviceReleaseHardware del controlador.

Cuando el marco llama a EvtAcxCircuitReleaseHardware, el PDO para el dispositivo sigue existiendo y se puede consultar para obtener información del dispositivo que está disponible en el estado de apagado, por ejemplo, estado de configuración PCI.

Además, los recursos de hardware traducidos que el marco proporciona a EvtDeviceReleaseHardware se siguen asignando al dispositivo. El propósito principal de esta función de devolución de llamada es liberar esos recursos y, en particular, desasignar los recursos de memoria asignados a la función de devolución de llamada EvtAcxCircuitPrepareHardware del controlador. El controlador también puede usar esta devolución de llamada para realizar cualquier otra actividad de administración de ACXCIRCUIT que pueda ser necesaria en el estado de apagado. Normalmente, todas las demás operaciones de apagado de hardware deben realizarse en la función de devolución de llamada EvtDeviceD0Exit del controlador.

El marco ACX siempre llama a la función de devolución de llamada EvtAcxCircuitReleaseHardware del controlador si se ha llamado a la función de devolución de llamada EvtAcxCircuitPrepareHardware del controlador, a menos que evtAcxCircuitPrepareHardware devuelva un código de error.

Para obtener más información sobre los recursos de hardware, consulte Introducción a los recursos de hardware.

Función de devolución de llamada EvtAcxFactoryCircuitReleaseHardware (EVT_ACX_FACTORY_CIRCUIT_RELEASE_HARDWARE)

Cuando el marco de trabajo llama al EvtAcxFactoryCircuitReleaseHardware, el PDO para el dispositivo sigue existiendo y se puede consultar para obtener información del dispositivo que está disponible cuando el dispositivo está apagado, por ejemplo, el estado de configuración PCI.

Además, los recursos de hardware traducidos que el marco proporciona a EvtDeviceReleaseHardware se siguen asignando al dispositivo. El propósito principal de esta función de devolución de llamada es liberar esos recursos y, en particular, desasignar los recursos de memoria asignados a la función de devolución de llamada EvtAcxCircuitPrepareHardware del controlador. El controlador también puede usar esta devolución de llamada para realizar cualquier otra actividad de administración de ACXCIRCUIT que pueda ser necesaria en el estado de apagado. Normalmente, todas las demás operaciones de apagado de hardware deben realizarse en la función de devolución de llamada EvtDeviceD0Exit del controlador.

El marco de ACX siempre llama a la función de devolución de llamada EvtAcxFactoryCircuitReleaseHardware del controlador si se ha llamado a la función de devolución de llamada EvtAcxFactoryCircuitPrepareHardware del controlador, a menos que se haya llamado a la función de devolución de llamada EvtAcxFactoryCircuitPrepareHardware.

Para obtener más información sobre cómo administrar objetos WDF y circuit, vea AcX WDF Driver Lifetime Management.

Consulte también

Información general sobre las extensiones de clase de audio de ACX

Comunicaciones entre controladores de varias pilas de ACX

Gestión del ciclo de vida del controlador WDF de ACX

Resumen de objetos ACX