다음을 통해 공유


ACX 회로

이 항목에서는 ACX 회로에 대해 설명합니다. ACX에 대한 일반적인 개요 및 ACX 용어 목록은 ACX 오디오 클래스 확장 개요를 참조하세요.

ACX 개체 요약에 설명된 대로 AcxCircuit 개체는 사용자가 인식한 오디오 디바이스(스피커, 마이크 등)에 대한 부분 또는 전체 오디오 경로를 나타냅니다. AcxCircuit에는 하나 이상의 입력 핀과 하나의 출력 핀(ACXPIN)이 있으며 개체와 같은 하나 이상의 AcxElement를 집계할 수 있습니다. 회로는 기존 엔드포인트 및 해당 기능을 나타냅니다.

ACX Stream 은 회로에서 만든 오디오 스트림을 나타내기 위해 만든 드라이버 구성 요소입니다. 스트림은 부모 회로의 요소를 기반으로 만든 요소 목록으로 구성됩니다. Stream 회로는 상위 사용자 모드 스트리밍 서비스와 직접 인터페이스하는 다중 스택 아키텍처(부분 오디오 경로)의 회로입니다. 코어 회로는 오디오 엔드포인트 디바이스의 ID를 제공하는 다중 스택 아키텍처(부분 오디오 경로)의 회로입니다.

ACX 회로 식별

모든 ACX 회로에는 회로 식별자가 있습니다. ACX는 다음을 정의합니다.

  • 이름(str)은 이 회로 오디오 디바이스 유형을 고유하게 식별합니다. INF의 설정을 찾는 데 사용되며 원격 디바이스에서 이 회로에 액세스하는 데 사용되는 기호 링크의 일부입니다. 예: "Render0", "Render1" 또는 "Capture0".

  • 바로 가기 링크입니다. 기호 링크는 노출된 모든 회로와 연결됩니다. 클라이언트는 이 기호 링크를 사용하여 디바이스/회로와의 통신 경로를 엽니다.

  • 회로의 구성 요소 ID(guid)입니다. 회로 인스턴스(공급업체별)를 고유하게 식별합니다. 회로 URI가 지정된 경우 AcxCircuitTemplate 바인딩에서 사용할 수 없습니다.

  • 회로의 구성 요소 URI(str)입니다. 회로 인스턴스(공급업체별)를 고유하게 식별합니다. 회로 ID가 지정된 경우 AcxCircuitTemplate 바인딩에서 사용할 수 없습니다.

  • 회로 팩터리의 구성 요소 ID(guid)입니다. 회로 팩터리 인스턴스(공급업체별)를 고유하게 식별합니다. 회로 팩터리 URI가 지정된 경우 AcxCircuitTemplate 바인딩에서 사용할 수 없습니다.

  • 회로 팩터리의 구성 요소 URI(str)입니다. 회로 팩터리 인스턴스(공급업체별)를 고유하게 식별합니다. 회로 팩터리 ID가 지정된 경우 AcxCircuitTemplate 바인딩에서 사용할 수 없습니다.

AcxCircuitCreate

AcxCircuitCreate 함수는 ACXCIRCUIT을 만드는 데 사용됩니다. AcxCircuitCreate 함수에서 사용하는 불투명 ACXCIRCUIT_INIT 구조체입니다. AcxCircuitInitAllocate 는 ACXCIRCUIT_INIT 구조를 초기화하는 데 사용됩니다.

AcxFactoryCircuit

ACX 드라이버는 AcxFactoryCircuitCreate 함수 및 AcxDeviceAddFactoryCircuit 함수를 사용하여 전원 켜기 시퀀스 중에 AcxFactoryCircuit 개체(회로 공급자)를 만들 수도 있습니다.

ACX 회로 컴퍼지션

ACX는 완전한 오디오 경로를 형성할 때까지 회로를 함께 바인딩합니다. ACX는 오디오 바인딩을 사용하여 오디오 회로를 함께 연결합니다. 자세한 내용은 ACX multicircuit 컴퍼지션을 참조하세요.

ACX 회로 동적 생성(언제든지)

ACX는 요청 시 동적 회로를 만들 수 있습니다. 이를 위해 드라이버는 WdfPdoInitAllocate를 호출하여 WDFDEVICE_INIT 구조를 할당합니다. 그런 다음 드라이버는 수신하려는 PnP/전원 콜백을 지정하고 디바이스를 만듭니다. 드라이버는 AcxDeviceAddCircuitDevice를 호출하여 새 디바이스/회로를 인스턴스화합니다. 자세한 내용은 ACX 디바이스 열거형을 참조 하세요.

ACX 회로 동적 제거

드라이버는 AcxDeviceRemoveCircuitDevice를 호출하여 디바이스 목록에서 오디오 디바이스를 제거합니다. 그러면 ACX 회로 디바이스/회로 엔터티에서 전원 다운 시퀀스가 트리거됩니다. 회로 디바이스/회로는 비동기적으로 삭제됩니다. 자세한 내용은 ACX 디바이스 열거형을 참조 하세요.

AcxDeviceRemoveCircuit 및 AcxDeviceDetachCircuit

회로 종료를 관리하는 두 가지 일반적인 방법이 있습니다. AcxDeviceDetachCircuit 또는 AcxDeviceRemoveCircuit.

호출자가 AcxDeviceDetachCircuit을 호출하는 경우 AcxDeviceRemoveCircuit을 호출하지 않아야 합니다. 호출 드라이버가 AcxDeviceDetachCircuit 이후 회로를 삭제하려는 경우 WdfObjectDelete를 사용해야 합니다.

AcxDeviceRemoveCircuit을 호출하면 호출 드라이버는 ACX에 이 회로를 제거하고 디바이스에서 제거/삭제하도록 지시합니다. 이 경우 회로에서 WdfObjectDelete를 호출할 필요가 없습니다.

요약하자면, AcxDeviceDetachCircuit 은 드라이버가 회로 개체 수명 관리를 소유하고 있음을 의미하며, AcxDeviceRemoveCircuit 은 회로가 제거되고 삭제됨을 의미합니다.

WDF 개체 수명 관리에 대한 일반적인 내용은 프레임워크 개체 수명 주기를 참조 하세요.

AcxDeviceRemoveCircuitDevice

위에서 설명한 회로 종료와 달리 AcxDeviceRemoveCircuitDevice 는 오디오 드라이버에서 기존 오디오 엔드포인트를 제거하는 데 사용되며 드라이버의 수명 주기 동안 언제든지 호출할 수 있습니다.

드라이버는 항상 리밸런스 시 오디오 장치를 파괴하고 다시 만들도록 선택할 수도 있습니다. 디바이스가 새 설정이 이전 설정과 호환되지 않는 것을 감지하는 경우 위의 시나리오와 동일합니다.

회로 삭제는 EvtDevicePrepareHardware/EvtDeviceReleaseHardware 콜백에서 수행해야 하며 새 회로는 EvtDevicePrepareHardware에서 다시 만들어집니다. 드라이버는 회로 등록을 취소하여 회로를 삭제합니다(AcxDeviceRemoveCircuit 사용).

EvtAcxCircuitReleaseHardware(EVT_ACX_CIRCUIT_RELEASE_HARDWARE) 콜백 함수

드라이버가 EvtAcxCircuitReleaseHardware 콜백 함수를 등록한 경우 프레임워크는 다음 전환 중에 호출합니다.

  • 리소스 리밸런싱
  • 순서대로 제거
  • 서프라이즈 제거

ACX 프레임워크는 WDF 프레임워크가 디바이스에 대한 I/O 요청 전송을 중지하고, 디바이스에 할당된 인터럽트가 비활성화되고 연결이 끊어졌으며, 디바이스가 꺼진 후 EvtAcxCircuitReleaseHardware 콜백 함수를 호출합니다.

ACX 프레임워크는 WDF 프레임워크가 드라이버의 EvtDeviceReleaseHardware 콜백 함수를 호출하기 전에 EvtAcxCircuitReleaseHardware 콜백 함수를 호출합니다.

프레임워크가 EvtAcxCircuitReleaseHardware를 호출할 때 디바이스에 대한 PDO는 여전히 존재하며 전원이 꺼진 상태(예: PCI 구성 상태)에서 사용할 수 있는 디바이스 정보를 쿼리할 수 있습니다.

또한 프레임워크가 EvtDeviceReleaseHardware에 제공하는 변환된 하드웨어 리소스는 여전히 디바이스에 할당됩니다. 이 콜백 함수의 주요 목적은 이러한 리소스를 해제하고, 특히 드라이버의 EvtAcxCircuitPrepareHardware 콜백 함수가 매핑한 메모리 리소스를 매핑 해제하는 것입니다. 또한 드라이버는 이 콜백을 사용하여 전원이 켜진 상태에서 필요할 수 있는 다른 ACXCIRCUIT 관리 작업을 수행할 수도 있습니다. 일반적으로 다른 모든 하드웨어 종료 작업은 드라이버의 EvtDeviceD0Exit 콜백 함수에서 수행되어야 합니다.

EvtAcxCircuitPrepareHardware가 오류 코드를 반환하지 않는 한, 드라이버의 EvtAcxCircuitPrepareHardware 콜백 함수가 호출된 경우 ACX 프레임워크는 항상 드라이버의 EvtAcxCircuitReleaseHardware 콜백 함수를 호출합니다.

하드웨어 리소스에 대한 자세한 내용은 하드웨어 리소스 소개를 참조 하세요.

EvtAcxFactoryCircuitReleaseHardware(EVT_ACX_FACTORY_CIRCUIT_RELEASE_HARDWARE) 콜백 함수

프레임워크가 EvtAcxFactoryCircuitReleaseHardware를 호출할 때 디바이스에 대한 PDO는 여전히 존재하며 전원이 꺼진 상태(예: PCI 구성 상태)에서 사용할 수 있는 디바이스 정보를 쿼리할 수 있습니다.

또한 프레임워크가 EvtDeviceReleaseHardware에 제공하는 변환된 하드웨어 리소스는 여전히 디바이스에 할당됩니다. 이 콜백 함수의 주요 목적은 이러한 리소스를 해제하고, 특히 드라이버의 EvtAcxCircuitPrepareHardware 콜백 함수가 매핑한 메모리 리소스를 매핑 해제하는 것입니다. 또한 드라이버는 이 콜백을 사용하여 전원이 켜진 상태에서 필요할 수 있는 다른 ACXCIRCUIT 관리 작업을 수행할 수도 있습니다. 일반적으로 다른 모든 하드웨어 종료 작업은 드라이버의 EvtDeviceD0Exit 콜백 함수에서 수행되어야 합니다.

EvtAcxFactoryCircuitPrepareHardware가 오류 코드를 반환하지 않는 한, 드라이버의 EvtAcxFactoryCircuitPrepareHardware 콜백 함수가 호출된 경우 ACX 프레임워크는 항상 드라이버의 EvtAcxFactoryCircuitReleaseHardware 콜백 함수를 호출합니다.

WDF 및 회로 개체 관리에 대한 자세한 내용은 ACX WDF 드라이버 수명 관리를 참조 하세요.

참고 항목

ACX 오디오 클래스 확장 개요

ACX 다중 스택 교차 드라이버 통신

ACX WDF 드라이버 수명 관리

ACX 개체 요약