interfaces: bluetooth: Restore LC3 codec support for A2DP

* LC3 codec support removed in commit "Add Opus to BT Audio HAL and update version to V2"
* Add back support for it to properly handle the case
  that device only supports LC3 and etc. but not OPUS.

Ref:
a2587da5b2

Change-Id: If779b175c95698b096cc38ece54cddd659b338f7
Signed-off-by: someone5678 <someone5678@users.noreply.github.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
This commit is contained in:
someone5678
2024-03-29 20:50:27 +09:00
committed by Joey Huab
parent 48b7141951
commit 2e0ad1d9fa
2 changed files with 43 additions and 2 deletions

View File

@@ -85,6 +85,11 @@ static const AptxCapabilities kDefaultOffloadAptxHdCapability = {
.bitsPerSample = {16, 24},
};
static const Lc3Capabilities kDefaultA2dpOffloadLc3Capability = {
.samplingFrequencyHz = {44100, 48000},
.frameDurationUs = {7500, 10000},
};
static const OpusCapabilities kDefaultOffloadOpusCapability = {
.samplingFrequencyHz = {48000},
.frameDurationUs = {10000, 20000},
@@ -97,6 +102,7 @@ const std::vector<CodecCapabilities> kDefaultOffloadA2dpCodecCapabilities = {
{.codecType = CodecType::LDAC, .capabilities = {}},
{.codecType = CodecType::APTX, .capabilities = {}},
{.codecType = CodecType::APTX_HD, .capabilities = {}},
{.codecType = CodecType::LC3, .capabilities = {}},
{.codecType = CodecType::OPUS, .capabilities = {}}};
std::vector<LeAudioCodecCapabilitiesSetting> kDefaultOffloadLeAudioCapabilities;
@@ -243,6 +249,30 @@ bool BluetoothAudioCodecs::IsOffloadAptxHdConfigurationValid(
return false;
}
bool BluetoothAudioCodecs::IsOffloadLc3ConfigurationValid(
const CodecConfiguration::CodecSpecific& codec_specific) {
if (codec_specific.getTag() !=
CodecConfiguration::CodecSpecific::lc3Config) {
LOG(WARNING) << __func__
<< ": Invalid CodecSpecific=" << codec_specific.toString();
return false;
}
const Lc3Configuration lc3_data =
codec_specific.get<CodecConfiguration::CodecSpecific::lc3Config>();
if (ContainedInVector(kDefaultA2dpOffloadLc3Capability.samplingFrequencyHz,
lc3_data.samplingFrequencyHz) &&
ContainedInVector(kDefaultA2dpOffloadLc3Capability.frameDurationUs,
lc3_data.frameDurationUs) &&
ContainedInVector(kDefaultA2dpOffloadLc3Capability.channelMode,
lc3_data.channelMode)) {
return true;
}
LOG(WARNING) << __func__
<< ": Unsupported CodecSpecific=" << codec_specific.toString();
return false;
}
bool BluetoothAudioCodecs::IsOffloadOpusConfigurationValid(
const CodecConfiguration::CodecSpecific& codec_specific) {
if (codec_specific.getTag() !=
@@ -314,9 +344,13 @@ BluetoothAudioCodecs::GetA2dpOffloadCodecCapabilities(
.set<CodecCapabilities::Capabilities::opusCapabilities>(
kDefaultOffloadOpusCapability);
break;
case CodecType::LC3:
codec_capability.capabilities
.set<CodecCapabilities::Capabilities::lc3Capabilities>(
kDefaultA2dpOffloadLc3Capability);
break;
case CodecType::UNKNOWN:
case CodecType::VENDOR:
case CodecType::LC3:
case CodecType::APTX_ADAPTIVE:
case CodecType::APTX_ADAPTIVE_LE:
case CodecType::APTX_ADAPTIVE_LEX:
@@ -379,6 +413,11 @@ bool BluetoothAudioCodecs::IsOffloadCodecConfigurationValid(
return true;
}
break;
case CodecType::LC3:
if (IsOffloadLc3ConfigurationValid(codec_specific)) {
return true;
}
break;
case CodecType::OPUS:
if (IsOffloadOpusConfigurationValid(codec_specific)) {
return true;
@@ -387,7 +426,6 @@ bool BluetoothAudioCodecs::IsOffloadCodecConfigurationValid(
case CodecType::APTX_ADAPTIVE:
case CodecType::APTX_ADAPTIVE_LE:
case CodecType::APTX_ADAPTIVE_LEX:
case CodecType::LC3:
case CodecType::UNKNOWN:
case CodecType::VENDOR:
break;

View File

@@ -18,6 +18,7 @@
#include <aidl/android/hardware/bluetooth/audio/CodecCapabilities.h>
#include <aidl/android/hardware/bluetooth/audio/CodecConfiguration.h>
#include <aidl/android/hardware/bluetooth/audio/Lc3Configuration.h>
#include <aidl/android/hardware/bluetooth/audio/CodecInfo.h>
#include <aidl/android/hardware/bluetooth/audio/IBluetoothAudioProvider.h>
#include <aidl/android/hardware/bluetooth/audio/LeAudioCodecCapabilitiesSetting.h>
@@ -80,6 +81,8 @@ class BluetoothAudioCodecs {
const CodecConfiguration::CodecSpecific& codec_specific);
static bool IsOffloadAptxHdConfigurationValid(
const CodecConfiguration::CodecSpecific& codec_specific);
static bool IsOffloadLc3ConfigurationValid(
const CodecConfiguration::CodecSpecific& codec_specific);
static bool IsOffloadOpusConfigurationValid(
const CodecConfiguration::CodecSpecific& codec_specific);
};