커널 스트리밍 고려 사항
이 문서에서는 Bluetooth 바이패스 오디오 스트리밍과 관련된 커널 스트리밍에 대한 요구 사항 및 특별한 고려 사항을 명확히 설명합니다.
오디오 드라이버는 "끌어오기 모드"를 포함하여 WaveRT 포트 드라이버를 완전히 지원해야 합니다. 자세한 내용은 WaveRT 포트 드라이버 소개를 참조하세요. SCO(동기 연결 지향) 바이패스 출력에 대한 하드웨어 오디오 엔진을 구현할 필요는 없지만 그렇게 하는 데는 아무런 해가 없습니다.
형식 지원에 대한 Windows 로고 요구 사항에는 Bluetooth에 대한 예외가 포함됩니다.
오디오 드라이버는 사이드밴드 하드웨어(일반적으로 8kHz 모노 오디오 스트리밍)를 통해 가능한 형식을 지원해야 합니다.
토폴로지
모든 Bluetooth Hands-Free 장치는 캡처 및 렌더링을 모두 지원합니다. 오디오 드라이버는 렌더링 및 캡처를 모두 지원하기 위해 다음 다이어그램과 같이 Hands-Free 디바이스에 대한 KS(커널 스트리밍) 토폴로지를 노출해야 합니다.
참고: 오디오 드라이버 개발자는 캡처 및 렌더링 경로 또는 별도의 필터 모두에 대해 단일 필터를 구현할지 여부를 선택할 수 있습니다. 그러나 HFP 디바이스는 GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS 디바이스 인터페이스에서 단일 파일 개체만 허용합니다. 따라서 두 필터를 사용하는 디자인은 두 필터가 모두 단일 파일 개체를 공유하도록 허용해야 합니다.
DAC 및 ADC 노드는 아날로그/디지털 변환을 나타내지만 KS 속성은 지원하지 않습니다.
볼륨 노드는 SETVOLUME 및 GETVOLUMESTATUSUPDATE IOCTL을 HFP 드라이버로 전송 하여 KSPROPERTY_AUDIO_VOLUMELEVEL 및 KSEVENT_CONTROL_CHANGE 지원합니다.
볼륨 노드는 다음과 같이 구현되어야 합니다.
- Bluetooth 헤드셋이 볼륨 제어를 지원하는 경우 오디오 드라이버는 KS 토폴로지의 볼륨 노드를 포함해야 합니다. 오디오 드라이버의 볼륨 속성 처리기는 볼륨을 처리하기 위해 위의 IOCLT를 Bluetooth HFP 드라이버로 보냅니다.
- Bluetooth 헤드셋이 하드웨어 볼륨을 구현하지 않고 코덱(또는 DSP)에 하드웨어 볼륨이 있는 경우 오디오 드라이버는 코덱(또는 DSP)의 볼륨 제어를 처리해야 합니다.
- Bluetooth 헤드셋이나 오디오 디바이스에 하드웨어 볼륨 컨트롤이 없는 경우 볼륨 노드를 표시해서는 안 되며 Windows는 소프트웨어 볼륨 제어 노드를 삽입합니다.
- 음소거 노드는 선택 사항입니다. 오디오 드라이버는 DSP 또는 오디오 코덱이 바이패스 PCM 신호를 Bluetooth 컨트롤러에 전달하기 전에 음소거하는 기능을 제공하는 경우에만 음소거 노드를 구현해야 합니다. 음소거 노드는 KSPROPERTY_AUDIO_MUTE 지원합니다.
속성 요청
오디오 드라이버는 다음 KS 속성을 사용하여 오디오 경로의 오디오 잭 또는 잭에 대한 정보를 가져옵니다. 오디오 드라이버는 적절한 속성 요청을 사용하여 오디오 경로의 모든 Bluetooth 오디오 디바이스에 대한 연결을 만들거나 끊을 수도 있습니다.
KSPROPERTY_JACK_DESCRIPTION
이 속성은 KSJACK_DESCRIPTION 구조를 반환합니다. 오디오 드라이버는 다음과 같이 KSPROPERTY_JACK_DESCRIPTION 필드를 설정해야 합니다.
- ChannelMapping = KSAUDIO_SPEAKER_MONO
- 색 = 0
- ConnectionType = eConnTypeOtherDigital
- GeoLocation = eGeoLocNotApplicable
- GenLocation = eGenLocOther
- PortConnection = ePortConnUnknown
- IsConnected = <현재 연결 상태 대한 BOOL>
KSPROPERTY_JACK_DESCRIPTION2
이 속성은 KSJACK_DESCRIPTION2 구조를 반환합니다. 오디오 드라이버는 다음과 같이 KSPROPERTY_JACK_DESCRIPTION2 필드를 설정해야 합니다.
- DeviceStateInfo = 0
- JackCapabilities = JACKDESC2_PRESENCE_DETECT_CAPABILITY
KSPROPERTY_ONESHOT_RECONNECT
오디오 드라이버의 필터는 KSPROPERTY_ONESHOT_RECONNECT 지원해야 합니다. 이 구조를 만들고 초기화하기 위해 오디오 드라이버는 HFP 드라이버에 IOCTL_BTHHFP_DEVICE_REQUEST_CONNECT 보냅니다. HFP 드라이버는 이 요청을 완료한 다음 Bluetooth 오디오 디바이스에 비동기적으로 연결을 시도합니다.
KSPROPERTY_ONESHOT_DISCONNECT
오디오 드라이버의 필터는 KSPROPERTY_ONESHOT_DISCONNECT 지원해야 합니다. 이 구조를 만들고 초기화하기 위해 오디오 드라이버는 HFP 드라이버에 IOCTL_BTHHFP_DEVICE_REQUEST_DISCONNECT 보냅니다. HFP 드라이버는 이 요청을 완료한 다음 Bluetooth 오디오 디바이스에서 비동기적으로 연결을 끊습니다.
오디오 드라이버가 이러한 속성을 지원하는 경우 제어판 소리 대화 상자는 HFP 엔드포인트에 대한 연결 및 연결 끊기 명령을 노출합니다.