Parse audio config codec capability for LE devices
1. Rename function getHwOffloadEncodingFormatsSupportedForA2DP to
getHwOffloadFormatsSupportedForBluetoothMedia
2. Add one parameter for function
getHwOffloadFormatsSupportedForBluetoothMedia to get the
supported codec for A2DP encode/decode or LE audio encode/decode
3. Add function getAudioDeviceOutAllBleSet() to get the audio device
set for BLE
Tag: #feature
Bug: 203535499
Bug: 150670922
Test: atest BluetoothInstrumentationTests
Change-Id: I9de90c7f61db1f5de848ac66cfc8bd99d27d6cfb
Merged-In: I9de90c7f61db1f5de848ac66cfc8bd99d27d6cfb
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index 0462727..48e96d6 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -525,10 +525,10 @@
return NO_ERROR;
}
-status_t AudioPolicyManager::getHwOffloadEncodingFormatsSupportedForA2DP(
- std::vector<audio_format_t> *formats)
+status_t AudioPolicyManager::getHwOffloadFormatsSupportedForBluetoothMedia(
+ audio_devices_t device, std::vector<audio_format_t> *formats)
{
- ALOGV("getHwOffloadEncodingFormatsSupportedForA2DP()");
+ ALOGV("getHwOffloadFormatsSupportedForBluetoothMedia()");
status_t status = NO_ERROR;
std::unordered_set<audio_format_t> formatSet;
sp<HwModule> primaryModule =
@@ -537,8 +537,23 @@
ALOGE("%s() unable to get primary module", __func__);
return NO_INIT;
}
+
+ DeviceTypeSet audioDeviceSet;
+
+ switch(device) {
+ case AUDIO_DEVICE_OUT_BLUETOOTH_A2DP:
+ audioDeviceSet = getAudioDeviceOutAllA2dpSet();
+ break;
+ case AUDIO_DEVICE_OUT_BLE_HEADSET:
+ audioDeviceSet = getAudioDeviceOutAllBleSet();
+ break;
+ default:
+ ALOGE("%s() device type 0x%08x not supported", __func__, device);
+ return BAD_VALUE;
+ }
+
DeviceVector declaredDevices = primaryModule->getDeclaredDevices().getDevicesFromTypes(
- getAudioDeviceOutAllA2dpSet());
+ audioDeviceSet);
for (const auto& device : declaredDevices) {
formatSet.insert(device->encodedFormats().begin(), device->encodedFormats().end());
}
@@ -2147,7 +2162,7 @@
}
// Explicit routing?
- sp<DeviceDescriptor> explicitRoutingDevice =
+ sp<DeviceDescriptor> explicitRoutingDevice =
mAvailableInputDevices.getDeviceFromId(*selectedDeviceId);
// special case for mmap capture: if an input IO handle is specified, we reuse this input if
@@ -2333,7 +2348,7 @@
profileFlags = AUDIO_INPUT_FLAG_NONE; // retry
} else { // fail
ALOGW("%s could not find profile for device %s, sampling rate %u, format %#x, "
- "channel mask 0x%X, flags %#x", __func__, device->toString().c_str(),
+ "channel mask 0x%X, flags %#x", __func__, device->toString().c_str(),
config->sample_rate, config->format, config->channel_mask, flags);
return input;
}
@@ -5351,7 +5366,7 @@
} // endif input != 0
if (input == AUDIO_IO_HANDLE_NONE) {
- ALOGW("%s could not open input for device %s", __func__,
+ ALOGW("%s could not open input for device %s", __func__,
device->toString().c_str());
profiles.removeAt(profile_index);
profile_index--;