blob: 01edf72768a0612a6a35cd30fbba3b8138250359 [file] [log] [blame]
Marco Nelissen3a34bef2011-08-02 13:33:41 -07001/*
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -08002**
3** Copyright 2007, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9** http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18#define LOG_TAG "IAudioFlinger"
Eric Laurentc2f1f072009-07-17 12:17:14 -070019//#define LOG_NDEBUG 0
Jiabin Huangebe64102021-09-07 20:01:07 +000020
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080021#include <utils/Log.h>
22
23#include <stdint.h>
24#include <sys/types.h>
Andy Hung225aef62022-12-06 16:33:20 -080025#include "IAudioFlinger.h"
Eric Laurentb1cc36b2017-12-11 12:14:16 -080026#include <binder/IPCThreadState.h>
Mathias Agopian75624082009-05-19 19:08:10 -070027#include <binder/Parcel.h>
Andy Hung225aef62022-12-06 16:33:20 -080028#include <system/thread_defs.h>
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080029
30namespace android {
31
Andy Hung1131b6e2020-12-08 20:47:45 -080032using aidl_utils::statusTFromBinderStatus;
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -080033using binder::Status;
Mikhail Naganov57bd06f2021-08-10 16:41:54 -070034using media::audio::common::AudioChannelLayout;
35using media::audio::common::AudioFormatDescription;
jiabine99d0882021-09-17 05:21:25 +000036using media::audio::common::AudioMMapPolicyInfo;
37using media::audio::common::AudioMMapPolicyType;
Mikhail Naganovddceecc2021-09-03 13:58:56 -070038using media::audio::common::AudioMode;
Mikhail Naganovdbf03642021-08-25 18:15:32 -070039using media::audio::common::AudioStreamType;
Mikhail Naganovddceecc2021-09-03 13:58:56 -070040using media::audio::common::AudioUuid;
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -080041
Eric Laurentf75c2fe2015-04-02 13:49:15 -070042#define MAX_ITEMS_PER_LIST 1024
43
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -080044#define VALUE_OR_RETURN_BINDER(x) \
45 ({ \
46 auto _tmp = (x); \
47 if (!_tmp.ok()) return Status::fromStatusT(_tmp.error()); \
48 std::move(_tmp.value()); \
49 })
50
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -080051#define RETURN_BINDER_IF_ERROR(x) \
52 { \
53 auto _tmp = (x); \
54 if (_tmp != OK) return Status::fromStatusT(_tmp); \
55 }
56
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080057ConversionResult<media::CreateTrackRequest> IAudioFlinger::CreateTrackInput::toAidl() const {
58 media::CreateTrackRequest aidl;
Mikhail Naganovf094be22023-05-17 11:48:43 -070059 aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributes(attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -070060 // Do not be mislead by 'Input'--this is an input to 'createTrack', which creates output tracks.
61 aidl.config = VALUE_OR_RETURN(legacy2aidl_audio_config_t_AudioConfig(
62 config, false /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -080063 aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080064 aidl.sharedBuffer = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(sharedBuffer));
65 aidl.notificationsPerBuffer = VALUE_OR_RETURN(convertIntegral<int32_t>(notificationsPerBuffer));
66 aidl.speed = speed;
67 aidl.audioTrackCallback = audioTrackCallback;
Andy Hung973638a2020-12-08 20:47:45 -080068 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080069 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
70 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
71 aidl.selectedDeviceId = VALUE_OR_RETURN(
72 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
73 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
74 return aidl;
75}
76
77ConversionResult<IAudioFlinger::CreateTrackInput>
78IAudioFlinger::CreateTrackInput::fromAidl(const media::CreateTrackRequest& aidl) {
79 IAudioFlinger::CreateTrackInput legacy;
Mikhail Naganovf094be22023-05-17 11:48:43 -070080 legacy.attr = VALUE_OR_RETURN(aidl2legacy_AudioAttributes_audio_attributes_t(aidl.attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -070081 // Do not be mislead by 'Input'--this is an input to 'createTrack', which creates output tracks.
82 legacy.config = VALUE_OR_RETURN(
83 aidl2legacy_AudioConfig_audio_config_t(aidl.config, false /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -080084 legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080085 legacy.sharedBuffer = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.sharedBuffer));
86 legacy.notificationsPerBuffer = VALUE_OR_RETURN(
87 convertIntegral<uint32_t>(aidl.notificationsPerBuffer));
88 legacy.speed = aidl.speed;
89 legacy.audioTrackCallback = aidl.audioTrackCallback;
Andy Hung973638a2020-12-08 20:47:45 -080090 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080091 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
92 legacy.notificationFrameCount = VALUE_OR_RETURN(
93 convertIntegral<size_t>(aidl.notificationFrameCount));
94 legacy.selectedDeviceId = VALUE_OR_RETURN(
95 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
96 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
97 return legacy;
98}
99
100ConversionResult<media::CreateTrackResponse>
101IAudioFlinger::CreateTrackOutput::toAidl() const {
102 media::CreateTrackResponse aidl;
Andy Hung973638a2020-12-08 20:47:45 -0800103 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800104 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
105 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
106 aidl.selectedDeviceId = VALUE_OR_RETURN(
107 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
108 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
109 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
Andy Hunga2159aa2021-07-20 13:01:52 -0700110 aidl.streamType = VALUE_OR_RETURN(
111 legacy2aidl_audio_stream_type_t_AudioStreamType(streamType));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800112 aidl.afFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(afFrameCount));
113 aidl.afSampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(afSampleRate));
114 aidl.afLatencyMs = VALUE_OR_RETURN(convertIntegral<int32_t>(afLatencyMs));
Robert Wu310037a2022-09-06 21:48:18 +0000115 aidl.afChannelMask = VALUE_OR_RETURN(
116 legacy2aidl_audio_channel_mask_t_AudioChannelLayout(afChannelMask, false /*isInput*/));
117 aidl.afFormat = VALUE_OR_RETURN(
118 legacy2aidl_audio_format_t_AudioFormatDescription(afFormat));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800119 aidl.outputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(outputId));
120 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800121 aidl.audioTrack = audioTrack;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800122 return aidl;
123}
124
125ConversionResult<IAudioFlinger::CreateTrackOutput>
126IAudioFlinger::CreateTrackOutput::fromAidl(
127 const media::CreateTrackResponse& aidl) {
128 IAudioFlinger::CreateTrackOutput legacy;
Andy Hung973638a2020-12-08 20:47:45 -0800129 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800130 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
131 legacy.notificationFrameCount = VALUE_OR_RETURN(
132 convertIntegral<size_t>(aidl.notificationFrameCount));
133 legacy.selectedDeviceId = VALUE_OR_RETURN(
134 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
135 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
136 legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
Andy Hunga2159aa2021-07-20 13:01:52 -0700137 legacy.streamType = VALUE_OR_RETURN(
138 aidl2legacy_AudioStreamType_audio_stream_type_t(aidl.streamType));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800139 legacy.afFrameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.afFrameCount));
140 legacy.afSampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.afSampleRate));
141 legacy.afLatencyMs = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.afLatencyMs));
Robert Wu310037a2022-09-06 21:48:18 +0000142 legacy.afChannelMask = VALUE_OR_RETURN(
143 aidl2legacy_AudioChannelLayout_audio_channel_mask_t(aidl.afChannelMask,
144 false /*isInput*/));
145 legacy.afFormat = VALUE_OR_RETURN(
146 aidl2legacy_AudioFormatDescription_audio_format_t(aidl.afFormat));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800147 legacy.outputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.outputId));
148 legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800149 legacy.audioTrack = aidl.audioTrack;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800150 return legacy;
151}
152
153ConversionResult<media::CreateRecordRequest>
154IAudioFlinger::CreateRecordInput::toAidl() const {
155 media::CreateRecordRequest aidl;
Mikhail Naganovf094be22023-05-17 11:48:43 -0700156 aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributes(attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700157 aidl.config = VALUE_OR_RETURN(
158 legacy2aidl_audio_config_base_t_AudioConfigBase(config, true /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -0800159 aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800160 aidl.riid = VALUE_OR_RETURN(legacy2aidl_audio_unique_id_t_int32_t(riid));
Eric Laurentec376dc2021-04-08 20:41:22 +0200161 aidl.maxSharedAudioHistoryMs = VALUE_OR_RETURN(
162 convertIntegral<int32_t>(maxSharedAudioHistoryMs));
Andy Hung973638a2020-12-08 20:47:45 -0800163 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800164 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
165 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
166 aidl.selectedDeviceId = VALUE_OR_RETURN(
167 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
168 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
169 return aidl;
170}
171
172ConversionResult<IAudioFlinger::CreateRecordInput>
173IAudioFlinger::CreateRecordInput::fromAidl(
174 const media::CreateRecordRequest& aidl) {
175 IAudioFlinger::CreateRecordInput legacy;
Eric Laurentec376dc2021-04-08 20:41:22 +0200176 legacy.attr = VALUE_OR_RETURN(
Mikhail Naganovf094be22023-05-17 11:48:43 -0700177 aidl2legacy_AudioAttributes_audio_attributes_t(aidl.attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700178 legacy.config = VALUE_OR_RETURN(
179 aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config, true /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -0800180 legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800181 legacy.riid = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_unique_id_t(aidl.riid));
Eric Laurentec376dc2021-04-08 20:41:22 +0200182 legacy.maxSharedAudioHistoryMs = VALUE_OR_RETURN(
183 convertIntegral<int32_t>(aidl.maxSharedAudioHistoryMs));
Andy Hung973638a2020-12-08 20:47:45 -0800184 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800185 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
186 legacy.notificationFrameCount = VALUE_OR_RETURN(
187 convertIntegral<size_t>(aidl.notificationFrameCount));
188 legacy.selectedDeviceId = VALUE_OR_RETURN(
189 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
190 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
191 return legacy;
192}
193
194ConversionResult<media::CreateRecordResponse>
195IAudioFlinger::CreateRecordOutput::toAidl() const {
196 media::CreateRecordResponse aidl;
Andy Hung973638a2020-12-08 20:47:45 -0800197 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800198 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
199 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
200 aidl.selectedDeviceId = VALUE_OR_RETURN(
201 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
202 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
203 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
204 aidl.inputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(inputId));
205 aidl.cblk = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(cblk));
206 aidl.buffers = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(buffers));
207 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800208 aidl.audioRecord = audioRecord;
jiabinb00edc32021-08-16 16:27:54 +0000209 aidl.serverConfig = VALUE_OR_RETURN(
210 legacy2aidl_audio_config_base_t_AudioConfigBase(serverConfig, true /*isInput*/));
Robert Wu310037a2022-09-06 21:48:18 +0000211 aidl.halConfig = VALUE_OR_RETURN(
212 legacy2aidl_audio_config_base_t_AudioConfigBase(halConfig, true /*isInput*/));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800213 return aidl;
214}
215
216ConversionResult<IAudioFlinger::CreateRecordOutput>
217IAudioFlinger::CreateRecordOutput::fromAidl(
218 const media::CreateRecordResponse& aidl) {
219 IAudioFlinger::CreateRecordOutput legacy;
Andy Hung973638a2020-12-08 20:47:45 -0800220 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800221 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
222 legacy.notificationFrameCount = VALUE_OR_RETURN(
223 convertIntegral<size_t>(aidl.notificationFrameCount));
224 legacy.selectedDeviceId = VALUE_OR_RETURN(
225 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
226 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
227 legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
228 legacy.inputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.inputId));
229 legacy.cblk = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.cblk));
230 legacy.buffers = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.buffers));
231 legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800232 legacy.audioRecord = aidl.audioRecord;
jiabinb00edc32021-08-16 16:27:54 +0000233 legacy.serverConfig = VALUE_OR_RETURN(
234 aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.serverConfig, true /*isInput*/));
Robert Wu310037a2022-09-06 21:48:18 +0000235 legacy.halConfig = VALUE_OR_RETURN(
236 aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.halConfig, true /*isInput*/));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800237 return legacy;
238}
Eric Laurent42896a02019-09-27 15:40:33 -0700239
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800240////////////////////////////////////////////////////////////////////////////////////////////////////
241// AudioFlingerClientAdapter
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800242
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800243AudioFlingerClientAdapter::AudioFlingerClientAdapter(
244 const sp<media::IAudioFlingerService> delegate) : mDelegate(delegate) {}
Eric Laurent21da6472017-11-09 16:29:26 -0800245
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800246status_t AudioFlingerClientAdapter::createTrack(const media::CreateTrackRequest& input,
247 media::CreateTrackResponse& output) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800248 return statusTFromBinderStatus(mDelegate->createTrack(input, &output));
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800249}
250
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800251status_t AudioFlingerClientAdapter::createRecord(const media::CreateRecordRequest& input,
252 media::CreateRecordResponse& output) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800253 return statusTFromBinderStatus(mDelegate->createRecord(input, &output));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800254}
255
256uint32_t AudioFlingerClientAdapter::sampleRate(audio_io_handle_t ioHandle) const {
257 auto result = [&]() -> ConversionResult<uint32_t> {
258 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
259 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800260 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->sampleRate(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800261 return convertIntegral<uint32_t>(aidlRet);
262 }();
263 // Failure is ignored.
264 return result.value_or(0);
265}
266
267audio_format_t AudioFlingerClientAdapter::format(audio_io_handle_t output) const {
268 auto result = [&]() -> ConversionResult<audio_format_t> {
269 int32_t outputAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output));
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700270 AudioFormatDescription aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800271 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->format(outputAidl, &aidlRet)));
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700272 return aidl2legacy_AudioFormatDescription_audio_format_t(aidlRet);
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800273 }();
274 return result.value_or(AUDIO_FORMAT_INVALID);
275}
276
277size_t AudioFlingerClientAdapter::frameCount(audio_io_handle_t ioHandle) const {
278 auto result = [&]() -> ConversionResult<size_t> {
279 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
280 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800281 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->frameCount(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800282 return convertIntegral<size_t>(aidlRet);
283 }();
284 // Failure is ignored.
285 return result.value_or(0);
286}
287
288uint32_t AudioFlingerClientAdapter::latency(audio_io_handle_t output) const {
289 auto result = [&]() -> ConversionResult<uint32_t> {
290 int32_t outputAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output));
291 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800292 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->latency(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800293 return convertIntegral<uint32_t>(aidlRet);
294 }();
295 // Failure is ignored.
296 return result.value_or(0);
297}
298
299status_t AudioFlingerClientAdapter::setMasterVolume(float value) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800300 return statusTFromBinderStatus(mDelegate->setMasterVolume(value));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800301}
302
303status_t AudioFlingerClientAdapter::setMasterMute(bool muted) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800304 return statusTFromBinderStatus(mDelegate->setMasterMute(muted));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800305}
306
307float AudioFlingerClientAdapter::masterVolume() const {
308 auto result = [&]() -> ConversionResult<float> {
309 float aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800310 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterVolume(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800311 return aidlRet;
312 }();
313 // Failure is ignored.
314 return result.value_or(0.f);
315}
316
317bool AudioFlingerClientAdapter::masterMute() const {
318 auto result = [&]() -> ConversionResult<bool> {
319 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800320 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterMute(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800321 return aidlRet;
322 }();
323 // Failure is ignored.
324 return result.value_or(false);
325}
326
327status_t AudioFlingerClientAdapter::setMasterBalance(float balance) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800328 return statusTFromBinderStatus(mDelegate->setMasterBalance(balance));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800329}
330
331status_t AudioFlingerClientAdapter::getMasterBalance(float* balance) const{
Andy Hung1131b6e2020-12-08 20:47:45 -0800332 return statusTFromBinderStatus(mDelegate->getMasterBalance(balance));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800333}
334
335status_t AudioFlingerClientAdapter::setStreamVolume(audio_stream_type_t stream, float value,
336 audio_io_handle_t output) {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700337 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800338 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
339 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800340 return statusTFromBinderStatus(mDelegate->setStreamVolume(streamAidl, value, outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800341}
342
343status_t AudioFlingerClientAdapter::setStreamMute(audio_stream_type_t stream, bool muted) {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700344 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800345 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
Andy Hung1131b6e2020-12-08 20:47:45 -0800346 return statusTFromBinderStatus(mDelegate->setStreamMute(streamAidl, muted));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800347}
348
349float AudioFlingerClientAdapter::streamVolume(audio_stream_type_t stream,
350 audio_io_handle_t output) const {
351 auto result = [&]() -> ConversionResult<float> {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700352 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800353 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
354 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
355 float aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800356 RETURN_IF_ERROR(statusTFromBinderStatus(
357 mDelegate->streamVolume(streamAidl, outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800358 return aidlRet;
359 }();
360 // Failure is ignored.
361 return result.value_or(0.f);
362}
363
364bool AudioFlingerClientAdapter::streamMute(audio_stream_type_t stream) const {
365 auto result = [&]() -> ConversionResult<bool> {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700366 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800367 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
368 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800369 RETURN_IF_ERROR(statusTFromBinderStatus(
370 mDelegate->streamMute(streamAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800371 return aidlRet;
372 }();
373 // Failure is ignored.
374 return result.value_or(false);
375}
376
377status_t AudioFlingerClientAdapter::setMode(audio_mode_t mode) {
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700378 AudioMode modeAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_mode_t_AudioMode(mode));
Andy Hung1131b6e2020-12-08 20:47:45 -0800379 return statusTFromBinderStatus(mDelegate->setMode(modeAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800380}
381
382status_t AudioFlingerClientAdapter::setMicMute(bool state) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800383 return statusTFromBinderStatus(mDelegate->setMicMute(state));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800384}
385
386bool AudioFlingerClientAdapter::getMicMute() const {
387 auto result = [&]() -> ConversionResult<bool> {
388 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800389 RETURN_IF_ERROR(statusTFromBinderStatus(
390 mDelegate->getMicMute(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800391 return aidlRet;
392 }();
393 // Failure is ignored.
394 return result.value_or(false);
395}
396
397void AudioFlingerClientAdapter::setRecordSilenced(audio_port_handle_t portId, bool silenced) {
398 auto result = [&]() -> status_t {
399 int32_t portIdAidl = VALUE_OR_RETURN_STATUS(
400 legacy2aidl_audio_port_handle_t_int32_t(portId));
Andy Hung1131b6e2020-12-08 20:47:45 -0800401 return statusTFromBinderStatus(mDelegate->setRecordSilenced(portIdAidl, silenced));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800402 }();
403 // Failure is ignored.
404 (void) result;
405}
406
407status_t AudioFlingerClientAdapter::setParameters(audio_io_handle_t ioHandle,
408 const String8& keyValuePairs) {
409 int32_t ioHandleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
410 std::string keyValuePairsAidl = VALUE_OR_RETURN_STATUS(
411 legacy2aidl_String8_string(keyValuePairs));
Andy Hung1131b6e2020-12-08 20:47:45 -0800412 return statusTFromBinderStatus(mDelegate->setParameters(ioHandleAidl, keyValuePairsAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800413}
414
415String8 AudioFlingerClientAdapter::getParameters(audio_io_handle_t ioHandle, const String8& keys)
416const {
417 auto result = [&]() -> ConversionResult<String8> {
418 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
419 std::string keysAidl = VALUE_OR_RETURN(legacy2aidl_String8_string(keys));
420 std::string aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800421 RETURN_IF_ERROR(statusTFromBinderStatus(
422 mDelegate->getParameters(ioHandleAidl, keysAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800423 return aidl2legacy_string_view_String8(aidlRet);
424 }();
425 // Failure is ignored.
426 return result.value_or(String8());
427}
428
429void AudioFlingerClientAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
430 mDelegate->registerClient(client);
431 // Failure is ignored.
432}
433
434size_t AudioFlingerClientAdapter::getInputBufferSize(uint32_t sampleRate, audio_format_t format,
435 audio_channel_mask_t channelMask) const {
436 auto result = [&]() -> ConversionResult<size_t> {
437 int32_t sampleRateAidl = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700438 AudioFormatDescription formatAidl = VALUE_OR_RETURN(
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700439 legacy2aidl_audio_format_t_AudioFormatDescription(format));
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700440 AudioChannelLayout channelMaskAidl = VALUE_OR_RETURN(
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700441 legacy2aidl_audio_channel_mask_t_AudioChannelLayout(channelMask, true /*isInput*/));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800442 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800443 RETURN_IF_ERROR(statusTFromBinderStatus(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800444 mDelegate->getInputBufferSize(sampleRateAidl, formatAidl, channelMaskAidl,
Andy Hung1131b6e2020-12-08 20:47:45 -0800445 &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800446 return convertIntegral<size_t>(aidlRet);
447 }();
448 // Failure is ignored.
449 return result.value_or(0);
450}
451
452status_t AudioFlingerClientAdapter::openOutput(const media::OpenOutputRequest& request,
453 media::OpenOutputResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800454 return statusTFromBinderStatus(mDelegate->openOutput(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800455}
456
457audio_io_handle_t AudioFlingerClientAdapter::openDuplicateOutput(audio_io_handle_t output1,
458 audio_io_handle_t output2) {
459 auto result = [&]() -> ConversionResult<audio_io_handle_t> {
460 int32_t output1Aidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output1));
461 int32_t output2Aidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output2));
462 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800463 RETURN_IF_ERROR(statusTFromBinderStatus(
464 mDelegate->openDuplicateOutput(output1Aidl, output2Aidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800465 return aidl2legacy_int32_t_audio_io_handle_t(aidlRet);
466 }();
467 // Failure is ignored.
468 return result.value_or(0);
469}
470
471status_t AudioFlingerClientAdapter::closeOutput(audio_io_handle_t output) {
472 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800473 return statusTFromBinderStatus(mDelegate->closeOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800474}
475
476status_t AudioFlingerClientAdapter::suspendOutput(audio_io_handle_t output) {
477 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800478 return statusTFromBinderStatus(mDelegate->suspendOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800479}
480
481status_t AudioFlingerClientAdapter::restoreOutput(audio_io_handle_t output) {
482 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800483 return statusTFromBinderStatus(mDelegate->restoreOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800484}
485
486status_t AudioFlingerClientAdapter::openInput(const media::OpenInputRequest& request,
487 media::OpenInputResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800488 return statusTFromBinderStatus(mDelegate->openInput(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800489}
490
491status_t AudioFlingerClientAdapter::closeInput(audio_io_handle_t input) {
492 int32_t inputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(input));
Andy Hung1131b6e2020-12-08 20:47:45 -0800493 return statusTFromBinderStatus(mDelegate->closeInput(inputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800494}
495
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800496status_t AudioFlingerClientAdapter::setVoiceVolume(float volume) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800497 return statusTFromBinderStatus(mDelegate->setVoiceVolume(volume));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800498}
499
500status_t AudioFlingerClientAdapter::getRenderPosition(uint32_t* halFrames, uint32_t* dspFrames,
501 audio_io_handle_t output) const {
502 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
503 media::RenderPosition aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800504 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
505 mDelegate->getRenderPosition(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800506 if (halFrames != nullptr) {
507 *halFrames = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet.halFrames));
508 }
509 if (dspFrames != nullptr) {
510 *dspFrames = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet.dspFrames));
511 }
512 return OK;
513}
514
515uint32_t AudioFlingerClientAdapter::getInputFramesLost(audio_io_handle_t ioHandle) const {
516 auto result = [&]() -> ConversionResult<uint32_t> {
517 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
518 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800519 RETURN_IF_ERROR(statusTFromBinderStatus(
520 mDelegate->getInputFramesLost(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800521 return convertIntegral<uint32_t>(aidlRet);
522 }();
523 // Failure is ignored.
524 return result.value_or(0);
525}
526
527audio_unique_id_t AudioFlingerClientAdapter::newAudioUniqueId(audio_unique_id_use_t use) {
528 auto result = [&]() -> ConversionResult<audio_unique_id_t> {
529 media::AudioUniqueIdUse useAidl = VALUE_OR_RETURN(
530 legacy2aidl_audio_unique_id_use_t_AudioUniqueIdUse(use));
531 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800532 RETURN_IF_ERROR(statusTFromBinderStatus(
533 mDelegate->newAudioUniqueId(useAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800534 return aidl2legacy_int32_t_audio_unique_id_t(aidlRet);
535 }();
536 return result.value_or(AUDIO_UNIQUE_ID_ALLOCATE);
537}
538
539void AudioFlingerClientAdapter::acquireAudioSessionId(audio_session_t audioSession, pid_t pid,
540 uid_t uid) {
541 [&]() -> status_t {
542 int32_t audioSessionAidl = VALUE_OR_RETURN_STATUS(
543 legacy2aidl_audio_session_t_int32_t(audioSession));
544 int32_t pidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(pid));
545 int32_t uidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(uid));
Andy Hung1131b6e2020-12-08 20:47:45 -0800546 return statusTFromBinderStatus(
547 mDelegate->acquireAudioSessionId(audioSessionAidl, pidAidl, uidAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800548 }();
549 // Failure is ignored.
550}
551
552void AudioFlingerClientAdapter::releaseAudioSessionId(audio_session_t audioSession, pid_t pid) {
553 [&]() -> status_t {
554 int32_t audioSessionAidl = VALUE_OR_RETURN_STATUS(
555 legacy2aidl_audio_session_t_int32_t(audioSession));
556 int32_t pidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(pid));
Andy Hung1131b6e2020-12-08 20:47:45 -0800557 return statusTFromBinderStatus(
558 mDelegate->releaseAudioSessionId(audioSessionAidl, pidAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800559 }();
560 // Failure is ignored.
561}
562
563status_t AudioFlingerClientAdapter::queryNumberEffects(uint32_t* numEffects) const {
564 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800565 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
566 mDelegate->queryNumberEffects(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800567 if (numEffects != nullptr) {
568 *numEffects = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet));
569 }
570 return OK;
571}
572
573status_t
574AudioFlingerClientAdapter::queryEffect(uint32_t index, effect_descriptor_t* pDescriptor) const {
575 int32_t indexAidl = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(index));
576 media::EffectDescriptor aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800577 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
578 mDelegate->queryEffect(indexAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800579 if (pDescriptor != nullptr) {
580 *pDescriptor = VALUE_OR_RETURN_STATUS(
581 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
582 }
583 return OK;
584}
585
586status_t AudioFlingerClientAdapter::getEffectDescriptor(const effect_uuid_t* pEffectUUID,
587 const effect_uuid_t* pTypeUUID,
588 uint32_t preferredTypeFlag,
589 effect_descriptor_t* pDescriptor) const {
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700590 AudioUuid effectUuidAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800591 legacy2aidl_audio_uuid_t_AudioUuid(*pEffectUUID));
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700592 AudioUuid typeUuidAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800593 legacy2aidl_audio_uuid_t_AudioUuid(*pTypeUUID));
594 int32_t preferredTypeFlagAidl = VALUE_OR_RETURN_STATUS(
595 convertReinterpret<int32_t>(preferredTypeFlag));
596 media::EffectDescriptor aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800597 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800598 mDelegate->getEffectDescriptor(effectUuidAidl, typeUuidAidl, preferredTypeFlagAidl,
Andy Hung1131b6e2020-12-08 20:47:45 -0800599 &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800600 if (pDescriptor != nullptr) {
601 *pDescriptor = VALUE_OR_RETURN_STATUS(
602 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
603 }
604 return OK;
605}
606
607status_t AudioFlingerClientAdapter::createEffect(const media::CreateEffectRequest& request,
608 media::CreateEffectResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800609 return statusTFromBinderStatus(mDelegate->createEffect(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800610}
611
612status_t
613AudioFlingerClientAdapter::moveEffects(audio_session_t session, audio_io_handle_t srcOutput,
614 audio_io_handle_t dstOutput) {
615 int32_t sessionAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_session_t_int32_t(session));
616 int32_t srcOutputAidl = VALUE_OR_RETURN_STATUS(
617 legacy2aidl_audio_io_handle_t_int32_t(srcOutput));
618 int32_t dstOutputAidl = VALUE_OR_RETURN_STATUS(
619 legacy2aidl_audio_io_handle_t_int32_t(dstOutput));
Andy Hung1131b6e2020-12-08 20:47:45 -0800620 return statusTFromBinderStatus(
621 mDelegate->moveEffects(sessionAidl, srcOutputAidl, dstOutputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800622}
623
624void AudioFlingerClientAdapter::setEffectSuspended(int effectId,
625 audio_session_t sessionId,
626 bool suspended) {
627 [&]() -> status_t {
628 int32_t effectIdAidl = VALUE_OR_RETURN_STATUS(convertReinterpret<int32_t>(effectId));
629 int32_t sessionIdAidl = VALUE_OR_RETURN_STATUS(
630 legacy2aidl_audio_session_t_int32_t(sessionId));
Andy Hung1131b6e2020-12-08 20:47:45 -0800631 return statusTFromBinderStatus(
632 mDelegate->setEffectSuspended(effectIdAidl, sessionIdAidl, suspended));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800633 }();
634 // Failure is ignored.
635}
636
637audio_module_handle_t AudioFlingerClientAdapter::loadHwModule(const char* name) {
638 auto result = [&]() -> ConversionResult<audio_module_handle_t> {
639 std::string nameAidl(name);
640 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800641 RETURN_IF_ERROR(statusTFromBinderStatus(
642 mDelegate->loadHwModule(nameAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800643 return aidl2legacy_int32_t_audio_module_handle_t(aidlRet);
644 }();
645 // Failure is ignored.
646 return result.value_or(0);
647}
648
Andy Hung8b99ea32023-07-17 11:37:26 -0700649uint32_t AudioFlingerClientAdapter::getPrimaryOutputSamplingRate() const {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800650 auto result = [&]() -> ConversionResult<uint32_t> {
651 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800652 RETURN_IF_ERROR(statusTFromBinderStatus(
653 mDelegate->getPrimaryOutputSamplingRate(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800654 return convertIntegral<uint32_t>(aidlRet);
655 }();
656 // Failure is ignored.
657 return result.value_or(0);
658}
659
Andy Hung8b99ea32023-07-17 11:37:26 -0700660size_t AudioFlingerClientAdapter::getPrimaryOutputFrameCount() const {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800661 auto result = [&]() -> ConversionResult<size_t> {
662 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800663 RETURN_IF_ERROR(statusTFromBinderStatus(
664 mDelegate->getPrimaryOutputFrameCount(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800665 return convertIntegral<size_t>(aidlRet);
666 }();
667 // Failure is ignored.
668 return result.value_or(0);
669}
670
671status_t AudioFlingerClientAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800672 return statusTFromBinderStatus(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800673}
674
Andy Hung8b99ea32023-07-17 11:37:26 -0700675status_t AudioFlingerClientAdapter::getAudioPort(struct audio_port_v7* port) const {
Atneya Nair638a6e42022-12-18 16:45:15 -0800676 media::AudioPortFw portAidl = VALUE_OR_RETURN_STATUS(
Mikhail Naganov87227252023-01-13 17:38:10 -0800677 legacy2aidl_audio_port_v7_AudioPortFw(*port));
Atneya Nair638a6e42022-12-18 16:45:15 -0800678 media::AudioPortFw aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800679 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
680 mDelegate->getAudioPort(portAidl, &aidlRet)));
Mikhail Naganov87227252023-01-13 17:38:10 -0800681 *port = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioPortFw_audio_port_v7(aidlRet));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800682 return OK;
683}
684
685status_t AudioFlingerClientAdapter::createAudioPatch(const struct audio_patch* patch,
686 audio_patch_handle_t* handle) {
Atneya Nair3afdbd12022-12-18 16:14:18 -0800687 media::AudioPatchFw patchAidl = VALUE_OR_RETURN_STATUS(
Mikhail Naganov87227252023-01-13 17:38:10 -0800688 legacy2aidl_audio_patch_AudioPatchFw(*patch));
Kuowei Li247a3672021-07-21 21:46:07 +0800689 int32_t aidlRet = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(
690 AUDIO_PATCH_HANDLE_NONE));
691 if (handle != nullptr) {
692 aidlRet = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(*handle));
693 }
Andy Hung1131b6e2020-12-08 20:47:45 -0800694 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
695 mDelegate->createAudioPatch(patchAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800696 if (handle != nullptr) {
697 *handle = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_patch_handle_t(aidlRet));
698 }
699 return OK;
700}
701
702status_t AudioFlingerClientAdapter::releaseAudioPatch(audio_patch_handle_t handle) {
703 int32_t handleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(handle));
Andy Hung1131b6e2020-12-08 20:47:45 -0800704 return statusTFromBinderStatus(mDelegate->releaseAudioPatch(handleAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800705}
706
707status_t AudioFlingerClientAdapter::listAudioPatches(unsigned int* num_patches,
Andy Hung8b99ea32023-07-17 11:37:26 -0700708 struct audio_patch* patches) const {
Atneya Nair3afdbd12022-12-18 16:14:18 -0800709 std::vector<media::AudioPatchFw> aidlRet;
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800710 int32_t maxPatches = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(*num_patches));
Andy Hung1131b6e2020-12-08 20:47:45 -0800711 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
712 mDelegate->listAudioPatches(maxPatches, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800713 *num_patches = VALUE_OR_RETURN_STATUS(convertIntegral<unsigned int>(aidlRet.size()));
714 return convertRange(aidlRet.begin(), aidlRet.end(), patches,
Mikhail Naganov87227252023-01-13 17:38:10 -0800715 aidl2legacy_AudioPatchFw_audio_patch);
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800716}
717
718status_t AudioFlingerClientAdapter::setAudioPortConfig(const struct audio_port_config* config) {
Atneya Nair7a9594f2022-12-18 17:26:26 -0800719 media::AudioPortConfigFw configAidl = VALUE_OR_RETURN_STATUS(
Mikhail Naganov87227252023-01-13 17:38:10 -0800720 legacy2aidl_audio_port_config_AudioPortConfigFw(*config));
Andy Hung1131b6e2020-12-08 20:47:45 -0800721 return statusTFromBinderStatus(mDelegate->setAudioPortConfig(configAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800722}
723
724audio_hw_sync_t AudioFlingerClientAdapter::getAudioHwSyncForSession(audio_session_t sessionId) {
725 auto result = [&]() -> ConversionResult<audio_hw_sync_t> {
726 int32_t sessionIdAidl = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
727 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800728 RETURN_IF_ERROR(statusTFromBinderStatus(
729 mDelegate->getAudioHwSyncForSession(sessionIdAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800730 return aidl2legacy_int32_t_audio_hw_sync_t(aidlRet);
731 }();
732 return result.value_or(AUDIO_HW_SYNC_INVALID);
733}
734
735status_t AudioFlingerClientAdapter::systemReady() {
Andy Hung1131b6e2020-12-08 20:47:45 -0800736 return statusTFromBinderStatus(mDelegate->systemReady());
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800737}
738
Eric Laurentd66d7a12021-07-13 13:35:32 +0200739status_t AudioFlingerClientAdapter::audioPolicyReady() {
740 return statusTFromBinderStatus(mDelegate->audioPolicyReady());
741}
742
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800743size_t AudioFlingerClientAdapter::frameCountHAL(audio_io_handle_t ioHandle) const {
744 auto result = [&]() -> ConversionResult<size_t> {
745 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
746 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800747 RETURN_IF_ERROR(statusTFromBinderStatus(
748 mDelegate->frameCountHAL(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800749 return convertIntegral<size_t>(aidlRet);
750 }();
751 // Failure is ignored.
752 return result.value_or(0);
753}
754
755status_t
Andy Hung8b99ea32023-07-17 11:37:26 -0700756AudioFlingerClientAdapter::getMicrophones(
757 std::vector<media::MicrophoneInfoFw>* microphones) const {
Mikhail Naganovd5d9de72023-02-13 11:45:03 -0800758 std::vector<media::MicrophoneInfoFw> aidlRet;
759 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mDelegate->getMicrophones(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800760 if (microphones != nullptr) {
Mikhail Naganovd5d9de72023-02-13 11:45:03 -0800761 *microphones = std::move(aidlRet);
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800762 }
763 return OK;
764}
765
766status_t AudioFlingerClientAdapter::setAudioHalPids(const std::vector<pid_t>& pids) {
767 std::vector<int32_t> pidsAidl = VALUE_OR_RETURN_STATUS(
768 convertContainer<std::vector<int32_t>>(pids, legacy2aidl_pid_t_int32_t));
Andy Hung1131b6e2020-12-08 20:47:45 -0800769 return statusTFromBinderStatus(mDelegate->setAudioHalPids(pidsAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800770}
771
jiabin1319f5a2021-03-30 22:21:24 +0000772status_t AudioFlingerClientAdapter::setVibratorInfos(
773 const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
774 return statusTFromBinderStatus(mDelegate->setVibratorInfos(vibratorInfos));
775}
776
jiabin10a03f12021-05-07 23:46:28 +0000777status_t AudioFlingerClientAdapter::updateSecondaryOutputs(
778 const TrackSecondaryOutputsMap& trackSecondaryOutputs) {
779 std::vector<media::TrackSecondaryOutputInfo> trackSecondaryOutputInfos =
780 VALUE_OR_RETURN_STATUS(
781 convertContainer<std::vector<media::TrackSecondaryOutputInfo>>(
782 trackSecondaryOutputs,
783 legacy2aidl_TrackSecondaryOutputInfoPair_TrackSecondaryOutputInfo));
784 return statusTFromBinderStatus(mDelegate->updateSecondaryOutputs(trackSecondaryOutputInfos));
785}
786
Jiabin Huangebe64102021-09-07 20:01:07 +0000787status_t AudioFlingerClientAdapter::getMmapPolicyInfos(
jiabine99d0882021-09-17 05:21:25 +0000788 AudioMMapPolicyType policyType, std::vector<AudioMMapPolicyInfo> *policyInfos) {
Jiabin Huangebe64102021-09-07 20:01:07 +0000789 return statusTFromBinderStatus(mDelegate->getMmapPolicyInfos(policyType, policyInfos));
790}
791
Andy Hung8b99ea32023-07-17 11:37:26 -0700792int32_t AudioFlingerClientAdapter::getAAudioMixerBurstCount() const {
jiabine504e7b2021-09-18 00:27:08 +0000793 auto result = [&]() -> ConversionResult<int32_t> {
794 int32_t aidlRet;
795 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->getAAudioMixerBurstCount(&aidlRet)));
796 return convertIntegral<int32_t>(aidlRet);
797 }();
798 // Failure is ignored.
799 return result.value_or(0);
800}
801
Andy Hung8b99ea32023-07-17 11:37:26 -0700802int32_t AudioFlingerClientAdapter::getAAudioHardwareBurstMinUsec() const {
jiabine504e7b2021-09-18 00:27:08 +0000803 auto result = [&]() -> ConversionResult<int32_t> {
804 int32_t aidlRet;
805 RETURN_IF_ERROR(statusTFromBinderStatus(
806 mDelegate->getAAudioHardwareBurstMinUsec(&aidlRet)));
807 return convertIntegral<int32_t>(aidlRet);
808 }();
809 // Failure is ignored.
810 return result.value_or(0);
811}
812
Mikhail Naganov516d3982022-02-01 23:53:59 +0000813status_t AudioFlingerClientAdapter::setDeviceConnectedState(
jiabinc0048632023-04-27 22:04:31 +0000814 const struct audio_port_v7 *port, media::DeviceConnectedState state) {
Atneya Nair638a6e42022-12-18 16:45:15 -0800815 media::AudioPortFw aidlPort = VALUE_OR_RETURN_STATUS(
Mikhail Naganov87227252023-01-13 17:38:10 -0800816 legacy2aidl_audio_port_v7_AudioPortFw(*port));
jiabinc0048632023-04-27 22:04:31 +0000817 return statusTFromBinderStatus(mDelegate->setDeviceConnectedState(aidlPort, state));
Mikhail Naganov516d3982022-02-01 23:53:59 +0000818}
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800819
Mikhail Naganovb1ddbb02023-03-15 17:06:59 -0700820status_t AudioFlingerClientAdapter::setSimulateDeviceConnections(bool enabled) {
821 return statusTFromBinderStatus(mDelegate->setSimulateDeviceConnections(enabled));
822}
823
Eric Laurent076e7c72022-05-03 18:12:28 +0200824status_t AudioFlingerClientAdapter::setRequestedLatencyMode(
825 audio_io_handle_t output, audio_latency_mode_t mode) {
826 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Mikhail Naganovf53e1822022-12-18 02:48:14 +0000827 media::audio::common::AudioLatencyMode modeAidl = VALUE_OR_RETURN_STATUS(
828 legacy2aidl_audio_latency_mode_t_AudioLatencyMode(mode));
Eric Laurent076e7c72022-05-03 18:12:28 +0200829 return statusTFromBinderStatus(mDelegate->setRequestedLatencyMode(outputAidl, modeAidl));
830}
831
832status_t AudioFlingerClientAdapter::getSupportedLatencyModes(
Andy Hung8b99ea32023-07-17 11:37:26 -0700833 audio_io_handle_t output, std::vector<audio_latency_mode_t>* modes) const {
Eric Laurent076e7c72022-05-03 18:12:28 +0200834 if (modes == nullptr) {
835 return BAD_VALUE;
836 }
837
838 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Mikhail Naganovf53e1822022-12-18 02:48:14 +0000839 std::vector<media::audio::common::AudioLatencyMode> modesAidl;
Eric Laurent076e7c72022-05-03 18:12:28 +0200840
841 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
842 mDelegate->getSupportedLatencyModes(outputAidl, &modesAidl)));
843
844 *modes = VALUE_OR_RETURN_STATUS(
845 convertContainer<std::vector<audio_latency_mode_t>>(modesAidl,
Mikhail Naganovf53e1822022-12-18 02:48:14 +0000846 aidl2legacy_AudioLatencyMode_audio_latency_mode_t));
Eric Laurent076e7c72022-05-03 18:12:28 +0200847
848 return NO_ERROR;
849}
850
Eric Laurent50d72582022-12-20 20:20:23 +0100851status_t AudioFlingerClientAdapter::setBluetoothVariableLatencyEnabled(bool enabled) {
852 return statusTFromBinderStatus(mDelegate->setBluetoothVariableLatencyEnabled(enabled));
Eric Laurent52057642022-12-16 11:45:07 +0100853}
854
Andy Hung8b99ea32023-07-17 11:37:26 -0700855status_t AudioFlingerClientAdapter::isBluetoothVariableLatencyEnabled(bool* enabled) const {
Eric Laurent50d72582022-12-20 20:20:23 +0100856 if (enabled == nullptr) {
857 return BAD_VALUE;
858 }
859
860 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
861 mDelegate->isBluetoothVariableLatencyEnabled(enabled)));
862
863 return NO_ERROR;
864}
865
Andy Hung8b99ea32023-07-17 11:37:26 -0700866status_t AudioFlingerClientAdapter::supportsBluetoothVariableLatency(bool* support) const {
Eric Laurent52057642022-12-16 11:45:07 +0100867 if (support == nullptr) {
868 return BAD_VALUE;
869 }
870
871 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
Eric Laurent50d72582022-12-20 20:20:23 +0100872 mDelegate->supportsBluetoothVariableLatency(support)));
Eric Laurent52057642022-12-16 11:45:07 +0100873
874 return NO_ERROR;
875}
876
Vlad Popae3fd1c22022-11-07 21:03:18 +0100877status_t AudioFlingerClientAdapter::getSoundDoseInterface(
878 const sp<media::ISoundDoseCallback> &callback,
Andy Hung8b99ea32023-07-17 11:37:26 -0700879 sp<media::ISoundDose>* soundDose) const {
Vlad Popae3fd1c22022-11-07 21:03:18 +0100880 return statusTFromBinderStatus(mDelegate->getSoundDoseInterface(callback, soundDose));
Vlad Popa63f047e2022-11-05 14:09:19 +0100881}
882
jiabinc44b3462022-12-08 12:52:31 -0800883status_t AudioFlingerClientAdapter::invalidateTracks(
884 const std::vector<audio_port_handle_t>& portIds) {
885 std::vector<int32_t> portIdsAidl = VALUE_OR_RETURN_STATUS(
886 convertContainer<std::vector<int32_t>>(
887 portIds, legacy2aidl_audio_port_handle_t_int32_t));
888 return statusTFromBinderStatus(mDelegate->invalidateTracks(portIdsAidl));
889}
890
Mikhail Naganovffd97712023-05-03 17:45:36 -0700891status_t AudioFlingerClientAdapter::getAudioPolicyConfig(media::AudioPolicyConfig *config) {
892 if (config == nullptr) {
893 return BAD_VALUE;
894 }
895
896 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mDelegate->getAudioPolicyConfig(config)));
897
898 return NO_ERROR;
899}
900
jiabin12537fc2023-10-12 17:56:08 +0000901status_t AudioFlingerClientAdapter::getAudioMixPort(const struct audio_port_v7 *devicePort,
902 struct audio_port_v7 *mixPort) const {
903 if (devicePort == nullptr || mixPort == nullptr) {
904 return BAD_VALUE;
905 }
906 media::AudioPortFw devicePortAidl = VALUE_OR_RETURN_STATUS(
907 legacy2aidl_audio_port_v7_AudioPortFw(*devicePort));
908 media::AudioPortFw mixPortAidl = VALUE_OR_RETURN_STATUS(
909 legacy2aidl_audio_port_v7_AudioPortFw(*mixPort));
910 media::AudioPortFw aidlRet;
911 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
912 mDelegate->getAudioMixPort(devicePortAidl, mixPortAidl, &aidlRet)));
913 *mixPort = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioPortFw_audio_port_v7(aidlRet));
914 return OK;
915}
916
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800917////////////////////////////////////////////////////////////////////////////////////////////////////
918// AudioFlingerServerAdapter
919AudioFlingerServerAdapter::AudioFlingerServerAdapter(
Andy Hung225aef62022-12-06 16:33:20 -0800920 const sp<AudioFlingerServerAdapter::Delegate>& delegate) : mDelegate(delegate) {
921 setMinSchedulerPolicy(SCHED_NORMAL, ANDROID_PRIORITY_AUDIO);
922}
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800923
Ytai Ben-Tsvi24b33fc2021-05-10 13:08:11 -0700924status_t AudioFlingerServerAdapter::onTransact(uint32_t code,
925 const Parcel& data,
926 Parcel* reply,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800927 uint32_t flags) {
Ytai Ben-Tsvi24b33fc2021-05-10 13:08:11 -0700928 return mDelegate->onTransactWrapper(static_cast<Delegate::TransactionCode>(code),
929 data,
930 flags,
931 [&] {
932 return BnAudioFlingerService::onTransact(
933 code,
934 data,
935 reply,
936 flags);
937 });
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800938}
939
940status_t AudioFlingerServerAdapter::dump(int fd, const Vector<String16>& args) {
941 return mDelegate->dump(fd, args);
942}
943
944Status AudioFlingerServerAdapter::createTrack(const media::CreateTrackRequest& request,
945 media::CreateTrackResponse* _aidl_return) {
946 return Status::fromStatusT(mDelegate->createTrack(request, *_aidl_return));
947}
948
949Status AudioFlingerServerAdapter::createRecord(const media::CreateRecordRequest& request,
950 media::CreateRecordResponse* _aidl_return) {
951 return Status::fromStatusT(mDelegate->createRecord(request, *_aidl_return));
952}
953
954Status AudioFlingerServerAdapter::sampleRate(int32_t ioHandle, int32_t* _aidl_return) {
955 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
956 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
957 *_aidl_return = VALUE_OR_RETURN_BINDER(
958 convertIntegral<int32_t>(mDelegate->sampleRate(ioHandleLegacy)));
959 return Status::ok();
960}
961
962Status AudioFlingerServerAdapter::format(int32_t output,
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700963 AudioFormatDescription* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800964 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
965 aidl2legacy_int32_t_audio_io_handle_t(output));
966 *_aidl_return = VALUE_OR_RETURN_BINDER(
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700967 legacy2aidl_audio_format_t_AudioFormatDescription(mDelegate->format(outputLegacy)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800968 return Status::ok();
969}
970
971Status AudioFlingerServerAdapter::frameCount(int32_t ioHandle, int64_t* _aidl_return) {
972 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
973 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
974 *_aidl_return = VALUE_OR_RETURN_BINDER(
975 convertIntegral<int64_t>(mDelegate->frameCount(ioHandleLegacy)));
976 return Status::ok();
977}
978
979Status AudioFlingerServerAdapter::latency(int32_t output, int32_t* _aidl_return) {
980 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
981 aidl2legacy_int32_t_audio_io_handle_t(output));
982 *_aidl_return = VALUE_OR_RETURN_BINDER(
983 convertIntegral<int32_t>(mDelegate->latency(outputLegacy)));
984 return Status::ok();
985}
986
987Status AudioFlingerServerAdapter::setMasterVolume(float value) {
988 return Status::fromStatusT(mDelegate->setMasterVolume(value));
989}
990
991Status AudioFlingerServerAdapter::setMasterMute(bool muted) {
992 return Status::fromStatusT(mDelegate->setMasterMute(muted));
993}
994
995Status AudioFlingerServerAdapter::masterVolume(float* _aidl_return) {
996 *_aidl_return = mDelegate->masterVolume();
997 return Status::ok();
998}
999
1000Status AudioFlingerServerAdapter::masterMute(bool* _aidl_return) {
1001 *_aidl_return = mDelegate->masterMute();
1002 return Status::ok();
1003}
1004
1005Status AudioFlingerServerAdapter::setMasterBalance(float balance) {
1006 return Status::fromStatusT(mDelegate->setMasterBalance(balance));
1007}
1008
1009Status AudioFlingerServerAdapter::getMasterBalance(float* _aidl_return) {
1010 return Status::fromStatusT(mDelegate->getMasterBalance(_aidl_return));
1011}
1012
Mikhail Naganovdbf03642021-08-25 18:15:32 -07001013Status AudioFlingerServerAdapter::setStreamVolume(AudioStreamType stream, float value,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001014 int32_t output) {
1015 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
1016 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
1017 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1018 aidl2legacy_int32_t_audio_io_handle_t(output));
1019 return Status::fromStatusT(mDelegate->setStreamVolume(streamLegacy, value, outputLegacy));
1020}
1021
Mikhail Naganovdbf03642021-08-25 18:15:32 -07001022Status AudioFlingerServerAdapter::setStreamMute(AudioStreamType stream, bool muted) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001023 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
1024 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
1025 return Status::fromStatusT(mDelegate->setStreamMute(streamLegacy, muted));
1026}
1027
Mikhail Naganovdbf03642021-08-25 18:15:32 -07001028Status AudioFlingerServerAdapter::streamVolume(AudioStreamType stream, int32_t output,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001029 float* _aidl_return) {
1030 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
1031 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
1032 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1033 aidl2legacy_int32_t_audio_io_handle_t(output));
1034 *_aidl_return = mDelegate->streamVolume(streamLegacy, outputLegacy);
1035 return Status::ok();
1036}
1037
Mikhail Naganovdbf03642021-08-25 18:15:32 -07001038Status AudioFlingerServerAdapter::streamMute(AudioStreamType stream, bool* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001039 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
1040 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
1041 *_aidl_return = mDelegate->streamMute(streamLegacy);
1042 return Status::ok();
1043}
1044
Mikhail Naganovddceecc2021-09-03 13:58:56 -07001045Status AudioFlingerServerAdapter::setMode(AudioMode mode) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001046 audio_mode_t modeLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioMode_audio_mode_t(mode));
1047 return Status::fromStatusT(mDelegate->setMode(modeLegacy));
1048}
1049
1050Status AudioFlingerServerAdapter::setMicMute(bool state) {
1051 return Status::fromStatusT(mDelegate->setMicMute(state));
1052}
1053
1054Status AudioFlingerServerAdapter::getMicMute(bool* _aidl_return) {
1055 *_aidl_return = mDelegate->getMicMute();
1056 return Status::ok();
1057}
1058
1059Status AudioFlingerServerAdapter::setRecordSilenced(int32_t portId, bool silenced) {
1060 audio_port_handle_t portIdLegacy = VALUE_OR_RETURN_BINDER(
1061 aidl2legacy_int32_t_audio_port_handle_t(portId));
1062 mDelegate->setRecordSilenced(portIdLegacy, silenced);
1063 return Status::ok();
1064}
1065
1066Status
1067AudioFlingerServerAdapter::setParameters(int32_t ioHandle, const std::string& keyValuePairs) {
1068 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1069 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1070 String8 keyValuePairsLegacy = VALUE_OR_RETURN_BINDER(
1071 aidl2legacy_string_view_String8(keyValuePairs));
1072 return Status::fromStatusT(mDelegate->setParameters(ioHandleLegacy, keyValuePairsLegacy));
1073}
1074
1075Status AudioFlingerServerAdapter::getParameters(int32_t ioHandle, const std::string& keys,
1076 std::string* _aidl_return) {
1077 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1078 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1079 String8 keysLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_string_view_String8(keys));
1080 *_aidl_return = VALUE_OR_RETURN_BINDER(
1081 legacy2aidl_String8_string(mDelegate->getParameters(ioHandleLegacy, keysLegacy)));
1082 return Status::ok();
1083}
1084
1085Status AudioFlingerServerAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
1086 mDelegate->registerClient(client);
1087 return Status::ok();
1088}
1089
1090Status AudioFlingerServerAdapter::getInputBufferSize(int32_t sampleRate,
Mikhail Naganov57bd06f2021-08-10 16:41:54 -07001091 const AudioFormatDescription& format,
1092 const AudioChannelLayout& channelMask,
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001093 int64_t* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001094 uint32_t sampleRateLegacy = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(sampleRate));
1095 audio_format_t formatLegacy = VALUE_OR_RETURN_BINDER(
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -07001096 aidl2legacy_AudioFormatDescription_audio_format_t(format));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001097 audio_channel_mask_t channelMaskLegacy = VALUE_OR_RETURN_BINDER(
Mikhail Naganovde3fa182021-07-30 15:06:42 -07001098 aidl2legacy_AudioChannelLayout_audio_channel_mask_t(channelMask, true /*isInput*/));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001099 size_t size = mDelegate->getInputBufferSize(sampleRateLegacy, formatLegacy, channelMaskLegacy);
1100 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int64_t>(size));
1101 return Status::ok();
1102}
1103
1104Status AudioFlingerServerAdapter::openOutput(const media::OpenOutputRequest& request,
1105 media::OpenOutputResponse* _aidl_return) {
1106 return Status::fromStatusT(mDelegate->openOutput(request, _aidl_return));
1107}
1108
1109Status AudioFlingerServerAdapter::openDuplicateOutput(int32_t output1, int32_t output2,
1110 int32_t* _aidl_return) {
1111 audio_io_handle_t output1Legacy = VALUE_OR_RETURN_BINDER(
1112 aidl2legacy_int32_t_audio_io_handle_t(output1));
1113 audio_io_handle_t output2Legacy = VALUE_OR_RETURN_BINDER(
1114 aidl2legacy_int32_t_audio_io_handle_t(output2));
1115 audio_io_handle_t result = mDelegate->openDuplicateOutput(output1Legacy, output2Legacy);
1116 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_io_handle_t_int32_t(result));
1117 return Status::ok();
1118}
1119
1120Status AudioFlingerServerAdapter::closeOutput(int32_t output) {
1121 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1122 aidl2legacy_int32_t_audio_io_handle_t(output));
1123 return Status::fromStatusT(mDelegate->closeOutput(outputLegacy));
1124}
1125
1126Status AudioFlingerServerAdapter::suspendOutput(int32_t output) {
1127 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1128 aidl2legacy_int32_t_audio_io_handle_t(output));
1129 return Status::fromStatusT(mDelegate->suspendOutput(outputLegacy));
1130}
1131
1132Status AudioFlingerServerAdapter::restoreOutput(int32_t output) {
1133 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1134 aidl2legacy_int32_t_audio_io_handle_t(output));
1135 return Status::fromStatusT(mDelegate->restoreOutput(outputLegacy));
1136}
1137
1138Status AudioFlingerServerAdapter::openInput(const media::OpenInputRequest& request,
1139 media::OpenInputResponse* _aidl_return) {
1140 return Status::fromStatusT(mDelegate->openInput(request, _aidl_return));
1141}
1142
1143Status AudioFlingerServerAdapter::closeInput(int32_t input) {
1144 audio_io_handle_t inputLegacy = VALUE_OR_RETURN_BINDER(
1145 aidl2legacy_int32_t_audio_io_handle_t(input));
1146 return Status::fromStatusT(mDelegate->closeInput(inputLegacy));
1147}
1148
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001149Status AudioFlingerServerAdapter::setVoiceVolume(float volume) {
1150 return Status::fromStatusT(mDelegate->setVoiceVolume(volume));
1151}
1152
1153Status
1154AudioFlingerServerAdapter::getRenderPosition(int32_t output, media::RenderPosition* _aidl_return) {
1155 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1156 aidl2legacy_int32_t_audio_io_handle_t(output));
1157 uint32_t halFramesLegacy;
1158 uint32_t dspFramesLegacy;
1159 RETURN_BINDER_IF_ERROR(
1160 mDelegate->getRenderPosition(&halFramesLegacy, &dspFramesLegacy, outputLegacy));
1161 _aidl_return->halFrames = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(halFramesLegacy));
1162 _aidl_return->dspFrames = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(dspFramesLegacy));
1163 return Status::ok();
1164}
1165
1166Status AudioFlingerServerAdapter::getInputFramesLost(int32_t ioHandle, int32_t* _aidl_return) {
1167 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1168 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1169 uint32_t result = mDelegate->getInputFramesLost(ioHandleLegacy);
1170 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(result));
1171 return Status::ok();
1172}
1173
1174Status
1175AudioFlingerServerAdapter::newAudioUniqueId(media::AudioUniqueIdUse use, int32_t* _aidl_return) {
1176 audio_unique_id_use_t useLegacy = VALUE_OR_RETURN_BINDER(
1177 aidl2legacy_AudioUniqueIdUse_audio_unique_id_use_t(use));
1178 audio_unique_id_t result = mDelegate->newAudioUniqueId(useLegacy);
1179 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_unique_id_t_int32_t(result));
1180 return Status::ok();
1181}
1182
1183Status
1184AudioFlingerServerAdapter::acquireAudioSessionId(int32_t audioSession, int32_t pid, int32_t uid) {
1185 audio_session_t audioSessionLegacy = VALUE_OR_RETURN_BINDER(
1186 aidl2legacy_int32_t_audio_session_t(audioSession));
1187 pid_t pidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_pid_t(pid));
1188 uid_t uidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_uid_t(uid));
1189 mDelegate->acquireAudioSessionId(audioSessionLegacy, pidLegacy, uidLegacy);
1190 return Status::ok();
1191}
1192
1193Status AudioFlingerServerAdapter::releaseAudioSessionId(int32_t audioSession, int32_t pid) {
1194 audio_session_t audioSessionLegacy = VALUE_OR_RETURN_BINDER(
1195 aidl2legacy_int32_t_audio_session_t(audioSession));
1196 pid_t pidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_pid_t(pid));
1197 mDelegate->releaseAudioSessionId(audioSessionLegacy, pidLegacy);
1198 return Status::ok();
1199}
1200
1201Status AudioFlingerServerAdapter::queryNumberEffects(int32_t* _aidl_return) {
1202 uint32_t result;
1203 RETURN_BINDER_IF_ERROR(mDelegate->queryNumberEffects(&result));
1204 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(result));
1205 return Status::ok();
1206}
1207
1208Status
1209AudioFlingerServerAdapter::queryEffect(int32_t index, media::EffectDescriptor* _aidl_return) {
1210 uint32_t indexLegacy = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(index));
1211 effect_descriptor_t result;
1212 RETURN_BINDER_IF_ERROR(mDelegate->queryEffect(indexLegacy, &result));
1213 *_aidl_return = VALUE_OR_RETURN_BINDER(
1214 legacy2aidl_effect_descriptor_t_EffectDescriptor(result));
1215 return Status::ok();
1216}
1217
Mikhail Naganovddceecc2021-09-03 13:58:56 -07001218Status AudioFlingerServerAdapter::getEffectDescriptor(const AudioUuid& effectUUID,
1219 const AudioUuid& typeUUID,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001220 int32_t preferredTypeFlag,
1221 media::EffectDescriptor* _aidl_return) {
1222 effect_uuid_t effectUuidLegacy = VALUE_OR_RETURN_BINDER(
1223 aidl2legacy_AudioUuid_audio_uuid_t(effectUUID));
1224 effect_uuid_t typeUuidLegacy = VALUE_OR_RETURN_BINDER(
1225 aidl2legacy_AudioUuid_audio_uuid_t(typeUUID));
1226 uint32_t preferredTypeFlagLegacy = VALUE_OR_RETURN_BINDER(
1227 convertReinterpret<uint32_t>(preferredTypeFlag));
1228 effect_descriptor_t result;
1229 RETURN_BINDER_IF_ERROR(mDelegate->getEffectDescriptor(&effectUuidLegacy, &typeUuidLegacy,
1230 preferredTypeFlagLegacy, &result));
1231 *_aidl_return = VALUE_OR_RETURN_BINDER(
1232 legacy2aidl_effect_descriptor_t_EffectDescriptor(result));
1233 return Status::ok();
1234}
1235
1236Status AudioFlingerServerAdapter::createEffect(const media::CreateEffectRequest& request,
1237 media::CreateEffectResponse* _aidl_return) {
1238 return Status::fromStatusT(mDelegate->createEffect(request, _aidl_return));
1239}
1240
1241Status
1242AudioFlingerServerAdapter::moveEffects(int32_t session, int32_t srcOutput, int32_t dstOutput) {
1243 audio_session_t sessionLegacy = VALUE_OR_RETURN_BINDER(
1244 aidl2legacy_int32_t_audio_session_t(session));
1245 audio_io_handle_t srcOutputLegacy = VALUE_OR_RETURN_BINDER(
1246 aidl2legacy_int32_t_audio_io_handle_t(srcOutput));
1247 audio_io_handle_t dstOutputLegacy = VALUE_OR_RETURN_BINDER(
1248 aidl2legacy_int32_t_audio_io_handle_t(dstOutput));
1249 return Status::fromStatusT(
1250 mDelegate->moveEffects(sessionLegacy, srcOutputLegacy, dstOutputLegacy));
1251}
1252
1253Status AudioFlingerServerAdapter::setEffectSuspended(int32_t effectId, int32_t sessionId,
1254 bool suspended) {
1255 int effectIdLegacy = VALUE_OR_RETURN_BINDER(convertReinterpret<int>(effectId));
1256 audio_session_t sessionIdLegacy = VALUE_OR_RETURN_BINDER(
1257 aidl2legacy_int32_t_audio_session_t(sessionId));
1258 mDelegate->setEffectSuspended(effectIdLegacy, sessionIdLegacy, suspended);
1259 return Status::ok();
1260}
1261
1262Status AudioFlingerServerAdapter::loadHwModule(const std::string& name, int32_t* _aidl_return) {
1263 audio_module_handle_t result = mDelegate->loadHwModule(name.c_str());
1264 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_module_handle_t_int32_t(result));
1265 return Status::ok();
1266}
1267
1268Status AudioFlingerServerAdapter::getPrimaryOutputSamplingRate(int32_t* _aidl_return) {
1269 *_aidl_return = VALUE_OR_RETURN_BINDER(
1270 convertIntegral<int32_t>(mDelegate->getPrimaryOutputSamplingRate()));
1271 return Status::ok();
1272}
1273
1274Status AudioFlingerServerAdapter::getPrimaryOutputFrameCount(int64_t* _aidl_return) {
1275 *_aidl_return = VALUE_OR_RETURN_BINDER(
1276 convertIntegral<int64_t>(mDelegate->getPrimaryOutputFrameCount()));
1277 return Status::ok();
1278
1279}
1280
1281Status AudioFlingerServerAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
1282 return Status::fromStatusT(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
1283}
1284
Atneya Nair638a6e42022-12-18 16:45:15 -08001285Status AudioFlingerServerAdapter::getAudioPort(const media::AudioPortFw& port,
1286 media::AudioPortFw* _aidl_return) {
Mikhail Naganov87227252023-01-13 17:38:10 -08001287 audio_port_v7 portLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPortFw_audio_port_v7(port));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001288 RETURN_BINDER_IF_ERROR(mDelegate->getAudioPort(&portLegacy));
Mikhail Naganov87227252023-01-13 17:38:10 -08001289 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_port_v7_AudioPortFw(portLegacy));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001290 return Status::ok();
1291}
1292
Atneya Nair3afdbd12022-12-18 16:14:18 -08001293Status AudioFlingerServerAdapter::createAudioPatch(const media::AudioPatchFw& patch,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001294 int32_t* _aidl_return) {
Mikhail Naganov87227252023-01-13 17:38:10 -08001295 audio_patch patchLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPatchFw_audio_patch(patch));
Kuowei Li247a3672021-07-21 21:46:07 +08001296 audio_patch_handle_t handleLegacy = VALUE_OR_RETURN_BINDER(
1297 aidl2legacy_int32_t_audio_patch_handle_t(*_aidl_return));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001298 RETURN_BINDER_IF_ERROR(mDelegate->createAudioPatch(&patchLegacy, &handleLegacy));
1299 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_patch_handle_t_int32_t(handleLegacy));
1300 return Status::ok();
1301}
1302
1303Status AudioFlingerServerAdapter::releaseAudioPatch(int32_t handle) {
1304 audio_patch_handle_t handleLegacy = VALUE_OR_RETURN_BINDER(
1305 aidl2legacy_int32_t_audio_patch_handle_t(handle));
1306 return Status::fromStatusT(mDelegate->releaseAudioPatch(handleLegacy));
1307}
1308
1309Status AudioFlingerServerAdapter::listAudioPatches(int32_t maxCount,
Atneya Nair3afdbd12022-12-18 16:14:18 -08001310 std::vector<media::AudioPatchFw>* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001311 unsigned int count = VALUE_OR_RETURN_BINDER(convertIntegral<unsigned int>(maxCount));
1312 count = std::min(count, static_cast<unsigned int>(MAX_ITEMS_PER_LIST));
1313 std::unique_ptr<audio_patch[]> patchesLegacy(new audio_patch[count]);
1314 RETURN_BINDER_IF_ERROR(mDelegate->listAudioPatches(&count, patchesLegacy.get()));
1315 RETURN_BINDER_IF_ERROR(convertRange(&patchesLegacy[0],
1316 &patchesLegacy[count],
1317 std::back_inserter(*_aidl_return),
Mikhail Naganov87227252023-01-13 17:38:10 -08001318 legacy2aidl_audio_patch_AudioPatchFw));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001319 return Status::ok();
1320}
1321
Atneya Nair7a9594f2022-12-18 17:26:26 -08001322Status AudioFlingerServerAdapter::setAudioPortConfig(const media::AudioPortConfigFw& config) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001323 audio_port_config configLegacy = VALUE_OR_RETURN_BINDER(
Mikhail Naganov87227252023-01-13 17:38:10 -08001324 aidl2legacy_AudioPortConfigFw_audio_port_config(config));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001325 return Status::fromStatusT(mDelegate->setAudioPortConfig(&configLegacy));
1326}
1327
1328Status AudioFlingerServerAdapter::getAudioHwSyncForSession(int32_t sessionId,
1329 int32_t* _aidl_return) {
1330 audio_session_t sessionIdLegacy = VALUE_OR_RETURN_BINDER(
1331 aidl2legacy_int32_t_audio_session_t(sessionId));
1332 audio_hw_sync_t result = mDelegate->getAudioHwSyncForSession(sessionIdLegacy);
1333 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_hw_sync_t_int32_t(result));
1334 return Status::ok();
1335}
1336
1337Status AudioFlingerServerAdapter::systemReady() {
1338 return Status::fromStatusT(mDelegate->systemReady());
1339}
1340
Eric Laurentd66d7a12021-07-13 13:35:32 +02001341Status AudioFlingerServerAdapter::audioPolicyReady() {
1342 mDelegate->audioPolicyReady();
1343 return Status::ok();
1344}
1345
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001346Status AudioFlingerServerAdapter::frameCountHAL(int32_t ioHandle, int64_t* _aidl_return) {
1347 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1348 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1349 size_t result = mDelegate->frameCountHAL(ioHandleLegacy);
1350 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int64_t>(result));
1351 return Status::ok();
1352}
1353
1354Status AudioFlingerServerAdapter::getMicrophones(
Mikhail Naganovd5d9de72023-02-13 11:45:03 -08001355 std::vector<media::MicrophoneInfoFw>* _aidl_return) {
1356 RETURN_BINDER_IF_ERROR(mDelegate->getMicrophones(_aidl_return));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001357 return Status::ok();
1358}
1359
1360Status AudioFlingerServerAdapter::setAudioHalPids(const std::vector<int32_t>& pids) {
1361 std::vector<pid_t> pidsLegacy = VALUE_OR_RETURN_BINDER(
1362 convertContainer<std::vector<pid_t>>(pids, aidl2legacy_int32_t_pid_t));
1363 RETURN_BINDER_IF_ERROR(mDelegate->setAudioHalPids(pidsLegacy));
1364 return Status::ok();
1365}
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -08001366
jiabin1319f5a2021-03-30 22:21:24 +00001367Status AudioFlingerServerAdapter::setVibratorInfos(
1368 const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
1369 return Status::fromStatusT(mDelegate->setVibratorInfos(vibratorInfos));
1370}
1371
jiabin10a03f12021-05-07 23:46:28 +00001372Status AudioFlingerServerAdapter::updateSecondaryOutputs(
1373 const std::vector<media::TrackSecondaryOutputInfo>& trackSecondaryOutputInfos) {
1374 TrackSecondaryOutputsMap trackSecondaryOutputs =
1375 VALUE_OR_RETURN_BINDER(convertContainer<TrackSecondaryOutputsMap>(
1376 trackSecondaryOutputInfos,
1377 aidl2legacy_TrackSecondaryOutputInfo_TrackSecondaryOutputInfoPair));
1378 return Status::fromStatusT(mDelegate->updateSecondaryOutputs(trackSecondaryOutputs));
1379}
1380
Jiabin Huangebe64102021-09-07 20:01:07 +00001381Status AudioFlingerServerAdapter::getMmapPolicyInfos(
jiabine99d0882021-09-17 05:21:25 +00001382 AudioMMapPolicyType policyType, std::vector<AudioMMapPolicyInfo> *_aidl_return) {
Jiabin Huangebe64102021-09-07 20:01:07 +00001383 return Status::fromStatusT(mDelegate->getMmapPolicyInfos(policyType, _aidl_return));
1384}
1385
jiabine504e7b2021-09-18 00:27:08 +00001386Status AudioFlingerServerAdapter::getAAudioMixerBurstCount(int32_t* _aidl_return) {
1387 *_aidl_return = VALUE_OR_RETURN_BINDER(
1388 convertIntegral<int32_t>(mDelegate->getAAudioMixerBurstCount()));
1389 return Status::ok();
1390}
1391
1392Status AudioFlingerServerAdapter::getAAudioHardwareBurstMinUsec(int32_t* _aidl_return) {
1393 *_aidl_return = VALUE_OR_RETURN_BINDER(
1394 convertIntegral<int32_t>(mDelegate->getAAudioHardwareBurstMinUsec()));
1395 return Status::ok();
1396}
1397
Mikhail Naganov516d3982022-02-01 23:53:59 +00001398Status AudioFlingerServerAdapter::setDeviceConnectedState(
jiabinc0048632023-04-27 22:04:31 +00001399 const media::AudioPortFw& port, media::DeviceConnectedState state) {
Mikhail Naganov87227252023-01-13 17:38:10 -08001400 audio_port_v7 portLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPortFw_audio_port_v7(port));
jiabinc0048632023-04-27 22:04:31 +00001401 return Status::fromStatusT(mDelegate->setDeviceConnectedState(&portLegacy, state));
Mikhail Naganov516d3982022-02-01 23:53:59 +00001402}
1403
Mikhail Naganovb1ddbb02023-03-15 17:06:59 -07001404Status AudioFlingerServerAdapter::setSimulateDeviceConnections(bool enabled) {
1405 return Status::fromStatusT(mDelegate->setSimulateDeviceConnections(enabled));
1406}
1407
Eric Laurent076e7c72022-05-03 18:12:28 +02001408Status AudioFlingerServerAdapter::setRequestedLatencyMode(
Mikhail Naganovf53e1822022-12-18 02:48:14 +00001409 int32_t output, media::audio::common::AudioLatencyMode modeAidl) {
Eric Laurent076e7c72022-05-03 18:12:28 +02001410 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1411 aidl2legacy_int32_t_audio_io_handle_t(output));
1412 audio_latency_mode_t modeLegacy = VALUE_OR_RETURN_BINDER(
Mikhail Naganovf53e1822022-12-18 02:48:14 +00001413 aidl2legacy_AudioLatencyMode_audio_latency_mode_t(modeAidl));
Eric Laurent076e7c72022-05-03 18:12:28 +02001414 return Status::fromStatusT(mDelegate->setRequestedLatencyMode(
1415 outputLegacy, modeLegacy));
1416}
1417
1418Status AudioFlingerServerAdapter::getSupportedLatencyModes(
Mikhail Naganovf53e1822022-12-18 02:48:14 +00001419 int output, std::vector<media::audio::common::AudioLatencyMode>* _aidl_return) {
Eric Laurent076e7c72022-05-03 18:12:28 +02001420 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1421 aidl2legacy_int32_t_audio_io_handle_t(output));
1422 std::vector<audio_latency_mode_t> modesLegacy;
1423
1424 RETURN_BINDER_IF_ERROR(mDelegate->getSupportedLatencyModes(outputLegacy, &modesLegacy));
1425
1426 *_aidl_return = VALUE_OR_RETURN_BINDER(
Mikhail Naganovf53e1822022-12-18 02:48:14 +00001427 convertContainer<std::vector<media::audio::common::AudioLatencyMode>>(
1428 modesLegacy, legacy2aidl_audio_latency_mode_t_AudioLatencyMode));
Eric Laurent076e7c72022-05-03 18:12:28 +02001429 return Status::ok();
1430}
1431
Eric Laurent50d72582022-12-20 20:20:23 +01001432Status AudioFlingerServerAdapter::setBluetoothVariableLatencyEnabled(bool enabled) {
1433 return Status::fromStatusT(mDelegate->setBluetoothVariableLatencyEnabled(enabled));
Eric Laurent52057642022-12-16 11:45:07 +01001434}
1435
Eric Laurent50d72582022-12-20 20:20:23 +01001436Status AudioFlingerServerAdapter::isBluetoothVariableLatencyEnabled(bool *enabled) {
1437 return Status::fromStatusT(mDelegate->isBluetoothVariableLatencyEnabled(enabled));
1438}
1439
1440Status AudioFlingerServerAdapter::supportsBluetoothVariableLatency(bool *support) {
1441 return Status::fromStatusT(mDelegate->supportsBluetoothVariableLatency(support));
Eric Laurent52057642022-12-16 11:45:07 +01001442}
1443
Vlad Popae3fd1c22022-11-07 21:03:18 +01001444Status AudioFlingerServerAdapter::getSoundDoseInterface(
1445 const sp<media::ISoundDoseCallback>& callback,
1446 sp<media::ISoundDose>* soundDose)
Vlad Popa63f047e2022-11-05 14:09:19 +01001447{
Vlad Popae3fd1c22022-11-07 21:03:18 +01001448 return Status::fromStatusT(mDelegate->getSoundDoseInterface(callback, soundDose));
Vlad Popa63f047e2022-11-05 14:09:19 +01001449}
1450
jiabinc44b3462022-12-08 12:52:31 -08001451Status AudioFlingerServerAdapter::invalidateTracks(const std::vector<int32_t>& portIds) {
1452 std::vector<audio_port_handle_t> portIdsLegacy = VALUE_OR_RETURN_BINDER(
1453 convertContainer<std::vector<audio_port_handle_t>>(
1454 portIds, aidl2legacy_int32_t_audio_port_handle_t));
1455 RETURN_BINDER_IF_ERROR(mDelegate->invalidateTracks(portIdsLegacy));
1456 return Status::ok();
1457}
1458
Mikhail Naganovffd97712023-05-03 17:45:36 -07001459Status AudioFlingerServerAdapter::getAudioPolicyConfig(media::AudioPolicyConfig* _aidl_return) {
1460 return Status::fromStatusT(mDelegate->getAudioPolicyConfig(_aidl_return));
1461}
1462
jiabin12537fc2023-10-12 17:56:08 +00001463Status AudioFlingerServerAdapter::getAudioMixPort(const media::AudioPortFw &devicePort,
1464 const media::AudioPortFw &mixPort,
1465 media::AudioPortFw *_aidl_return) {
1466 audio_port_v7 devicePortLegacy = VALUE_OR_RETURN_BINDER(
1467 aidl2legacy_AudioPortFw_audio_port_v7(devicePort));
1468 audio_port_v7 mixPortLegacy = VALUE_OR_RETURN_BINDER(
1469 aidl2legacy_AudioPortFw_audio_port_v7(mixPort));
1470 RETURN_BINDER_IF_ERROR(mDelegate->getAudioMixPort(&devicePortLegacy, &mixPortLegacy));
1471 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_port_v7_AudioPortFw(mixPortLegacy));
1472 return Status::ok();
1473}
1474
Glenn Kasten40bc9062015-03-20 09:09:33 -07001475} // namespace android