blob: fdec918fe00a2fb2156f73176282db50daf3fc7c [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;
Mikhail Naganovddceecc2021-09-03 13:58:56 -070036using media::audio::common::AudioMode;
Mikhail Naganovdbf03642021-08-25 18:15:32 -070037using media::audio::common::AudioStreamType;
Mikhail Naganovddceecc2021-09-03 13:58:56 -070038using media::audio::common::AudioUuid;
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -080039
Eric Laurentf75c2fe2015-04-02 13:49:15 -070040#define MAX_ITEMS_PER_LIST 1024
41
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -080042#define VALUE_OR_RETURN_BINDER(x) \
43 ({ \
44 auto _tmp = (x); \
45 if (!_tmp.ok()) return Status::fromStatusT(_tmp.error()); \
46 std::move(_tmp.value()); \
47 })
48
49#define RETURN_STATUS_IF_ERROR(x) \
50 { \
51 auto _tmp = (x); \
52 if (_tmp != OK) return _tmp; \
53 }
54
55#define RETURN_BINDER_IF_ERROR(x) \
56 { \
57 auto _tmp = (x); \
58 if (_tmp != OK) return Status::fromStatusT(_tmp); \
59 }
60
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080061ConversionResult<media::CreateTrackRequest> IAudioFlinger::CreateTrackInput::toAidl() const {
62 media::CreateTrackRequest aidl;
63 aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributesInternal(attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -070064 // Do not be mislead by 'Input'--this is an input to 'createTrack', which creates output tracks.
65 aidl.config = VALUE_OR_RETURN(legacy2aidl_audio_config_t_AudioConfig(
66 config, false /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -080067 aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080068 aidl.sharedBuffer = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(sharedBuffer));
69 aidl.notificationsPerBuffer = VALUE_OR_RETURN(convertIntegral<int32_t>(notificationsPerBuffer));
70 aidl.speed = speed;
71 aidl.audioTrackCallback = audioTrackCallback;
Andy Hung973638a2020-12-08 20:47:45 -080072 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080073 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
74 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
75 aidl.selectedDeviceId = VALUE_OR_RETURN(
76 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
77 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
78 return aidl;
79}
80
81ConversionResult<IAudioFlinger::CreateTrackInput>
82IAudioFlinger::CreateTrackInput::fromAidl(const media::CreateTrackRequest& aidl) {
83 IAudioFlinger::CreateTrackInput legacy;
84 legacy.attr = VALUE_OR_RETURN(aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -070085 // Do not be mislead by 'Input'--this is an input to 'createTrack', which creates output tracks.
86 legacy.config = VALUE_OR_RETURN(
87 aidl2legacy_AudioConfig_audio_config_t(aidl.config, false /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -080088 legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080089 legacy.sharedBuffer = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.sharedBuffer));
90 legacy.notificationsPerBuffer = VALUE_OR_RETURN(
91 convertIntegral<uint32_t>(aidl.notificationsPerBuffer));
92 legacy.speed = aidl.speed;
93 legacy.audioTrackCallback = aidl.audioTrackCallback;
Andy Hung973638a2020-12-08 20:47:45 -080094 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080095 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
96 legacy.notificationFrameCount = VALUE_OR_RETURN(
97 convertIntegral<size_t>(aidl.notificationFrameCount));
98 legacy.selectedDeviceId = VALUE_OR_RETURN(
99 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
100 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
101 return legacy;
102}
103
104ConversionResult<media::CreateTrackResponse>
105IAudioFlinger::CreateTrackOutput::toAidl() const {
106 media::CreateTrackResponse aidl;
Andy Hung973638a2020-12-08 20:47:45 -0800107 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800108 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
109 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
110 aidl.selectedDeviceId = VALUE_OR_RETURN(
111 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
112 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
113 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
Andy Hunga2159aa2021-07-20 13:01:52 -0700114 aidl.streamType = VALUE_OR_RETURN(
115 legacy2aidl_audio_stream_type_t_AudioStreamType(streamType));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800116 aidl.afFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(afFrameCount));
117 aidl.afSampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(afSampleRate));
118 aidl.afLatencyMs = VALUE_OR_RETURN(convertIntegral<int32_t>(afLatencyMs));
119 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));
142 legacy.outputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.outputId));
143 legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800144 legacy.audioTrack = aidl.audioTrack;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800145 return legacy;
146}
147
148ConversionResult<media::CreateRecordRequest>
149IAudioFlinger::CreateRecordInput::toAidl() const {
150 media::CreateRecordRequest aidl;
151 aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributesInternal(attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700152 aidl.config = VALUE_OR_RETURN(
153 legacy2aidl_audio_config_base_t_AudioConfigBase(config, true /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -0800154 aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800155 aidl.riid = VALUE_OR_RETURN(legacy2aidl_audio_unique_id_t_int32_t(riid));
Eric Laurentec376dc2021-04-08 20:41:22 +0200156 aidl.maxSharedAudioHistoryMs = VALUE_OR_RETURN(
157 convertIntegral<int32_t>(maxSharedAudioHistoryMs));
Andy Hung973638a2020-12-08 20:47:45 -0800158 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800159 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
160 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
161 aidl.selectedDeviceId = VALUE_OR_RETURN(
162 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
163 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
164 return aidl;
165}
166
167ConversionResult<IAudioFlinger::CreateRecordInput>
168IAudioFlinger::CreateRecordInput::fromAidl(
169 const media::CreateRecordRequest& aidl) {
170 IAudioFlinger::CreateRecordInput legacy;
Eric Laurentec376dc2021-04-08 20:41:22 +0200171 legacy.attr = VALUE_OR_RETURN(
172 aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700173 legacy.config = VALUE_OR_RETURN(
174 aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config, true /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -0800175 legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800176 legacy.riid = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_unique_id_t(aidl.riid));
Eric Laurentec376dc2021-04-08 20:41:22 +0200177 legacy.maxSharedAudioHistoryMs = VALUE_OR_RETURN(
178 convertIntegral<int32_t>(aidl.maxSharedAudioHistoryMs));
Andy Hung973638a2020-12-08 20:47:45 -0800179 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800180 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
181 legacy.notificationFrameCount = VALUE_OR_RETURN(
182 convertIntegral<size_t>(aidl.notificationFrameCount));
183 legacy.selectedDeviceId = VALUE_OR_RETURN(
184 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
185 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
186 return legacy;
187}
188
189ConversionResult<media::CreateRecordResponse>
190IAudioFlinger::CreateRecordOutput::toAidl() const {
191 media::CreateRecordResponse aidl;
Andy Hung973638a2020-12-08 20:47:45 -0800192 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800193 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
194 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
195 aidl.selectedDeviceId = VALUE_OR_RETURN(
196 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
197 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
198 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
199 aidl.inputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(inputId));
200 aidl.cblk = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(cblk));
201 aidl.buffers = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(buffers));
202 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800203 aidl.audioRecord = audioRecord;
jiabinb00edc32021-08-16 16:27:54 +0000204 aidl.serverConfig = VALUE_OR_RETURN(
205 legacy2aidl_audio_config_base_t_AudioConfigBase(serverConfig, true /*isInput*/));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800206 return aidl;
207}
208
209ConversionResult<IAudioFlinger::CreateRecordOutput>
210IAudioFlinger::CreateRecordOutput::fromAidl(
211 const media::CreateRecordResponse& aidl) {
212 IAudioFlinger::CreateRecordOutput legacy;
Andy Hung973638a2020-12-08 20:47:45 -0800213 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800214 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
215 legacy.notificationFrameCount = VALUE_OR_RETURN(
216 convertIntegral<size_t>(aidl.notificationFrameCount));
217 legacy.selectedDeviceId = VALUE_OR_RETURN(
218 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
219 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
220 legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
221 legacy.inputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.inputId));
222 legacy.cblk = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.cblk));
223 legacy.buffers = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.buffers));
224 legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800225 legacy.audioRecord = aidl.audioRecord;
jiabinb00edc32021-08-16 16:27:54 +0000226 legacy.serverConfig = VALUE_OR_RETURN(
227 aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.serverConfig, true /*isInput*/));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800228 return legacy;
229}
Eric Laurent42896a02019-09-27 15:40:33 -0700230
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800231////////////////////////////////////////////////////////////////////////////////////////////////////
232// AudioFlingerClientAdapter
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800233
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800234AudioFlingerClientAdapter::AudioFlingerClientAdapter(
235 const sp<media::IAudioFlingerService> delegate) : mDelegate(delegate) {}
Eric Laurent21da6472017-11-09 16:29:26 -0800236
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800237status_t AudioFlingerClientAdapter::createTrack(const media::CreateTrackRequest& input,
238 media::CreateTrackResponse& output) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800239 return statusTFromBinderStatus(mDelegate->createTrack(input, &output));
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800240}
241
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800242status_t AudioFlingerClientAdapter::createRecord(const media::CreateRecordRequest& input,
243 media::CreateRecordResponse& output) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800244 return statusTFromBinderStatus(mDelegate->createRecord(input, &output));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800245}
246
247uint32_t AudioFlingerClientAdapter::sampleRate(audio_io_handle_t ioHandle) const {
248 auto result = [&]() -> ConversionResult<uint32_t> {
249 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
250 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800251 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->sampleRate(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800252 return convertIntegral<uint32_t>(aidlRet);
253 }();
254 // Failure is ignored.
255 return result.value_or(0);
256}
257
258audio_format_t AudioFlingerClientAdapter::format(audio_io_handle_t output) const {
259 auto result = [&]() -> ConversionResult<audio_format_t> {
260 int32_t outputAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output));
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700261 AudioFormatDescription aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800262 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->format(outputAidl, &aidlRet)));
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700263 return aidl2legacy_AudioFormatDescription_audio_format_t(aidlRet);
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800264 }();
265 return result.value_or(AUDIO_FORMAT_INVALID);
266}
267
268size_t AudioFlingerClientAdapter::frameCount(audio_io_handle_t ioHandle) const {
269 auto result = [&]() -> ConversionResult<size_t> {
270 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
271 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800272 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->frameCount(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800273 return convertIntegral<size_t>(aidlRet);
274 }();
275 // Failure is ignored.
276 return result.value_or(0);
277}
278
279uint32_t AudioFlingerClientAdapter::latency(audio_io_handle_t output) const {
280 auto result = [&]() -> ConversionResult<uint32_t> {
281 int32_t outputAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output));
282 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800283 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->latency(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800284 return convertIntegral<uint32_t>(aidlRet);
285 }();
286 // Failure is ignored.
287 return result.value_or(0);
288}
289
290status_t AudioFlingerClientAdapter::setMasterVolume(float value) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800291 return statusTFromBinderStatus(mDelegate->setMasterVolume(value));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800292}
293
294status_t AudioFlingerClientAdapter::setMasterMute(bool muted) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800295 return statusTFromBinderStatus(mDelegate->setMasterMute(muted));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800296}
297
298float AudioFlingerClientAdapter::masterVolume() const {
299 auto result = [&]() -> ConversionResult<float> {
300 float aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800301 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterVolume(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800302 return aidlRet;
303 }();
304 // Failure is ignored.
305 return result.value_or(0.f);
306}
307
308bool AudioFlingerClientAdapter::masterMute() const {
309 auto result = [&]() -> ConversionResult<bool> {
310 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800311 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterMute(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800312 return aidlRet;
313 }();
314 // Failure is ignored.
315 return result.value_or(false);
316}
317
318status_t AudioFlingerClientAdapter::setMasterBalance(float balance) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800319 return statusTFromBinderStatus(mDelegate->setMasterBalance(balance));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800320}
321
322status_t AudioFlingerClientAdapter::getMasterBalance(float* balance) const{
Andy Hung1131b6e2020-12-08 20:47:45 -0800323 return statusTFromBinderStatus(mDelegate->getMasterBalance(balance));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800324}
325
326status_t AudioFlingerClientAdapter::setStreamVolume(audio_stream_type_t stream, float value,
327 audio_io_handle_t output) {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700328 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800329 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
330 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800331 return statusTFromBinderStatus(mDelegate->setStreamVolume(streamAidl, value, outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800332}
333
334status_t AudioFlingerClientAdapter::setStreamMute(audio_stream_type_t stream, bool muted) {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700335 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800336 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
Andy Hung1131b6e2020-12-08 20:47:45 -0800337 return statusTFromBinderStatus(mDelegate->setStreamMute(streamAidl, muted));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800338}
339
340float AudioFlingerClientAdapter::streamVolume(audio_stream_type_t stream,
341 audio_io_handle_t output) const {
342 auto result = [&]() -> ConversionResult<float> {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700343 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800344 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
345 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
346 float aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800347 RETURN_IF_ERROR(statusTFromBinderStatus(
348 mDelegate->streamVolume(streamAidl, outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800349 return aidlRet;
350 }();
351 // Failure is ignored.
352 return result.value_or(0.f);
353}
354
355bool AudioFlingerClientAdapter::streamMute(audio_stream_type_t stream) const {
356 auto result = [&]() -> ConversionResult<bool> {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700357 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800358 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
359 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800360 RETURN_IF_ERROR(statusTFromBinderStatus(
361 mDelegate->streamMute(streamAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800362 return aidlRet;
363 }();
364 // Failure is ignored.
365 return result.value_or(false);
366}
367
368status_t AudioFlingerClientAdapter::setMode(audio_mode_t mode) {
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700369 AudioMode modeAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_mode_t_AudioMode(mode));
Andy Hung1131b6e2020-12-08 20:47:45 -0800370 return statusTFromBinderStatus(mDelegate->setMode(modeAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800371}
372
373status_t AudioFlingerClientAdapter::setMicMute(bool state) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800374 return statusTFromBinderStatus(mDelegate->setMicMute(state));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800375}
376
377bool AudioFlingerClientAdapter::getMicMute() const {
378 auto result = [&]() -> ConversionResult<bool> {
379 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800380 RETURN_IF_ERROR(statusTFromBinderStatus(
381 mDelegate->getMicMute(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800382 return aidlRet;
383 }();
384 // Failure is ignored.
385 return result.value_or(false);
386}
387
388void AudioFlingerClientAdapter::setRecordSilenced(audio_port_handle_t portId, bool silenced) {
389 auto result = [&]() -> status_t {
390 int32_t portIdAidl = VALUE_OR_RETURN_STATUS(
391 legacy2aidl_audio_port_handle_t_int32_t(portId));
Andy Hung1131b6e2020-12-08 20:47:45 -0800392 return statusTFromBinderStatus(mDelegate->setRecordSilenced(portIdAidl, silenced));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800393 }();
394 // Failure is ignored.
395 (void) result;
396}
397
398status_t AudioFlingerClientAdapter::setParameters(audio_io_handle_t ioHandle,
399 const String8& keyValuePairs) {
400 int32_t ioHandleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
401 std::string keyValuePairsAidl = VALUE_OR_RETURN_STATUS(
402 legacy2aidl_String8_string(keyValuePairs));
Andy Hung1131b6e2020-12-08 20:47:45 -0800403 return statusTFromBinderStatus(mDelegate->setParameters(ioHandleAidl, keyValuePairsAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800404}
405
406String8 AudioFlingerClientAdapter::getParameters(audio_io_handle_t ioHandle, const String8& keys)
407const {
408 auto result = [&]() -> ConversionResult<String8> {
409 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
410 std::string keysAidl = VALUE_OR_RETURN(legacy2aidl_String8_string(keys));
411 std::string aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800412 RETURN_IF_ERROR(statusTFromBinderStatus(
413 mDelegate->getParameters(ioHandleAidl, keysAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800414 return aidl2legacy_string_view_String8(aidlRet);
415 }();
416 // Failure is ignored.
417 return result.value_or(String8());
418}
419
420void AudioFlingerClientAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
421 mDelegate->registerClient(client);
422 // Failure is ignored.
423}
424
425size_t AudioFlingerClientAdapter::getInputBufferSize(uint32_t sampleRate, audio_format_t format,
426 audio_channel_mask_t channelMask) const {
427 auto result = [&]() -> ConversionResult<size_t> {
428 int32_t sampleRateAidl = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700429 AudioFormatDescription formatAidl = VALUE_OR_RETURN(
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700430 legacy2aidl_audio_format_t_AudioFormatDescription(format));
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700431 AudioChannelLayout channelMaskAidl = VALUE_OR_RETURN(
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700432 legacy2aidl_audio_channel_mask_t_AudioChannelLayout(channelMask, true /*isInput*/));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800433 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800434 RETURN_IF_ERROR(statusTFromBinderStatus(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800435 mDelegate->getInputBufferSize(sampleRateAidl, formatAidl, channelMaskAidl,
Andy Hung1131b6e2020-12-08 20:47:45 -0800436 &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800437 return convertIntegral<size_t>(aidlRet);
438 }();
439 // Failure is ignored.
440 return result.value_or(0);
441}
442
443status_t AudioFlingerClientAdapter::openOutput(const media::OpenOutputRequest& request,
444 media::OpenOutputResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800445 return statusTFromBinderStatus(mDelegate->openOutput(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800446}
447
448audio_io_handle_t AudioFlingerClientAdapter::openDuplicateOutput(audio_io_handle_t output1,
449 audio_io_handle_t output2) {
450 auto result = [&]() -> ConversionResult<audio_io_handle_t> {
451 int32_t output1Aidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output1));
452 int32_t output2Aidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output2));
453 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800454 RETURN_IF_ERROR(statusTFromBinderStatus(
455 mDelegate->openDuplicateOutput(output1Aidl, output2Aidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800456 return aidl2legacy_int32_t_audio_io_handle_t(aidlRet);
457 }();
458 // Failure is ignored.
459 return result.value_or(0);
460}
461
462status_t AudioFlingerClientAdapter::closeOutput(audio_io_handle_t output) {
463 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800464 return statusTFromBinderStatus(mDelegate->closeOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800465}
466
467status_t AudioFlingerClientAdapter::suspendOutput(audio_io_handle_t output) {
468 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800469 return statusTFromBinderStatus(mDelegate->suspendOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800470}
471
472status_t AudioFlingerClientAdapter::restoreOutput(audio_io_handle_t output) {
473 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800474 return statusTFromBinderStatus(mDelegate->restoreOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800475}
476
477status_t AudioFlingerClientAdapter::openInput(const media::OpenInputRequest& request,
478 media::OpenInputResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800479 return statusTFromBinderStatus(mDelegate->openInput(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800480}
481
482status_t AudioFlingerClientAdapter::closeInput(audio_io_handle_t input) {
483 int32_t inputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(input));
Andy Hung1131b6e2020-12-08 20:47:45 -0800484 return statusTFromBinderStatus(mDelegate->closeInput(inputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800485}
486
487status_t AudioFlingerClientAdapter::invalidateStream(audio_stream_type_t stream) {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700488 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800489 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
Andy Hung1131b6e2020-12-08 20:47:45 -0800490 return statusTFromBinderStatus(mDelegate->invalidateStream(streamAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800491}
492
493status_t AudioFlingerClientAdapter::setVoiceVolume(float volume) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800494 return statusTFromBinderStatus(mDelegate->setVoiceVolume(volume));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800495}
496
497status_t AudioFlingerClientAdapter::getRenderPosition(uint32_t* halFrames, uint32_t* dspFrames,
498 audio_io_handle_t output) const {
499 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
500 media::RenderPosition aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800501 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
502 mDelegate->getRenderPosition(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800503 if (halFrames != nullptr) {
504 *halFrames = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet.halFrames));
505 }
506 if (dspFrames != nullptr) {
507 *dspFrames = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet.dspFrames));
508 }
509 return OK;
510}
511
512uint32_t AudioFlingerClientAdapter::getInputFramesLost(audio_io_handle_t ioHandle) const {
513 auto result = [&]() -> ConversionResult<uint32_t> {
514 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
515 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800516 RETURN_IF_ERROR(statusTFromBinderStatus(
517 mDelegate->getInputFramesLost(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800518 return convertIntegral<uint32_t>(aidlRet);
519 }();
520 // Failure is ignored.
521 return result.value_or(0);
522}
523
524audio_unique_id_t AudioFlingerClientAdapter::newAudioUniqueId(audio_unique_id_use_t use) {
525 auto result = [&]() -> ConversionResult<audio_unique_id_t> {
526 media::AudioUniqueIdUse useAidl = VALUE_OR_RETURN(
527 legacy2aidl_audio_unique_id_use_t_AudioUniqueIdUse(use));
528 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800529 RETURN_IF_ERROR(statusTFromBinderStatus(
530 mDelegate->newAudioUniqueId(useAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800531 return aidl2legacy_int32_t_audio_unique_id_t(aidlRet);
532 }();
533 return result.value_or(AUDIO_UNIQUE_ID_ALLOCATE);
534}
535
536void AudioFlingerClientAdapter::acquireAudioSessionId(audio_session_t audioSession, pid_t pid,
537 uid_t uid) {
538 [&]() -> status_t {
539 int32_t audioSessionAidl = VALUE_OR_RETURN_STATUS(
540 legacy2aidl_audio_session_t_int32_t(audioSession));
541 int32_t pidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(pid));
542 int32_t uidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(uid));
Andy Hung1131b6e2020-12-08 20:47:45 -0800543 return statusTFromBinderStatus(
544 mDelegate->acquireAudioSessionId(audioSessionAidl, pidAidl, uidAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800545 }();
546 // Failure is ignored.
547}
548
549void AudioFlingerClientAdapter::releaseAudioSessionId(audio_session_t audioSession, pid_t pid) {
550 [&]() -> status_t {
551 int32_t audioSessionAidl = VALUE_OR_RETURN_STATUS(
552 legacy2aidl_audio_session_t_int32_t(audioSession));
553 int32_t pidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(pid));
Andy Hung1131b6e2020-12-08 20:47:45 -0800554 return statusTFromBinderStatus(
555 mDelegate->releaseAudioSessionId(audioSessionAidl, pidAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800556 }();
557 // Failure is ignored.
558}
559
560status_t AudioFlingerClientAdapter::queryNumberEffects(uint32_t* numEffects) const {
561 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800562 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
563 mDelegate->queryNumberEffects(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800564 if (numEffects != nullptr) {
565 *numEffects = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet));
566 }
567 return OK;
568}
569
570status_t
571AudioFlingerClientAdapter::queryEffect(uint32_t index, effect_descriptor_t* pDescriptor) const {
572 int32_t indexAidl = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(index));
573 media::EffectDescriptor aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800574 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
575 mDelegate->queryEffect(indexAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800576 if (pDescriptor != nullptr) {
577 *pDescriptor = VALUE_OR_RETURN_STATUS(
578 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
579 }
580 return OK;
581}
582
583status_t AudioFlingerClientAdapter::getEffectDescriptor(const effect_uuid_t* pEffectUUID,
584 const effect_uuid_t* pTypeUUID,
585 uint32_t preferredTypeFlag,
586 effect_descriptor_t* pDescriptor) const {
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700587 AudioUuid effectUuidAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800588 legacy2aidl_audio_uuid_t_AudioUuid(*pEffectUUID));
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700589 AudioUuid typeUuidAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800590 legacy2aidl_audio_uuid_t_AudioUuid(*pTypeUUID));
591 int32_t preferredTypeFlagAidl = VALUE_OR_RETURN_STATUS(
592 convertReinterpret<int32_t>(preferredTypeFlag));
593 media::EffectDescriptor aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800594 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800595 mDelegate->getEffectDescriptor(effectUuidAidl, typeUuidAidl, preferredTypeFlagAidl,
Andy Hung1131b6e2020-12-08 20:47:45 -0800596 &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800597 if (pDescriptor != nullptr) {
598 *pDescriptor = VALUE_OR_RETURN_STATUS(
599 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
600 }
601 return OK;
602}
603
604status_t AudioFlingerClientAdapter::createEffect(const media::CreateEffectRequest& request,
605 media::CreateEffectResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800606 return statusTFromBinderStatus(mDelegate->createEffect(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800607}
608
609status_t
610AudioFlingerClientAdapter::moveEffects(audio_session_t session, audio_io_handle_t srcOutput,
611 audio_io_handle_t dstOutput) {
612 int32_t sessionAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_session_t_int32_t(session));
613 int32_t srcOutputAidl = VALUE_OR_RETURN_STATUS(
614 legacy2aidl_audio_io_handle_t_int32_t(srcOutput));
615 int32_t dstOutputAidl = VALUE_OR_RETURN_STATUS(
616 legacy2aidl_audio_io_handle_t_int32_t(dstOutput));
Andy Hung1131b6e2020-12-08 20:47:45 -0800617 return statusTFromBinderStatus(
618 mDelegate->moveEffects(sessionAidl, srcOutputAidl, dstOutputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800619}
620
621void AudioFlingerClientAdapter::setEffectSuspended(int effectId,
622 audio_session_t sessionId,
623 bool suspended) {
624 [&]() -> status_t {
625 int32_t effectIdAidl = VALUE_OR_RETURN_STATUS(convertReinterpret<int32_t>(effectId));
626 int32_t sessionIdAidl = VALUE_OR_RETURN_STATUS(
627 legacy2aidl_audio_session_t_int32_t(sessionId));
Andy Hung1131b6e2020-12-08 20:47:45 -0800628 return statusTFromBinderStatus(
629 mDelegate->setEffectSuspended(effectIdAidl, sessionIdAidl, suspended));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800630 }();
631 // Failure is ignored.
632}
633
634audio_module_handle_t AudioFlingerClientAdapter::loadHwModule(const char* name) {
635 auto result = [&]() -> ConversionResult<audio_module_handle_t> {
636 std::string nameAidl(name);
637 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800638 RETURN_IF_ERROR(statusTFromBinderStatus(
639 mDelegate->loadHwModule(nameAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800640 return aidl2legacy_int32_t_audio_module_handle_t(aidlRet);
641 }();
642 // Failure is ignored.
643 return result.value_or(0);
644}
645
646uint32_t AudioFlingerClientAdapter::getPrimaryOutputSamplingRate() {
647 auto result = [&]() -> ConversionResult<uint32_t> {
648 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800649 RETURN_IF_ERROR(statusTFromBinderStatus(
650 mDelegate->getPrimaryOutputSamplingRate(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800651 return convertIntegral<uint32_t>(aidlRet);
652 }();
653 // Failure is ignored.
654 return result.value_or(0);
655}
656
657size_t AudioFlingerClientAdapter::getPrimaryOutputFrameCount() {
658 auto result = [&]() -> ConversionResult<size_t> {
659 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800660 RETURN_IF_ERROR(statusTFromBinderStatus(
661 mDelegate->getPrimaryOutputFrameCount(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800662 return convertIntegral<size_t>(aidlRet);
663 }();
664 // Failure is ignored.
665 return result.value_or(0);
666}
667
668status_t AudioFlingerClientAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800669 return statusTFromBinderStatus(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800670}
671
672status_t AudioFlingerClientAdapter::getAudioPort(struct audio_port_v7* port) {
673 media::AudioPort portAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_v7_AudioPort(*port));
674 media::AudioPort aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800675 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
676 mDelegate->getAudioPort(portAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800677 *port = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioPort_audio_port_v7(aidlRet));
678 return OK;
679}
680
681status_t AudioFlingerClientAdapter::createAudioPatch(const struct audio_patch* patch,
682 audio_patch_handle_t* handle) {
683 media::AudioPatch patchAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_AudioPatch(*patch));
Kuowei Li247a3672021-07-21 21:46:07 +0800684 int32_t aidlRet = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(
685 AUDIO_PATCH_HANDLE_NONE));
686 if (handle != nullptr) {
687 aidlRet = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(*handle));
688 }
Andy Hung1131b6e2020-12-08 20:47:45 -0800689 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
690 mDelegate->createAudioPatch(patchAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800691 if (handle != nullptr) {
692 *handle = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_patch_handle_t(aidlRet));
693 }
694 return OK;
695}
696
697status_t AudioFlingerClientAdapter::releaseAudioPatch(audio_patch_handle_t handle) {
698 int32_t handleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(handle));
Andy Hung1131b6e2020-12-08 20:47:45 -0800699 return statusTFromBinderStatus(mDelegate->releaseAudioPatch(handleAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800700}
701
702status_t AudioFlingerClientAdapter::listAudioPatches(unsigned int* num_patches,
703 struct audio_patch* patches) {
704 std::vector<media::AudioPatch> aidlRet;
705 int32_t maxPatches = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(*num_patches));
Andy Hung1131b6e2020-12-08 20:47:45 -0800706 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
707 mDelegate->listAudioPatches(maxPatches, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800708 *num_patches = VALUE_OR_RETURN_STATUS(convertIntegral<unsigned int>(aidlRet.size()));
709 return convertRange(aidlRet.begin(), aidlRet.end(), patches,
710 aidl2legacy_AudioPatch_audio_patch);
711}
712
713status_t AudioFlingerClientAdapter::setAudioPortConfig(const struct audio_port_config* config) {
714 media::AudioPortConfig configAidl = VALUE_OR_RETURN_STATUS(
715 legacy2aidl_audio_port_config_AudioPortConfig(*config));
Andy Hung1131b6e2020-12-08 20:47:45 -0800716 return statusTFromBinderStatus(mDelegate->setAudioPortConfig(configAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800717}
718
719audio_hw_sync_t AudioFlingerClientAdapter::getAudioHwSyncForSession(audio_session_t sessionId) {
720 auto result = [&]() -> ConversionResult<audio_hw_sync_t> {
721 int32_t sessionIdAidl = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
722 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800723 RETURN_IF_ERROR(statusTFromBinderStatus(
724 mDelegate->getAudioHwSyncForSession(sessionIdAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800725 return aidl2legacy_int32_t_audio_hw_sync_t(aidlRet);
726 }();
727 return result.value_or(AUDIO_HW_SYNC_INVALID);
728}
729
730status_t AudioFlingerClientAdapter::systemReady() {
Andy Hung1131b6e2020-12-08 20:47:45 -0800731 return statusTFromBinderStatus(mDelegate->systemReady());
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800732}
733
Eric Laurentd66d7a12021-07-13 13:35:32 +0200734status_t AudioFlingerClientAdapter::audioPolicyReady() {
735 return statusTFromBinderStatus(mDelegate->audioPolicyReady());
736}
737
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800738size_t AudioFlingerClientAdapter::frameCountHAL(audio_io_handle_t ioHandle) const {
739 auto result = [&]() -> ConversionResult<size_t> {
740 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
741 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800742 RETURN_IF_ERROR(statusTFromBinderStatus(
743 mDelegate->frameCountHAL(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800744 return convertIntegral<size_t>(aidlRet);
745 }();
746 // Failure is ignored.
747 return result.value_or(0);
748}
749
750status_t
751AudioFlingerClientAdapter::getMicrophones(std::vector<media::MicrophoneInfo>* microphones) {
752 std::vector<media::MicrophoneInfoData> aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800753 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
754 mDelegate->getMicrophones(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800755 if (microphones != nullptr) {
756 *microphones = VALUE_OR_RETURN_STATUS(
757 convertContainer<std::vector<media::MicrophoneInfo>>(aidlRet,
758 media::aidl2legacy_MicrophoneInfo));
759 }
760 return OK;
761}
762
763status_t AudioFlingerClientAdapter::setAudioHalPids(const std::vector<pid_t>& pids) {
764 std::vector<int32_t> pidsAidl = VALUE_OR_RETURN_STATUS(
765 convertContainer<std::vector<int32_t>>(pids, legacy2aidl_pid_t_int32_t));
Andy Hung1131b6e2020-12-08 20:47:45 -0800766 return statusTFromBinderStatus(mDelegate->setAudioHalPids(pidsAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800767}
768
jiabin1319f5a2021-03-30 22:21:24 +0000769status_t AudioFlingerClientAdapter::setVibratorInfos(
770 const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
771 return statusTFromBinderStatus(mDelegate->setVibratorInfos(vibratorInfos));
772}
773
jiabin10a03f12021-05-07 23:46:28 +0000774status_t AudioFlingerClientAdapter::updateSecondaryOutputs(
775 const TrackSecondaryOutputsMap& trackSecondaryOutputs) {
776 std::vector<media::TrackSecondaryOutputInfo> trackSecondaryOutputInfos =
777 VALUE_OR_RETURN_STATUS(
778 convertContainer<std::vector<media::TrackSecondaryOutputInfo>>(
779 trackSecondaryOutputs,
780 legacy2aidl_TrackSecondaryOutputInfoPair_TrackSecondaryOutputInfo));
781 return statusTFromBinderStatus(mDelegate->updateSecondaryOutputs(trackSecondaryOutputInfos));
782}
783
Jiabin Huangebe64102021-09-07 20:01:07 +0000784status_t AudioFlingerClientAdapter::getMmapPolicyInfos(
785 media::AudioMMapPolicyType policyType,
786 std::vector<media::AudioMMapPolicyInfo> *policyInfos) {
787 return statusTFromBinderStatus(mDelegate->getMmapPolicyInfos(policyType, policyInfos));
788}
789
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800790
791////////////////////////////////////////////////////////////////////////////////////////////////////
792// AudioFlingerServerAdapter
793AudioFlingerServerAdapter::AudioFlingerServerAdapter(
794 const sp<AudioFlingerServerAdapter::Delegate>& delegate) : mDelegate(delegate) {}
795
Ytai Ben-Tsvi24b33fc2021-05-10 13:08:11 -0700796status_t AudioFlingerServerAdapter::onTransact(uint32_t code,
797 const Parcel& data,
798 Parcel* reply,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800799 uint32_t flags) {
Ytai Ben-Tsvi24b33fc2021-05-10 13:08:11 -0700800 return mDelegate->onTransactWrapper(static_cast<Delegate::TransactionCode>(code),
801 data,
802 flags,
803 [&] {
804 return BnAudioFlingerService::onTransact(
805 code,
806 data,
807 reply,
808 flags);
809 });
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800810}
811
812status_t AudioFlingerServerAdapter::dump(int fd, const Vector<String16>& args) {
813 return mDelegate->dump(fd, args);
814}
815
816Status AudioFlingerServerAdapter::createTrack(const media::CreateTrackRequest& request,
817 media::CreateTrackResponse* _aidl_return) {
818 return Status::fromStatusT(mDelegate->createTrack(request, *_aidl_return));
819}
820
821Status AudioFlingerServerAdapter::createRecord(const media::CreateRecordRequest& request,
822 media::CreateRecordResponse* _aidl_return) {
823 return Status::fromStatusT(mDelegate->createRecord(request, *_aidl_return));
824}
825
826Status AudioFlingerServerAdapter::sampleRate(int32_t ioHandle, int32_t* _aidl_return) {
827 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
828 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
829 *_aidl_return = VALUE_OR_RETURN_BINDER(
830 convertIntegral<int32_t>(mDelegate->sampleRate(ioHandleLegacy)));
831 return Status::ok();
832}
833
834Status AudioFlingerServerAdapter::format(int32_t output,
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700835 AudioFormatDescription* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800836 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
837 aidl2legacy_int32_t_audio_io_handle_t(output));
838 *_aidl_return = VALUE_OR_RETURN_BINDER(
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700839 legacy2aidl_audio_format_t_AudioFormatDescription(mDelegate->format(outputLegacy)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800840 return Status::ok();
841}
842
843Status AudioFlingerServerAdapter::frameCount(int32_t ioHandle, int64_t* _aidl_return) {
844 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
845 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
846 *_aidl_return = VALUE_OR_RETURN_BINDER(
847 convertIntegral<int64_t>(mDelegate->frameCount(ioHandleLegacy)));
848 return Status::ok();
849}
850
851Status AudioFlingerServerAdapter::latency(int32_t output, int32_t* _aidl_return) {
852 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
853 aidl2legacy_int32_t_audio_io_handle_t(output));
854 *_aidl_return = VALUE_OR_RETURN_BINDER(
855 convertIntegral<int32_t>(mDelegate->latency(outputLegacy)));
856 return Status::ok();
857}
858
859Status AudioFlingerServerAdapter::setMasterVolume(float value) {
860 return Status::fromStatusT(mDelegate->setMasterVolume(value));
861}
862
863Status AudioFlingerServerAdapter::setMasterMute(bool muted) {
864 return Status::fromStatusT(mDelegate->setMasterMute(muted));
865}
866
867Status AudioFlingerServerAdapter::masterVolume(float* _aidl_return) {
868 *_aidl_return = mDelegate->masterVolume();
869 return Status::ok();
870}
871
872Status AudioFlingerServerAdapter::masterMute(bool* _aidl_return) {
873 *_aidl_return = mDelegate->masterMute();
874 return Status::ok();
875}
876
877Status AudioFlingerServerAdapter::setMasterBalance(float balance) {
878 return Status::fromStatusT(mDelegate->setMasterBalance(balance));
879}
880
881Status AudioFlingerServerAdapter::getMasterBalance(float* _aidl_return) {
882 return Status::fromStatusT(mDelegate->getMasterBalance(_aidl_return));
883}
884
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700885Status AudioFlingerServerAdapter::setStreamVolume(AudioStreamType stream, float value,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800886 int32_t output) {
887 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
888 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
889 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
890 aidl2legacy_int32_t_audio_io_handle_t(output));
891 return Status::fromStatusT(mDelegate->setStreamVolume(streamLegacy, value, outputLegacy));
892}
893
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700894Status AudioFlingerServerAdapter::setStreamMute(AudioStreamType stream, bool muted) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800895 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
896 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
897 return Status::fromStatusT(mDelegate->setStreamMute(streamLegacy, muted));
898}
899
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700900Status AudioFlingerServerAdapter::streamVolume(AudioStreamType stream, int32_t output,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800901 float* _aidl_return) {
902 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
903 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
904 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
905 aidl2legacy_int32_t_audio_io_handle_t(output));
906 *_aidl_return = mDelegate->streamVolume(streamLegacy, outputLegacy);
907 return Status::ok();
908}
909
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700910Status AudioFlingerServerAdapter::streamMute(AudioStreamType stream, bool* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800911 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
912 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
913 *_aidl_return = mDelegate->streamMute(streamLegacy);
914 return Status::ok();
915}
916
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700917Status AudioFlingerServerAdapter::setMode(AudioMode mode) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800918 audio_mode_t modeLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioMode_audio_mode_t(mode));
919 return Status::fromStatusT(mDelegate->setMode(modeLegacy));
920}
921
922Status AudioFlingerServerAdapter::setMicMute(bool state) {
923 return Status::fromStatusT(mDelegate->setMicMute(state));
924}
925
926Status AudioFlingerServerAdapter::getMicMute(bool* _aidl_return) {
927 *_aidl_return = mDelegate->getMicMute();
928 return Status::ok();
929}
930
931Status AudioFlingerServerAdapter::setRecordSilenced(int32_t portId, bool silenced) {
932 audio_port_handle_t portIdLegacy = VALUE_OR_RETURN_BINDER(
933 aidl2legacy_int32_t_audio_port_handle_t(portId));
934 mDelegate->setRecordSilenced(portIdLegacy, silenced);
935 return Status::ok();
936}
937
938Status
939AudioFlingerServerAdapter::setParameters(int32_t ioHandle, const std::string& keyValuePairs) {
940 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
941 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
942 String8 keyValuePairsLegacy = VALUE_OR_RETURN_BINDER(
943 aidl2legacy_string_view_String8(keyValuePairs));
944 return Status::fromStatusT(mDelegate->setParameters(ioHandleLegacy, keyValuePairsLegacy));
945}
946
947Status AudioFlingerServerAdapter::getParameters(int32_t ioHandle, const std::string& keys,
948 std::string* _aidl_return) {
949 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
950 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
951 String8 keysLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_string_view_String8(keys));
952 *_aidl_return = VALUE_OR_RETURN_BINDER(
953 legacy2aidl_String8_string(mDelegate->getParameters(ioHandleLegacy, keysLegacy)));
954 return Status::ok();
955}
956
957Status AudioFlingerServerAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
958 mDelegate->registerClient(client);
959 return Status::ok();
960}
961
962Status AudioFlingerServerAdapter::getInputBufferSize(int32_t sampleRate,
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700963 const AudioFormatDescription& format,
964 const AudioChannelLayout& channelMask,
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -0700965 int64_t* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800966 uint32_t sampleRateLegacy = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(sampleRate));
967 audio_format_t formatLegacy = VALUE_OR_RETURN_BINDER(
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700968 aidl2legacy_AudioFormatDescription_audio_format_t(format));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800969 audio_channel_mask_t channelMaskLegacy = VALUE_OR_RETURN_BINDER(
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700970 aidl2legacy_AudioChannelLayout_audio_channel_mask_t(channelMask, true /*isInput*/));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800971 size_t size = mDelegate->getInputBufferSize(sampleRateLegacy, formatLegacy, channelMaskLegacy);
972 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int64_t>(size));
973 return Status::ok();
974}
975
976Status AudioFlingerServerAdapter::openOutput(const media::OpenOutputRequest& request,
977 media::OpenOutputResponse* _aidl_return) {
978 return Status::fromStatusT(mDelegate->openOutput(request, _aidl_return));
979}
980
981Status AudioFlingerServerAdapter::openDuplicateOutput(int32_t output1, int32_t output2,
982 int32_t* _aidl_return) {
983 audio_io_handle_t output1Legacy = VALUE_OR_RETURN_BINDER(
984 aidl2legacy_int32_t_audio_io_handle_t(output1));
985 audio_io_handle_t output2Legacy = VALUE_OR_RETURN_BINDER(
986 aidl2legacy_int32_t_audio_io_handle_t(output2));
987 audio_io_handle_t result = mDelegate->openDuplicateOutput(output1Legacy, output2Legacy);
988 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_io_handle_t_int32_t(result));
989 return Status::ok();
990}
991
992Status AudioFlingerServerAdapter::closeOutput(int32_t output) {
993 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
994 aidl2legacy_int32_t_audio_io_handle_t(output));
995 return Status::fromStatusT(mDelegate->closeOutput(outputLegacy));
996}
997
998Status AudioFlingerServerAdapter::suspendOutput(int32_t output) {
999 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1000 aidl2legacy_int32_t_audio_io_handle_t(output));
1001 return Status::fromStatusT(mDelegate->suspendOutput(outputLegacy));
1002}
1003
1004Status AudioFlingerServerAdapter::restoreOutput(int32_t output) {
1005 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1006 aidl2legacy_int32_t_audio_io_handle_t(output));
1007 return Status::fromStatusT(mDelegate->restoreOutput(outputLegacy));
1008}
1009
1010Status AudioFlingerServerAdapter::openInput(const media::OpenInputRequest& request,
1011 media::OpenInputResponse* _aidl_return) {
1012 return Status::fromStatusT(mDelegate->openInput(request, _aidl_return));
1013}
1014
1015Status AudioFlingerServerAdapter::closeInput(int32_t input) {
1016 audio_io_handle_t inputLegacy = VALUE_OR_RETURN_BINDER(
1017 aidl2legacy_int32_t_audio_io_handle_t(input));
1018 return Status::fromStatusT(mDelegate->closeInput(inputLegacy));
1019}
1020
Mikhail Naganovdbf03642021-08-25 18:15:32 -07001021Status AudioFlingerServerAdapter::invalidateStream(AudioStreamType stream) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001022 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
1023 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
1024 return Status::fromStatusT(mDelegate->invalidateStream(streamLegacy));
1025}
1026
1027Status AudioFlingerServerAdapter::setVoiceVolume(float volume) {
1028 return Status::fromStatusT(mDelegate->setVoiceVolume(volume));
1029}
1030
1031Status
1032AudioFlingerServerAdapter::getRenderPosition(int32_t output, media::RenderPosition* _aidl_return) {
1033 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1034 aidl2legacy_int32_t_audio_io_handle_t(output));
1035 uint32_t halFramesLegacy;
1036 uint32_t dspFramesLegacy;
1037 RETURN_BINDER_IF_ERROR(
1038 mDelegate->getRenderPosition(&halFramesLegacy, &dspFramesLegacy, outputLegacy));
1039 _aidl_return->halFrames = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(halFramesLegacy));
1040 _aidl_return->dspFrames = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(dspFramesLegacy));
1041 return Status::ok();
1042}
1043
1044Status AudioFlingerServerAdapter::getInputFramesLost(int32_t ioHandle, int32_t* _aidl_return) {
1045 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1046 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1047 uint32_t result = mDelegate->getInputFramesLost(ioHandleLegacy);
1048 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(result));
1049 return Status::ok();
1050}
1051
1052Status
1053AudioFlingerServerAdapter::newAudioUniqueId(media::AudioUniqueIdUse use, int32_t* _aidl_return) {
1054 audio_unique_id_use_t useLegacy = VALUE_OR_RETURN_BINDER(
1055 aidl2legacy_AudioUniqueIdUse_audio_unique_id_use_t(use));
1056 audio_unique_id_t result = mDelegate->newAudioUniqueId(useLegacy);
1057 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_unique_id_t_int32_t(result));
1058 return Status::ok();
1059}
1060
1061Status
1062AudioFlingerServerAdapter::acquireAudioSessionId(int32_t audioSession, int32_t pid, int32_t uid) {
1063 audio_session_t audioSessionLegacy = VALUE_OR_RETURN_BINDER(
1064 aidl2legacy_int32_t_audio_session_t(audioSession));
1065 pid_t pidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_pid_t(pid));
1066 uid_t uidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_uid_t(uid));
1067 mDelegate->acquireAudioSessionId(audioSessionLegacy, pidLegacy, uidLegacy);
1068 return Status::ok();
1069}
1070
1071Status AudioFlingerServerAdapter::releaseAudioSessionId(int32_t audioSession, int32_t pid) {
1072 audio_session_t audioSessionLegacy = VALUE_OR_RETURN_BINDER(
1073 aidl2legacy_int32_t_audio_session_t(audioSession));
1074 pid_t pidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_pid_t(pid));
1075 mDelegate->releaseAudioSessionId(audioSessionLegacy, pidLegacy);
1076 return Status::ok();
1077}
1078
1079Status AudioFlingerServerAdapter::queryNumberEffects(int32_t* _aidl_return) {
1080 uint32_t result;
1081 RETURN_BINDER_IF_ERROR(mDelegate->queryNumberEffects(&result));
1082 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(result));
1083 return Status::ok();
1084}
1085
1086Status
1087AudioFlingerServerAdapter::queryEffect(int32_t index, media::EffectDescriptor* _aidl_return) {
1088 uint32_t indexLegacy = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(index));
1089 effect_descriptor_t result;
1090 RETURN_BINDER_IF_ERROR(mDelegate->queryEffect(indexLegacy, &result));
1091 *_aidl_return = VALUE_OR_RETURN_BINDER(
1092 legacy2aidl_effect_descriptor_t_EffectDescriptor(result));
1093 return Status::ok();
1094}
1095
Mikhail Naganovddceecc2021-09-03 13:58:56 -07001096Status AudioFlingerServerAdapter::getEffectDescriptor(const AudioUuid& effectUUID,
1097 const AudioUuid& typeUUID,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001098 int32_t preferredTypeFlag,
1099 media::EffectDescriptor* _aidl_return) {
1100 effect_uuid_t effectUuidLegacy = VALUE_OR_RETURN_BINDER(
1101 aidl2legacy_AudioUuid_audio_uuid_t(effectUUID));
1102 effect_uuid_t typeUuidLegacy = VALUE_OR_RETURN_BINDER(
1103 aidl2legacy_AudioUuid_audio_uuid_t(typeUUID));
1104 uint32_t preferredTypeFlagLegacy = VALUE_OR_RETURN_BINDER(
1105 convertReinterpret<uint32_t>(preferredTypeFlag));
1106 effect_descriptor_t result;
1107 RETURN_BINDER_IF_ERROR(mDelegate->getEffectDescriptor(&effectUuidLegacy, &typeUuidLegacy,
1108 preferredTypeFlagLegacy, &result));
1109 *_aidl_return = VALUE_OR_RETURN_BINDER(
1110 legacy2aidl_effect_descriptor_t_EffectDescriptor(result));
1111 return Status::ok();
1112}
1113
1114Status AudioFlingerServerAdapter::createEffect(const media::CreateEffectRequest& request,
1115 media::CreateEffectResponse* _aidl_return) {
1116 return Status::fromStatusT(mDelegate->createEffect(request, _aidl_return));
1117}
1118
1119Status
1120AudioFlingerServerAdapter::moveEffects(int32_t session, int32_t srcOutput, int32_t dstOutput) {
1121 audio_session_t sessionLegacy = VALUE_OR_RETURN_BINDER(
1122 aidl2legacy_int32_t_audio_session_t(session));
1123 audio_io_handle_t srcOutputLegacy = VALUE_OR_RETURN_BINDER(
1124 aidl2legacy_int32_t_audio_io_handle_t(srcOutput));
1125 audio_io_handle_t dstOutputLegacy = VALUE_OR_RETURN_BINDER(
1126 aidl2legacy_int32_t_audio_io_handle_t(dstOutput));
1127 return Status::fromStatusT(
1128 mDelegate->moveEffects(sessionLegacy, srcOutputLegacy, dstOutputLegacy));
1129}
1130
1131Status AudioFlingerServerAdapter::setEffectSuspended(int32_t effectId, int32_t sessionId,
1132 bool suspended) {
1133 int effectIdLegacy = VALUE_OR_RETURN_BINDER(convertReinterpret<int>(effectId));
1134 audio_session_t sessionIdLegacy = VALUE_OR_RETURN_BINDER(
1135 aidl2legacy_int32_t_audio_session_t(sessionId));
1136 mDelegate->setEffectSuspended(effectIdLegacy, sessionIdLegacy, suspended);
1137 return Status::ok();
1138}
1139
1140Status AudioFlingerServerAdapter::loadHwModule(const std::string& name, int32_t* _aidl_return) {
1141 audio_module_handle_t result = mDelegate->loadHwModule(name.c_str());
1142 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_module_handle_t_int32_t(result));
1143 return Status::ok();
1144}
1145
1146Status AudioFlingerServerAdapter::getPrimaryOutputSamplingRate(int32_t* _aidl_return) {
1147 *_aidl_return = VALUE_OR_RETURN_BINDER(
1148 convertIntegral<int32_t>(mDelegate->getPrimaryOutputSamplingRate()));
1149 return Status::ok();
1150}
1151
1152Status AudioFlingerServerAdapter::getPrimaryOutputFrameCount(int64_t* _aidl_return) {
1153 *_aidl_return = VALUE_OR_RETURN_BINDER(
1154 convertIntegral<int64_t>(mDelegate->getPrimaryOutputFrameCount()));
1155 return Status::ok();
1156
1157}
1158
1159Status AudioFlingerServerAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
1160 return Status::fromStatusT(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
1161}
1162
1163Status AudioFlingerServerAdapter::getAudioPort(const media::AudioPort& port,
1164 media::AudioPort* _aidl_return) {
1165 audio_port_v7 portLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPort_audio_port_v7(port));
1166 RETURN_BINDER_IF_ERROR(mDelegate->getAudioPort(&portLegacy));
1167 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_port_v7_AudioPort(portLegacy));
1168 return Status::ok();
1169}
1170
1171Status AudioFlingerServerAdapter::createAudioPatch(const media::AudioPatch& patch,
1172 int32_t* _aidl_return) {
1173 audio_patch patchLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPatch_audio_patch(patch));
Kuowei Li247a3672021-07-21 21:46:07 +08001174 audio_patch_handle_t handleLegacy = VALUE_OR_RETURN_BINDER(
1175 aidl2legacy_int32_t_audio_patch_handle_t(*_aidl_return));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001176 RETURN_BINDER_IF_ERROR(mDelegate->createAudioPatch(&patchLegacy, &handleLegacy));
1177 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_patch_handle_t_int32_t(handleLegacy));
1178 return Status::ok();
1179}
1180
1181Status AudioFlingerServerAdapter::releaseAudioPatch(int32_t handle) {
1182 audio_patch_handle_t handleLegacy = VALUE_OR_RETURN_BINDER(
1183 aidl2legacy_int32_t_audio_patch_handle_t(handle));
1184 return Status::fromStatusT(mDelegate->releaseAudioPatch(handleLegacy));
1185}
1186
1187Status AudioFlingerServerAdapter::listAudioPatches(int32_t maxCount,
1188 std::vector<media::AudioPatch>* _aidl_return) {
1189 unsigned int count = VALUE_OR_RETURN_BINDER(convertIntegral<unsigned int>(maxCount));
1190 count = std::min(count, static_cast<unsigned int>(MAX_ITEMS_PER_LIST));
1191 std::unique_ptr<audio_patch[]> patchesLegacy(new audio_patch[count]);
1192 RETURN_BINDER_IF_ERROR(mDelegate->listAudioPatches(&count, patchesLegacy.get()));
1193 RETURN_BINDER_IF_ERROR(convertRange(&patchesLegacy[0],
1194 &patchesLegacy[count],
1195 std::back_inserter(*_aidl_return),
1196 legacy2aidl_audio_patch_AudioPatch));
1197 return Status::ok();
1198}
1199
1200Status AudioFlingerServerAdapter::setAudioPortConfig(const media::AudioPortConfig& config) {
1201 audio_port_config configLegacy = VALUE_OR_RETURN_BINDER(
1202 aidl2legacy_AudioPortConfig_audio_port_config(config));
1203 return Status::fromStatusT(mDelegate->setAudioPortConfig(&configLegacy));
1204}
1205
1206Status AudioFlingerServerAdapter::getAudioHwSyncForSession(int32_t sessionId,
1207 int32_t* _aidl_return) {
1208 audio_session_t sessionIdLegacy = VALUE_OR_RETURN_BINDER(
1209 aidl2legacy_int32_t_audio_session_t(sessionId));
1210 audio_hw_sync_t result = mDelegate->getAudioHwSyncForSession(sessionIdLegacy);
1211 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_hw_sync_t_int32_t(result));
1212 return Status::ok();
1213}
1214
1215Status AudioFlingerServerAdapter::systemReady() {
1216 return Status::fromStatusT(mDelegate->systemReady());
1217}
1218
Eric Laurentd66d7a12021-07-13 13:35:32 +02001219Status AudioFlingerServerAdapter::audioPolicyReady() {
1220 mDelegate->audioPolicyReady();
1221 return Status::ok();
1222}
1223
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001224Status AudioFlingerServerAdapter::frameCountHAL(int32_t ioHandle, int64_t* _aidl_return) {
1225 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1226 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1227 size_t result = mDelegate->frameCountHAL(ioHandleLegacy);
1228 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int64_t>(result));
1229 return Status::ok();
1230}
1231
1232Status AudioFlingerServerAdapter::getMicrophones(
1233 std::vector<media::MicrophoneInfoData>* _aidl_return) {
1234 std::vector<media::MicrophoneInfo> resultLegacy;
1235 RETURN_BINDER_IF_ERROR(mDelegate->getMicrophones(&resultLegacy));
1236 *_aidl_return = VALUE_OR_RETURN_BINDER(convertContainer<std::vector<media::MicrophoneInfoData>>(
1237 resultLegacy, media::legacy2aidl_MicrophoneInfo));
1238 return Status::ok();
1239}
1240
1241Status AudioFlingerServerAdapter::setAudioHalPids(const std::vector<int32_t>& pids) {
1242 std::vector<pid_t> pidsLegacy = VALUE_OR_RETURN_BINDER(
1243 convertContainer<std::vector<pid_t>>(pids, aidl2legacy_int32_t_pid_t));
1244 RETURN_BINDER_IF_ERROR(mDelegate->setAudioHalPids(pidsLegacy));
1245 return Status::ok();
1246}
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -08001247
jiabin1319f5a2021-03-30 22:21:24 +00001248Status AudioFlingerServerAdapter::setVibratorInfos(
1249 const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
1250 return Status::fromStatusT(mDelegate->setVibratorInfos(vibratorInfos));
1251}
1252
jiabin10a03f12021-05-07 23:46:28 +00001253Status AudioFlingerServerAdapter::updateSecondaryOutputs(
1254 const std::vector<media::TrackSecondaryOutputInfo>& trackSecondaryOutputInfos) {
1255 TrackSecondaryOutputsMap trackSecondaryOutputs =
1256 VALUE_OR_RETURN_BINDER(convertContainer<TrackSecondaryOutputsMap>(
1257 trackSecondaryOutputInfos,
1258 aidl2legacy_TrackSecondaryOutputInfo_TrackSecondaryOutputInfoPair));
1259 return Status::fromStatusT(mDelegate->updateSecondaryOutputs(trackSecondaryOutputs));
1260}
1261
Jiabin Huangebe64102021-09-07 20:01:07 +00001262Status AudioFlingerServerAdapter::getMmapPolicyInfos(
1263 media::AudioMMapPolicyType policyType,
1264 std::vector<media::AudioMMapPolicyInfo> *_aidl_return) {
1265 return Status::fromStatusT(mDelegate->getMmapPolicyInfos(policyType, _aidl_return));
1266}
1267
Glenn Kasten40bc9062015-03-20 09:09:33 -07001268} // namespace android