blob: bfca061dddc5ec748ad161903afa83470567587b [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"
Josh Wu6ab53e72021-12-29 23:53:33 -080024
25namespace aidl {
26namespace android {
27namespace hardware {
28namespace bluetooth {
29namespace audio {
30
Bao Do6112bda2023-11-15 03:57:59 +000031using LeAudioAseConfigurationSetting =
32 IBluetoothAudioProvider::LeAudioAseConfigurationSetting;
33using AseDirectionRequirement = IBluetoothAudioProvider::
34 LeAudioConfigurationRequirement::AseDirectionRequirement;
35using AseDirectionConfiguration = IBluetoothAudioProvider::
36 LeAudioAseConfigurationSetting::AseDirectionConfiguration;
37
Josh Wu6ab53e72021-12-29 23:53:33 -080038class LeAudioOffloadAudioProvider : public BluetoothAudioProvider {
39 public:
40 LeAudioOffloadAudioProvider();
41
42 bool isValid(const SessionType& sessionType) override;
43
44 ndk::ScopedAStatus startSession(
45 const std::shared_ptr<IBluetoothAudioPort>& host_if,
Chen Chenc92270e2022-02-14 18:29:52 -080046 const AudioConfiguration& audio_config,
Bao Do6112bda2023-11-15 03:57:59 +000047 const std::vector<LatencyMode>& latency_modes, DataMQDesc* _aidl_return);
48 ndk::ScopedAStatus setCodecPriority(const CodecId& in_codecId,
49 int32_t in_priority) override;
50 ndk::ScopedAStatus getLeAudioAseConfiguration(
51 const std::optional<std::vector<
52 std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
53 in_remoteSinkAudioCapabilities,
54 const std::optional<std::vector<
55 std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
56 in_remoteSourceAudioCapabilities,
57 const std::vector<
58 IBluetoothAudioProvider::LeAudioConfigurationRequirement>&
59 in_requirements,
60 std::vector<IBluetoothAudioProvider::LeAudioAseConfigurationSetting>*
61 _aidl_return) override;
62 ndk::ScopedAStatus getLeAudioAseQosConfiguration(
63 const IBluetoothAudioProvider::LeAudioAseQosConfigurationRequirement&
64 in_qosRequirement,
65 IBluetoothAudioProvider::LeAudioAseQosConfigurationPair* _aidl_return)
66 override;
67 ndk::ScopedAStatus onSinkAseMetadataChanged(
68 IBluetoothAudioProvider::AseState in_state,
69 const std::optional<std::vector<std::optional<MetadataLtv>>>& in_metadata)
70 override;
71 ndk::ScopedAStatus onSourceAseMetadataChanged(
72 IBluetoothAudioProvider::AseState in_state,
73 const std::optional<std::vector<std::optional<MetadataLtv>>>& in_metadata)
74 override;
75 ndk::ScopedAStatus getLeAudioBroadcastConfiguration(
76 const std::optional<std::vector<
77 std::optional<IBluetoothAudioProvider::LeAudioDeviceCapabilities>>>&
78 in_remoteSinkAudioCapabilities,
79 const IBluetoothAudioProvider::LeAudioBroadcastConfigurationRequirement&
80 in_requirement,
81 IBluetoothAudioProvider::LeAudioBroadcastConfigurationSetting*
82 _aidl_return) override;
Josh Wu6ab53e72021-12-29 23:53:33 -080083
84 private:
85 ndk::ScopedAStatus onSessionReady(DataMQDesc* _aidl_return) override;
Bao Do6112bda2023-11-15 03:57:59 +000086 std::map<CodecId, uint32_t> codec_priority_map_;
87
88 // Private matching function definitions
89 bool isMatchedValidCodec(CodecId cfg_codec, CodecId req_codec);
90 bool isMatchedContext(
91 AudioContext setting_context,
92 const IBluetoothAudioProvider::LeAudioDeviceCapabilities& capabilities);
93 bool isMatchedSamplingFreq(
94 CodecSpecificConfigurationLtv::SamplingFrequency& cfg_freq,
95 CodecSpecificCapabilitiesLtv::SupportedSamplingFrequencies&
96 capability_freq);
97 bool isMatchedFrameDuration(
98 CodecSpecificConfigurationLtv::FrameDuration& cfg_fduration,
99 CodecSpecificCapabilitiesLtv::SupportedFrameDurations&
100 capability_fduration);
101 bool isMatchedAudioChannel(
102 CodecSpecificConfigurationLtv::AudioChannelAllocation& cfg_channel,
103 CodecSpecificCapabilitiesLtv::SupportedAudioChannelCounts&
104 capability_channel);
105 bool isMatchedCodecFramesPerSDU(
106 CodecSpecificConfigurationLtv::CodecFrameBlocksPerSDU& cfg_frame_sdu,
107 CodecSpecificCapabilitiesLtv::SupportedMaxCodecFramesPerSDU&
108 capability_frame_sdu);
109 bool isMatchedOctetsPerCodecFrame(
110 CodecSpecificConfigurationLtv::OctetsPerCodecFrame& cfg_octets,
111 CodecSpecificCapabilitiesLtv::SupportedOctetsPerCodecFrame&
112 capability_octets);
113 bool isCapabilitiesMatchedCodecConfiguration(
114 std::vector<CodecSpecificConfigurationLtv>& codec_cfg,
115 std::vector<CodecSpecificCapabilitiesLtv> codec_capabilities);
116 bool isRequirementAseConfigurationMatched(
117 LeAudioAseConfiguration setting_cfg,
118 LeAudioAseConfiguration requirement_cfg);
119 void filterCapabilitiesAseDirectionConfiguration(
120 std::vector<std::optional<AseDirectionConfiguration>>&
121 direction_configurations,
122 const IBluetoothAudioProvider::LeAudioDeviceCapabilities& capabilities,
123 std::vector<std::optional<AseDirectionConfiguration>>&
124 valid_direction_configurations);
125 void filterRequirementAseDirectionConfiguration(
126 std::vector<std::optional<AseDirectionConfiguration>>&
127 direction_configurations,
128 const std::optional<std::vector<std::optional<AseDirectionRequirement>>>&
129 requirements,
130 std::vector<std::optional<AseDirectionConfiguration>>&
131 valid_direction_configurations);
132 std::optional<LeAudioAseConfigurationSetting>
133 getCapabilitiesMatchedAseConfigurationSettings(
134 IBluetoothAudioProvider::LeAudioAseConfigurationSetting& setting,
135 const IBluetoothAudioProvider::LeAudioDeviceCapabilities& capabilities,
136 uint8_t direction);
137 std::optional<LeAudioAseConfigurationSetting>
138 getRequirementMatchedAseConfigurationSettings(
139 IBluetoothAudioProvider::LeAudioAseConfigurationSetting& setting,
140 const IBluetoothAudioProvider::LeAudioConfigurationRequirement&
141 requirement);
Josh Wu6ab53e72021-12-29 23:53:33 -0800142};
143
144class LeAudioOffloadOutputAudioProvider : public LeAudioOffloadAudioProvider {
145 public:
146 LeAudioOffloadOutputAudioProvider();
147};
148
149class LeAudioOffloadInputAudioProvider : public LeAudioOffloadAudioProvider {
150 public:
151 LeAudioOffloadInputAudioProvider();
152};
153
Alice Kuoe80a5762022-02-09 14:44:29 +0800154class LeAudioOffloadBroadcastAudioProvider
155 : public LeAudioOffloadAudioProvider {
156 public:
157 LeAudioOffloadBroadcastAudioProvider();
158};
159
Josh Wu6ab53e72021-12-29 23:53:33 -0800160} // namespace audio
161} // namespace bluetooth
162} // namespace hardware
163} // namespace android
164} // namespace aidl