blob: 7bf7b98e61d2f569d1f286fbf778231bf1e74f60 [file] [log] [blame]
Marco Nelissen3a34bef2011-08-02 13:33:41 -07001/*
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -08002**
3** Copyright 2007, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9** http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18#define LOG_TAG "IAudioFlinger"
Eric Laurentc2f1f072009-07-17 12:17:14 -070019//#define LOG_NDEBUG 0
Jiabin Huangebe64102021-09-07 20:01:07 +000020
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080021#include <utils/Log.h>
22
23#include <stdint.h>
24#include <sys/types.h>
Andy Hung393de3a2022-12-06 16:33:20 -080025#include "IAudioFlinger.h"
Eric Laurentb1cc36b2017-12-11 12:14:16 -080026#include <binder/IPCThreadState.h>
Mathias Agopian75624082009-05-19 19:08:10 -070027#include <binder/Parcel.h>
Andy Hung393de3a2022-12-06 16:33:20 -080028#include <system/thread_defs.h>
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080029
30namespace android {
31
Andy Hung1131b6e2020-12-08 20:47:45 -080032using aidl_utils::statusTFromBinderStatus;
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -080033using binder::Status;
Mikhail Naganov57bd06f2021-08-10 16:41:54 -070034using media::audio::common::AudioChannelLayout;
35using media::audio::common::AudioFormatDescription;
jiabine99d0882021-09-17 05:21:25 +000036using media::audio::common::AudioMMapPolicyInfo;
37using media::audio::common::AudioMMapPolicyType;
Mikhail Naganovddceecc2021-09-03 13:58:56 -070038using media::audio::common::AudioMode;
Mikhail Naganovdbf03642021-08-25 18:15:32 -070039using media::audio::common::AudioStreamType;
Mikhail Naganovddceecc2021-09-03 13:58:56 -070040using media::audio::common::AudioUuid;
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -080041
Eric Laurentf75c2fe2015-04-02 13:49:15 -070042#define MAX_ITEMS_PER_LIST 1024
43
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -080044#define VALUE_OR_RETURN_BINDER(x) \
45 ({ \
46 auto _tmp = (x); \
47 if (!_tmp.ok()) return Status::fromStatusT(_tmp.error()); \
48 std::move(_tmp.value()); \
49 })
50
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -080051#define RETURN_BINDER_IF_ERROR(x) \
52 { \
53 auto _tmp = (x); \
54 if (_tmp != OK) return Status::fromStatusT(_tmp); \
55 }
56
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080057ConversionResult<media::CreateTrackRequest> IAudioFlinger::CreateTrackInput::toAidl() const {
58 media::CreateTrackRequest aidl;
59 aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributesInternal(attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -070060 // Do not be mislead by 'Input'--this is an input to 'createTrack', which creates output tracks.
61 aidl.config = VALUE_OR_RETURN(legacy2aidl_audio_config_t_AudioConfig(
62 config, false /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -080063 aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080064 aidl.sharedBuffer = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(sharedBuffer));
65 aidl.notificationsPerBuffer = VALUE_OR_RETURN(convertIntegral<int32_t>(notificationsPerBuffer));
66 aidl.speed = speed;
67 aidl.audioTrackCallback = audioTrackCallback;
Andy Hung973638a2020-12-08 20:47:45 -080068 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080069 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
70 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
71 aidl.selectedDeviceId = VALUE_OR_RETURN(
72 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
73 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
74 return aidl;
75}
76
77ConversionResult<IAudioFlinger::CreateTrackInput>
78IAudioFlinger::CreateTrackInput::fromAidl(const media::CreateTrackRequest& aidl) {
79 IAudioFlinger::CreateTrackInput legacy;
80 legacy.attr = VALUE_OR_RETURN(aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -070081 // Do not be mislead by 'Input'--this is an input to 'createTrack', which creates output tracks.
82 legacy.config = VALUE_OR_RETURN(
83 aidl2legacy_AudioConfig_audio_config_t(aidl.config, false /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -080084 legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080085 legacy.sharedBuffer = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.sharedBuffer));
86 legacy.notificationsPerBuffer = VALUE_OR_RETURN(
87 convertIntegral<uint32_t>(aidl.notificationsPerBuffer));
88 legacy.speed = aidl.speed;
89 legacy.audioTrackCallback = aidl.audioTrackCallback;
Andy Hung973638a2020-12-08 20:47:45 -080090 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080091 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
92 legacy.notificationFrameCount = VALUE_OR_RETURN(
93 convertIntegral<size_t>(aidl.notificationFrameCount));
94 legacy.selectedDeviceId = VALUE_OR_RETURN(
95 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
96 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
97 return legacy;
98}
99
100ConversionResult<media::CreateTrackResponse>
101IAudioFlinger::CreateTrackOutput::toAidl() const {
102 media::CreateTrackResponse aidl;
Andy Hung973638a2020-12-08 20:47:45 -0800103 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800104 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
105 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
106 aidl.selectedDeviceId = VALUE_OR_RETURN(
107 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
108 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
109 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
Andy Hunga2159aa2021-07-20 13:01:52 -0700110 aidl.streamType = VALUE_OR_RETURN(
111 legacy2aidl_audio_stream_type_t_AudioStreamType(streamType));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800112 aidl.afFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(afFrameCount));
113 aidl.afSampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(afSampleRate));
114 aidl.afLatencyMs = VALUE_OR_RETURN(convertIntegral<int32_t>(afLatencyMs));
115 aidl.outputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(outputId));
116 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800117 aidl.audioTrack = audioTrack;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800118 return aidl;
119}
120
121ConversionResult<IAudioFlinger::CreateTrackOutput>
122IAudioFlinger::CreateTrackOutput::fromAidl(
123 const media::CreateTrackResponse& aidl) {
124 IAudioFlinger::CreateTrackOutput legacy;
Andy Hung973638a2020-12-08 20:47:45 -0800125 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800126 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
127 legacy.notificationFrameCount = VALUE_OR_RETURN(
128 convertIntegral<size_t>(aidl.notificationFrameCount));
129 legacy.selectedDeviceId = VALUE_OR_RETURN(
130 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
131 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
132 legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
Andy Hunga2159aa2021-07-20 13:01:52 -0700133 legacy.streamType = VALUE_OR_RETURN(
134 aidl2legacy_AudioStreamType_audio_stream_type_t(aidl.streamType));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800135 legacy.afFrameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.afFrameCount));
136 legacy.afSampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.afSampleRate));
137 legacy.afLatencyMs = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.afLatencyMs));
138 legacy.outputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.outputId));
139 legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800140 legacy.audioTrack = aidl.audioTrack;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800141 return legacy;
142}
143
144ConversionResult<media::CreateRecordRequest>
145IAudioFlinger::CreateRecordInput::toAidl() const {
146 media::CreateRecordRequest aidl;
147 aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributesInternal(attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700148 aidl.config = VALUE_OR_RETURN(
149 legacy2aidl_audio_config_base_t_AudioConfigBase(config, true /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -0800150 aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800151 aidl.riid = VALUE_OR_RETURN(legacy2aidl_audio_unique_id_t_int32_t(riid));
Eric Laurentec376dc2021-04-08 20:41:22 +0200152 aidl.maxSharedAudioHistoryMs = VALUE_OR_RETURN(
153 convertIntegral<int32_t>(maxSharedAudioHistoryMs));
Andy Hung973638a2020-12-08 20:47:45 -0800154 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800155 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
156 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
157 aidl.selectedDeviceId = VALUE_OR_RETURN(
158 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
159 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
160 return aidl;
161}
162
163ConversionResult<IAudioFlinger::CreateRecordInput>
164IAudioFlinger::CreateRecordInput::fromAidl(
165 const media::CreateRecordRequest& aidl) {
166 IAudioFlinger::CreateRecordInput legacy;
Eric Laurentec376dc2021-04-08 20:41:22 +0200167 legacy.attr = VALUE_OR_RETURN(
168 aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr));
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700169 legacy.config = VALUE_OR_RETURN(
170 aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config, true /*isInput*/));
Andy Hung973638a2020-12-08 20:47:45 -0800171 legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800172 legacy.riid = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_unique_id_t(aidl.riid));
Eric Laurentec376dc2021-04-08 20:41:22 +0200173 legacy.maxSharedAudioHistoryMs = VALUE_OR_RETURN(
174 convertIntegral<int32_t>(aidl.maxSharedAudioHistoryMs));
Andy Hung973638a2020-12-08 20:47:45 -0800175 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800176 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
177 legacy.notificationFrameCount = VALUE_OR_RETURN(
178 convertIntegral<size_t>(aidl.notificationFrameCount));
179 legacy.selectedDeviceId = VALUE_OR_RETURN(
180 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
181 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
182 return legacy;
183}
184
185ConversionResult<media::CreateRecordResponse>
186IAudioFlinger::CreateRecordOutput::toAidl() const {
187 media::CreateRecordResponse aidl;
Andy Hung973638a2020-12-08 20:47:45 -0800188 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800189 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
190 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
191 aidl.selectedDeviceId = VALUE_OR_RETURN(
192 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
193 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
194 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
195 aidl.inputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(inputId));
196 aidl.cblk = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(cblk));
197 aidl.buffers = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(buffers));
198 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800199 aidl.audioRecord = audioRecord;
jiabinb00edc32021-08-16 16:27:54 +0000200 aidl.serverConfig = VALUE_OR_RETURN(
201 legacy2aidl_audio_config_base_t_AudioConfigBase(serverConfig, true /*isInput*/));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800202 return aidl;
203}
204
205ConversionResult<IAudioFlinger::CreateRecordOutput>
206IAudioFlinger::CreateRecordOutput::fromAidl(
207 const media::CreateRecordResponse& aidl) {
208 IAudioFlinger::CreateRecordOutput legacy;
Andy Hung973638a2020-12-08 20:47:45 -0800209 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800210 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
211 legacy.notificationFrameCount = VALUE_OR_RETURN(
212 convertIntegral<size_t>(aidl.notificationFrameCount));
213 legacy.selectedDeviceId = VALUE_OR_RETURN(
214 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
215 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
216 legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
217 legacy.inputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.inputId));
218 legacy.cblk = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.cblk));
219 legacy.buffers = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.buffers));
220 legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800221 legacy.audioRecord = aidl.audioRecord;
jiabinb00edc32021-08-16 16:27:54 +0000222 legacy.serverConfig = VALUE_OR_RETURN(
223 aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.serverConfig, true /*isInput*/));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800224 return legacy;
225}
Eric Laurent42896a02019-09-27 15:40:33 -0700226
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800227////////////////////////////////////////////////////////////////////////////////////////////////////
228// AudioFlingerClientAdapter
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800229
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800230AudioFlingerClientAdapter::AudioFlingerClientAdapter(
231 const sp<media::IAudioFlingerService> delegate) : mDelegate(delegate) {}
Eric Laurent21da6472017-11-09 16:29:26 -0800232
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800233status_t AudioFlingerClientAdapter::createTrack(const media::CreateTrackRequest& input,
234 media::CreateTrackResponse& output) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800235 return statusTFromBinderStatus(mDelegate->createTrack(input, &output));
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800236}
237
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800238status_t AudioFlingerClientAdapter::createRecord(const media::CreateRecordRequest& input,
239 media::CreateRecordResponse& output) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800240 return statusTFromBinderStatus(mDelegate->createRecord(input, &output));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800241}
242
243uint32_t AudioFlingerClientAdapter::sampleRate(audio_io_handle_t ioHandle) const {
244 auto result = [&]() -> ConversionResult<uint32_t> {
245 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
246 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800247 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->sampleRate(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800248 return convertIntegral<uint32_t>(aidlRet);
249 }();
250 // Failure is ignored.
251 return result.value_or(0);
252}
253
254audio_format_t AudioFlingerClientAdapter::format(audio_io_handle_t output) const {
255 auto result = [&]() -> ConversionResult<audio_format_t> {
256 int32_t outputAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output));
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700257 AudioFormatDescription aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800258 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->format(outputAidl, &aidlRet)));
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700259 return aidl2legacy_AudioFormatDescription_audio_format_t(aidlRet);
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800260 }();
261 return result.value_or(AUDIO_FORMAT_INVALID);
262}
263
264size_t AudioFlingerClientAdapter::frameCount(audio_io_handle_t ioHandle) const {
265 auto result = [&]() -> ConversionResult<size_t> {
266 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
267 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800268 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->frameCount(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800269 return convertIntegral<size_t>(aidlRet);
270 }();
271 // Failure is ignored.
272 return result.value_or(0);
273}
274
275uint32_t AudioFlingerClientAdapter::latency(audio_io_handle_t output) const {
276 auto result = [&]() -> ConversionResult<uint32_t> {
277 int32_t outputAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output));
278 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800279 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->latency(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800280 return convertIntegral<uint32_t>(aidlRet);
281 }();
282 // Failure is ignored.
283 return result.value_or(0);
284}
285
286status_t AudioFlingerClientAdapter::setMasterVolume(float value) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800287 return statusTFromBinderStatus(mDelegate->setMasterVolume(value));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800288}
289
290status_t AudioFlingerClientAdapter::setMasterMute(bool muted) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800291 return statusTFromBinderStatus(mDelegate->setMasterMute(muted));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800292}
293
294float AudioFlingerClientAdapter::masterVolume() const {
295 auto result = [&]() -> ConversionResult<float> {
296 float aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800297 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterVolume(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800298 return aidlRet;
299 }();
300 // Failure is ignored.
301 return result.value_or(0.f);
302}
303
304bool AudioFlingerClientAdapter::masterMute() const {
305 auto result = [&]() -> ConversionResult<bool> {
306 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800307 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterMute(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800308 return aidlRet;
309 }();
310 // Failure is ignored.
311 return result.value_or(false);
312}
313
314status_t AudioFlingerClientAdapter::setMasterBalance(float balance) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800315 return statusTFromBinderStatus(mDelegate->setMasterBalance(balance));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800316}
317
318status_t AudioFlingerClientAdapter::getMasterBalance(float* balance) const{
Andy Hung1131b6e2020-12-08 20:47:45 -0800319 return statusTFromBinderStatus(mDelegate->getMasterBalance(balance));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800320}
321
322status_t AudioFlingerClientAdapter::setStreamVolume(audio_stream_type_t stream, float value,
323 audio_io_handle_t output) {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700324 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800325 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
326 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800327 return statusTFromBinderStatus(mDelegate->setStreamVolume(streamAidl, value, outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800328}
329
330status_t AudioFlingerClientAdapter::setStreamMute(audio_stream_type_t stream, bool muted) {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700331 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800332 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
Andy Hung1131b6e2020-12-08 20:47:45 -0800333 return statusTFromBinderStatus(mDelegate->setStreamMute(streamAidl, muted));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800334}
335
336float AudioFlingerClientAdapter::streamVolume(audio_stream_type_t stream,
337 audio_io_handle_t output) const {
338 auto result = [&]() -> ConversionResult<float> {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700339 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800340 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
341 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
342 float aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800343 RETURN_IF_ERROR(statusTFromBinderStatus(
344 mDelegate->streamVolume(streamAidl, outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800345 return aidlRet;
346 }();
347 // Failure is ignored.
348 return result.value_or(0.f);
349}
350
351bool AudioFlingerClientAdapter::streamMute(audio_stream_type_t stream) const {
352 auto result = [&]() -> ConversionResult<bool> {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700353 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800354 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
355 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800356 RETURN_IF_ERROR(statusTFromBinderStatus(
357 mDelegate->streamMute(streamAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800358 return aidlRet;
359 }();
360 // Failure is ignored.
361 return result.value_or(false);
362}
363
364status_t AudioFlingerClientAdapter::setMode(audio_mode_t mode) {
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700365 AudioMode modeAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_mode_t_AudioMode(mode));
Andy Hung1131b6e2020-12-08 20:47:45 -0800366 return statusTFromBinderStatus(mDelegate->setMode(modeAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800367}
368
369status_t AudioFlingerClientAdapter::setMicMute(bool state) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800370 return statusTFromBinderStatus(mDelegate->setMicMute(state));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800371}
372
373bool AudioFlingerClientAdapter::getMicMute() const {
374 auto result = [&]() -> ConversionResult<bool> {
375 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800376 RETURN_IF_ERROR(statusTFromBinderStatus(
377 mDelegate->getMicMute(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800378 return aidlRet;
379 }();
380 // Failure is ignored.
381 return result.value_or(false);
382}
383
384void AudioFlingerClientAdapter::setRecordSilenced(audio_port_handle_t portId, bool silenced) {
385 auto result = [&]() -> status_t {
386 int32_t portIdAidl = VALUE_OR_RETURN_STATUS(
387 legacy2aidl_audio_port_handle_t_int32_t(portId));
Andy Hung1131b6e2020-12-08 20:47:45 -0800388 return statusTFromBinderStatus(mDelegate->setRecordSilenced(portIdAidl, silenced));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800389 }();
390 // Failure is ignored.
391 (void) result;
392}
393
394status_t AudioFlingerClientAdapter::setParameters(audio_io_handle_t ioHandle,
395 const String8& keyValuePairs) {
396 int32_t ioHandleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
397 std::string keyValuePairsAidl = VALUE_OR_RETURN_STATUS(
398 legacy2aidl_String8_string(keyValuePairs));
Andy Hung1131b6e2020-12-08 20:47:45 -0800399 return statusTFromBinderStatus(mDelegate->setParameters(ioHandleAidl, keyValuePairsAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800400}
401
402String8 AudioFlingerClientAdapter::getParameters(audio_io_handle_t ioHandle, const String8& keys)
403const {
404 auto result = [&]() -> ConversionResult<String8> {
405 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
406 std::string keysAidl = VALUE_OR_RETURN(legacy2aidl_String8_string(keys));
407 std::string aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800408 RETURN_IF_ERROR(statusTFromBinderStatus(
409 mDelegate->getParameters(ioHandleAidl, keysAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800410 return aidl2legacy_string_view_String8(aidlRet);
411 }();
412 // Failure is ignored.
413 return result.value_or(String8());
414}
415
416void AudioFlingerClientAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
417 mDelegate->registerClient(client);
418 // Failure is ignored.
419}
420
421size_t AudioFlingerClientAdapter::getInputBufferSize(uint32_t sampleRate, audio_format_t format,
422 audio_channel_mask_t channelMask) const {
423 auto result = [&]() -> ConversionResult<size_t> {
424 int32_t sampleRateAidl = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700425 AudioFormatDescription formatAidl = VALUE_OR_RETURN(
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700426 legacy2aidl_audio_format_t_AudioFormatDescription(format));
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700427 AudioChannelLayout channelMaskAidl = VALUE_OR_RETURN(
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700428 legacy2aidl_audio_channel_mask_t_AudioChannelLayout(channelMask, true /*isInput*/));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800429 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800430 RETURN_IF_ERROR(statusTFromBinderStatus(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800431 mDelegate->getInputBufferSize(sampleRateAidl, formatAidl, channelMaskAidl,
Andy Hung1131b6e2020-12-08 20:47:45 -0800432 &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800433 return convertIntegral<size_t>(aidlRet);
434 }();
435 // Failure is ignored.
436 return result.value_or(0);
437}
438
439status_t AudioFlingerClientAdapter::openOutput(const media::OpenOutputRequest& request,
440 media::OpenOutputResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800441 return statusTFromBinderStatus(mDelegate->openOutput(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800442}
443
444audio_io_handle_t AudioFlingerClientAdapter::openDuplicateOutput(audio_io_handle_t output1,
445 audio_io_handle_t output2) {
446 auto result = [&]() -> ConversionResult<audio_io_handle_t> {
447 int32_t output1Aidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output1));
448 int32_t output2Aidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output2));
449 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800450 RETURN_IF_ERROR(statusTFromBinderStatus(
451 mDelegate->openDuplicateOutput(output1Aidl, output2Aidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800452 return aidl2legacy_int32_t_audio_io_handle_t(aidlRet);
453 }();
454 // Failure is ignored.
455 return result.value_or(0);
456}
457
458status_t AudioFlingerClientAdapter::closeOutput(audio_io_handle_t output) {
459 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800460 return statusTFromBinderStatus(mDelegate->closeOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800461}
462
463status_t AudioFlingerClientAdapter::suspendOutput(audio_io_handle_t output) {
464 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800465 return statusTFromBinderStatus(mDelegate->suspendOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800466}
467
468status_t AudioFlingerClientAdapter::restoreOutput(audio_io_handle_t output) {
469 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800470 return statusTFromBinderStatus(mDelegate->restoreOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800471}
472
473status_t AudioFlingerClientAdapter::openInput(const media::OpenInputRequest& request,
474 media::OpenInputResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800475 return statusTFromBinderStatus(mDelegate->openInput(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800476}
477
478status_t AudioFlingerClientAdapter::closeInput(audio_io_handle_t input) {
479 int32_t inputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(input));
Andy Hung1131b6e2020-12-08 20:47:45 -0800480 return statusTFromBinderStatus(mDelegate->closeInput(inputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800481}
482
483status_t AudioFlingerClientAdapter::invalidateStream(audio_stream_type_t stream) {
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700484 AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800485 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
Andy Hung1131b6e2020-12-08 20:47:45 -0800486 return statusTFromBinderStatus(mDelegate->invalidateStream(streamAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800487}
488
489status_t AudioFlingerClientAdapter::setVoiceVolume(float volume) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800490 return statusTFromBinderStatus(mDelegate->setVoiceVolume(volume));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800491}
492
493status_t AudioFlingerClientAdapter::getRenderPosition(uint32_t* halFrames, uint32_t* dspFrames,
494 audio_io_handle_t output) const {
495 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
496 media::RenderPosition aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800497 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
498 mDelegate->getRenderPosition(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800499 if (halFrames != nullptr) {
500 *halFrames = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet.halFrames));
501 }
502 if (dspFrames != nullptr) {
503 *dspFrames = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet.dspFrames));
504 }
505 return OK;
506}
507
508uint32_t AudioFlingerClientAdapter::getInputFramesLost(audio_io_handle_t ioHandle) const {
509 auto result = [&]() -> ConversionResult<uint32_t> {
510 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
511 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800512 RETURN_IF_ERROR(statusTFromBinderStatus(
513 mDelegate->getInputFramesLost(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800514 return convertIntegral<uint32_t>(aidlRet);
515 }();
516 // Failure is ignored.
517 return result.value_or(0);
518}
519
520audio_unique_id_t AudioFlingerClientAdapter::newAudioUniqueId(audio_unique_id_use_t use) {
521 auto result = [&]() -> ConversionResult<audio_unique_id_t> {
522 media::AudioUniqueIdUse useAidl = VALUE_OR_RETURN(
523 legacy2aidl_audio_unique_id_use_t_AudioUniqueIdUse(use));
524 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800525 RETURN_IF_ERROR(statusTFromBinderStatus(
526 mDelegate->newAudioUniqueId(useAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800527 return aidl2legacy_int32_t_audio_unique_id_t(aidlRet);
528 }();
529 return result.value_or(AUDIO_UNIQUE_ID_ALLOCATE);
530}
531
532void AudioFlingerClientAdapter::acquireAudioSessionId(audio_session_t audioSession, pid_t pid,
533 uid_t uid) {
534 [&]() -> status_t {
535 int32_t audioSessionAidl = VALUE_OR_RETURN_STATUS(
536 legacy2aidl_audio_session_t_int32_t(audioSession));
537 int32_t pidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(pid));
538 int32_t uidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(uid));
Andy Hung1131b6e2020-12-08 20:47:45 -0800539 return statusTFromBinderStatus(
540 mDelegate->acquireAudioSessionId(audioSessionAidl, pidAidl, uidAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800541 }();
542 // Failure is ignored.
543}
544
545void AudioFlingerClientAdapter::releaseAudioSessionId(audio_session_t audioSession, pid_t pid) {
546 [&]() -> status_t {
547 int32_t audioSessionAidl = VALUE_OR_RETURN_STATUS(
548 legacy2aidl_audio_session_t_int32_t(audioSession));
549 int32_t pidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(pid));
Andy Hung1131b6e2020-12-08 20:47:45 -0800550 return statusTFromBinderStatus(
551 mDelegate->releaseAudioSessionId(audioSessionAidl, pidAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800552 }();
553 // Failure is ignored.
554}
555
556status_t AudioFlingerClientAdapter::queryNumberEffects(uint32_t* numEffects) const {
557 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800558 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
559 mDelegate->queryNumberEffects(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800560 if (numEffects != nullptr) {
561 *numEffects = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet));
562 }
563 return OK;
564}
565
566status_t
567AudioFlingerClientAdapter::queryEffect(uint32_t index, effect_descriptor_t* pDescriptor) const {
568 int32_t indexAidl = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(index));
569 media::EffectDescriptor aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800570 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
571 mDelegate->queryEffect(indexAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800572 if (pDescriptor != nullptr) {
573 *pDescriptor = VALUE_OR_RETURN_STATUS(
574 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
575 }
576 return OK;
577}
578
579status_t AudioFlingerClientAdapter::getEffectDescriptor(const effect_uuid_t* pEffectUUID,
580 const effect_uuid_t* pTypeUUID,
581 uint32_t preferredTypeFlag,
582 effect_descriptor_t* pDescriptor) const {
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700583 AudioUuid effectUuidAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800584 legacy2aidl_audio_uuid_t_AudioUuid(*pEffectUUID));
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700585 AudioUuid typeUuidAidl = VALUE_OR_RETURN_STATUS(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800586 legacy2aidl_audio_uuid_t_AudioUuid(*pTypeUUID));
587 int32_t preferredTypeFlagAidl = VALUE_OR_RETURN_STATUS(
588 convertReinterpret<int32_t>(preferredTypeFlag));
589 media::EffectDescriptor aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800590 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800591 mDelegate->getEffectDescriptor(effectUuidAidl, typeUuidAidl, preferredTypeFlagAidl,
Andy Hung1131b6e2020-12-08 20:47:45 -0800592 &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800593 if (pDescriptor != nullptr) {
594 *pDescriptor = VALUE_OR_RETURN_STATUS(
595 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
596 }
597 return OK;
598}
599
600status_t AudioFlingerClientAdapter::createEffect(const media::CreateEffectRequest& request,
601 media::CreateEffectResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800602 return statusTFromBinderStatus(mDelegate->createEffect(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800603}
604
605status_t
606AudioFlingerClientAdapter::moveEffects(audio_session_t session, audio_io_handle_t srcOutput,
607 audio_io_handle_t dstOutput) {
608 int32_t sessionAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_session_t_int32_t(session));
609 int32_t srcOutputAidl = VALUE_OR_RETURN_STATUS(
610 legacy2aidl_audio_io_handle_t_int32_t(srcOutput));
611 int32_t dstOutputAidl = VALUE_OR_RETURN_STATUS(
612 legacy2aidl_audio_io_handle_t_int32_t(dstOutput));
Andy Hung1131b6e2020-12-08 20:47:45 -0800613 return statusTFromBinderStatus(
614 mDelegate->moveEffects(sessionAidl, srcOutputAidl, dstOutputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800615}
616
617void AudioFlingerClientAdapter::setEffectSuspended(int effectId,
618 audio_session_t sessionId,
619 bool suspended) {
620 [&]() -> status_t {
621 int32_t effectIdAidl = VALUE_OR_RETURN_STATUS(convertReinterpret<int32_t>(effectId));
622 int32_t sessionIdAidl = VALUE_OR_RETURN_STATUS(
623 legacy2aidl_audio_session_t_int32_t(sessionId));
Andy Hung1131b6e2020-12-08 20:47:45 -0800624 return statusTFromBinderStatus(
625 mDelegate->setEffectSuspended(effectIdAidl, sessionIdAidl, suspended));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800626 }();
627 // Failure is ignored.
628}
629
630audio_module_handle_t AudioFlingerClientAdapter::loadHwModule(const char* name) {
631 auto result = [&]() -> ConversionResult<audio_module_handle_t> {
632 std::string nameAidl(name);
633 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800634 RETURN_IF_ERROR(statusTFromBinderStatus(
635 mDelegate->loadHwModule(nameAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800636 return aidl2legacy_int32_t_audio_module_handle_t(aidlRet);
637 }();
638 // Failure is ignored.
639 return result.value_or(0);
640}
641
642uint32_t AudioFlingerClientAdapter::getPrimaryOutputSamplingRate() {
643 auto result = [&]() -> ConversionResult<uint32_t> {
644 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800645 RETURN_IF_ERROR(statusTFromBinderStatus(
646 mDelegate->getPrimaryOutputSamplingRate(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800647 return convertIntegral<uint32_t>(aidlRet);
648 }();
649 // Failure is ignored.
650 return result.value_or(0);
651}
652
653size_t AudioFlingerClientAdapter::getPrimaryOutputFrameCount() {
654 auto result = [&]() -> ConversionResult<size_t> {
655 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800656 RETURN_IF_ERROR(statusTFromBinderStatus(
657 mDelegate->getPrimaryOutputFrameCount(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800658 return convertIntegral<size_t>(aidlRet);
659 }();
660 // Failure is ignored.
661 return result.value_or(0);
662}
663
664status_t AudioFlingerClientAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800665 return statusTFromBinderStatus(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800666}
667
668status_t AudioFlingerClientAdapter::getAudioPort(struct audio_port_v7* port) {
Atneya Nairc18e9a12022-12-18 16:45:15 -0800669 media::AudioPortFw portAidl = VALUE_OR_RETURN_STATUS(
Mikhail Naganov87227252023-01-13 17:38:10 -0800670 legacy2aidl_audio_port_v7_AudioPortFw(*port));
Atneya Nairc18e9a12022-12-18 16:45:15 -0800671 media::AudioPortFw aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800672 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
673 mDelegate->getAudioPort(portAidl, &aidlRet)));
Mikhail Naganov87227252023-01-13 17:38:10 -0800674 *port = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioPortFw_audio_port_v7(aidlRet));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800675 return OK;
676}
677
678status_t AudioFlingerClientAdapter::createAudioPatch(const struct audio_patch* patch,
679 audio_patch_handle_t* handle) {
Atneya Nairb6c50a32022-12-18 16:14:18 -0800680 media::AudioPatchFw patchAidl = VALUE_OR_RETURN_STATUS(
Mikhail Naganov87227252023-01-13 17:38:10 -0800681 legacy2aidl_audio_patch_AudioPatchFw(*patch));
Kuowei Li247a3672021-07-21 21:46:07 +0800682 int32_t aidlRet = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(
683 AUDIO_PATCH_HANDLE_NONE));
684 if (handle != nullptr) {
685 aidlRet = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(*handle));
686 }
Andy Hung1131b6e2020-12-08 20:47:45 -0800687 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
688 mDelegate->createAudioPatch(patchAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800689 if (handle != nullptr) {
690 *handle = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_patch_handle_t(aidlRet));
691 }
692 return OK;
693}
694
695status_t AudioFlingerClientAdapter::releaseAudioPatch(audio_patch_handle_t handle) {
696 int32_t handleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(handle));
Andy Hung1131b6e2020-12-08 20:47:45 -0800697 return statusTFromBinderStatus(mDelegate->releaseAudioPatch(handleAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800698}
699
700status_t AudioFlingerClientAdapter::listAudioPatches(unsigned int* num_patches,
701 struct audio_patch* patches) {
Atneya Nairb6c50a32022-12-18 16:14:18 -0800702 std::vector<media::AudioPatchFw> aidlRet;
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800703 int32_t maxPatches = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(*num_patches));
Andy Hung1131b6e2020-12-08 20:47:45 -0800704 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
705 mDelegate->listAudioPatches(maxPatches, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800706 *num_patches = VALUE_OR_RETURN_STATUS(convertIntegral<unsigned int>(aidlRet.size()));
707 return convertRange(aidlRet.begin(), aidlRet.end(), patches,
Mikhail Naganov87227252023-01-13 17:38:10 -0800708 aidl2legacy_AudioPatchFw_audio_patch);
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800709}
710
711status_t AudioFlingerClientAdapter::setAudioPortConfig(const struct audio_port_config* config) {
Atneya Nairb8de69b2022-12-18 17:26:26 -0800712 media::AudioPortConfigFw configAidl = VALUE_OR_RETURN_STATUS(
Mikhail Naganov87227252023-01-13 17:38:10 -0800713 legacy2aidl_audio_port_config_AudioPortConfigFw(*config));
Andy Hung1131b6e2020-12-08 20:47:45 -0800714 return statusTFromBinderStatus(mDelegate->setAudioPortConfig(configAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800715}
716
717audio_hw_sync_t AudioFlingerClientAdapter::getAudioHwSyncForSession(audio_session_t sessionId) {
718 auto result = [&]() -> ConversionResult<audio_hw_sync_t> {
719 int32_t sessionIdAidl = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
720 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800721 RETURN_IF_ERROR(statusTFromBinderStatus(
722 mDelegate->getAudioHwSyncForSession(sessionIdAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800723 return aidl2legacy_int32_t_audio_hw_sync_t(aidlRet);
724 }();
725 return result.value_or(AUDIO_HW_SYNC_INVALID);
726}
727
728status_t AudioFlingerClientAdapter::systemReady() {
Andy Hung1131b6e2020-12-08 20:47:45 -0800729 return statusTFromBinderStatus(mDelegate->systemReady());
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800730}
731
Eric Laurentd66d7a12021-07-13 13:35:32 +0200732status_t AudioFlingerClientAdapter::audioPolicyReady() {
733 return statusTFromBinderStatus(mDelegate->audioPolicyReady());
734}
735
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800736size_t AudioFlingerClientAdapter::frameCountHAL(audio_io_handle_t ioHandle) const {
737 auto result = [&]() -> ConversionResult<size_t> {
738 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
739 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800740 RETURN_IF_ERROR(statusTFromBinderStatus(
741 mDelegate->frameCountHAL(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800742 return convertIntegral<size_t>(aidlRet);
743 }();
744 // Failure is ignored.
745 return result.value_or(0);
746}
747
748status_t
Mikhail Naganov2a6a3012023-02-13 11:45:03 -0800749AudioFlingerClientAdapter::getMicrophones(std::vector<media::MicrophoneInfoFw>* microphones) {
750 std::vector<media::MicrophoneInfoFw> aidlRet;
751 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mDelegate->getMicrophones(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800752 if (microphones != nullptr) {
Mikhail Naganov2a6a3012023-02-13 11:45:03 -0800753 *microphones = std::move(aidlRet);
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800754 }
755 return OK;
756}
757
758status_t AudioFlingerClientAdapter::setAudioHalPids(const std::vector<pid_t>& pids) {
759 std::vector<int32_t> pidsAidl = VALUE_OR_RETURN_STATUS(
760 convertContainer<std::vector<int32_t>>(pids, legacy2aidl_pid_t_int32_t));
Andy Hung1131b6e2020-12-08 20:47:45 -0800761 return statusTFromBinderStatus(mDelegate->setAudioHalPids(pidsAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800762}
763
jiabin1319f5a2021-03-30 22:21:24 +0000764status_t AudioFlingerClientAdapter::setVibratorInfos(
765 const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
766 return statusTFromBinderStatus(mDelegate->setVibratorInfos(vibratorInfos));
767}
768
jiabin10a03f12021-05-07 23:46:28 +0000769status_t AudioFlingerClientAdapter::updateSecondaryOutputs(
770 const TrackSecondaryOutputsMap& trackSecondaryOutputs) {
771 std::vector<media::TrackSecondaryOutputInfo> trackSecondaryOutputInfos =
772 VALUE_OR_RETURN_STATUS(
773 convertContainer<std::vector<media::TrackSecondaryOutputInfo>>(
774 trackSecondaryOutputs,
775 legacy2aidl_TrackSecondaryOutputInfoPair_TrackSecondaryOutputInfo));
776 return statusTFromBinderStatus(mDelegate->updateSecondaryOutputs(trackSecondaryOutputInfos));
777}
778
Jiabin Huangebe64102021-09-07 20:01:07 +0000779status_t AudioFlingerClientAdapter::getMmapPolicyInfos(
jiabine99d0882021-09-17 05:21:25 +0000780 AudioMMapPolicyType policyType, std::vector<AudioMMapPolicyInfo> *policyInfos) {
Jiabin Huangebe64102021-09-07 20:01:07 +0000781 return statusTFromBinderStatus(mDelegate->getMmapPolicyInfos(policyType, policyInfos));
782}
783
jiabine504e7b2021-09-18 00:27:08 +0000784int32_t AudioFlingerClientAdapter::getAAudioMixerBurstCount() {
785 auto result = [&]() -> ConversionResult<int32_t> {
786 int32_t aidlRet;
787 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->getAAudioMixerBurstCount(&aidlRet)));
788 return convertIntegral<int32_t>(aidlRet);
789 }();
790 // Failure is ignored.
791 return result.value_or(0);
792}
793
794int32_t AudioFlingerClientAdapter::getAAudioHardwareBurstMinUsec() {
795 auto result = [&]() -> ConversionResult<int32_t> {
796 int32_t aidlRet;
797 RETURN_IF_ERROR(statusTFromBinderStatus(
798 mDelegate->getAAudioHardwareBurstMinUsec(&aidlRet)));
799 return convertIntegral<int32_t>(aidlRet);
800 }();
801 // Failure is ignored.
802 return result.value_or(0);
803}
804
Mikhail Naganov516d3982022-02-01 23:53:59 +0000805status_t AudioFlingerClientAdapter::setDeviceConnectedState(
806 const struct audio_port_v7 *port, bool connected) {
Atneya Nairc18e9a12022-12-18 16:45:15 -0800807 media::AudioPortFw aidlPort = VALUE_OR_RETURN_STATUS(
Mikhail Naganov87227252023-01-13 17:38:10 -0800808 legacy2aidl_audio_port_v7_AudioPortFw(*port));
Mikhail Naganov516d3982022-02-01 23:53:59 +0000809 return statusTFromBinderStatus(mDelegate->setDeviceConnectedState(aidlPort, connected));
810}
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800811
Mikhail Naganove93a0862023-03-15 17:06:59 -0700812status_t AudioFlingerClientAdapter::setSimulateDeviceConnections(bool enabled) {
813 return statusTFromBinderStatus(mDelegate->setSimulateDeviceConnections(enabled));
814}
815
Eric Laurent08250312022-05-03 18:12:28 +0200816status_t AudioFlingerClientAdapter::setRequestedLatencyMode(
817 audio_io_handle_t output, audio_latency_mode_t mode) {
818 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Mikhail Naganovb1a075b2022-12-18 02:48:14 +0000819 media::audio::common::AudioLatencyMode modeAidl = VALUE_OR_RETURN_STATUS(
820 legacy2aidl_audio_latency_mode_t_AudioLatencyMode(mode));
Eric Laurent08250312022-05-03 18:12:28 +0200821 return statusTFromBinderStatus(mDelegate->setRequestedLatencyMode(outputAidl, modeAidl));
822}
823
824status_t AudioFlingerClientAdapter::getSupportedLatencyModes(
825 audio_io_handle_t output, std::vector<audio_latency_mode_t>* modes) {
826 if (modes == nullptr) {
827 return BAD_VALUE;
828 }
829
830 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Mikhail Naganovb1a075b2022-12-18 02:48:14 +0000831 std::vector<media::audio::common::AudioLatencyMode> modesAidl;
Eric Laurent08250312022-05-03 18:12:28 +0200832
833 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
834 mDelegate->getSupportedLatencyModes(outputAidl, &modesAidl)));
835
836 *modes = VALUE_OR_RETURN_STATUS(
837 convertContainer<std::vector<audio_latency_mode_t>>(modesAidl,
Mikhail Naganovb1a075b2022-12-18 02:48:14 +0000838 aidl2legacy_AudioLatencyMode_audio_latency_mode_t));
Eric Laurent08250312022-05-03 18:12:28 +0200839
840 return NO_ERROR;
841}
842
Eric Laurent49879b72022-12-20 20:20:23 +0100843status_t AudioFlingerClientAdapter::setBluetoothVariableLatencyEnabled(bool enabled) {
844 return statusTFromBinderStatus(mDelegate->setBluetoothVariableLatencyEnabled(enabled));
Eric Laurent01eb1642022-12-16 11:45:07 +0100845}
846
Eric Laurent49879b72022-12-20 20:20:23 +0100847status_t AudioFlingerClientAdapter::isBluetoothVariableLatencyEnabled(bool* enabled) {
848 if (enabled == nullptr) {
849 return BAD_VALUE;
850 }
851
852 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
853 mDelegate->isBluetoothVariableLatencyEnabled(enabled)));
854
855 return NO_ERROR;
856}
857
858status_t AudioFlingerClientAdapter::supportsBluetoothVariableLatency(bool* support) {
Eric Laurent01eb1642022-12-16 11:45:07 +0100859 if (support == nullptr) {
860 return BAD_VALUE;
861 }
862
863 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
Eric Laurent49879b72022-12-20 20:20:23 +0100864 mDelegate->supportsBluetoothVariableLatency(support)));
Eric Laurent01eb1642022-12-16 11:45:07 +0100865
866 return NO_ERROR;
867}
868
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800869////////////////////////////////////////////////////////////////////////////////////////////////////
870// AudioFlingerServerAdapter
871AudioFlingerServerAdapter::AudioFlingerServerAdapter(
Andy Hung393de3a2022-12-06 16:33:20 -0800872 const sp<AudioFlingerServerAdapter::Delegate>& delegate) : mDelegate(delegate) {
873 setMinSchedulerPolicy(SCHED_NORMAL, ANDROID_PRIORITY_AUDIO);
874}
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800875
Ytai Ben-Tsvi24b33fc2021-05-10 13:08:11 -0700876status_t AudioFlingerServerAdapter::onTransact(uint32_t code,
877 const Parcel& data,
878 Parcel* reply,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800879 uint32_t flags) {
Ytai Ben-Tsvi24b33fc2021-05-10 13:08:11 -0700880 return mDelegate->onTransactWrapper(static_cast<Delegate::TransactionCode>(code),
881 data,
882 flags,
883 [&] {
884 return BnAudioFlingerService::onTransact(
885 code,
886 data,
887 reply,
888 flags);
889 });
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800890}
891
892status_t AudioFlingerServerAdapter::dump(int fd, const Vector<String16>& args) {
893 return mDelegate->dump(fd, args);
894}
895
896Status AudioFlingerServerAdapter::createTrack(const media::CreateTrackRequest& request,
897 media::CreateTrackResponse* _aidl_return) {
898 return Status::fromStatusT(mDelegate->createTrack(request, *_aidl_return));
899}
900
901Status AudioFlingerServerAdapter::createRecord(const media::CreateRecordRequest& request,
902 media::CreateRecordResponse* _aidl_return) {
903 return Status::fromStatusT(mDelegate->createRecord(request, *_aidl_return));
904}
905
906Status AudioFlingerServerAdapter::sampleRate(int32_t ioHandle, int32_t* _aidl_return) {
907 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
908 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
909 *_aidl_return = VALUE_OR_RETURN_BINDER(
910 convertIntegral<int32_t>(mDelegate->sampleRate(ioHandleLegacy)));
911 return Status::ok();
912}
913
914Status AudioFlingerServerAdapter::format(int32_t output,
Mikhail Naganov57bd06f2021-08-10 16:41:54 -0700915 AudioFormatDescription* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800916 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
917 aidl2legacy_int32_t_audio_io_handle_t(output));
918 *_aidl_return = VALUE_OR_RETURN_BINDER(
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -0700919 legacy2aidl_audio_format_t_AudioFormatDescription(mDelegate->format(outputLegacy)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800920 return Status::ok();
921}
922
923Status AudioFlingerServerAdapter::frameCount(int32_t ioHandle, int64_t* _aidl_return) {
924 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
925 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
926 *_aidl_return = VALUE_OR_RETURN_BINDER(
927 convertIntegral<int64_t>(mDelegate->frameCount(ioHandleLegacy)));
928 return Status::ok();
929}
930
931Status AudioFlingerServerAdapter::latency(int32_t output, int32_t* _aidl_return) {
932 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
933 aidl2legacy_int32_t_audio_io_handle_t(output));
934 *_aidl_return = VALUE_OR_RETURN_BINDER(
935 convertIntegral<int32_t>(mDelegate->latency(outputLegacy)));
936 return Status::ok();
937}
938
939Status AudioFlingerServerAdapter::setMasterVolume(float value) {
940 return Status::fromStatusT(mDelegate->setMasterVolume(value));
941}
942
943Status AudioFlingerServerAdapter::setMasterMute(bool muted) {
944 return Status::fromStatusT(mDelegate->setMasterMute(muted));
945}
946
947Status AudioFlingerServerAdapter::masterVolume(float* _aidl_return) {
948 *_aidl_return = mDelegate->masterVolume();
949 return Status::ok();
950}
951
952Status AudioFlingerServerAdapter::masterMute(bool* _aidl_return) {
953 *_aidl_return = mDelegate->masterMute();
954 return Status::ok();
955}
956
957Status AudioFlingerServerAdapter::setMasterBalance(float balance) {
958 return Status::fromStatusT(mDelegate->setMasterBalance(balance));
959}
960
961Status AudioFlingerServerAdapter::getMasterBalance(float* _aidl_return) {
962 return Status::fromStatusT(mDelegate->getMasterBalance(_aidl_return));
963}
964
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700965Status AudioFlingerServerAdapter::setStreamVolume(AudioStreamType stream, float value,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800966 int32_t output) {
967 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
968 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
969 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
970 aidl2legacy_int32_t_audio_io_handle_t(output));
971 return Status::fromStatusT(mDelegate->setStreamVolume(streamLegacy, value, outputLegacy));
972}
973
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700974Status AudioFlingerServerAdapter::setStreamMute(AudioStreamType stream, bool muted) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800975 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
976 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
977 return Status::fromStatusT(mDelegate->setStreamMute(streamLegacy, muted));
978}
979
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700980Status AudioFlingerServerAdapter::streamVolume(AudioStreamType stream, int32_t output,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800981 float* _aidl_return) {
982 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
983 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
984 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
985 aidl2legacy_int32_t_audio_io_handle_t(output));
986 *_aidl_return = mDelegate->streamVolume(streamLegacy, outputLegacy);
987 return Status::ok();
988}
989
Mikhail Naganovdbf03642021-08-25 18:15:32 -0700990Status AudioFlingerServerAdapter::streamMute(AudioStreamType stream, bool* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800991 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
992 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
993 *_aidl_return = mDelegate->streamMute(streamLegacy);
994 return Status::ok();
995}
996
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700997Status AudioFlingerServerAdapter::setMode(AudioMode mode) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800998 audio_mode_t modeLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioMode_audio_mode_t(mode));
999 return Status::fromStatusT(mDelegate->setMode(modeLegacy));
1000}
1001
1002Status AudioFlingerServerAdapter::setMicMute(bool state) {
1003 return Status::fromStatusT(mDelegate->setMicMute(state));
1004}
1005
1006Status AudioFlingerServerAdapter::getMicMute(bool* _aidl_return) {
1007 *_aidl_return = mDelegate->getMicMute();
1008 return Status::ok();
1009}
1010
1011Status AudioFlingerServerAdapter::setRecordSilenced(int32_t portId, bool silenced) {
1012 audio_port_handle_t portIdLegacy = VALUE_OR_RETURN_BINDER(
1013 aidl2legacy_int32_t_audio_port_handle_t(portId));
1014 mDelegate->setRecordSilenced(portIdLegacy, silenced);
1015 return Status::ok();
1016}
1017
1018Status
1019AudioFlingerServerAdapter::setParameters(int32_t ioHandle, const std::string& keyValuePairs) {
1020 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1021 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1022 String8 keyValuePairsLegacy = VALUE_OR_RETURN_BINDER(
1023 aidl2legacy_string_view_String8(keyValuePairs));
1024 return Status::fromStatusT(mDelegate->setParameters(ioHandleLegacy, keyValuePairsLegacy));
1025}
1026
1027Status AudioFlingerServerAdapter::getParameters(int32_t ioHandle, const std::string& keys,
1028 std::string* _aidl_return) {
1029 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1030 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1031 String8 keysLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_string_view_String8(keys));
1032 *_aidl_return = VALUE_OR_RETURN_BINDER(
1033 legacy2aidl_String8_string(mDelegate->getParameters(ioHandleLegacy, keysLegacy)));
1034 return Status::ok();
1035}
1036
1037Status AudioFlingerServerAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
1038 mDelegate->registerClient(client);
1039 return Status::ok();
1040}
1041
1042Status AudioFlingerServerAdapter::getInputBufferSize(int32_t sampleRate,
Mikhail Naganov57bd06f2021-08-10 16:41:54 -07001043 const AudioFormatDescription& format,
1044 const AudioChannelLayout& channelMask,
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001045 int64_t* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001046 uint32_t sampleRateLegacy = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(sampleRate));
1047 audio_format_t formatLegacy = VALUE_OR_RETURN_BINDER(
Mikhail Naganovb60bd1b2021-07-15 17:31:43 -07001048 aidl2legacy_AudioFormatDescription_audio_format_t(format));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001049 audio_channel_mask_t channelMaskLegacy = VALUE_OR_RETURN_BINDER(
Mikhail Naganovde3fa182021-07-30 15:06:42 -07001050 aidl2legacy_AudioChannelLayout_audio_channel_mask_t(channelMask, true /*isInput*/));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001051 size_t size = mDelegate->getInputBufferSize(sampleRateLegacy, formatLegacy, channelMaskLegacy);
1052 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int64_t>(size));
1053 return Status::ok();
1054}
1055
1056Status AudioFlingerServerAdapter::openOutput(const media::OpenOutputRequest& request,
1057 media::OpenOutputResponse* _aidl_return) {
1058 return Status::fromStatusT(mDelegate->openOutput(request, _aidl_return));
1059}
1060
1061Status AudioFlingerServerAdapter::openDuplicateOutput(int32_t output1, int32_t output2,
1062 int32_t* _aidl_return) {
1063 audio_io_handle_t output1Legacy = VALUE_OR_RETURN_BINDER(
1064 aidl2legacy_int32_t_audio_io_handle_t(output1));
1065 audio_io_handle_t output2Legacy = VALUE_OR_RETURN_BINDER(
1066 aidl2legacy_int32_t_audio_io_handle_t(output2));
1067 audio_io_handle_t result = mDelegate->openDuplicateOutput(output1Legacy, output2Legacy);
1068 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_io_handle_t_int32_t(result));
1069 return Status::ok();
1070}
1071
1072Status AudioFlingerServerAdapter::closeOutput(int32_t output) {
1073 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1074 aidl2legacy_int32_t_audio_io_handle_t(output));
1075 return Status::fromStatusT(mDelegate->closeOutput(outputLegacy));
1076}
1077
1078Status AudioFlingerServerAdapter::suspendOutput(int32_t output) {
1079 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1080 aidl2legacy_int32_t_audio_io_handle_t(output));
1081 return Status::fromStatusT(mDelegate->suspendOutput(outputLegacy));
1082}
1083
1084Status AudioFlingerServerAdapter::restoreOutput(int32_t output) {
1085 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1086 aidl2legacy_int32_t_audio_io_handle_t(output));
1087 return Status::fromStatusT(mDelegate->restoreOutput(outputLegacy));
1088}
1089
1090Status AudioFlingerServerAdapter::openInput(const media::OpenInputRequest& request,
1091 media::OpenInputResponse* _aidl_return) {
1092 return Status::fromStatusT(mDelegate->openInput(request, _aidl_return));
1093}
1094
1095Status AudioFlingerServerAdapter::closeInput(int32_t input) {
1096 audio_io_handle_t inputLegacy = VALUE_OR_RETURN_BINDER(
1097 aidl2legacy_int32_t_audio_io_handle_t(input));
1098 return Status::fromStatusT(mDelegate->closeInput(inputLegacy));
1099}
1100
Mikhail Naganovdbf03642021-08-25 18:15:32 -07001101Status AudioFlingerServerAdapter::invalidateStream(AudioStreamType stream) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001102 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
1103 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
1104 return Status::fromStatusT(mDelegate->invalidateStream(streamLegacy));
1105}
1106
1107Status AudioFlingerServerAdapter::setVoiceVolume(float volume) {
1108 return Status::fromStatusT(mDelegate->setVoiceVolume(volume));
1109}
1110
1111Status
1112AudioFlingerServerAdapter::getRenderPosition(int32_t output, media::RenderPosition* _aidl_return) {
1113 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1114 aidl2legacy_int32_t_audio_io_handle_t(output));
1115 uint32_t halFramesLegacy;
1116 uint32_t dspFramesLegacy;
1117 RETURN_BINDER_IF_ERROR(
1118 mDelegate->getRenderPosition(&halFramesLegacy, &dspFramesLegacy, outputLegacy));
1119 _aidl_return->halFrames = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(halFramesLegacy));
1120 _aidl_return->dspFrames = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(dspFramesLegacy));
1121 return Status::ok();
1122}
1123
1124Status AudioFlingerServerAdapter::getInputFramesLost(int32_t ioHandle, int32_t* _aidl_return) {
1125 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1126 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1127 uint32_t result = mDelegate->getInputFramesLost(ioHandleLegacy);
1128 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(result));
1129 return Status::ok();
1130}
1131
1132Status
1133AudioFlingerServerAdapter::newAudioUniqueId(media::AudioUniqueIdUse use, int32_t* _aidl_return) {
1134 audio_unique_id_use_t useLegacy = VALUE_OR_RETURN_BINDER(
1135 aidl2legacy_AudioUniqueIdUse_audio_unique_id_use_t(use));
1136 audio_unique_id_t result = mDelegate->newAudioUniqueId(useLegacy);
1137 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_unique_id_t_int32_t(result));
1138 return Status::ok();
1139}
1140
1141Status
1142AudioFlingerServerAdapter::acquireAudioSessionId(int32_t audioSession, int32_t pid, int32_t uid) {
1143 audio_session_t audioSessionLegacy = VALUE_OR_RETURN_BINDER(
1144 aidl2legacy_int32_t_audio_session_t(audioSession));
1145 pid_t pidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_pid_t(pid));
1146 uid_t uidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_uid_t(uid));
1147 mDelegate->acquireAudioSessionId(audioSessionLegacy, pidLegacy, uidLegacy);
1148 return Status::ok();
1149}
1150
1151Status AudioFlingerServerAdapter::releaseAudioSessionId(int32_t audioSession, int32_t pid) {
1152 audio_session_t audioSessionLegacy = VALUE_OR_RETURN_BINDER(
1153 aidl2legacy_int32_t_audio_session_t(audioSession));
1154 pid_t pidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_pid_t(pid));
1155 mDelegate->releaseAudioSessionId(audioSessionLegacy, pidLegacy);
1156 return Status::ok();
1157}
1158
1159Status AudioFlingerServerAdapter::queryNumberEffects(int32_t* _aidl_return) {
1160 uint32_t result;
1161 RETURN_BINDER_IF_ERROR(mDelegate->queryNumberEffects(&result));
1162 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(result));
1163 return Status::ok();
1164}
1165
1166Status
1167AudioFlingerServerAdapter::queryEffect(int32_t index, media::EffectDescriptor* _aidl_return) {
1168 uint32_t indexLegacy = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(index));
1169 effect_descriptor_t result;
1170 RETURN_BINDER_IF_ERROR(mDelegate->queryEffect(indexLegacy, &result));
1171 *_aidl_return = VALUE_OR_RETURN_BINDER(
1172 legacy2aidl_effect_descriptor_t_EffectDescriptor(result));
1173 return Status::ok();
1174}
1175
Mikhail Naganovddceecc2021-09-03 13:58:56 -07001176Status AudioFlingerServerAdapter::getEffectDescriptor(const AudioUuid& effectUUID,
1177 const AudioUuid& typeUUID,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001178 int32_t preferredTypeFlag,
1179 media::EffectDescriptor* _aidl_return) {
1180 effect_uuid_t effectUuidLegacy = VALUE_OR_RETURN_BINDER(
1181 aidl2legacy_AudioUuid_audio_uuid_t(effectUUID));
1182 effect_uuid_t typeUuidLegacy = VALUE_OR_RETURN_BINDER(
1183 aidl2legacy_AudioUuid_audio_uuid_t(typeUUID));
1184 uint32_t preferredTypeFlagLegacy = VALUE_OR_RETURN_BINDER(
1185 convertReinterpret<uint32_t>(preferredTypeFlag));
1186 effect_descriptor_t result;
1187 RETURN_BINDER_IF_ERROR(mDelegate->getEffectDescriptor(&effectUuidLegacy, &typeUuidLegacy,
1188 preferredTypeFlagLegacy, &result));
1189 *_aidl_return = VALUE_OR_RETURN_BINDER(
1190 legacy2aidl_effect_descriptor_t_EffectDescriptor(result));
1191 return Status::ok();
1192}
1193
1194Status AudioFlingerServerAdapter::createEffect(const media::CreateEffectRequest& request,
1195 media::CreateEffectResponse* _aidl_return) {
1196 return Status::fromStatusT(mDelegate->createEffect(request, _aidl_return));
1197}
1198
1199Status
1200AudioFlingerServerAdapter::moveEffects(int32_t session, int32_t srcOutput, int32_t dstOutput) {
1201 audio_session_t sessionLegacy = VALUE_OR_RETURN_BINDER(
1202 aidl2legacy_int32_t_audio_session_t(session));
1203 audio_io_handle_t srcOutputLegacy = VALUE_OR_RETURN_BINDER(
1204 aidl2legacy_int32_t_audio_io_handle_t(srcOutput));
1205 audio_io_handle_t dstOutputLegacy = VALUE_OR_RETURN_BINDER(
1206 aidl2legacy_int32_t_audio_io_handle_t(dstOutput));
1207 return Status::fromStatusT(
1208 mDelegate->moveEffects(sessionLegacy, srcOutputLegacy, dstOutputLegacy));
1209}
1210
1211Status AudioFlingerServerAdapter::setEffectSuspended(int32_t effectId, int32_t sessionId,
1212 bool suspended) {
1213 int effectIdLegacy = VALUE_OR_RETURN_BINDER(convertReinterpret<int>(effectId));
1214 audio_session_t sessionIdLegacy = VALUE_OR_RETURN_BINDER(
1215 aidl2legacy_int32_t_audio_session_t(sessionId));
1216 mDelegate->setEffectSuspended(effectIdLegacy, sessionIdLegacy, suspended);
1217 return Status::ok();
1218}
1219
1220Status AudioFlingerServerAdapter::loadHwModule(const std::string& name, int32_t* _aidl_return) {
1221 audio_module_handle_t result = mDelegate->loadHwModule(name.c_str());
1222 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_module_handle_t_int32_t(result));
1223 return Status::ok();
1224}
1225
1226Status AudioFlingerServerAdapter::getPrimaryOutputSamplingRate(int32_t* _aidl_return) {
1227 *_aidl_return = VALUE_OR_RETURN_BINDER(
1228 convertIntegral<int32_t>(mDelegate->getPrimaryOutputSamplingRate()));
1229 return Status::ok();
1230}
1231
1232Status AudioFlingerServerAdapter::getPrimaryOutputFrameCount(int64_t* _aidl_return) {
1233 *_aidl_return = VALUE_OR_RETURN_BINDER(
1234 convertIntegral<int64_t>(mDelegate->getPrimaryOutputFrameCount()));
1235 return Status::ok();
1236
1237}
1238
1239Status AudioFlingerServerAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
1240 return Status::fromStatusT(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
1241}
1242
Atneya Nairc18e9a12022-12-18 16:45:15 -08001243Status AudioFlingerServerAdapter::getAudioPort(const media::AudioPortFw& port,
1244 media::AudioPortFw* _aidl_return) {
Mikhail Naganov87227252023-01-13 17:38:10 -08001245 audio_port_v7 portLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPortFw_audio_port_v7(port));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001246 RETURN_BINDER_IF_ERROR(mDelegate->getAudioPort(&portLegacy));
Mikhail Naganov87227252023-01-13 17:38:10 -08001247 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_port_v7_AudioPortFw(portLegacy));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001248 return Status::ok();
1249}
1250
Atneya Nairb6c50a32022-12-18 16:14:18 -08001251Status AudioFlingerServerAdapter::createAudioPatch(const media::AudioPatchFw& patch,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001252 int32_t* _aidl_return) {
Mikhail Naganov87227252023-01-13 17:38:10 -08001253 audio_patch patchLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPatchFw_audio_patch(patch));
Kuowei Li247a3672021-07-21 21:46:07 +08001254 audio_patch_handle_t handleLegacy = VALUE_OR_RETURN_BINDER(
1255 aidl2legacy_int32_t_audio_patch_handle_t(*_aidl_return));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001256 RETURN_BINDER_IF_ERROR(mDelegate->createAudioPatch(&patchLegacy, &handleLegacy));
1257 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_patch_handle_t_int32_t(handleLegacy));
1258 return Status::ok();
1259}
1260
1261Status AudioFlingerServerAdapter::releaseAudioPatch(int32_t handle) {
1262 audio_patch_handle_t handleLegacy = VALUE_OR_RETURN_BINDER(
1263 aidl2legacy_int32_t_audio_patch_handle_t(handle));
1264 return Status::fromStatusT(mDelegate->releaseAudioPatch(handleLegacy));
1265}
1266
1267Status AudioFlingerServerAdapter::listAudioPatches(int32_t maxCount,
Atneya Nairb6c50a32022-12-18 16:14:18 -08001268 std::vector<media::AudioPatchFw>* _aidl_return) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001269 unsigned int count = VALUE_OR_RETURN_BINDER(convertIntegral<unsigned int>(maxCount));
1270 count = std::min(count, static_cast<unsigned int>(MAX_ITEMS_PER_LIST));
1271 std::unique_ptr<audio_patch[]> patchesLegacy(new audio_patch[count]);
1272 RETURN_BINDER_IF_ERROR(mDelegate->listAudioPatches(&count, patchesLegacy.get()));
1273 RETURN_BINDER_IF_ERROR(convertRange(&patchesLegacy[0],
1274 &patchesLegacy[count],
1275 std::back_inserter(*_aidl_return),
Mikhail Naganov87227252023-01-13 17:38:10 -08001276 legacy2aidl_audio_patch_AudioPatchFw));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001277 return Status::ok();
1278}
1279
Atneya Nairb8de69b2022-12-18 17:26:26 -08001280Status AudioFlingerServerAdapter::setAudioPortConfig(const media::AudioPortConfigFw& config) {
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001281 audio_port_config configLegacy = VALUE_OR_RETURN_BINDER(
Mikhail Naganov87227252023-01-13 17:38:10 -08001282 aidl2legacy_AudioPortConfigFw_audio_port_config(config));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001283 return Status::fromStatusT(mDelegate->setAudioPortConfig(&configLegacy));
1284}
1285
1286Status AudioFlingerServerAdapter::getAudioHwSyncForSession(int32_t sessionId,
1287 int32_t* _aidl_return) {
1288 audio_session_t sessionIdLegacy = VALUE_OR_RETURN_BINDER(
1289 aidl2legacy_int32_t_audio_session_t(sessionId));
1290 audio_hw_sync_t result = mDelegate->getAudioHwSyncForSession(sessionIdLegacy);
1291 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_hw_sync_t_int32_t(result));
1292 return Status::ok();
1293}
1294
1295Status AudioFlingerServerAdapter::systemReady() {
1296 return Status::fromStatusT(mDelegate->systemReady());
1297}
1298
Eric Laurentd66d7a12021-07-13 13:35:32 +02001299Status AudioFlingerServerAdapter::audioPolicyReady() {
1300 mDelegate->audioPolicyReady();
1301 return Status::ok();
1302}
1303
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001304Status AudioFlingerServerAdapter::frameCountHAL(int32_t ioHandle, int64_t* _aidl_return) {
1305 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1306 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1307 size_t result = mDelegate->frameCountHAL(ioHandleLegacy);
1308 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int64_t>(result));
1309 return Status::ok();
1310}
1311
1312Status AudioFlingerServerAdapter::getMicrophones(
Mikhail Naganov2a6a3012023-02-13 11:45:03 -08001313 std::vector<media::MicrophoneInfoFw>* _aidl_return) {
1314 RETURN_BINDER_IF_ERROR(mDelegate->getMicrophones(_aidl_return));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001315 return Status::ok();
1316}
1317
1318Status AudioFlingerServerAdapter::setAudioHalPids(const std::vector<int32_t>& pids) {
1319 std::vector<pid_t> pidsLegacy = VALUE_OR_RETURN_BINDER(
1320 convertContainer<std::vector<pid_t>>(pids, aidl2legacy_int32_t_pid_t));
1321 RETURN_BINDER_IF_ERROR(mDelegate->setAudioHalPids(pidsLegacy));
1322 return Status::ok();
1323}
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -08001324
jiabin1319f5a2021-03-30 22:21:24 +00001325Status AudioFlingerServerAdapter::setVibratorInfos(
1326 const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
1327 return Status::fromStatusT(mDelegate->setVibratorInfos(vibratorInfos));
1328}
1329
jiabin10a03f12021-05-07 23:46:28 +00001330Status AudioFlingerServerAdapter::updateSecondaryOutputs(
1331 const std::vector<media::TrackSecondaryOutputInfo>& trackSecondaryOutputInfos) {
1332 TrackSecondaryOutputsMap trackSecondaryOutputs =
1333 VALUE_OR_RETURN_BINDER(convertContainer<TrackSecondaryOutputsMap>(
1334 trackSecondaryOutputInfos,
1335 aidl2legacy_TrackSecondaryOutputInfo_TrackSecondaryOutputInfoPair));
1336 return Status::fromStatusT(mDelegate->updateSecondaryOutputs(trackSecondaryOutputs));
1337}
1338
Jiabin Huangebe64102021-09-07 20:01:07 +00001339Status AudioFlingerServerAdapter::getMmapPolicyInfos(
jiabine99d0882021-09-17 05:21:25 +00001340 AudioMMapPolicyType policyType, std::vector<AudioMMapPolicyInfo> *_aidl_return) {
Jiabin Huangebe64102021-09-07 20:01:07 +00001341 return Status::fromStatusT(mDelegate->getMmapPolicyInfos(policyType, _aidl_return));
1342}
1343
jiabine504e7b2021-09-18 00:27:08 +00001344Status AudioFlingerServerAdapter::getAAudioMixerBurstCount(int32_t* _aidl_return) {
1345 *_aidl_return = VALUE_OR_RETURN_BINDER(
1346 convertIntegral<int32_t>(mDelegate->getAAudioMixerBurstCount()));
1347 return Status::ok();
1348}
1349
1350Status AudioFlingerServerAdapter::getAAudioHardwareBurstMinUsec(int32_t* _aidl_return) {
1351 *_aidl_return = VALUE_OR_RETURN_BINDER(
1352 convertIntegral<int32_t>(mDelegate->getAAudioHardwareBurstMinUsec()));
1353 return Status::ok();
1354}
1355
Mikhail Naganov516d3982022-02-01 23:53:59 +00001356Status AudioFlingerServerAdapter::setDeviceConnectedState(
Atneya Nairc18e9a12022-12-18 16:45:15 -08001357 const media::AudioPortFw& port, bool connected) {
Mikhail Naganov87227252023-01-13 17:38:10 -08001358 audio_port_v7 portLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPortFw_audio_port_v7(port));
Mikhail Naganov516d3982022-02-01 23:53:59 +00001359 return Status::fromStatusT(mDelegate->setDeviceConnectedState(&portLegacy, connected));
1360}
1361
Mikhail Naganove93a0862023-03-15 17:06:59 -07001362Status AudioFlingerServerAdapter::setSimulateDeviceConnections(bool enabled) {
1363 return Status::fromStatusT(mDelegate->setSimulateDeviceConnections(enabled));
1364}
1365
Eric Laurent08250312022-05-03 18:12:28 +02001366Status AudioFlingerServerAdapter::setRequestedLatencyMode(
Mikhail Naganovb1a075b2022-12-18 02:48:14 +00001367 int32_t output, media::audio::common::AudioLatencyMode modeAidl) {
Eric Laurent08250312022-05-03 18:12:28 +02001368 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1369 aidl2legacy_int32_t_audio_io_handle_t(output));
1370 audio_latency_mode_t modeLegacy = VALUE_OR_RETURN_BINDER(
Mikhail Naganovb1a075b2022-12-18 02:48:14 +00001371 aidl2legacy_AudioLatencyMode_audio_latency_mode_t(modeAidl));
Eric Laurent08250312022-05-03 18:12:28 +02001372 return Status::fromStatusT(mDelegate->setRequestedLatencyMode(
1373 outputLegacy, modeLegacy));
1374}
1375
1376Status AudioFlingerServerAdapter::getSupportedLatencyModes(
Mikhail Naganovb1a075b2022-12-18 02:48:14 +00001377 int output, std::vector<media::audio::common::AudioLatencyMode>* _aidl_return) {
Eric Laurent08250312022-05-03 18:12:28 +02001378 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1379 aidl2legacy_int32_t_audio_io_handle_t(output));
1380 std::vector<audio_latency_mode_t> modesLegacy;
1381
1382 RETURN_BINDER_IF_ERROR(mDelegate->getSupportedLatencyModes(outputLegacy, &modesLegacy));
1383
1384 *_aidl_return = VALUE_OR_RETURN_BINDER(
Mikhail Naganovb1a075b2022-12-18 02:48:14 +00001385 convertContainer<std::vector<media::audio::common::AudioLatencyMode>>(
1386 modesLegacy, legacy2aidl_audio_latency_mode_t_AudioLatencyMode));
Eric Laurent08250312022-05-03 18:12:28 +02001387 return Status::ok();
1388}
1389
Eric Laurent49879b72022-12-20 20:20:23 +01001390Status AudioFlingerServerAdapter::setBluetoothVariableLatencyEnabled(bool enabled) {
1391 return Status::fromStatusT(mDelegate->setBluetoothVariableLatencyEnabled(enabled));
Eric Laurent01eb1642022-12-16 11:45:07 +01001392}
1393
Eric Laurent49879b72022-12-20 20:20:23 +01001394Status AudioFlingerServerAdapter::isBluetoothVariableLatencyEnabled(bool *enabled) {
1395 return Status::fromStatusT(mDelegate->isBluetoothVariableLatencyEnabled(enabled));
1396}
1397
1398Status AudioFlingerServerAdapter::supportsBluetoothVariableLatency(bool *support) {
1399 return Status::fromStatusT(mDelegate->supportsBluetoothVariableLatency(support));
Eric Laurent01eb1642022-12-16 11:45:07 +01001400}
1401
Glenn Kasten40bc9062015-03-20 09:09:33 -07001402} // namespace android