diff options
author | Cheney Ni <cheneyni@google.com> | 2019-02-18 20:18:41 +0800 |
---|---|---|
committer | Cheney Ni <cheneyni@google.com> | 2019-02-18 20:28:07 +0800 |
commit | 5f3a9933bedd64c8da7e11bc373b5d70aebe2147 (patch) | |
tree | 2ed0f208e0b9626e746197bf43cc9acf3e27e624 | |
parent | 23a9a8e759fed1b4640081049960ffb543c17d74 (diff) | |
download | bonito-5f3a9933bedd64c8da7e11bc373b5d70aebe2147.tar.gz |
Support for Bluetooth Audio HAL V2 on Bonito
Bug: 111519504
Test: manual with BluetoothAudioHAL enabled / disabled
Change-Id: I2d022e058f0dd452a0d03b2aa75e951dab317b1c
-rw-r--r-- | a2dp_in_audio_policy_configuration.xml | 22 | ||||
-rw-r--r-- | audio_policy_configuration.xml | 23 | ||||
-rw-r--r-- | audio_policy_configuration_bluetooth_hal_enabled.xml | 245 | ||||
-rw-r--r-- | bluetooth_hearing_aid_audio_policy_configuration.xml | 20 | ||||
-rw-r--r-- | device.mk | 7 | ||||
-rw-r--r-- | manifest.xml | 9 |
6 files changed, 304 insertions, 22 deletions
diff --git a/a2dp_in_audio_policy_configuration.xml b/a2dp_in_audio_policy_configuration.xml new file mode 100644 index 00000000..57bd4f81 --- /dev/null +++ b/a2dp_in_audio_policy_configuration.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Bluetooth Input Audio HAL Audio Policy Configuration file --> +<module name="a2dp" halVersion="2.0"> + <mixPorts> + <mixPort name="a2dp input" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="44100,48000" + channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/> + </mixPort> + </mixPorts> + <devicePorts> + <devicePort tagName="BT A2DP In" type="AUDIO_DEVICE_IN_BLUETOOTH_A2DP" role="source"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="44100,48000" + channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/> + </devicePort> + </devicePorts> + <routes> + <route type="mix" sink="a2dp input" + sources="BT A2DP In"/> + </routes> +</module> diff --git a/audio_policy_configuration.xml b/audio_policy_configuration.xml index 436d81e0..ce786319 100644 --- a/audio_policy_configuration.xml +++ b/audio_policy_configuration.xml @@ -206,27 +206,8 @@ </routes> </module> - <!-- A2DP Audio HAL --> - <module name="a2dp" halVersion="2.0"> - <mixPorts> - <mixPort name="a2dp input" role="sink"> - <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" - samplingRates="44100,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/> - </mixPort> - </mixPorts> - - <devicePorts> - <devicePort tagName="BT A2DP In" type="AUDIO_DEVICE_IN_BLUETOOTH_A2DP" role="source"> - <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" - samplingRates="44100,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/> - </devicePort> - </devicePorts> - - <routes> - <route type="mix" sink="a2dp input" - sources="BT A2DP In"/> - </routes> - </module> + <!-- A2DP Input Audio HAL --> + <xi:include href="a2dp_in_audio_policy_configuration.xml"/> <!-- Usb Audio HAL --> <module name="usb" halVersion="2.0"> diff --git a/audio_policy_configuration_bluetooth_hal_enabled.xml b/audio_policy_configuration_bluetooth_hal_enabled.xml new file mode 100644 index 00000000..7ad24ee0 --- /dev/null +++ b/audio_policy_configuration_bluetooth_hal_enabled.xml @@ -0,0 +1,245 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- Copyright (C) 2018 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude"> + <globalConfiguration speaker_drc_enabled="true"/> + + <modules> + <module name="primary" halVersion="2.0"> + <attachedDevices> + <item>Speaker</item> + <item>Speaker Safe</item> + <item>Earpiece</item> + <item>Telephony Tx</item> + <item>Built-In Mic</item> + <item>Built-In Back Mic</item> + <item>Telephony Rx</item> + </attachedDevices> + <defaultOutputDevice>Speaker</defaultOutputDevice> + <mixPorts> + <mixPort name="primary output" role="source" flags="AUDIO_OUTPUT_FLAG_PRIMARY|AUDIO_OUTPUT_FLAG_FAST"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </mixPort> + <mixPort name="raw" role="source" flags="AUDIO_OUTPUT_FLAG_RAW|AUDIO_OUTPUT_FLAG_FAST"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </mixPort> + <mixPort name="hifi_playback" role="source" /> + <mixPort name="deep_buffer" role="source" + flags="AUDIO_OUTPUT_FLAG_DEEP_BUFFER"> + <profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED" + samplingRates="44100,48000" + channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </mixPort> + <mixPort name="compressed_offload" role="source" + flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING"> + <profile name="" format="AUDIO_FORMAT_MP3" + samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000" + channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/> + <profile name="" format="AUDIO_FORMAT_AAC_LC" + samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000" + channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/> + <profile name="" format="AUDIO_FORMAT_AAC_HE_V1" + samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000" + channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/> + <profile name="" format="AUDIO_FORMAT_AAC_HE_V2" + samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000" + channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/> + </mixPort> + <mixPort name="voice_tx" role="source"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/> + </mixPort> + <mixPort name="mmap_no_irq_out" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_MMAP_NOIRQ"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </mixPort> + <mixPort name="voip_rx" role="source" + flags="AUDIO_OUTPUT_FLAG_VOIP_RX"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="8000,16000,32000,48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </mixPort> + <mixPort name="incall_music_uplink" role="source" + flags="AUDIO_OUTPUT_FLAG_INCALL_MUSIC"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="8000,16000,48000" + channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </mixPort> + <mixPort name="primary input" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT" + samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000" + channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3"/> + </mixPort> + <mixPort name="fast input" role="sink" flags="AUDIO_INPUT_FLAG_FAST"> + <profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT" + samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000" + channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3"/> + </mixPort> + <mixPort name="hifi_input" role="sink" /> + <mixPort name="voice_rx" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/> + </mixPort> + <mixPort name="mmap_no_irq_in" role="sink" flags="AUDIO_INPUT_FLAG_MMAP_NOIRQ"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000" + channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3"/> + </mixPort> + <mixPort name="voip_tx" role="sink" + flags="AUDIO_INPUT_FLAG_VOIP_TX"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="8000,16000,32000,48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/> + </mixPort> + </mixPorts> + <devicePorts> + <devicePort tagName="Earpiece" type="AUDIO_DEVICE_OUT_EARPIECE" role="sink"> + </devicePort> + <devicePort tagName="Speaker" type="AUDIO_DEVICE_OUT_SPEAKER" role="sink"> + </devicePort> + <devicePort tagName="Speaker Safe" type="AUDIO_DEVICE_OUT_SPEAKER_SAFE" role="sink"> + </devicePort> + <devicePort tagName="Wired Headset" type="AUDIO_DEVICE_OUT_WIRED_HEADSET" role="sink"> + </devicePort> + <devicePort tagName="Wired Headphones" type="AUDIO_DEVICE_OUT_WIRED_HEADPHONE" role="sink"> + </devicePort> + <devicePort tagName="Line Out" type="AUDIO_DEVICE_OUT_LINE" role="sink"> + </devicePort> + <devicePort tagName="BT SCO" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO" role="sink"> + </devicePort> + <devicePort tagName="BT SCO Headset" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET" role="sink"> + </devicePort> + <devicePort tagName="BT SCO Car Kit" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT" role="sink"> + </devicePort> + <devicePort tagName="Telephony Tx" type="AUDIO_DEVICE_OUT_TELEPHONY_TX" role="sink"> + </devicePort> + <devicePort tagName="USB Device Out" type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink"> + </devicePort> + <devicePort tagName="USB Headset Out" type="AUDIO_DEVICE_OUT_USB_HEADSET" role="sink"> + </devicePort> + <devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink" + encodedFormats="AUDIO_FORMAT_LDAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_AAC AUDIO_FORMAT_SBC"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="44100,48000,88200,96000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </devicePort> + <devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink" + encodedFormats="AUDIO_FORMAT_LDAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_AAC AUDIO_FORMAT_SBC"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="44100,48000,88200,96000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </devicePort> + <devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink" + encodedFormats="AUDIO_FORMAT_LDAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_AAC AUDIO_FORMAT_SBC"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="44100,48000,88200,96000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </devicePort> + <devicePort tagName="Built-In Mic" type="AUDIO_DEVICE_IN_BUILTIN_MIC" role="source"> + </devicePort> + <devicePort tagName="Built-In Back Mic" type="AUDIO_DEVICE_IN_BACK_MIC" role="source"> + </devicePort> + <devicePort tagName="Wired Headset Mic" type="AUDIO_DEVICE_IN_WIRED_HEADSET" role="source"> + </devicePort> + <devicePort tagName="BT SCO Headset Mic" type="AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET" role="source"> + </devicePort> + <devicePort tagName="Telephony Rx" type="AUDIO_DEVICE_IN_TELEPHONY_RX" role="source"> + </devicePort> + <!-- TODO: Enable multi-channel recording --> + <devicePort tagName="USB Device In" type="AUDIO_DEVICE_IN_USB_DEVICE" role="source"> + </devicePort> + <devicePort tagName="USB Headset In" type="AUDIO_DEVICE_IN_USB_HEADSET" role="source"> + </devicePort> + </devicePorts> + <routes> + <route type="mix" sink="Earpiece" + sources="primary output,raw,deep_buffer,mmap_no_irq_out,voip_rx"/> + <route type="mix" sink="Speaker" + sources="primary output,raw,deep_buffer,compressed_offload,mmap_no_irq_out,voip_rx"/> + <route type="mix" sink="Speaker Safe" + sources="primary output,raw,deep_buffer,compressed_offload,mmap_no_irq_out,voip_rx"/> + <route type="mix" sink="Wired Headset" + sources="primary output,raw,deep_buffer,compressed_offload,mmap_no_irq_out,voip_rx"/> + <route type="mix" sink="Wired Headphones" + sources="primary output,raw,deep_buffer,compressed_offload,mmap_no_irq_out,voip_rx"/> + <route type="mix" sink="Line Out" + sources="primary output,raw,deep_buffer,compressed_offload,mmap_no_irq_out,voip_rx"/> + <route type="mix" sink="BT SCO" + sources="primary output,raw,deep_buffer,voip_rx"/> + <route type="mix" sink="BT SCO Headset" + sources="primary output,raw,deep_buffer,voip_rx"/> + <route type="mix" sink="BT SCO Car Kit" + sources="primary output,raw,deep_buffer,voip_rx"/> + <route type="mix" sink="USB Device Out" + sources="primary output,raw,deep_buffer,compressed_offload,hifi_playback,mmap_no_irq_out,voip_rx"/> + <route type="mix" sink="USB Headset Out" + sources="primary output,raw,deep_buffer,compressed_offload,hifi_playback,mmap_no_irq_out,voip_rx"/> + <route type="mix" sink="Telephony Tx" + sources="voice_tx,incall_music_uplink"/> + <route type="mix" sink="primary input" + sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,BT SCO Headset Mic,USB Device In,USB Headset In"/> + <route type="mix" sink="fast input" + sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,BT SCO Headset Mic,USB Device In,USB Headset In"/> + <route type="mix" sink="voice_rx" + sources="Telephony Rx"/> + <route type="mix" sink="hifi_input" sources="USB Device In,USB Headset In" /> + <route type="mix" sink="mmap_no_irq_in" + sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In,USB Headset In"/> + <route type="mix" sink="voip_tx" + sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,BT SCO Headset Mic,USB Device In,USB Headset In"/> + <route type="mix" sink="BT A2DP Out" + sources="primary output,deep_buffer,compressed_offload"/> + <route type="mix" sink="BT A2DP Headphones" + sources="primary output,deep_buffer,compressed_offload"/> + <route type="mix" sink="BT A2DP Speaker" + sources="primary output,deep_buffer,compressed_offload"/> + </routes> + </module> + + <!-- A2DP Input Audio HAL --> + <xi:include href="a2dp_in_audio_policy_configuration.xml"/> + + <!-- Usb Audio HAL --> + <module name="usb" halVersion="2.0"> + <mixPorts> + <mixPort name="usb_accessory output" role="source"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="44100" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </mixPort> + </mixPorts> + <devicePorts> + <devicePort tagName="USB Host Out" type="AUDIO_DEVICE_OUT_USB_ACCESSORY" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="44100" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </devicePort> + </devicePorts> + <routes> + <route type="mix" sink="USB Host Out" + sources="usb_accessory output"/> + </routes> + </module> + + <!-- Remote Submix Audio HAL --> + <xi:include href="r_submix_audio_policy_configuration.xml"/> + + <!-- Bluetooth Audio HAL for Hearing aid --> + <xi:include href="bluetooth_hearing_aid_audio_policy_configuration.xml"/> + + </modules> + + <!-- Volume section --> + + <xi:include href="audio_policy_volumes.xml"/> + <xi:include href="default_volume_tables.xml"/> + +</audioPolicyConfiguration> diff --git a/bluetooth_hearing_aid_audio_policy_configuration.xml b/bluetooth_hearing_aid_audio_policy_configuration.xml new file mode 100644 index 00000000..7dcabf7f --- /dev/null +++ b/bluetooth_hearing_aid_audio_policy_configuration.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Bluetooth Audio HAL Audio Policy Configuration file --> +<module name="bluetooth" halVersion="2.0"> + <mixPorts> + <!-- Hearing AIDs Audio Ports --> + <mixPort name="hearing aid output" role="source"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="24000,16000" + channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </mixPort> + </mixPorts> + <devicePorts> + <!-- Hearing AIDs Audio Ports --> + <devicePort tagName="BT Hearing Aid Out" type="AUDIO_DEVICE_OUT_HEARING_AID" role="sink"/> + </devicePorts> + <routes> + <route type="mix" sink="BT Hearing Aid Out" + sources="hearing aid output"/> + </routes> +</module> @@ -520,13 +520,15 @@ PRODUCT_PACKAGES += \ audio.usb.default \ audio.r_submix.default \ libaudio-resampler \ - audio.hearing_aid.default + audio.hearing_aid.default \ + audio.bluetooth.default PRODUCT_PACKAGES += \ android.hardware.audio@5.0-impl:32 \ android.hardware.audio.effect@5.0-impl:32 \ android.hardware.broadcastradio@1.0-impl \ android.hardware.soundtrigger@2.2-impl \ + android.hardware.bluetooth.audio@2.0-impl \ android.hardware.audio@2.0-service ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) @@ -541,6 +543,9 @@ endif PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration.xml \ $(LOCAL_PATH)/audio_policy_configuration_a2dp_offload_disabled.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration_a2dp_offload_disabled.xml \ + $(LOCAL_PATH)/audio_policy_configuration_bluetooth_hal_enabled.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration_bluetooth_hal_enabled.xml \ + $(LOCAL_PATH)/a2dp_in_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_in_audio_policy_configuration.xml \ + $(LOCAL_PATH)/bluetooth_hearing_aid_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth_hearing_aid_audio_policy_configuration.xml \ $(LOCAL_PATH)/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \ frameworks/av/services/audiopolicy/config/a2dp_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_audio_policy_configuration.xml \ frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/usb_audio_policy_configuration.xml \ diff --git a/manifest.xml b/manifest.xml index da5dfa31..b2fa7788 100644 --- a/manifest.xml +++ b/manifest.xml @@ -54,6 +54,15 @@ </interface> </hal> <hal format="hidl"> + <name>android.hardware.bluetooth.audio</name> + <transport>hwbinder</transport> + <version>2.0</version> + <interface> + <name>IBluetoothAudioProvidersFactory</name> + <instance>default</instance> + </interface> + </hal> + <hal format="hidl"> <name>android.hardware.boot</name> <transport>hwbinder</transport> <version>1.0</version> |