1 /*
2 **
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"
19 //#define LOG_NDEBUG 0
20 #include <utils/Log.h>
21 
22 #include <stdint.h>
23 #include <sys/types.h>
24 
25 #include <binder/IPCThreadState.h>
26 #include <binder/Parcel.h>
27 #include "IAudioFlinger.h"
28 
29 namespace android {
30 
31 using aidl_utils::statusTFromBinderStatus;
32 using binder::Status;
33 
34 #define MAX_ITEMS_PER_LIST 1024
35 
36 #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 
toAidl() const55 ConversionResult<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));
59     aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
60     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;
64     aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(flags));
65     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 
73 ConversionResult<IAudioFlinger::CreateTrackInput>
fromAidl(const media::CreateTrackRequest & aidl)74 IAudioFlinger::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));
78     legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
79     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;
84     legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.flags));
85     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 
94 ConversionResult<media::CreateTrackResponse>
toAidl() const95 IAudioFlinger::CreateTrackOutput::toAidl() const {
96     media::CreateTrackResponse aidl;
97     aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(flags));
98     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.streamType =  VALUE_OR_RETURN(
105             legacy2aidl_audio_stream_type_t_AudioStreamType(streamType));
106     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));
111     aidl.audioTrack = audioTrack;
112     return aidl;
113 }
114 
115 ConversionResult<IAudioFlinger::CreateTrackOutput>
fromAidl(const media::CreateTrackResponse & aidl)116 IAudioFlinger::CreateTrackOutput::fromAidl(
117         const media::CreateTrackResponse& aidl) {
118     IAudioFlinger::CreateTrackOutput legacy;
119     legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_output_flags_t_mask(aidl.flags));
120     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));
127     legacy.streamType = VALUE_OR_RETURN(
128             aidl2legacy_AudioStreamType_audio_stream_type_t(aidl.streamType));
129     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));
134     legacy.audioTrack = aidl.audioTrack;
135     return legacy;
136 }
137 
138 ConversionResult<media::CreateRecordRequest>
toAidl() const139 IAudioFlinger::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));
143     aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo));
144     aidl.riid = VALUE_OR_RETURN(legacy2aidl_audio_unique_id_t_int32_t(riid));
145     aidl.maxSharedAudioHistoryMs = VALUE_OR_RETURN(
146             convertIntegral<int32_t>(maxSharedAudioHistoryMs));
147     aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
148     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 
156 ConversionResult<IAudioFlinger::CreateRecordInput>
fromAidl(const media::CreateRecordRequest & aidl)157 IAudioFlinger::CreateRecordInput::fromAidl(
158         const media::CreateRecordRequest& aidl) {
159     IAudioFlinger::CreateRecordInput legacy;
160     legacy.attr = VALUE_OR_RETURN(
161             aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr));
162     legacy.config = VALUE_OR_RETURN(aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config));
163     legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo));
164     legacy.riid = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_unique_id_t(aidl.riid));
165     legacy.maxSharedAudioHistoryMs = VALUE_OR_RETURN(
166             convertIntegral<int32_t>(aidl.maxSharedAudioHistoryMs));
167     legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
168     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 
177 ConversionResult<media::CreateRecordResponse>
toAidl() const178 IAudioFlinger::CreateRecordOutput::toAidl() const {
179     media::CreateRecordResponse aidl;
180     aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags));
181     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));
191     aidl.audioRecord = audioRecord;
192     return aidl;
193 }
194 
195 ConversionResult<IAudioFlinger::CreateRecordOutput>
fromAidl(const media::CreateRecordResponse & aidl)196 IAudioFlinger::CreateRecordOutput::fromAidl(
197         const media::CreateRecordResponse& aidl) {
198     IAudioFlinger::CreateRecordOutput legacy;
199     legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags));
200     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));
211     legacy.audioRecord = aidl.audioRecord;
212     return legacy;
213 }
214 
215 ////////////////////////////////////////////////////////////////////////////////////////////////////
216 // AudioFlingerClientAdapter
217 
AudioFlingerClientAdapter(const sp<media::IAudioFlingerService> delegate)218 AudioFlingerClientAdapter::AudioFlingerClientAdapter(
219         const sp<media::IAudioFlingerService> delegate) : mDelegate(delegate) {}
220 
createTrack(const media::CreateTrackRequest & input,media::CreateTrackResponse & output)221 status_t AudioFlingerClientAdapter::createTrack(const media::CreateTrackRequest& input,
222                                                 media::CreateTrackResponse& output) {
223     return statusTFromBinderStatus(mDelegate->createTrack(input, &output));
224 }
225 
createRecord(const media::CreateRecordRequest & input,media::CreateRecordResponse & output)226 status_t AudioFlingerClientAdapter::createRecord(const media::CreateRecordRequest& input,
227                                                  media::CreateRecordResponse& output) {
228     return statusTFromBinderStatus(mDelegate->createRecord(input, &output));
229 }
230 
sampleRate(audio_io_handle_t ioHandle) const231 uint32_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;
235         RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->sampleRate(ioHandleAidl, &aidlRet)));
236         return convertIntegral<uint32_t>(aidlRet);
237     }();
238     // Failure is ignored.
239     return result.value_or(0);
240 }
241 
format(audio_io_handle_t output) const242 audio_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;
246         RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->format(outputAidl, &aidlRet)));
247         return aidl2legacy_AudioFormat_audio_format_t(aidlRet);
248     }();
249     return result.value_or(AUDIO_FORMAT_INVALID);
250 }
251 
frameCount(audio_io_handle_t ioHandle) const252 size_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;
256         RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->frameCount(ioHandleAidl, &aidlRet)));
257         return convertIntegral<size_t>(aidlRet);
258     }();
259     // Failure is ignored.
260     return result.value_or(0);
261 }
262 
latency(audio_io_handle_t output) const263 uint32_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;
267         RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->latency(outputAidl, &aidlRet)));
268         return convertIntegral<uint32_t>(aidlRet);
269     }();
270     // Failure is ignored.
271     return result.value_or(0);
272 }
273 
setMasterVolume(float value)274 status_t AudioFlingerClientAdapter::setMasterVolume(float value) {
275     return statusTFromBinderStatus(mDelegate->setMasterVolume(value));
276 }
277 
setMasterMute(bool muted)278 status_t AudioFlingerClientAdapter::setMasterMute(bool muted) {
279     return statusTFromBinderStatus(mDelegate->setMasterMute(muted));
280 }
281 
masterVolume() const282 float AudioFlingerClientAdapter::masterVolume() const {
283     auto result = [&]() -> ConversionResult<float> {
284         float aidlRet;
285         RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterVolume(&aidlRet)));
286         return aidlRet;
287     }();
288     // Failure is ignored.
289     return result.value_or(0.f);
290 }
291 
masterMute() const292 bool AudioFlingerClientAdapter::masterMute() const {
293     auto result = [&]() -> ConversionResult<bool> {
294         bool aidlRet;
295         RETURN_IF_ERROR(statusTFromBinderStatus(mDelegate->masterMute(&aidlRet)));
296         return aidlRet;
297     }();
298     // Failure is ignored.
299     return result.value_or(false);
300 }
301 
setMasterBalance(float balance)302 status_t AudioFlingerClientAdapter::setMasterBalance(float balance) {
303     return statusTFromBinderStatus(mDelegate->setMasterBalance(balance));
304 }
305 
getMasterBalance(float * balance) const306 status_t AudioFlingerClientAdapter::getMasterBalance(float* balance) const{
307     return statusTFromBinderStatus(mDelegate->getMasterBalance(balance));
308 }
309 
setStreamVolume(audio_stream_type_t stream,float value,audio_io_handle_t output)310 status_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));
315     return statusTFromBinderStatus(mDelegate->setStreamVolume(streamAidl, value, outputAidl));
316 }
317 
setStreamMute(audio_stream_type_t stream,bool muted)318 status_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));
321     return statusTFromBinderStatus(mDelegate->setStreamMute(streamAidl, muted));
322 }
323 
streamVolume(audio_stream_type_t stream,audio_io_handle_t output) const324 float 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;
331         RETURN_IF_ERROR(statusTFromBinderStatus(
332                 mDelegate->streamVolume(streamAidl, outputAidl, &aidlRet)));
333         return aidlRet;
334     }();
335     // Failure is ignored.
336     return result.value_or(0.f);
337 }
338 
streamMute(audio_stream_type_t stream) const339 bool 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;
344         RETURN_IF_ERROR(statusTFromBinderStatus(
345                 mDelegate->streamMute(streamAidl, &aidlRet)));
346         return aidlRet;
347     }();
348     // Failure is ignored.
349     return result.value_or(false);
350 }
351 
setMode(audio_mode_t mode)352 status_t AudioFlingerClientAdapter::setMode(audio_mode_t mode) {
353     media::AudioMode modeAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_mode_t_AudioMode(mode));
354     return statusTFromBinderStatus(mDelegate->setMode(modeAidl));
355 }
356 
setMicMute(bool state)357 status_t AudioFlingerClientAdapter::setMicMute(bool state) {
358     return statusTFromBinderStatus(mDelegate->setMicMute(state));
359 }
360 
getMicMute() const361 bool AudioFlingerClientAdapter::getMicMute() const {
362     auto result = [&]() -> ConversionResult<bool> {
363         bool aidlRet;
364         RETURN_IF_ERROR(statusTFromBinderStatus(
365                 mDelegate->getMicMute(&aidlRet)));
366         return aidlRet;
367     }();
368     // Failure is ignored.
369     return result.value_or(false);
370 }
371 
setRecordSilenced(audio_port_handle_t portId,bool silenced)372 void 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));
376         return statusTFromBinderStatus(mDelegate->setRecordSilenced(portIdAidl, silenced));
377     }();
378     // Failure is ignored.
379     (void) result;
380 }
381 
setParameters(audio_io_handle_t ioHandle,const String8 & keyValuePairs)382 status_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));
387     return statusTFromBinderStatus(mDelegate->setParameters(ioHandleAidl, keyValuePairsAidl));
388 }
389 
getParameters(audio_io_handle_t ioHandle,const String8 & keys) const390 String8 AudioFlingerClientAdapter::getParameters(audio_io_handle_t ioHandle, const String8& keys)
391 const {
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;
396         RETURN_IF_ERROR(statusTFromBinderStatus(
397                 mDelegate->getParameters(ioHandleAidl, keysAidl, &aidlRet)));
398         return aidl2legacy_string_view_String8(aidlRet);
399     }();
400     // Failure is ignored.
401     return result.value_or(String8());
402 }
403 
registerClient(const sp<media::IAudioFlingerClient> & client)404 void AudioFlingerClientAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
405     mDelegate->registerClient(client);
406     // Failure is ignored.
407 }
408 
getInputBufferSize(uint32_t sampleRate,audio_format_t format,audio_channel_mask_t channelMask) const409 size_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;
418         RETURN_IF_ERROR(statusTFromBinderStatus(
419                 mDelegate->getInputBufferSize(sampleRateAidl, formatAidl, channelMaskAidl,
420                                               &aidlRet)));
421         return convertIntegral<size_t>(aidlRet);
422     }();
423     // Failure is ignored.
424     return result.value_or(0);
425 }
426 
openOutput(const media::OpenOutputRequest & request,media::OpenOutputResponse * response)427 status_t AudioFlingerClientAdapter::openOutput(const media::OpenOutputRequest& request,
428                                                media::OpenOutputResponse* response) {
429     return statusTFromBinderStatus(mDelegate->openOutput(request, response));
430 }
431 
openDuplicateOutput(audio_io_handle_t output1,audio_io_handle_t output2)432 audio_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;
438         RETURN_IF_ERROR(statusTFromBinderStatus(
439                 mDelegate->openDuplicateOutput(output1Aidl, output2Aidl, &aidlRet)));
440         return aidl2legacy_int32_t_audio_io_handle_t(aidlRet);
441     }();
442     // Failure is ignored.
443     return result.value_or(0);
444 }
445 
closeOutput(audio_io_handle_t output)446 status_t AudioFlingerClientAdapter::closeOutput(audio_io_handle_t output) {
447     int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
448     return statusTFromBinderStatus(mDelegate->closeOutput(outputAidl));
449 }
450 
suspendOutput(audio_io_handle_t output)451 status_t AudioFlingerClientAdapter::suspendOutput(audio_io_handle_t output) {
452     int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
453     return statusTFromBinderStatus(mDelegate->suspendOutput(outputAidl));
454 }
455 
restoreOutput(audio_io_handle_t output)456 status_t AudioFlingerClientAdapter::restoreOutput(audio_io_handle_t output) {
457     int32_t outputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(output));
458     return statusTFromBinderStatus(mDelegate->restoreOutput(outputAidl));
459 }
460 
openInput(const media::OpenInputRequest & request,media::OpenInputResponse * response)461 status_t AudioFlingerClientAdapter::openInput(const media::OpenInputRequest& request,
462                                               media::OpenInputResponse* response) {
463     return statusTFromBinderStatus(mDelegate->openInput(request, response));
464 }
465 
closeInput(audio_io_handle_t input)466 status_t AudioFlingerClientAdapter::closeInput(audio_io_handle_t input) {
467     int32_t inputAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_io_handle_t_int32_t(input));
468     return statusTFromBinderStatus(mDelegate->closeInput(inputAidl));
469 }
470 
invalidateStream(audio_stream_type_t stream)471 status_t AudioFlingerClientAdapter::invalidateStream(audio_stream_type_t stream) {
472     media::AudioStreamType streamAidl = VALUE_OR_RETURN_STATUS(
473             legacy2aidl_audio_stream_type_t_AudioStreamType(stream));
474     return statusTFromBinderStatus(mDelegate->invalidateStream(streamAidl));
475 }
476 
setVoiceVolume(float volume)477 status_t AudioFlingerClientAdapter::setVoiceVolume(float volume) {
478     return statusTFromBinderStatus(mDelegate->setVoiceVolume(volume));
479 }
480 
getRenderPosition(uint32_t * halFrames,uint32_t * dspFrames,audio_io_handle_t output) const481 status_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;
485     RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
486             mDelegate->getRenderPosition(outputAidl, &aidlRet)));
487     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 
getInputFramesLost(audio_io_handle_t ioHandle) const496 uint32_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;
500         RETURN_IF_ERROR(statusTFromBinderStatus(
501                 mDelegate->getInputFramesLost(ioHandleAidl, &aidlRet)));
502         return convertIntegral<uint32_t>(aidlRet);
503     }();
504     // Failure is ignored.
505     return result.value_or(0);
506 }
507 
newAudioUniqueId(audio_unique_id_use_t use)508 audio_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;
513         RETURN_IF_ERROR(statusTFromBinderStatus(
514                 mDelegate->newAudioUniqueId(useAidl, &aidlRet)));
515         return aidl2legacy_int32_t_audio_unique_id_t(aidlRet);
516     }();
517     return result.value_or(AUDIO_UNIQUE_ID_ALLOCATE);
518 }
519 
acquireAudioSessionId(audio_session_t audioSession,pid_t pid,uid_t uid)520 void 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));
527         return statusTFromBinderStatus(
528                 mDelegate->acquireAudioSessionId(audioSessionAidl, pidAidl, uidAidl));
529     }();
530     // Failure is ignored.
531 }
532 
releaseAudioSessionId(audio_session_t audioSession,pid_t pid)533 void 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));
538         return statusTFromBinderStatus(
539                 mDelegate->releaseAudioSessionId(audioSessionAidl, pidAidl));
540     }();
541     // Failure is ignored.
542 }
543 
queryNumberEffects(uint32_t * numEffects) const544 status_t AudioFlingerClientAdapter::queryNumberEffects(uint32_t* numEffects) const {
545     int32_t aidlRet;
546     RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
547             mDelegate->queryNumberEffects(&aidlRet)));
548     if (numEffects != nullptr) {
549         *numEffects = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(aidlRet));
550     }
551     return OK;
552 }
553 
554 status_t
queryEffect(uint32_t index,effect_descriptor_t * pDescriptor) const555 AudioFlingerClientAdapter::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;
558     RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
559             mDelegate->queryEffect(indexAidl, &aidlRet)));
560     if (pDescriptor != nullptr) {
561         *pDescriptor = VALUE_OR_RETURN_STATUS(
562                 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
563     }
564     return OK;
565 }
566 
getEffectDescriptor(const effect_uuid_t * pEffectUUID,const effect_uuid_t * pTypeUUID,uint32_t preferredTypeFlag,effect_descriptor_t * pDescriptor) const567 status_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;
578     RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
579             mDelegate->getEffectDescriptor(effectUuidAidl, typeUuidAidl, preferredTypeFlagAidl,
580                                            &aidlRet)));
581     if (pDescriptor != nullptr) {
582         *pDescriptor = VALUE_OR_RETURN_STATUS(
583                 aidl2legacy_EffectDescriptor_effect_descriptor_t(aidlRet));
584     }
585     return OK;
586 }
587 
createEffect(const media::CreateEffectRequest & request,media::CreateEffectResponse * response)588 status_t AudioFlingerClientAdapter::createEffect(const media::CreateEffectRequest& request,
589                                                  media::CreateEffectResponse* response) {
590     return statusTFromBinderStatus(mDelegate->createEffect(request, response));
591 }
592 
593 status_t
moveEffects(audio_session_t session,audio_io_handle_t srcOutput,audio_io_handle_t dstOutput)594 AudioFlingerClientAdapter::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));
601     return statusTFromBinderStatus(
602             mDelegate->moveEffects(sessionAidl, srcOutputAidl, dstOutputAidl));
603 }
604 
setEffectSuspended(int effectId,audio_session_t sessionId,bool suspended)605 void 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));
612         return statusTFromBinderStatus(
613                 mDelegate->setEffectSuspended(effectIdAidl, sessionIdAidl, suspended));
614     }();
615     // Failure is ignored.
616 }
617 
loadHwModule(const char * name)618 audio_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;
622         RETURN_IF_ERROR(statusTFromBinderStatus(
623                 mDelegate->loadHwModule(nameAidl, &aidlRet)));
624         return aidl2legacy_int32_t_audio_module_handle_t(aidlRet);
625     }();
626     // Failure is ignored.
627     return result.value_or(0);
628 }
629 
getPrimaryOutputSamplingRate()630 uint32_t AudioFlingerClientAdapter::getPrimaryOutputSamplingRate() {
631     auto result = [&]() -> ConversionResult<uint32_t> {
632         int32_t aidlRet;
633         RETURN_IF_ERROR(statusTFromBinderStatus(
634                 mDelegate->getPrimaryOutputSamplingRate(&aidlRet)));
635         return convertIntegral<uint32_t>(aidlRet);
636     }();
637     // Failure is ignored.
638     return result.value_or(0);
639 }
640 
getPrimaryOutputFrameCount()641 size_t AudioFlingerClientAdapter::getPrimaryOutputFrameCount() {
642     auto result = [&]() -> ConversionResult<size_t> {
643         int64_t aidlRet;
644         RETURN_IF_ERROR(statusTFromBinderStatus(
645                 mDelegate->getPrimaryOutputFrameCount(&aidlRet)));
646         return convertIntegral<size_t>(aidlRet);
647     }();
648     // Failure is ignored.
649     return result.value_or(0);
650 }
651 
setLowRamDevice(bool isLowRamDevice,int64_t totalMemory)652 status_t AudioFlingerClientAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
653     return statusTFromBinderStatus(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
654 }
655 
getAudioPort(struct audio_port_v7 * port)656 status_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;
659     RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
660             mDelegate->getAudioPort(portAidl, &aidlRet)));
661     *port = VALUE_OR_RETURN_STATUS(aidl2legacy_AudioPort_audio_port_v7(aidlRet));
662     return OK;
663 }
664 
createAudioPatch(const struct audio_patch * patch,audio_patch_handle_t * handle)665 status_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));
668     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     }
673     RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
674             mDelegate->createAudioPatch(patchAidl, &aidlRet)));
675     if (handle != nullptr) {
676         *handle = VALUE_OR_RETURN_STATUS(aidl2legacy_int32_t_audio_patch_handle_t(aidlRet));
677     }
678     return OK;
679 }
680 
releaseAudioPatch(audio_patch_handle_t handle)681 status_t AudioFlingerClientAdapter::releaseAudioPatch(audio_patch_handle_t handle) {
682     int32_t handleAidl = VALUE_OR_RETURN_STATUS(legacy2aidl_audio_patch_handle_t_int32_t(handle));
683     return statusTFromBinderStatus(mDelegate->releaseAudioPatch(handleAidl));
684 }
685 
listAudioPatches(unsigned int * num_patches,struct audio_patch * patches)686 status_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));
690     RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
691             mDelegate->listAudioPatches(maxPatches, &aidlRet)));
692     *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 
setAudioPortConfig(const struct audio_port_config * config)697 status_t AudioFlingerClientAdapter::setAudioPortConfig(const struct audio_port_config* config) {
698     media::AudioPortConfig configAidl = VALUE_OR_RETURN_STATUS(
699             legacy2aidl_audio_port_config_AudioPortConfig(*config));
700     return statusTFromBinderStatus(mDelegate->setAudioPortConfig(configAidl));
701 }
702 
getAudioHwSyncForSession(audio_session_t sessionId)703 audio_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;
707         RETURN_IF_ERROR(statusTFromBinderStatus(
708                 mDelegate->getAudioHwSyncForSession(sessionIdAidl, &aidlRet)));
709         return aidl2legacy_int32_t_audio_hw_sync_t(aidlRet);
710     }();
711     return result.value_or(AUDIO_HW_SYNC_INVALID);
712 }
713 
systemReady()714 status_t AudioFlingerClientAdapter::systemReady() {
715     return statusTFromBinderStatus(mDelegate->systemReady());
716 }
717 
audioPolicyReady()718 status_t AudioFlingerClientAdapter::audioPolicyReady() {
719     return statusTFromBinderStatus(mDelegate->audioPolicyReady());
720 }
721 
frameCountHAL(audio_io_handle_t ioHandle) const722 size_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;
726         RETURN_IF_ERROR(statusTFromBinderStatus(
727                 mDelegate->frameCountHAL(ioHandleAidl, &aidlRet)));
728         return convertIntegral<size_t>(aidlRet);
729     }();
730     // Failure is ignored.
731     return result.value_or(0);
732 }
733 
734 status_t
getMicrophones(std::vector<media::MicrophoneInfo> * microphones)735 AudioFlingerClientAdapter::getMicrophones(std::vector<media::MicrophoneInfo>* microphones) {
736     std::vector<media::MicrophoneInfoData> aidlRet;
737     RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
738             mDelegate->getMicrophones(&aidlRet)));
739     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 
setAudioHalPids(const std::vector<pid_t> & pids)747 status_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));
750     return statusTFromBinderStatus(mDelegate->setAudioHalPids(pidsAidl));
751 }
752 
setVibratorInfos(const std::vector<media::AudioVibratorInfo> & vibratorInfos)753 status_t AudioFlingerClientAdapter::setVibratorInfos(
754         const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
755     return statusTFromBinderStatus(mDelegate->setVibratorInfos(vibratorInfos));
756 }
757 
updateSecondaryOutputs(const TrackSecondaryOutputsMap & trackSecondaryOutputs)758 status_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 
768 
769 ////////////////////////////////////////////////////////////////////////////////////////////////////
770 // AudioFlingerServerAdapter
AudioFlingerServerAdapter(const sp<AudioFlingerServerAdapter::Delegate> & delegate)771 AudioFlingerServerAdapter::AudioFlingerServerAdapter(
772         const sp<AudioFlingerServerAdapter::Delegate>& delegate) : mDelegate(delegate) {}
773 
onTransact(uint32_t code,const Parcel & data,Parcel * reply,uint32_t flags)774 status_t AudioFlingerServerAdapter::onTransact(uint32_t code,
775                                                const Parcel& data,
776                                                Parcel* reply,
777                                                uint32_t flags) {
778     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                                         });
788 }
789 
dump(int fd,const Vector<String16> & args)790 status_t AudioFlingerServerAdapter::dump(int fd, const Vector<String16>& args) {
791     return mDelegate->dump(fd, args);
792 }
793 
createTrack(const media::CreateTrackRequest & request,media::CreateTrackResponse * _aidl_return)794 Status AudioFlingerServerAdapter::createTrack(const media::CreateTrackRequest& request,
795                                               media::CreateTrackResponse* _aidl_return) {
796     return Status::fromStatusT(mDelegate->createTrack(request, *_aidl_return));
797 }
798 
createRecord(const media::CreateRecordRequest & request,media::CreateRecordResponse * _aidl_return)799 Status AudioFlingerServerAdapter::createRecord(const media::CreateRecordRequest& request,
800                                                media::CreateRecordResponse* _aidl_return) {
801     return Status::fromStatusT(mDelegate->createRecord(request, *_aidl_return));
802 }
803 
sampleRate(int32_t ioHandle,int32_t * _aidl_return)804 Status 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 
format(int32_t output,media::audio::common::AudioFormat * _aidl_return)812 Status 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 
frameCount(int32_t ioHandle,int64_t * _aidl_return)821 Status 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 
latency(int32_t output,int32_t * _aidl_return)829 Status 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 
setMasterVolume(float value)837 Status AudioFlingerServerAdapter::setMasterVolume(float value) {
838     return Status::fromStatusT(mDelegate->setMasterVolume(value));
839 }
840 
setMasterMute(bool muted)841 Status AudioFlingerServerAdapter::setMasterMute(bool muted) {
842     return Status::fromStatusT(mDelegate->setMasterMute(muted));
843 }
844 
masterVolume(float * _aidl_return)845 Status AudioFlingerServerAdapter::masterVolume(float* _aidl_return) {
846     *_aidl_return = mDelegate->masterVolume();
847     return Status::ok();
848 }
849 
masterMute(bool * _aidl_return)850 Status AudioFlingerServerAdapter::masterMute(bool* _aidl_return) {
851     *_aidl_return = mDelegate->masterMute();
852     return Status::ok();
853 }
854 
setMasterBalance(float balance)855 Status AudioFlingerServerAdapter::setMasterBalance(float balance) {
856     return Status::fromStatusT(mDelegate->setMasterBalance(balance));
857 }
858 
getMasterBalance(float * _aidl_return)859 Status AudioFlingerServerAdapter::getMasterBalance(float* _aidl_return) {
860     return Status::fromStatusT(mDelegate->getMasterBalance(_aidl_return));
861 }
862 
setStreamVolume(media::AudioStreamType stream,float value,int32_t output)863 Status 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 
setStreamMute(media::AudioStreamType stream,bool muted)872 Status 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 
streamVolume(media::AudioStreamType stream,int32_t output,float * _aidl_return)878 Status 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 
streamMute(media::AudioStreamType stream,bool * _aidl_return)888 Status 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 
setMode(media::AudioMode mode)895 Status 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 
setMicMute(bool state)900 Status AudioFlingerServerAdapter::setMicMute(bool state) {
901     return Status::fromStatusT(mDelegate->setMicMute(state));
902 }
903 
getMicMute(bool * _aidl_return)904 Status AudioFlingerServerAdapter::getMicMute(bool* _aidl_return) {
905     *_aidl_return = mDelegate->getMicMute();
906     return Status::ok();
907 }
908 
setRecordSilenced(int32_t portId,bool silenced)909 Status 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 
916 Status
setParameters(int32_t ioHandle,const std::string & keyValuePairs)917 AudioFlingerServerAdapter::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 
getParameters(int32_t ioHandle,const std::string & keys,std::string * _aidl_return)925 Status 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 
registerClient(const sp<media::IAudioFlingerClient> & client)935 Status AudioFlingerServerAdapter::registerClient(const sp<media::IAudioFlingerClient>& client) {
936     mDelegate->registerClient(client);
937     return Status::ok();
938 }
939 
getInputBufferSize(int32_t sampleRate,media::audio::common::AudioFormat format,int32_t channelMask,int64_t * _aidl_return)940 Status 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 
openOutput(const media::OpenOutputRequest & request,media::OpenOutputResponse * _aidl_return)953 Status AudioFlingerServerAdapter::openOutput(const media::OpenOutputRequest& request,
954                                              media::OpenOutputResponse* _aidl_return) {
955     return Status::fromStatusT(mDelegate->openOutput(request, _aidl_return));
956 }
957 
openDuplicateOutput(int32_t output1,int32_t output2,int32_t * _aidl_return)958 Status 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 
closeOutput(int32_t output)969 Status 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 
suspendOutput(int32_t output)975 Status 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 
restoreOutput(int32_t output)981 Status 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 
openInput(const media::OpenInputRequest & request,media::OpenInputResponse * _aidl_return)987 Status AudioFlingerServerAdapter::openInput(const media::OpenInputRequest& request,
988                                             media::OpenInputResponse* _aidl_return) {
989     return Status::fromStatusT(mDelegate->openInput(request, _aidl_return));
990 }
991 
closeInput(int32_t input)992 Status 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 
invalidateStream(media::AudioStreamType stream)998 Status 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 
setVoiceVolume(float volume)1004 Status AudioFlingerServerAdapter::setVoiceVolume(float volume) {
1005     return Status::fromStatusT(mDelegate->setVoiceVolume(volume));
1006 }
1007 
1008 Status
getRenderPosition(int32_t output,media::RenderPosition * _aidl_return)1009 AudioFlingerServerAdapter::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 
getInputFramesLost(int32_t ioHandle,int32_t * _aidl_return)1021 Status 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 
1029 Status
newAudioUniqueId(media::AudioUniqueIdUse use,int32_t * _aidl_return)1030 AudioFlingerServerAdapter::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 
1038 Status
acquireAudioSessionId(int32_t audioSession,int32_t pid,int32_t uid)1039 AudioFlingerServerAdapter::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 
releaseAudioSessionId(int32_t audioSession,int32_t pid)1048 Status 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 
queryNumberEffects(int32_t * _aidl_return)1056 Status 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 
1063 Status
queryEffect(int32_t index,media::EffectDescriptor * _aidl_return)1064 AudioFlingerServerAdapter::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 
getEffectDescriptor(const media::AudioUuid & effectUUID,const media::AudioUuid & typeUUID,int32_t preferredTypeFlag,media::EffectDescriptor * _aidl_return)1073 Status 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 
createEffect(const media::CreateEffectRequest & request,media::CreateEffectResponse * _aidl_return)1091 Status AudioFlingerServerAdapter::createEffect(const media::CreateEffectRequest& request,
1092                                                media::CreateEffectResponse* _aidl_return) {
1093     return Status::fromStatusT(mDelegate->createEffect(request, _aidl_return));
1094 }
1095 
1096 Status
moveEffects(int32_t session,int32_t srcOutput,int32_t dstOutput)1097 AudioFlingerServerAdapter::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 
setEffectSuspended(int32_t effectId,int32_t sessionId,bool suspended)1108 Status 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 
loadHwModule(const std::string & name,int32_t * _aidl_return)1117 Status 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 
getPrimaryOutputSamplingRate(int32_t * _aidl_return)1123 Status 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 
getPrimaryOutputFrameCount(int64_t * _aidl_return)1129 Status 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 
setLowRamDevice(bool isLowRamDevice,int64_t totalMemory)1136 Status AudioFlingerServerAdapter::setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) {
1137     return Status::fromStatusT(mDelegate->setLowRamDevice(isLowRamDevice, totalMemory));
1138 }
1139 
getAudioPort(const media::AudioPort & port,media::AudioPort * _aidl_return)1140 Status 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 
createAudioPatch(const media::AudioPatch & patch,int32_t * _aidl_return)1148 Status AudioFlingerServerAdapter::createAudioPatch(const media::AudioPatch& patch,
1149                                                    int32_t* _aidl_return) {
1150     audio_patch patchLegacy = VALUE_OR_RETURN_BINDER(aidl2legacy_AudioPatch_audio_patch(patch));
1151     audio_patch_handle_t handleLegacy = VALUE_OR_RETURN_BINDER(
1152             aidl2legacy_int32_t_audio_patch_handle_t(*_aidl_return));
1153     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 
releaseAudioPatch(int32_t handle)1158 Status 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 
listAudioPatches(int32_t maxCount,std::vector<media::AudioPatch> * _aidl_return)1164 Status 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 
setAudioPortConfig(const media::AudioPortConfig & config)1177 Status 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 
getAudioHwSyncForSession(int32_t sessionId,int32_t * _aidl_return)1183 Status 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 
systemReady()1192 Status AudioFlingerServerAdapter::systemReady() {
1193     return Status::fromStatusT(mDelegate->systemReady());
1194 }
1195 
audioPolicyReady()1196 Status AudioFlingerServerAdapter::audioPolicyReady() {
1197     mDelegate->audioPolicyReady();
1198     return Status::ok();
1199 }
1200 
frameCountHAL(int32_t ioHandle,int64_t * _aidl_return)1201 Status 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 
getMicrophones(std::vector<media::MicrophoneInfoData> * _aidl_return)1209 Status 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 
setAudioHalPids(const std::vector<int32_t> & pids)1218 Status 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 }
1224 
setVibratorInfos(const std::vector<media::AudioVibratorInfo> & vibratorInfos)1225 Status AudioFlingerServerAdapter::setVibratorInfos(
1226         const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
1227     return Status::fromStatusT(mDelegate->setVibratorInfos(vibratorInfos));
1228 }
1229 
updateSecondaryOutputs(const std::vector<media::TrackSecondaryOutputInfo> & trackSecondaryOutputInfos)1230 Status 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 
1239 } // namespace android
1240