Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этом разделе рассматриваются каналы ACX. Общие сведения о acX и списке терминов ACX см. в обзоре расширений аудиоклассов ACX.
Как описано в сводке объектов ACX, объект AcxCircuit представляет собой частичный или полный звуковой тракт к аудиоустройству, воспринимаемому пользователем (динамики, микрофон и т. д.). AcxCircuit имеет по крайней мере один входной контакт и один выходной контакт (ACXPIN), и он может агрегировать один или несколько AcxElements, таких как объекты. Схема представляет существующую конечную точку и ее возможности.
И ACX Stream — это компонент драйвера, созданный для представления звукового потока, созданного схемой. Поток состоит из списка элементов, созданных на основе элементов родительской цепи. Stream Circuit — это цепь в многоуровневой архитектуре (которая частично охватывает звуковой путь), напрямую взаимодействующая со службой потоковой передачи в пользовательском режиме верхнего уровня. Основная схема — это схема в архитектуре с несколькими стеками (частичный аудиомаршрут), которая предоставляет идентификацию устройства конечной точки аудио.
Идентификация цепи ACX
Каждый канал ACX имеет идентификатор канала. ACX определяет следующее:
Имя (str) однозначно идентифицирует этот тип аудио устройства для схем. Он используется для поиска параметра INF и является частью символьной ссылки, используемой для доступа к этому каналу с удаленного устройства. Пример: Render0, Render1 или Capture0.
Символьная ссылка. Символьная ссылка связана со всеми предоставленными цепями. Клиенты используют эту символьную ссылку для открытия пути связи с устройством или каналом.
Идентификатор компонента канала (GUID). Уникально идентифицирует экземпляр схемы (специфический для поставщика). Его нельзя использовать в привязках AcxCircuitTemplate, если был указан URI канала.
URI компонента цепи (str). Уникально идентифицирует экземпляр схемы (для конкретного поставщика). Его нельзя использовать в привязках AcxCircuitTemplate, если был указан идентификатор канала.
Идентификатор компонента фабрики схем (GUID). Уникально идентифицирует экземпляр фабрики схем (зависящей от поставщика). Его нельзя использовать в привязках AcxCircuitTemplate, если был указан URI Circuit Factory.
URI компонента фабрики цепей (str). Уникально идентифицирует экземпляр фабрики схем (специфичный для поставщика). Его нельзя использовать в привязках AcxCircuitTemplate, если был указан идентификатор фабрики цепей.
AcxCircuitCreate
Функция AcxCircuitCreate используется для создания ACXCIRCUIT. Непрозрачная структура ACXCIRCUIT_INIT, используемая функцией AcxCircuitCreate. AcxCircuitInitAllocate используется для инициализации структуры ACXCIRCUIT_INIT.
AcxFactoryCircuit
Драйвер ACX также может создавать объекты AcxFactoryCircuit (поставщики каналов) во время последовательности питания, используя функцию AcxFactoryCircuitCreate и функцию AcxDeviceAddFactoryCircuit .
Композиция канала ACX
ACX связывает каналы вместе, пока они не образуют полный звуковой путь. ACX использует звуковые привязки для соединения звуковых каналов. Для получения дополнительной информации см. многоцепочечный состав ACX.
Динамическое создание схемы ACX (в любое время)
ACX может создавать динамический канал по запросу. Для этого драйвер выделяет структуру WDFDEVICE_INIT путем вызова WdfPdoInitAllocate. Затем драйвер указывает, какие именно обратные вызовы PnP/power он хочет получить, и создаёт устройство. Драйвер создает экземпляр нового устройства или цепи, вызвав AcxDeviceAddCircuitDevice. Дополнительные сведения см. в перечислении устройств ACX.
Динамическое удаление цепи ACX
Драйвер вызывает AcxDeviceRemoveCircuitDevice , чтобы удалить звуковое устройство из списка устройств. Это активирует последовательность выключения питания на устройстве или сущности схемы ACX. Устройство цепи или цепь удаляются асинхронно. Более подробную информацию см. в разделе перечисление устройств ACX.
AcxDeviceRemoveCircuit и AcxDeviceDetachCircuit
Существует два распространенных способа управления завершением цепи. AcxDeviceDetachCircuit или AcxDeviceRemoveCircuit.
Если вызывающий объект вызывает AcxDeviceDetachCircuit, то он не должен вызывать AcxDeviceRemoveCircuit. Если вызывающий драйвер хочет удалить канал после AcxDeviceDetachCircuit, он должен использовать WdfObjectDelete.
При вызове AcxDeviceRemoveCircuit вызывающий драйвер сообщает ACX удалить этот канал и удалить его с устройства. В этом случае нет необходимости вызывать WdfObjectDelete на цепи.
В итоге AcxDeviceDetachCircuit означает, что драйвер отвечает за управление временем жизни объектов цепи, AcxDeviceRemoveCircuit означает, что канал будет извлечен и удален.
Общие сведения об управлении жизненным циклом объектов WDF см. в разделе "Жизненный цикл объектов Framework".
AcxDeviceRemoveCircuitDevice
Отличается от завершения цепи, описанной выше, AcxDeviceRemoveCircuitDevice используется драйвером звука для удаления существующей конечной точки звука и может вызываться в любое время во время жизненного цикла драйвера.
Драйверы могут выбрать всегда уничтожать и заново создавать звуковые устройства при изменении балансировки. Это тот же сценарий выше, когда устройство обнаруживает, что новые параметры несовместимы со старыми.
Удаление схемы необходимо выполнить в обратных вызовах EvtDevicePrepareHardware/EvtDeviceReleaseHardware, а новая схема создается в EvtDevicePrepareHardware. Драйвер удаляет контур, отменив регистрацию контура (с помощью AcxDeviceRemoveCircuit).
Функция обратного вызова EvtAcxCircuitReleaseHardware (EVT_ACX_CIRCUIT_RELEASE_HARDWARE)
Если драйвер зарегистрировал функцию обратного вызова EvtAcxCircuitReleaseHardware , платформа вызывает ее во время следующих переходов:
- Перебалансирование ресурсов
- Упорядочение удаления
- Удаление сюрпризов
Платформа ACX вызывает функцию обратного вызова EvtAcxCircuitReleaseHardware после остановки отправки запросов ввода-вывода на устройство, все прерывания, назначенные устройству, отключены и отключены, а устройство отключено.
Платформа ACX вызывает функцию обратного вызова EvtAcxCircuitReleaseHardware, прежде чем платформа WDF вызывает функцию обратного вызова EvtDeviceReleaseHardware драйвера.
Когда платформа вызывает EvtAcxCircuitReleaseHardware PDO для устройства по-прежнему существует и может запрашиваться сведения об устройстве, доступные в состоянии выключенного питания, например состояние конфигурации PCI.
Кроме того, преобразованные аппаратные ресурсы, предоставляемые платформой evtDeviceReleaseHardware, по-прежнему назначаются устройству. Основная цель этой функции обратного вызова — освободить эти ресурсы и, в частности, отменить сопоставление ресурсов памяти, сопоставленных функцией обратного вызова EvtAcxCircuitPrepareHardware. Драйвер также может использовать этот обратный вызов для выполнения любых других действий управления ACXCIRCUIT, которые могут потребоваться в состоянии выключенного питания. Обычно все остальные операции завершения работы оборудования должны выполняться в функции обратного вызова EvtDeviceD0Exit драйвера.
Платформа ACX всегда вызывает функцию обратного вызова EvtAcxCircuitReleaseHardware, если функция обратного вызова EvtAcxCircuitPrepareHardware была вызвана, если не был возвращен код сбоя EvtAcxCircuitPrepareHardware.
Дополнительные сведения об аппаратных ресурсах см. в статье Введение в аппаратные ресурсы.
Функция обратного вызова EvtAcxFactoryCircuitReleaseHardware (EVT_ACX_FACTORY_CIRCUIT_RELEASE_HARDWARE)
Когда платформа вызывает EvtAcxFactoryCircuitReleaseHardware, PDO для устройства по-прежнему существует, и можно запрашивать сведения об устройстве, доступные в состоянии выключенного питания, например, состояние конфигурации PCI.
Кроме того, преобразованные аппаратные ресурсы, предоставляемые платформой evtDeviceReleaseHardware, по-прежнему назначаются устройству. Основная цель этой функции обратного вызова — освободить эти ресурсы и, в частности, отменить сопоставление ресурсов памяти, сопоставленных функцией обратного вызова EvtAcxCircuitPrepareHardware. Драйвер также может использовать этот обратный вызов для выполнения любых других действий управления ACXCIRCUIT, которые могут потребоваться в состоянии выключенного питания. Обычно все остальные операции завершения работы оборудования должны выполняться в функции обратного вызова EvtDeviceD0Exit драйвера.
Платформа ACX всегда вызывает функцию обратного вызова EvtAcxFactoryCircuitReleaseHardware, если функция обратного вызова EvtAcxFactoryCircuitPrepareHardware была вызвана, если не был вызван код сбоя EvtAcxFactoryCircuitPrepareHardware.
Дополнительные сведения об управлении объектами WDF и контурами см. в статье ACX WDF Driver Lifetime Management.
См. также
Общие сведения о расширениях аудиоклассов ACX
Междрайверная коммуникация в мультистековой архитектуре ACX