blob: 2785e7fe1d8a7802b49afe980c2633a28ff3b7d1 [file] [log] [blame]
Josh Wu6ab53e72021-12-29 23:53:33 -08001/*
2 * Copyright (C) 2022 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
Bao Do6112bda2023-11-15 03:57:59 +000019#include <map>
20
Josh Wu6ab53e72021-12-29 23:53:33 -080021#include "BluetoothAudioProvider.h"
Bao Do6112bda2023-11-15 03:57:59 +000022#include "aidl/android/hardware/bluetooth/audio/LeAudioAseConfiguration.h"
23#include "aidl/android/hardware/bluetooth/audio/MetadataLtv.h"
Bao Do5b2fdab2023-11-20 08:02:55 +000024#include "aidl/android/hardware/bluetooth/audio/SessionType.h"
Josh Wu6ab53e72021-12-29 23:53:33 -080025
26namespace aidl {
27namespace android {
28namespace hardware {
29namespace bluetooth {
30namespace audio {
31
Bao Do6112bda2023-11-15 03:57:59 +000032using LeAudioAseConfigurationSetting =
33 IBluetoothAudioProvider::LeAudioAseConfigurationSetting;
34using AseDirectionRequirement = IBluetoothAudioProvider::
35 LeAudioConfigurationRequirement::AseDirectionRequirement;
36using AseDirectionConfiguration = IBluetoothAudioProvider::
37 LeAudioAseConfigurationSetting::AseDirectionConfiguration;
Bao Doc4adf242023-11-15 08:03:20 +000038using AseQosDirectionRequirement = IBluetoothAudioProvider::
39 LeAudioAseQosConfigurationRequirement::AseQosDirectionRequirement;
40using LeAudioAseQosConfiguration =
41 IBluetoothAudioProvider::LeAudioAseQosConfiguration;
Bao Do5b2fdab2023-11-20 08:02:55 +000042using LeAudioBroadcastConfigurationSetting =
43 IBluetoothAudioProvider::LeAudioBroadcastConfigurationSetting;
Bao Do6112bda2023-11-15 03:57:59 +000044
Josh Wu6ab53e72021-12-29 23:53:33 -080045class LeAudioOffloadAudioProvider : public BluetoothAudioProvider {
46 public:
47 LeAudioOffloadAudioProvider();
48
49 bool isValid(const SessionType& sessionType) override;
50
51 ndk::ScopedAStatus startSession(
52 const std::shared_ptr<IBluetoothAudioPort>& host_if,
Chen Chenc92270e2022-02-14 18:29:52 -080053 const AudioConfiguration& audio_config,
Bao Do6112bda2023-11-15 03:57:59 +000054 const std::vector<LatencyMode>& latency_modes, DataMQDesc* _aidl_return);
55 ndk::ScopedAStatus setCodecPriority(const CodecId& in_codecId,
56 int32_t in_priority) override;
57 ndk::ScopedAStatus getLeAudioAseConfiguration(
58 const std::optional<std::vector<
59 std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
60 in_remoteSinkAudioCapabilities,
61 const std::optional<std::vector<
62 std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
63 in_remoteSourceAudioCapabilities,
64 const std::vector<
65 IBluetoothAudioProvider::LeAudioConfigurationRequirement>&
66 in_requirements,
67 std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>*
68 _aidl_return) override;
69 ndk::ScopedAStatus getLeAudioAseQosConfiguration(
70 const IBluetoothAudioProvider::LeAudioAseQosConfigurationRequirement&
71 in_qosRequirement,
72 IBluetoothAudioProvider::LeAudioAseQosConfigurationPair* _aidl_return)
73 override;
Bao Do5b2fdab2023-11-20 08:02:55 +000074 ndk::ScopedAStatus onSourceAseMetadataChanged(
75 IBluetoothAudioProvider::AseState in_state, int32_t in_cigId,
76 int32_t in_cisId,
Bao Do6112bda2023-11-15 03:57:59 +000077 const std::optional<std::vector<std::optional<MetadataLtv>>>& in_metadata)
78 override;
Bao Do5b2fdab2023-11-20 08:02:55 +000079 ndk::ScopedAStatus onSinkAseMetadataChanged(
80 IBluetoothAudioProvider::AseState in_state, int32_t in_cigId,
81 int32_t in_cisId,
Bao Do6112bda2023-11-15 03:57:59 +000082 const std::optional<std::vector<std::optional<MetadataLtv>>>& in_metadata)
83 override;
84 ndk::ScopedAStatus getLeAudioBroadcastConfiguration(
85 const std::optional<std::vector<
86 std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
87 in_remoteSinkAudioCapabilities,
88 const IBluetoothAudioProvider::LeAudioBroadcastConfigurationRequirement&
89 in_requirement,
Bao Do5b2fdab2023-11-20 08:02:55 +000090 LeAudioBroadcastConfigurationSetting* _aidl_return) override;
Josh Wu6ab53e72021-12-29 23:53:33 -080091
92 private:
93 ndk::ScopedAStatus onSessionReady(DataMQDesc* _aidl_return) override;
Bao Do6112bda2023-11-15 03:57:59 +000094 std::map<CodecId, uint32_t> codec_priority_map_;
Bao Do5b2fdab2023-11-20 08:02:55 +000095 std::vector<LeAudioBroadcastConfigurationSetting> broadcast_settings;
Bao Do6112bda2023-11-15 03:57:59 +000096
97 // Private matching function definitions
98 bool isMatchedValidCodec(CodecId cfg_codec, CodecId req_codec);
Bao Do867af602023-11-15 05:41:12 +000099 bool isCapabilitiesMatchedContext(
Bao Do6112bda2023-11-15 03:57:59 +0000100 AudioContext setting_context,
101 const IBluetoothAudioProvider::LeAudioDeviceCapabilities& capabilities);
102 bool isMatchedSamplingFreq(
103 CodecSpecificConfigurationLtv::SamplingFrequency& cfg_freq,
104 CodecSpecificCapabilitiesLtv::SupportedSamplingFrequencies&
105 capability_freq);
106 bool isMatchedFrameDuration(
107 CodecSpecificConfigurationLtv::FrameDuration& cfg_fduration,
108 CodecSpecificCapabilitiesLtv::SupportedFrameDurations&
109 capability_fduration);
110 bool isMatchedAudioChannel(
111 CodecSpecificConfigurationLtv::AudioChannelAllocation& cfg_channel,
112 CodecSpecificCapabilitiesLtv::SupportedAudioChannelCounts&
113 capability_channel);
114 bool isMatchedCodecFramesPerSDU(
115 CodecSpecificConfigurationLtv::CodecFrameBlocksPerSDU& cfg_frame_sdu,
116 CodecSpecificCapabilitiesLtv::SupportedMaxCodecFramesPerSDU&
117 capability_frame_sdu);
118 bool isMatchedOctetsPerCodecFrame(
119 CodecSpecificConfigurationLtv::OctetsPerCodecFrame& cfg_octets,
120 CodecSpecificCapabilitiesLtv::SupportedOctetsPerCodecFrame&
121 capability_octets);
122 bool isCapabilitiesMatchedCodecConfiguration(
123 std::vector<CodecSpecificConfigurationLtv>& codec_cfg,
124 std::vector<CodecSpecificCapabilitiesLtv> codec_capabilities);
Bao Do867af602023-11-15 05:41:12 +0000125 bool isMatchedAseConfiguration(LeAudioAseConfiguration setting_cfg,
126 LeAudioAseConfiguration requirement_cfg);
Bao Do5b2fdab2023-11-20 08:02:55 +0000127 bool isMatchedBISConfiguration(
128 LeAudioBisConfiguration bis_cfg,
129 const IBluetoothAudioProvider::LeAudioDeviceCapabilities& capabilities);
Bao Do6112bda2023-11-15 03:57:59 +0000130 void filterCapabilitiesAseDirectionConfiguration(
131 std::vector<std::optional<AseDirectionConfiguration>>&
132 direction_configurations,
133 const IBluetoothAudioProvider::LeAudioDeviceCapabilities& capabilities,
134 std::vector<std::optional<AseDirectionConfiguration>>&
135 valid_direction_configurations);
136 void filterRequirementAseDirectionConfiguration(
137 std::vector<std::optional<AseDirectionConfiguration>>&
138 direction_configurations,
139 const std::optional<std::vector<std::optional<AseDirectionRequirement>>>&
140 requirements,
141 std::vector<std::optional<AseDirectionConfiguration>>&
142 valid_direction_configurations);
143 std::optional<LeAudioAseConfigurationSetting>
144 getCapabilitiesMatchedAseConfigurationSettings(
145 IBluetoothAudioProvider::LeAudioAseConfigurationSetting& setting,
146 const IBluetoothAudioProvider::LeAudioDeviceCapabilities& capabilities,
147 uint8_t direction);
148 std::optional<LeAudioAseConfigurationSetting>
149 getRequirementMatchedAseConfigurationSettings(
150 IBluetoothAudioProvider::LeAudioAseConfigurationSetting& setting,
151 const IBluetoothAudioProvider::LeAudioConfigurationRequirement&
152 requirement);
Bao Doc4adf242023-11-15 08:03:20 +0000153 bool isMatchedQosRequirement(LeAudioAseQosConfiguration setting_qos,
154 AseQosDirectionRequirement requirement_qos);
Bao Do5b2fdab2023-11-20 08:02:55 +0000155 std::optional<LeAudioBroadcastConfigurationSetting>
156 getCapabilitiesMatchedBroadcastConfigurationSettings(
157 LeAudioBroadcastConfigurationSetting& setting,
158 const IBluetoothAudioProvider::LeAudioDeviceCapabilities& capabilities);
159 void getBroadcastSettings();
Josh Wu6ab53e72021-12-29 23:53:33 -0800160};
161
162class LeAudioOffloadOutputAudioProvider : public LeAudioOffloadAudioProvider {
163 public:
164 LeAudioOffloadOutputAudioProvider();
165};
166
167class LeAudioOffloadInputAudioProvider : public LeAudioOffloadAudioProvider {
168 public:
169 LeAudioOffloadInputAudioProvider();
170};
171
Alice Kuoe80a5762022-02-09 14:44:29 +0800172class LeAudioOffloadBroadcastAudioProvider
173 : public LeAudioOffloadAudioProvider {
174 public:
175 LeAudioOffloadBroadcastAudioProvider();
176};
177
Josh Wu6ab53e72021-12-29 23:53:33 -0800178} // namespace audio
179} // namespace bluetooth
180} // namespace hardware
181} // namespace android
182} // namespace aidl