LeAudio/multicodec: Fix the async data path getter API

Just like the returned data path configurations are split for each direction,
the function arguments should also have the directional context. The vendor
module might need to know which connection handles in the stream map are for
the sink and which are for the source direction, to provide the proper
data path configurations for each direction.

Bug: 308428217
Bug: 307258939
Test: m android.hardware.bluetooth.audio-update-api
Change-Id: I270b6f4631869e2180580c886f0b58bd777d2123
This commit is contained in:
Jakub Tyszkowski
2024-01-04 16:02:38 +00:00
parent 8885605ebd
commit 4856308c50
4 changed files with 43 additions and 11 deletions

View File

@@ -45,7 +45,7 @@ interface IBluetoothAudioProvider {
void setCodecPriority(in android.hardware.bluetooth.audio.CodecId codecId, int priority);
List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseConfigurationSetting> getLeAudioAseConfiguration(in @nullable List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDeviceCapabilities> remoteSinkAudioCapabilities, in @nullable List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDeviceCapabilities> remoteSourceAudioCapabilities, in List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioConfigurationRequirement> requirements);
android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseQosConfigurationPair getLeAudioAseQosConfiguration(in android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseQosConfigurationRequirement qosRequirement);
android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfigurationPair getLeAudioAseDatapathConfiguration(in android.hardware.bluetooth.audio.AudioContext context, in android.hardware.bluetooth.audio.LeAudioConfiguration.StreamMap[] streamMap);
android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfigurationPair getLeAudioAseDatapathConfiguration(in @nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.StreamConfig sinkConfig, in @nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.StreamConfig sourceConfig);
void onSinkAseMetadataChanged(in android.hardware.bluetooth.audio.IBluetoothAudioProvider.AseState state, int cigId, int cisId, in @nullable android.hardware.bluetooth.audio.MetadataLtv[] metadata);
void onSourceAseMetadataChanged(in android.hardware.bluetooth.audio.IBluetoothAudioProvider.AseState state, int cigId, int cisId, in @nullable android.hardware.bluetooth.audio.MetadataLtv[] metadata);
android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioBroadcastConfigurationSetting getLeAudioBroadcastConfiguration(in @nullable List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDeviceCapabilities> remoteSinkAudioCapabilities, in android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioBroadcastConfigurationRequirement requirement);
@@ -146,6 +146,10 @@ interface IBluetoothAudioProvider {
@nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfiguration inputConfig;
@nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfiguration outputConfig;
}
parcelable StreamConfig {
android.hardware.bluetooth.audio.AudioContext context;
android.hardware.bluetooth.audio.LeAudioConfiguration.StreamMap[] streamMap;
}
@Backing(type="byte") @VintfStability
enum AseState {
ENABLING = 0x00,

View File

@@ -518,15 +518,38 @@ interface IBluetoothAudioProvider {
@nullable LeAudioDataPathConfiguration outputConfig;
}
/**
* Stream Configuration
*/
parcelable StreamConfig {
/**
* Streaming Audio Context.
* This can serve as a hint for selecting the proper configuration by
* the offloader.
*/
AudioContext context;
/**
* Stream configuration, including connection handles and audio channel
* allocations.
*/
StreamMap[] streamMap;
}
/**
* Used to get a data path configuration which dynamically depends on CIS
* connection handles in StreamMap. This is used if non-dynamic data path
* was not provided in LeAudioAseConfigurationSetting. Calling this during
* the unicast audio stream establishment might slightly delay the stream
* start.
*
* @param sinkConfig - remote sink device stream configuration
* @param sourceConfig - remote source device stream configuration
*
* @return LeAudioDataPathConfigurationPair
*/
LeAudioDataPathConfigurationPair getLeAudioAseDatapathConfiguration(
in AudioContext context, in StreamMap[] streamMap);
in @nullable StreamConfig sinkConfig,
in @nullable StreamConfig sourceConfig);
/*
* Audio Stream Endpoint state used to report Metadata changes on the remote

View File

@@ -229,14 +229,17 @@ ndk::ScopedAStatus BluetoothAudioProvider::getLeAudioAseQosConfiguration(
};
ndk::ScopedAStatus BluetoothAudioProvider::getLeAudioAseDatapathConfiguration(
const ::aidl::android::hardware::bluetooth::audio::AudioContext& in_context,
const std::vector<::aidl::android::hardware::bluetooth::audio::
LeAudioConfiguration::StreamMap>& in_streamMap,
const std::optional<::aidl::android::hardware::bluetooth::audio::
IBluetoothAudioProvider::StreamConfig>&
in_sinkConfig,
const std::optional<::aidl::android::hardware::bluetooth::audio::
IBluetoothAudioProvider::StreamConfig>&
in_sourceConfig,
::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
LeAudioDataPathConfigurationPair* _aidl_return) {
/* TODO: Implement */
(void)in_context;
(void)in_streamMap;
(void)in_sinkConfig;
(void)in_sourceConfig;
(void)_aidl_return;
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
}

View File

@@ -71,10 +71,12 @@ class BluetoothAudioProvider : public BnBluetoothAudioProvider {
::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
LeAudioAseQosConfigurationPair* _aidl_return) override;
ndk::ScopedAStatus getLeAudioAseDatapathConfiguration(
const ::aidl::android::hardware::bluetooth::audio::AudioContext&
in_context,
const std::vector<::aidl::android::hardware::bluetooth::audio::
LeAudioConfiguration::StreamMap>& in_streamMap,
const std::optional<::aidl::android::hardware::bluetooth::audio::
IBluetoothAudioProvider::StreamConfig>&
in_sinkConfig,
const std::optional<::aidl::android::hardware::bluetooth::audio::
IBluetoothAudioProvider::StreamConfig>&
in_sourceConfig,
::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
LeAudioDataPathConfigurationPair* _aidl_return) override;
ndk::ScopedAStatus onSinkAseMetadataChanged(