blob: d3098b89384f3b9ad69ff3e4cd05a25332c54433 [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>
25
Eric Laurentb1cc36b2017-12-11 12:14:16 -080026#include <binder/IPCThreadState.h>
Mathias Agopian75624082009-05-19 19:08:10 -070027#include <binder/Parcel.h>
Steven Moreland25a9e552017-04-17 14:30:39 -070028#include "IAudioFlinger.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
51#define RETURN_STATUS_IF_ERROR(x) \
52 { \
53 auto _tmp = (x); \
54 if (_tmp != OK) return _tmp; \
55 }
56
57#define RETURN_BINDER_IF_ERROR(x) \
58 { \
59 auto _tmp = (x); \
60 if (_tmp != OK) return Status::fromStatusT(_tmp); \
61 }
62
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080063ConversionResult<media::CreateTrackRequest> IAudioFlinger::CreateTrackInput::toAidl() const {
64 media::CreateTrackRequest aidl;
65 aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributesInternal(attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -070066 // Do not be mislead by 'Input'--this is an input to 'createTrack', which creates output tracks.
67 aidl.config = VALUE_OR_RETURN(legacy2aidl_audio_config_t_AudioConfig(
68 config, false /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -080069 aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080070 aidl.sharedBuffer = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(sharedBuffer));
71 aidl.notificationsPerBuffer = VALUE_OR_RETURN(convertIntegral<int32_t>(notificationsPerBuffer));
72 aidl.speed = speed;
73 aidl.audioTrackCallback = audioTrackCallback;
Andy Hung973638a2020-12-08 20:47:45 -080074 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080075 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
76 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
77 aidl.selectedDeviceId = VALUE_OR_RETURN(
78 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
79 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
80 return aidl;
81}
82
83ConversionResult<IAudioFlinger::CreateTrackInput>
84IAudioFlinger::CreateTrackInput::fromAidl(const media::CreateTrackRequest& aidl) {
85 IAudioFlinger::CreateTrackInput legacy;
86 legacy.attr = VALUE_OR_RETURN(aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -070087 // Do not be mislead by 'Input'--this is an input to 'createTrack', which creates output tracks.
88 legacy.config = VALUE_OR_RETURN(
89 aidl2legacy_AudioConfig_audio_config_t(aidl.config, false /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -080090 legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080091 legacy.sharedBuffer = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.sharedBuffer));
92 legacy.notificationsPerBuffer = VALUE_OR_RETURN(
93 convertIntegral<uint32_t>(aidl.notificationsPerBuffer));
94 legacy.speed = aidl.speed;
95 legacy.audioTrackCallback = aidl.audioTrackCallback;
Andy Hung973638a2020-12-08 20:47:45 -080096 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080097 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
98 legacy.notificationFrameCount = VALUE_OR_RETURN(
99 convertIntegral<size_t>(aidl.notificationFrameCount));
100 legacy.selectedDeviceId = VALUE_OR_RETURN(
101 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
102 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
103 return legacy;
104}
105
106ConversionResult<media::CreateTrackResponse>
107IAudioFlinger::CreateTrackOutput::toAidl() const {
108 media::CreateTrackResponse aidl;
Andy Hung973638a2020-12-08 20:47:45 -0800109 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800110 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
111 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
112 aidl.selectedDeviceId = VALUE_OR_RETURN(
113 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
114 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
115 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
Andy Hunga2159aa2021-07-20 13:01:52 -0700116 aidl.streamType = VALUE_OR_RETURN(
117 legacy2aidl_audio_stream_type_t_AudioStreamType(streamType));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800118 aidl.afFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(afFrameCount));
119 aidl.afSampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(afSampleRate));
120 aidl.afLatencyMs = VALUE_OR_RETURN(convertIntegral<int32_t>(afLatencyMs));
121 aidl.outputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(outputId));
122 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800123 aidl.audioTrack = audioTrack;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800124 return aidl;
125}
126
127ConversionResult<IAudioFlinger::CreateTrackOutput>
128IAudioFlinger::CreateTrackOutput::fromAidl(
129 const media::CreateTrackResponse& aidl) {
130 IAudioFlinger::CreateTrackOutput legacy;
Andy Hung973638a2020-12-08 20:47:45 -0800131 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800132 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
133 legacy.notificationFrameCount = VALUE_OR_RETURN(
134 convertIntegral<size_t>(aidl.notificationFrameCount));
135 legacy.selectedDeviceId = VALUE_OR_RETURN(
136 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
137 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
138 legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
Andy Hunga2159aa2021-07-20 13:01:52 -0700139 legacy.streamType = VALUE_OR_RETURN(
140 aidl2legacy_AudioStreamType_audio_stream_type_t(aidl.streamType));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800141 legacy.afFrameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.afFrameCount));
142 legacy.afSampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.afSampleRate));
143 legacy.afLatencyMs = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.afLatencyMs));
144 legacy.outputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.outputId));
145 legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800146 legacy.audioTrack = aidl.audioTrack;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800147 return legacy;
148}
149
150ConversionResult<media::CreateRecordRequest>
151IAudioFlinger::CreateRecordInput::toAidl() const {
152 media::CreateRecordRequest aidl;
153 aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributesInternal(attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700154 aidl.config = VALUE_OR_RETURN(
155 legacy2aidl_audio_config_base_t_AudioConfigBase(config, true /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -0800156 aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800157 aidl.riid = VALUE_OR_RETURN(legacy2aidl_audio_unique_id_t_int32_t(riid));
Eric Laurentec376dc2021-04-08 20:41:22 +0200158 aidl.maxSharedAudioHistoryMs = VALUE_OR_RETURN(
159 convertIntegral<int32_t>(maxSharedAudioHistoryMs));
Andy Hung973638a2020-12-08 20:47:45 -0800160 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800161 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
162 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
163 aidl.selectedDeviceId = VALUE_OR_RETURN(
164 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
165 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
166 return aidl;
167}
168
169ConversionResult<IAudioFlinger::CreateRecordInput>
170IAudioFlinger::CreateRecordInput::fromAidl(
171 const media::CreateRecordRequest& aidl) {
172 IAudioFlinger::CreateRecordInput legacy;
Eric Laurentec376dc2021-04-08 20:41:22 +0200173 legacy.attr = VALUE_OR_RETURN(
174 aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700175 legacy.config = VALUE_OR_RETURN(
176 aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config, true /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -0800177 legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800178 legacy.riid = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_unique_id_t(aidl.riid));
Eric Laurentec376dc2021-04-08 20:41:22 +0200179 legacy.maxSharedAudioHistoryMs = VALUE_OR_RETURN(
180 convertIntegral<int32_t>(aidl.maxSharedAudioHistoryMs));
Andy Hung973638a2020-12-08 20:47:45 -0800181 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800182 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
183 legacy.notificationFrameCount = VALUE_OR_RETURN(
184 convertIntegral<size_t>(aidl.notificationFrameCount));
185 legacy.selectedDeviceId = VALUE_OR_RETURN(
186 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
187 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
188 return legacy;
189}
190
191ConversionResult<media::CreateRecordResponse>
192IAudioFlinger::CreateRecordOutput::toAidl() const {
193 media::CreateRecordResponse aidl;
Andy Hung973638a2020-12-08 20:47:45 -0800194 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800195 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
196 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
197 aidl.selectedDeviceId = VALUE_OR_RETURN(
198 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
199 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
200 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
201 aidl.inputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(inputId));
202 aidl.cblk = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(cblk));
203 aidl.buffers = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(buffers));
204 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800205 aidl.audioRecord = audioRecord;
jiabinb00edc32021-08-16 16:27:54 +0000206 aidl.serverConfig = VALUE_OR_RETURN(
207 legacy2aidl_audio_config_base_t_AudioConfigBase(serverConfig, true /*isInput*/));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800208 return aidl;
209}
210
211ConversionResult<IAudioFlinger::CreateRecordOutput>
212IAudioFlinger::CreateRecordOutput::fromAidl(
213 const media::CreateRecordResponse& aidl) {
214 IAudioFlinger::CreateRecordOutput legacy;
Andy Hung973638a2020-12-08 20:47:45 -0800215 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800216 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
217 legacy.notificationFrameCount = VALUE_OR_RETURN(
218 convertIntegral<size_t>(aidl.notificationFrameCount));
219 legacy.selectedDeviceId = VALUE_OR_RETURN(
220 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
221 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
222 legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
223 legacy.inputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.inputId));
224 legacy.cblk = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.cblk));
225 legacy.buffers = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.buffers));
226 legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800227 legacy.audioRecord = aidl.audioRecord;
jiabinb00edc32021-08-16 16:27:54 +0000228 legacy.serverConfig = VALUE_OR_RETURN(
229 aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.serverConfig, true /*isInput*/));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800230 return legacy;
231}
Eric Laurent42896a02019-09-27 15:40:33 -0700232
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800233////////////////////////////////////////////////////////////////////////////////////////////////////
234// AudioFlingerClientAdapter
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800235
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800236AudioFlingerClientAdapter::AudioFlingerClientAdapter(
237 const sp<media::IAudioFlingerService> delegate) : mDelegate(delegate) {}
Eric Laurent21da6472017-11-09 16:29:26 -0800238
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800239status_t AudioFlingerClientAdapter::createTrack(const media::CreateTrackRequest& input,
240 media::CreateTrackResponse& output) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800241 return statusTFromBinderStatus(mDelegate->createTrack(input, &output));
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800242}
243
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800244status_t AudioFlingerClientAdapter::createRecord(const media::CreateRecordRequest& input,
245 media::CreateRecordResponse& output) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800246 return statusTFromBinderStatus(mDelegate->createRecord(input, &output));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800247}
248
249uint32_t AudioFlingerClientAdapter::sampleRate(audio_io_handle_t ioHandle) const {
250 auto result = [&]() -> ConversionResult<uint32_t> {
251 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
252 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800253 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->sampleRate(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800254 return convertIntegral<uint32_t>(aidlRet);
255 }();
256 // Failure is ignored.
257 return result.value_or(0);
258}
259
260audio_format_t AudioFlingerClientAdapter::format(audio_io_handle_t output) const {
261 auto result = [&]() -> ConversionResult<audio_format_t> {
262 int32_t outputAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output));
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700263 AudioFormatDescription aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800264 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->format(outputAidl, &aidlRet)));
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700265 return aidl2legacy_AudioFormatDescription_audio_format_t(aidlRet);
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800266 }();
267 return result.value_or(AUDIO_FORMAT_INVALID);
268}
269
270size_t AudioFlingerClientAdapter::frameCount(audio_io_handle_t ioHandle) const {
271 auto result = [&]() -> ConversionResult<size_t> {
272 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
273 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800274 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->frameCount(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800275 return convertIntegral<size_t>(aidlRet);
276 }();
277 // Failure is ignored.
278 return result.value_or(0);
279}
280
281uint32_t AudioFlingerClientAdapter::latency(audio_io_handle_t output) const {
282 auto result = [&]() -> ConversionResult<uint32_t> {
283 int32_t outputAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output));
284 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800285 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->latency(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800286 return convertIntegral<uint32_t>(aidlRet);
287 }();
288 // Failure is ignored.
289 return result.value_or(0);
290}
291
292status_t AudioFlingerClientAdapter::setMasterVolume(float value) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800293 return statusTFromBinderStatus(mDelegate->setMasterVolume(value));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800294}
295
296status_t AudioFlingerClientAdapter::setMasterMute(bool muted) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800297 return statusTFromBinderStatus(mDelegate->setMasterMute(muted));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800298}
299
300float AudioFlingerClientAdapter::masterVolume() const {
301 auto result = [&]() -> ConversionResult<float> {
302 float aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800303 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterVolume(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800304 return aidlRet;
305 }();
306 // Failure is ignored.
307 return result.value_or(0.f);
308}
309
310bool AudioFlingerClientAdapter::masterMute() const {
311 auto result = [&]() -> ConversionResult<bool> {
312 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800313 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterMute(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800314 return aidlRet;
315 }();
316 // Failure is ignored.
317 return result.value_or(false);
318}
319
320status_t AudioFlingerClientAdapter::setMasterBalance(float balance) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800321 return statusTFromBinderStatus(mDelegate->setMasterBalance(balance));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800322}
323
324status_t AudioFlingerClientAdapter::getMasterBalance(float* balance) const{
Andy Hung1131b6e2020-12-08 20:47:45 -0800325 return statusTFromBinderStatus(mDelegate->getMasterBalance(balance));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800326}
327
328status_t AudioFlingerClientAdapter::setStreamVolume(audio_stream_type_t stream, float value,
329 audio_io_handle_t output) {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700330 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800331 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
332 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800333 return statusTFromBinderStatus(mDelegate->setStreamVolume(streamAidl, value, outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800334}
335
336status_t AudioFlingerClientAdapter::setStreamMute(audio_stream_type_t stream, bool muted) {
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));
Andy Hung1131b6e2020-12-08 20:47:45 -0800339 return statusTFromBinderStatus(mDelegate->setStreamMute(streamAidl, muted));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800340}
341
342float AudioFlingerClientAdapter::streamVolume(audio_stream_type_t stream,
343 audio_io_handle_t output) const {
344 auto result = [&]() -> ConversionResult<float> {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700345 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800346 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
347 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
348 float aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800349 RETURN_IF_ERROR(statusTFromBinderStatus(
350 mDelegate->streamVolume(streamAidl, outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800351 return aidlRet;
352 }();
353 // Failure is ignored.
354 return result.value_or(0.f);
355}
356
357bool AudioFlingerClientAdapter::streamMute(audio_stream_type_t stream) const {
358 auto result = [&]() -> ConversionResult<bool> {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700359 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800360 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
361 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800362 RETURN_IF_ERROR(statusTFromBinderStatus(
363 mDelegate->streamMute(streamAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800364 return aidlRet;
365 }();
366 // Failure is ignored.
367 return result.value_or(false);
368}
369
370status_t AudioFlingerClientAdapter::setMode(audio_mode_t mode) {
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700371 AudioMode modeAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_mode_t_AudioMode(mode));
Andy Hung1131b6e2020-12-08 20:47:45 -0800372 return statusTFromBinderStatus(mDelegate->setMode(modeAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800373}
374
375status_t AudioFlingerClientAdapter::setMicMute(bool state) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800376 return statusTFromBinderStatus(mDelegate->setMicMute(state));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800377}
378
379bool AudioFlingerClientAdapter::getMicMute() const {
380 auto result = [&]() -> ConversionResult<bool> {
381 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800382 RETURN_IF_ERROR(statusTFromBinderStatus(
383 mDelegate->getMicMute(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800384 return aidlRet;
385 }();
386 // Failure is ignored.
387 return result.value_or(false);
388}
389
390void AudioFlingerClientAdapter::setRecordSilenced(audio_port_handle_t portId, bool silenced) {
391 auto result = [&]() -> status_t {
392 int32_t portIdAidl = VALUE_OR_RETURN_STATUS(
393 legacy2aidl_audio_port_handle_t_int32_t(portId));
Andy Hung1131b6e2020-12-08 20:47:45 -0800394 return statusTFromBinderStatus(mDelegate->setRecordSilenced(portIdAidl, silenced));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800395 }();
396 // Failure is ignored.
397 (void) result;
398}
399
400status_t AudioFlingerClientAdapter::setParameters(audio_io_handle_t ioHandle,
401 const String8& keyValuePairs) {
402 int32_t ioHandleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
403 std::string keyValuePairsAidl = VALUE_OR_RETURN_STATUS(
404 legacy2aidl_String8_string(keyValuePairs));
Andy Hung1131b6e2020-12-08 20:47:45 -0800405 return statusTFromBinderStatus(mDelegate->setParameters(ioHandleAidl, keyValuePairsAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800406}
407
408String8 AudioFlingerClientAdapter::getParameters(audio_io_handle_t ioHandle, const String8& keys)
409const {
410 auto result = [&]() -> ConversionResult<String8> {
411 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
412 std::string keysAidl = VALUE_OR_RETURN(legacy2aidl_String8_string(keys));
413 std::string aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800414 RETURN_IF_ERROR(statusTFromBinderStatus(
415 mDelegate->getParameters(ioHandleAidl, keysAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800416 return aidl2legacy_string_view_String8(aidlRet);
417 }();
418 // Failure is ignored.
419 return result.value_or(String8());
420}
421
422void AudioFlingerClientAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
423 mDelegate->registerClient(client);
424 // Failure is ignored.
425}
426
427size_t AudioFlingerClientAdapter::getInputBufferSize(uint32_t sampleRate, audio_format_t format,
428 audio_channel_mask_t channelMask) const {
429 auto result = [&]() -> ConversionResult<size_t> {
430 int32_t sampleRateAidl = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700431 AudioFormatDescription formatAidl = VALUE_OR_RETURN(
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700432 legacy2aidl_audio_format_t_AudioFormatDescription(format));
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700433 AudioChannelLayout channelMaskAidl = VALUE_OR_RETURN(
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700434 legacy2aidl_audio_channel_mask_t_AudioChannelLayout(channelMask, true /*isInput*/));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800435 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800436 RETURN_IF_ERROR(statusTFromBinderStatus(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800437 mDelegate->getInputBufferSize(sampleRateAidl, formatAidl, channelMaskAidl,
Andy Hung1131b6e2020-12-08 20:47:45 -0800438 &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800439 return convertIntegral<size_t>(aidlRet);
440 }();
441 // Failure is ignored.
442 return result.value_or(0);
443}
444
445status_t AudioFlingerClientAdapter::openOutput(const media::OpenOutputRequest& request,
446 media::OpenOutputResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800447 return statusTFromBinderStatus(mDelegate->openOutput(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800448}
449
450audio_io_handle_t AudioFlingerClientAdapter::openDuplicateOutput(audio_io_handle_t output1,
451 audio_io_handle_t output2) {
452 auto result = [&]() -> ConversionResult<audio_io_handle_t> {
453 int32_t output1Aidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output1));
454 int32_t output2Aidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output2));
455 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800456 RETURN_IF_ERROR(statusTFromBinderStatus(
457 mDelegate->openDuplicateOutput(output1Aidl, output2Aidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800458 return aidl2legacy_int32_t_audio_io_handle_t(aidlRet);
459 }();
460 // Failure is ignored.
461 return result.value_or(0);
462}
463
464status_t AudioFlingerClientAdapter::closeOutput(audio_io_handle_t output) {
465 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800466 return statusTFromBinderStatus(mDelegate->closeOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800467}
468
469status_t AudioFlingerClientAdapter::suspendOutput(audio_io_handle_t output) {
470 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800471 return statusTFromBinderStatus(mDelegate->suspendOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800472}
473
474status_t AudioFlingerClientAdapter::restoreOutput(audio_io_handle_t output) {
475 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800476 return statusTFromBinderStatus(mDelegate->restoreOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800477}
478
479status_t AudioFlingerClientAdapter::openInput(const media::OpenInputRequest& request,
480 media::OpenInputResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800481 return statusTFromBinderStatus(mDelegate->openInput(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800482}
483
484status_t AudioFlingerClientAdapter::closeInput(audio_io_handle_t input) {
485 int32_t inputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(input));
Andy Hung1131b6e2020-12-08 20:47:45 -0800486 return statusTFromBinderStatus(mDelegate->closeInput(inputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800487}
488
489status_t AudioFlingerClientAdapter::invalidateStream(audio_stream_type_t stream) {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700490 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800491 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
Andy Hung1131b6e2020-12-08 20:47:45 -0800492 return statusTFromBinderStatus(mDelegate->invalidateStream(streamAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800493}
494
495status_t AudioFlingerClientAdapter::setVoiceVolume(float volume) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800496 return statusTFromBinderStatus(mDelegate->setVoiceVolume(volume));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800497}
498
499status_t AudioFlingerClientAdapter::getRenderPosition(uint32_t* halFrames, uint32_t* dspFrames,
500 audio_io_handle_t output) const {
501 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
502 media::RenderPosition aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800503 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
504 mDelegate->getRenderPosition(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800505 if (halFrames != nullptr) {
506 *halFrames = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet.halFrames));
507 }
508 if (dspFrames != nullptr) {
509 *dspFrames = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet.dspFrames));
510 }
511 return OK;
512}
513
514uint32_t AudioFlingerClientAdapter::getInputFramesLost(audio_io_handle_t ioHandle) const {
515 auto result = [&]() -> ConversionResult<uint32_t> {
516 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
517 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800518 RETURN_IF_ERROR(statusTFromBinderStatus(
519 mDelegate->getInputFramesLost(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800520 return convertIntegral<uint32_t>(aidlRet);
521 }();
522 // Failure is ignored.
523 return result.value_or(0);
524}
525
526audio_unique_id_t AudioFlingerClientAdapter::newAudioUniqueId(audio_unique_id_use_t use) {
527 auto result = [&]() -> ConversionResult<audio_unique_id_t> {
528 media::AudioUniqueIdUse useAidl = VALUE_OR_RETURN(
529 legacy2aidl_audio_unique_id_use_t_AudioUniqueIdUse(use));
530 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800531 RETURN_IF_ERROR(statusTFromBinderStatus(
532 mDelegate->newAudioUniqueId(useAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800533 return aidl2legacy_int32_t_audio_unique_id_t(aidlRet);
534 }();
535 return result.value_or(AUDIO_UNIQUE_ID_ALLOCATE);
536}
537
538void AudioFlingerClientAdapter::acquireAudioSessionId(audio_session_t audioSession, pid_t pid,
539 uid_t uid) {
540 [&]() -> status_t {
541 int32_t audioSessionAidl = VALUE_OR_RETURN_STATUS(
542 legacy2aidl_audio_session_t_int32_t(audioSession));
543 int32_t pidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(pid));
544 int32_t uidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(uid));
Andy Hung1131b6e2020-12-08 20:47:45 -0800545 return statusTFromBinderStatus(
546 mDelegate->acquireAudioSessionId(audioSessionAidl, pidAidl, uidAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800547 }();
548 // Failure is ignored.
549}
550
551void AudioFlingerClientAdapter::releaseAudioSessionId(audio_session_t audioSession, pid_t pid) {
552 [&]() -> status_t {
553 int32_t audioSessionAidl = VALUE_OR_RETURN_STATUS(
554 legacy2aidl_audio_session_t_int32_t(audioSession));
555 int32_t pidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(pid));
Andy Hung1131b6e2020-12-08 20:47:45 -0800556 return statusTFromBinderStatus(
557 mDelegate->releaseAudioSessionId(audioSessionAidl, pidAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800558 }();
559 // Failure is ignored.
560}
561
562status_t AudioFlingerClientAdapter::queryNumberEffects(uint32_t* numEffects) const {
563 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800564 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
565 mDelegate->queryNumberEffects(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800566 if (numEffects != nullptr) {
567 *numEffects = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet));
568 }
569 return OK;
570}
571
572status_t
573AudioFlingerClientAdapter::queryEffect(uint32_t index, effect_descriptor_t* pDescriptor) const {
574 int32_t indexAidl = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(index));
575 media::EffectDescriptor aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800576 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
577 mDelegate->queryEffect(indexAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800578 if (pDescriptor != nullptr) {
579 *pDescriptor = VALUE_OR_RETURN_STATUS(
580 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
581 }
582 return OK;
583}
584
585status_t AudioFlingerClientAdapter::getEffectDescriptor(const effect_uuid_t* pEffectUUID,
586 const effect_uuid_t* pTypeUUID,
587 uint32_t preferredTypeFlag,
588 effect_descriptor_t* pDescriptor) const {
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700589 AudioUuid effectUuidAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800590 legacy2aidl_audio_uuid_t_AudioUuid(*pEffectUUID));
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700591 AudioUuid typeUuidAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800592 legacy2aidl_audio_uuid_t_AudioUuid(*pTypeUUID));
593 int32_t preferredTypeFlagAidl = VALUE_OR_RETURN_STATUS(
594 convertReinterpret<int32_t>(preferredTypeFlag));
595 media::EffectDescriptor aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800596 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800597 mDelegate->getEffectDescriptor(effectUuidAidl, typeUuidAidl, preferredTypeFlagAidl,
Andy Hung1131b6e2020-12-08 20:47:45 -0800598 &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800599 if (pDescriptor != nullptr) {
600 *pDescriptor = VALUE_OR_RETURN_STATUS(
601 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
602 }
603 return OK;
604}
605
606status_t AudioFlingerClientAdapter::createEffect(const media::CreateEffectRequest& request,
607 media::CreateEffectResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800608 return statusTFromBinderStatus(mDelegate->createEffect(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800609}
610
611status_t
612AudioFlingerClientAdapter::moveEffects(audio_session_t session, audio_io_handle_t srcOutput,
613 audio_io_handle_t dstOutput) {
614 int32_t sessionAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_session_t_int32_t(session));
615 int32_t srcOutputAidl = VALUE_OR_RETURN_STATUS(
616 legacy2aidl_audio_io_handle_t_int32_t(srcOutput));
617 int32_t dstOutputAidl = VALUE_OR_RETURN_STATUS(
618 legacy2aidl_audio_io_handle_t_int32_t(dstOutput));
Andy Hung1131b6e2020-12-08 20:47:45 -0800619 return statusTFromBinderStatus(
620 mDelegate->moveEffects(sessionAidl, srcOutputAidl, dstOutputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800621}
622
623void AudioFlingerClientAdapter::setEffectSuspended(int effectId,
624 audio_session_t sessionId,
625 bool suspended) {
626 [&]() -> status_t {
627 int32_t effectIdAidl = VALUE_OR_RETURN_STATUS(convertReinterpret<int32_t>(effectId));
628 int32_t sessionIdAidl = VALUE_OR_RETURN_STATUS(
629 legacy2aidl_audio_session_t_int32_t(sessionId));
Andy Hung1131b6e2020-12-08 20:47:45 -0800630 return statusTFromBinderStatus(
631 mDelegate->setEffectSuspended(effectIdAidl, sessionIdAidl, suspended));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800632 }();
633 // Failure is ignored.
634}
635
636audio_module_handle_t AudioFlingerClientAdapter::loadHwModule(const char* name) {
637 auto result = [&]() -> ConversionResult<audio_module_handle_t> {
638 std::string nameAidl(name);
639 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800640 RETURN_IF_ERROR(statusTFromBinderStatus(
641 mDelegate->loadHwModule(nameAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800642 return aidl2legacy_int32_t_audio_module_handle_t(aidlRet);
643 }();
644 // Failure is ignored.
645 return result.value_or(0);
646}
647
648uint32_t AudioFlingerClientAdapter::getPrimaryOutputSamplingRate() {
649 auto result = [&]() -> ConversionResult<uint32_t> {
650 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800651 RETURN_IF_ERROR(statusTFromBinderStatus(
652 mDelegate->getPrimaryOutputSamplingRate(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800653 return convertIntegral<uint32_t>(aidlRet);
654 }();
655 // Failure is ignored.
656 return result.value_or(0);
657}
658
659size_t AudioFlingerClientAdapter::getPrimaryOutputFrameCount() {
660 auto result = [&]() -> ConversionResult<size_t> {
661 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800662 RETURN_IF_ERROR(statusTFromBinderStatus(
663 mDelegate->getPrimaryOutputFrameCount(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800664 return convertIntegral<size_t>(aidlRet);
665 }();
666 // Failure is ignored.
667 return result.value_or(0);
668}
669
670status_t AudioFlingerClientAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800671 return statusTFromBinderStatus(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800672}
673
674status_t AudioFlingerClientAdapter::getAudioPort(struct audio_port_v7* port) {
675 media::AudioPort portAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_v7_AudioPort(*port));
676 media::AudioPort aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800677 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
678 mDelegate->getAudioPort(portAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800679 *port = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioPort_audio_port_v7(aidlRet));
680 return OK;
681}
682
683status_t AudioFlingerClientAdapter::createAudioPatch(const struct audio_patch* patch,
684 audio_patch_handle_t* handle) {
685 media::AudioPatch patchAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_AudioPatch(*patch));
Kuowei Li247a3672021-07-21 21:46:07 +0800686 int32_t aidlRet = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(
687 AUDIO_PATCH_HANDLE_NONE));
688 if (handle != nullptr) {
689 aidlRet = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(*handle));
690 }
Andy Hung1131b6e2020-12-08 20:47:45 -0800691 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
692 mDelegate->createAudioPatch(patchAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800693 if (handle != nullptr) {
694 *handle = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_patch_handle_t(aidlRet));
695 }
696 return OK;
697}
698
699status_t AudioFlingerClientAdapter::releaseAudioPatch(audio_patch_handle_t handle) {
700 int32_t handleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(handle));
Andy Hung1131b6e2020-12-08 20:47:45 -0800701 return statusTFromBinderStatus(mDelegate->releaseAudioPatch(handleAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800702}
703
704status_t AudioFlingerClientAdapter::listAudioPatches(unsigned int* num_patches,
705 struct audio_patch* patches) {
706 std::vector<media::AudioPatch> aidlRet;
707 int32_t maxPatches = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(*num_patches));
Andy Hung1131b6e2020-12-08 20:47:45 -0800708 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
709 mDelegate->listAudioPatches(maxPatches, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800710 *num_patches = VALUE_OR_RETURN_STATUS(convertIntegral<unsigned int>(aidlRet.size()));
711 return convertRange(aidlRet.begin(), aidlRet.end(), patches,
712 aidl2legacy_AudioPatch_audio_patch);
713}
714
715status_t AudioFlingerClientAdapter::setAudioPortConfig(const struct audio_port_config* config) {
716 media::AudioPortConfig configAidl = VALUE_OR_RETURN_STATUS(
717 legacy2aidl_audio_port_config_AudioPortConfig(*config));
Andy Hung1131b6e2020-12-08 20:47:45 -0800718 return statusTFromBinderStatus(mDelegate->setAudioPortConfig(configAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800719}
720
721audio_hw_sync_t AudioFlingerClientAdapter::getAudioHwSyncForSession(audio_session_t sessionId) {
722 auto result = [&]() -> ConversionResult<audio_hw_sync_t> {
723 int32_t sessionIdAidl = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
724 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800725 RETURN_IF_ERROR(statusTFromBinderStatus(
726 mDelegate->getAudioHwSyncForSession(sessionIdAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800727 return aidl2legacy_int32_t_audio_hw_sync_t(aidlRet);
728 }();
729 return result.value_or(AUDIO_HW_SYNC_INVALID);
730}
731
732status_t AudioFlingerClientAdapter::systemReady() {
Andy Hung1131b6e2020-12-08 20:47:45 -0800733 return statusTFromBinderStatus(mDelegate->systemReady());
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800734}
735
Eric Laurentd66d7a12021-07-13 13:35:32 +0200736status_t AudioFlingerClientAdapter::audioPolicyReady() {
737 return statusTFromBinderStatus(mDelegate->audioPolicyReady());
738}
739
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800740size_t AudioFlingerClientAdapter::frameCountHAL(audio_io_handle_t ioHandle) const {
741 auto result = [&]() -> ConversionResult<size_t> {
742 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
743 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800744 RETURN_IF_ERROR(statusTFromBinderStatus(
745 mDelegate->frameCountHAL(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800746 return convertIntegral<size_t>(aidlRet);
747 }();
748 // Failure is ignored.
749 return result.value_or(0);
750}
751
752status_t
753AudioFlingerClientAdapter::getMicrophones(std::vector<media::MicrophoneInfo>* microphones) {
754 std::vector<media::MicrophoneInfoData> aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800755 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
756 mDelegate->getMicrophones(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800757 if (microphones != nullptr) {
758 *microphones = VALUE_OR_RETURN_STATUS(
759 convertContainer<std::vector<media::MicrophoneInfo>>(aidlRet,
760 media::aidl2legacy_MicrophoneInfo));
761 }
762 return OK;
763}
764
765status_t AudioFlingerClientAdapter::setAudioHalPids(const std::vector<pid_t>& pids) {
766 std::vector<int32_t> pidsAidl = VALUE_OR_RETURN_STATUS(
767 convertContainer<std::vector<int32_t>>(pids, legacy2aidl_pid_t_int32_t));
Andy Hung1131b6e2020-12-08 20:47:45 -0800768 return statusTFromBinderStatus(mDelegate->setAudioHalPids(pidsAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800769}
770
jiabin1319f5a2021-03-30 22:21:24 +0000771status_t AudioFlingerClientAdapter::setVibratorInfos(
772 const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
773 return statusTFromBinderStatus(mDelegate->setVibratorInfos(vibratorInfos));
774}
775
jiabin10a03f12021-05-07 23:46:28 +0000776status_t AudioFlingerClientAdapter::updateSecondaryOutputs(
777 const TrackSecondaryOutputsMap& trackSecondaryOutputs) {
778 std::vector<media::TrackSecondaryOutputInfo> trackSecondaryOutputInfos =
779 VALUE_OR_RETURN_STATUS(
780 convertContainer<std::vector<media::TrackSecondaryOutputInfo>>(
781 trackSecondaryOutputs,
782 legacy2aidl_TrackSecondaryOutputInfoPair_TrackSecondaryOutputInfo));
783 return statusTFromBinderStatus(mDelegate->updateSecondaryOutputs(trackSecondaryOutputInfos));
784}
785
Jiabin Huangebe64102021-09-07 20:01:07 +0000786status_t AudioFlingerClientAdapter::getMmapPolicyInfos(
jiabine99d0882021-09-17 05:21:25 +0000787 AudioMMapPolicyType policyType, std::vector<AudioMMapPolicyInfo> *policyInfos) {
Jiabin Huangebe64102021-09-07 20:01:07 +0000788 return statusTFromBinderStatus(mDelegate->getMmapPolicyInfos(policyType, policyInfos));
789}
790
jiabine504e7b2021-09-18 00:27:08 +0000791int32_t AudioFlingerClientAdapter::getAAudioMixerBurstCount() {
792 auto result = [&]() -> ConversionResult<int32_t> {
793 int32_t aidlRet;
794 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->getAAudioMixerBurstCount(&aidlRet)));
795 return convertIntegral<int32_t>(aidlRet);
796 }();
797 // Failure is ignored.
798 return result.value_or(0);
799}
800
801int32_t AudioFlingerClientAdapter::getAAudioHardwareBurstMinUsec() {
802 auto result = [&]() -> ConversionResult<int32_t> {
803 int32_t aidlRet;
804 RETURN_IF_ERROR(statusTFromBinderStatus(
805 mDelegate->getAAudioHardwareBurstMinUsec(&aidlRet)));
806 return convertIntegral<int32_t>(aidlRet);
807 }();
808 // Failure is ignored.
809 return result.value_or(0);
810}
811
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800812
813////////////////////////////////////////////////////////////////////////////////////////////////////
814// AudioFlingerServerAdapter
815AudioFlingerServerAdapter::AudioFlingerServerAdapter(
816 const sp<AudioFlingerServerAdapter::Delegate>& delegate) : mDelegate(delegate) {}
817
Ytai Ben-Tsvi24b33fc2021-05-10 13:08:11 -0700818status_t AudioFlingerServerAdapter::onTransact(uint32_t code,
819 const Parcel& data,
820 Parcel* reply,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800821 uint32_t flags) {
Ytai Ben-Tsvi24b33fc2021-05-10 13:08:11 -0700822 return mDelegate->onTransactWrapper(static_cast<Delegate::TransactionCode>(code),
823 data,
824 flags,
825 [&] {
826 return BnAudioFlingerService::onTransact(
827 code,
828 data,
829 reply,
830 flags);
831 });
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800832}
833
834status_t AudioFlingerServerAdapter::dump(int fd, const Vector<String16>& args) {
835 return mDelegate->dump(fd, args);
836}
837
838Status AudioFlingerServerAdapter::createTrack(const media::CreateTrackRequest& request,
839 media::CreateTrackResponse* _aidl_return) {
840 return Status::fromStatusT(mDelegate->createTrack(request, *_aidl_return));
841}
842
843Status AudioFlingerServerAdapter::createRecord(const media::CreateRecordRequest& request,
844 media::CreateRecordResponse* _aidl_return) {
845 return Status::fromStatusT(mDelegate->createRecord(request, *_aidl_return));
846}
847
848Status AudioFlingerServerAdapter::sampleRate(int32_t ioHandle, int32_t* _aidl_return) {
849 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
850 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
851 *_aidl_return = VALUE_OR_RETURN_BINDER(
852 convertIntegral<int32_t>(mDelegate->sampleRate(ioHandleLegacy)));
853 return Status::ok();
854}
855
856Status AudioFlingerServerAdapter::format(int32_t output,
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700857 AudioFormatDescription* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800858 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
859 aidl2legacy_int32_t_audio_io_handle_t(output));
860 *_aidl_return = VALUE_OR_RETURN_BINDER(
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700861 legacy2aidl_audio_format_t_AudioFormatDescription(mDelegate->format(outputLegacy)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800862 return Status::ok();
863}
864
865Status AudioFlingerServerAdapter::frameCount(int32_t ioHandle, int64_t* _aidl_return) {
866 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
867 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
868 *_aidl_return = VALUE_OR_RETURN_BINDER(
869 convertIntegral<int64_t>(mDelegate->frameCount(ioHandleLegacy)));
870 return Status::ok();
871}
872
873Status AudioFlingerServerAdapter::latency(int32_t output, int32_t* _aidl_return) {
874 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
875 aidl2legacy_int32_t_audio_io_handle_t(output));
876 *_aidl_return = VALUE_OR_RETURN_BINDER(
877 convertIntegral<int32_t>(mDelegate->latency(outputLegacy)));
878 return Status::ok();
879}
880
881Status AudioFlingerServerAdapter::setMasterVolume(float value) {
882 return Status::fromStatusT(mDelegate->setMasterVolume(value));
883}
884
885Status AudioFlingerServerAdapter::setMasterMute(bool muted) {
886 return Status::fromStatusT(mDelegate->setMasterMute(muted));
887}
888
889Status AudioFlingerServerAdapter::masterVolume(float* _aidl_return) {
890 *_aidl_return = mDelegate->masterVolume();
891 return Status::ok();
892}
893
894Status AudioFlingerServerAdapter::masterMute(bool* _aidl_return) {
895 *_aidl_return = mDelegate->masterMute();
896 return Status::ok();
897}
898
899Status AudioFlingerServerAdapter::setMasterBalance(float balance) {
900 return Status::fromStatusT(mDelegate->setMasterBalance(balance));
901}
902
903Status AudioFlingerServerAdapter::getMasterBalance(float* _aidl_return) {
904 return Status::fromStatusT(mDelegate->getMasterBalance(_aidl_return));
905}
906
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700907Status AudioFlingerServerAdapter::setStreamVolume(AudioStreamType stream, float value,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800908 int32_t output) {
909 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
910 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
911 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
912 aidl2legacy_int32_t_audio_io_handle_t(output));
913 return Status::fromStatusT(mDelegate->setStreamVolume(streamLegacy, value, outputLegacy));
914}
915
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700916Status AudioFlingerServerAdapter::setStreamMute(AudioStreamType stream, bool muted) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800917 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
918 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
919 return Status::fromStatusT(mDelegate->setStreamMute(streamLegacy, muted));
920}
921
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700922Status AudioFlingerServerAdapter::streamVolume(AudioStreamType stream, int32_t output,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800923 float* _aidl_return) {
924 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
925 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
926 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
927 aidl2legacy_int32_t_audio_io_handle_t(output));
928 *_aidl_return = mDelegate->streamVolume(streamLegacy, outputLegacy);
929 return Status::ok();
930}
931
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700932Status AudioFlingerServerAdapter::streamMute(AudioStreamType stream, bool* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800933 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
934 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
935 *_aidl_return = mDelegate->streamMute(streamLegacy);
936 return Status::ok();
937}
938
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700939Status AudioFlingerServerAdapter::setMode(AudioMode mode) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800940 audio_mode_t modeLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioMode_audio_mode_t(mode));
941 return Status::fromStatusT(mDelegate->setMode(modeLegacy));
942}
943
944Status AudioFlingerServerAdapter::setMicMute(bool state) {
945 return Status::fromStatusT(mDelegate->setMicMute(state));
946}
947
948Status AudioFlingerServerAdapter::getMicMute(bool* _aidl_return) {
949 *_aidl_return = mDelegate->getMicMute();
950 return Status::ok();
951}
952
953Status AudioFlingerServerAdapter::setRecordSilenced(int32_t portId, bool silenced) {
954 audio_port_handle_t portIdLegacy = VALUE_OR_RETURN_BINDER(
955 aidl2legacy_int32_t_audio_port_handle_t(portId));
956 mDelegate->setRecordSilenced(portIdLegacy, silenced);
957 return Status::ok();
958}
959
960Status
961AudioFlingerServerAdapter::setParameters(int32_t ioHandle, const std::string& keyValuePairs) {
962 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
963 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
964 String8 keyValuePairsLegacy = VALUE_OR_RETURN_BINDER(
965 aidl2legacy_string_view_String8(keyValuePairs));
966 return Status::fromStatusT(mDelegate->setParameters(ioHandleLegacy, keyValuePairsLegacy));
967}
968
969Status AudioFlingerServerAdapter::getParameters(int32_t ioHandle, const std::string& keys,
970 std::string* _aidl_return) {
971 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
972 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
973 String8 keysLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_string_view_String8(keys));
974 *_aidl_return = VALUE_OR_RETURN_BINDER(
975 legacy2aidl_String8_string(mDelegate->getParameters(ioHandleLegacy, keysLegacy)));
976 return Status::ok();
977}
978
979Status AudioFlingerServerAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
980 mDelegate->registerClient(client);
981 return Status::ok();
982}
983
984Status AudioFlingerServerAdapter::getInputBufferSize(int32_t sampleRate,
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700985 const AudioFormatDescription& format,
986 const AudioChannelLayout& channelMask,
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -0700987 int64_t* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800988 uint32_t sampleRateLegacy = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(sampleRate));
989 audio_format_t formatLegacy = VALUE_OR_RETURN_BINDER(
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700990 aidl2legacy_AudioFormatDescription_audio_format_t(format));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800991 audio_channel_mask_t channelMaskLegacy = VALUE_OR_RETURN_BINDER(
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700992 aidl2legacy_AudioChannelLayout_audio_channel_mask_t(channelMask, true /*isInput*/));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800993 size_t size = mDelegate->getInputBufferSize(sampleRateLegacy, formatLegacy, channelMaskLegacy);
994 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int64_t>(size));
995 return Status::ok();
996}
997
998Status AudioFlingerServerAdapter::openOutput(const media::OpenOutputRequest& request,
999 media::OpenOutputResponse* _aidl_return) {
1000 return Status::fromStatusT(mDelegate->openOutput(request, _aidl_return));
1001}
1002
1003Status AudioFlingerServerAdapter::openDuplicateOutput(int32_t output1, int32_t output2,
1004 int32_t* _aidl_return) {
1005 audio_io_handle_t output1Legacy = VALUE_OR_RETURN_BINDER(
1006 aidl2legacy_int32_t_audio_io_handle_t(output1));
1007 audio_io_handle_t output2Legacy = VALUE_OR_RETURN_BINDER(
1008 aidl2legacy_int32_t_audio_io_handle_t(output2));
1009 audio_io_handle_t result = mDelegate->openDuplicateOutput(output1Legacy, output2Legacy);
1010 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_io_handle_t_int32_t(result));
1011 return Status::ok();
1012}
1013
1014Status AudioFlingerServerAdapter::closeOutput(int32_t output) {
1015 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1016 aidl2legacy_int32_t_audio_io_handle_t(output));
1017 return Status::fromStatusT(mDelegate->closeOutput(outputLegacy));
1018}
1019
1020Status AudioFlingerServerAdapter::suspendOutput(int32_t output) {
1021 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1022 aidl2legacy_int32_t_audio_io_handle_t(output));
1023 return Status::fromStatusT(mDelegate->suspendOutput(outputLegacy));
1024}
1025
1026Status AudioFlingerServerAdapter::restoreOutput(int32_t output) {
1027 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1028 aidl2legacy_int32_t_audio_io_handle_t(output));
1029 return Status::fromStatusT(mDelegate->restoreOutput(outputLegacy));
1030}
1031
1032Status AudioFlingerServerAdapter::openInput(const media::OpenInputRequest& request,
1033 media::OpenInputResponse* _aidl_return) {
1034 return Status::fromStatusT(mDelegate->openInput(request, _aidl_return));
1035}
1036
1037Status AudioFlingerServerAdapter::closeInput(int32_t input) {
1038 audio_io_handle_t inputLegacy = VALUE_OR_RETURN_BINDER(
1039 aidl2legacy_int32_t_audio_io_handle_t(input));
1040 return Status::fromStatusT(mDelegate->closeInput(inputLegacy));
1041}
1042
Mikhail Naganovdbf03642021-08-25 18:15:32 -07001043Status AudioFlingerServerAdapter::invalidateStream(AudioStreamType stream) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001044 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
1045 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
1046 return Status::fromStatusT(mDelegate->invalidateStream(streamLegacy));
1047}
1048
1049Status AudioFlingerServerAdapter::setVoiceVolume(float volume) {
1050 return Status::fromStatusT(mDelegate->setVoiceVolume(volume));
1051}
1052
1053Status
1054AudioFlingerServerAdapter::getRenderPosition(int32_t output, media::RenderPosition* _aidl_return) {
1055 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1056 aidl2legacy_int32_t_audio_io_handle_t(output));
1057 uint32_t halFramesLegacy;
1058 uint32_t dspFramesLegacy;
1059 RETURN_BINDER_IF_ERROR(
1060 mDelegate->getRenderPosition(&halFramesLegacy, &dspFramesLegacy, outputLegacy));
1061 _aidl_return->halFrames = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(halFramesLegacy));
1062 _aidl_return->dspFrames = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(dspFramesLegacy));
1063 return Status::ok();
1064}
1065
1066Status AudioFlingerServerAdapter::getInputFramesLost(int32_t ioHandle, int32_t* _aidl_return) {
1067 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1068 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1069 uint32_t result = mDelegate->getInputFramesLost(ioHandleLegacy);
1070 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(result));
1071 return Status::ok();
1072}
1073
1074Status
1075AudioFlingerServerAdapter::newAudioUniqueId(media::AudioUniqueIdUse use, int32_t* _aidl_return) {
1076 audio_unique_id_use_t useLegacy = VALUE_OR_RETURN_BINDER(
1077 aidl2legacy_AudioUniqueIdUse_audio_unique_id_use_t(use));
1078 audio_unique_id_t result = mDelegate->newAudioUniqueId(useLegacy);
1079 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_unique_id_t_int32_t(result));
1080 return Status::ok();
1081}
1082
1083Status
1084AudioFlingerServerAdapter::acquireAudioSessionId(int32_t audioSession, int32_t pid, int32_t uid) {
1085 audio_session_t audioSessionLegacy = VALUE_OR_RETURN_BINDER(
1086 aidl2legacy_int32_t_audio_session_t(audioSession));
1087 pid_t pidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_pid_t(pid));
1088 uid_t uidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_uid_t(uid));
1089 mDelegate->acquireAudioSessionId(audioSessionLegacy, pidLegacy, uidLegacy);
1090 return Status::ok();
1091}
1092
1093Status AudioFlingerServerAdapter::releaseAudioSessionId(int32_t audioSession, int32_t pid) {
1094 audio_session_t audioSessionLegacy = VALUE_OR_RETURN_BINDER(
1095 aidl2legacy_int32_t_audio_session_t(audioSession));
1096 pid_t pidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_pid_t(pid));
1097 mDelegate->releaseAudioSessionId(audioSessionLegacy, pidLegacy);
1098 return Status::ok();
1099}
1100
1101Status AudioFlingerServerAdapter::queryNumberEffects(int32_t* _aidl_return) {
1102 uint32_t result;
1103 RETURN_BINDER_IF_ERROR(mDelegate->queryNumberEffects(&result));
1104 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(result));
1105 return Status::ok();
1106}
1107
1108Status
1109AudioFlingerServerAdapter::queryEffect(int32_t index, media::EffectDescriptor* _aidl_return) {
1110 uint32_t indexLegacy = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(index));
1111 effect_descriptor_t result;
1112 RETURN_BINDER_IF_ERROR(mDelegate->queryEffect(indexLegacy, &result));
1113 *_aidl_return = VALUE_OR_RETURN_BINDER(
1114 legacy2aidl_effect_descriptor_t_EffectDescriptor(result));
1115 return Status::ok();
1116}
1117
Mikhail Naganovddceecc2021-09-03 13:58:56 -07001118Status AudioFlingerServerAdapter::getEffectDescriptor(const AudioUuid& effectUUID,
1119 const AudioUuid& typeUUID,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001120 int32_t preferredTypeFlag,
1121 media::EffectDescriptor* _aidl_return) {
1122 effect_uuid_t effectUuidLegacy = VALUE_OR_RETURN_BINDER(
1123 aidl2legacy_AudioUuid_audio_uuid_t(effectUUID));
1124 effect_uuid_t typeUuidLegacy = VALUE_OR_RETURN_BINDER(
1125 aidl2legacy_AudioUuid_audio_uuid_t(typeUUID));
1126 uint32_t preferredTypeFlagLegacy = VALUE_OR_RETURN_BINDER(
1127 convertReinterpret<uint32_t>(preferredTypeFlag));
1128 effect_descriptor_t result;
1129 RETURN_BINDER_IF_ERROR(mDelegate->getEffectDescriptor(&effectUuidLegacy, &typeUuidLegacy,
1130 preferredTypeFlagLegacy, &result));
1131 *_aidl_return = VALUE_OR_RETURN_BINDER(
1132 legacy2aidl_effect_descriptor_t_EffectDescriptor(result));
1133 return Status::ok();
1134}
1135
1136Status AudioFlingerServerAdapter::createEffect(const media::CreateEffectRequest& request,
1137 media::CreateEffectResponse* _aidl_return) {
1138 return Status::fromStatusT(mDelegate->createEffect(request, _aidl_return));
1139}
1140
1141Status
1142AudioFlingerServerAdapter::moveEffects(int32_t session, int32_t srcOutput, int32_t dstOutput) {
1143 audio_session_t sessionLegacy = VALUE_OR_RETURN_BINDER(
1144 aidl2legacy_int32_t_audio_session_t(session));
1145 audio_io_handle_t srcOutputLegacy = VALUE_OR_RETURN_BINDER(
1146 aidl2legacy_int32_t_audio_io_handle_t(srcOutput));
1147 audio_io_handle_t dstOutputLegacy = VALUE_OR_RETURN_BINDER(
1148 aidl2legacy_int32_t_audio_io_handle_t(dstOutput));
1149 return Status::fromStatusT(
1150 mDelegate->moveEffects(sessionLegacy, srcOutputLegacy, dstOutputLegacy));
1151}
1152
1153Status AudioFlingerServerAdapter::setEffectSuspended(int32_t effectId, int32_t sessionId,
1154 bool suspended) {
1155 int effectIdLegacy = VALUE_OR_RETURN_BINDER(convertReinterpret<int>(effectId));
1156 audio_session_t sessionIdLegacy = VALUE_OR_RETURN_BINDER(
1157 aidl2legacy_int32_t_audio_session_t(sessionId));
1158 mDelegate->setEffectSuspended(effectIdLegacy, sessionIdLegacy, suspended);
1159 return Status::ok();
1160}
1161
1162Status AudioFlingerServerAdapter::loadHwModule(const std::string& name, int32_t* _aidl_return) {
1163 audio_module_handle_t result = mDelegate->loadHwModule(name.c_str());
1164 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_module_handle_t_int32_t(result));
1165 return Status::ok();
1166}
1167
1168Status AudioFlingerServerAdapter::getPrimaryOutputSamplingRate(int32_t* _aidl_return) {
1169 *_aidl_return = VALUE_OR_RETURN_BINDER(
1170 convertIntegral<int32_t>(mDelegate->getPrimaryOutputSamplingRate()));
1171 return Status::ok();
1172}
1173
1174Status AudioFlingerServerAdapter::getPrimaryOutputFrameCount(int64_t* _aidl_return) {
1175 *_aidl_return = VALUE_OR_RETURN_BINDER(
1176 convertIntegral<int64_t>(mDelegate->getPrimaryOutputFrameCount()));
1177 return Status::ok();
1178
1179}
1180
1181Status AudioFlingerServerAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
1182 return Status::fromStatusT(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
1183}
1184
1185Status AudioFlingerServerAdapter::getAudioPort(const media::AudioPort& port,
1186 media::AudioPort* _aidl_return) {
1187 audio_port_v7 portLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPort_audio_port_v7(port));
1188 RETURN_BINDER_IF_ERROR(mDelegate->getAudioPort(&portLegacy));
1189 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_port_v7_AudioPort(portLegacy));
1190 return Status::ok();
1191}
1192
1193Status AudioFlingerServerAdapter::createAudioPatch(const media::AudioPatch& patch,
1194 int32_t* _aidl_return) {
1195 audio_patch patchLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPatch_audio_patch(patch));
Kuowei Li247a3672021-07-21 21:46:07 +08001196 audio_patch_handle_t handleLegacy = VALUE_OR_RETURN_BINDER(
1197 aidl2legacy_int32_t_audio_patch_handle_t(*_aidl_return));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001198 RETURN_BINDER_IF_ERROR(mDelegate->createAudioPatch(&patchLegacy, &handleLegacy));
1199 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_patch_handle_t_int32_t(handleLegacy));
1200 return Status::ok();
1201}
1202
1203Status AudioFlingerServerAdapter::releaseAudioPatch(int32_t handle) {
1204 audio_patch_handle_t handleLegacy = VALUE_OR_RETURN_BINDER(
1205 aidl2legacy_int32_t_audio_patch_handle_t(handle));
1206 return Status::fromStatusT(mDelegate->releaseAudioPatch(handleLegacy));
1207}
1208
1209Status AudioFlingerServerAdapter::listAudioPatches(int32_t maxCount,
1210 std::vector<media::AudioPatch>* _aidl_return) {
1211 unsigned int count = VALUE_OR_RETURN_BINDER(convertIntegral<unsigned int>(maxCount));
1212 count = std::min(count, static_cast<unsigned int>(MAX_ITEMS_PER_LIST));
1213 std::unique_ptr<audio_patch[]> patchesLegacy(new audio_patch[count]);
1214 RETURN_BINDER_IF_ERROR(mDelegate->listAudioPatches(&count, patchesLegacy.get()));
1215 RETURN_BINDER_IF_ERROR(convertRange(&patchesLegacy[0],
1216 &patchesLegacy[count],
1217 std::back_inserter(*_aidl_return),
1218 legacy2aidl_audio_patch_AudioPatch));
1219 return Status::ok();
1220}
1221
1222Status AudioFlingerServerAdapter::setAudioPortConfig(const media::AudioPortConfig& config) {
1223 audio_port_config configLegacy = VALUE_OR_RETURN_BINDER(
1224 aidl2legacy_AudioPortConfig_audio_port_config(config));
1225 return Status::fromStatusT(mDelegate->setAudioPortConfig(&configLegacy));
1226}
1227
1228Status AudioFlingerServerAdapter::getAudioHwSyncForSession(int32_t sessionId,
1229 int32_t* _aidl_return) {
1230 audio_session_t sessionIdLegacy = VALUE_OR_RETURN_BINDER(
1231 aidl2legacy_int32_t_audio_session_t(sessionId));
1232 audio_hw_sync_t result = mDelegate->getAudioHwSyncForSession(sessionIdLegacy);
1233 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_hw_sync_t_int32_t(result));
1234 return Status::ok();
1235}
1236
1237Status AudioFlingerServerAdapter::systemReady() {
1238 return Status::fromStatusT(mDelegate->systemReady());
1239}
1240
Eric Laurentd66d7a12021-07-13 13:35:32 +02001241Status AudioFlingerServerAdapter::audioPolicyReady() {
1242 mDelegate->audioPolicyReady();
1243 return Status::ok();
1244}
1245
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001246Status AudioFlingerServerAdapter::frameCountHAL(int32_t ioHandle, int64_t* _aidl_return) {
1247 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1248 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1249 size_t result = mDelegate->frameCountHAL(ioHandleLegacy);
1250 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int64_t>(result));
1251 return Status::ok();
1252}
1253
1254Status AudioFlingerServerAdapter::getMicrophones(
1255 std::vector<media::MicrophoneInfoData>* _aidl_return) {
1256 std::vector<media::MicrophoneInfo> resultLegacy;
1257 RETURN_BINDER_IF_ERROR(mDelegate->getMicrophones(&resultLegacy));
1258 *_aidl_return = VALUE_OR_RETURN_BINDER(convertContainer<std::vector<media::MicrophoneInfoData>>(
1259 resultLegacy, media::legacy2aidl_MicrophoneInfo));
1260 return Status::ok();
1261}
1262
1263Status AudioFlingerServerAdapter::setAudioHalPids(const std::vector<int32_t>& pids) {
1264 std::vector<pid_t> pidsLegacy = VALUE_OR_RETURN_BINDER(
1265 convertContainer<std::vector<pid_t>>(pids, aidl2legacy_int32_t_pid_t));
1266 RETURN_BINDER_IF_ERROR(mDelegate->setAudioHalPids(pidsLegacy));
1267 return Status::ok();
1268}
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -08001269
jiabin1319f5a2021-03-30 22:21:24 +00001270Status AudioFlingerServerAdapter::setVibratorInfos(
1271 const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
1272 return Status::fromStatusT(mDelegate->setVibratorInfos(vibratorInfos));
1273}
1274
jiabin10a03f12021-05-07 23:46:28 +00001275Status AudioFlingerServerAdapter::updateSecondaryOutputs(
1276 const std::vector<media::TrackSecondaryOutputInfo>& trackSecondaryOutputInfos) {
1277 TrackSecondaryOutputsMap trackSecondaryOutputs =
1278 VALUE_OR_RETURN_BINDER(convertContainer<TrackSecondaryOutputsMap>(
1279 trackSecondaryOutputInfos,
1280 aidl2legacy_TrackSecondaryOutputInfo_TrackSecondaryOutputInfoPair));
1281 return Status::fromStatusT(mDelegate->updateSecondaryOutputs(trackSecondaryOutputs));
1282}
1283
Jiabin Huangebe64102021-09-07 20:01:07 +00001284Status AudioFlingerServerAdapter::getMmapPolicyInfos(
jiabine99d0882021-09-17 05:21:25 +00001285 AudioMMapPolicyType policyType, std::vector<AudioMMapPolicyInfo> *_aidl_return) {
Jiabin Huangebe64102021-09-07 20:01:07 +00001286 return Status::fromStatusT(mDelegate->getMmapPolicyInfos(policyType, _aidl_return));
1287}
1288
jiabine504e7b2021-09-18 00:27:08 +00001289Status AudioFlingerServerAdapter::getAAudioMixerBurstCount(int32_t* _aidl_return) {
1290 *_aidl_return = VALUE_OR_RETURN_BINDER(
1291 convertIntegral<int32_t>(mDelegate->getAAudioMixerBurstCount()));
1292 return Status::ok();
1293}
1294
1295Status AudioFlingerServerAdapter::getAAudioHardwareBurstMinUsec(int32_t* _aidl_return) {
1296 *_aidl_return = VALUE_OR_RETURN_BINDER(
1297 convertIntegral<int32_t>(mDelegate->getAAudioHardwareBurstMinUsec()));
1298 return Status::ok();
1299}
1300
Glenn Kasten40bc9062015-03-20 09:09:33 -07001301} // namespace android