blob: 0e98e5db762855ba593f9aeed9cb77aed687bf0d [file] [log] [blame]
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001/*
2 * Copyright (C) 2020 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070017#define LOG_TAG "AidlConversion"
18//#define LOG_NDEBUG 0
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070019#include <utils/Log.h>
20
21#include "media/AidlConversion.h"
22
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -080023#include <media/ShmemCompat.h>
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -070024
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070025////////////////////////////////////////////////////////////////////////////////////////////////////
26// Utilities
27
28namespace android {
29
30using base::unexpected;
31
32namespace {
33
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070034enum class Direction {
35 INPUT, OUTPUT
36};
37
38ConversionResult<Direction> direction(media::AudioPortRole role, media::AudioPortType type) {
39 switch (type) {
Andy Hung3f69c162020-12-09 12:08:48 -080040 case media::AudioPortType::NONE:
41 case media::AudioPortType::SESSION:
42 break; // must be listed -Werror,-Wswitch
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070043 case media::AudioPortType::DEVICE:
44 switch (role) {
Andy Hung3f69c162020-12-09 12:08:48 -080045 case media::AudioPortRole::NONE:
46 break; // must be listed -Werror,-Wswitch
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070047 case media::AudioPortRole::SOURCE:
48 return Direction::INPUT;
49 case media::AudioPortRole::SINK:
50 return Direction::OUTPUT;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070051 }
52 break;
53 case media::AudioPortType::MIX:
54 switch (role) {
Andy Hung3f69c162020-12-09 12:08:48 -080055 case media::AudioPortRole::NONE:
56 break; // must be listed -Werror,-Wswitch
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070057 case media::AudioPortRole::SOURCE:
58 return Direction::OUTPUT;
59 case media::AudioPortRole::SINK:
60 return Direction::INPUT;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070061 }
62 break;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070063 }
64 return unexpected(BAD_VALUE);
65}
66
67ConversionResult<Direction> direction(audio_port_role_t role, audio_port_type_t type) {
68 switch (type) {
Andy Hung3f69c162020-12-09 12:08:48 -080069 case AUDIO_PORT_TYPE_NONE:
70 case AUDIO_PORT_TYPE_SESSION:
71 break; // must be listed -Werror,-Wswitch
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070072 case AUDIO_PORT_TYPE_DEVICE:
73 switch (role) {
Andy Hung3f69c162020-12-09 12:08:48 -080074 case AUDIO_PORT_ROLE_NONE:
75 break; // must be listed -Werror,-Wswitch
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070076 case AUDIO_PORT_ROLE_SOURCE:
77 return Direction::INPUT;
78 case AUDIO_PORT_ROLE_SINK:
79 return Direction::OUTPUT;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070080 }
81 break;
82 case AUDIO_PORT_TYPE_MIX:
83 switch (role) {
Andy Hung3f69c162020-12-09 12:08:48 -080084 case AUDIO_PORT_ROLE_NONE:
85 break; // must be listed -Werror,-Wswitch
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070086 case AUDIO_PORT_ROLE_SOURCE:
87 return Direction::OUTPUT;
88 case AUDIO_PORT_ROLE_SINK:
89 return Direction::INPUT;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070090 }
91 break;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -070092 }
93 return unexpected(BAD_VALUE);
94}
95
96} // namespace
97
98////////////////////////////////////////////////////////////////////////////////////////////////////
99// Converters
100
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700101status_t aidl2legacy_string(std::string_view aidl, char* dest, size_t maxSize) {
102 if (aidl.size() > maxSize - 1) {
103 return BAD_VALUE;
104 }
105 aidl.copy(dest, aidl.size());
106 dest[aidl.size()] = '\0';
107 return OK;
108}
109
110ConversionResult<std::string> legacy2aidl_string(const char* legacy, size_t maxSize) {
111 if (legacy == nullptr) {
112 return unexpected(BAD_VALUE);
113 }
114 if (strnlen(legacy, maxSize) == maxSize) {
115 // No null-terminator.
116 return unexpected(BAD_VALUE);
117 }
118 return std::string(legacy);
119}
120
121ConversionResult<audio_module_handle_t> aidl2legacy_int32_t_audio_module_handle_t(int32_t aidl) {
122 return convertReinterpret<audio_module_handle_t>(aidl);
123}
124
125ConversionResult<int32_t> legacy2aidl_audio_module_handle_t_int32_t(audio_module_handle_t legacy) {
126 return convertReinterpret<int32_t>(legacy);
127}
128
129ConversionResult<audio_io_handle_t> aidl2legacy_int32_t_audio_io_handle_t(int32_t aidl) {
130 return convertReinterpret<audio_io_handle_t>(aidl);
131}
132
133ConversionResult<int32_t> legacy2aidl_audio_io_handle_t_int32_t(audio_io_handle_t legacy) {
134 return convertReinterpret<int32_t>(legacy);
135}
136
137ConversionResult<audio_port_handle_t> aidl2legacy_int32_t_audio_port_handle_t(int32_t aidl) {
138 return convertReinterpret<audio_port_handle_t>(aidl);
139}
140
141ConversionResult<int32_t> legacy2aidl_audio_port_handle_t_int32_t(audio_port_handle_t legacy) {
142 return convertReinterpret<int32_t>(legacy);
143}
144
145ConversionResult<audio_patch_handle_t> aidl2legacy_int32_t_audio_patch_handle_t(int32_t aidl) {
146 return convertReinterpret<audio_patch_handle_t>(aidl);
147}
148
149ConversionResult<int32_t> legacy2aidl_audio_patch_handle_t_int32_t(audio_patch_handle_t legacy) {
150 return convertReinterpret<int32_t>(legacy);
151}
152
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800153ConversionResult<audio_unique_id_t> aidl2legacy_int32_t_audio_unique_id_t(int32_t aidl) {
154 return convertReinterpret<audio_unique_id_t>(aidl);
155}
156
157ConversionResult<int32_t> legacy2aidl_audio_unique_id_t_int32_t(audio_unique_id_t legacy) {
158 return convertReinterpret<int32_t>(legacy);
159}
160
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -0800161ConversionResult<audio_hw_sync_t> aidl2legacy_int32_t_audio_hw_sync_t(int32_t aidl) {
162 return convertReinterpret<audio_hw_sync_t>(aidl);
163}
164
165ConversionResult<int32_t> legacy2aidl_audio_hw_sync_t_int32_t(audio_hw_sync_t legacy) {
166 return convertReinterpret<int32_t>(legacy);
167}
168
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800169ConversionResult<pid_t> aidl2legacy_int32_t_pid_t(int32_t aidl) {
170 return convertReinterpret<pid_t>(aidl);
171}
172
173ConversionResult<int32_t> legacy2aidl_pid_t_int32_t(pid_t legacy) {
174 return convertReinterpret<int32_t>(legacy);
175}
176
177ConversionResult<uid_t> aidl2legacy_int32_t_uid_t(int32_t aidl) {
178 return convertReinterpret<uid_t>(aidl);
179}
180
181ConversionResult<int32_t> legacy2aidl_uid_t_int32_t(uid_t legacy) {
182 return convertReinterpret<int32_t>(legacy);
183}
184
185ConversionResult<String16> aidl2legacy_string_view_String16(std::string_view aidl) {
186 return String16(aidl.data(), aidl.size());
187}
188
189ConversionResult<std::string> legacy2aidl_String16_string(const String16& legacy) {
190 return std::string(String8(legacy).c_str());
191}
192
Philip P. Moltmannbda45752020-07-17 16:41:18 -0700193// TODO b/182392769: create an optional -> optional util
194ConversionResult<std::optional<String16>>
195aidl2legacy_optional_string_view_optional_String16(std::optional<std::string_view> aidl) {
196 if (!aidl.has_value()) {
197 return std::nullopt;
198 }
199 ConversionResult<String16> conversion =
200 VALUE_OR_RETURN(aidl2legacy_string_view_String16(aidl.value()));
201 return conversion.value();
202}
203
204ConversionResult<std::optional<std::string_view>>
205legacy2aidl_optional_String16_optional_string(std::optional<String16> legacy) {
206 if (!legacy.has_value()) {
207 return std::nullopt;
208 }
209 ConversionResult<std::string> conversion =
210 VALUE_OR_RETURN(legacy2aidl_String16_string(legacy.value()));
211 return conversion.value();
212}
213
Ytai Ben-Tsvice182942020-11-04 14:48:01 -0800214ConversionResult<String8> aidl2legacy_string_view_String8(std::string_view aidl) {
215 return String8(aidl.data(), aidl.size());
216}
217
218ConversionResult<std::string> legacy2aidl_String8_string(const String8& legacy) {
219 return std::string(legacy.c_str());
220}
221
Andy Hung973638a2020-12-08 20:47:45 -0800222// The legacy enum is unnamed. Thus, we use int32_t.
223ConversionResult<int32_t> aidl2legacy_AudioPortConfigType_int32_t(
224 media::AudioPortConfigType aidl) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700225 switch (aidl) {
226 case media::AudioPortConfigType::SAMPLE_RATE:
227 return AUDIO_PORT_CONFIG_SAMPLE_RATE;
228 case media::AudioPortConfigType::CHANNEL_MASK:
229 return AUDIO_PORT_CONFIG_CHANNEL_MASK;
230 case media::AudioPortConfigType::FORMAT:
231 return AUDIO_PORT_CONFIG_FORMAT;
Hayden Gomes1117ea22020-11-20 11:06:37 -0800232 case media::AudioPortConfigType::GAIN:
233 return AUDIO_PORT_CONFIG_GAIN;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700234 case media::AudioPortConfigType::FLAGS:
235 return AUDIO_PORT_CONFIG_FLAGS;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700236 }
Hayden Gomes1117ea22020-11-20 11:06:37 -0800237 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700238}
239
Andy Hung973638a2020-12-08 20:47:45 -0800240// The legacy enum is unnamed. Thus, we use int32_t.
241ConversionResult<media::AudioPortConfigType> legacy2aidl_int32_t_AudioPortConfigType(
242 int32_t legacy) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700243 switch (legacy) {
244 case AUDIO_PORT_CONFIG_SAMPLE_RATE:
245 return media::AudioPortConfigType::SAMPLE_RATE;
246 case AUDIO_PORT_CONFIG_CHANNEL_MASK:
247 return media::AudioPortConfigType::CHANNEL_MASK;
248 case AUDIO_PORT_CONFIG_FORMAT:
249 return media::AudioPortConfigType::FORMAT;
Hayden Gomes1117ea22020-11-20 11:06:37 -0800250 case AUDIO_PORT_CONFIG_GAIN:
251 return media::AudioPortConfigType::GAIN;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700252 case AUDIO_PORT_CONFIG_FLAGS:
253 return media::AudioPortConfigType::FLAGS;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700254 }
Hayden Gomes1117ea22020-11-20 11:06:37 -0800255 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700256}
257
258ConversionResult<unsigned int> aidl2legacy_int32_t_config_mask(int32_t aidl) {
259 return convertBitmask<unsigned int, int32_t, int, media::AudioPortConfigType>(
Andy Hung973638a2020-12-08 20:47:45 -0800260 aidl, aidl2legacy_AudioPortConfigType_int32_t,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700261 // AudioPortConfigType enum is index-based.
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800262 indexToEnum_index<media::AudioPortConfigType>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700263 // AUDIO_PORT_CONFIG_* flags are mask-based.
264 enumToMask_bitmask<unsigned int, int>);
265}
266
267ConversionResult<int32_t> legacy2aidl_config_mask_int32_t(unsigned int legacy) {
268 return convertBitmask<int32_t, unsigned int, media::AudioPortConfigType, int>(
Andy Hung973638a2020-12-08 20:47:45 -0800269 legacy, legacy2aidl_int32_t_AudioPortConfigType,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700270 // AUDIO_PORT_CONFIG_* flags are mask-based.
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800271 indexToEnum_bitmask<unsigned>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700272 // AudioPortConfigType enum is index-based.
273 enumToMask_index<int32_t, media::AudioPortConfigType>);
274}
275
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -0700276ConversionResult<audio_channel_mask_t> aidl2legacy_AudioChannelMask_audio_channel_mask_t(
277 media::AudioChannelMask aidl) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700278 return convertReinterpret<audio_channel_mask_t>(aidl);
279}
280
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -0700281ConversionResult<media::AudioChannelMask> legacy2aidl_audio_channel_mask_t_AudioChannelMask(
282 audio_channel_mask_t legacy) {
283 return convertReinterpret<media::AudioChannelMask>(legacy);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700284}
285
286ConversionResult<audio_io_config_event> aidl2legacy_AudioIoConfigEvent_audio_io_config_event(
287 media::AudioIoConfigEvent aidl) {
288 switch (aidl) {
289 case media::AudioIoConfigEvent::OUTPUT_REGISTERED:
290 return AUDIO_OUTPUT_REGISTERED;
291 case media::AudioIoConfigEvent::OUTPUT_OPENED:
292 return AUDIO_OUTPUT_OPENED;
293 case media::AudioIoConfigEvent::OUTPUT_CLOSED:
294 return AUDIO_OUTPUT_CLOSED;
295 case media::AudioIoConfigEvent::OUTPUT_CONFIG_CHANGED:
296 return AUDIO_OUTPUT_CONFIG_CHANGED;
297 case media::AudioIoConfigEvent::INPUT_REGISTERED:
298 return AUDIO_INPUT_REGISTERED;
299 case media::AudioIoConfigEvent::INPUT_OPENED:
300 return AUDIO_INPUT_OPENED;
301 case media::AudioIoConfigEvent::INPUT_CLOSED:
302 return AUDIO_INPUT_CLOSED;
303 case media::AudioIoConfigEvent::INPUT_CONFIG_CHANGED:
304 return AUDIO_INPUT_CONFIG_CHANGED;
305 case media::AudioIoConfigEvent::CLIENT_STARTED:
306 return AUDIO_CLIENT_STARTED;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700307 }
Andy Hung3f69c162020-12-09 12:08:48 -0800308 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700309}
310
311ConversionResult<media::AudioIoConfigEvent> legacy2aidl_audio_io_config_event_AudioIoConfigEvent(
312 audio_io_config_event legacy) {
313 switch (legacy) {
314 case AUDIO_OUTPUT_REGISTERED:
315 return media::AudioIoConfigEvent::OUTPUT_REGISTERED;
316 case AUDIO_OUTPUT_OPENED:
317 return media::AudioIoConfigEvent::OUTPUT_OPENED;
318 case AUDIO_OUTPUT_CLOSED:
319 return media::AudioIoConfigEvent::OUTPUT_CLOSED;
320 case AUDIO_OUTPUT_CONFIG_CHANGED:
321 return media::AudioIoConfigEvent::OUTPUT_CONFIG_CHANGED;
322 case AUDIO_INPUT_REGISTERED:
323 return media::AudioIoConfigEvent::INPUT_REGISTERED;
324 case AUDIO_INPUT_OPENED:
325 return media::AudioIoConfigEvent::INPUT_OPENED;
326 case AUDIO_INPUT_CLOSED:
327 return media::AudioIoConfigEvent::INPUT_CLOSED;
328 case AUDIO_INPUT_CONFIG_CHANGED:
329 return media::AudioIoConfigEvent::INPUT_CONFIG_CHANGED;
330 case AUDIO_CLIENT_STARTED:
331 return media::AudioIoConfigEvent::CLIENT_STARTED;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700332 }
Andy Hung3f69c162020-12-09 12:08:48 -0800333 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700334}
335
336ConversionResult<audio_port_role_t> aidl2legacy_AudioPortRole_audio_port_role_t(
337 media::AudioPortRole aidl) {
338 switch (aidl) {
339 case media::AudioPortRole::NONE:
340 return AUDIO_PORT_ROLE_NONE;
341 case media::AudioPortRole::SOURCE:
342 return AUDIO_PORT_ROLE_SOURCE;
343 case media::AudioPortRole::SINK:
344 return AUDIO_PORT_ROLE_SINK;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700345 }
Andy Hung3f69c162020-12-09 12:08:48 -0800346 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700347}
348
349ConversionResult<media::AudioPortRole> legacy2aidl_audio_port_role_t_AudioPortRole(
350 audio_port_role_t legacy) {
351 switch (legacy) {
352 case AUDIO_PORT_ROLE_NONE:
353 return media::AudioPortRole::NONE;
354 case AUDIO_PORT_ROLE_SOURCE:
355 return media::AudioPortRole::SOURCE;
356 case AUDIO_PORT_ROLE_SINK:
357 return media::AudioPortRole::SINK;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700358 }
Andy Hung3f69c162020-12-09 12:08:48 -0800359 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700360}
361
362ConversionResult<audio_port_type_t> aidl2legacy_AudioPortType_audio_port_type_t(
363 media::AudioPortType aidl) {
364 switch (aidl) {
365 case media::AudioPortType::NONE:
366 return AUDIO_PORT_TYPE_NONE;
367 case media::AudioPortType::DEVICE:
368 return AUDIO_PORT_TYPE_DEVICE;
369 case media::AudioPortType::MIX:
370 return AUDIO_PORT_TYPE_MIX;
371 case media::AudioPortType::SESSION:
372 return AUDIO_PORT_TYPE_SESSION;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700373 }
Andy Hung3f69c162020-12-09 12:08:48 -0800374 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700375}
376
377ConversionResult<media::AudioPortType> legacy2aidl_audio_port_type_t_AudioPortType(
378 audio_port_type_t legacy) {
379 switch (legacy) {
380 case AUDIO_PORT_TYPE_NONE:
381 return media::AudioPortType::NONE;
382 case AUDIO_PORT_TYPE_DEVICE:
383 return media::AudioPortType::DEVICE;
384 case AUDIO_PORT_TYPE_MIX:
385 return media::AudioPortType::MIX;
386 case AUDIO_PORT_TYPE_SESSION:
387 return media::AudioPortType::SESSION;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700388 }
Andy Hung3f69c162020-12-09 12:08:48 -0800389 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700390}
391
392ConversionResult<audio_format_t> aidl2legacy_AudioFormat_audio_format_t(
Mikhail Naganovc10572e2021-05-21 17:42:02 -0700393 media::AudioFormatSys aidl) {
394 // This relies on AudioFormatSys being kept in sync with audio_format_t.
395 static_assert(sizeof(media::AudioFormatSys) == sizeof(audio_format_t));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700396 return static_cast<audio_format_t>(aidl);
397}
398
Mikhail Naganovc10572e2021-05-21 17:42:02 -0700399ConversionResult<media::AudioFormatSys> legacy2aidl_audio_format_t_AudioFormat(
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700400 audio_format_t legacy) {
Mikhail Naganovc10572e2021-05-21 17:42:02 -0700401 // This relies on AudioFormatSys being kept in sync with audio_format_t.
402 static_assert(sizeof(media::AudioFormatSys) == sizeof(audio_format_t));
403 return static_cast<media::AudioFormatSys>(legacy);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700404}
405
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800406ConversionResult<audio_gain_mode_t> aidl2legacy_AudioGainMode_audio_gain_mode_t(media::AudioGainMode aidl) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700407 switch (aidl) {
408 case media::AudioGainMode::JOINT:
409 return AUDIO_GAIN_MODE_JOINT;
410 case media::AudioGainMode::CHANNELS:
411 return AUDIO_GAIN_MODE_CHANNELS;
412 case media::AudioGainMode::RAMP:
413 return AUDIO_GAIN_MODE_RAMP;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700414 }
Andy Hung3f69c162020-12-09 12:08:48 -0800415 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700416}
417
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800418ConversionResult<media::AudioGainMode> legacy2aidl_audio_gain_mode_t_AudioGainMode(audio_gain_mode_t legacy) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700419 switch (legacy) {
420 case AUDIO_GAIN_MODE_JOINT:
421 return media::AudioGainMode::JOINT;
422 case AUDIO_GAIN_MODE_CHANNELS:
423 return media::AudioGainMode::CHANNELS;
424 case AUDIO_GAIN_MODE_RAMP:
425 return media::AudioGainMode::RAMP;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700426 }
Andy Hung3f69c162020-12-09 12:08:48 -0800427 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700428}
429
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800430ConversionResult<audio_gain_mode_t> aidl2legacy_int32_t_audio_gain_mode_t_mask(int32_t aidl) {
431 return convertBitmask<audio_gain_mode_t, int32_t, audio_gain_mode_t, media::AudioGainMode>(
432 aidl, aidl2legacy_AudioGainMode_audio_gain_mode_t,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700433 // AudioGainMode is index-based.
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800434 indexToEnum_index<media::AudioGainMode>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700435 // AUDIO_GAIN_MODE_* constants are mask-based.
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800436 enumToMask_bitmask<audio_gain_mode_t, audio_gain_mode_t>);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700437}
438
Andy Hung973638a2020-12-08 20:47:45 -0800439ConversionResult<int32_t> legacy2aidl_audio_gain_mode_t_int32_t_mask(audio_gain_mode_t legacy) {
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800440 return convertBitmask<int32_t, audio_gain_mode_t, media::AudioGainMode, audio_gain_mode_t>(
441 legacy, legacy2aidl_audio_gain_mode_t_AudioGainMode,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700442 // AUDIO_GAIN_MODE_* constants are mask-based.
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800443 indexToEnum_bitmask<audio_gain_mode_t>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700444 // AudioGainMode is index-based.
445 enumToMask_index<int32_t, media::AudioGainMode>);
446}
447
448ConversionResult<audio_devices_t> aidl2legacy_int32_t_audio_devices_t(int32_t aidl) {
449 // TODO(ytai): bitfield?
450 return convertReinterpret<audio_devices_t>(aidl);
451}
452
453ConversionResult<int32_t> legacy2aidl_audio_devices_t_int32_t(audio_devices_t legacy) {
454 // TODO(ytai): bitfield?
455 return convertReinterpret<int32_t>(legacy);
456}
457
458ConversionResult<audio_gain_config> aidl2legacy_AudioGainConfig_audio_gain_config(
459 const media::AudioGainConfig& aidl, media::AudioPortRole role, media::AudioPortType type) {
460 audio_gain_config legacy;
461 legacy.index = VALUE_OR_RETURN(convertIntegral<int>(aidl.index));
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800462 legacy.mode = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_gain_mode_t_mask(aidl.mode));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700463 legacy.channel_mask =
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -0700464 VALUE_OR_RETURN(aidl2legacy_AudioChannelMask_audio_channel_mask_t(aidl.channelMask));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700465 const bool isInput = VALUE_OR_RETURN(direction(role, type)) == Direction::INPUT;
466 const bool isJoint = bitmaskIsSet(aidl.mode, media::AudioGainMode::JOINT);
467 size_t numValues = isJoint ? 1
468 : isInput ? audio_channel_count_from_in_mask(legacy.channel_mask)
469 : audio_channel_count_from_out_mask(legacy.channel_mask);
470 if (aidl.values.size() != numValues || aidl.values.size() > std::size(legacy.values)) {
471 return unexpected(BAD_VALUE);
472 }
473 for (size_t i = 0; i < numValues; ++i) {
474 legacy.values[i] = VALUE_OR_RETURN(convertIntegral<int>(aidl.values[i]));
475 }
476 legacy.ramp_duration_ms = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.rampDurationMs));
477 return legacy;
478}
479
480ConversionResult<media::AudioGainConfig> legacy2aidl_audio_gain_config_AudioGainConfig(
481 const audio_gain_config& legacy, audio_port_role_t role, audio_port_type_t type) {
482 media::AudioGainConfig aidl;
483 aidl.index = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.index));
Andy Hung973638a2020-12-08 20:47:45 -0800484 aidl.mode = VALUE_OR_RETURN(legacy2aidl_audio_gain_mode_t_int32_t_mask(legacy.mode));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700485 aidl.channelMask =
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -0700486 VALUE_OR_RETURN(legacy2aidl_audio_channel_mask_t_AudioChannelMask(legacy.channel_mask));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700487 const bool isInput = VALUE_OR_RETURN(direction(role, type)) == Direction::INPUT;
488 const bool isJoint = (legacy.mode & AUDIO_GAIN_MODE_JOINT) != 0;
489 size_t numValues = isJoint ? 1
490 : isInput ? audio_channel_count_from_in_mask(legacy.channel_mask)
491 : audio_channel_count_from_out_mask(legacy.channel_mask);
492 aidl.values.resize(numValues);
493 for (size_t i = 0; i < numValues; ++i) {
494 aidl.values[i] = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.values[i]));
495 }
496 aidl.rampDurationMs = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.ramp_duration_ms));
497 return aidl;
498}
499
500ConversionResult<audio_input_flags_t> aidl2legacy_AudioInputFlags_audio_input_flags_t(
501 media::AudioInputFlags aidl) {
502 switch (aidl) {
503 case media::AudioInputFlags::FAST:
504 return AUDIO_INPUT_FLAG_FAST;
505 case media::AudioInputFlags::HW_HOTWORD:
506 return AUDIO_INPUT_FLAG_HW_HOTWORD;
507 case media::AudioInputFlags::RAW:
508 return AUDIO_INPUT_FLAG_RAW;
509 case media::AudioInputFlags::SYNC:
510 return AUDIO_INPUT_FLAG_SYNC;
511 case media::AudioInputFlags::MMAP_NOIRQ:
512 return AUDIO_INPUT_FLAG_MMAP_NOIRQ;
513 case media::AudioInputFlags::VOIP_TX:
514 return AUDIO_INPUT_FLAG_VOIP_TX;
515 case media::AudioInputFlags::HW_AV_SYNC:
516 return AUDIO_INPUT_FLAG_HW_AV_SYNC;
517 case media::AudioInputFlags::DIRECT:
518 return AUDIO_INPUT_FLAG_DIRECT;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700519 }
Andy Hung3f69c162020-12-09 12:08:48 -0800520 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700521}
522
523ConversionResult<media::AudioInputFlags> legacy2aidl_audio_input_flags_t_AudioInputFlags(
524 audio_input_flags_t legacy) {
525 switch (legacy) {
Andy Hung3f69c162020-12-09 12:08:48 -0800526 case AUDIO_INPUT_FLAG_NONE:
527 break; // shouldn't get here. must be listed -Werror,-Wswitch
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700528 case AUDIO_INPUT_FLAG_FAST:
529 return media::AudioInputFlags::FAST;
530 case AUDIO_INPUT_FLAG_HW_HOTWORD:
531 return media::AudioInputFlags::HW_HOTWORD;
532 case AUDIO_INPUT_FLAG_RAW:
533 return media::AudioInputFlags::RAW;
534 case AUDIO_INPUT_FLAG_SYNC:
535 return media::AudioInputFlags::SYNC;
536 case AUDIO_INPUT_FLAG_MMAP_NOIRQ:
537 return media::AudioInputFlags::MMAP_NOIRQ;
538 case AUDIO_INPUT_FLAG_VOIP_TX:
539 return media::AudioInputFlags::VOIP_TX;
540 case AUDIO_INPUT_FLAG_HW_AV_SYNC:
541 return media::AudioInputFlags::HW_AV_SYNC;
542 case AUDIO_INPUT_FLAG_DIRECT:
543 return media::AudioInputFlags::DIRECT;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700544 }
Andy Hung3f69c162020-12-09 12:08:48 -0800545 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700546}
547
548ConversionResult<audio_output_flags_t> aidl2legacy_AudioOutputFlags_audio_output_flags_t(
549 media::AudioOutputFlags aidl) {
550 switch (aidl) {
551 case media::AudioOutputFlags::DIRECT:
552 return AUDIO_OUTPUT_FLAG_DIRECT;
553 case media::AudioOutputFlags::PRIMARY:
554 return AUDIO_OUTPUT_FLAG_PRIMARY;
555 case media::AudioOutputFlags::FAST:
556 return AUDIO_OUTPUT_FLAG_FAST;
557 case media::AudioOutputFlags::DEEP_BUFFER:
558 return AUDIO_OUTPUT_FLAG_DEEP_BUFFER;
559 case media::AudioOutputFlags::COMPRESS_OFFLOAD:
560 return AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD;
561 case media::AudioOutputFlags::NON_BLOCKING:
562 return AUDIO_OUTPUT_FLAG_NON_BLOCKING;
563 case media::AudioOutputFlags::HW_AV_SYNC:
564 return AUDIO_OUTPUT_FLAG_HW_AV_SYNC;
565 case media::AudioOutputFlags::TTS:
566 return AUDIO_OUTPUT_FLAG_TTS;
567 case media::AudioOutputFlags::RAW:
568 return AUDIO_OUTPUT_FLAG_RAW;
569 case media::AudioOutputFlags::SYNC:
570 return AUDIO_OUTPUT_FLAG_SYNC;
571 case media::AudioOutputFlags::IEC958_NONAUDIO:
572 return AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO;
573 case media::AudioOutputFlags::DIRECT_PCM:
574 return AUDIO_OUTPUT_FLAG_DIRECT_PCM;
575 case media::AudioOutputFlags::MMAP_NOIRQ:
576 return AUDIO_OUTPUT_FLAG_MMAP_NOIRQ;
577 case media::AudioOutputFlags::VOIP_RX:
578 return AUDIO_OUTPUT_FLAG_VOIP_RX;
579 case media::AudioOutputFlags::INCALL_MUSIC:
580 return AUDIO_OUTPUT_FLAG_INCALL_MUSIC;
Eric Laurent90fe31c2020-11-26 20:06:35 +0100581 case media::AudioOutputFlags::GAPLESS_OFFLOAD:
582 return AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700583 }
Andy Hung3f69c162020-12-09 12:08:48 -0800584 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700585}
586
587ConversionResult<media::AudioOutputFlags> legacy2aidl_audio_output_flags_t_AudioOutputFlags(
588 audio_output_flags_t legacy) {
589 switch (legacy) {
Andy Hung3f69c162020-12-09 12:08:48 -0800590 case AUDIO_OUTPUT_FLAG_NONE:
591 break; // shouldn't get here. must be listed -Werror,-Wswitch
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700592 case AUDIO_OUTPUT_FLAG_DIRECT:
593 return media::AudioOutputFlags::DIRECT;
594 case AUDIO_OUTPUT_FLAG_PRIMARY:
595 return media::AudioOutputFlags::PRIMARY;
596 case AUDIO_OUTPUT_FLAG_FAST:
597 return media::AudioOutputFlags::FAST;
598 case AUDIO_OUTPUT_FLAG_DEEP_BUFFER:
599 return media::AudioOutputFlags::DEEP_BUFFER;
600 case AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD:
601 return media::AudioOutputFlags::COMPRESS_OFFLOAD;
602 case AUDIO_OUTPUT_FLAG_NON_BLOCKING:
603 return media::AudioOutputFlags::NON_BLOCKING;
604 case AUDIO_OUTPUT_FLAG_HW_AV_SYNC:
605 return media::AudioOutputFlags::HW_AV_SYNC;
606 case AUDIO_OUTPUT_FLAG_TTS:
607 return media::AudioOutputFlags::TTS;
608 case AUDIO_OUTPUT_FLAG_RAW:
609 return media::AudioOutputFlags::RAW;
610 case AUDIO_OUTPUT_FLAG_SYNC:
611 return media::AudioOutputFlags::SYNC;
612 case AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO:
613 return media::AudioOutputFlags::IEC958_NONAUDIO;
614 case AUDIO_OUTPUT_FLAG_DIRECT_PCM:
615 return media::AudioOutputFlags::DIRECT_PCM;
616 case AUDIO_OUTPUT_FLAG_MMAP_NOIRQ:
617 return media::AudioOutputFlags::MMAP_NOIRQ;
618 case AUDIO_OUTPUT_FLAG_VOIP_RX:
619 return media::AudioOutputFlags::VOIP_RX;
620 case AUDIO_OUTPUT_FLAG_INCALL_MUSIC:
621 return media::AudioOutputFlags::INCALL_MUSIC;
Eric Laurent90fe31c2020-11-26 20:06:35 +0100622 case AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD:
623 return media::AudioOutputFlags::GAPLESS_OFFLOAD;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700624 }
Andy Hung3f69c162020-12-09 12:08:48 -0800625 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700626}
627
Andy Hung973638a2020-12-08 20:47:45 -0800628ConversionResult<audio_input_flags_t> aidl2legacy_int32_t_audio_input_flags_t_mask(
629 int32_t aidl) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700630 using LegacyMask = std::underlying_type_t<audio_input_flags_t>;
631
632 LegacyMask converted = VALUE_OR_RETURN(
633 (convertBitmask<LegacyMask, int32_t, audio_input_flags_t, media::AudioInputFlags>(
634 aidl, aidl2legacy_AudioInputFlags_audio_input_flags_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800635 indexToEnum_index<media::AudioInputFlags>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700636 enumToMask_bitmask<LegacyMask, audio_input_flags_t>)));
637 return static_cast<audio_input_flags_t>(converted);
638}
639
Andy Hung973638a2020-12-08 20:47:45 -0800640ConversionResult<int32_t> legacy2aidl_audio_input_flags_t_int32_t_mask(
641 audio_input_flags_t legacy) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700642 using LegacyMask = std::underlying_type_t<audio_input_flags_t>;
643
644 LegacyMask legacyMask = static_cast<LegacyMask>(legacy);
645 return convertBitmask<int32_t, LegacyMask, media::AudioInputFlags, audio_input_flags_t>(
646 legacyMask, legacy2aidl_audio_input_flags_t_AudioInputFlags,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800647 indexToEnum_bitmask<audio_input_flags_t>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700648 enumToMask_index<int32_t, media::AudioInputFlags>);
649}
650
Andy Hung973638a2020-12-08 20:47:45 -0800651ConversionResult<audio_output_flags_t> aidl2legacy_int32_t_audio_output_flags_t_mask(
652 int32_t aidl) {
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700653 return convertBitmask<audio_output_flags_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800654 int32_t,
655 audio_output_flags_t,
656 media::AudioOutputFlags>(
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700657 aidl, aidl2legacy_AudioOutputFlags_audio_output_flags_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800658 indexToEnum_index<media::AudioOutputFlags>,
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700659 enumToMask_bitmask<audio_output_flags_t, audio_output_flags_t>);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700660}
661
Andy Hung973638a2020-12-08 20:47:45 -0800662ConversionResult<int32_t> legacy2aidl_audio_output_flags_t_int32_t_mask(
663 audio_output_flags_t legacy) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700664 using LegacyMask = std::underlying_type_t<audio_output_flags_t>;
665
666 LegacyMask legacyMask = static_cast<LegacyMask>(legacy);
667 return convertBitmask<int32_t, LegacyMask, media::AudioOutputFlags, audio_output_flags_t>(
668 legacyMask, legacy2aidl_audio_output_flags_t_AudioOutputFlags,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800669 indexToEnum_bitmask<audio_output_flags_t>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700670 enumToMask_index<int32_t, media::AudioOutputFlags>);
671}
672
673ConversionResult<audio_io_flags> aidl2legacy_AudioIoFlags_audio_io_flags(
674 const media::AudioIoFlags& aidl, media::AudioPortRole role, media::AudioPortType type) {
675 audio_io_flags legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700676 Direction dir = VALUE_OR_RETURN(direction(role, type));
677 switch (dir) {
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700678 case Direction::INPUT: {
679 legacy.input = VALUE_OR_RETURN(
Andy Hung973638a2020-12-08 20:47:45 -0800680 aidl2legacy_int32_t_audio_input_flags_t_mask(
681 VALUE_OR_RETURN(UNION_GET(aidl, input))));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700682 }
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700683 break;
684
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700685 case Direction::OUTPUT: {
686 legacy.output = VALUE_OR_RETURN(
Andy Hung973638a2020-12-08 20:47:45 -0800687 aidl2legacy_int32_t_audio_output_flags_t_mask(
688 VALUE_OR_RETURN(UNION_GET(aidl, output))));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700689 }
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700690 break;
691 }
692
693 return legacy;
694}
695
696ConversionResult<media::AudioIoFlags> legacy2aidl_audio_io_flags_AudioIoFlags(
697 const audio_io_flags& legacy, audio_port_role_t role, audio_port_type_t type) {
698 media::AudioIoFlags aidl;
699
700 Direction dir = VALUE_OR_RETURN(direction(role, type));
701 switch (dir) {
702 case Direction::INPUT:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700703 UNION_SET(aidl, input,
Andy Hung973638a2020-12-08 20:47:45 -0800704 VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(
705 legacy.input)));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700706 break;
707 case Direction::OUTPUT:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700708 UNION_SET(aidl, output,
Andy Hung973638a2020-12-08 20:47:45 -0800709 VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(
710 legacy.output)));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700711 break;
712 }
713 return aidl;
714}
715
Andy Hung973638a2020-12-08 20:47:45 -0800716ConversionResult<audio_port_config_device_ext>
717aidl2legacy_AudioPortConfigDeviceExt_audio_port_config_device_ext(
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700718 const media::AudioPortConfigDeviceExt& aidl) {
719 audio_port_config_device_ext legacy;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700720 legacy.hw_module = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_module_handle_t(aidl.hwModule));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700721 legacy.type = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_devices_t(aidl.type));
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700722 RETURN_IF_ERROR(aidl2legacy_string(aidl.address, legacy.address, AUDIO_DEVICE_MAX_ADDRESS_LEN));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700723 return legacy;
724}
725
Andy Hung973638a2020-12-08 20:47:45 -0800726ConversionResult<media::AudioPortConfigDeviceExt>
727legacy2aidl_audio_port_config_device_ext_AudioPortConfigDeviceExt(
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700728 const audio_port_config_device_ext& legacy) {
729 media::AudioPortConfigDeviceExt aidl;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700730 aidl.hwModule = VALUE_OR_RETURN(legacy2aidl_audio_module_handle_t_int32_t(legacy.hw_module));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700731 aidl.type = VALUE_OR_RETURN(legacy2aidl_audio_devices_t_int32_t(legacy.type));
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700732 aidl.address = VALUE_OR_RETURN(
733 legacy2aidl_string(legacy.address, AUDIO_DEVICE_MAX_ADDRESS_LEN));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700734 return aidl;
735}
736
737ConversionResult<audio_stream_type_t> aidl2legacy_AudioStreamType_audio_stream_type_t(
738 media::AudioStreamType aidl) {
739 switch (aidl) {
740 case media::AudioStreamType::DEFAULT:
741 return AUDIO_STREAM_DEFAULT;
742 case media::AudioStreamType::VOICE_CALL:
743 return AUDIO_STREAM_VOICE_CALL;
744 case media::AudioStreamType::SYSTEM:
745 return AUDIO_STREAM_SYSTEM;
746 case media::AudioStreamType::RING:
747 return AUDIO_STREAM_RING;
748 case media::AudioStreamType::MUSIC:
749 return AUDIO_STREAM_MUSIC;
750 case media::AudioStreamType::ALARM:
751 return AUDIO_STREAM_ALARM;
752 case media::AudioStreamType::NOTIFICATION:
753 return AUDIO_STREAM_NOTIFICATION;
754 case media::AudioStreamType::BLUETOOTH_SCO:
755 return AUDIO_STREAM_BLUETOOTH_SCO;
756 case media::AudioStreamType::ENFORCED_AUDIBLE:
757 return AUDIO_STREAM_ENFORCED_AUDIBLE;
758 case media::AudioStreamType::DTMF:
759 return AUDIO_STREAM_DTMF;
760 case media::AudioStreamType::TTS:
761 return AUDIO_STREAM_TTS;
762 case media::AudioStreamType::ACCESSIBILITY:
763 return AUDIO_STREAM_ACCESSIBILITY;
764 case media::AudioStreamType::ASSISTANT:
765 return AUDIO_STREAM_ASSISTANT;
766 case media::AudioStreamType::REROUTING:
767 return AUDIO_STREAM_REROUTING;
768 case media::AudioStreamType::PATCH:
769 return AUDIO_STREAM_PATCH;
770 case media::AudioStreamType::CALL_ASSISTANT:
771 return AUDIO_STREAM_CALL_ASSISTANT;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700772 }
Andy Hung3f69c162020-12-09 12:08:48 -0800773 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700774}
775
776ConversionResult<media::AudioStreamType> legacy2aidl_audio_stream_type_t_AudioStreamType(
777 audio_stream_type_t legacy) {
778 switch (legacy) {
779 case AUDIO_STREAM_DEFAULT:
780 return media::AudioStreamType::DEFAULT;
781 case AUDIO_STREAM_VOICE_CALL:
782 return media::AudioStreamType::VOICE_CALL;
783 case AUDIO_STREAM_SYSTEM:
784 return media::AudioStreamType::SYSTEM;
785 case AUDIO_STREAM_RING:
786 return media::AudioStreamType::RING;
787 case AUDIO_STREAM_MUSIC:
788 return media::AudioStreamType::MUSIC;
789 case AUDIO_STREAM_ALARM:
790 return media::AudioStreamType::ALARM;
791 case AUDIO_STREAM_NOTIFICATION:
792 return media::AudioStreamType::NOTIFICATION;
793 case AUDIO_STREAM_BLUETOOTH_SCO:
794 return media::AudioStreamType::BLUETOOTH_SCO;
795 case AUDIO_STREAM_ENFORCED_AUDIBLE:
796 return media::AudioStreamType::ENFORCED_AUDIBLE;
797 case AUDIO_STREAM_DTMF:
798 return media::AudioStreamType::DTMF;
799 case AUDIO_STREAM_TTS:
800 return media::AudioStreamType::TTS;
801 case AUDIO_STREAM_ACCESSIBILITY:
802 return media::AudioStreamType::ACCESSIBILITY;
803 case AUDIO_STREAM_ASSISTANT:
804 return media::AudioStreamType::ASSISTANT;
805 case AUDIO_STREAM_REROUTING:
806 return media::AudioStreamType::REROUTING;
807 case AUDIO_STREAM_PATCH:
808 return media::AudioStreamType::PATCH;
809 case AUDIO_STREAM_CALL_ASSISTANT:
810 return media::AudioStreamType::CALL_ASSISTANT;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700811 }
Andy Hung3f69c162020-12-09 12:08:48 -0800812 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700813}
814
815ConversionResult<audio_source_t> aidl2legacy_AudioSourceType_audio_source_t(
816 media::AudioSourceType aidl) {
817 switch (aidl) {
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800818 case media::AudioSourceType::INVALID:
819 // This value does not have an enum
820 return AUDIO_SOURCE_INVALID;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700821 case media::AudioSourceType::DEFAULT:
822 return AUDIO_SOURCE_DEFAULT;
823 case media::AudioSourceType::MIC:
824 return AUDIO_SOURCE_MIC;
825 case media::AudioSourceType::VOICE_UPLINK:
826 return AUDIO_SOURCE_VOICE_UPLINK;
827 case media::AudioSourceType::VOICE_DOWNLINK:
828 return AUDIO_SOURCE_VOICE_DOWNLINK;
829 case media::AudioSourceType::VOICE_CALL:
830 return AUDIO_SOURCE_VOICE_CALL;
831 case media::AudioSourceType::CAMCORDER:
832 return AUDIO_SOURCE_CAMCORDER;
833 case media::AudioSourceType::VOICE_RECOGNITION:
834 return AUDIO_SOURCE_VOICE_RECOGNITION;
835 case media::AudioSourceType::VOICE_COMMUNICATION:
836 return AUDIO_SOURCE_VOICE_COMMUNICATION;
837 case media::AudioSourceType::REMOTE_SUBMIX:
838 return AUDIO_SOURCE_REMOTE_SUBMIX;
839 case media::AudioSourceType::UNPROCESSED:
840 return AUDIO_SOURCE_UNPROCESSED;
841 case media::AudioSourceType::VOICE_PERFORMANCE:
842 return AUDIO_SOURCE_VOICE_PERFORMANCE;
843 case media::AudioSourceType::ECHO_REFERENCE:
844 return AUDIO_SOURCE_ECHO_REFERENCE;
845 case media::AudioSourceType::FM_TUNER:
846 return AUDIO_SOURCE_FM_TUNER;
847 case media::AudioSourceType::HOTWORD:
848 return AUDIO_SOURCE_HOTWORD;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700849 }
Andy Hung3f69c162020-12-09 12:08:48 -0800850 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700851}
852
853ConversionResult<media::AudioSourceType> legacy2aidl_audio_source_t_AudioSourceType(
854 audio_source_t legacy) {
855 switch (legacy) {
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800856 case AUDIO_SOURCE_INVALID:
857 return media::AudioSourceType::INVALID;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700858 case AUDIO_SOURCE_DEFAULT:
859 return media::AudioSourceType::DEFAULT;
860 case AUDIO_SOURCE_MIC:
861 return media::AudioSourceType::MIC;
862 case AUDIO_SOURCE_VOICE_UPLINK:
863 return media::AudioSourceType::VOICE_UPLINK;
864 case AUDIO_SOURCE_VOICE_DOWNLINK:
865 return media::AudioSourceType::VOICE_DOWNLINK;
866 case AUDIO_SOURCE_VOICE_CALL:
867 return media::AudioSourceType::VOICE_CALL;
868 case AUDIO_SOURCE_CAMCORDER:
869 return media::AudioSourceType::CAMCORDER;
870 case AUDIO_SOURCE_VOICE_RECOGNITION:
871 return media::AudioSourceType::VOICE_RECOGNITION;
872 case AUDIO_SOURCE_VOICE_COMMUNICATION:
873 return media::AudioSourceType::VOICE_COMMUNICATION;
874 case AUDIO_SOURCE_REMOTE_SUBMIX:
875 return media::AudioSourceType::REMOTE_SUBMIX;
876 case AUDIO_SOURCE_UNPROCESSED:
877 return media::AudioSourceType::UNPROCESSED;
878 case AUDIO_SOURCE_VOICE_PERFORMANCE:
879 return media::AudioSourceType::VOICE_PERFORMANCE;
880 case AUDIO_SOURCE_ECHO_REFERENCE:
881 return media::AudioSourceType::ECHO_REFERENCE;
882 case AUDIO_SOURCE_FM_TUNER:
883 return media::AudioSourceType::FM_TUNER;
884 case AUDIO_SOURCE_HOTWORD:
885 return media::AudioSourceType::HOTWORD;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700886 }
Andy Hung3f69c162020-12-09 12:08:48 -0800887 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700888}
889
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800890ConversionResult<audio_session_t> aidl2legacy_int32_t_audio_session_t(int32_t aidl) {
891 return convertReinterpret<audio_session_t>(aidl);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700892}
893
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800894ConversionResult<int32_t> legacy2aidl_audio_session_t_int32_t(audio_session_t legacy) {
895 return convertReinterpret<int32_t>(legacy);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700896}
897
898// This type is unnamed in the original definition, thus we name it here.
899using audio_port_config_mix_ext_usecase = decltype(audio_port_config_mix_ext::usecase);
900
901ConversionResult<audio_port_config_mix_ext_usecase> aidl2legacy_AudioPortConfigMixExtUseCase(
902 const media::AudioPortConfigMixExtUseCase& aidl, media::AudioPortRole role) {
903 audio_port_config_mix_ext_usecase legacy;
904
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700905 switch (role) {
906 case media::AudioPortRole::NONE:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700907 // Just verify that the union is empty.
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800908 VALUE_OR_RETURN(UNION_GET(aidl, unspecified));
Andy Hung3f69c162020-12-09 12:08:48 -0800909 return legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700910
911 case media::AudioPortRole::SOURCE:
912 // This is not a bug. A SOURCE role corresponds to the stream field.
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700913 legacy.stream = VALUE_OR_RETURN(aidl2legacy_AudioStreamType_audio_stream_type_t(
914 VALUE_OR_RETURN(UNION_GET(aidl, stream))));
Andy Hung3f69c162020-12-09 12:08:48 -0800915 return legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700916
917 case media::AudioPortRole::SINK:
918 // This is not a bug. A SINK role corresponds to the source field.
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700919 legacy.source = VALUE_OR_RETURN(aidl2legacy_AudioSourceType_audio_source_t(
920 VALUE_OR_RETURN(UNION_GET(aidl, source))));
Andy Hung3f69c162020-12-09 12:08:48 -0800921 return legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700922 }
Andy Hung3f69c162020-12-09 12:08:48 -0800923 LOG_ALWAYS_FATAL("Shouldn't get here"); // with -Werror,-Wswitch may compile-time fail
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700924}
925
926ConversionResult<media::AudioPortConfigMixExtUseCase> legacy2aidl_AudioPortConfigMixExtUseCase(
927 const audio_port_config_mix_ext_usecase& legacy, audio_port_role_t role) {
928 media::AudioPortConfigMixExtUseCase aidl;
929
930 switch (role) {
931 case AUDIO_PORT_ROLE_NONE:
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800932 UNION_SET(aidl, unspecified, false);
Andy Hung3f69c162020-12-09 12:08:48 -0800933 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700934 case AUDIO_PORT_ROLE_SOURCE:
935 // This is not a bug. A SOURCE role corresponds to the stream field.
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700936 UNION_SET(aidl, stream, VALUE_OR_RETURN(
937 legacy2aidl_audio_stream_type_t_AudioStreamType(legacy.stream)));
Andy Hung3f69c162020-12-09 12:08:48 -0800938 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700939 case AUDIO_PORT_ROLE_SINK:
940 // This is not a bug. A SINK role corresponds to the source field.
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700941 UNION_SET(aidl, source,
942 VALUE_OR_RETURN(legacy2aidl_audio_source_t_AudioSourceType(legacy.source)));
Andy Hung3f69c162020-12-09 12:08:48 -0800943 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700944 }
Andy Hung3f69c162020-12-09 12:08:48 -0800945 LOG_ALWAYS_FATAL("Shouldn't get here"); // with -Werror,-Wswitch may compile-time fail
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700946}
947
948ConversionResult<audio_port_config_mix_ext> aidl2legacy_AudioPortConfigMixExt(
949 const media::AudioPortConfigMixExt& aidl, media::AudioPortRole role) {
950 audio_port_config_mix_ext legacy;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700951 legacy.hw_module = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_module_handle_t(aidl.hwModule));
952 legacy.handle = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.handle));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700953 legacy.usecase = VALUE_OR_RETURN(aidl2legacy_AudioPortConfigMixExtUseCase(aidl.usecase, role));
954 return legacy;
955}
956
957ConversionResult<media::AudioPortConfigMixExt> legacy2aidl_AudioPortConfigMixExt(
958 const audio_port_config_mix_ext& legacy, audio_port_role_t role) {
959 media::AudioPortConfigMixExt aidl;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700960 aidl.hwModule = VALUE_OR_RETURN(legacy2aidl_audio_module_handle_t_int32_t(legacy.hw_module));
961 aidl.handle = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(legacy.handle));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700962 aidl.usecase = VALUE_OR_RETURN(legacy2aidl_AudioPortConfigMixExtUseCase(legacy.usecase, role));
963 return aidl;
964}
965
Andy Hung973638a2020-12-08 20:47:45 -0800966ConversionResult<audio_port_config_session_ext>
967aidl2legacy_AudioPortConfigSessionExt_audio_port_config_session_ext(
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700968 const media::AudioPortConfigSessionExt& aidl) {
969 audio_port_config_session_ext legacy;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800970 legacy.session = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.session));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700971 return legacy;
972}
973
Andy Hung973638a2020-12-08 20:47:45 -0800974ConversionResult<media::AudioPortConfigSessionExt>
975legacy2aidl_audio_port_config_session_ext_AudioPortConfigSessionExt(
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700976 const audio_port_config_session_ext& legacy) {
977 media::AudioPortConfigSessionExt aidl;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800978 aidl.session = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(legacy.session));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700979 return aidl;
980}
981
982// This type is unnamed in the original definition, thus we name it here.
983using audio_port_config_ext = decltype(audio_port_config::ext);
984
985ConversionResult<audio_port_config_ext> aidl2legacy_AudioPortConfigExt(
986 const media::AudioPortConfigExt& aidl, media::AudioPortType type,
987 media::AudioPortRole role) {
988 audio_port_config_ext legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700989 switch (type) {
990 case media::AudioPortType::NONE:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700991 // Just verify that the union is empty.
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800992 VALUE_OR_RETURN(UNION_GET(aidl, unspecified));
Andy Hung3f69c162020-12-09 12:08:48 -0800993 return legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700994 case media::AudioPortType::DEVICE:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700995 legacy.device = VALUE_OR_RETURN(
Andy Hung973638a2020-12-08 20:47:45 -0800996 aidl2legacy_AudioPortConfigDeviceExt_audio_port_config_device_ext(
997 VALUE_OR_RETURN(UNION_GET(aidl, device))));
Andy Hung3f69c162020-12-09 12:08:48 -0800998 return legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700999 case media::AudioPortType::MIX:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001000 legacy.mix = VALUE_OR_RETURN(
1001 aidl2legacy_AudioPortConfigMixExt(VALUE_OR_RETURN(UNION_GET(aidl, mix)), role));
Andy Hung3f69c162020-12-09 12:08:48 -08001002 return legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001003 case media::AudioPortType::SESSION:
Andy Hung973638a2020-12-08 20:47:45 -08001004 legacy.session = VALUE_OR_RETURN(
1005 aidl2legacy_AudioPortConfigSessionExt_audio_port_config_session_ext(
1006 VALUE_OR_RETURN(UNION_GET(aidl, session))));
Andy Hung3f69c162020-12-09 12:08:48 -08001007 return legacy;
1008
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001009 }
Andy Hung3f69c162020-12-09 12:08:48 -08001010 LOG_ALWAYS_FATAL("Shouldn't get here"); // with -Werror,-Wswitch may compile-time fail
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001011}
1012
1013ConversionResult<media::AudioPortConfigExt> legacy2aidl_AudioPortConfigExt(
1014 const audio_port_config_ext& legacy, audio_port_type_t type, audio_port_role_t role) {
1015 media::AudioPortConfigExt aidl;
1016
1017 switch (type) {
1018 case AUDIO_PORT_TYPE_NONE:
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001019 UNION_SET(aidl, unspecified, false);
Andy Hung3f69c162020-12-09 12:08:48 -08001020 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001021 case AUDIO_PORT_TYPE_DEVICE:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001022 UNION_SET(aidl, device,
Andy Hung973638a2020-12-08 20:47:45 -08001023 VALUE_OR_RETURN(
1024 legacy2aidl_audio_port_config_device_ext_AudioPortConfigDeviceExt(
1025 legacy.device)));
Andy Hung3f69c162020-12-09 12:08:48 -08001026 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001027 case AUDIO_PORT_TYPE_MIX:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001028 UNION_SET(aidl, mix,
1029 VALUE_OR_RETURN(legacy2aidl_AudioPortConfigMixExt(legacy.mix, role)));
Andy Hung3f69c162020-12-09 12:08:48 -08001030 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001031 case AUDIO_PORT_TYPE_SESSION:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001032 UNION_SET(aidl, session,
Andy Hung973638a2020-12-08 20:47:45 -08001033 VALUE_OR_RETURN(
1034 legacy2aidl_audio_port_config_session_ext_AudioPortConfigSessionExt(
1035 legacy.session)));
Andy Hung3f69c162020-12-09 12:08:48 -08001036 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001037 }
Andy Hung3f69c162020-12-09 12:08:48 -08001038 LOG_ALWAYS_FATAL("Shouldn't get here"); // with -Werror,-Wswitch may compile-time fail
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001039}
1040
1041ConversionResult<audio_port_config> aidl2legacy_AudioPortConfig_audio_port_config(
1042 const media::AudioPortConfig& aidl) {
1043 audio_port_config legacy;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001044 legacy.id = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.id));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001045 legacy.role = VALUE_OR_RETURN(aidl2legacy_AudioPortRole_audio_port_role_t(aidl.role));
1046 legacy.type = VALUE_OR_RETURN(aidl2legacy_AudioPortType_audio_port_type_t(aidl.type));
1047 legacy.config_mask = VALUE_OR_RETURN(aidl2legacy_int32_t_config_mask(aidl.configMask));
1048 if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::SAMPLE_RATE)) {
1049 legacy.sample_rate = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.sampleRate));
1050 }
1051 if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::CHANNEL_MASK)) {
1052 legacy.channel_mask =
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001053 VALUE_OR_RETURN(
1054 aidl2legacy_AudioChannelMask_audio_channel_mask_t(aidl.channelMask));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001055 }
1056 if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::FORMAT)) {
1057 legacy.format = VALUE_OR_RETURN(aidl2legacy_AudioFormat_audio_format_t(aidl.format));
1058 }
1059 if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::GAIN)) {
1060 legacy.gain = VALUE_OR_RETURN(
1061 aidl2legacy_AudioGainConfig_audio_gain_config(aidl.gain, aidl.role, aidl.type));
1062 }
1063 if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::FLAGS)) {
1064 legacy.flags = VALUE_OR_RETURN(
1065 aidl2legacy_AudioIoFlags_audio_io_flags(aidl.flags, aidl.role, aidl.type));
1066 }
1067 legacy.ext = VALUE_OR_RETURN(aidl2legacy_AudioPortConfigExt(aidl.ext, aidl.type, aidl.role));
1068 return legacy;
1069}
1070
1071ConversionResult<media::AudioPortConfig> legacy2aidl_audio_port_config_AudioPortConfig(
1072 const audio_port_config& legacy) {
1073 media::AudioPortConfig aidl;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001074 aidl.id = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(legacy.id));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001075 aidl.role = VALUE_OR_RETURN(legacy2aidl_audio_port_role_t_AudioPortRole(legacy.role));
1076 aidl.type = VALUE_OR_RETURN(legacy2aidl_audio_port_type_t_AudioPortType(legacy.type));
1077 aidl.configMask = VALUE_OR_RETURN(legacy2aidl_config_mask_int32_t(legacy.config_mask));
1078 if (legacy.config_mask & AUDIO_PORT_CONFIG_SAMPLE_RATE) {
1079 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.sample_rate));
1080 }
1081 if (legacy.config_mask & AUDIO_PORT_CONFIG_CHANNEL_MASK) {
1082 aidl.channelMask =
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001083 VALUE_OR_RETURN(
1084 legacy2aidl_audio_channel_mask_t_AudioChannelMask(legacy.channel_mask));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001085 }
1086 if (legacy.config_mask & AUDIO_PORT_CONFIG_FORMAT) {
1087 aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormat(legacy.format));
1088 }
1089 if (legacy.config_mask & AUDIO_PORT_CONFIG_GAIN) {
1090 aidl.gain = VALUE_OR_RETURN(legacy2aidl_audio_gain_config_AudioGainConfig(
1091 legacy.gain, legacy.role, legacy.type));
1092 }
1093 if (legacy.config_mask & AUDIO_PORT_CONFIG_FLAGS) {
1094 aidl.flags = VALUE_OR_RETURN(
1095 legacy2aidl_audio_io_flags_AudioIoFlags(legacy.flags, legacy.role, legacy.type));
1096 }
1097 aidl.ext =
1098 VALUE_OR_RETURN(legacy2aidl_AudioPortConfigExt(legacy.ext, legacy.type, legacy.role));
1099 return aidl;
1100}
1101
1102ConversionResult<struct audio_patch> aidl2legacy_AudioPatch_audio_patch(
1103 const media::AudioPatch& aidl) {
1104 struct audio_patch legacy;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001105 legacy.id = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_patch_handle_t(aidl.id));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001106 legacy.num_sinks = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.sinks.size()));
1107 if (legacy.num_sinks > AUDIO_PATCH_PORTS_MAX) {
1108 return unexpected(BAD_VALUE);
1109 }
1110 for (size_t i = 0; i < legacy.num_sinks; ++i) {
1111 legacy.sinks[i] =
1112 VALUE_OR_RETURN(aidl2legacy_AudioPortConfig_audio_port_config(aidl.sinks[i]));
1113 }
1114 legacy.num_sources = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.sources.size()));
1115 if (legacy.num_sources > AUDIO_PATCH_PORTS_MAX) {
1116 return unexpected(BAD_VALUE);
1117 }
1118 for (size_t i = 0; i < legacy.num_sources; ++i) {
1119 legacy.sources[i] =
1120 VALUE_OR_RETURN(aidl2legacy_AudioPortConfig_audio_port_config(aidl.sources[i]));
1121 }
1122 return legacy;
1123}
1124
1125ConversionResult<media::AudioPatch> legacy2aidl_audio_patch_AudioPatch(
1126 const struct audio_patch& legacy) {
1127 media::AudioPatch aidl;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001128 aidl.id = VALUE_OR_RETURN(legacy2aidl_audio_patch_handle_t_int32_t(legacy.id));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001129
1130 if (legacy.num_sinks > AUDIO_PATCH_PORTS_MAX) {
1131 return unexpected(BAD_VALUE);
1132 }
1133 for (unsigned int i = 0; i < legacy.num_sinks; ++i) {
1134 aidl.sinks.push_back(
1135 VALUE_OR_RETURN(legacy2aidl_audio_port_config_AudioPortConfig(legacy.sinks[i])));
1136 }
1137 if (legacy.num_sources > AUDIO_PATCH_PORTS_MAX) {
1138 return unexpected(BAD_VALUE);
1139 }
1140 for (unsigned int i = 0; i < legacy.num_sources; ++i) {
1141 aidl.sources.push_back(
1142 VALUE_OR_RETURN(legacy2aidl_audio_port_config_AudioPortConfig(legacy.sources[i])));
1143 }
1144 return aidl;
1145}
1146
1147ConversionResult<sp<AudioIoDescriptor>> aidl2legacy_AudioIoDescriptor_AudioIoDescriptor(
1148 const media::AudioIoDescriptor& aidl) {
1149 sp<AudioIoDescriptor> legacy(new AudioIoDescriptor());
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001150 legacy->mIoHandle = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.ioHandle));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001151 legacy->mPatch = VALUE_OR_RETURN(aidl2legacy_AudioPatch_audio_patch(aidl.patch));
1152 legacy->mSamplingRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.samplingRate));
1153 legacy->mFormat = VALUE_OR_RETURN(aidl2legacy_AudioFormat_audio_format_t(aidl.format));
1154 legacy->mChannelMask =
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001155 VALUE_OR_RETURN(aidl2legacy_AudioChannelMask_audio_channel_mask_t(aidl.channelMask));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001156 legacy->mFrameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
1157 legacy->mFrameCountHAL = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCountHAL));
1158 legacy->mLatency = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.latency));
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001159 legacy->mPortId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001160 return legacy;
1161}
1162
1163ConversionResult<media::AudioIoDescriptor> legacy2aidl_AudioIoDescriptor_AudioIoDescriptor(
1164 const sp<AudioIoDescriptor>& legacy) {
1165 media::AudioIoDescriptor aidl;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001166 aidl.ioHandle = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(legacy->mIoHandle));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001167 aidl.patch = VALUE_OR_RETURN(legacy2aidl_audio_patch_AudioPatch(legacy->mPatch));
1168 aidl.samplingRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy->mSamplingRate));
1169 aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormat(legacy->mFormat));
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001170 aidl.channelMask = VALUE_OR_RETURN(
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001171 legacy2aidl_audio_channel_mask_t_AudioChannelMask(legacy->mChannelMask));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001172 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(legacy->mFrameCount));
1173 aidl.frameCountHAL = VALUE_OR_RETURN(convertIntegral<int64_t>(legacy->mFrameCountHAL));
1174 aidl.latency = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy->mLatency));
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001175 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(legacy->mPortId));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001176 return aidl;
1177}
1178
Andy Hung973638a2020-12-08 20:47:45 -08001179ConversionResult<AudioClient> aidl2legacy_AudioClient_AudioClient(
1180 const media::AudioClient& aidl) {
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001181 AudioClient legacy;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001182 legacy.clientTid = VALUE_OR_RETURN(aidl2legacy_int32_t_pid_t(aidl.clientTid));
Svet Ganov3e5f14f2021-05-13 22:51:08 +00001183 legacy.attributionSource = aidl.attributionSource;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001184 return legacy;
1185}
1186
Andy Hung973638a2020-12-08 20:47:45 -08001187ConversionResult<media::AudioClient> legacy2aidl_AudioClient_AudioClient(
1188 const AudioClient& legacy) {
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001189 media::AudioClient aidl;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001190 aidl.clientTid = VALUE_OR_RETURN(legacy2aidl_pid_t_int32_t(legacy.clientTid));
Svet Ganov3e5f14f2021-05-13 22:51:08 +00001191 aidl.attributionSource = legacy.attributionSource;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001192 return aidl;
1193}
1194
1195ConversionResult<audio_content_type_t>
1196aidl2legacy_AudioContentType_audio_content_type_t(media::AudioContentType aidl) {
1197 switch (aidl) {
1198 case media::AudioContentType::UNKNOWN:
1199 return AUDIO_CONTENT_TYPE_UNKNOWN;
1200 case media::AudioContentType::SPEECH:
1201 return AUDIO_CONTENT_TYPE_SPEECH;
1202 case media::AudioContentType::MUSIC:
1203 return AUDIO_CONTENT_TYPE_MUSIC;
1204 case media::AudioContentType::MOVIE:
1205 return AUDIO_CONTENT_TYPE_MOVIE;
1206 case media::AudioContentType::SONIFICATION:
1207 return AUDIO_CONTENT_TYPE_SONIFICATION;
1208 }
1209 return unexpected(BAD_VALUE);
1210}
1211
1212ConversionResult<media::AudioContentType>
1213legacy2aidl_audio_content_type_t_AudioContentType(audio_content_type_t legacy) {
1214 switch (legacy) {
1215 case AUDIO_CONTENT_TYPE_UNKNOWN:
1216 return media::AudioContentType::UNKNOWN;
1217 case AUDIO_CONTENT_TYPE_SPEECH:
1218 return media::AudioContentType::SPEECH;
1219 case AUDIO_CONTENT_TYPE_MUSIC:
1220 return media::AudioContentType::MUSIC;
1221 case AUDIO_CONTENT_TYPE_MOVIE:
1222 return media::AudioContentType::MOVIE;
1223 case AUDIO_CONTENT_TYPE_SONIFICATION:
1224 return media::AudioContentType::SONIFICATION;
1225 }
1226 return unexpected(BAD_VALUE);
1227}
1228
1229ConversionResult<audio_usage_t>
1230aidl2legacy_AudioUsage_audio_usage_t(media::AudioUsage aidl) {
1231 switch (aidl) {
1232 case media::AudioUsage::UNKNOWN:
1233 return AUDIO_USAGE_UNKNOWN;
1234 case media::AudioUsage::MEDIA:
1235 return AUDIO_USAGE_MEDIA;
1236 case media::AudioUsage::VOICE_COMMUNICATION:
1237 return AUDIO_USAGE_VOICE_COMMUNICATION;
1238 case media::AudioUsage::VOICE_COMMUNICATION_SIGNALLING:
1239 return AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING;
1240 case media::AudioUsage::ALARM:
1241 return AUDIO_USAGE_ALARM;
1242 case media::AudioUsage::NOTIFICATION:
1243 return AUDIO_USAGE_NOTIFICATION;
1244 case media::AudioUsage::NOTIFICATION_TELEPHONY_RINGTONE:
1245 return AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE;
1246 case media::AudioUsage::NOTIFICATION_COMMUNICATION_REQUEST:
1247 return AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST;
1248 case media::AudioUsage::NOTIFICATION_COMMUNICATION_INSTANT:
1249 return AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT;
1250 case media::AudioUsage::NOTIFICATION_COMMUNICATION_DELAYED:
1251 return AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED;
1252 case media::AudioUsage::NOTIFICATION_EVENT:
1253 return AUDIO_USAGE_NOTIFICATION_EVENT;
1254 case media::AudioUsage::ASSISTANCE_ACCESSIBILITY:
1255 return AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY;
1256 case media::AudioUsage::ASSISTANCE_NAVIGATION_GUIDANCE:
1257 return AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE;
1258 case media::AudioUsage::ASSISTANCE_SONIFICATION:
1259 return AUDIO_USAGE_ASSISTANCE_SONIFICATION;
1260 case media::AudioUsage::GAME:
1261 return AUDIO_USAGE_GAME;
1262 case media::AudioUsage::VIRTUAL_SOURCE:
1263 return AUDIO_USAGE_VIRTUAL_SOURCE;
1264 case media::AudioUsage::ASSISTANT:
1265 return AUDIO_USAGE_ASSISTANT;
1266 case media::AudioUsage::CALL_ASSISTANT:
1267 return AUDIO_USAGE_CALL_ASSISTANT;
1268 case media::AudioUsage::EMERGENCY:
1269 return AUDIO_USAGE_EMERGENCY;
1270 case media::AudioUsage::SAFETY:
1271 return AUDIO_USAGE_SAFETY;
1272 case media::AudioUsage::VEHICLE_STATUS:
1273 return AUDIO_USAGE_VEHICLE_STATUS;
1274 case media::AudioUsage::ANNOUNCEMENT:
1275 return AUDIO_USAGE_ANNOUNCEMENT;
1276 }
1277 return unexpected(BAD_VALUE);
1278}
1279
1280ConversionResult<media::AudioUsage>
1281legacy2aidl_audio_usage_t_AudioUsage(audio_usage_t legacy) {
1282 switch (legacy) {
1283 case AUDIO_USAGE_UNKNOWN:
1284 return media::AudioUsage::UNKNOWN;
1285 case AUDIO_USAGE_MEDIA:
1286 return media::AudioUsage::MEDIA;
1287 case AUDIO_USAGE_VOICE_COMMUNICATION:
1288 return media::AudioUsage::VOICE_COMMUNICATION;
1289 case AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING:
1290 return media::AudioUsage::VOICE_COMMUNICATION_SIGNALLING;
1291 case AUDIO_USAGE_ALARM:
1292 return media::AudioUsage::ALARM;
1293 case AUDIO_USAGE_NOTIFICATION:
1294 return media::AudioUsage::NOTIFICATION;
1295 case AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE:
1296 return media::AudioUsage::NOTIFICATION_TELEPHONY_RINGTONE;
1297 case AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST:
1298 return media::AudioUsage::NOTIFICATION_COMMUNICATION_REQUEST;
1299 case AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT:
1300 return media::AudioUsage::NOTIFICATION_COMMUNICATION_INSTANT;
1301 case AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED:
1302 return media::AudioUsage::NOTIFICATION_COMMUNICATION_DELAYED;
1303 case AUDIO_USAGE_NOTIFICATION_EVENT:
1304 return media::AudioUsage::NOTIFICATION_EVENT;
1305 case AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY:
1306 return media::AudioUsage::ASSISTANCE_ACCESSIBILITY;
1307 case AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE:
1308 return media::AudioUsage::ASSISTANCE_NAVIGATION_GUIDANCE;
1309 case AUDIO_USAGE_ASSISTANCE_SONIFICATION:
1310 return media::AudioUsage::ASSISTANCE_SONIFICATION;
1311 case AUDIO_USAGE_GAME:
1312 return media::AudioUsage::GAME;
1313 case AUDIO_USAGE_VIRTUAL_SOURCE:
1314 return media::AudioUsage::VIRTUAL_SOURCE;
1315 case AUDIO_USAGE_ASSISTANT:
1316 return media::AudioUsage::ASSISTANT;
1317 case AUDIO_USAGE_CALL_ASSISTANT:
1318 return media::AudioUsage::CALL_ASSISTANT;
1319 case AUDIO_USAGE_EMERGENCY:
1320 return media::AudioUsage::EMERGENCY;
1321 case AUDIO_USAGE_SAFETY:
1322 return media::AudioUsage::SAFETY;
1323 case AUDIO_USAGE_VEHICLE_STATUS:
1324 return media::AudioUsage::VEHICLE_STATUS;
1325 case AUDIO_USAGE_ANNOUNCEMENT:
1326 return media::AudioUsage::ANNOUNCEMENT;
1327 }
1328 return unexpected(BAD_VALUE);
1329}
1330
1331ConversionResult<audio_flags_mask_t>
1332aidl2legacy_AudioFlag_audio_flags_mask_t(media::AudioFlag aidl) {
1333 switch (aidl) {
1334 case media::AudioFlag::AUDIBILITY_ENFORCED:
1335 return AUDIO_FLAG_AUDIBILITY_ENFORCED;
1336 case media::AudioFlag::SECURE:
1337 return AUDIO_FLAG_SECURE;
1338 case media::AudioFlag::SCO:
1339 return AUDIO_FLAG_SCO;
1340 case media::AudioFlag::BEACON:
1341 return AUDIO_FLAG_BEACON;
1342 case media::AudioFlag::HW_AV_SYNC:
1343 return AUDIO_FLAG_HW_AV_SYNC;
1344 case media::AudioFlag::HW_HOTWORD:
1345 return AUDIO_FLAG_HW_HOTWORD;
1346 case media::AudioFlag::BYPASS_INTERRUPTION_POLICY:
1347 return AUDIO_FLAG_BYPASS_INTERRUPTION_POLICY;
1348 case media::AudioFlag::BYPASS_MUTE:
1349 return AUDIO_FLAG_BYPASS_MUTE;
1350 case media::AudioFlag::LOW_LATENCY:
1351 return AUDIO_FLAG_LOW_LATENCY;
1352 case media::AudioFlag::DEEP_BUFFER:
1353 return AUDIO_FLAG_DEEP_BUFFER;
1354 case media::AudioFlag::NO_MEDIA_PROJECTION:
1355 return AUDIO_FLAG_NO_MEDIA_PROJECTION;
1356 case media::AudioFlag::MUTE_HAPTIC:
1357 return AUDIO_FLAG_MUTE_HAPTIC;
1358 case media::AudioFlag::NO_SYSTEM_CAPTURE:
1359 return AUDIO_FLAG_NO_SYSTEM_CAPTURE;
1360 case media::AudioFlag::CAPTURE_PRIVATE:
1361 return AUDIO_FLAG_CAPTURE_PRIVATE;
1362 }
1363 return unexpected(BAD_VALUE);
1364}
1365
1366ConversionResult<media::AudioFlag>
1367legacy2aidl_audio_flags_mask_t_AudioFlag(audio_flags_mask_t legacy) {
1368 switch (legacy) {
1369 case AUDIO_FLAG_NONE:
1370 return unexpected(BAD_VALUE);
1371 case AUDIO_FLAG_AUDIBILITY_ENFORCED:
1372 return media::AudioFlag::AUDIBILITY_ENFORCED;
1373 case AUDIO_FLAG_SECURE:
1374 return media::AudioFlag::SECURE;
1375 case AUDIO_FLAG_SCO:
1376 return media::AudioFlag::SCO;
1377 case AUDIO_FLAG_BEACON:
1378 return media::AudioFlag::BEACON;
1379 case AUDIO_FLAG_HW_AV_SYNC:
1380 return media::AudioFlag::HW_AV_SYNC;
1381 case AUDIO_FLAG_HW_HOTWORD:
1382 return media::AudioFlag::HW_HOTWORD;
1383 case AUDIO_FLAG_BYPASS_INTERRUPTION_POLICY:
1384 return media::AudioFlag::BYPASS_INTERRUPTION_POLICY;
1385 case AUDIO_FLAG_BYPASS_MUTE:
1386 return media::AudioFlag::BYPASS_MUTE;
1387 case AUDIO_FLAG_LOW_LATENCY:
1388 return media::AudioFlag::LOW_LATENCY;
1389 case AUDIO_FLAG_DEEP_BUFFER:
1390 return media::AudioFlag::DEEP_BUFFER;
1391 case AUDIO_FLAG_NO_MEDIA_PROJECTION:
1392 return media::AudioFlag::NO_MEDIA_PROJECTION;
1393 case AUDIO_FLAG_MUTE_HAPTIC:
1394 return media::AudioFlag::MUTE_HAPTIC;
1395 case AUDIO_FLAG_NO_SYSTEM_CAPTURE:
1396 return media::AudioFlag::NO_SYSTEM_CAPTURE;
1397 case AUDIO_FLAG_CAPTURE_PRIVATE:
1398 return media::AudioFlag::CAPTURE_PRIVATE;
1399 }
1400 return unexpected(BAD_VALUE);
1401}
1402
1403ConversionResult<audio_flags_mask_t>
1404aidl2legacy_int32_t_audio_flags_mask_t_mask(int32_t aidl) {
1405 return convertBitmask<audio_flags_mask_t, int32_t, audio_flags_mask_t, media::AudioFlag>(
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001406 aidl, aidl2legacy_AudioFlag_audio_flags_mask_t, indexToEnum_index<media::AudioFlag>,
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001407 enumToMask_bitmask<audio_flags_mask_t, audio_flags_mask_t>);
1408}
1409
1410ConversionResult<int32_t>
1411legacy2aidl_audio_flags_mask_t_int32_t_mask(audio_flags_mask_t legacy) {
1412 return convertBitmask<int32_t, audio_flags_mask_t, media::AudioFlag, audio_flags_mask_t>(
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001413 legacy, legacy2aidl_audio_flags_mask_t_AudioFlag,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001414 indexToEnum_bitmask<audio_flags_mask_t>,
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001415 enumToMask_index<int32_t, media::AudioFlag>);
1416}
1417
1418ConversionResult<audio_attributes_t>
1419aidl2legacy_AudioAttributesInternal_audio_attributes_t(const media::AudioAttributesInternal& aidl) {
1420 audio_attributes_t legacy;
1421 legacy.content_type = VALUE_OR_RETURN(
1422 aidl2legacy_AudioContentType_audio_content_type_t(aidl.contentType));
1423 legacy.usage = VALUE_OR_RETURN(aidl2legacy_AudioUsage_audio_usage_t(aidl.usage));
1424 legacy.source = VALUE_OR_RETURN(aidl2legacy_AudioSourceType_audio_source_t(aidl.source));
1425 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_flags_mask_t_mask(aidl.flags));
1426 RETURN_IF_ERROR(aidl2legacy_string(aidl.tags, legacy.tags, sizeof(legacy.tags)));
1427 return legacy;
1428}
1429
1430ConversionResult<media::AudioAttributesInternal>
1431legacy2aidl_audio_attributes_t_AudioAttributesInternal(const audio_attributes_t& legacy) {
1432 media::AudioAttributesInternal aidl;
1433 aidl.contentType = VALUE_OR_RETURN(
1434 legacy2aidl_audio_content_type_t_AudioContentType(legacy.content_type));
1435 aidl.usage = VALUE_OR_RETURN(legacy2aidl_audio_usage_t_AudioUsage(legacy.usage));
1436 aidl.source = VALUE_OR_RETURN(legacy2aidl_audio_source_t_AudioSourceType(legacy.source));
1437 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_flags_mask_t_int32_t_mask(legacy.flags));
1438 aidl.tags = VALUE_OR_RETURN(legacy2aidl_string(legacy.tags, sizeof(legacy.tags)));
1439 return aidl;
1440}
1441
1442ConversionResult<audio_encapsulation_mode_t>
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001443aidl2legacy_AudioEncapsulationMode_audio_encapsulation_mode_t(media::AudioEncapsulationMode aidl) {
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001444 switch (aidl) {
1445 case media::AudioEncapsulationMode::NONE:
1446 return AUDIO_ENCAPSULATION_MODE_NONE;
1447 case media::AudioEncapsulationMode::ELEMENTARY_STREAM:
1448 return AUDIO_ENCAPSULATION_MODE_ELEMENTARY_STREAM;
1449 case media::AudioEncapsulationMode::HANDLE:
1450 return AUDIO_ENCAPSULATION_MODE_HANDLE;
1451 }
1452 return unexpected(BAD_VALUE);
1453}
1454
1455ConversionResult<media::AudioEncapsulationMode>
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001456legacy2aidl_audio_encapsulation_mode_t_AudioEncapsulationMode(audio_encapsulation_mode_t legacy) {
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001457 switch (legacy) {
1458 case AUDIO_ENCAPSULATION_MODE_NONE:
1459 return media::AudioEncapsulationMode::NONE;
1460 case AUDIO_ENCAPSULATION_MODE_ELEMENTARY_STREAM:
1461 return media::AudioEncapsulationMode::ELEMENTARY_STREAM;
1462 case AUDIO_ENCAPSULATION_MODE_HANDLE:
1463 return media::AudioEncapsulationMode::HANDLE;
1464 }
1465 return unexpected(BAD_VALUE);
1466}
1467
1468ConversionResult<audio_offload_info_t>
1469aidl2legacy_AudioOffloadInfo_audio_offload_info_t(const media::AudioOffloadInfo& aidl) {
1470 audio_offload_info_t legacy;
1471 legacy.version = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.version));
1472 legacy.size = sizeof(audio_offload_info_t);
1473 audio_config_base_t config = VALUE_OR_RETURN(
1474 aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config));
1475 legacy.sample_rate = config.sample_rate;
1476 legacy.channel_mask = config.channel_mask;
1477 legacy.format = config.format;
1478 legacy.stream_type = VALUE_OR_RETURN(
1479 aidl2legacy_AudioStreamType_audio_stream_type_t(aidl.streamType));
1480 legacy.bit_rate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.bitRate));
1481 legacy.duration_us = VALUE_OR_RETURN(convertIntegral<int64_t>(aidl.durationUs));
1482 legacy.has_video = aidl.hasVideo;
1483 legacy.is_streaming = aidl.isStreaming;
1484 legacy.bit_width = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.bitWidth));
1485 legacy.offload_buffer_size = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.offloadBufferSize));
1486 legacy.usage = VALUE_OR_RETURN(aidl2legacy_AudioUsage_audio_usage_t(aidl.usage));
1487 legacy.encapsulation_mode = VALUE_OR_RETURN(
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001488 aidl2legacy_AudioEncapsulationMode_audio_encapsulation_mode_t(aidl.encapsulationMode));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001489 legacy.content_id = VALUE_OR_RETURN(convertReinterpret<int32_t>(aidl.contentId));
1490 legacy.sync_id = VALUE_OR_RETURN(convertReinterpret<int32_t>(aidl.syncId));
1491 return legacy;
1492}
1493
1494ConversionResult<media::AudioOffloadInfo>
1495legacy2aidl_audio_offload_info_t_AudioOffloadInfo(const audio_offload_info_t& legacy) {
1496 media::AudioOffloadInfo aidl;
1497 // Version 0.1 fields.
1498 if (legacy.size < offsetof(audio_offload_info_t, usage) + sizeof(audio_offload_info_t::usage)) {
1499 return unexpected(BAD_VALUE);
1500 }
1501 aidl.version = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.version));
1502 aidl.config.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.sample_rate));
1503 aidl.config.channelMask = VALUE_OR_RETURN(
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001504 legacy2aidl_audio_channel_mask_t_AudioChannelMask(legacy.channel_mask));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001505 aidl.config.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormat(legacy.format));
1506 aidl.streamType = VALUE_OR_RETURN(
1507 legacy2aidl_audio_stream_type_t_AudioStreamType(legacy.stream_type));
1508 aidl.bitRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.bit_rate));
1509 aidl.durationUs = VALUE_OR_RETURN(convertIntegral<int64_t>(legacy.duration_us));
1510 aidl.hasVideo = legacy.has_video;
1511 aidl.isStreaming = legacy.is_streaming;
1512 aidl.bitWidth = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.bit_width));
1513 aidl.offloadBufferSize = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.offload_buffer_size));
1514 aidl.usage = VALUE_OR_RETURN(legacy2aidl_audio_usage_t_AudioUsage(legacy.usage));
1515
1516 // Version 0.2 fields.
1517 if (legacy.version >= AUDIO_OFFLOAD_INFO_VERSION_0_2) {
1518 if (legacy.size <
1519 offsetof(audio_offload_info_t, sync_id) + sizeof(audio_offload_info_t::sync_id)) {
1520 return unexpected(BAD_VALUE);
1521 }
1522 aidl.encapsulationMode = VALUE_OR_RETURN(
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001523 legacy2aidl_audio_encapsulation_mode_t_AudioEncapsulationMode(
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001524 legacy.encapsulation_mode));
1525 aidl.contentId = VALUE_OR_RETURN(convertReinterpret<int32_t>(legacy.content_id));
1526 aidl.syncId = VALUE_OR_RETURN(convertReinterpret<int32_t>(legacy.sync_id));
1527 }
1528 return aidl;
1529}
1530
1531ConversionResult<audio_config_t>
1532aidl2legacy_AudioConfig_audio_config_t(const media::AudioConfig& aidl) {
1533 audio_config_t legacy;
1534 legacy.sample_rate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001535 legacy.channel_mask = VALUE_OR_RETURN(
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001536 aidl2legacy_AudioChannelMask_audio_channel_mask_t(aidl.channelMask));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001537 legacy.format = VALUE_OR_RETURN(aidl2legacy_AudioFormat_audio_format_t(aidl.format));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001538 legacy.offload_info = VALUE_OR_RETURN(
1539 aidl2legacy_AudioOffloadInfo_audio_offload_info_t(aidl.offloadInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001540 legacy.frame_count = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.frameCount));
1541 return legacy;
1542}
1543
1544ConversionResult<media::AudioConfig>
1545legacy2aidl_audio_config_t_AudioConfig(const audio_config_t& legacy) {
1546 media::AudioConfig aidl;
1547 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.sample_rate));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001548 aidl.channelMask = VALUE_OR_RETURN(
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001549 legacy2aidl_audio_channel_mask_t_AudioChannelMask(legacy.channel_mask));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001550 aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormat(legacy.format));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001551 aidl.offloadInfo = VALUE_OR_RETURN(
1552 legacy2aidl_audio_offload_info_t_AudioOffloadInfo(legacy.offload_info));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001553 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(legacy.frame_count));
1554 return aidl;
1555}
1556
1557ConversionResult<audio_config_base_t>
1558aidl2legacy_AudioConfigBase_audio_config_base_t(const media::AudioConfigBase& aidl) {
1559 audio_config_base_t legacy;
1560 legacy.sample_rate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001561 legacy.channel_mask = VALUE_OR_RETURN(
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001562 aidl2legacy_AudioChannelMask_audio_channel_mask_t(aidl.channelMask));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001563 legacy.format = VALUE_OR_RETURN(aidl2legacy_AudioFormat_audio_format_t(aidl.format));
1564 return legacy;
1565}
1566
1567ConversionResult<media::AudioConfigBase>
1568legacy2aidl_audio_config_base_t_AudioConfigBase(const audio_config_base_t& legacy) {
1569 media::AudioConfigBase aidl;
1570 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.sample_rate));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001571 aidl.channelMask = VALUE_OR_RETURN(
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001572 legacy2aidl_audio_channel_mask_t_AudioChannelMask(legacy.channel_mask));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001573 aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormat(legacy.format));
1574 return aidl;
1575}
1576
1577ConversionResult<sp<IMemory>>
1578aidl2legacy_SharedFileRegion_IMemory(const media::SharedFileRegion& aidl) {
1579 sp<IMemory> legacy;
1580 if (!convertSharedFileRegionToIMemory(aidl, &legacy)) {
1581 return unexpected(BAD_VALUE);
1582 }
1583 return legacy;
1584}
1585
1586ConversionResult<media::SharedFileRegion>
1587legacy2aidl_IMemory_SharedFileRegion(const sp<IMemory>& legacy) {
1588 media::SharedFileRegion aidl;
1589 if (!convertIMemoryToSharedFileRegion(legacy, &aidl)) {
1590 return unexpected(BAD_VALUE);
1591 }
1592 return aidl;
1593}
1594
1595ConversionResult<sp<IMemory>>
1596aidl2legacy_NullableSharedFileRegion_IMemory(const std::optional<media::SharedFileRegion>& aidl) {
1597 sp<IMemory> legacy;
1598 if (!convertNullableSharedFileRegionToIMemory(aidl, &legacy)) {
1599 return unexpected(BAD_VALUE);
1600 }
1601 return legacy;
1602}
1603
1604ConversionResult<std::optional<media::SharedFileRegion>>
1605legacy2aidl_NullableIMemory_SharedFileRegion(const sp<IMemory>& legacy) {
1606 std::optional<media::SharedFileRegion> aidl;
1607 if (!convertNullableIMemoryToSharedFileRegion(legacy, &aidl)) {
1608 return unexpected(BAD_VALUE);
1609 }
1610 return aidl;
1611}
1612
Ytai Ben-Tsvibdc293a2020-11-02 17:01:38 -08001613ConversionResult<AudioTimestamp>
Andy Hung973638a2020-12-08 20:47:45 -08001614aidl2legacy_AudioTimestampInternal_AudioTimestamp(const media::AudioTimestampInternal& aidl) {
Ytai Ben-Tsvibdc293a2020-11-02 17:01:38 -08001615 AudioTimestamp legacy;
1616 legacy.mPosition = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.position));
1617 legacy.mTime.tv_sec = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sec));
1618 legacy.mTime.tv_nsec = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.nsec));
1619 return legacy;
1620}
1621
1622ConversionResult<media::AudioTimestampInternal>
Andy Hung973638a2020-12-08 20:47:45 -08001623legacy2aidl_AudioTimestamp_AudioTimestampInternal(const AudioTimestamp& legacy) {
Ytai Ben-Tsvibdc293a2020-11-02 17:01:38 -08001624 media::AudioTimestampInternal aidl;
1625 aidl.position = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.mPosition));
1626 aidl.sec = VALUE_OR_RETURN(convertIntegral<int64_t>(legacy.mTime.tv_sec));
1627 aidl.nsec = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.mTime.tv_nsec));
1628 return aidl;
1629}
1630
Ytai Ben-Tsvice182942020-11-04 14:48:01 -08001631ConversionResult<audio_uuid_t>
1632aidl2legacy_AudioUuid_audio_uuid_t(const media::AudioUuid& aidl) {
1633 audio_uuid_t legacy;
1634 legacy.timeLow = VALUE_OR_RETURN(convertReinterpret<uint32_t>(aidl.timeLow));
1635 legacy.timeMid = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.timeMid));
1636 legacy.timeHiAndVersion = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.timeHiAndVersion));
1637 legacy.clockSeq = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.clockSeq));
1638 if (aidl.node.size() != std::size(legacy.node)) {
1639 return unexpected(BAD_VALUE);
1640 }
1641 std::copy(aidl.node.begin(), aidl.node.end(), legacy.node);
1642 return legacy;
1643}
1644
1645ConversionResult<media::AudioUuid>
1646legacy2aidl_audio_uuid_t_AudioUuid(const audio_uuid_t& legacy) {
1647 media::AudioUuid aidl;
1648 aidl.timeLow = VALUE_OR_RETURN(convertReinterpret<int32_t>(legacy.timeLow));
1649 aidl.timeMid = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.timeMid));
1650 aidl.timeHiAndVersion = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.timeHiAndVersion));
1651 aidl.clockSeq = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.clockSeq));
1652 std::copy(legacy.node, legacy.node + std::size(legacy.node), std::back_inserter(aidl.node));
1653 return aidl;
1654}
1655
1656ConversionResult<effect_descriptor_t>
1657aidl2legacy_EffectDescriptor_effect_descriptor_t(const media::EffectDescriptor& aidl) {
1658 effect_descriptor_t legacy;
1659 legacy.type = VALUE_OR_RETURN(aidl2legacy_AudioUuid_audio_uuid_t(aidl.type));
1660 legacy.uuid = VALUE_OR_RETURN(aidl2legacy_AudioUuid_audio_uuid_t(aidl.uuid));
1661 legacy.apiVersion = VALUE_OR_RETURN(convertReinterpret<uint32_t>(aidl.apiVersion));
1662 legacy.flags = VALUE_OR_RETURN(convertReinterpret<uint32_t>(aidl.flags));
1663 legacy.cpuLoad = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.cpuLoad));
1664 legacy.memoryUsage = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.memoryUsage));
1665 RETURN_IF_ERROR(aidl2legacy_string(aidl.name, legacy.name, sizeof(legacy.name)));
1666 RETURN_IF_ERROR(
1667 aidl2legacy_string(aidl.implementor, legacy.implementor, sizeof(legacy.implementor)));
1668 return legacy;
1669}
1670
1671ConversionResult<media::EffectDescriptor>
1672legacy2aidl_effect_descriptor_t_EffectDescriptor(const effect_descriptor_t& legacy) {
1673 media::EffectDescriptor aidl;
1674 aidl.type = VALUE_OR_RETURN(legacy2aidl_audio_uuid_t_AudioUuid(legacy.type));
1675 aidl.uuid = VALUE_OR_RETURN(legacy2aidl_audio_uuid_t_AudioUuid(legacy.uuid));
1676 aidl.apiVersion = VALUE_OR_RETURN(convertReinterpret<int32_t>(legacy.apiVersion));
1677 aidl.flags = VALUE_OR_RETURN(convertReinterpret<int32_t>(legacy.flags));
1678 aidl.cpuLoad = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.cpuLoad));
1679 aidl.memoryUsage = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.memoryUsage));
1680 aidl.name = VALUE_OR_RETURN(legacy2aidl_string(legacy.name, sizeof(legacy.name)));
1681 aidl.implementor = VALUE_OR_RETURN(
1682 legacy2aidl_string(legacy.implementor, sizeof(legacy.implementor)));
1683 return aidl;
1684}
1685
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001686ConversionResult<audio_encapsulation_metadata_type_t>
1687aidl2legacy_AudioEncapsulationMetadataType_audio_encapsulation_metadata_type_t(
1688 media::AudioEncapsulationMetadataType aidl) {
1689 switch (aidl) {
1690 case media::AudioEncapsulationMetadataType::NONE:
1691 return AUDIO_ENCAPSULATION_METADATA_TYPE_NONE;
1692 case media::AudioEncapsulationMetadataType::FRAMEWORK_TUNER:
1693 return AUDIO_ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER;
1694 case media::AudioEncapsulationMetadataType::DVB_AD_DESCRIPTOR:
1695 return AUDIO_ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR;
1696 }
1697 return unexpected(BAD_VALUE);
1698}
1699
1700ConversionResult<media::AudioEncapsulationMetadataType>
1701legacy2aidl_audio_encapsulation_metadata_type_t_AudioEncapsulationMetadataType(
1702 audio_encapsulation_metadata_type_t legacy) {
1703 switch (legacy) {
1704 case AUDIO_ENCAPSULATION_METADATA_TYPE_NONE:
1705 return media::AudioEncapsulationMetadataType::NONE;
1706 case AUDIO_ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER:
1707 return media::AudioEncapsulationMetadataType::FRAMEWORK_TUNER;
1708 case AUDIO_ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR:
1709 return media::AudioEncapsulationMetadataType::DVB_AD_DESCRIPTOR;
1710 }
1711 return unexpected(BAD_VALUE);
1712}
1713
1714ConversionResult<uint32_t>
1715aidl2legacy_AudioEncapsulationMode_mask(int32_t aidl) {
1716 return convertBitmask<uint32_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001717 int32_t,
1718 audio_encapsulation_mode_t,
1719 media::AudioEncapsulationMode>(
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001720 aidl, aidl2legacy_AudioEncapsulationMode_audio_encapsulation_mode_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001721 indexToEnum_index<media::AudioEncapsulationMode>,
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001722 enumToMask_index<uint32_t, audio_encapsulation_mode_t>);
1723}
1724
1725ConversionResult<int32_t>
1726legacy2aidl_AudioEncapsulationMode_mask(uint32_t legacy) {
1727 return convertBitmask<int32_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001728 uint32_t,
1729 media::AudioEncapsulationMode,
1730 audio_encapsulation_mode_t>(
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001731 legacy, legacy2aidl_audio_encapsulation_mode_t_AudioEncapsulationMode,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001732 indexToEnum_index<audio_encapsulation_mode_t>,
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001733 enumToMask_index<int32_t, media::AudioEncapsulationMode>);
1734}
1735
1736ConversionResult<uint32_t>
1737aidl2legacy_AudioEncapsulationMetadataType_mask(int32_t aidl) {
1738 return convertBitmask<uint32_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001739 int32_t,
1740 audio_encapsulation_metadata_type_t,
1741 media::AudioEncapsulationMetadataType>(
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001742 aidl, aidl2legacy_AudioEncapsulationMetadataType_audio_encapsulation_metadata_type_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001743 indexToEnum_index<media::AudioEncapsulationMetadataType>,
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001744 enumToMask_index<uint32_t, audio_encapsulation_metadata_type_t>);
1745}
1746
1747ConversionResult<int32_t>
1748legacy2aidl_AudioEncapsulationMetadataType_mask(uint32_t legacy) {
1749 return convertBitmask<int32_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001750 uint32_t,
1751 media::AudioEncapsulationMetadataType,
1752 audio_encapsulation_metadata_type_t>(
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001753 legacy, legacy2aidl_audio_encapsulation_metadata_type_t_AudioEncapsulationMetadataType,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001754 indexToEnum_index<audio_encapsulation_metadata_type_t>,
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001755 enumToMask_index<int32_t, media::AudioEncapsulationMetadataType>);
1756}
1757
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001758ConversionResult<audio_mix_latency_class_t>
1759aidl2legacy_AudioMixLatencyClass_audio_mix_latency_class_t(
1760 media::AudioMixLatencyClass aidl) {
1761 switch (aidl) {
1762 case media::AudioMixLatencyClass::LOW:
1763 return AUDIO_LATENCY_LOW;
1764 case media::AudioMixLatencyClass::NORMAL:
1765 return AUDIO_LATENCY_NORMAL;
1766 }
1767 return unexpected(BAD_VALUE);
1768}
1769
1770ConversionResult<media::AudioMixLatencyClass>
1771legacy2aidl_audio_mix_latency_class_t_AudioMixLatencyClass(
1772 audio_mix_latency_class_t legacy) {
1773 switch (legacy) {
1774 case AUDIO_LATENCY_LOW:
1775 return media::AudioMixLatencyClass::LOW;
1776 case AUDIO_LATENCY_NORMAL:
1777 return media::AudioMixLatencyClass::NORMAL;
1778 }
1779 return unexpected(BAD_VALUE);
1780}
1781
1782ConversionResult<audio_port_device_ext>
1783aidl2legacy_AudioPortDeviceExt_audio_port_device_ext(const media::AudioPortDeviceExt& aidl) {
1784 audio_port_device_ext legacy;
1785 legacy.hw_module = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_module_handle_t(aidl.hwModule));
1786 legacy.type = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_devices_t(aidl.device.type));
1787 RETURN_IF_ERROR(
1788 aidl2legacy_string(aidl.device.address, legacy.address, sizeof(legacy.address)));
1789 legacy.encapsulation_modes = VALUE_OR_RETURN(
1790 aidl2legacy_AudioEncapsulationMode_mask(aidl.encapsulationModes));
1791 legacy.encapsulation_metadata_types = VALUE_OR_RETURN(
1792 aidl2legacy_AudioEncapsulationMetadataType_mask(aidl.encapsulationMetadataTypes));
1793 return legacy;
1794}
1795
1796ConversionResult<media::AudioPortDeviceExt>
1797legacy2aidl_audio_port_device_ext_AudioPortDeviceExt(const audio_port_device_ext& legacy) {
1798 media::AudioPortDeviceExt aidl;
1799 aidl.hwModule = VALUE_OR_RETURN(legacy2aidl_audio_module_handle_t_int32_t(legacy.hw_module));
1800 aidl.device.type = VALUE_OR_RETURN(legacy2aidl_audio_devices_t_int32_t(legacy.type));
1801 aidl.device.address = VALUE_OR_RETURN(
1802 legacy2aidl_string(legacy.address, sizeof(legacy.address)));
1803 aidl.encapsulationModes = VALUE_OR_RETURN(
1804 legacy2aidl_AudioEncapsulationMode_mask(legacy.encapsulation_modes));
1805 aidl.encapsulationMetadataTypes = VALUE_OR_RETURN(
1806 legacy2aidl_AudioEncapsulationMetadataType_mask(legacy.encapsulation_metadata_types));
1807 return aidl;
1808}
1809
1810ConversionResult<audio_port_mix_ext>
1811aidl2legacy_AudioPortMixExt_audio_port_mix_ext(const media::AudioPortMixExt& aidl) {
1812 audio_port_mix_ext legacy;
1813 legacy.hw_module = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_module_handle_t(aidl.hwModule));
1814 legacy.handle = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.handle));
1815 legacy.latency_class = VALUE_OR_RETURN(
1816 aidl2legacy_AudioMixLatencyClass_audio_mix_latency_class_t(aidl.latencyClass));
1817 return legacy;
1818}
1819
1820ConversionResult<media::AudioPortMixExt>
1821legacy2aidl_audio_port_mix_ext_AudioPortMixExt(const audio_port_mix_ext& legacy) {
1822 media::AudioPortMixExt aidl;
1823 aidl.hwModule = VALUE_OR_RETURN(legacy2aidl_audio_module_handle_t_int32_t(legacy.hw_module));
1824 aidl.handle = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(legacy.handle));
1825 aidl.latencyClass = VALUE_OR_RETURN(
1826 legacy2aidl_audio_mix_latency_class_t_AudioMixLatencyClass(legacy.latency_class));
1827 return aidl;
1828}
1829
1830ConversionResult<audio_port_session_ext>
1831aidl2legacy_AudioPortSessionExt_audio_port_session_ext(const media::AudioPortSessionExt& aidl) {
1832 audio_port_session_ext legacy;
1833 legacy.session = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.session));
1834 return legacy;
1835}
1836
1837ConversionResult<media::AudioPortSessionExt>
1838legacy2aidl_audio_port_session_ext_AudioPortSessionExt(const audio_port_session_ext& legacy) {
1839 media::AudioPortSessionExt aidl;
1840 aidl.session = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(legacy.session));
1841 return aidl;
1842}
1843
1844// This type is unnamed in the original definition, thus we name it here.
1845using audio_port_v7_ext = decltype(audio_port_v7::ext);
1846
1847ConversionResult<audio_port_v7_ext> aidl2legacy_AudioPortExt(
1848 const media::AudioPortExt& aidl, media::AudioPortType type) {
1849 audio_port_v7_ext legacy;
1850 switch (type) {
1851 case media::AudioPortType::NONE:
1852 // Just verify that the union is empty.
1853 VALUE_OR_RETURN(UNION_GET(aidl, unspecified));
Andy Hung3f69c162020-12-09 12:08:48 -08001854 return legacy;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001855 case media::AudioPortType::DEVICE:
1856 legacy.device = VALUE_OR_RETURN(
1857 aidl2legacy_AudioPortDeviceExt_audio_port_device_ext(
1858 VALUE_OR_RETURN(UNION_GET(aidl, device))));
Andy Hung3f69c162020-12-09 12:08:48 -08001859 return legacy;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001860 case media::AudioPortType::MIX:
1861 legacy.mix = VALUE_OR_RETURN(
1862 aidl2legacy_AudioPortMixExt_audio_port_mix_ext(
1863 VALUE_OR_RETURN(UNION_GET(aidl, mix))));
Andy Hung3f69c162020-12-09 12:08:48 -08001864 return legacy;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001865 case media::AudioPortType::SESSION:
1866 legacy.session = VALUE_OR_RETURN(aidl2legacy_AudioPortSessionExt_audio_port_session_ext(
1867 VALUE_OR_RETURN(UNION_GET(aidl, session))));
Andy Hung3f69c162020-12-09 12:08:48 -08001868 return legacy;
1869
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001870 }
Andy Hung3f69c162020-12-09 12:08:48 -08001871 LOG_ALWAYS_FATAL("Shouldn't get here"); // with -Werror,-Wswitch may compile-time fail
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001872}
1873
1874ConversionResult<media::AudioPortExt> legacy2aidl_AudioPortExt(
1875 const audio_port_v7_ext& legacy, audio_port_type_t type) {
1876 media::AudioPortExt aidl;
1877 switch (type) {
1878 case AUDIO_PORT_TYPE_NONE:
1879 UNION_SET(aidl, unspecified, false);
Andy Hung3f69c162020-12-09 12:08:48 -08001880 return aidl;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001881 case AUDIO_PORT_TYPE_DEVICE:
1882 UNION_SET(aidl, device,
1883 VALUE_OR_RETURN(
1884 legacy2aidl_audio_port_device_ext_AudioPortDeviceExt(legacy.device)));
Andy Hung3f69c162020-12-09 12:08:48 -08001885 return aidl;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001886 case AUDIO_PORT_TYPE_MIX:
1887 UNION_SET(aidl, mix,
1888 VALUE_OR_RETURN(legacy2aidl_audio_port_mix_ext_AudioPortMixExt(legacy.mix)));
Andy Hung3f69c162020-12-09 12:08:48 -08001889 return aidl;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001890 case AUDIO_PORT_TYPE_SESSION:
1891 UNION_SET(aidl, session,
1892 VALUE_OR_RETURN(legacy2aidl_audio_port_session_ext_AudioPortSessionExt(
1893 legacy.session)));
Andy Hung3f69c162020-12-09 12:08:48 -08001894 return aidl;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001895 }
Andy Hung3f69c162020-12-09 12:08:48 -08001896 LOG_ALWAYS_FATAL("Shouldn't get here"); // with -Werror,-Wswitch may compile-time fail
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001897}
1898
1899ConversionResult<audio_profile>
1900aidl2legacy_AudioProfile_audio_profile(const media::AudioProfile& aidl) {
1901 audio_profile legacy;
1902 legacy.format = VALUE_OR_RETURN(aidl2legacy_AudioFormat_audio_format_t(aidl.format));
1903
1904 if (aidl.samplingRates.size() > std::size(legacy.sample_rates)) {
1905 return unexpected(BAD_VALUE);
1906 }
1907 RETURN_IF_ERROR(
1908 convertRange(aidl.samplingRates.begin(), aidl.samplingRates.end(), legacy.sample_rates,
1909 convertIntegral<int32_t, unsigned int>));
1910 legacy.num_sample_rates = aidl.samplingRates.size();
1911
1912 if (aidl.channelMasks.size() > std::size(legacy.channel_masks)) {
1913 return unexpected(BAD_VALUE);
1914 }
1915 RETURN_IF_ERROR(
1916 convertRange(aidl.channelMasks.begin(), aidl.channelMasks.end(), legacy.channel_masks,
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001917 aidl2legacy_AudioChannelMask_audio_channel_mask_t));
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001918 legacy.num_channel_masks = aidl.channelMasks.size();
jiabin82e56932021-03-05 06:35:19 +00001919
1920 legacy.encapsulation_type = VALUE_OR_RETURN(
1921 aidl2legacy_AudioEncapsulationType_audio_encapsulation_type_t(aidl.encapsulationType));
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001922 return legacy;
1923}
1924
1925ConversionResult<media::AudioProfile>
1926legacy2aidl_audio_profile_AudioProfile(const audio_profile& legacy) {
1927 media::AudioProfile aidl;
1928 aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormat(legacy.format));
1929
1930 if (legacy.num_sample_rates > std::size(legacy.sample_rates)) {
1931 return unexpected(BAD_VALUE);
1932 }
1933 RETURN_IF_ERROR(
1934 convertRange(legacy.sample_rates, legacy.sample_rates + legacy.num_sample_rates,
1935 std::back_inserter(aidl.samplingRates),
1936 convertIntegral<unsigned int, int32_t>));
1937
1938 if (legacy.num_channel_masks > std::size(legacy.channel_masks)) {
1939 return unexpected(BAD_VALUE);
1940 }
1941 RETURN_IF_ERROR(
1942 convertRange(legacy.channel_masks, legacy.channel_masks + legacy.num_channel_masks,
1943 std::back_inserter(aidl.channelMasks),
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001944 legacy2aidl_audio_channel_mask_t_AudioChannelMask));
jiabin82e56932021-03-05 06:35:19 +00001945
1946 aidl.encapsulationType = VALUE_OR_RETURN(
1947 legacy2aidl_audio_encapsulation_type_t_AudioEncapsulationType(
1948 legacy.encapsulation_type));
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001949 return aidl;
1950}
1951
1952ConversionResult<audio_gain>
1953aidl2legacy_AudioGain_audio_gain(const media::AudioGain& aidl) {
1954 audio_gain legacy;
1955 legacy.mode = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_gain_mode_t_mask(aidl.mode));
1956 legacy.channel_mask = VALUE_OR_RETURN(
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001957 aidl2legacy_AudioChannelMask_audio_channel_mask_t(aidl.channelMask));
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001958 legacy.min_value = VALUE_OR_RETURN(convertIntegral<int>(aidl.minValue));
1959 legacy.max_value = VALUE_OR_RETURN(convertIntegral<int>(aidl.maxValue));
1960 legacy.default_value = VALUE_OR_RETURN(convertIntegral<int>(aidl.defaultValue));
1961 legacy.step_value = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.stepValue));
1962 legacy.min_ramp_ms = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.minRampMs));
1963 legacy.max_ramp_ms = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.maxRampMs));
1964 return legacy;
1965}
1966
1967ConversionResult<media::AudioGain>
1968legacy2aidl_audio_gain_AudioGain(const audio_gain& legacy) {
1969 media::AudioGain aidl;
Andy Hung973638a2020-12-08 20:47:45 -08001970 aidl.mode = VALUE_OR_RETURN(legacy2aidl_audio_gain_mode_t_int32_t_mask(legacy.mode));
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001971 aidl.channelMask = VALUE_OR_RETURN(
Mikhail Naganov2d8df4e2021-06-03 13:59:13 -07001972 legacy2aidl_audio_channel_mask_t_AudioChannelMask(legacy.channel_mask));
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001973 aidl.minValue = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.min_value));
1974 aidl.maxValue = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.max_value));
1975 aidl.defaultValue = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.default_value));
1976 aidl.stepValue = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.step_value));
1977 aidl.minRampMs = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.min_ramp_ms));
1978 aidl.maxRampMs = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.max_ramp_ms));
1979 return aidl;
1980}
1981
1982ConversionResult<audio_port_v7>
1983aidl2legacy_AudioPort_audio_port_v7(const media::AudioPort& aidl) {
1984 audio_port_v7 legacy;
1985 legacy.id = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.id));
1986 legacy.role = VALUE_OR_RETURN(aidl2legacy_AudioPortRole_audio_port_role_t(aidl.role));
1987 legacy.type = VALUE_OR_RETURN(aidl2legacy_AudioPortType_audio_port_type_t(aidl.type));
1988 RETURN_IF_ERROR(aidl2legacy_string(aidl.name, legacy.name, sizeof(legacy.name)));
1989
1990 if (aidl.profiles.size() > std::size(legacy.audio_profiles)) {
1991 return unexpected(BAD_VALUE);
1992 }
1993 RETURN_IF_ERROR(convertRange(aidl.profiles.begin(), aidl.profiles.end(), legacy.audio_profiles,
1994 aidl2legacy_AudioProfile_audio_profile));
1995 legacy.num_audio_profiles = aidl.profiles.size();
1996
jiabin82e56932021-03-05 06:35:19 +00001997 if (aidl.extraAudioDescriptors.size() > std::size(legacy.extra_audio_descriptors)) {
1998 return unexpected(BAD_VALUE);
1999 }
2000 RETURN_IF_ERROR(
2001 convertRange(aidl.extraAudioDescriptors.begin(), aidl.extraAudioDescriptors.end(),
2002 legacy.extra_audio_descriptors,
2003 aidl2legacy_ExtraAudioDescriptor_audio_extra_audio_descriptor));
2004 legacy.num_extra_audio_descriptors = aidl.extraAudioDescriptors.size();
2005
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08002006 if (aidl.gains.size() > std::size(legacy.gains)) {
2007 return unexpected(BAD_VALUE);
2008 }
2009 RETURN_IF_ERROR(convertRange(aidl.gains.begin(), aidl.gains.end(), legacy.gains,
2010 aidl2legacy_AudioGain_audio_gain));
2011 legacy.num_gains = aidl.gains.size();
2012
2013 legacy.active_config = VALUE_OR_RETURN(
2014 aidl2legacy_AudioPortConfig_audio_port_config(aidl.activeConfig));
2015 legacy.ext = VALUE_OR_RETURN(aidl2legacy_AudioPortExt(aidl.ext, aidl.type));
2016 return legacy;
2017}
2018
2019ConversionResult<media::AudioPort>
2020legacy2aidl_audio_port_v7_AudioPort(const audio_port_v7& legacy) {
2021 media::AudioPort aidl;
2022 aidl.id = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(legacy.id));
2023 aidl.role = VALUE_OR_RETURN(legacy2aidl_audio_port_role_t_AudioPortRole(legacy.role));
2024 aidl.type = VALUE_OR_RETURN(legacy2aidl_audio_port_type_t_AudioPortType(legacy.type));
2025 aidl.name = VALUE_OR_RETURN(legacy2aidl_string(legacy.name, sizeof(legacy.name)));
2026
2027 if (legacy.num_audio_profiles > std::size(legacy.audio_profiles)) {
2028 return unexpected(BAD_VALUE);
2029 }
2030 RETURN_IF_ERROR(
2031 convertRange(legacy.audio_profiles, legacy.audio_profiles + legacy.num_audio_profiles,
2032 std::back_inserter(aidl.profiles),
2033 legacy2aidl_audio_profile_AudioProfile));
2034
jiabin82e56932021-03-05 06:35:19 +00002035 if (legacy.num_extra_audio_descriptors > std::size(legacy.extra_audio_descriptors)) {
2036 return unexpected(BAD_VALUE);
2037 }
2038 RETURN_IF_ERROR(
2039 convertRange(legacy.extra_audio_descriptors,
2040 legacy.extra_audio_descriptors + legacy.num_extra_audio_descriptors,
2041 std::back_inserter(aidl.extraAudioDescriptors),
2042 legacy2aidl_audio_extra_audio_descriptor_ExtraAudioDescriptor));
2043
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08002044 if (legacy.num_gains > std::size(legacy.gains)) {
2045 return unexpected(BAD_VALUE);
2046 }
2047 RETURN_IF_ERROR(
2048 convertRange(legacy.gains, legacy.gains + legacy.num_gains,
2049 std::back_inserter(aidl.gains),
2050 legacy2aidl_audio_gain_AudioGain));
2051
2052 aidl.activeConfig = VALUE_OR_RETURN(
2053 legacy2aidl_audio_port_config_AudioPortConfig(legacy.active_config));
2054 aidl.ext = VALUE_OR_RETURN(legacy2aidl_AudioPortExt(legacy.ext, legacy.type));
2055 return aidl;
2056}
2057
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08002058ConversionResult<audio_mode_t>
2059aidl2legacy_AudioMode_audio_mode_t(media::AudioMode aidl) {
2060 switch (aidl) {
2061 case media::AudioMode::INVALID:
2062 return AUDIO_MODE_INVALID;
2063 case media::AudioMode::CURRENT:
2064 return AUDIO_MODE_CURRENT;
2065 case media::AudioMode::NORMAL:
2066 return AUDIO_MODE_NORMAL;
2067 case media::AudioMode::RINGTONE:
2068 return AUDIO_MODE_RINGTONE;
2069 case media::AudioMode::IN_CALL:
2070 return AUDIO_MODE_IN_CALL;
2071 case media::AudioMode::IN_COMMUNICATION:
2072 return AUDIO_MODE_IN_COMMUNICATION;
2073 case media::AudioMode::CALL_SCREEN:
2074 return AUDIO_MODE_CALL_SCREEN;
2075 }
2076 return unexpected(BAD_VALUE);
2077}
2078
2079ConversionResult<media::AudioMode>
2080legacy2aidl_audio_mode_t_AudioMode(audio_mode_t legacy) {
2081 switch (legacy) {
2082 case AUDIO_MODE_INVALID:
2083 return media::AudioMode::INVALID;
2084 case AUDIO_MODE_CURRENT:
2085 return media::AudioMode::CURRENT;
2086 case AUDIO_MODE_NORMAL:
2087 return media::AudioMode::NORMAL;
2088 case AUDIO_MODE_RINGTONE:
2089 return media::AudioMode::RINGTONE;
2090 case AUDIO_MODE_IN_CALL:
2091 return media::AudioMode::IN_CALL;
2092 case AUDIO_MODE_IN_COMMUNICATION:
2093 return media::AudioMode::IN_COMMUNICATION;
2094 case AUDIO_MODE_CALL_SCREEN:
2095 return media::AudioMode::CALL_SCREEN;
2096 case AUDIO_MODE_CNT:
2097 break;
2098 }
2099 return unexpected(BAD_VALUE);
2100}
2101
2102ConversionResult<audio_unique_id_use_t>
2103aidl2legacy_AudioUniqueIdUse_audio_unique_id_use_t(media::AudioUniqueIdUse aidl) {
2104 switch (aidl) {
2105 case media::AudioUniqueIdUse::UNSPECIFIED:
2106 return AUDIO_UNIQUE_ID_USE_UNSPECIFIED;
2107 case media::AudioUniqueIdUse::SESSION:
2108 return AUDIO_UNIQUE_ID_USE_SESSION;
2109 case media::AudioUniqueIdUse::MODULE:
2110 return AUDIO_UNIQUE_ID_USE_MODULE;
2111 case media::AudioUniqueIdUse::EFFECT:
2112 return AUDIO_UNIQUE_ID_USE_EFFECT;
2113 case media::AudioUniqueIdUse::PATCH:
2114 return AUDIO_UNIQUE_ID_USE_PATCH;
2115 case media::AudioUniqueIdUse::OUTPUT:
2116 return AUDIO_UNIQUE_ID_USE_OUTPUT;
2117 case media::AudioUniqueIdUse::INPUT:
2118 return AUDIO_UNIQUE_ID_USE_INPUT;
2119 case media::AudioUniqueIdUse::CLIENT:
2120 return AUDIO_UNIQUE_ID_USE_CLIENT;
2121 }
2122 return unexpected(BAD_VALUE);
2123}
2124
2125ConversionResult<media::AudioUniqueIdUse>
2126legacy2aidl_audio_unique_id_use_t_AudioUniqueIdUse(audio_unique_id_use_t legacy) {
2127 switch (legacy) {
2128 case AUDIO_UNIQUE_ID_USE_UNSPECIFIED:
2129 return media::AudioUniqueIdUse::UNSPECIFIED;
2130 case AUDIO_UNIQUE_ID_USE_SESSION:
2131 return media::AudioUniqueIdUse::SESSION;
2132 case AUDIO_UNIQUE_ID_USE_MODULE:
2133 return media::AudioUniqueIdUse::MODULE;
2134 case AUDIO_UNIQUE_ID_USE_EFFECT:
2135 return media::AudioUniqueIdUse::EFFECT;
2136 case AUDIO_UNIQUE_ID_USE_PATCH:
2137 return media::AudioUniqueIdUse::PATCH;
2138 case AUDIO_UNIQUE_ID_USE_OUTPUT:
2139 return media::AudioUniqueIdUse::OUTPUT;
2140 case AUDIO_UNIQUE_ID_USE_INPUT:
2141 return media::AudioUniqueIdUse::INPUT;
2142 case AUDIO_UNIQUE_ID_USE_CLIENT:
2143 return media::AudioUniqueIdUse::CLIENT;
2144 case AUDIO_UNIQUE_ID_USE_MAX:
2145 break;
2146 }
2147 return unexpected(BAD_VALUE);
2148}
2149
Ytai Ben-Tsvi7e7a79d2020-12-15 16:48:16 -08002150ConversionResult<volume_group_t>
2151aidl2legacy_int32_t_volume_group_t(int32_t aidl) {
2152 return convertReinterpret<volume_group_t>(aidl);
2153}
2154
2155ConversionResult<int32_t>
2156legacy2aidl_volume_group_t_int32_t(volume_group_t legacy) {
2157 return convertReinterpret<int32_t>(legacy);
2158}
2159
Ytai Ben-Tsvi0a4904a2021-01-06 12:57:05 -08002160ConversionResult<product_strategy_t>
2161aidl2legacy_int32_t_product_strategy_t(int32_t aidl) {
2162 return convertReinterpret<product_strategy_t>(aidl);
2163}
2164
2165ConversionResult<int32_t>
2166legacy2aidl_product_strategy_t_int32_t(product_strategy_t legacy) {
2167 return convertReinterpret<int32_t>(legacy);
2168}
2169
Kuowei Lid4adbdb2020-08-13 14:44:25 +08002170ConversionResult<audio_dual_mono_mode_t>
2171aidl2legacy_AudioDualMonoMode_audio_dual_mono_mode_t(media::AudioDualMonoMode aidl) {
2172 switch (aidl) {
2173 case media::AudioDualMonoMode::OFF:
2174 return AUDIO_DUAL_MONO_MODE_OFF;
2175 case media::AudioDualMonoMode::LR:
2176 return AUDIO_DUAL_MONO_MODE_LR;
2177 case media::AudioDualMonoMode::LL:
2178 return AUDIO_DUAL_MONO_MODE_LL;
2179 case media::AudioDualMonoMode::RR:
2180 return AUDIO_DUAL_MONO_MODE_RR;
2181 }
2182 return unexpected(BAD_VALUE);
2183}
2184
2185ConversionResult<media::AudioDualMonoMode>
2186legacy2aidl_audio_dual_mono_mode_t_AudioDualMonoMode(audio_dual_mono_mode_t legacy) {
2187 switch (legacy) {
2188 case AUDIO_DUAL_MONO_MODE_OFF:
2189 return media::AudioDualMonoMode::OFF;
2190 case AUDIO_DUAL_MONO_MODE_LR:
2191 return media::AudioDualMonoMode::LR;
2192 case AUDIO_DUAL_MONO_MODE_LL:
2193 return media::AudioDualMonoMode::LL;
2194 case AUDIO_DUAL_MONO_MODE_RR:
2195 return media::AudioDualMonoMode::RR;
2196 }
2197 return unexpected(BAD_VALUE);
2198}
2199
2200ConversionResult<audio_timestretch_fallback_mode_t>
2201aidl2legacy_int32_t_audio_timestretch_fallback_mode_t(int32_t aidl) {
2202 return convertReinterpret<audio_timestretch_fallback_mode_t>(aidl);
2203}
2204
2205ConversionResult<int32_t>
2206legacy2aidl_audio_timestretch_fallback_mode_t_int32_t(audio_timestretch_fallback_mode_t legacy) {
2207 return convertReinterpret<int32_t>(legacy);
2208}
2209
2210ConversionResult<audio_timestretch_stretch_mode_t>
2211aidl2legacy_int32_t_audio_timestretch_stretch_mode_t(int32_t aidl) {
2212 return convertReinterpret<audio_timestretch_stretch_mode_t>(aidl);
2213}
2214
2215ConversionResult<int32_t>
2216legacy2aidl_audio_timestretch_stretch_mode_t_int32_t(audio_timestretch_stretch_mode_t legacy) {
2217 return convertReinterpret<int32_t>(legacy);
2218}
2219
2220ConversionResult<audio_playback_rate_t>
2221aidl2legacy_AudioPlaybackRate_audio_playback_rate_t(const media::AudioPlaybackRate& aidl) {
2222 audio_playback_rate_t legacy;
2223 legacy.mSpeed = aidl.speed;
2224 legacy.mPitch = aidl.pitch;
2225 legacy.mFallbackMode = VALUE_OR_RETURN(
2226 aidl2legacy_int32_t_audio_timestretch_fallback_mode_t(aidl.fallbackMode));
2227 legacy.mStretchMode = VALUE_OR_RETURN(
2228 aidl2legacy_int32_t_audio_timestretch_stretch_mode_t(aidl.stretchMode));
2229 return legacy;
2230}
2231
2232ConversionResult<media::AudioPlaybackRate>
2233legacy2aidl_audio_playback_rate_t_AudioPlaybackRate(const audio_playback_rate_t& legacy) {
2234 media::AudioPlaybackRate aidl;
2235 aidl.speed = legacy.mSpeed;
2236 aidl.pitch = legacy.mPitch;
2237 aidl.fallbackMode = VALUE_OR_RETURN(
2238 legacy2aidl_audio_timestretch_fallback_mode_t_int32_t(legacy.mFallbackMode));
2239 aidl.stretchMode = VALUE_OR_RETURN(
2240 legacy2aidl_audio_timestretch_stretch_mode_t_int32_t(legacy.mStretchMode));
2241 return aidl;
2242}
2243
jiabin82e56932021-03-05 06:35:19 +00002244ConversionResult<audio_standard_t>
2245aidl2legacy_AudioStandard_audio_standard_t(media::AudioStandard aidl) {
2246 switch (aidl) {
2247 case media::AudioStandard::NONE:
2248 return AUDIO_STANDARD_NONE;
2249 case media::AudioStandard::EDID:
2250 return AUDIO_STANDARD_EDID;
2251 }
2252 return unexpected(BAD_VALUE);
2253}
2254
2255ConversionResult<media::AudioStandard>
2256legacy2aidl_audio_standard_t_AudioStandard(audio_standard_t legacy) {
2257 switch (legacy) {
2258 case AUDIO_STANDARD_NONE:
2259 return media::AudioStandard::NONE;
2260 case AUDIO_STANDARD_EDID:
2261 return media::AudioStandard::EDID;
2262 }
2263 return unexpected(BAD_VALUE);
2264}
2265
2266ConversionResult<audio_extra_audio_descriptor>
2267aidl2legacy_ExtraAudioDescriptor_audio_extra_audio_descriptor(
2268 const media::ExtraAudioDescriptor& aidl) {
2269 audio_extra_audio_descriptor legacy;
2270 legacy.standard = VALUE_OR_RETURN(aidl2legacy_AudioStandard_audio_standard_t(aidl.standard));
2271 if (aidl.audioDescriptor.size() > EXTRA_AUDIO_DESCRIPTOR_SIZE) {
2272 return unexpected(BAD_VALUE);
2273 }
2274 legacy.descriptor_length = aidl.audioDescriptor.size();
2275 std::copy(aidl.audioDescriptor.begin(), aidl.audioDescriptor.end(),
2276 std::begin(legacy.descriptor));
2277 legacy.encapsulation_type =
2278 VALUE_OR_RETURN(aidl2legacy_AudioEncapsulationType_audio_encapsulation_type_t(
2279 aidl.encapsulationType));
2280 return legacy;
2281}
2282
2283ConversionResult<media::ExtraAudioDescriptor>
2284legacy2aidl_audio_extra_audio_descriptor_ExtraAudioDescriptor(
2285 const audio_extra_audio_descriptor& legacy) {
2286 media::ExtraAudioDescriptor aidl;
2287 aidl.standard = VALUE_OR_RETURN(legacy2aidl_audio_standard_t_AudioStandard(legacy.standard));
2288 if (legacy.descriptor_length > EXTRA_AUDIO_DESCRIPTOR_SIZE) {
2289 return unexpected(BAD_VALUE);
2290 }
2291 aidl.audioDescriptor.resize(legacy.descriptor_length);
2292 std::copy(legacy.descriptor, legacy.descriptor + legacy.descriptor_length,
2293 aidl.audioDescriptor.begin());
2294 aidl.encapsulationType =
2295 VALUE_OR_RETURN(legacy2aidl_audio_encapsulation_type_t_AudioEncapsulationType(
2296 legacy.encapsulation_type));
2297 return aidl;
2298}
2299
2300ConversionResult<audio_encapsulation_type_t>
2301aidl2legacy_AudioEncapsulationType_audio_encapsulation_type_t(
2302 const media::AudioEncapsulationType& aidl) {
2303 switch (aidl) {
2304 case media::AudioEncapsulationType::NONE:
2305 return AUDIO_ENCAPSULATION_TYPE_NONE;
2306 case media::AudioEncapsulationType::IEC61937:
2307 return AUDIO_ENCAPSULATION_TYPE_IEC61937;
2308 }
2309 return unexpected(BAD_VALUE);
2310}
2311
2312ConversionResult<media::AudioEncapsulationType>
2313legacy2aidl_audio_encapsulation_type_t_AudioEncapsulationType(
2314 const audio_encapsulation_type_t & legacy) {
2315 switch (legacy) {
2316 case AUDIO_ENCAPSULATION_TYPE_NONE:
2317 return media::AudioEncapsulationType::NONE;
2318 case AUDIO_ENCAPSULATION_TYPE_IEC61937:
2319 return media::AudioEncapsulationType::IEC61937;
2320 }
2321 return unexpected(BAD_VALUE);
2322}
2323
jiabin10a03f12021-05-07 23:46:28 +00002324ConversionResult<TrackSecondaryOutputInfoPair>
2325aidl2legacy_TrackSecondaryOutputInfo_TrackSecondaryOutputInfoPair(
2326 const media::TrackSecondaryOutputInfo& aidl) {
2327 TrackSecondaryOutputInfoPair trackSecondaryOutputInfoPair;
2328 trackSecondaryOutputInfoPair.first =
2329 VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
2330 trackSecondaryOutputInfoPair.second =
2331 VALUE_OR_RETURN(convertContainer<std::vector<audio_port_handle_t>>(
2332 aidl.secondaryOutputIds, aidl2legacy_int32_t_audio_io_handle_t));
2333 return trackSecondaryOutputInfoPair;
2334}
2335
2336ConversionResult<media::TrackSecondaryOutputInfo>
2337legacy2aidl_TrackSecondaryOutputInfoPair_TrackSecondaryOutputInfo(
2338 const TrackSecondaryOutputInfoPair& legacy) {
2339 media::TrackSecondaryOutputInfo trackSecondaryOutputInfo;
2340 trackSecondaryOutputInfo.portId =
2341 VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(legacy.first));
2342 trackSecondaryOutputInfo.secondaryOutputIds =
2343 VALUE_OR_RETURN(convertContainer<std::vector<int32_t>>(
2344 legacy.second, legacy2aidl_audio_io_handle_t_int32_t));
2345 return trackSecondaryOutputInfo;
2346}
2347
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07002348} // namespace android