mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 22:04:26 +00:00
Add template functions and implement setCodecPriority
for LE Audio offloading provider Bug: 306225778 Test: mmm hardware/interfaces/bluetooth/audio/aidl/default Change-Id: I440a007ba3ed148834db1c3874af780b454aae39
This commit is contained in:
@@ -70,8 +70,8 @@ ndk::ScopedAStatus LeAudioOffloadAudioProvider::startSession(
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
|
||||
}
|
||||
|
||||
return BluetoothAudioProvider::startSession(
|
||||
host_if, audio_config, latency_modes, _aidl_return);
|
||||
return BluetoothAudioProvider::startSession(host_if, audio_config,
|
||||
latency_modes, _aidl_return);
|
||||
}
|
||||
|
||||
ndk::ScopedAStatus LeAudioOffloadAudioProvider::onSessionReady(
|
||||
@@ -81,6 +81,72 @@ ndk::ScopedAStatus LeAudioOffloadAudioProvider::onSessionReady(
|
||||
*_aidl_return = DataMQDesc();
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
ndk::ScopedAStatus LeAudioOffloadAudioProvider::setCodecPriority(
|
||||
const CodecId& in_codecId, int32_t in_priority) {
|
||||
codec_priority_map_[in_codecId] = in_priority;
|
||||
return ndk::ScopedAStatus::ok();
|
||||
};
|
||||
|
||||
ndk::ScopedAStatus LeAudioOffloadAudioProvider::getLeAudioAseConfiguration(
|
||||
const std::optional<std::vector<
|
||||
std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
|
||||
in_remoteSinkAudioCapabilities,
|
||||
const std::optional<std::vector<
|
||||
std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
|
||||
in_remoteSourceAudioCapabilities,
|
||||
const std::vector<IBluetoothAudioProvider::LeAudioConfigurationRequirement>&
|
||||
in_requirements,
|
||||
std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>*
|
||||
_aidl_return) {
|
||||
/* TODO: Implement */
|
||||
(void)in_remoteSinkAudioCapabilities;
|
||||
(void)in_remoteSourceAudioCapabilities;
|
||||
(void)in_requirements;
|
||||
(void)_aidl_return;
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
|
||||
};
|
||||
|
||||
ndk::ScopedAStatus LeAudioOffloadAudioProvider::getLeAudioAseQosConfiguration(
|
||||
const IBluetoothAudioProvider::LeAudioAseQosConfigurationRequirement&
|
||||
in_qosRequirement,
|
||||
IBluetoothAudioProvider::LeAudioAseQosConfigurationPair* _aidl_return) {
|
||||
/* TODO: Implement */
|
||||
(void)in_qosRequirement;
|
||||
(void)_aidl_return;
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
|
||||
};
|
||||
|
||||
ndk::ScopedAStatus LeAudioOffloadAudioProvider::onSinkAseMetadataChanged(
|
||||
IBluetoothAudioProvider::AseState in_state,
|
||||
const std::optional<std::vector<std::optional<MetadataLtv>>>& in_metadata) {
|
||||
(void)in_state;
|
||||
(void)in_metadata;
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
|
||||
};
|
||||
|
||||
ndk::ScopedAStatus LeAudioOffloadAudioProvider::onSourceAseMetadataChanged(
|
||||
IBluetoothAudioProvider::AseState in_state,
|
||||
const std::optional<std::vector<std::optional<MetadataLtv>>>& in_metadata) {
|
||||
(void)in_state;
|
||||
(void)in_metadata;
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
|
||||
};
|
||||
|
||||
ndk::ScopedAStatus
|
||||
LeAudioOffloadAudioProvider::getLeAudioBroadcastConfiguration(
|
||||
const std::optional<std::vector<
|
||||
std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
|
||||
in_remoteSinkAudioCapabilities,
|
||||
const IBluetoothAudioProvider::LeAudioBroadcastConfigurationRequirement&
|
||||
in_requirement,
|
||||
IBluetoothAudioProvider::LeAudioBroadcastConfigurationSetting*
|
||||
_aidl_return) {
|
||||
/* TODO: Implement */
|
||||
(void)in_remoteSinkAudioCapabilities;
|
||||
(void)in_requirement;
|
||||
(void)_aidl_return;
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
|
||||
};
|
||||
|
||||
} // namespace audio
|
||||
} // namespace bluetooth
|
||||
|
||||
@@ -16,7 +16,11 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
|
||||
#include "BluetoothAudioProvider.h"
|
||||
#include "aidl/android/hardware/bluetooth/audio/LeAudioAseConfiguration.h"
|
||||
#include "aidl/android/hardware/bluetooth/audio/MetadataLtv.h"
|
||||
|
||||
namespace aidl {
|
||||
namespace android {
|
||||
@@ -24,6 +28,13 @@ namespace hardware {
|
||||
namespace bluetooth {
|
||||
namespace audio {
|
||||
|
||||
using LeAudioAseConfigurationSetting =
|
||||
IBluetoothAudioProvider::LeAudioAseConfigurationSetting;
|
||||
using AseDirectionRequirement = IBluetoothAudioProvider::
|
||||
LeAudioConfigurationRequirement::AseDirectionRequirement;
|
||||
using AseDirectionConfiguration = IBluetoothAudioProvider::
|
||||
LeAudioAseConfigurationSetting::AseDirectionConfiguration;
|
||||
|
||||
class LeAudioOffloadAudioProvider : public BluetoothAudioProvider {
|
||||
public:
|
||||
LeAudioOffloadAudioProvider();
|
||||
@@ -33,11 +44,101 @@ class LeAudioOffloadAudioProvider : public BluetoothAudioProvider {
|
||||
ndk::ScopedAStatus startSession(
|
||||
const std::shared_ptr<IBluetoothAudioPort>& host_if,
|
||||
const AudioConfiguration& audio_config,
|
||||
const std::vector<LatencyMode>& latency_modes,
|
||||
DataMQDesc* _aidl_return);
|
||||
const std::vector<LatencyMode>& latency_modes, DataMQDesc* _aidl_return);
|
||||
ndk::ScopedAStatus setCodecPriority(const CodecId& in_codecId,
|
||||
int32_t in_priority) override;
|
||||
ndk::ScopedAStatus getLeAudioAseConfiguration(
|
||||
const std::optional<std::vector<
|
||||
std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
|
||||
in_remoteSinkAudioCapabilities,
|
||||
const std::optional<std::vector<
|
||||
std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
|
||||
in_remoteSourceAudioCapabilities,
|
||||
const std::vector<
|
||||
IBluetoothAudioProvider::LeAudioConfigurationRequirement>&
|
||||
in_requirements,
|
||||
std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>*
|
||||
_aidl_return) override;
|
||||
ndk::ScopedAStatus getLeAudioAseQosConfiguration(
|
||||
const IBluetoothAudioProvider::LeAudioAseQosConfigurationRequirement&
|
||||
in_qosRequirement,
|
||||
IBluetoothAudioProvider::LeAudioAseQosConfigurationPair* _aidl_return)
|
||||
override;
|
||||
ndk::ScopedAStatus onSinkAseMetadataChanged(
|
||||
IBluetoothAudioProvider::AseState in_state,
|
||||
const std::optional<std::vector<std::optional<MetadataLtv>>>& in_metadata)
|
||||
override;
|
||||
ndk::ScopedAStatus onSourceAseMetadataChanged(
|
||||
IBluetoothAudioProvider::AseState in_state,
|
||||
const std::optional<std::vector<std::optional<MetadataLtv>>>& in_metadata)
|
||||
override;
|
||||
ndk::ScopedAStatus getLeAudioBroadcastConfiguration(
|
||||
const std::optional<std::vector<
|
||||
std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
|
||||
in_remoteSinkAudioCapabilities,
|
||||
const IBluetoothAudioProvider::LeAudioBroadcastConfigurationRequirement&
|
||||
in_requirement,
|
||||
IBluetoothAudioProvider::LeAudioBroadcastConfigurationSetting*
|
||||
_aidl_return) override;
|
||||
|
||||
private:
|
||||
ndk::ScopedAStatus onSessionReady(DataMQDesc* _aidl_return) override;
|
||||
std::map<CodecId, uint32_t> codec_priority_map_;
|
||||
|
||||
// Private matching function definitions
|
||||
bool isMatchedValidCodec(CodecId cfg_codec, CodecId req_codec);
|
||||
bool isMatchedContext(
|
||||
AudioContext setting_context,
|
||||
const IBluetoothAudioProvider::LeAudioDeviceCapabilities& capabilities);
|
||||
bool isMatchedSamplingFreq(
|
||||
CodecSpecificConfigurationLtv::SamplingFrequency& cfg_freq,
|
||||
CodecSpecificCapabilitiesLtv::SupportedSamplingFrequencies&
|
||||
capability_freq);
|
||||
bool isMatchedFrameDuration(
|
||||
CodecSpecificConfigurationLtv::FrameDuration& cfg_fduration,
|
||||
CodecSpecificCapabilitiesLtv::SupportedFrameDurations&
|
||||
capability_fduration);
|
||||
bool isMatchedAudioChannel(
|
||||
CodecSpecificConfigurationLtv::AudioChannelAllocation& cfg_channel,
|
||||
CodecSpecificCapabilitiesLtv::SupportedAudioChannelCounts&
|
||||
capability_channel);
|
||||
bool isMatchedCodecFramesPerSDU(
|
||||
CodecSpecificConfigurationLtv::CodecFrameBlocksPerSDU& cfg_frame_sdu,
|
||||
CodecSpecificCapabilitiesLtv::SupportedMaxCodecFramesPerSDU&
|
||||
capability_frame_sdu);
|
||||
bool isMatchedOctetsPerCodecFrame(
|
||||
CodecSpecificConfigurationLtv::OctetsPerCodecFrame& cfg_octets,
|
||||
CodecSpecificCapabilitiesLtv::SupportedOctetsPerCodecFrame&
|
||||
capability_octets);
|
||||
bool isCapabilitiesMatchedCodecConfiguration(
|
||||
std::vector<CodecSpecificConfigurationLtv>& codec_cfg,
|
||||
std::vector<CodecSpecificCapabilitiesLtv> codec_capabilities);
|
||||
bool isRequirementAseConfigurationMatched(
|
||||
LeAudioAseConfiguration setting_cfg,
|
||||
LeAudioAseConfiguration requirement_cfg);
|
||||
void filterCapabilitiesAseDirectionConfiguration(
|
||||
std::vector<std::optional<AseDirectionConfiguration>>&
|
||||
direction_configurations,
|
||||
const IBluetoothAudioProvider::LeAudioDeviceCapabilities& capabilities,
|
||||
std::vector<std::optional<AseDirectionConfiguration>>&
|
||||
valid_direction_configurations);
|
||||
void filterRequirementAseDirectionConfiguration(
|
||||
std::vector<std::optional<AseDirectionConfiguration>>&
|
||||
direction_configurations,
|
||||
const std::optional<std::vector<std::optional<AseDirectionRequirement>>>&
|
||||
requirements,
|
||||
std::vector<std::optional<AseDirectionConfiguration>>&
|
||||
valid_direction_configurations);
|
||||
std::optional<LeAudioAseConfigurationSetting>
|
||||
getCapabilitiesMatchedAseConfigurationSettings(
|
||||
IBluetoothAudioProvider::LeAudioAseConfigurationSetting& setting,
|
||||
const IBluetoothAudioProvider::LeAudioDeviceCapabilities& capabilities,
|
||||
uint8_t direction);
|
||||
std::optional<LeAudioAseConfigurationSetting>
|
||||
getRequirementMatchedAseConfigurationSettings(
|
||||
IBluetoothAudioProvider::LeAudioAseConfigurationSetting& setting,
|
||||
const IBluetoothAudioProvider::LeAudioConfigurationRequirement&
|
||||
requirement);
|
||||
};
|
||||
|
||||
class LeAudioOffloadOutputAudioProvider : public LeAudioOffloadAudioProvider {
|
||||
|
||||
Reference in New Issue
Block a user