blob: 2af1c500efe0ce690b111ef35d73b9a4fc90d456 [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
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080020#include <utils/Log.h>
21
22#include <stdint.h>
23#include <sys/types.h>
24
Eric Laurentb1cc36b2017-12-11 12:14:16 -080025#include <binder/IPCThreadState.h>
Mathias Agopian75624082009-05-19 19:08:10 -070026#include <binder/Parcel.h>
Steven Moreland25a9e552017-04-17 14:30:39 -070027#include "IAudioFlinger.h"
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -080028
29namespace android {
30
Andy Hung1131b6e2020-12-08 20:47:45 -080031using aidl_utils::statusTFromBinderStatus;
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -080032using binder::Status;
33
Eric Laurentf75c2fe2015-04-02 13:49:15 -070034#define MAX_ITEMS_PER_LIST 1024
35
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -080036#define VALUE_OR_RETURN_BINDER(x) \
37 ({ \
38 auto _tmp = (x); \
39 if (!_tmp.ok()) return Status::fromStatusT(_tmp.error()); \
40 std::move(_tmp.value()); \
41 })
42
43#define RETURN_STATUS_IF_ERROR(x) \
44 { \
45 auto _tmp = (x); \
46 if (_tmp != OK) return _tmp; \
47 }
48
49#define RETURN_BINDER_IF_ERROR(x) \
50 { \
51 auto _tmp = (x); \
52 if (_tmp != OK) return Status::fromStatusT(_tmp); \
53 }
54
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080055ConversionResult<media::CreateTrackRequest> IAudioFlinger::CreateTrackInput::toAidl() const {
56 media::CreateTrackRequest aidl;
57 aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributesInternal(attr));
58 aidl.config = VALUE_OR_RETURN(legacy2aidl_audio_config_t_AudioConfig(config));
Andy Hung973638a2020-12-08 20:47:45 -080059 aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080060 aidl.sharedBuffer = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(sharedBuffer));
61 aidl.notificationsPerBuffer = VALUE_OR_RETURN(convertIntegral<int32_t>(notificationsPerBuffer));
62 aidl.speed = speed;
63 aidl.audioTrackCallback = audioTrackCallback;
Andy Hung973638a2020-12-08 20:47:45 -080064 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080065 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
66 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
67 aidl.selectedDeviceId = VALUE_OR_RETURN(
68 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
69 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
70 return aidl;
71}
72
73ConversionResult<IAudioFlinger::CreateTrackInput>
74IAudioFlinger::CreateTrackInput::fromAidl(const media::CreateTrackRequest& aidl) {
75 IAudioFlinger::CreateTrackInput legacy;
76 legacy.attr = VALUE_OR_RETURN(aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr));
77 legacy.config = VALUE_OR_RETURN(aidl2legacy_AudioConfig_audio_config_t(aidl.config));
Andy Hung973638a2020-12-08 20:47:45 -080078 legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080079 legacy.sharedBuffer = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.sharedBuffer));
80 legacy.notificationsPerBuffer = VALUE_OR_RETURN(
81 convertIntegral<uint32_t>(aidl.notificationsPerBuffer));
82 legacy.speed = aidl.speed;
83 legacy.audioTrackCallback = aidl.audioTrackCallback;
Andy Hung973638a2020-12-08 20:47:45 -080084 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080085 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
86 legacy.notificationFrameCount = VALUE_OR_RETURN(
87 convertIntegral<size_t>(aidl.notificationFrameCount));
88 legacy.selectedDeviceId = VALUE_OR_RETURN(
89 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
90 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
91 return legacy;
92}
93
94ConversionResult<media::CreateTrackResponse>
95IAudioFlinger::CreateTrackOutput::toAidl() const {
96 media::CreateTrackResponse aidl;
Andy Hung973638a2020-12-08 20:47:45 -080097 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080098 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
99 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
100 aidl.selectedDeviceId = VALUE_OR_RETURN(
101 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
102 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
103 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
Andy Hunga2159aa2021-07-20 13:01:52 -0700104 aidl.streamType = VALUE_OR_RETURN(
105 legacy2aidl_audio_stream_type_t_AudioStreamType(streamType));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800106 aidl.afFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(afFrameCount));
107 aidl.afSampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(afSampleRate));
108 aidl.afLatencyMs = VALUE_OR_RETURN(convertIntegral<int32_t>(afLatencyMs));
109 aidl.outputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(outputId));
110 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800111 aidl.audioTrack = audioTrack;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800112 return aidl;
113}
114
115ConversionResult<IAudioFlinger::CreateTrackOutput>
116IAudioFlinger::CreateTrackOutput::fromAidl(
117 const media::CreateTrackResponse& aidl) {
118 IAudioFlinger::CreateTrackOutput legacy;
Andy Hung973638a2020-12-08 20:47:45 -0800119 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800120 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
121 legacy.notificationFrameCount = VALUE_OR_RETURN(
122 convertIntegral<size_t>(aidl.notificationFrameCount));
123 legacy.selectedDeviceId = VALUE_OR_RETURN(
124 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
125 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
126 legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
Andy Hunga2159aa2021-07-20 13:01:52 -0700127 legacy.streamType = VALUE_OR_RETURN(
128 aidl2legacy_AudioStreamType_audio_stream_type_t(aidl.streamType));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800129 legacy.afFrameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.afFrameCount));
130 legacy.afSampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.afSampleRate));
131 legacy.afLatencyMs = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.afLatencyMs));
132 legacy.outputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.outputId));
133 legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800134 legacy.audioTrack = aidl.audioTrack;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800135 return legacy;
136}
137
138ConversionResult<media::CreateRecordRequest>
139IAudioFlinger::CreateRecordInput::toAidl() const {
140 media::CreateRecordRequest aidl;
141 aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributesInternal(attr));
142 aidl.config = VALUE_OR_RETURN(legacy2aidl_audio_config_base_t_AudioConfigBase(config));
Andy Hung973638a2020-12-08 20:47:45 -0800143 aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800144 aidl.riid = VALUE_OR_RETURN(legacy2aidl_audio_unique_id_t_int32_t(riid));
Eric Laurentec376dc2021-04-08 20:41:22 +0200145 aidl.maxSharedAudioHistoryMs = VALUE_OR_RETURN(
146 convertIntegral<int32_t>(maxSharedAudioHistoryMs));
Andy Hung973638a2020-12-08 20:47:45 -0800147 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800148 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
149 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
150 aidl.selectedDeviceId = VALUE_OR_RETURN(
151 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
152 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
153 return aidl;
154}
155
156ConversionResult<IAudioFlinger::CreateRecordInput>
157IAudioFlinger::CreateRecordInput::fromAidl(
158 const media::CreateRecordRequest& aidl) {
159 IAudioFlinger::CreateRecordInput legacy;
Eric Laurentec376dc2021-04-08 20:41:22 +0200160 legacy.attr = VALUE_OR_RETURN(
161 aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800162 legacy.config = VALUE_OR_RETURN(aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config));
Andy Hung973638a2020-12-08 20:47:45 -0800163 legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800164 legacy.riid = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_unique_id_t(aidl.riid));
Eric Laurentec376dc2021-04-08 20:41:22 +0200165 legacy.maxSharedAudioHistoryMs = VALUE_OR_RETURN(
166 convertIntegral<int32_t>(aidl.maxSharedAudioHistoryMs));
Andy Hung973638a2020-12-08 20:47:45 -0800167 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800168 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
169 legacy.notificationFrameCount = VALUE_OR_RETURN(
170 convertIntegral<size_t>(aidl.notificationFrameCount));
171 legacy.selectedDeviceId = VALUE_OR_RETURN(
172 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
173 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
174 return legacy;
175}
176
177ConversionResult<media::CreateRecordResponse>
178IAudioFlinger::CreateRecordOutput::toAidl() const {
179 media::CreateRecordResponse aidl;
Andy Hung973638a2020-12-08 20:47:45 -0800180 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800181 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
182 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
183 aidl.selectedDeviceId = VALUE_OR_RETURN(
184 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
185 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
186 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
187 aidl.inputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(inputId));
188 aidl.cblk = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(cblk));
189 aidl.buffers = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(buffers));
190 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800191 aidl.audioRecord = audioRecord;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800192 return aidl;
193}
194
195ConversionResult<IAudioFlinger::CreateRecordOutput>
196IAudioFlinger::CreateRecordOutput::fromAidl(
197 const media::CreateRecordResponse& aidl) {
198 IAudioFlinger::CreateRecordOutput legacy;
Andy Hung973638a2020-12-08 20:47:45 -0800199 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800200 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
201 legacy.notificationFrameCount = VALUE_OR_RETURN(
202 convertIntegral<size_t>(aidl.notificationFrameCount));
203 legacy.selectedDeviceId = VALUE_OR_RETURN(
204 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
205 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
206 legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
207 legacy.inputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.inputId));
208 legacy.cblk = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.cblk));
209 legacy.buffers = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.buffers));
210 legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800211 legacy.audioRecord = aidl.audioRecord;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800212 return legacy;
213}
Eric Laurent42896a02019-09-27 15:40:33 -0700214
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800215////////////////////////////////////////////////////////////////////////////////////////////////////
216// AudioFlingerClientAdapter
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800217
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800218AudioFlingerClientAdapter::AudioFlingerClientAdapter(
219 const sp<media::IAudioFlingerService> delegate) : mDelegate(delegate) {}
Eric Laurent21da6472017-11-09 16:29:26 -0800220
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800221status_t AudioFlingerClientAdapter::createTrack(const media::CreateTrackRequest& input,
222 media::CreateTrackResponse& output) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800223 return statusTFromBinderStatus(mDelegate->createTrack(input, &output));
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800224}
225
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800226status_t AudioFlingerClientAdapter::createRecord(const media::CreateRecordRequest& input,
227 media::CreateRecordResponse& output) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800228 return statusTFromBinderStatus(mDelegate->createRecord(input, &output));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800229}
230
231uint32_t AudioFlingerClientAdapter::sampleRate(audio_io_handle_t ioHandle) const {
232 auto result = [&]() -> ConversionResult<uint32_t> {
233 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
234 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800235 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->sampleRate(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800236 return convertIntegral<uint32_t>(aidlRet);
237 }();
238 // Failure is ignored.
239 return result.value_or(0);
240}
241
242audio_format_t AudioFlingerClientAdapter::format(audio_io_handle_t output) const {
243 auto result = [&]() -> ConversionResult<audio_format_t> {
244 int32_t outputAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output));
245 media::audio::common::AudioFormat aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800246 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->format(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800247 return aidl2legacy_AudioFormat_audio_format_t(aidlRet);
248 }();
249 return result.value_or(AUDIO_FORMAT_INVALID);
250}
251
252size_t AudioFlingerClientAdapter::frameCount(audio_io_handle_t ioHandle) const {
253 auto result = [&]() -> ConversionResult<size_t> {
254 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
255 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800256 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->frameCount(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800257 return convertIntegral<size_t>(aidlRet);
258 }();
259 // Failure is ignored.
260 return result.value_or(0);
261}
262
263uint32_t AudioFlingerClientAdapter::latency(audio_io_handle_t output) const {
264 auto result = [&]() -> ConversionResult<uint32_t> {
265 int32_t outputAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output));
266 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800267 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->latency(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800268 return convertIntegral<uint32_t>(aidlRet);
269 }();
270 // Failure is ignored.
271 return result.value_or(0);
272}
273
274status_t AudioFlingerClientAdapter::setMasterVolume(float value) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800275 return statusTFromBinderStatus(mDelegate->setMasterVolume(value));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800276}
277
278status_t AudioFlingerClientAdapter::setMasterMute(bool muted) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800279 return statusTFromBinderStatus(mDelegate->setMasterMute(muted));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800280}
281
282float AudioFlingerClientAdapter::masterVolume() const {
283 auto result = [&]() -> ConversionResult<float> {
284 float aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800285 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterVolume(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800286 return aidlRet;
287 }();
288 // Failure is ignored.
289 return result.value_or(0.f);
290}
291
292bool AudioFlingerClientAdapter::masterMute() const {
293 auto result = [&]() -> ConversionResult<bool> {
294 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800295 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterMute(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800296 return aidlRet;
297 }();
298 // Failure is ignored.
299 return result.value_or(false);
300}
301
302status_t AudioFlingerClientAdapter::setMasterBalance(float balance) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800303 return statusTFromBinderStatus(mDelegate->setMasterBalance(balance));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800304}
305
306status_t AudioFlingerClientAdapter::getMasterBalance(float* balance) const{
Andy Hung1131b6e2020-12-08 20:47:45 -0800307 return statusTFromBinderStatus(mDelegate->getMasterBalance(balance));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800308}
309
310status_t AudioFlingerClientAdapter::setStreamVolume(audio_stream_type_t stream, float value,
311 audio_io_handle_t output) {
312 media::AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
313 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
314 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800315 return statusTFromBinderStatus(mDelegate->setStreamVolume(streamAidl, value, outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800316}
317
318status_t AudioFlingerClientAdapter::setStreamMute(audio_stream_type_t stream, bool muted) {
319 media::AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
320 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
Andy Hung1131b6e2020-12-08 20:47:45 -0800321 return statusTFromBinderStatus(mDelegate->setStreamMute(streamAidl, muted));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800322}
323
324float AudioFlingerClientAdapter::streamVolume(audio_stream_type_t stream,
325 audio_io_handle_t output) const {
326 auto result = [&]() -> ConversionResult<float> {
327 media::AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
328 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
329 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
330 float aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800331 RETURN_IF_ERROR(statusTFromBinderStatus(
332 mDelegate->streamVolume(streamAidl, outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800333 return aidlRet;
334 }();
335 // Failure is ignored.
336 return result.value_or(0.f);
337}
338
339bool AudioFlingerClientAdapter::streamMute(audio_stream_type_t stream) const {
340 auto result = [&]() -> ConversionResult<bool> {
341 media::AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
342 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
343 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800344 RETURN_IF_ERROR(statusTFromBinderStatus(
345 mDelegate->streamMute(streamAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800346 return aidlRet;
347 }();
348 // Failure is ignored.
349 return result.value_or(false);
350}
351
352status_t AudioFlingerClientAdapter::setMode(audio_mode_t mode) {
353 media::AudioMode modeAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_mode_t_AudioMode(mode));
Andy Hung1131b6e2020-12-08 20:47:45 -0800354 return statusTFromBinderStatus(mDelegate->setMode(modeAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800355}
356
357status_t AudioFlingerClientAdapter::setMicMute(bool state) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800358 return statusTFromBinderStatus(mDelegate->setMicMute(state));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800359}
360
361bool AudioFlingerClientAdapter::getMicMute() const {
362 auto result = [&]() -> ConversionResult<bool> {
363 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800364 RETURN_IF_ERROR(statusTFromBinderStatus(
365 mDelegate->getMicMute(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800366 return aidlRet;
367 }();
368 // Failure is ignored.
369 return result.value_or(false);
370}
371
372void AudioFlingerClientAdapter::setRecordSilenced(audio_port_handle_t portId, bool silenced) {
373 auto result = [&]() -> status_t {
374 int32_t portIdAidl = VALUE_OR_RETURN_STATUS(
375 legacy2aidl_audio_port_handle_t_int32_t(portId));
Andy Hung1131b6e2020-12-08 20:47:45 -0800376 return statusTFromBinderStatus(mDelegate->setRecordSilenced(portIdAidl, silenced));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800377 }();
378 // Failure is ignored.
379 (void) result;
380}
381
382status_t AudioFlingerClientAdapter::setParameters(audio_io_handle_t ioHandle,
383 const String8& keyValuePairs) {
384 int32_t ioHandleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
385 std::string keyValuePairsAidl = VALUE_OR_RETURN_STATUS(
386 legacy2aidl_String8_string(keyValuePairs));
Andy Hung1131b6e2020-12-08 20:47:45 -0800387 return statusTFromBinderStatus(mDelegate->setParameters(ioHandleAidl, keyValuePairsAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800388}
389
390String8 AudioFlingerClientAdapter::getParameters(audio_io_handle_t ioHandle, const String8& keys)
391const {
392 auto result = [&]() -> ConversionResult<String8> {
393 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
394 std::string keysAidl = VALUE_OR_RETURN(legacy2aidl_String8_string(keys));
395 std::string aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800396 RETURN_IF_ERROR(statusTFromBinderStatus(
397 mDelegate->getParameters(ioHandleAidl, keysAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800398 return aidl2legacy_string_view_String8(aidlRet);
399 }();
400 // Failure is ignored.
401 return result.value_or(String8());
402}
403
404void AudioFlingerClientAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
405 mDelegate->registerClient(client);
406 // Failure is ignored.
407}
408
409size_t AudioFlingerClientAdapter::getInputBufferSize(uint32_t sampleRate, audio_format_t format,
410 audio_channel_mask_t channelMask) const {
411 auto result = [&]() -> ConversionResult<size_t> {
412 int32_t sampleRateAidl = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
413 media::audio::common::AudioFormat formatAidl = VALUE_OR_RETURN(
414 legacy2aidl_audio_format_t_AudioFormat(format));
415 int32_t channelMaskAidl = VALUE_OR_RETURN(
416 legacy2aidl_audio_channel_mask_t_int32_t(channelMask));
417 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800418 RETURN_IF_ERROR(statusTFromBinderStatus(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800419 mDelegate->getInputBufferSize(sampleRateAidl, formatAidl, channelMaskAidl,
Andy Hung1131b6e2020-12-08 20:47:45 -0800420 &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800421 return convertIntegral<size_t>(aidlRet);
422 }();
423 // Failure is ignored.
424 return result.value_or(0);
425}
426
427status_t AudioFlingerClientAdapter::openOutput(const media::OpenOutputRequest& request,
428 media::OpenOutputResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800429 return statusTFromBinderStatus(mDelegate->openOutput(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800430}
431
432audio_io_handle_t AudioFlingerClientAdapter::openDuplicateOutput(audio_io_handle_t output1,
433 audio_io_handle_t output2) {
434 auto result = [&]() -> ConversionResult<audio_io_handle_t> {
435 int32_t output1Aidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output1));
436 int32_t output2Aidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output2));
437 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800438 RETURN_IF_ERROR(statusTFromBinderStatus(
439 mDelegate->openDuplicateOutput(output1Aidl, output2Aidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800440 return aidl2legacy_int32_t_audio_io_handle_t(aidlRet);
441 }();
442 // Failure is ignored.
443 return result.value_or(0);
444}
445
446status_t AudioFlingerClientAdapter::closeOutput(audio_io_handle_t output) {
447 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800448 return statusTFromBinderStatus(mDelegate->closeOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800449}
450
451status_t AudioFlingerClientAdapter::suspendOutput(audio_io_handle_t output) {
452 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800453 return statusTFromBinderStatus(mDelegate->suspendOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800454}
455
456status_t AudioFlingerClientAdapter::restoreOutput(audio_io_handle_t output) {
457 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800458 return statusTFromBinderStatus(mDelegate->restoreOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800459}
460
461status_t AudioFlingerClientAdapter::openInput(const media::OpenInputRequest& request,
462 media::OpenInputResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800463 return statusTFromBinderStatus(mDelegate->openInput(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800464}
465
466status_t AudioFlingerClientAdapter::closeInput(audio_io_handle_t input) {
467 int32_t inputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(input));
Andy Hung1131b6e2020-12-08 20:47:45 -0800468 return statusTFromBinderStatus(mDelegate->closeInput(inputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800469}
470
471status_t AudioFlingerClientAdapter::invalidateStream(audio_stream_type_t stream) {
472 media::AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
473 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
Andy Hung1131b6e2020-12-08 20:47:45 -0800474 return statusTFromBinderStatus(mDelegate->invalidateStream(streamAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800475}
476
477status_t AudioFlingerClientAdapter::setVoiceVolume(float volume) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800478 return statusTFromBinderStatus(mDelegate->setVoiceVolume(volume));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800479}
480
481status_t AudioFlingerClientAdapter::getRenderPosition(uint32_t* halFrames, uint32_t* dspFrames,
482 audio_io_handle_t output) const {
483 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
484 media::RenderPosition aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800485 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
486 mDelegate->getRenderPosition(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800487 if (halFrames != nullptr) {
488 *halFrames = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet.halFrames));
489 }
490 if (dspFrames != nullptr) {
491 *dspFrames = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet.dspFrames));
492 }
493 return OK;
494}
495
496uint32_t AudioFlingerClientAdapter::getInputFramesLost(audio_io_handle_t ioHandle) const {
497 auto result = [&]() -> ConversionResult<uint32_t> {
498 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
499 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800500 RETURN_IF_ERROR(statusTFromBinderStatus(
501 mDelegate->getInputFramesLost(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800502 return convertIntegral<uint32_t>(aidlRet);
503 }();
504 // Failure is ignored.
505 return result.value_or(0);
506}
507
508audio_unique_id_t AudioFlingerClientAdapter::newAudioUniqueId(audio_unique_id_use_t use) {
509 auto result = [&]() -> ConversionResult<audio_unique_id_t> {
510 media::AudioUniqueIdUse useAidl = VALUE_OR_RETURN(
511 legacy2aidl_audio_unique_id_use_t_AudioUniqueIdUse(use));
512 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800513 RETURN_IF_ERROR(statusTFromBinderStatus(
514 mDelegate->newAudioUniqueId(useAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800515 return aidl2legacy_int32_t_audio_unique_id_t(aidlRet);
516 }();
517 return result.value_or(AUDIO_UNIQUE_ID_ALLOCATE);
518}
519
520void AudioFlingerClientAdapter::acquireAudioSessionId(audio_session_t audioSession, pid_t pid,
521 uid_t uid) {
522 [&]() -> status_t {
523 int32_t audioSessionAidl = VALUE_OR_RETURN_STATUS(
524 legacy2aidl_audio_session_t_int32_t(audioSession));
525 int32_t pidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(pid));
526 int32_t uidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(uid));
Andy Hung1131b6e2020-12-08 20:47:45 -0800527 return statusTFromBinderStatus(
528 mDelegate->acquireAudioSessionId(audioSessionAidl, pidAidl, uidAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800529 }();
530 // Failure is ignored.
531}
532
533void AudioFlingerClientAdapter::releaseAudioSessionId(audio_session_t audioSession, pid_t pid) {
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));
Andy Hung1131b6e2020-12-08 20:47:45 -0800538 return statusTFromBinderStatus(
539 mDelegate->releaseAudioSessionId(audioSessionAidl, pidAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800540 }();
541 // Failure is ignored.
542}
543
544status_t AudioFlingerClientAdapter::queryNumberEffects(uint32_t* numEffects) const {
545 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800546 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
547 mDelegate->queryNumberEffects(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800548 if (numEffects != nullptr) {
549 *numEffects = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet));
550 }
551 return OK;
552}
553
554status_t
555AudioFlingerClientAdapter::queryEffect(uint32_t index, effect_descriptor_t* pDescriptor) const {
556 int32_t indexAidl = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(index));
557 media::EffectDescriptor aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800558 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
559 mDelegate->queryEffect(indexAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800560 if (pDescriptor != nullptr) {
561 *pDescriptor = VALUE_OR_RETURN_STATUS(
562 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
563 }
564 return OK;
565}
566
567status_t AudioFlingerClientAdapter::getEffectDescriptor(const effect_uuid_t* pEffectUUID,
568 const effect_uuid_t* pTypeUUID,
569 uint32_t preferredTypeFlag,
570 effect_descriptor_t* pDescriptor) const {
571 media::AudioUuid effectUuidAidl = VALUE_OR_RETURN_STATUS(
572 legacy2aidl_audio_uuid_t_AudioUuid(*pEffectUUID));
573 media::AudioUuid typeUuidAidl = VALUE_OR_RETURN_STATUS(
574 legacy2aidl_audio_uuid_t_AudioUuid(*pTypeUUID));
575 int32_t preferredTypeFlagAidl = VALUE_OR_RETURN_STATUS(
576 convertReinterpret<int32_t>(preferredTypeFlag));
577 media::EffectDescriptor aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800578 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800579 mDelegate->getEffectDescriptor(effectUuidAidl, typeUuidAidl, preferredTypeFlagAidl,
Andy Hung1131b6e2020-12-08 20:47:45 -0800580 &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800581 if (pDescriptor != nullptr) {
582 *pDescriptor = VALUE_OR_RETURN_STATUS(
583 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
584 }
585 return OK;
586}
587
588status_t AudioFlingerClientAdapter::createEffect(const media::CreateEffectRequest& request,
589 media::CreateEffectResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800590 return statusTFromBinderStatus(mDelegate->createEffect(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800591}
592
593status_t
594AudioFlingerClientAdapter::moveEffects(audio_session_t session, audio_io_handle_t srcOutput,
595 audio_io_handle_t dstOutput) {
596 int32_t sessionAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_session_t_int32_t(session));
597 int32_t srcOutputAidl = VALUE_OR_RETURN_STATUS(
598 legacy2aidl_audio_io_handle_t_int32_t(srcOutput));
599 int32_t dstOutputAidl = VALUE_OR_RETURN_STATUS(
600 legacy2aidl_audio_io_handle_t_int32_t(dstOutput));
Andy Hung1131b6e2020-12-08 20:47:45 -0800601 return statusTFromBinderStatus(
602 mDelegate->moveEffects(sessionAidl, srcOutputAidl, dstOutputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800603}
604
605void AudioFlingerClientAdapter::setEffectSuspended(int effectId,
606 audio_session_t sessionId,
607 bool suspended) {
608 [&]() -> status_t {
609 int32_t effectIdAidl = VALUE_OR_RETURN_STATUS(convertReinterpret<int32_t>(effectId));
610 int32_t sessionIdAidl = VALUE_OR_RETURN_STATUS(
611 legacy2aidl_audio_session_t_int32_t(sessionId));
Andy Hung1131b6e2020-12-08 20:47:45 -0800612 return statusTFromBinderStatus(
613 mDelegate->setEffectSuspended(effectIdAidl, sessionIdAidl, suspended));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800614 }();
615 // Failure is ignored.
616}
617
618audio_module_handle_t AudioFlingerClientAdapter::loadHwModule(const char* name) {
619 auto result = [&]() -> ConversionResult<audio_module_handle_t> {
620 std::string nameAidl(name);
621 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800622 RETURN_IF_ERROR(statusTFromBinderStatus(
623 mDelegate->loadHwModule(nameAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800624 return aidl2legacy_int32_t_audio_module_handle_t(aidlRet);
625 }();
626 // Failure is ignored.
627 return result.value_or(0);
628}
629
630uint32_t AudioFlingerClientAdapter::getPrimaryOutputSamplingRate() {
631 auto result = [&]() -> ConversionResult<uint32_t> {
632 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800633 RETURN_IF_ERROR(statusTFromBinderStatus(
634 mDelegate->getPrimaryOutputSamplingRate(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800635 return convertIntegral<uint32_t>(aidlRet);
636 }();
637 // Failure is ignored.
638 return result.value_or(0);
639}
640
641size_t AudioFlingerClientAdapter::getPrimaryOutputFrameCount() {
642 auto result = [&]() -> ConversionResult<size_t> {
643 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800644 RETURN_IF_ERROR(statusTFromBinderStatus(
645 mDelegate->getPrimaryOutputFrameCount(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800646 return convertIntegral<size_t>(aidlRet);
647 }();
648 // Failure is ignored.
649 return result.value_or(0);
650}
651
652status_t AudioFlingerClientAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800653 return statusTFromBinderStatus(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800654}
655
656status_t AudioFlingerClientAdapter::getAudioPort(struct audio_port_v7* port) {
657 media::AudioPort portAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_v7_AudioPort(*port));
658 media::AudioPort aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800659 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
660 mDelegate->getAudioPort(portAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800661 *port = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioPort_audio_port_v7(aidlRet));
662 return OK;
663}
664
665status_t AudioFlingerClientAdapter::createAudioPatch(const struct audio_patch* patch,
666 audio_patch_handle_t* handle) {
667 media::AudioPatch patchAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_AudioPatch(*patch));
Kuowei Li247a3672021-07-21 21:46:07 +0800668 int32_t aidlRet = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(
669 AUDIO_PATCH_HANDLE_NONE));
670 if (handle != nullptr) {
671 aidlRet = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(*handle));
672 }
Andy Hung1131b6e2020-12-08 20:47:45 -0800673 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
674 mDelegate->createAudioPatch(patchAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800675 if (handle != nullptr) {
676 *handle = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_patch_handle_t(aidlRet));
677 }
678 return OK;
679}
680
681status_t AudioFlingerClientAdapter::releaseAudioPatch(audio_patch_handle_t handle) {
682 int32_t handleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(handle));
Andy Hung1131b6e2020-12-08 20:47:45 -0800683 return statusTFromBinderStatus(mDelegate->releaseAudioPatch(handleAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800684}
685
686status_t AudioFlingerClientAdapter::listAudioPatches(unsigned int* num_patches,
687 struct audio_patch* patches) {
688 std::vector<media::AudioPatch> aidlRet;
689 int32_t maxPatches = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(*num_patches));
Andy Hung1131b6e2020-12-08 20:47:45 -0800690 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
691 mDelegate->listAudioPatches(maxPatches, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800692 *num_patches = VALUE_OR_RETURN_STATUS(convertIntegral<unsigned int>(aidlRet.size()));
693 return convertRange(aidlRet.begin(), aidlRet.end(), patches,
694 aidl2legacy_AudioPatch_audio_patch);
695}
696
697status_t AudioFlingerClientAdapter::setAudioPortConfig(const struct audio_port_config* config) {
698 media::AudioPortConfig configAidl = VALUE_OR_RETURN_STATUS(
699 legacy2aidl_audio_port_config_AudioPortConfig(*config));
Andy Hung1131b6e2020-12-08 20:47:45 -0800700 return statusTFromBinderStatus(mDelegate->setAudioPortConfig(configAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800701}
702
703audio_hw_sync_t AudioFlingerClientAdapter::getAudioHwSyncForSession(audio_session_t sessionId) {
704 auto result = [&]() -> ConversionResult<audio_hw_sync_t> {
705 int32_t sessionIdAidl = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
706 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800707 RETURN_IF_ERROR(statusTFromBinderStatus(
708 mDelegate->getAudioHwSyncForSession(sessionIdAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800709 return aidl2legacy_int32_t_audio_hw_sync_t(aidlRet);
710 }();
711 return result.value_or(AUDIO_HW_SYNC_INVALID);
712}
713
714status_t AudioFlingerClientAdapter::systemReady() {
Andy Hung1131b6e2020-12-08 20:47:45 -0800715 return statusTFromBinderStatus(mDelegate->systemReady());
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800716}
717
Eric Laurentd66d7a12021-07-13 13:35:32 +0200718status_t AudioFlingerClientAdapter::audioPolicyReady() {
719 return statusTFromBinderStatus(mDelegate->audioPolicyReady());
720}
721
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800722size_t AudioFlingerClientAdapter::frameCountHAL(audio_io_handle_t ioHandle) const {
723 auto result = [&]() -> ConversionResult<size_t> {
724 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
725 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800726 RETURN_IF_ERROR(statusTFromBinderStatus(
727 mDelegate->frameCountHAL(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800728 return convertIntegral<size_t>(aidlRet);
729 }();
730 // Failure is ignored.
731 return result.value_or(0);
732}
733
734status_t
735AudioFlingerClientAdapter::getMicrophones(std::vector<media::MicrophoneInfo>* microphones) {
736 std::vector<media::MicrophoneInfoData> aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800737 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
738 mDelegate->getMicrophones(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800739 if (microphones != nullptr) {
740 *microphones = VALUE_OR_RETURN_STATUS(
741 convertContainer<std::vector<media::MicrophoneInfo>>(aidlRet,
742 media::aidl2legacy_MicrophoneInfo));
743 }
744 return OK;
745}
746
747status_t AudioFlingerClientAdapter::setAudioHalPids(const std::vector<pid_t>& pids) {
748 std::vector<int32_t> pidsAidl = VALUE_OR_RETURN_STATUS(
749 convertContainer<std::vector<int32_t>>(pids, legacy2aidl_pid_t_int32_t));
Andy Hung1131b6e2020-12-08 20:47:45 -0800750 return statusTFromBinderStatus(mDelegate->setAudioHalPids(pidsAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800751}
752
jiabin1319f5a2021-03-30 22:21:24 +0000753status_t AudioFlingerClientAdapter::setVibratorInfos(
754 const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
755 return statusTFromBinderStatus(mDelegate->setVibratorInfos(vibratorInfos));
756}
757
jiabinf042b9b2021-05-07 23:46:28 +0000758status_t AudioFlingerClientAdapter::updateSecondaryOutputs(
759 const TrackSecondaryOutputsMap& trackSecondaryOutputs) {
760 std::vector<media::TrackSecondaryOutputInfo> trackSecondaryOutputInfos =
761 VALUE_OR_RETURN_STATUS(
762 convertContainer<std::vector<media::TrackSecondaryOutputInfo>>(
763 trackSecondaryOutputs,
764 legacy2aidl_TrackSecondaryOutputInfoPair_TrackSecondaryOutputInfo));
765 return statusTFromBinderStatus(mDelegate->updateSecondaryOutputs(trackSecondaryOutputInfos));
766}
767
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800768
769////////////////////////////////////////////////////////////////////////////////////////////////////
770// AudioFlingerServerAdapter
771AudioFlingerServerAdapter::AudioFlingerServerAdapter(
772 const sp<AudioFlingerServerAdapter::Delegate>& delegate) : mDelegate(delegate) {}
773
Ytai Ben-Tsvi24b33fc2021-05-10 13:08:11 -0700774status_t AudioFlingerServerAdapter::onTransact(uint32_t code,
775 const Parcel& data,
776 Parcel* reply,
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800777 uint32_t flags) {
Ytai Ben-Tsvi24b33fc2021-05-10 13:08:11 -0700778 return mDelegate->onTransactWrapper(static_cast<Delegate::TransactionCode>(code),
779 data,
780 flags,
781 [&] {
782 return BnAudioFlingerService::onTransact(
783 code,
784 data,
785 reply,
786 flags);
787 });
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800788}
789
790status_t AudioFlingerServerAdapter::dump(int fd, const Vector<String16>& args) {
791 return mDelegate->dump(fd, args);
792}
793
794Status AudioFlingerServerAdapter::createTrack(const media::CreateTrackRequest& request,
795 media::CreateTrackResponse* _aidl_return) {
796 return Status::fromStatusT(mDelegate->createTrack(request, *_aidl_return));
797}
798
799Status AudioFlingerServerAdapter::createRecord(const media::CreateRecordRequest& request,
800 media::CreateRecordResponse* _aidl_return) {
801 return Status::fromStatusT(mDelegate->createRecord(request, *_aidl_return));
802}
803
804Status AudioFlingerServerAdapter::sampleRate(int32_t ioHandle, int32_t* _aidl_return) {
805 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
806 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
807 *_aidl_return = VALUE_OR_RETURN_BINDER(
808 convertIntegral<int32_t>(mDelegate->sampleRate(ioHandleLegacy)));
809 return Status::ok();
810}
811
812Status AudioFlingerServerAdapter::format(int32_t output,
813 media::audio::common::AudioFormat* _aidl_return) {
814 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
815 aidl2legacy_int32_t_audio_io_handle_t(output));
816 *_aidl_return = VALUE_OR_RETURN_BINDER(
817 legacy2aidl_audio_format_t_AudioFormat(mDelegate->format(outputLegacy)));
818 return Status::ok();
819}
820
821Status AudioFlingerServerAdapter::frameCount(int32_t ioHandle, int64_t* _aidl_return) {
822 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
823 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
824 *_aidl_return = VALUE_OR_RETURN_BINDER(
825 convertIntegral<int64_t>(mDelegate->frameCount(ioHandleLegacy)));
826 return Status::ok();
827}
828
829Status AudioFlingerServerAdapter::latency(int32_t output, int32_t* _aidl_return) {
830 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
831 aidl2legacy_int32_t_audio_io_handle_t(output));
832 *_aidl_return = VALUE_OR_RETURN_BINDER(
833 convertIntegral<int32_t>(mDelegate->latency(outputLegacy)));
834 return Status::ok();
835}
836
837Status AudioFlingerServerAdapter::setMasterVolume(float value) {
838 return Status::fromStatusT(mDelegate->setMasterVolume(value));
839}
840
841Status AudioFlingerServerAdapter::setMasterMute(bool muted) {
842 return Status::fromStatusT(mDelegate->setMasterMute(muted));
843}
844
845Status AudioFlingerServerAdapter::masterVolume(float* _aidl_return) {
846 *_aidl_return = mDelegate->masterVolume();
847 return Status::ok();
848}
849
850Status AudioFlingerServerAdapter::masterMute(bool* _aidl_return) {
851 *_aidl_return = mDelegate->masterMute();
852 return Status::ok();
853}
854
855Status AudioFlingerServerAdapter::setMasterBalance(float balance) {
856 return Status::fromStatusT(mDelegate->setMasterBalance(balance));
857}
858
859Status AudioFlingerServerAdapter::getMasterBalance(float* _aidl_return) {
860 return Status::fromStatusT(mDelegate->getMasterBalance(_aidl_return));
861}
862
863Status AudioFlingerServerAdapter::setStreamVolume(media::AudioStreamType stream, float value,
864 int32_t output) {
865 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
866 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
867 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
868 aidl2legacy_int32_t_audio_io_handle_t(output));
869 return Status::fromStatusT(mDelegate->setStreamVolume(streamLegacy, value, outputLegacy));
870}
871
872Status AudioFlingerServerAdapter::setStreamMute(media::AudioStreamType stream, bool muted) {
873 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
874 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
875 return Status::fromStatusT(mDelegate->setStreamMute(streamLegacy, muted));
876}
877
878Status AudioFlingerServerAdapter::streamVolume(media::AudioStreamType stream, int32_t output,
879 float* _aidl_return) {
880 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
881 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
882 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
883 aidl2legacy_int32_t_audio_io_handle_t(output));
884 *_aidl_return = mDelegate->streamVolume(streamLegacy, outputLegacy);
885 return Status::ok();
886}
887
888Status AudioFlingerServerAdapter::streamMute(media::AudioStreamType stream, bool* _aidl_return) {
889 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
890 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
891 *_aidl_return = mDelegate->streamMute(streamLegacy);
892 return Status::ok();
893}
894
895Status AudioFlingerServerAdapter::setMode(media::AudioMode mode) {
896 audio_mode_t modeLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioMode_audio_mode_t(mode));
897 return Status::fromStatusT(mDelegate->setMode(modeLegacy));
898}
899
900Status AudioFlingerServerAdapter::setMicMute(bool state) {
901 return Status::fromStatusT(mDelegate->setMicMute(state));
902}
903
904Status AudioFlingerServerAdapter::getMicMute(bool* _aidl_return) {
905 *_aidl_return = mDelegate->getMicMute();
906 return Status::ok();
907}
908
909Status AudioFlingerServerAdapter::setRecordSilenced(int32_t portId, bool silenced) {
910 audio_port_handle_t portIdLegacy = VALUE_OR_RETURN_BINDER(
911 aidl2legacy_int32_t_audio_port_handle_t(portId));
912 mDelegate->setRecordSilenced(portIdLegacy, silenced);
913 return Status::ok();
914}
915
916Status
917AudioFlingerServerAdapter::setParameters(int32_t ioHandle, const std::string& keyValuePairs) {
918 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
919 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
920 String8 keyValuePairsLegacy = VALUE_OR_RETURN_BINDER(
921 aidl2legacy_string_view_String8(keyValuePairs));
922 return Status::fromStatusT(mDelegate->setParameters(ioHandleLegacy, keyValuePairsLegacy));
923}
924
925Status AudioFlingerServerAdapter::getParameters(int32_t ioHandle, const std::string& keys,
926 std::string* _aidl_return) {
927 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
928 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
929 String8 keysLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_string_view_String8(keys));
930 *_aidl_return = VALUE_OR_RETURN_BINDER(
931 legacy2aidl_String8_string(mDelegate->getParameters(ioHandleLegacy, keysLegacy)));
932 return Status::ok();
933}
934
935Status AudioFlingerServerAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
936 mDelegate->registerClient(client);
937 return Status::ok();
938}
939
940Status AudioFlingerServerAdapter::getInputBufferSize(int32_t sampleRate,
941 media::audio::common::AudioFormat format,
942 int32_t channelMask, int64_t* _aidl_return) {
943 uint32_t sampleRateLegacy = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(sampleRate));
944 audio_format_t formatLegacy = VALUE_OR_RETURN_BINDER(
945 aidl2legacy_AudioFormat_audio_format_t(format));
946 audio_channel_mask_t channelMaskLegacy = VALUE_OR_RETURN_BINDER(
947 aidl2legacy_int32_t_audio_channel_mask_t(channelMask));
948 size_t size = mDelegate->getInputBufferSize(sampleRateLegacy, formatLegacy, channelMaskLegacy);
949 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int64_t>(size));
950 return Status::ok();
951}
952
953Status AudioFlingerServerAdapter::openOutput(const media::OpenOutputRequest& request,
954 media::OpenOutputResponse* _aidl_return) {
955 return Status::fromStatusT(mDelegate->openOutput(request, _aidl_return));
956}
957
958Status AudioFlingerServerAdapter::openDuplicateOutput(int32_t output1, int32_t output2,
959 int32_t* _aidl_return) {
960 audio_io_handle_t output1Legacy = VALUE_OR_RETURN_BINDER(
961 aidl2legacy_int32_t_audio_io_handle_t(output1));
962 audio_io_handle_t output2Legacy = VALUE_OR_RETURN_BINDER(
963 aidl2legacy_int32_t_audio_io_handle_t(output2));
964 audio_io_handle_t result = mDelegate->openDuplicateOutput(output1Legacy, output2Legacy);
965 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_io_handle_t_int32_t(result));
966 return Status::ok();
967}
968
969Status AudioFlingerServerAdapter::closeOutput(int32_t output) {
970 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
971 aidl2legacy_int32_t_audio_io_handle_t(output));
972 return Status::fromStatusT(mDelegate->closeOutput(outputLegacy));
973}
974
975Status AudioFlingerServerAdapter::suspendOutput(int32_t output) {
976 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
977 aidl2legacy_int32_t_audio_io_handle_t(output));
978 return Status::fromStatusT(mDelegate->suspendOutput(outputLegacy));
979}
980
981Status AudioFlingerServerAdapter::restoreOutput(int32_t output) {
982 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
983 aidl2legacy_int32_t_audio_io_handle_t(output));
984 return Status::fromStatusT(mDelegate->restoreOutput(outputLegacy));
985}
986
987Status AudioFlingerServerAdapter::openInput(const media::OpenInputRequest& request,
988 media::OpenInputResponse* _aidl_return) {
989 return Status::fromStatusT(mDelegate->openInput(request, _aidl_return));
990}
991
992Status AudioFlingerServerAdapter::closeInput(int32_t input) {
993 audio_io_handle_t inputLegacy = VALUE_OR_RETURN_BINDER(
994 aidl2legacy_int32_t_audio_io_handle_t(input));
995 return Status::fromStatusT(mDelegate->closeInput(inputLegacy));
996}
997
998Status AudioFlingerServerAdapter::invalidateStream(media::AudioStreamType stream) {
999 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
1000 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
1001 return Status::fromStatusT(mDelegate->invalidateStream(streamLegacy));
1002}
1003
1004Status AudioFlingerServerAdapter::setVoiceVolume(float volume) {
1005 return Status::fromStatusT(mDelegate->setVoiceVolume(volume));
1006}
1007
1008Status
1009AudioFlingerServerAdapter::getRenderPosition(int32_t output, media::RenderPosition* _aidl_return) {
1010 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
1011 aidl2legacy_int32_t_audio_io_handle_t(output));
1012 uint32_t halFramesLegacy;
1013 uint32_t dspFramesLegacy;
1014 RETURN_BINDER_IF_ERROR(
1015 mDelegate->getRenderPosition(&halFramesLegacy, &dspFramesLegacy, outputLegacy));
1016 _aidl_return->halFrames = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(halFramesLegacy));
1017 _aidl_return->dspFrames = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(dspFramesLegacy));
1018 return Status::ok();
1019}
1020
1021Status AudioFlingerServerAdapter::getInputFramesLost(int32_t ioHandle, int32_t* _aidl_return) {
1022 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1023 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1024 uint32_t result = mDelegate->getInputFramesLost(ioHandleLegacy);
1025 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(result));
1026 return Status::ok();
1027}
1028
1029Status
1030AudioFlingerServerAdapter::newAudioUniqueId(media::AudioUniqueIdUse use, int32_t* _aidl_return) {
1031 audio_unique_id_use_t useLegacy = VALUE_OR_RETURN_BINDER(
1032 aidl2legacy_AudioUniqueIdUse_audio_unique_id_use_t(use));
1033 audio_unique_id_t result = mDelegate->newAudioUniqueId(useLegacy);
1034 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_unique_id_t_int32_t(result));
1035 return Status::ok();
1036}
1037
1038Status
1039AudioFlingerServerAdapter::acquireAudioSessionId(int32_t audioSession, int32_t pid, int32_t uid) {
1040 audio_session_t audioSessionLegacy = VALUE_OR_RETURN_BINDER(
1041 aidl2legacy_int32_t_audio_session_t(audioSession));
1042 pid_t pidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_pid_t(pid));
1043 uid_t uidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_uid_t(uid));
1044 mDelegate->acquireAudioSessionId(audioSessionLegacy, pidLegacy, uidLegacy);
1045 return Status::ok();
1046}
1047
1048Status AudioFlingerServerAdapter::releaseAudioSessionId(int32_t audioSession, int32_t pid) {
1049 audio_session_t audioSessionLegacy = VALUE_OR_RETURN_BINDER(
1050 aidl2legacy_int32_t_audio_session_t(audioSession));
1051 pid_t pidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_pid_t(pid));
1052 mDelegate->releaseAudioSessionId(audioSessionLegacy, pidLegacy);
1053 return Status::ok();
1054}
1055
1056Status AudioFlingerServerAdapter::queryNumberEffects(int32_t* _aidl_return) {
1057 uint32_t result;
1058 RETURN_BINDER_IF_ERROR(mDelegate->queryNumberEffects(&result));
1059 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(result));
1060 return Status::ok();
1061}
1062
1063Status
1064AudioFlingerServerAdapter::queryEffect(int32_t index, media::EffectDescriptor* _aidl_return) {
1065 uint32_t indexLegacy = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(index));
1066 effect_descriptor_t result;
1067 RETURN_BINDER_IF_ERROR(mDelegate->queryEffect(indexLegacy, &result));
1068 *_aidl_return = VALUE_OR_RETURN_BINDER(
1069 legacy2aidl_effect_descriptor_t_EffectDescriptor(result));
1070 return Status::ok();
1071}
1072
1073Status AudioFlingerServerAdapter::getEffectDescriptor(const media::AudioUuid& effectUUID,
1074 const media::AudioUuid& typeUUID,
1075 int32_t preferredTypeFlag,
1076 media::EffectDescriptor* _aidl_return) {
1077 effect_uuid_t effectUuidLegacy = VALUE_OR_RETURN_BINDER(
1078 aidl2legacy_AudioUuid_audio_uuid_t(effectUUID));
1079 effect_uuid_t typeUuidLegacy = VALUE_OR_RETURN_BINDER(
1080 aidl2legacy_AudioUuid_audio_uuid_t(typeUUID));
1081 uint32_t preferredTypeFlagLegacy = VALUE_OR_RETURN_BINDER(
1082 convertReinterpret<uint32_t>(preferredTypeFlag));
1083 effect_descriptor_t result;
1084 RETURN_BINDER_IF_ERROR(mDelegate->getEffectDescriptor(&effectUuidLegacy, &typeUuidLegacy,
1085 preferredTypeFlagLegacy, &result));
1086 *_aidl_return = VALUE_OR_RETURN_BINDER(
1087 legacy2aidl_effect_descriptor_t_EffectDescriptor(result));
1088 return Status::ok();
1089}
1090
1091Status AudioFlingerServerAdapter::createEffect(const media::CreateEffectRequest& request,
1092 media::CreateEffectResponse* _aidl_return) {
1093 return Status::fromStatusT(mDelegate->createEffect(request, _aidl_return));
1094}
1095
1096Status
1097AudioFlingerServerAdapter::moveEffects(int32_t session, int32_t srcOutput, int32_t dstOutput) {
1098 audio_session_t sessionLegacy = VALUE_OR_RETURN_BINDER(
1099 aidl2legacy_int32_t_audio_session_t(session));
1100 audio_io_handle_t srcOutputLegacy = VALUE_OR_RETURN_BINDER(
1101 aidl2legacy_int32_t_audio_io_handle_t(srcOutput));
1102 audio_io_handle_t dstOutputLegacy = VALUE_OR_RETURN_BINDER(
1103 aidl2legacy_int32_t_audio_io_handle_t(dstOutput));
1104 return Status::fromStatusT(
1105 mDelegate->moveEffects(sessionLegacy, srcOutputLegacy, dstOutputLegacy));
1106}
1107
1108Status AudioFlingerServerAdapter::setEffectSuspended(int32_t effectId, int32_t sessionId,
1109 bool suspended) {
1110 int effectIdLegacy = VALUE_OR_RETURN_BINDER(convertReinterpret<int>(effectId));
1111 audio_session_t sessionIdLegacy = VALUE_OR_RETURN_BINDER(
1112 aidl2legacy_int32_t_audio_session_t(sessionId));
1113 mDelegate->setEffectSuspended(effectIdLegacy, sessionIdLegacy, suspended);
1114 return Status::ok();
1115}
1116
1117Status AudioFlingerServerAdapter::loadHwModule(const std::string& name, int32_t* _aidl_return) {
1118 audio_module_handle_t result = mDelegate->loadHwModule(name.c_str());
1119 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_module_handle_t_int32_t(result));
1120 return Status::ok();
1121}
1122
1123Status AudioFlingerServerAdapter::getPrimaryOutputSamplingRate(int32_t* _aidl_return) {
1124 *_aidl_return = VALUE_OR_RETURN_BINDER(
1125 convertIntegral<int32_t>(mDelegate->getPrimaryOutputSamplingRate()));
1126 return Status::ok();
1127}
1128
1129Status AudioFlingerServerAdapter::getPrimaryOutputFrameCount(int64_t* _aidl_return) {
1130 *_aidl_return = VALUE_OR_RETURN_BINDER(
1131 convertIntegral<int64_t>(mDelegate->getPrimaryOutputFrameCount()));
1132 return Status::ok();
1133
1134}
1135
1136Status AudioFlingerServerAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
1137 return Status::fromStatusT(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
1138}
1139
1140Status AudioFlingerServerAdapter::getAudioPort(const media::AudioPort& port,
1141 media::AudioPort* _aidl_return) {
1142 audio_port_v7 portLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPort_audio_port_v7(port));
1143 RETURN_BINDER_IF_ERROR(mDelegate->getAudioPort(&portLegacy));
1144 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_port_v7_AudioPort(portLegacy));
1145 return Status::ok();
1146}
1147
1148Status AudioFlingerServerAdapter::createAudioPatch(const media::AudioPatch& patch,
1149 int32_t* _aidl_return) {
1150 audio_patch patchLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPatch_audio_patch(patch));
Kuowei Li247a3672021-07-21 21:46:07 +08001151 audio_patch_handle_t handleLegacy = VALUE_OR_RETURN_BINDER(
1152 aidl2legacy_int32_t_audio_patch_handle_t(*_aidl_return));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001153 RETURN_BINDER_IF_ERROR(mDelegate->createAudioPatch(&patchLegacy, &handleLegacy));
1154 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_patch_handle_t_int32_t(handleLegacy));
1155 return Status::ok();
1156}
1157
1158Status AudioFlingerServerAdapter::releaseAudioPatch(int32_t handle) {
1159 audio_patch_handle_t handleLegacy = VALUE_OR_RETURN_BINDER(
1160 aidl2legacy_int32_t_audio_patch_handle_t(handle));
1161 return Status::fromStatusT(mDelegate->releaseAudioPatch(handleLegacy));
1162}
1163
1164Status AudioFlingerServerAdapter::listAudioPatches(int32_t maxCount,
1165 std::vector<media::AudioPatch>* _aidl_return) {
1166 unsigned int count = VALUE_OR_RETURN_BINDER(convertIntegral<unsigned int>(maxCount));
1167 count = std::min(count, static_cast<unsigned int>(MAX_ITEMS_PER_LIST));
1168 std::unique_ptr<audio_patch[]> patchesLegacy(new audio_patch[count]);
1169 RETURN_BINDER_IF_ERROR(mDelegate->listAudioPatches(&count, patchesLegacy.get()));
1170 RETURN_BINDER_IF_ERROR(convertRange(&patchesLegacy[0],
1171 &patchesLegacy[count],
1172 std::back_inserter(*_aidl_return),
1173 legacy2aidl_audio_patch_AudioPatch));
1174 return Status::ok();
1175}
1176
1177Status AudioFlingerServerAdapter::setAudioPortConfig(const media::AudioPortConfig& config) {
1178 audio_port_config configLegacy = VALUE_OR_RETURN_BINDER(
1179 aidl2legacy_AudioPortConfig_audio_port_config(config));
1180 return Status::fromStatusT(mDelegate->setAudioPortConfig(&configLegacy));
1181}
1182
1183Status AudioFlingerServerAdapter::getAudioHwSyncForSession(int32_t sessionId,
1184 int32_t* _aidl_return) {
1185 audio_session_t sessionIdLegacy = VALUE_OR_RETURN_BINDER(
1186 aidl2legacy_int32_t_audio_session_t(sessionId));
1187 audio_hw_sync_t result = mDelegate->getAudioHwSyncForSession(sessionIdLegacy);
1188 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_hw_sync_t_int32_t(result));
1189 return Status::ok();
1190}
1191
1192Status AudioFlingerServerAdapter::systemReady() {
1193 return Status::fromStatusT(mDelegate->systemReady());
1194}
1195
Eric Laurentd66d7a12021-07-13 13:35:32 +02001196Status AudioFlingerServerAdapter::audioPolicyReady() {
1197 mDelegate->audioPolicyReady();
1198 return Status::ok();
1199}
1200
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08001201Status AudioFlingerServerAdapter::frameCountHAL(int32_t ioHandle, int64_t* _aidl_return) {
1202 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1203 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1204 size_t result = mDelegate->frameCountHAL(ioHandleLegacy);
1205 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int64_t>(result));
1206 return Status::ok();
1207}
1208
1209Status AudioFlingerServerAdapter::getMicrophones(
1210 std::vector<media::MicrophoneInfoData>* _aidl_return) {
1211 std::vector<media::MicrophoneInfo> resultLegacy;
1212 RETURN_BINDER_IF_ERROR(mDelegate->getMicrophones(&resultLegacy));
1213 *_aidl_return = VALUE_OR_RETURN_BINDER(convertContainer<std::vector<media::MicrophoneInfoData>>(
1214 resultLegacy, media::legacy2aidl_MicrophoneInfo));
1215 return Status::ok();
1216}
1217
1218Status AudioFlingerServerAdapter::setAudioHalPids(const std::vector<int32_t>& pids) {
1219 std::vector<pid_t> pidsLegacy = VALUE_OR_RETURN_BINDER(
1220 convertContainer<std::vector<pid_t>>(pids, aidl2legacy_int32_t_pid_t));
1221 RETURN_BINDER_IF_ERROR(mDelegate->setAudioHalPids(pidsLegacy));
1222 return Status::ok();
1223}
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -08001224
jiabin1319f5a2021-03-30 22:21:24 +00001225Status AudioFlingerServerAdapter::setVibratorInfos(
1226 const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
1227 return Status::fromStatusT(mDelegate->setVibratorInfos(vibratorInfos));
1228}
1229
jiabinf042b9b2021-05-07 23:46:28 +00001230Status AudioFlingerServerAdapter::updateSecondaryOutputs(
1231 const std::vector<media::TrackSecondaryOutputInfo>& trackSecondaryOutputInfos) {
1232 TrackSecondaryOutputsMap trackSecondaryOutputs =
1233 VALUE_OR_RETURN_BINDER(convertContainer<TrackSecondaryOutputsMap>(
1234 trackSecondaryOutputInfos,
1235 aidl2legacy_TrackSecondaryOutputInfo_TrackSecondaryOutputInfoPair));
1236 return Status::fromStatusT(mDelegate->updateSecondaryOutputs(trackSecondaryOutputs));
1237}
1238
Glenn Kasten40bc9062015-03-20 09:09:33 -07001239} // namespace android