blob: 0feafc570ddff9d1849b8e039e6332a53ecffe10 [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));
104 aidl.afFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(afFrameCount));
105 aidl.afSampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(afSampleRate));
106 aidl.afLatencyMs = VALUE_OR_RETURN(convertIntegral<int32_t>(afLatencyMs));
107 aidl.outputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(outputId));
108 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800109 aidl.audioTrack = audioTrack;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800110 return aidl;
111}
112
113ConversionResult<IAudioFlinger::CreateTrackOutput>
114IAudioFlinger::CreateTrackOutput::fromAidl(
115 const media::CreateTrackResponse& aidl) {
116 IAudioFlinger::CreateTrackOutput legacy;
Andy Hung973638a2020-12-08 20:47:45 -0800117 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800118 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
119 legacy.notificationFrameCount = VALUE_OR_RETURN(
120 convertIntegral<size_t>(aidl.notificationFrameCount));
121 legacy.selectedDeviceId = VALUE_OR_RETURN(
122 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
123 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
124 legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
125 legacy.afFrameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.afFrameCount));
126 legacy.afSampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.afSampleRate));
127 legacy.afLatencyMs = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.afLatencyMs));
128 legacy.outputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.outputId));
129 legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800130 legacy.audioTrack = aidl.audioTrack;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800131 return legacy;
132}
133
134ConversionResult<media::CreateRecordRequest>
135IAudioFlinger::CreateRecordInput::toAidl() const {
136 media::CreateRecordRequest aidl;
137 aidl.attr = VALUE_OR_RETURN(legacy2aidl_audio_attributes_t_AudioAttributesInternal(attr));
138 aidl.config = VALUE_OR_RETURN(legacy2aidl_audio_config_base_t_AudioConfigBase(config));
Andy Hung973638a2020-12-08 20:47:45 -0800139 aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800140 aidl.riid = VALUE_OR_RETURN(legacy2aidl_audio_unique_id_t_int32_t(riid));
Andy Hung973638a2020-12-08 20:47:45 -0800141 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800142 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
143 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
144 aidl.selectedDeviceId = VALUE_OR_RETURN(
145 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
146 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
147 return aidl;
148}
149
150ConversionResult<IAudioFlinger::CreateRecordInput>
151IAudioFlinger::CreateRecordInput::fromAidl(
152 const media::CreateRecordRequest& aidl) {
153 IAudioFlinger::CreateRecordInput legacy;
154 legacy.attr = VALUE_OR_RETURN(aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr));
155 legacy.config = VALUE_OR_RETURN(aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config));
Andy Hung973638a2020-12-08 20:47:45 -0800156 legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800157 legacy.riid = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_unique_id_t(aidl.riid));
Andy Hung973638a2020-12-08 20:47:45 -0800158 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800159 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
160 legacy.notificationFrameCount = VALUE_OR_RETURN(
161 convertIntegral<size_t>(aidl.notificationFrameCount));
162 legacy.selectedDeviceId = VALUE_OR_RETURN(
163 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
164 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
165 return legacy;
166}
167
168ConversionResult<media::CreateRecordResponse>
169IAudioFlinger::CreateRecordOutput::toAidl() const {
170 media::CreateRecordResponse aidl;
Andy Hung973638a2020-12-08 20:47:45 -0800171 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800172 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount));
173 aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount));
174 aidl.selectedDeviceId = VALUE_OR_RETURN(
175 legacy2aidl_audio_port_handle_t_int32_t(selectedDeviceId));
176 aidl.sessionId = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
177 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
178 aidl.inputId = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(inputId));
179 aidl.cblk = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(cblk));
180 aidl.buffers = VALUE_OR_RETURN(legacy2aidl_NullableIMemory_SharedFileRegion(buffers));
181 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800182 aidl.audioRecord = audioRecord;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800183 return aidl;
184}
185
186ConversionResult<IAudioFlinger::CreateRecordOutput>
187IAudioFlinger::CreateRecordOutput::fromAidl(
188 const media::CreateRecordResponse& aidl) {
189 IAudioFlinger::CreateRecordOutput legacy;
Andy Hung973638a2020-12-08 20:47:45 -0800190 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800191 legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
192 legacy.notificationFrameCount = VALUE_OR_RETURN(
193 convertIntegral<size_t>(aidl.notificationFrameCount));
194 legacy.selectedDeviceId = VALUE_OR_RETURN(
195 aidl2legacy_int32_t_audio_port_handle_t(aidl.selectedDeviceId));
196 legacy.sessionId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.sessionId));
197 legacy.sampleRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
198 legacy.inputId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.inputId));
199 legacy.cblk = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.cblk));
200 legacy.buffers = VALUE_OR_RETURN(aidl2legacy_NullableSharedFileRegion_IMemory(aidl.buffers));
201 legacy.portId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi16d87612020-11-03 16:32:36 -0800202 legacy.audioRecord = aidl.audioRecord;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800203 return legacy;
204}
Eric Laurent42896a02019-09-27 15:40:33 -0700205
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800206////////////////////////////////////////////////////////////////////////////////////////////////////
207// AudioFlingerClientAdapter
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800208
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800209AudioFlingerClientAdapter::AudioFlingerClientAdapter(
210 const sp<media::IAudioFlingerService> delegate) : mDelegate(delegate) {}
Eric Laurent21da6472017-11-09 16:29:26 -0800211
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800212status_t AudioFlingerClientAdapter::createTrack(const media::CreateTrackRequest& input,
213 media::CreateTrackResponse& output) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800214 return statusTFromBinderStatus(mDelegate->createTrack(input, &output));
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -0800215}
216
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800217status_t AudioFlingerClientAdapter::createRecord(const media::CreateRecordRequest& input,
218 media::CreateRecordResponse& output) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800219 return statusTFromBinderStatus(mDelegate->createRecord(input, &output));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800220}
221
222uint32_t AudioFlingerClientAdapter::sampleRate(audio_io_handle_t ioHandle) const {
223 auto result = [&]() -> ConversionResult<uint32_t> {
224 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
225 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800226 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->sampleRate(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800227 return convertIntegral<uint32_t>(aidlRet);
228 }();
229 // Failure is ignored.
230 return result.value_or(0);
231}
232
233audio_format_t AudioFlingerClientAdapter::format(audio_io_handle_t output) const {
234 auto result = [&]() -> ConversionResult<audio_format_t> {
235 int32_t outputAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output));
236 media::audio::common::AudioFormat aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800237 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->format(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800238 return aidl2legacy_AudioFormat_audio_format_t(aidlRet);
239 }();
240 return result.value_or(AUDIO_FORMAT_INVALID);
241}
242
243size_t AudioFlingerClientAdapter::frameCount(audio_io_handle_t ioHandle) const {
244 auto result = [&]() -> ConversionResult<size_t> {
245 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
246 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800247 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->frameCount(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800248 return convertIntegral<size_t>(aidlRet);
249 }();
250 // Failure is ignored.
251 return result.value_or(0);
252}
253
254uint32_t AudioFlingerClientAdapter::latency(audio_io_handle_t output) const {
255 auto result = [&]() -> ConversionResult<uint32_t> {
256 int32_t outputAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output));
257 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800258 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->latency(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800259 return convertIntegral<uint32_t>(aidlRet);
260 }();
261 // Failure is ignored.
262 return result.value_or(0);
263}
264
265status_t AudioFlingerClientAdapter::setMasterVolume(float value) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800266 return statusTFromBinderStatus(mDelegate->setMasterVolume(value));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800267}
268
269status_t AudioFlingerClientAdapter::setMasterMute(bool muted) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800270 return statusTFromBinderStatus(mDelegate->setMasterMute(muted));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800271}
272
273float AudioFlingerClientAdapter::masterVolume() const {
274 auto result = [&]() -> ConversionResult<float> {
275 float aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800276 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterVolume(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800277 return aidlRet;
278 }();
279 // Failure is ignored.
280 return result.value_or(0.f);
281}
282
283bool AudioFlingerClientAdapter::masterMute() const {
284 auto result = [&]() -> ConversionResult<bool> {
285 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800286 RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterMute(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800287 return aidlRet;
288 }();
289 // Failure is ignored.
290 return result.value_or(false);
291}
292
293status_t AudioFlingerClientAdapter::setMasterBalance(float balance) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800294 return statusTFromBinderStatus(mDelegate->setMasterBalance(balance));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800295}
296
297status_t AudioFlingerClientAdapter::getMasterBalance(float* balance) const{
Andy Hung1131b6e2020-12-08 20:47:45 -0800298 return statusTFromBinderStatus(mDelegate->getMasterBalance(balance));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800299}
300
301status_t AudioFlingerClientAdapter::setStreamVolume(audio_stream_type_t stream, float value,
302 audio_io_handle_t output) {
303 media::AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
304 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
305 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800306 return statusTFromBinderStatus(mDelegate->setStreamVolume(streamAidl, value, outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800307}
308
309status_t AudioFlingerClientAdapter::setStreamMute(audio_stream_type_t stream, bool muted) {
310 media::AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
311 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
Andy Hung1131b6e2020-12-08 20:47:45 -0800312 return statusTFromBinderStatus(mDelegate->setStreamMute(streamAidl, muted));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800313}
314
315float AudioFlingerClientAdapter::streamVolume(audio_stream_type_t stream,
316 audio_io_handle_t output) const {
317 auto result = [&]() -> ConversionResult<float> {
318 media::AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
319 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
320 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
321 float aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800322 RETURN_IF_ERROR(statusTFromBinderStatus(
323 mDelegate->streamVolume(streamAidl, outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800324 return aidlRet;
325 }();
326 // Failure is ignored.
327 return result.value_or(0.f);
328}
329
330bool AudioFlingerClientAdapter::streamMute(audio_stream_type_t stream) const {
331 auto result = [&]() -> ConversionResult<bool> {
332 media::AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
333 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
334 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800335 RETURN_IF_ERROR(statusTFromBinderStatus(
336 mDelegate->streamMute(streamAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800337 return aidlRet;
338 }();
339 // Failure is ignored.
340 return result.value_or(false);
341}
342
343status_t AudioFlingerClientAdapter::setMode(audio_mode_t mode) {
344 media::AudioMode modeAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_mode_t_AudioMode(mode));
Andy Hung1131b6e2020-12-08 20:47:45 -0800345 return statusTFromBinderStatus(mDelegate->setMode(modeAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800346}
347
348status_t AudioFlingerClientAdapter::setMicMute(bool state) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800349 return statusTFromBinderStatus(mDelegate->setMicMute(state));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800350}
351
352bool AudioFlingerClientAdapter::getMicMute() const {
353 auto result = [&]() -> ConversionResult<bool> {
354 bool aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800355 RETURN_IF_ERROR(statusTFromBinderStatus(
356 mDelegate->getMicMute(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800357 return aidlRet;
358 }();
359 // Failure is ignored.
360 return result.value_or(false);
361}
362
363void AudioFlingerClientAdapter::setRecordSilenced(audio_port_handle_t portId, bool silenced) {
364 auto result = [&]() -> status_t {
365 int32_t portIdAidl = VALUE_OR_RETURN_STATUS(
366 legacy2aidl_audio_port_handle_t_int32_t(portId));
Andy Hung1131b6e2020-12-08 20:47:45 -0800367 return statusTFromBinderStatus(mDelegate->setRecordSilenced(portIdAidl, silenced));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800368 }();
369 // Failure is ignored.
370 (void) result;
371}
372
373status_t AudioFlingerClientAdapter::setParameters(audio_io_handle_t ioHandle,
374 const String8& keyValuePairs) {
375 int32_t ioHandleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
376 std::string keyValuePairsAidl = VALUE_OR_RETURN_STATUS(
377 legacy2aidl_String8_string(keyValuePairs));
Andy Hung1131b6e2020-12-08 20:47:45 -0800378 return statusTFromBinderStatus(mDelegate->setParameters(ioHandleAidl, keyValuePairsAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800379}
380
381String8 AudioFlingerClientAdapter::getParameters(audio_io_handle_t ioHandle, const String8& keys)
382const {
383 auto result = [&]() -> ConversionResult<String8> {
384 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
385 std::string keysAidl = VALUE_OR_RETURN(legacy2aidl_String8_string(keys));
386 std::string aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800387 RETURN_IF_ERROR(statusTFromBinderStatus(
388 mDelegate->getParameters(ioHandleAidl, keysAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800389 return aidl2legacy_string_view_String8(aidlRet);
390 }();
391 // Failure is ignored.
392 return result.value_or(String8());
393}
394
395void AudioFlingerClientAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
396 mDelegate->registerClient(client);
397 // Failure is ignored.
398}
399
400size_t AudioFlingerClientAdapter::getInputBufferSize(uint32_t sampleRate, audio_format_t format,
401 audio_channel_mask_t channelMask) const {
402 auto result = [&]() -> ConversionResult<size_t> {
403 int32_t sampleRateAidl = VALUE_OR_RETURN(convertIntegral<int32_t>(sampleRate));
404 media::audio::common::AudioFormat formatAidl = VALUE_OR_RETURN(
405 legacy2aidl_audio_format_t_AudioFormat(format));
406 int32_t channelMaskAidl = VALUE_OR_RETURN(
407 legacy2aidl_audio_channel_mask_t_int32_t(channelMask));
408 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800409 RETURN_IF_ERROR(statusTFromBinderStatus(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800410 mDelegate->getInputBufferSize(sampleRateAidl, formatAidl, channelMaskAidl,
Andy Hung1131b6e2020-12-08 20:47:45 -0800411 &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800412 return convertIntegral<size_t>(aidlRet);
413 }();
414 // Failure is ignored.
415 return result.value_or(0);
416}
417
418status_t AudioFlingerClientAdapter::openOutput(const media::OpenOutputRequest& request,
419 media::OpenOutputResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800420 return statusTFromBinderStatus(mDelegate->openOutput(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800421}
422
423audio_io_handle_t AudioFlingerClientAdapter::openDuplicateOutput(audio_io_handle_t output1,
424 audio_io_handle_t output2) {
425 auto result = [&]() -> ConversionResult<audio_io_handle_t> {
426 int32_t output1Aidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output1));
427 int32_t output2Aidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(output2));
428 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800429 RETURN_IF_ERROR(statusTFromBinderStatus(
430 mDelegate->openDuplicateOutput(output1Aidl, output2Aidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800431 return aidl2legacy_int32_t_audio_io_handle_t(aidlRet);
432 }();
433 // Failure is ignored.
434 return result.value_or(0);
435}
436
437status_t AudioFlingerClientAdapter::closeOutput(audio_io_handle_t output) {
438 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800439 return statusTFromBinderStatus(mDelegate->closeOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800440}
441
442status_t AudioFlingerClientAdapter::suspendOutput(audio_io_handle_t output) {
443 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800444 return statusTFromBinderStatus(mDelegate->suspendOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800445}
446
447status_t AudioFlingerClientAdapter::restoreOutput(audio_io_handle_t output) {
448 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
Andy Hung1131b6e2020-12-08 20:47:45 -0800449 return statusTFromBinderStatus(mDelegate->restoreOutput(outputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800450}
451
452status_t AudioFlingerClientAdapter::openInput(const media::OpenInputRequest& request,
453 media::OpenInputResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800454 return statusTFromBinderStatus(mDelegate->openInput(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800455}
456
457status_t AudioFlingerClientAdapter::closeInput(audio_io_handle_t input) {
458 int32_t inputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(input));
Andy Hung1131b6e2020-12-08 20:47:45 -0800459 return statusTFromBinderStatus(mDelegate->closeInput(inputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800460}
461
462status_t AudioFlingerClientAdapter::invalidateStream(audio_stream_type_t stream) {
463 media::AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
464 legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
Andy Hung1131b6e2020-12-08 20:47:45 -0800465 return statusTFromBinderStatus(mDelegate->invalidateStream(streamAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800466}
467
468status_t AudioFlingerClientAdapter::setVoiceVolume(float volume) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800469 return statusTFromBinderStatus(mDelegate->setVoiceVolume(volume));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800470}
471
472status_t AudioFlingerClientAdapter::getRenderPosition(uint32_t* halFrames, uint32_t* dspFrames,
473 audio_io_handle_t output) const {
474 int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
475 media::RenderPosition aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800476 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
477 mDelegate->getRenderPosition(outputAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800478 if (halFrames != nullptr) {
479 *halFrames = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet.halFrames));
480 }
481 if (dspFrames != nullptr) {
482 *dspFrames = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet.dspFrames));
483 }
484 return OK;
485}
486
487uint32_t AudioFlingerClientAdapter::getInputFramesLost(audio_io_handle_t ioHandle) const {
488 auto result = [&]() -> ConversionResult<uint32_t> {
489 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
490 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800491 RETURN_IF_ERROR(statusTFromBinderStatus(
492 mDelegate->getInputFramesLost(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800493 return convertIntegral<uint32_t>(aidlRet);
494 }();
495 // Failure is ignored.
496 return result.value_or(0);
497}
498
499audio_unique_id_t AudioFlingerClientAdapter::newAudioUniqueId(audio_unique_id_use_t use) {
500 auto result = [&]() -> ConversionResult<audio_unique_id_t> {
501 media::AudioUniqueIdUse useAidl = VALUE_OR_RETURN(
502 legacy2aidl_audio_unique_id_use_t_AudioUniqueIdUse(use));
503 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800504 RETURN_IF_ERROR(statusTFromBinderStatus(
505 mDelegate->newAudioUniqueId(useAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800506 return aidl2legacy_int32_t_audio_unique_id_t(aidlRet);
507 }();
508 return result.value_or(AUDIO_UNIQUE_ID_ALLOCATE);
509}
510
511void AudioFlingerClientAdapter::acquireAudioSessionId(audio_session_t audioSession, pid_t pid,
512 uid_t uid) {
513 [&]() -> status_t {
514 int32_t audioSessionAidl = VALUE_OR_RETURN_STATUS(
515 legacy2aidl_audio_session_t_int32_t(audioSession));
516 int32_t pidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(pid));
517 int32_t uidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(uid));
Andy Hung1131b6e2020-12-08 20:47:45 -0800518 return statusTFromBinderStatus(
519 mDelegate->acquireAudioSessionId(audioSessionAidl, pidAidl, uidAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800520 }();
521 // Failure is ignored.
522}
523
524void AudioFlingerClientAdapter::releaseAudioSessionId(audio_session_t audioSession, pid_t pid) {
525 [&]() -> status_t {
526 int32_t audioSessionAidl = VALUE_OR_RETURN_STATUS(
527 legacy2aidl_audio_session_t_int32_t(audioSession));
528 int32_t pidAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_pid_t_int32_t(pid));
Andy Hung1131b6e2020-12-08 20:47:45 -0800529 return statusTFromBinderStatus(
530 mDelegate->releaseAudioSessionId(audioSessionAidl, pidAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800531 }();
532 // Failure is ignored.
533}
534
535status_t AudioFlingerClientAdapter::queryNumberEffects(uint32_t* numEffects) const {
536 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800537 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
538 mDelegate->queryNumberEffects(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800539 if (numEffects != nullptr) {
540 *numEffects = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet));
541 }
542 return OK;
543}
544
545status_t
546AudioFlingerClientAdapter::queryEffect(uint32_t index, effect_descriptor_t* pDescriptor) const {
547 int32_t indexAidl = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(index));
548 media::EffectDescriptor aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800549 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
550 mDelegate->queryEffect(indexAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800551 if (pDescriptor != nullptr) {
552 *pDescriptor = VALUE_OR_RETURN_STATUS(
553 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
554 }
555 return OK;
556}
557
558status_t AudioFlingerClientAdapter::getEffectDescriptor(const effect_uuid_t* pEffectUUID,
559 const effect_uuid_t* pTypeUUID,
560 uint32_t preferredTypeFlag,
561 effect_descriptor_t* pDescriptor) const {
562 media::AudioUuid effectUuidAidl = VALUE_OR_RETURN_STATUS(
563 legacy2aidl_audio_uuid_t_AudioUuid(*pEffectUUID));
564 media::AudioUuid typeUuidAidl = VALUE_OR_RETURN_STATUS(
565 legacy2aidl_audio_uuid_t_AudioUuid(*pTypeUUID));
566 int32_t preferredTypeFlagAidl = VALUE_OR_RETURN_STATUS(
567 convertReinterpret<int32_t>(preferredTypeFlag));
568 media::EffectDescriptor aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800569 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800570 mDelegate->getEffectDescriptor(effectUuidAidl, typeUuidAidl, preferredTypeFlagAidl,
Andy Hung1131b6e2020-12-08 20:47:45 -0800571 &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::createEffect(const media::CreateEffectRequest& request,
580 media::CreateEffectResponse* response) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800581 return statusTFromBinderStatus(mDelegate->createEffect(request, response));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800582}
583
584status_t
585AudioFlingerClientAdapter::moveEffects(audio_session_t session, audio_io_handle_t srcOutput,
586 audio_io_handle_t dstOutput) {
587 int32_t sessionAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_session_t_int32_t(session));
588 int32_t srcOutputAidl = VALUE_OR_RETURN_STATUS(
589 legacy2aidl_audio_io_handle_t_int32_t(srcOutput));
590 int32_t dstOutputAidl = VALUE_OR_RETURN_STATUS(
591 legacy2aidl_audio_io_handle_t_int32_t(dstOutput));
Andy Hung1131b6e2020-12-08 20:47:45 -0800592 return statusTFromBinderStatus(
593 mDelegate->moveEffects(sessionAidl, srcOutputAidl, dstOutputAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800594}
595
596void AudioFlingerClientAdapter::setEffectSuspended(int effectId,
597 audio_session_t sessionId,
598 bool suspended) {
599 [&]() -> status_t {
600 int32_t effectIdAidl = VALUE_OR_RETURN_STATUS(convertReinterpret<int32_t>(effectId));
601 int32_t sessionIdAidl = VALUE_OR_RETURN_STATUS(
602 legacy2aidl_audio_session_t_int32_t(sessionId));
Andy Hung1131b6e2020-12-08 20:47:45 -0800603 return statusTFromBinderStatus(
604 mDelegate->setEffectSuspended(effectIdAidl, sessionIdAidl, suspended));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800605 }();
606 // Failure is ignored.
607}
608
609audio_module_handle_t AudioFlingerClientAdapter::loadHwModule(const char* name) {
610 auto result = [&]() -> ConversionResult<audio_module_handle_t> {
611 std::string nameAidl(name);
612 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800613 RETURN_IF_ERROR(statusTFromBinderStatus(
614 mDelegate->loadHwModule(nameAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800615 return aidl2legacy_int32_t_audio_module_handle_t(aidlRet);
616 }();
617 // Failure is ignored.
618 return result.value_or(0);
619}
620
621uint32_t AudioFlingerClientAdapter::getPrimaryOutputSamplingRate() {
622 auto result = [&]() -> ConversionResult<uint32_t> {
623 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800624 RETURN_IF_ERROR(statusTFromBinderStatus(
625 mDelegate->getPrimaryOutputSamplingRate(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800626 return convertIntegral<uint32_t>(aidlRet);
627 }();
628 // Failure is ignored.
629 return result.value_or(0);
630}
631
632size_t AudioFlingerClientAdapter::getPrimaryOutputFrameCount() {
633 auto result = [&]() -> ConversionResult<size_t> {
634 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800635 RETURN_IF_ERROR(statusTFromBinderStatus(
636 mDelegate->getPrimaryOutputFrameCount(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800637 return convertIntegral<size_t>(aidlRet);
638 }();
639 // Failure is ignored.
640 return result.value_or(0);
641}
642
643status_t AudioFlingerClientAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
Andy Hung1131b6e2020-12-08 20:47:45 -0800644 return statusTFromBinderStatus(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800645}
646
647status_t AudioFlingerClientAdapter::getAudioPort(struct audio_port_v7* port) {
648 media::AudioPort portAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_port_v7_AudioPort(*port));
649 media::AudioPort aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800650 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
651 mDelegate->getAudioPort(portAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800652 *port = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioPort_audio_port_v7(aidlRet));
653 return OK;
654}
655
656status_t AudioFlingerClientAdapter::createAudioPatch(const struct audio_patch* patch,
657 audio_patch_handle_t* handle) {
658 media::AudioPatch patchAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_AudioPatch(*patch));
659 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800660 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
661 mDelegate->createAudioPatch(patchAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800662 if (handle != nullptr) {
663 *handle = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_patch_handle_t(aidlRet));
664 }
665 return OK;
666}
667
668status_t AudioFlingerClientAdapter::releaseAudioPatch(audio_patch_handle_t handle) {
669 int32_t handleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(handle));
Andy Hung1131b6e2020-12-08 20:47:45 -0800670 return statusTFromBinderStatus(mDelegate->releaseAudioPatch(handleAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800671}
672
673status_t AudioFlingerClientAdapter::listAudioPatches(unsigned int* num_patches,
674 struct audio_patch* patches) {
675 std::vector<media::AudioPatch> aidlRet;
676 int32_t maxPatches = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(*num_patches));
Andy Hung1131b6e2020-12-08 20:47:45 -0800677 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
678 mDelegate->listAudioPatches(maxPatches, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800679 *num_patches = VALUE_OR_RETURN_STATUS(convertIntegral<unsigned int>(aidlRet.size()));
680 return convertRange(aidlRet.begin(), aidlRet.end(), patches,
681 aidl2legacy_AudioPatch_audio_patch);
682}
683
684status_t AudioFlingerClientAdapter::setAudioPortConfig(const struct audio_port_config* config) {
685 media::AudioPortConfig configAidl = VALUE_OR_RETURN_STATUS(
686 legacy2aidl_audio_port_config_AudioPortConfig(*config));
Andy Hung1131b6e2020-12-08 20:47:45 -0800687 return statusTFromBinderStatus(mDelegate->setAudioPortConfig(configAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800688}
689
690audio_hw_sync_t AudioFlingerClientAdapter::getAudioHwSyncForSession(audio_session_t sessionId) {
691 auto result = [&]() -> ConversionResult<audio_hw_sync_t> {
692 int32_t sessionIdAidl = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(sessionId));
693 int32_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800694 RETURN_IF_ERROR(statusTFromBinderStatus(
695 mDelegate->getAudioHwSyncForSession(sessionIdAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800696 return aidl2legacy_int32_t_audio_hw_sync_t(aidlRet);
697 }();
698 return result.value_or(AUDIO_HW_SYNC_INVALID);
699}
700
701status_t AudioFlingerClientAdapter::systemReady() {
Andy Hung1131b6e2020-12-08 20:47:45 -0800702 return statusTFromBinderStatus(mDelegate->systemReady());
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800703}
704
705size_t AudioFlingerClientAdapter::frameCountHAL(audio_io_handle_t ioHandle) const {
706 auto result = [&]() -> ConversionResult<size_t> {
707 int32_t ioHandleAidl = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(ioHandle));
708 int64_t aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800709 RETURN_IF_ERROR(statusTFromBinderStatus(
710 mDelegate->frameCountHAL(ioHandleAidl, &aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800711 return convertIntegral<size_t>(aidlRet);
712 }();
713 // Failure is ignored.
714 return result.value_or(0);
715}
716
717status_t
718AudioFlingerClientAdapter::getMicrophones(std::vector<media::MicrophoneInfo>* microphones) {
719 std::vector<media::MicrophoneInfoData> aidlRet;
Andy Hung1131b6e2020-12-08 20:47:45 -0800720 RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
721 mDelegate->getMicrophones(&aidlRet)));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800722 if (microphones != nullptr) {
723 *microphones = VALUE_OR_RETURN_STATUS(
724 convertContainer<std::vector<media::MicrophoneInfo>>(aidlRet,
725 media::aidl2legacy_MicrophoneInfo));
726 }
727 return OK;
728}
729
730status_t AudioFlingerClientAdapter::setAudioHalPids(const std::vector<pid_t>& pids) {
731 std::vector<int32_t> pidsAidl = VALUE_OR_RETURN_STATUS(
732 convertContainer<std::vector<int32_t>>(pids, legacy2aidl_pid_t_int32_t));
Andy Hung1131b6e2020-12-08 20:47:45 -0800733 return statusTFromBinderStatus(mDelegate->setAudioHalPids(pidsAidl));
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800734}
735
jiabin1319f5a2021-03-30 22:21:24 +0000736status_t AudioFlingerClientAdapter::setVibratorInfos(
737 const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
738 return statusTFromBinderStatus(mDelegate->setVibratorInfos(vibratorInfos));
739}
740
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800741
742////////////////////////////////////////////////////////////////////////////////////////////////////
743// AudioFlingerServerAdapter
744AudioFlingerServerAdapter::AudioFlingerServerAdapter(
745 const sp<AudioFlingerServerAdapter::Delegate>& delegate) : mDelegate(delegate) {}
746
747status_t AudioFlingerServerAdapter::onTransact(uint32_t code, const Parcel& data, Parcel* reply,
748 uint32_t flags) {
749 return mDelegate->onPreTransact(static_cast<Delegate::TransactionCode>(code), data, flags)
750 ?: BnAudioFlingerService::onTransact(code, data, reply, flags);
751}
752
753status_t AudioFlingerServerAdapter::dump(int fd, const Vector<String16>& args) {
754 return mDelegate->dump(fd, args);
755}
756
757Status AudioFlingerServerAdapter::createTrack(const media::CreateTrackRequest& request,
758 media::CreateTrackResponse* _aidl_return) {
759 return Status::fromStatusT(mDelegate->createTrack(request, *_aidl_return));
760}
761
762Status AudioFlingerServerAdapter::createRecord(const media::CreateRecordRequest& request,
763 media::CreateRecordResponse* _aidl_return) {
764 return Status::fromStatusT(mDelegate->createRecord(request, *_aidl_return));
765}
766
767Status AudioFlingerServerAdapter::sampleRate(int32_t ioHandle, int32_t* _aidl_return) {
768 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
769 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
770 *_aidl_return = VALUE_OR_RETURN_BINDER(
771 convertIntegral<int32_t>(mDelegate->sampleRate(ioHandleLegacy)));
772 return Status::ok();
773}
774
775Status AudioFlingerServerAdapter::format(int32_t output,
776 media::audio::common::AudioFormat* _aidl_return) {
777 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
778 aidl2legacy_int32_t_audio_io_handle_t(output));
779 *_aidl_return = VALUE_OR_RETURN_BINDER(
780 legacy2aidl_audio_format_t_AudioFormat(mDelegate->format(outputLegacy)));
781 return Status::ok();
782}
783
784Status AudioFlingerServerAdapter::frameCount(int32_t ioHandle, int64_t* _aidl_return) {
785 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
786 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
787 *_aidl_return = VALUE_OR_RETURN_BINDER(
788 convertIntegral<int64_t>(mDelegate->frameCount(ioHandleLegacy)));
789 return Status::ok();
790}
791
792Status AudioFlingerServerAdapter::latency(int32_t output, int32_t* _aidl_return) {
793 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
794 aidl2legacy_int32_t_audio_io_handle_t(output));
795 *_aidl_return = VALUE_OR_RETURN_BINDER(
796 convertIntegral<int32_t>(mDelegate->latency(outputLegacy)));
797 return Status::ok();
798}
799
800Status AudioFlingerServerAdapter::setMasterVolume(float value) {
801 return Status::fromStatusT(mDelegate->setMasterVolume(value));
802}
803
804Status AudioFlingerServerAdapter::setMasterMute(bool muted) {
805 return Status::fromStatusT(mDelegate->setMasterMute(muted));
806}
807
808Status AudioFlingerServerAdapter::masterVolume(float* _aidl_return) {
809 *_aidl_return = mDelegate->masterVolume();
810 return Status::ok();
811}
812
813Status AudioFlingerServerAdapter::masterMute(bool* _aidl_return) {
814 *_aidl_return = mDelegate->masterMute();
815 return Status::ok();
816}
817
818Status AudioFlingerServerAdapter::setMasterBalance(float balance) {
819 return Status::fromStatusT(mDelegate->setMasterBalance(balance));
820}
821
822Status AudioFlingerServerAdapter::getMasterBalance(float* _aidl_return) {
823 return Status::fromStatusT(mDelegate->getMasterBalance(_aidl_return));
824}
825
826Status AudioFlingerServerAdapter::setStreamVolume(media::AudioStreamType stream, float value,
827 int32_t output) {
828 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
829 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
830 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
831 aidl2legacy_int32_t_audio_io_handle_t(output));
832 return Status::fromStatusT(mDelegate->setStreamVolume(streamLegacy, value, outputLegacy));
833}
834
835Status AudioFlingerServerAdapter::setStreamMute(media::AudioStreamType stream, bool muted) {
836 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
837 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
838 return Status::fromStatusT(mDelegate->setStreamMute(streamLegacy, muted));
839}
840
841Status AudioFlingerServerAdapter::streamVolume(media::AudioStreamType stream, int32_t output,
842 float* _aidl_return) {
843 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
844 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
845 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
846 aidl2legacy_int32_t_audio_io_handle_t(output));
847 *_aidl_return = mDelegate->streamVolume(streamLegacy, outputLegacy);
848 return Status::ok();
849}
850
851Status AudioFlingerServerAdapter::streamMute(media::AudioStreamType stream, bool* _aidl_return) {
852 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
853 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
854 *_aidl_return = mDelegate->streamMute(streamLegacy);
855 return Status::ok();
856}
857
858Status AudioFlingerServerAdapter::setMode(media::AudioMode mode) {
859 audio_mode_t modeLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioMode_audio_mode_t(mode));
860 return Status::fromStatusT(mDelegate->setMode(modeLegacy));
861}
862
863Status AudioFlingerServerAdapter::setMicMute(bool state) {
864 return Status::fromStatusT(mDelegate->setMicMute(state));
865}
866
867Status AudioFlingerServerAdapter::getMicMute(bool* _aidl_return) {
868 *_aidl_return = mDelegate->getMicMute();
869 return Status::ok();
870}
871
872Status AudioFlingerServerAdapter::setRecordSilenced(int32_t portId, bool silenced) {
873 audio_port_handle_t portIdLegacy = VALUE_OR_RETURN_BINDER(
874 aidl2legacy_int32_t_audio_port_handle_t(portId));
875 mDelegate->setRecordSilenced(portIdLegacy, silenced);
876 return Status::ok();
877}
878
879Status
880AudioFlingerServerAdapter::setParameters(int32_t ioHandle, const std::string& keyValuePairs) {
881 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
882 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
883 String8 keyValuePairsLegacy = VALUE_OR_RETURN_BINDER(
884 aidl2legacy_string_view_String8(keyValuePairs));
885 return Status::fromStatusT(mDelegate->setParameters(ioHandleLegacy, keyValuePairsLegacy));
886}
887
888Status AudioFlingerServerAdapter::getParameters(int32_t ioHandle, const std::string& keys,
889 std::string* _aidl_return) {
890 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
891 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
892 String8 keysLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_string_view_String8(keys));
893 *_aidl_return = VALUE_OR_RETURN_BINDER(
894 legacy2aidl_String8_string(mDelegate->getParameters(ioHandleLegacy, keysLegacy)));
895 return Status::ok();
896}
897
898Status AudioFlingerServerAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
899 mDelegate->registerClient(client);
900 return Status::ok();
901}
902
903Status AudioFlingerServerAdapter::getInputBufferSize(int32_t sampleRate,
904 media::audio::common::AudioFormat format,
905 int32_t channelMask, int64_t* _aidl_return) {
906 uint32_t sampleRateLegacy = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(sampleRate));
907 audio_format_t formatLegacy = VALUE_OR_RETURN_BINDER(
908 aidl2legacy_AudioFormat_audio_format_t(format));
909 audio_channel_mask_t channelMaskLegacy = VALUE_OR_RETURN_BINDER(
910 aidl2legacy_int32_t_audio_channel_mask_t(channelMask));
911 size_t size = mDelegate->getInputBufferSize(sampleRateLegacy, formatLegacy, channelMaskLegacy);
912 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int64_t>(size));
913 return Status::ok();
914}
915
916Status AudioFlingerServerAdapter::openOutput(const media::OpenOutputRequest& request,
917 media::OpenOutputResponse* _aidl_return) {
918 return Status::fromStatusT(mDelegate->openOutput(request, _aidl_return));
919}
920
921Status AudioFlingerServerAdapter::openDuplicateOutput(int32_t output1, int32_t output2,
922 int32_t* _aidl_return) {
923 audio_io_handle_t output1Legacy = VALUE_OR_RETURN_BINDER(
924 aidl2legacy_int32_t_audio_io_handle_t(output1));
925 audio_io_handle_t output2Legacy = VALUE_OR_RETURN_BINDER(
926 aidl2legacy_int32_t_audio_io_handle_t(output2));
927 audio_io_handle_t result = mDelegate->openDuplicateOutput(output1Legacy, output2Legacy);
928 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_io_handle_t_int32_t(result));
929 return Status::ok();
930}
931
932Status AudioFlingerServerAdapter::closeOutput(int32_t output) {
933 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
934 aidl2legacy_int32_t_audio_io_handle_t(output));
935 return Status::fromStatusT(mDelegate->closeOutput(outputLegacy));
936}
937
938Status AudioFlingerServerAdapter::suspendOutput(int32_t output) {
939 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
940 aidl2legacy_int32_t_audio_io_handle_t(output));
941 return Status::fromStatusT(mDelegate->suspendOutput(outputLegacy));
942}
943
944Status AudioFlingerServerAdapter::restoreOutput(int32_t output) {
945 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
946 aidl2legacy_int32_t_audio_io_handle_t(output));
947 return Status::fromStatusT(mDelegate->restoreOutput(outputLegacy));
948}
949
950Status AudioFlingerServerAdapter::openInput(const media::OpenInputRequest& request,
951 media::OpenInputResponse* _aidl_return) {
952 return Status::fromStatusT(mDelegate->openInput(request, _aidl_return));
953}
954
955Status AudioFlingerServerAdapter::closeInput(int32_t input) {
956 audio_io_handle_t inputLegacy = VALUE_OR_RETURN_BINDER(
957 aidl2legacy_int32_t_audio_io_handle_t(input));
958 return Status::fromStatusT(mDelegate->closeInput(inputLegacy));
959}
960
961Status AudioFlingerServerAdapter::invalidateStream(media::AudioStreamType stream) {
962 audio_stream_type_t streamLegacy = VALUE_OR_RETURN_BINDER(
963 aidl2legacy_AudioStreamType_audio_stream_type_t(stream));
964 return Status::fromStatusT(mDelegate->invalidateStream(streamLegacy));
965}
966
967Status AudioFlingerServerAdapter::setVoiceVolume(float volume) {
968 return Status::fromStatusT(mDelegate->setVoiceVolume(volume));
969}
970
971Status
972AudioFlingerServerAdapter::getRenderPosition(int32_t output, media::RenderPosition* _aidl_return) {
973 audio_io_handle_t outputLegacy = VALUE_OR_RETURN_BINDER(
974 aidl2legacy_int32_t_audio_io_handle_t(output));
975 uint32_t halFramesLegacy;
976 uint32_t dspFramesLegacy;
977 RETURN_BINDER_IF_ERROR(
978 mDelegate->getRenderPosition(&halFramesLegacy, &dspFramesLegacy, outputLegacy));
979 _aidl_return->halFrames = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(halFramesLegacy));
980 _aidl_return->dspFrames = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(dspFramesLegacy));
981 return Status::ok();
982}
983
984Status AudioFlingerServerAdapter::getInputFramesLost(int32_t ioHandle, int32_t* _aidl_return) {
985 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
986 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
987 uint32_t result = mDelegate->getInputFramesLost(ioHandleLegacy);
988 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int32_t>(result));
989 return Status::ok();
990}
991
992Status
993AudioFlingerServerAdapter::newAudioUniqueId(media::AudioUniqueIdUse use, int32_t* _aidl_return) {
994 audio_unique_id_use_t useLegacy = VALUE_OR_RETURN_BINDER(
995 aidl2legacy_AudioUniqueIdUse_audio_unique_id_use_t(use));
996 audio_unique_id_t result = mDelegate->newAudioUniqueId(useLegacy);
997 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_unique_id_t_int32_t(result));
998 return Status::ok();
999}
1000
1001Status
1002AudioFlingerServerAdapter::acquireAudioSessionId(int32_t audioSession, int32_t pid, int32_t uid) {
1003 audio_session_t audioSessionLegacy = VALUE_OR_RETURN_BINDER(
1004 aidl2legacy_int32_t_audio_session_t(audioSession));
1005 pid_t pidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_pid_t(pid));
1006 uid_t uidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_uid_t(uid));
1007 mDelegate->acquireAudioSessionId(audioSessionLegacy, pidLegacy, uidLegacy);
1008 return Status::ok();
1009}
1010
1011Status AudioFlingerServerAdapter::releaseAudioSessionId(int32_t audioSession, int32_t pid) {
1012 audio_session_t audioSessionLegacy = VALUE_OR_RETURN_BINDER(
1013 aidl2legacy_int32_t_audio_session_t(audioSession));
1014 pid_t pidLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_int32_t_pid_t(pid));
1015 mDelegate->releaseAudioSessionId(audioSessionLegacy, pidLegacy);
1016 return Status::ok();
1017}
1018
1019Status AudioFlingerServerAdapter::queryNumberEffects(int32_t* _aidl_return) {
1020 uint32_t result;
1021 RETURN_BINDER_IF_ERROR(mDelegate->queryNumberEffects(&result));
1022 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(result));
1023 return Status::ok();
1024}
1025
1026Status
1027AudioFlingerServerAdapter::queryEffect(int32_t index, media::EffectDescriptor* _aidl_return) {
1028 uint32_t indexLegacy = VALUE_OR_RETURN_BINDER(convertIntegral<uint32_t>(index));
1029 effect_descriptor_t result;
1030 RETURN_BINDER_IF_ERROR(mDelegate->queryEffect(indexLegacy, &result));
1031 *_aidl_return = VALUE_OR_RETURN_BINDER(
1032 legacy2aidl_effect_descriptor_t_EffectDescriptor(result));
1033 return Status::ok();
1034}
1035
1036Status AudioFlingerServerAdapter::getEffectDescriptor(const media::AudioUuid& effectUUID,
1037 const media::AudioUuid& typeUUID,
1038 int32_t preferredTypeFlag,
1039 media::EffectDescriptor* _aidl_return) {
1040 effect_uuid_t effectUuidLegacy = VALUE_OR_RETURN_BINDER(
1041 aidl2legacy_AudioUuid_audio_uuid_t(effectUUID));
1042 effect_uuid_t typeUuidLegacy = VALUE_OR_RETURN_BINDER(
1043 aidl2legacy_AudioUuid_audio_uuid_t(typeUUID));
1044 uint32_t preferredTypeFlagLegacy = VALUE_OR_RETURN_BINDER(
1045 convertReinterpret<uint32_t>(preferredTypeFlag));
1046 effect_descriptor_t result;
1047 RETURN_BINDER_IF_ERROR(mDelegate->getEffectDescriptor(&effectUuidLegacy, &typeUuidLegacy,
1048 preferredTypeFlagLegacy, &result));
1049 *_aidl_return = VALUE_OR_RETURN_BINDER(
1050 legacy2aidl_effect_descriptor_t_EffectDescriptor(result));
1051 return Status::ok();
1052}
1053
1054Status AudioFlingerServerAdapter::createEffect(const media::CreateEffectRequest& request,
1055 media::CreateEffectResponse* _aidl_return) {
1056 return Status::fromStatusT(mDelegate->createEffect(request, _aidl_return));
1057}
1058
1059Status
1060AudioFlingerServerAdapter::moveEffects(int32_t session, int32_t srcOutput, int32_t dstOutput) {
1061 audio_session_t sessionLegacy = VALUE_OR_RETURN_BINDER(
1062 aidl2legacy_int32_t_audio_session_t(session));
1063 audio_io_handle_t srcOutputLegacy = VALUE_OR_RETURN_BINDER(
1064 aidl2legacy_int32_t_audio_io_handle_t(srcOutput));
1065 audio_io_handle_t dstOutputLegacy = VALUE_OR_RETURN_BINDER(
1066 aidl2legacy_int32_t_audio_io_handle_t(dstOutput));
1067 return Status::fromStatusT(
1068 mDelegate->moveEffects(sessionLegacy, srcOutputLegacy, dstOutputLegacy));
1069}
1070
1071Status AudioFlingerServerAdapter::setEffectSuspended(int32_t effectId, int32_t sessionId,
1072 bool suspended) {
1073 int effectIdLegacy = VALUE_OR_RETURN_BINDER(convertReinterpret<int>(effectId));
1074 audio_session_t sessionIdLegacy = VALUE_OR_RETURN_BINDER(
1075 aidl2legacy_int32_t_audio_session_t(sessionId));
1076 mDelegate->setEffectSuspended(effectIdLegacy, sessionIdLegacy, suspended);
1077 return Status::ok();
1078}
1079
1080Status AudioFlingerServerAdapter::loadHwModule(const std::string& name, int32_t* _aidl_return) {
1081 audio_module_handle_t result = mDelegate->loadHwModule(name.c_str());
1082 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_module_handle_t_int32_t(result));
1083 return Status::ok();
1084}
1085
1086Status AudioFlingerServerAdapter::getPrimaryOutputSamplingRate(int32_t* _aidl_return) {
1087 *_aidl_return = VALUE_OR_RETURN_BINDER(
1088 convertIntegral<int32_t>(mDelegate->getPrimaryOutputSamplingRate()));
1089 return Status::ok();
1090}
1091
1092Status AudioFlingerServerAdapter::getPrimaryOutputFrameCount(int64_t* _aidl_return) {
1093 *_aidl_return = VALUE_OR_RETURN_BINDER(
1094 convertIntegral<int64_t>(mDelegate->getPrimaryOutputFrameCount()));
1095 return Status::ok();
1096
1097}
1098
1099Status AudioFlingerServerAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
1100 return Status::fromStatusT(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
1101}
1102
1103Status AudioFlingerServerAdapter::getAudioPort(const media::AudioPort& port,
1104 media::AudioPort* _aidl_return) {
1105 audio_port_v7 portLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPort_audio_port_v7(port));
1106 RETURN_BINDER_IF_ERROR(mDelegate->getAudioPort(&portLegacy));
1107 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_port_v7_AudioPort(portLegacy));
1108 return Status::ok();
1109}
1110
1111Status AudioFlingerServerAdapter::createAudioPatch(const media::AudioPatch& patch,
1112 int32_t* _aidl_return) {
1113 audio_patch patchLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPatch_audio_patch(patch));
1114 audio_patch_handle_t handleLegacy;
1115 RETURN_BINDER_IF_ERROR(mDelegate->createAudioPatch(&patchLegacy, &handleLegacy));
1116 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_patch_handle_t_int32_t(handleLegacy));
1117 return Status::ok();
1118}
1119
1120Status AudioFlingerServerAdapter::releaseAudioPatch(int32_t handle) {
1121 audio_patch_handle_t handleLegacy = VALUE_OR_RETURN_BINDER(
1122 aidl2legacy_int32_t_audio_patch_handle_t(handle));
1123 return Status::fromStatusT(mDelegate->releaseAudioPatch(handleLegacy));
1124}
1125
1126Status AudioFlingerServerAdapter::listAudioPatches(int32_t maxCount,
1127 std::vector<media::AudioPatch>* _aidl_return) {
1128 unsigned int count = VALUE_OR_RETURN_BINDER(convertIntegral<unsigned int>(maxCount));
1129 count = std::min(count, static_cast<unsigned int>(MAX_ITEMS_PER_LIST));
1130 std::unique_ptr<audio_patch[]> patchesLegacy(new audio_patch[count]);
1131 RETURN_BINDER_IF_ERROR(mDelegate->listAudioPatches(&count, patchesLegacy.get()));
1132 RETURN_BINDER_IF_ERROR(convertRange(&patchesLegacy[0],
1133 &patchesLegacy[count],
1134 std::back_inserter(*_aidl_return),
1135 legacy2aidl_audio_patch_AudioPatch));
1136 return Status::ok();
1137}
1138
1139Status AudioFlingerServerAdapter::setAudioPortConfig(const media::AudioPortConfig& config) {
1140 audio_port_config configLegacy = VALUE_OR_RETURN_BINDER(
1141 aidl2legacy_AudioPortConfig_audio_port_config(config));
1142 return Status::fromStatusT(mDelegate->setAudioPortConfig(&configLegacy));
1143}
1144
1145Status AudioFlingerServerAdapter::getAudioHwSyncForSession(int32_t sessionId,
1146 int32_t* _aidl_return) {
1147 audio_session_t sessionIdLegacy = VALUE_OR_RETURN_BINDER(
1148 aidl2legacy_int32_t_audio_session_t(sessionId));
1149 audio_hw_sync_t result = mDelegate->getAudioHwSyncForSession(sessionIdLegacy);
1150 *_aidl_return = VALUE_OR_RETURN_BINDER(legacy2aidl_audio_hw_sync_t_int32_t(result));
1151 return Status::ok();
1152}
1153
1154Status AudioFlingerServerAdapter::systemReady() {
1155 return Status::fromStatusT(mDelegate->systemReady());
1156}
1157
1158Status AudioFlingerServerAdapter::frameCountHAL(int32_t ioHandle, int64_t* _aidl_return) {
1159 audio_io_handle_t ioHandleLegacy = VALUE_OR_RETURN_BINDER(
1160 aidl2legacy_int32_t_audio_io_handle_t(ioHandle));
1161 size_t result = mDelegate->frameCountHAL(ioHandleLegacy);
1162 *_aidl_return = VALUE_OR_RETURN_BINDER(convertIntegral<int64_t>(result));
1163 return Status::ok();
1164}
1165
1166Status AudioFlingerServerAdapter::getMicrophones(
1167 std::vector<media::MicrophoneInfoData>* _aidl_return) {
1168 std::vector<media::MicrophoneInfo> resultLegacy;
1169 RETURN_BINDER_IF_ERROR(mDelegate->getMicrophones(&resultLegacy));
1170 *_aidl_return = VALUE_OR_RETURN_BINDER(convertContainer<std::vector<media::MicrophoneInfoData>>(
1171 resultLegacy, media::legacy2aidl_MicrophoneInfo));
1172 return Status::ok();
1173}
1174
1175Status AudioFlingerServerAdapter::setAudioHalPids(const std::vector<int32_t>& pids) {
1176 std::vector<pid_t> pidsLegacy = VALUE_OR_RETURN_BINDER(
1177 convertContainer<std::vector<pid_t>>(pids, aidl2legacy_int32_t_pid_t));
1178 RETURN_BINDER_IF_ERROR(mDelegate->setAudioHalPids(pidsLegacy));
1179 return Status::ok();
1180}
The Android Open Source Project89fa4ad2009-03-03 19:31:44 -08001181
jiabin1319f5a2021-03-30 22:21:24 +00001182Status AudioFlingerServerAdapter::setVibratorInfos(
1183 const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
1184 return Status::fromStatusT(mDelegate->setVibratorInfos(vibratorInfos));
1185}
1186
Glenn Kasten40bc9062015-03-20 09:09:33 -07001187} // namespace android