blob: 4f2651bb1b437940aaf6844033a9254804780ec9 [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
Ytai Ben-Tsvice182942020-11-04 14:48:01 -0800193ConversionResult<String8> aidl2legacy_string_view_String8(std::string_view aidl) {
194 return String8(aidl.data(), aidl.size());
195}
196
197ConversionResult<std::string> legacy2aidl_String8_string(const String8& legacy) {
198 return std::string(legacy.c_str());
199}
200
Andy Hung973638a2020-12-08 20:47:45 -0800201// The legacy enum is unnamed. Thus, we use int32_t.
202ConversionResult<int32_t> aidl2legacy_AudioPortConfigType_int32_t(
203 media::AudioPortConfigType aidl) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700204 switch (aidl) {
205 case media::AudioPortConfigType::SAMPLE_RATE:
206 return AUDIO_PORT_CONFIG_SAMPLE_RATE;
207 case media::AudioPortConfigType::CHANNEL_MASK:
208 return AUDIO_PORT_CONFIG_CHANNEL_MASK;
209 case media::AudioPortConfigType::FORMAT:
210 return AUDIO_PORT_CONFIG_FORMAT;
Hayden Gomes1117ea22020-11-20 11:06:37 -0800211 case media::AudioPortConfigType::GAIN:
212 return AUDIO_PORT_CONFIG_GAIN;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700213 case media::AudioPortConfigType::FLAGS:
214 return AUDIO_PORT_CONFIG_FLAGS;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700215 }
Hayden Gomes1117ea22020-11-20 11:06:37 -0800216 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700217}
218
Andy Hung973638a2020-12-08 20:47:45 -0800219// The legacy enum is unnamed. Thus, we use int32_t.
220ConversionResult<media::AudioPortConfigType> legacy2aidl_int32_t_AudioPortConfigType(
221 int32_t legacy) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700222 switch (legacy) {
223 case AUDIO_PORT_CONFIG_SAMPLE_RATE:
224 return media::AudioPortConfigType::SAMPLE_RATE;
225 case AUDIO_PORT_CONFIG_CHANNEL_MASK:
226 return media::AudioPortConfigType::CHANNEL_MASK;
227 case AUDIO_PORT_CONFIG_FORMAT:
228 return media::AudioPortConfigType::FORMAT;
Hayden Gomes1117ea22020-11-20 11:06:37 -0800229 case AUDIO_PORT_CONFIG_GAIN:
230 return media::AudioPortConfigType::GAIN;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700231 case AUDIO_PORT_CONFIG_FLAGS:
232 return media::AudioPortConfigType::FLAGS;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700233 }
Hayden Gomes1117ea22020-11-20 11:06:37 -0800234 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700235}
236
237ConversionResult<unsigned int> aidl2legacy_int32_t_config_mask(int32_t aidl) {
238 return convertBitmask<unsigned int, int32_t, int, media::AudioPortConfigType>(
Andy Hung973638a2020-12-08 20:47:45 -0800239 aidl, aidl2legacy_AudioPortConfigType_int32_t,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700240 // AudioPortConfigType enum is index-based.
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800241 indexToEnum_index<media::AudioPortConfigType>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700242 // AUDIO_PORT_CONFIG_* flags are mask-based.
243 enumToMask_bitmask<unsigned int, int>);
244}
245
246ConversionResult<int32_t> legacy2aidl_config_mask_int32_t(unsigned int legacy) {
247 return convertBitmask<int32_t, unsigned int, media::AudioPortConfigType, int>(
Andy Hung973638a2020-12-08 20:47:45 -0800248 legacy, legacy2aidl_int32_t_AudioPortConfigType,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700249 // AUDIO_PORT_CONFIG_* flags are mask-based.
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800250 indexToEnum_bitmask<unsigned>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700251 // AudioPortConfigType enum is index-based.
252 enumToMask_index<int32_t, media::AudioPortConfigType>);
253}
254
255ConversionResult<audio_channel_mask_t> aidl2legacy_int32_t_audio_channel_mask_t(int32_t aidl) {
256 // TODO(ytai): should we convert bit-by-bit?
257 // One problem here is that the representation is both opaque and is different based on the
258 // context (input vs. output). Can determine based on type and role, as per useInChannelMask().
259 return convertReinterpret<audio_channel_mask_t>(aidl);
260}
261
262ConversionResult<int32_t> legacy2aidl_audio_channel_mask_t_int32_t(audio_channel_mask_t legacy) {
263 // TODO(ytai): should we convert bit-by-bit?
264 // One problem here is that the representation is both opaque and is different based on the
265 // context (input vs. output). Can determine based on type and role, as per useInChannelMask().
266 return convertReinterpret<int32_t>(legacy);
267}
268
269ConversionResult<audio_io_config_event> aidl2legacy_AudioIoConfigEvent_audio_io_config_event(
270 media::AudioIoConfigEvent aidl) {
271 switch (aidl) {
272 case media::AudioIoConfigEvent::OUTPUT_REGISTERED:
273 return AUDIO_OUTPUT_REGISTERED;
274 case media::AudioIoConfigEvent::OUTPUT_OPENED:
275 return AUDIO_OUTPUT_OPENED;
276 case media::AudioIoConfigEvent::OUTPUT_CLOSED:
277 return AUDIO_OUTPUT_CLOSED;
278 case media::AudioIoConfigEvent::OUTPUT_CONFIG_CHANGED:
279 return AUDIO_OUTPUT_CONFIG_CHANGED;
280 case media::AudioIoConfigEvent::INPUT_REGISTERED:
281 return AUDIO_INPUT_REGISTERED;
282 case media::AudioIoConfigEvent::INPUT_OPENED:
283 return AUDIO_INPUT_OPENED;
284 case media::AudioIoConfigEvent::INPUT_CLOSED:
285 return AUDIO_INPUT_CLOSED;
286 case media::AudioIoConfigEvent::INPUT_CONFIG_CHANGED:
287 return AUDIO_INPUT_CONFIG_CHANGED;
288 case media::AudioIoConfigEvent::CLIENT_STARTED:
289 return AUDIO_CLIENT_STARTED;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700290 }
Andy Hung3f69c162020-12-09 12:08:48 -0800291 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700292}
293
294ConversionResult<media::AudioIoConfigEvent> legacy2aidl_audio_io_config_event_AudioIoConfigEvent(
295 audio_io_config_event legacy) {
296 switch (legacy) {
297 case AUDIO_OUTPUT_REGISTERED:
298 return media::AudioIoConfigEvent::OUTPUT_REGISTERED;
299 case AUDIO_OUTPUT_OPENED:
300 return media::AudioIoConfigEvent::OUTPUT_OPENED;
301 case AUDIO_OUTPUT_CLOSED:
302 return media::AudioIoConfigEvent::OUTPUT_CLOSED;
303 case AUDIO_OUTPUT_CONFIG_CHANGED:
304 return media::AudioIoConfigEvent::OUTPUT_CONFIG_CHANGED;
305 case AUDIO_INPUT_REGISTERED:
306 return media::AudioIoConfigEvent::INPUT_REGISTERED;
307 case AUDIO_INPUT_OPENED:
308 return media::AudioIoConfigEvent::INPUT_OPENED;
309 case AUDIO_INPUT_CLOSED:
310 return media::AudioIoConfigEvent::INPUT_CLOSED;
311 case AUDIO_INPUT_CONFIG_CHANGED:
312 return media::AudioIoConfigEvent::INPUT_CONFIG_CHANGED;
313 case AUDIO_CLIENT_STARTED:
314 return media::AudioIoConfigEvent::CLIENT_STARTED;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700315 }
Andy Hung3f69c162020-12-09 12:08:48 -0800316 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700317}
318
319ConversionResult<audio_port_role_t> aidl2legacy_AudioPortRole_audio_port_role_t(
320 media::AudioPortRole aidl) {
321 switch (aidl) {
322 case media::AudioPortRole::NONE:
323 return AUDIO_PORT_ROLE_NONE;
324 case media::AudioPortRole::SOURCE:
325 return AUDIO_PORT_ROLE_SOURCE;
326 case media::AudioPortRole::SINK:
327 return AUDIO_PORT_ROLE_SINK;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700328 }
Andy Hung3f69c162020-12-09 12:08:48 -0800329 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700330}
331
332ConversionResult<media::AudioPortRole> legacy2aidl_audio_port_role_t_AudioPortRole(
333 audio_port_role_t legacy) {
334 switch (legacy) {
335 case AUDIO_PORT_ROLE_NONE:
336 return media::AudioPortRole::NONE;
337 case AUDIO_PORT_ROLE_SOURCE:
338 return media::AudioPortRole::SOURCE;
339 case AUDIO_PORT_ROLE_SINK:
340 return media::AudioPortRole::SINK;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700341 }
Andy Hung3f69c162020-12-09 12:08:48 -0800342 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700343}
344
345ConversionResult<audio_port_type_t> aidl2legacy_AudioPortType_audio_port_type_t(
346 media::AudioPortType aidl) {
347 switch (aidl) {
348 case media::AudioPortType::NONE:
349 return AUDIO_PORT_TYPE_NONE;
350 case media::AudioPortType::DEVICE:
351 return AUDIO_PORT_TYPE_DEVICE;
352 case media::AudioPortType::MIX:
353 return AUDIO_PORT_TYPE_MIX;
354 case media::AudioPortType::SESSION:
355 return AUDIO_PORT_TYPE_SESSION;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700356 }
Andy Hung3f69c162020-12-09 12:08:48 -0800357 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700358}
359
360ConversionResult<media::AudioPortType> legacy2aidl_audio_port_type_t_AudioPortType(
361 audio_port_type_t legacy) {
362 switch (legacy) {
363 case AUDIO_PORT_TYPE_NONE:
364 return media::AudioPortType::NONE;
365 case AUDIO_PORT_TYPE_DEVICE:
366 return media::AudioPortType::DEVICE;
367 case AUDIO_PORT_TYPE_MIX:
368 return media::AudioPortType::MIX;
369 case AUDIO_PORT_TYPE_SESSION:
370 return media::AudioPortType::SESSION;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700371 }
Andy Hung3f69c162020-12-09 12:08:48 -0800372 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700373}
374
375ConversionResult<audio_format_t> aidl2legacy_AudioFormat_audio_format_t(
376 media::audio::common::AudioFormat aidl) {
377 // This relies on AudioFormat being kept in sync with audio_format_t.
378 static_assert(sizeof(media::audio::common::AudioFormat) == sizeof(audio_format_t));
379 return static_cast<audio_format_t>(aidl);
380}
381
382ConversionResult<media::audio::common::AudioFormat> legacy2aidl_audio_format_t_AudioFormat(
383 audio_format_t legacy) {
384 // This relies on AudioFormat being kept in sync with audio_format_t.
385 static_assert(sizeof(media::audio::common::AudioFormat) == sizeof(audio_format_t));
386 return static_cast<media::audio::common::AudioFormat>(legacy);
387}
388
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800389ConversionResult<audio_gain_mode_t> aidl2legacy_AudioGainMode_audio_gain_mode_t(media::AudioGainMode aidl) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700390 switch (aidl) {
391 case media::AudioGainMode::JOINT:
392 return AUDIO_GAIN_MODE_JOINT;
393 case media::AudioGainMode::CHANNELS:
394 return AUDIO_GAIN_MODE_CHANNELS;
395 case media::AudioGainMode::RAMP:
396 return AUDIO_GAIN_MODE_RAMP;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700397 }
Andy Hung3f69c162020-12-09 12:08:48 -0800398 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700399}
400
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800401ConversionResult<media::AudioGainMode> legacy2aidl_audio_gain_mode_t_AudioGainMode(audio_gain_mode_t legacy) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700402 switch (legacy) {
403 case AUDIO_GAIN_MODE_JOINT:
404 return media::AudioGainMode::JOINT;
405 case AUDIO_GAIN_MODE_CHANNELS:
406 return media::AudioGainMode::CHANNELS;
407 case AUDIO_GAIN_MODE_RAMP:
408 return media::AudioGainMode::RAMP;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700409 }
Andy Hung3f69c162020-12-09 12:08:48 -0800410 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700411}
412
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800413ConversionResult<audio_gain_mode_t> aidl2legacy_int32_t_audio_gain_mode_t_mask(int32_t aidl) {
414 return convertBitmask<audio_gain_mode_t, int32_t, audio_gain_mode_t, media::AudioGainMode>(
415 aidl, aidl2legacy_AudioGainMode_audio_gain_mode_t,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700416 // AudioGainMode is index-based.
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800417 indexToEnum_index<media::AudioGainMode>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700418 // AUDIO_GAIN_MODE_* constants are mask-based.
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800419 enumToMask_bitmask<audio_gain_mode_t, audio_gain_mode_t>);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700420}
421
Andy Hung973638a2020-12-08 20:47:45 -0800422ConversionResult<int32_t> legacy2aidl_audio_gain_mode_t_int32_t_mask(audio_gain_mode_t legacy) {
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800423 return convertBitmask<int32_t, audio_gain_mode_t, media::AudioGainMode, audio_gain_mode_t>(
424 legacy, legacy2aidl_audio_gain_mode_t_AudioGainMode,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700425 // AUDIO_GAIN_MODE_* constants are mask-based.
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800426 indexToEnum_bitmask<audio_gain_mode_t>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700427 // AudioGainMode is index-based.
428 enumToMask_index<int32_t, media::AudioGainMode>);
429}
430
431ConversionResult<audio_devices_t> aidl2legacy_int32_t_audio_devices_t(int32_t aidl) {
432 // TODO(ytai): bitfield?
433 return convertReinterpret<audio_devices_t>(aidl);
434}
435
436ConversionResult<int32_t> legacy2aidl_audio_devices_t_int32_t(audio_devices_t legacy) {
437 // TODO(ytai): bitfield?
438 return convertReinterpret<int32_t>(legacy);
439}
440
441ConversionResult<audio_gain_config> aidl2legacy_AudioGainConfig_audio_gain_config(
442 const media::AudioGainConfig& aidl, media::AudioPortRole role, media::AudioPortType type) {
443 audio_gain_config legacy;
444 legacy.index = VALUE_OR_RETURN(convertIntegral<int>(aidl.index));
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800445 legacy.mode = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_gain_mode_t_mask(aidl.mode));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700446 legacy.channel_mask =
447 VALUE_OR_RETURN(aidl2legacy_int32_t_audio_channel_mask_t(aidl.channelMask));
448 const bool isInput = VALUE_OR_RETURN(direction(role, type)) == Direction::INPUT;
449 const bool isJoint = bitmaskIsSet(aidl.mode, media::AudioGainMode::JOINT);
450 size_t numValues = isJoint ? 1
451 : isInput ? audio_channel_count_from_in_mask(legacy.channel_mask)
452 : audio_channel_count_from_out_mask(legacy.channel_mask);
453 if (aidl.values.size() != numValues || aidl.values.size() > std::size(legacy.values)) {
454 return unexpected(BAD_VALUE);
455 }
456 for (size_t i = 0; i < numValues; ++i) {
457 legacy.values[i] = VALUE_OR_RETURN(convertIntegral<int>(aidl.values[i]));
458 }
459 legacy.ramp_duration_ms = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.rampDurationMs));
460 return legacy;
461}
462
463ConversionResult<media::AudioGainConfig> legacy2aidl_audio_gain_config_AudioGainConfig(
464 const audio_gain_config& legacy, audio_port_role_t role, audio_port_type_t type) {
465 media::AudioGainConfig aidl;
466 aidl.index = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.index));
Andy Hung973638a2020-12-08 20:47:45 -0800467 aidl.mode = VALUE_OR_RETURN(legacy2aidl_audio_gain_mode_t_int32_t_mask(legacy.mode));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700468 aidl.channelMask =
469 VALUE_OR_RETURN(legacy2aidl_audio_channel_mask_t_int32_t(legacy.channel_mask));
470 const bool isInput = VALUE_OR_RETURN(direction(role, type)) == Direction::INPUT;
471 const bool isJoint = (legacy.mode & AUDIO_GAIN_MODE_JOINT) != 0;
472 size_t numValues = isJoint ? 1
473 : isInput ? audio_channel_count_from_in_mask(legacy.channel_mask)
474 : audio_channel_count_from_out_mask(legacy.channel_mask);
475 aidl.values.resize(numValues);
476 for (size_t i = 0; i < numValues; ++i) {
477 aidl.values[i] = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.values[i]));
478 }
479 aidl.rampDurationMs = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.ramp_duration_ms));
480 return aidl;
481}
482
483ConversionResult<audio_input_flags_t> aidl2legacy_AudioInputFlags_audio_input_flags_t(
484 media::AudioInputFlags aidl) {
485 switch (aidl) {
486 case media::AudioInputFlags::FAST:
487 return AUDIO_INPUT_FLAG_FAST;
488 case media::AudioInputFlags::HW_HOTWORD:
489 return AUDIO_INPUT_FLAG_HW_HOTWORD;
490 case media::AudioInputFlags::RAW:
491 return AUDIO_INPUT_FLAG_RAW;
492 case media::AudioInputFlags::SYNC:
493 return AUDIO_INPUT_FLAG_SYNC;
494 case media::AudioInputFlags::MMAP_NOIRQ:
495 return AUDIO_INPUT_FLAG_MMAP_NOIRQ;
496 case media::AudioInputFlags::VOIP_TX:
497 return AUDIO_INPUT_FLAG_VOIP_TX;
498 case media::AudioInputFlags::HW_AV_SYNC:
499 return AUDIO_INPUT_FLAG_HW_AV_SYNC;
500 case media::AudioInputFlags::DIRECT:
501 return AUDIO_INPUT_FLAG_DIRECT;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700502 }
Andy Hung3f69c162020-12-09 12:08:48 -0800503 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700504}
505
506ConversionResult<media::AudioInputFlags> legacy2aidl_audio_input_flags_t_AudioInputFlags(
507 audio_input_flags_t legacy) {
508 switch (legacy) {
Andy Hung3f69c162020-12-09 12:08:48 -0800509 case AUDIO_INPUT_FLAG_NONE:
510 break; // shouldn't get here. must be listed -Werror,-Wswitch
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700511 case AUDIO_INPUT_FLAG_FAST:
512 return media::AudioInputFlags::FAST;
513 case AUDIO_INPUT_FLAG_HW_HOTWORD:
514 return media::AudioInputFlags::HW_HOTWORD;
515 case AUDIO_INPUT_FLAG_RAW:
516 return media::AudioInputFlags::RAW;
517 case AUDIO_INPUT_FLAG_SYNC:
518 return media::AudioInputFlags::SYNC;
519 case AUDIO_INPUT_FLAG_MMAP_NOIRQ:
520 return media::AudioInputFlags::MMAP_NOIRQ;
521 case AUDIO_INPUT_FLAG_VOIP_TX:
522 return media::AudioInputFlags::VOIP_TX;
523 case AUDIO_INPUT_FLAG_HW_AV_SYNC:
524 return media::AudioInputFlags::HW_AV_SYNC;
525 case AUDIO_INPUT_FLAG_DIRECT:
526 return media::AudioInputFlags::DIRECT;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700527 }
Andy Hung3f69c162020-12-09 12:08:48 -0800528 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700529}
530
531ConversionResult<audio_output_flags_t> aidl2legacy_AudioOutputFlags_audio_output_flags_t(
532 media::AudioOutputFlags aidl) {
533 switch (aidl) {
534 case media::AudioOutputFlags::DIRECT:
535 return AUDIO_OUTPUT_FLAG_DIRECT;
536 case media::AudioOutputFlags::PRIMARY:
537 return AUDIO_OUTPUT_FLAG_PRIMARY;
538 case media::AudioOutputFlags::FAST:
539 return AUDIO_OUTPUT_FLAG_FAST;
540 case media::AudioOutputFlags::DEEP_BUFFER:
541 return AUDIO_OUTPUT_FLAG_DEEP_BUFFER;
542 case media::AudioOutputFlags::COMPRESS_OFFLOAD:
543 return AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD;
544 case media::AudioOutputFlags::NON_BLOCKING:
545 return AUDIO_OUTPUT_FLAG_NON_BLOCKING;
546 case media::AudioOutputFlags::HW_AV_SYNC:
547 return AUDIO_OUTPUT_FLAG_HW_AV_SYNC;
548 case media::AudioOutputFlags::TTS:
549 return AUDIO_OUTPUT_FLAG_TTS;
550 case media::AudioOutputFlags::RAW:
551 return AUDIO_OUTPUT_FLAG_RAW;
552 case media::AudioOutputFlags::SYNC:
553 return AUDIO_OUTPUT_FLAG_SYNC;
554 case media::AudioOutputFlags::IEC958_NONAUDIO:
555 return AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO;
556 case media::AudioOutputFlags::DIRECT_PCM:
557 return AUDIO_OUTPUT_FLAG_DIRECT_PCM;
558 case media::AudioOutputFlags::MMAP_NOIRQ:
559 return AUDIO_OUTPUT_FLAG_MMAP_NOIRQ;
560 case media::AudioOutputFlags::VOIP_RX:
561 return AUDIO_OUTPUT_FLAG_VOIP_RX;
562 case media::AudioOutputFlags::INCALL_MUSIC:
563 return AUDIO_OUTPUT_FLAG_INCALL_MUSIC;
Eric Laurent90fe31c2020-11-26 20:06:35 +0100564 case media::AudioOutputFlags::GAPLESS_OFFLOAD:
565 return AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700566 }
Andy Hung3f69c162020-12-09 12:08:48 -0800567 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700568}
569
570ConversionResult<media::AudioOutputFlags> legacy2aidl_audio_output_flags_t_AudioOutputFlags(
571 audio_output_flags_t legacy) {
572 switch (legacy) {
Andy Hung3f69c162020-12-09 12:08:48 -0800573 case AUDIO_OUTPUT_FLAG_NONE:
574 break; // shouldn't get here. must be listed -Werror,-Wswitch
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700575 case AUDIO_OUTPUT_FLAG_DIRECT:
576 return media::AudioOutputFlags::DIRECT;
577 case AUDIO_OUTPUT_FLAG_PRIMARY:
578 return media::AudioOutputFlags::PRIMARY;
579 case AUDIO_OUTPUT_FLAG_FAST:
580 return media::AudioOutputFlags::FAST;
581 case AUDIO_OUTPUT_FLAG_DEEP_BUFFER:
582 return media::AudioOutputFlags::DEEP_BUFFER;
583 case AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD:
584 return media::AudioOutputFlags::COMPRESS_OFFLOAD;
585 case AUDIO_OUTPUT_FLAG_NON_BLOCKING:
586 return media::AudioOutputFlags::NON_BLOCKING;
587 case AUDIO_OUTPUT_FLAG_HW_AV_SYNC:
588 return media::AudioOutputFlags::HW_AV_SYNC;
589 case AUDIO_OUTPUT_FLAG_TTS:
590 return media::AudioOutputFlags::TTS;
591 case AUDIO_OUTPUT_FLAG_RAW:
592 return media::AudioOutputFlags::RAW;
593 case AUDIO_OUTPUT_FLAG_SYNC:
594 return media::AudioOutputFlags::SYNC;
595 case AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO:
596 return media::AudioOutputFlags::IEC958_NONAUDIO;
597 case AUDIO_OUTPUT_FLAG_DIRECT_PCM:
598 return media::AudioOutputFlags::DIRECT_PCM;
599 case AUDIO_OUTPUT_FLAG_MMAP_NOIRQ:
600 return media::AudioOutputFlags::MMAP_NOIRQ;
601 case AUDIO_OUTPUT_FLAG_VOIP_RX:
602 return media::AudioOutputFlags::VOIP_RX;
603 case AUDIO_OUTPUT_FLAG_INCALL_MUSIC:
604 return media::AudioOutputFlags::INCALL_MUSIC;
Eric Laurent90fe31c2020-11-26 20:06:35 +0100605 case AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD:
606 return media::AudioOutputFlags::GAPLESS_OFFLOAD;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700607 }
Andy Hung3f69c162020-12-09 12:08:48 -0800608 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700609}
610
Andy Hung973638a2020-12-08 20:47:45 -0800611ConversionResult<audio_input_flags_t> aidl2legacy_int32_t_audio_input_flags_t_mask(
612 int32_t aidl) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700613 using LegacyMask = std::underlying_type_t<audio_input_flags_t>;
614
615 LegacyMask converted = VALUE_OR_RETURN(
616 (convertBitmask<LegacyMask, int32_t, audio_input_flags_t, media::AudioInputFlags>(
617 aidl, aidl2legacy_AudioInputFlags_audio_input_flags_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800618 indexToEnum_index<media::AudioInputFlags>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700619 enumToMask_bitmask<LegacyMask, audio_input_flags_t>)));
620 return static_cast<audio_input_flags_t>(converted);
621}
622
Andy Hung973638a2020-12-08 20:47:45 -0800623ConversionResult<int32_t> legacy2aidl_audio_input_flags_t_int32_t_mask(
624 audio_input_flags_t legacy) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700625 using LegacyMask = std::underlying_type_t<audio_input_flags_t>;
626
627 LegacyMask legacyMask = static_cast<LegacyMask>(legacy);
628 return convertBitmask<int32_t, LegacyMask, media::AudioInputFlags, audio_input_flags_t>(
629 legacyMask, legacy2aidl_audio_input_flags_t_AudioInputFlags,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800630 indexToEnum_bitmask<audio_input_flags_t>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700631 enumToMask_index<int32_t, media::AudioInputFlags>);
632}
633
Andy Hung973638a2020-12-08 20:47:45 -0800634ConversionResult<audio_output_flags_t> aidl2legacy_int32_t_audio_output_flags_t_mask(
635 int32_t aidl) {
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700636 return convertBitmask<audio_output_flags_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800637 int32_t,
638 audio_output_flags_t,
639 media::AudioOutputFlags>(
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700640 aidl, aidl2legacy_AudioOutputFlags_audio_output_flags_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800641 indexToEnum_index<media::AudioOutputFlags>,
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700642 enumToMask_bitmask<audio_output_flags_t, audio_output_flags_t>);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700643}
644
Andy Hung973638a2020-12-08 20:47:45 -0800645ConversionResult<int32_t> legacy2aidl_audio_output_flags_t_int32_t_mask(
646 audio_output_flags_t legacy) {
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700647 using LegacyMask = std::underlying_type_t<audio_output_flags_t>;
648
649 LegacyMask legacyMask = static_cast<LegacyMask>(legacy);
650 return convertBitmask<int32_t, LegacyMask, media::AudioOutputFlags, audio_output_flags_t>(
651 legacyMask, legacy2aidl_audio_output_flags_t_AudioOutputFlags,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -0800652 indexToEnum_bitmask<audio_output_flags_t>,
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700653 enumToMask_index<int32_t, media::AudioOutputFlags>);
654}
655
656ConversionResult<audio_io_flags> aidl2legacy_AudioIoFlags_audio_io_flags(
657 const media::AudioIoFlags& aidl, media::AudioPortRole role, media::AudioPortType type) {
658 audio_io_flags legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700659 Direction dir = VALUE_OR_RETURN(direction(role, type));
660 switch (dir) {
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700661 case Direction::INPUT: {
662 legacy.input = VALUE_OR_RETURN(
Andy Hung973638a2020-12-08 20:47:45 -0800663 aidl2legacy_int32_t_audio_input_flags_t_mask(
664 VALUE_OR_RETURN(UNION_GET(aidl, input))));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700665 }
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700666 break;
667
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700668 case Direction::OUTPUT: {
669 legacy.output = VALUE_OR_RETURN(
Andy Hung973638a2020-12-08 20:47:45 -0800670 aidl2legacy_int32_t_audio_output_flags_t_mask(
671 VALUE_OR_RETURN(UNION_GET(aidl, output))));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700672 }
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700673 break;
674 }
675
676 return legacy;
677}
678
679ConversionResult<media::AudioIoFlags> legacy2aidl_audio_io_flags_AudioIoFlags(
680 const audio_io_flags& legacy, audio_port_role_t role, audio_port_type_t type) {
681 media::AudioIoFlags aidl;
682
683 Direction dir = VALUE_OR_RETURN(direction(role, type));
684 switch (dir) {
685 case Direction::INPUT:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700686 UNION_SET(aidl, input,
Andy Hung973638a2020-12-08 20:47:45 -0800687 VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(
688 legacy.input)));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700689 break;
690 case Direction::OUTPUT:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700691 UNION_SET(aidl, output,
Andy Hung973638a2020-12-08 20:47:45 -0800692 VALUE_OR_RETURN(legacy2aidl_audio_output_flags_t_int32_t_mask(
693 legacy.output)));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700694 break;
695 }
696 return aidl;
697}
698
Andy Hung973638a2020-12-08 20:47:45 -0800699ConversionResult<audio_port_config_device_ext>
700aidl2legacy_AudioPortConfigDeviceExt_audio_port_config_device_ext(
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700701 const media::AudioPortConfigDeviceExt& aidl) {
702 audio_port_config_device_ext legacy;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700703 legacy.hw_module = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_module_handle_t(aidl.hwModule));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700704 legacy.type = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_devices_t(aidl.type));
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700705 RETURN_IF_ERROR(aidl2legacy_string(aidl.address, legacy.address, AUDIO_DEVICE_MAX_ADDRESS_LEN));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700706 return legacy;
707}
708
Andy Hung973638a2020-12-08 20:47:45 -0800709ConversionResult<media::AudioPortConfigDeviceExt>
710legacy2aidl_audio_port_config_device_ext_AudioPortConfigDeviceExt(
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700711 const audio_port_config_device_ext& legacy) {
712 media::AudioPortConfigDeviceExt aidl;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700713 aidl.hwModule = VALUE_OR_RETURN(legacy2aidl_audio_module_handle_t_int32_t(legacy.hw_module));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700714 aidl.type = VALUE_OR_RETURN(legacy2aidl_audio_devices_t_int32_t(legacy.type));
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700715 aidl.address = VALUE_OR_RETURN(
716 legacy2aidl_string(legacy.address, AUDIO_DEVICE_MAX_ADDRESS_LEN));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700717 return aidl;
718}
719
720ConversionResult<audio_stream_type_t> aidl2legacy_AudioStreamType_audio_stream_type_t(
721 media::AudioStreamType aidl) {
722 switch (aidl) {
723 case media::AudioStreamType::DEFAULT:
724 return AUDIO_STREAM_DEFAULT;
725 case media::AudioStreamType::VOICE_CALL:
726 return AUDIO_STREAM_VOICE_CALL;
727 case media::AudioStreamType::SYSTEM:
728 return AUDIO_STREAM_SYSTEM;
729 case media::AudioStreamType::RING:
730 return AUDIO_STREAM_RING;
731 case media::AudioStreamType::MUSIC:
732 return AUDIO_STREAM_MUSIC;
733 case media::AudioStreamType::ALARM:
734 return AUDIO_STREAM_ALARM;
735 case media::AudioStreamType::NOTIFICATION:
736 return AUDIO_STREAM_NOTIFICATION;
737 case media::AudioStreamType::BLUETOOTH_SCO:
738 return AUDIO_STREAM_BLUETOOTH_SCO;
739 case media::AudioStreamType::ENFORCED_AUDIBLE:
740 return AUDIO_STREAM_ENFORCED_AUDIBLE;
741 case media::AudioStreamType::DTMF:
742 return AUDIO_STREAM_DTMF;
743 case media::AudioStreamType::TTS:
744 return AUDIO_STREAM_TTS;
745 case media::AudioStreamType::ACCESSIBILITY:
746 return AUDIO_STREAM_ACCESSIBILITY;
747 case media::AudioStreamType::ASSISTANT:
748 return AUDIO_STREAM_ASSISTANT;
749 case media::AudioStreamType::REROUTING:
750 return AUDIO_STREAM_REROUTING;
751 case media::AudioStreamType::PATCH:
752 return AUDIO_STREAM_PATCH;
753 case media::AudioStreamType::CALL_ASSISTANT:
754 return AUDIO_STREAM_CALL_ASSISTANT;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700755 }
Andy Hung3f69c162020-12-09 12:08:48 -0800756 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700757}
758
759ConversionResult<media::AudioStreamType> legacy2aidl_audio_stream_type_t_AudioStreamType(
760 audio_stream_type_t legacy) {
761 switch (legacy) {
762 case AUDIO_STREAM_DEFAULT:
763 return media::AudioStreamType::DEFAULT;
764 case AUDIO_STREAM_VOICE_CALL:
765 return media::AudioStreamType::VOICE_CALL;
766 case AUDIO_STREAM_SYSTEM:
767 return media::AudioStreamType::SYSTEM;
768 case AUDIO_STREAM_RING:
769 return media::AudioStreamType::RING;
770 case AUDIO_STREAM_MUSIC:
771 return media::AudioStreamType::MUSIC;
772 case AUDIO_STREAM_ALARM:
773 return media::AudioStreamType::ALARM;
774 case AUDIO_STREAM_NOTIFICATION:
775 return media::AudioStreamType::NOTIFICATION;
776 case AUDIO_STREAM_BLUETOOTH_SCO:
777 return media::AudioStreamType::BLUETOOTH_SCO;
778 case AUDIO_STREAM_ENFORCED_AUDIBLE:
779 return media::AudioStreamType::ENFORCED_AUDIBLE;
780 case AUDIO_STREAM_DTMF:
781 return media::AudioStreamType::DTMF;
782 case AUDIO_STREAM_TTS:
783 return media::AudioStreamType::TTS;
784 case AUDIO_STREAM_ACCESSIBILITY:
785 return media::AudioStreamType::ACCESSIBILITY;
786 case AUDIO_STREAM_ASSISTANT:
787 return media::AudioStreamType::ASSISTANT;
788 case AUDIO_STREAM_REROUTING:
789 return media::AudioStreamType::REROUTING;
790 case AUDIO_STREAM_PATCH:
791 return media::AudioStreamType::PATCH;
792 case AUDIO_STREAM_CALL_ASSISTANT:
793 return media::AudioStreamType::CALL_ASSISTANT;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700794 }
Andy Hung3f69c162020-12-09 12:08:48 -0800795 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700796}
797
798ConversionResult<audio_source_t> aidl2legacy_AudioSourceType_audio_source_t(
799 media::AudioSourceType aidl) {
800 switch (aidl) {
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800801 case media::AudioSourceType::INVALID:
802 // This value does not have an enum
803 return AUDIO_SOURCE_INVALID;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700804 case media::AudioSourceType::DEFAULT:
805 return AUDIO_SOURCE_DEFAULT;
806 case media::AudioSourceType::MIC:
807 return AUDIO_SOURCE_MIC;
808 case media::AudioSourceType::VOICE_UPLINK:
809 return AUDIO_SOURCE_VOICE_UPLINK;
810 case media::AudioSourceType::VOICE_DOWNLINK:
811 return AUDIO_SOURCE_VOICE_DOWNLINK;
812 case media::AudioSourceType::VOICE_CALL:
813 return AUDIO_SOURCE_VOICE_CALL;
814 case media::AudioSourceType::CAMCORDER:
815 return AUDIO_SOURCE_CAMCORDER;
816 case media::AudioSourceType::VOICE_RECOGNITION:
817 return AUDIO_SOURCE_VOICE_RECOGNITION;
818 case media::AudioSourceType::VOICE_COMMUNICATION:
819 return AUDIO_SOURCE_VOICE_COMMUNICATION;
820 case media::AudioSourceType::REMOTE_SUBMIX:
821 return AUDIO_SOURCE_REMOTE_SUBMIX;
822 case media::AudioSourceType::UNPROCESSED:
823 return AUDIO_SOURCE_UNPROCESSED;
824 case media::AudioSourceType::VOICE_PERFORMANCE:
825 return AUDIO_SOURCE_VOICE_PERFORMANCE;
826 case media::AudioSourceType::ECHO_REFERENCE:
827 return AUDIO_SOURCE_ECHO_REFERENCE;
828 case media::AudioSourceType::FM_TUNER:
829 return AUDIO_SOURCE_FM_TUNER;
830 case media::AudioSourceType::HOTWORD:
831 return AUDIO_SOURCE_HOTWORD;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700832 }
Andy Hung3f69c162020-12-09 12:08:48 -0800833 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700834}
835
836ConversionResult<media::AudioSourceType> legacy2aidl_audio_source_t_AudioSourceType(
837 audio_source_t legacy) {
838 switch (legacy) {
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800839 case AUDIO_SOURCE_INVALID:
840 return media::AudioSourceType::INVALID;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700841 case AUDIO_SOURCE_DEFAULT:
842 return media::AudioSourceType::DEFAULT;
843 case AUDIO_SOURCE_MIC:
844 return media::AudioSourceType::MIC;
845 case AUDIO_SOURCE_VOICE_UPLINK:
846 return media::AudioSourceType::VOICE_UPLINK;
847 case AUDIO_SOURCE_VOICE_DOWNLINK:
848 return media::AudioSourceType::VOICE_DOWNLINK;
849 case AUDIO_SOURCE_VOICE_CALL:
850 return media::AudioSourceType::VOICE_CALL;
851 case AUDIO_SOURCE_CAMCORDER:
852 return media::AudioSourceType::CAMCORDER;
853 case AUDIO_SOURCE_VOICE_RECOGNITION:
854 return media::AudioSourceType::VOICE_RECOGNITION;
855 case AUDIO_SOURCE_VOICE_COMMUNICATION:
856 return media::AudioSourceType::VOICE_COMMUNICATION;
857 case AUDIO_SOURCE_REMOTE_SUBMIX:
858 return media::AudioSourceType::REMOTE_SUBMIX;
859 case AUDIO_SOURCE_UNPROCESSED:
860 return media::AudioSourceType::UNPROCESSED;
861 case AUDIO_SOURCE_VOICE_PERFORMANCE:
862 return media::AudioSourceType::VOICE_PERFORMANCE;
863 case AUDIO_SOURCE_ECHO_REFERENCE:
864 return media::AudioSourceType::ECHO_REFERENCE;
865 case AUDIO_SOURCE_FM_TUNER:
866 return media::AudioSourceType::FM_TUNER;
867 case AUDIO_SOURCE_HOTWORD:
868 return media::AudioSourceType::HOTWORD;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700869 }
Andy Hung3f69c162020-12-09 12:08:48 -0800870 return unexpected(BAD_VALUE);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700871}
872
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800873ConversionResult<audio_session_t> aidl2legacy_int32_t_audio_session_t(int32_t aidl) {
874 return convertReinterpret<audio_session_t>(aidl);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700875}
876
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800877ConversionResult<int32_t> legacy2aidl_audio_session_t_int32_t(audio_session_t legacy) {
878 return convertReinterpret<int32_t>(legacy);
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700879}
880
881// This type is unnamed in the original definition, thus we name it here.
882using audio_port_config_mix_ext_usecase = decltype(audio_port_config_mix_ext::usecase);
883
884ConversionResult<audio_port_config_mix_ext_usecase> aidl2legacy_AudioPortConfigMixExtUseCase(
885 const media::AudioPortConfigMixExtUseCase& aidl, media::AudioPortRole role) {
886 audio_port_config_mix_ext_usecase legacy;
887
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700888 switch (role) {
889 case media::AudioPortRole::NONE:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700890 // Just verify that the union is empty.
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800891 VALUE_OR_RETURN(UNION_GET(aidl, unspecified));
Andy Hung3f69c162020-12-09 12:08:48 -0800892 return legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700893
894 case media::AudioPortRole::SOURCE:
895 // This is not a bug. A SOURCE role corresponds to the stream field.
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700896 legacy.stream = VALUE_OR_RETURN(aidl2legacy_AudioStreamType_audio_stream_type_t(
897 VALUE_OR_RETURN(UNION_GET(aidl, stream))));
Andy Hung3f69c162020-12-09 12:08:48 -0800898 return legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700899
900 case media::AudioPortRole::SINK:
901 // This is not a bug. A SINK role corresponds to the source field.
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700902 legacy.source = VALUE_OR_RETURN(aidl2legacy_AudioSourceType_audio_source_t(
903 VALUE_OR_RETURN(UNION_GET(aidl, source))));
Andy Hung3f69c162020-12-09 12:08:48 -0800904 return legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700905 }
Andy Hung3f69c162020-12-09 12:08:48 -0800906 LOG_ALWAYS_FATAL("Shouldn't get here"); // with -Werror,-Wswitch may compile-time fail
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700907}
908
909ConversionResult<media::AudioPortConfigMixExtUseCase> legacy2aidl_AudioPortConfigMixExtUseCase(
910 const audio_port_config_mix_ext_usecase& legacy, audio_port_role_t role) {
911 media::AudioPortConfigMixExtUseCase aidl;
912
913 switch (role) {
914 case AUDIO_PORT_ROLE_NONE:
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800915 UNION_SET(aidl, unspecified, false);
Andy Hung3f69c162020-12-09 12:08:48 -0800916 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700917 case AUDIO_PORT_ROLE_SOURCE:
918 // This is not a bug. A SOURCE role corresponds to the stream field.
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700919 UNION_SET(aidl, stream, VALUE_OR_RETURN(
920 legacy2aidl_audio_stream_type_t_AudioStreamType(legacy.stream)));
Andy Hung3f69c162020-12-09 12:08:48 -0800921 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700922 case AUDIO_PORT_ROLE_SINK:
923 // This is not a bug. A SINK role corresponds to the source field.
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700924 UNION_SET(aidl, source,
925 VALUE_OR_RETURN(legacy2aidl_audio_source_t_AudioSourceType(legacy.source)));
Andy Hung3f69c162020-12-09 12:08:48 -0800926 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700927 }
Andy Hung3f69c162020-12-09 12:08:48 -0800928 LOG_ALWAYS_FATAL("Shouldn't get here"); // with -Werror,-Wswitch may compile-time fail
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700929}
930
931ConversionResult<audio_port_config_mix_ext> aidl2legacy_AudioPortConfigMixExt(
932 const media::AudioPortConfigMixExt& aidl, media::AudioPortRole role) {
933 audio_port_config_mix_ext legacy;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700934 legacy.hw_module = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_module_handle_t(aidl.hwModule));
935 legacy.handle = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.handle));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700936 legacy.usecase = VALUE_OR_RETURN(aidl2legacy_AudioPortConfigMixExtUseCase(aidl.usecase, role));
937 return legacy;
938}
939
940ConversionResult<media::AudioPortConfigMixExt> legacy2aidl_AudioPortConfigMixExt(
941 const audio_port_config_mix_ext& legacy, audio_port_role_t role) {
942 media::AudioPortConfigMixExt aidl;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -0700943 aidl.hwModule = VALUE_OR_RETURN(legacy2aidl_audio_module_handle_t_int32_t(legacy.hw_module));
944 aidl.handle = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(legacy.handle));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700945 aidl.usecase = VALUE_OR_RETURN(legacy2aidl_AudioPortConfigMixExtUseCase(legacy.usecase, role));
946 return aidl;
947}
948
Andy Hung973638a2020-12-08 20:47:45 -0800949ConversionResult<audio_port_config_session_ext>
950aidl2legacy_AudioPortConfigSessionExt_audio_port_config_session_ext(
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700951 const media::AudioPortConfigSessionExt& aidl) {
952 audio_port_config_session_ext legacy;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800953 legacy.session = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.session));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700954 return legacy;
955}
956
Andy Hung973638a2020-12-08 20:47:45 -0800957ConversionResult<media::AudioPortConfigSessionExt>
958legacy2aidl_audio_port_config_session_ext_AudioPortConfigSessionExt(
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700959 const audio_port_config_session_ext& legacy) {
960 media::AudioPortConfigSessionExt aidl;
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -0800961 aidl.session = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(legacy.session));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700962 return aidl;
963}
964
965// This type is unnamed in the original definition, thus we name it here.
966using audio_port_config_ext = decltype(audio_port_config::ext);
967
968ConversionResult<audio_port_config_ext> aidl2legacy_AudioPortConfigExt(
969 const media::AudioPortConfigExt& aidl, media::AudioPortType type,
970 media::AudioPortRole role) {
971 audio_port_config_ext legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700972 switch (type) {
973 case media::AudioPortType::NONE:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700974 // Just verify that the union is empty.
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -0800975 VALUE_OR_RETURN(UNION_GET(aidl, unspecified));
Andy Hung3f69c162020-12-09 12:08:48 -0800976 return legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700977 case media::AudioPortType::DEVICE:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700978 legacy.device = VALUE_OR_RETURN(
Andy Hung973638a2020-12-08 20:47:45 -0800979 aidl2legacy_AudioPortConfigDeviceExt_audio_port_config_device_ext(
980 VALUE_OR_RETURN(UNION_GET(aidl, device))));
Andy Hung3f69c162020-12-09 12:08:48 -0800981 return legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700982 case media::AudioPortType::MIX:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -0700983 legacy.mix = VALUE_OR_RETURN(
984 aidl2legacy_AudioPortConfigMixExt(VALUE_OR_RETURN(UNION_GET(aidl, mix)), role));
Andy Hung3f69c162020-12-09 12:08:48 -0800985 return legacy;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700986 case media::AudioPortType::SESSION:
Andy Hung973638a2020-12-08 20:47:45 -0800987 legacy.session = VALUE_OR_RETURN(
988 aidl2legacy_AudioPortConfigSessionExt_audio_port_config_session_ext(
989 VALUE_OR_RETURN(UNION_GET(aidl, session))));
Andy Hung3f69c162020-12-09 12:08:48 -0800990 return legacy;
991
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700992 }
Andy Hung3f69c162020-12-09 12:08:48 -0800993 LOG_ALWAYS_FATAL("Shouldn't get here"); // with -Werror,-Wswitch may compile-time fail
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -0700994}
995
996ConversionResult<media::AudioPortConfigExt> legacy2aidl_AudioPortConfigExt(
997 const audio_port_config_ext& legacy, audio_port_type_t type, audio_port_role_t role) {
998 media::AudioPortConfigExt aidl;
999
1000 switch (type) {
1001 case AUDIO_PORT_TYPE_NONE:
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001002 UNION_SET(aidl, unspecified, false);
Andy Hung3f69c162020-12-09 12:08:48 -08001003 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001004 case AUDIO_PORT_TYPE_DEVICE:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001005 UNION_SET(aidl, device,
Andy Hung973638a2020-12-08 20:47:45 -08001006 VALUE_OR_RETURN(
1007 legacy2aidl_audio_port_config_device_ext_AudioPortConfigDeviceExt(
1008 legacy.device)));
Andy Hung3f69c162020-12-09 12:08:48 -08001009 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001010 case AUDIO_PORT_TYPE_MIX:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001011 UNION_SET(aidl, mix,
1012 VALUE_OR_RETURN(legacy2aidl_AudioPortConfigMixExt(legacy.mix, role)));
Andy Hung3f69c162020-12-09 12:08:48 -08001013 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001014 case AUDIO_PORT_TYPE_SESSION:
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001015 UNION_SET(aidl, session,
Andy Hung973638a2020-12-08 20:47:45 -08001016 VALUE_OR_RETURN(
1017 legacy2aidl_audio_port_config_session_ext_AudioPortConfigSessionExt(
1018 legacy.session)));
Andy Hung3f69c162020-12-09 12:08:48 -08001019 return aidl;
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001020 }
Andy Hung3f69c162020-12-09 12:08:48 -08001021 LOG_ALWAYS_FATAL("Shouldn't get here"); // with -Werror,-Wswitch may compile-time fail
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001022}
1023
1024ConversionResult<audio_port_config> aidl2legacy_AudioPortConfig_audio_port_config(
1025 const media::AudioPortConfig& aidl) {
1026 audio_port_config legacy;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001027 legacy.id = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.id));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001028 legacy.role = VALUE_OR_RETURN(aidl2legacy_AudioPortRole_audio_port_role_t(aidl.role));
1029 legacy.type = VALUE_OR_RETURN(aidl2legacy_AudioPortType_audio_port_type_t(aidl.type));
1030 legacy.config_mask = VALUE_OR_RETURN(aidl2legacy_int32_t_config_mask(aidl.configMask));
1031 if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::SAMPLE_RATE)) {
1032 legacy.sample_rate = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.sampleRate));
1033 }
1034 if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::CHANNEL_MASK)) {
1035 legacy.channel_mask =
1036 VALUE_OR_RETURN(aidl2legacy_int32_t_audio_channel_mask_t(aidl.channelMask));
1037 }
1038 if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::FORMAT)) {
1039 legacy.format = VALUE_OR_RETURN(aidl2legacy_AudioFormat_audio_format_t(aidl.format));
1040 }
1041 if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::GAIN)) {
1042 legacy.gain = VALUE_OR_RETURN(
1043 aidl2legacy_AudioGainConfig_audio_gain_config(aidl.gain, aidl.role, aidl.type));
1044 }
1045 if (bitmaskIsSet(aidl.configMask, media::AudioPortConfigType::FLAGS)) {
1046 legacy.flags = VALUE_OR_RETURN(
1047 aidl2legacy_AudioIoFlags_audio_io_flags(aidl.flags, aidl.role, aidl.type));
1048 }
1049 legacy.ext = VALUE_OR_RETURN(aidl2legacy_AudioPortConfigExt(aidl.ext, aidl.type, aidl.role));
1050 return legacy;
1051}
1052
1053ConversionResult<media::AudioPortConfig> legacy2aidl_audio_port_config_AudioPortConfig(
1054 const audio_port_config& legacy) {
1055 media::AudioPortConfig aidl;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001056 aidl.id = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(legacy.id));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001057 aidl.role = VALUE_OR_RETURN(legacy2aidl_audio_port_role_t_AudioPortRole(legacy.role));
1058 aidl.type = VALUE_OR_RETURN(legacy2aidl_audio_port_type_t_AudioPortType(legacy.type));
1059 aidl.configMask = VALUE_OR_RETURN(legacy2aidl_config_mask_int32_t(legacy.config_mask));
1060 if (legacy.config_mask & AUDIO_PORT_CONFIG_SAMPLE_RATE) {
1061 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.sample_rate));
1062 }
1063 if (legacy.config_mask & AUDIO_PORT_CONFIG_CHANNEL_MASK) {
1064 aidl.channelMask =
1065 VALUE_OR_RETURN(legacy2aidl_audio_channel_mask_t_int32_t(legacy.channel_mask));
1066 }
1067 if (legacy.config_mask & AUDIO_PORT_CONFIG_FORMAT) {
1068 aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormat(legacy.format));
1069 }
1070 if (legacy.config_mask & AUDIO_PORT_CONFIG_GAIN) {
1071 aidl.gain = VALUE_OR_RETURN(legacy2aidl_audio_gain_config_AudioGainConfig(
1072 legacy.gain, legacy.role, legacy.type));
1073 }
1074 if (legacy.config_mask & AUDIO_PORT_CONFIG_FLAGS) {
1075 aidl.flags = VALUE_OR_RETURN(
1076 legacy2aidl_audio_io_flags_AudioIoFlags(legacy.flags, legacy.role, legacy.type));
1077 }
1078 aidl.ext =
1079 VALUE_OR_RETURN(legacy2aidl_AudioPortConfigExt(legacy.ext, legacy.type, legacy.role));
1080 return aidl;
1081}
1082
1083ConversionResult<struct audio_patch> aidl2legacy_AudioPatch_audio_patch(
1084 const media::AudioPatch& aidl) {
1085 struct audio_patch legacy;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001086 legacy.id = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_patch_handle_t(aidl.id));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001087 legacy.num_sinks = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.sinks.size()));
1088 if (legacy.num_sinks > AUDIO_PATCH_PORTS_MAX) {
1089 return unexpected(BAD_VALUE);
1090 }
1091 for (size_t i = 0; i < legacy.num_sinks; ++i) {
1092 legacy.sinks[i] =
1093 VALUE_OR_RETURN(aidl2legacy_AudioPortConfig_audio_port_config(aidl.sinks[i]));
1094 }
1095 legacy.num_sources = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.sources.size()));
1096 if (legacy.num_sources > AUDIO_PATCH_PORTS_MAX) {
1097 return unexpected(BAD_VALUE);
1098 }
1099 for (size_t i = 0; i < legacy.num_sources; ++i) {
1100 legacy.sources[i] =
1101 VALUE_OR_RETURN(aidl2legacy_AudioPortConfig_audio_port_config(aidl.sources[i]));
1102 }
1103 return legacy;
1104}
1105
1106ConversionResult<media::AudioPatch> legacy2aidl_audio_patch_AudioPatch(
1107 const struct audio_patch& legacy) {
1108 media::AudioPatch aidl;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001109 aidl.id = VALUE_OR_RETURN(legacy2aidl_audio_patch_handle_t_int32_t(legacy.id));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001110
1111 if (legacy.num_sinks > AUDIO_PATCH_PORTS_MAX) {
1112 return unexpected(BAD_VALUE);
1113 }
1114 for (unsigned int i = 0; i < legacy.num_sinks; ++i) {
1115 aidl.sinks.push_back(
1116 VALUE_OR_RETURN(legacy2aidl_audio_port_config_AudioPortConfig(legacy.sinks[i])));
1117 }
1118 if (legacy.num_sources > AUDIO_PATCH_PORTS_MAX) {
1119 return unexpected(BAD_VALUE);
1120 }
1121 for (unsigned int i = 0; i < legacy.num_sources; ++i) {
1122 aidl.sources.push_back(
1123 VALUE_OR_RETURN(legacy2aidl_audio_port_config_AudioPortConfig(legacy.sources[i])));
1124 }
1125 return aidl;
1126}
1127
1128ConversionResult<sp<AudioIoDescriptor>> aidl2legacy_AudioIoDescriptor_AudioIoDescriptor(
1129 const media::AudioIoDescriptor& aidl) {
1130 sp<AudioIoDescriptor> legacy(new AudioIoDescriptor());
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001131 legacy->mIoHandle = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.ioHandle));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001132 legacy->mPatch = VALUE_OR_RETURN(aidl2legacy_AudioPatch_audio_patch(aidl.patch));
1133 legacy->mSamplingRate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.samplingRate));
1134 legacy->mFormat = VALUE_OR_RETURN(aidl2legacy_AudioFormat_audio_format_t(aidl.format));
1135 legacy->mChannelMask =
1136 VALUE_OR_RETURN(aidl2legacy_int32_t_audio_channel_mask_t(aidl.channelMask));
1137 legacy->mFrameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount));
1138 legacy->mFrameCountHAL = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCountHAL));
1139 legacy->mLatency = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.latency));
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001140 legacy->mPortId = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.portId));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001141 return legacy;
1142}
1143
1144ConversionResult<media::AudioIoDescriptor> legacy2aidl_AudioIoDescriptor_AudioIoDescriptor(
1145 const sp<AudioIoDescriptor>& legacy) {
1146 media::AudioIoDescriptor aidl;
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001147 aidl.ioHandle = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(legacy->mIoHandle));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001148 aidl.patch = VALUE_OR_RETURN(legacy2aidl_audio_patch_AudioPatch(legacy->mPatch));
1149 aidl.samplingRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy->mSamplingRate));
1150 aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormat(legacy->mFormat));
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001151 aidl.channelMask = VALUE_OR_RETURN(
1152 legacy2aidl_audio_channel_mask_t_int32_t(legacy->mChannelMask));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001153 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(legacy->mFrameCount));
1154 aidl.frameCountHAL = VALUE_OR_RETURN(convertIntegral<int64_t>(legacy->mFrameCountHAL));
1155 aidl.latency = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy->mLatency));
Ytai Ben-Tsvi49298c52020-10-15 10:56:48 -07001156 aidl.portId = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(legacy->mPortId));
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07001157 return aidl;
1158}
1159
Andy Hung973638a2020-12-08 20:47:45 -08001160ConversionResult<AudioClient> aidl2legacy_AudioClient_AudioClient(
1161 const media::AudioClient& aidl) {
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001162 AudioClient legacy;
1163 legacy.clientUid = VALUE_OR_RETURN(aidl2legacy_int32_t_uid_t(aidl.clientUid));
1164 legacy.clientPid = VALUE_OR_RETURN(aidl2legacy_int32_t_pid_t(aidl.clientPid));
1165 legacy.clientTid = VALUE_OR_RETURN(aidl2legacy_int32_t_pid_t(aidl.clientTid));
1166 legacy.packageName = VALUE_OR_RETURN(aidl2legacy_string_view_String16(aidl.packageName));
1167 return legacy;
1168}
1169
Andy Hung973638a2020-12-08 20:47:45 -08001170ConversionResult<media::AudioClient> legacy2aidl_AudioClient_AudioClient(
1171 const AudioClient& legacy) {
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001172 media::AudioClient aidl;
1173 aidl.clientUid = VALUE_OR_RETURN(legacy2aidl_uid_t_int32_t(legacy.clientUid));
1174 aidl.clientPid = VALUE_OR_RETURN(legacy2aidl_pid_t_int32_t(legacy.clientPid));
1175 aidl.clientTid = VALUE_OR_RETURN(legacy2aidl_pid_t_int32_t(legacy.clientTid));
1176 aidl.packageName = VALUE_OR_RETURN(legacy2aidl_String16_string(legacy.packageName));
1177 return aidl;
1178}
1179
1180ConversionResult<audio_content_type_t>
1181aidl2legacy_AudioContentType_audio_content_type_t(media::AudioContentType aidl) {
1182 switch (aidl) {
1183 case media::AudioContentType::UNKNOWN:
1184 return AUDIO_CONTENT_TYPE_UNKNOWN;
1185 case media::AudioContentType::SPEECH:
1186 return AUDIO_CONTENT_TYPE_SPEECH;
1187 case media::AudioContentType::MUSIC:
1188 return AUDIO_CONTENT_TYPE_MUSIC;
1189 case media::AudioContentType::MOVIE:
1190 return AUDIO_CONTENT_TYPE_MOVIE;
1191 case media::AudioContentType::SONIFICATION:
1192 return AUDIO_CONTENT_TYPE_SONIFICATION;
1193 }
1194 return unexpected(BAD_VALUE);
1195}
1196
1197ConversionResult<media::AudioContentType>
1198legacy2aidl_audio_content_type_t_AudioContentType(audio_content_type_t legacy) {
1199 switch (legacy) {
1200 case AUDIO_CONTENT_TYPE_UNKNOWN:
1201 return media::AudioContentType::UNKNOWN;
1202 case AUDIO_CONTENT_TYPE_SPEECH:
1203 return media::AudioContentType::SPEECH;
1204 case AUDIO_CONTENT_TYPE_MUSIC:
1205 return media::AudioContentType::MUSIC;
1206 case AUDIO_CONTENT_TYPE_MOVIE:
1207 return media::AudioContentType::MOVIE;
1208 case AUDIO_CONTENT_TYPE_SONIFICATION:
1209 return media::AudioContentType::SONIFICATION;
1210 }
1211 return unexpected(BAD_VALUE);
1212}
1213
1214ConversionResult<audio_usage_t>
1215aidl2legacy_AudioUsage_audio_usage_t(media::AudioUsage aidl) {
1216 switch (aidl) {
1217 case media::AudioUsage::UNKNOWN:
1218 return AUDIO_USAGE_UNKNOWN;
1219 case media::AudioUsage::MEDIA:
1220 return AUDIO_USAGE_MEDIA;
1221 case media::AudioUsage::VOICE_COMMUNICATION:
1222 return AUDIO_USAGE_VOICE_COMMUNICATION;
1223 case media::AudioUsage::VOICE_COMMUNICATION_SIGNALLING:
1224 return AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING;
1225 case media::AudioUsage::ALARM:
1226 return AUDIO_USAGE_ALARM;
1227 case media::AudioUsage::NOTIFICATION:
1228 return AUDIO_USAGE_NOTIFICATION;
1229 case media::AudioUsage::NOTIFICATION_TELEPHONY_RINGTONE:
1230 return AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE;
1231 case media::AudioUsage::NOTIFICATION_COMMUNICATION_REQUEST:
1232 return AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST;
1233 case media::AudioUsage::NOTIFICATION_COMMUNICATION_INSTANT:
1234 return AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT;
1235 case media::AudioUsage::NOTIFICATION_COMMUNICATION_DELAYED:
1236 return AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED;
1237 case media::AudioUsage::NOTIFICATION_EVENT:
1238 return AUDIO_USAGE_NOTIFICATION_EVENT;
1239 case media::AudioUsage::ASSISTANCE_ACCESSIBILITY:
1240 return AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY;
1241 case media::AudioUsage::ASSISTANCE_NAVIGATION_GUIDANCE:
1242 return AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE;
1243 case media::AudioUsage::ASSISTANCE_SONIFICATION:
1244 return AUDIO_USAGE_ASSISTANCE_SONIFICATION;
1245 case media::AudioUsage::GAME:
1246 return AUDIO_USAGE_GAME;
1247 case media::AudioUsage::VIRTUAL_SOURCE:
1248 return AUDIO_USAGE_VIRTUAL_SOURCE;
1249 case media::AudioUsage::ASSISTANT:
1250 return AUDIO_USAGE_ASSISTANT;
1251 case media::AudioUsage::CALL_ASSISTANT:
1252 return AUDIO_USAGE_CALL_ASSISTANT;
1253 case media::AudioUsage::EMERGENCY:
1254 return AUDIO_USAGE_EMERGENCY;
1255 case media::AudioUsage::SAFETY:
1256 return AUDIO_USAGE_SAFETY;
1257 case media::AudioUsage::VEHICLE_STATUS:
1258 return AUDIO_USAGE_VEHICLE_STATUS;
1259 case media::AudioUsage::ANNOUNCEMENT:
1260 return AUDIO_USAGE_ANNOUNCEMENT;
1261 }
1262 return unexpected(BAD_VALUE);
1263}
1264
1265ConversionResult<media::AudioUsage>
1266legacy2aidl_audio_usage_t_AudioUsage(audio_usage_t legacy) {
1267 switch (legacy) {
1268 case AUDIO_USAGE_UNKNOWN:
1269 return media::AudioUsage::UNKNOWN;
1270 case AUDIO_USAGE_MEDIA:
1271 return media::AudioUsage::MEDIA;
1272 case AUDIO_USAGE_VOICE_COMMUNICATION:
1273 return media::AudioUsage::VOICE_COMMUNICATION;
1274 case AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING:
1275 return media::AudioUsage::VOICE_COMMUNICATION_SIGNALLING;
1276 case AUDIO_USAGE_ALARM:
1277 return media::AudioUsage::ALARM;
1278 case AUDIO_USAGE_NOTIFICATION:
1279 return media::AudioUsage::NOTIFICATION;
1280 case AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE:
1281 return media::AudioUsage::NOTIFICATION_TELEPHONY_RINGTONE;
1282 case AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST:
1283 return media::AudioUsage::NOTIFICATION_COMMUNICATION_REQUEST;
1284 case AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT:
1285 return media::AudioUsage::NOTIFICATION_COMMUNICATION_INSTANT;
1286 case AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED:
1287 return media::AudioUsage::NOTIFICATION_COMMUNICATION_DELAYED;
1288 case AUDIO_USAGE_NOTIFICATION_EVENT:
1289 return media::AudioUsage::NOTIFICATION_EVENT;
1290 case AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY:
1291 return media::AudioUsage::ASSISTANCE_ACCESSIBILITY;
1292 case AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE:
1293 return media::AudioUsage::ASSISTANCE_NAVIGATION_GUIDANCE;
1294 case AUDIO_USAGE_ASSISTANCE_SONIFICATION:
1295 return media::AudioUsage::ASSISTANCE_SONIFICATION;
1296 case AUDIO_USAGE_GAME:
1297 return media::AudioUsage::GAME;
1298 case AUDIO_USAGE_VIRTUAL_SOURCE:
1299 return media::AudioUsage::VIRTUAL_SOURCE;
1300 case AUDIO_USAGE_ASSISTANT:
1301 return media::AudioUsage::ASSISTANT;
1302 case AUDIO_USAGE_CALL_ASSISTANT:
1303 return media::AudioUsage::CALL_ASSISTANT;
1304 case AUDIO_USAGE_EMERGENCY:
1305 return media::AudioUsage::EMERGENCY;
1306 case AUDIO_USAGE_SAFETY:
1307 return media::AudioUsage::SAFETY;
1308 case AUDIO_USAGE_VEHICLE_STATUS:
1309 return media::AudioUsage::VEHICLE_STATUS;
1310 case AUDIO_USAGE_ANNOUNCEMENT:
1311 return media::AudioUsage::ANNOUNCEMENT;
1312 }
1313 return unexpected(BAD_VALUE);
1314}
1315
1316ConversionResult<audio_flags_mask_t>
1317aidl2legacy_AudioFlag_audio_flags_mask_t(media::AudioFlag aidl) {
1318 switch (aidl) {
1319 case media::AudioFlag::AUDIBILITY_ENFORCED:
1320 return AUDIO_FLAG_AUDIBILITY_ENFORCED;
1321 case media::AudioFlag::SECURE:
1322 return AUDIO_FLAG_SECURE;
1323 case media::AudioFlag::SCO:
1324 return AUDIO_FLAG_SCO;
1325 case media::AudioFlag::BEACON:
1326 return AUDIO_FLAG_BEACON;
1327 case media::AudioFlag::HW_AV_SYNC:
1328 return AUDIO_FLAG_HW_AV_SYNC;
1329 case media::AudioFlag::HW_HOTWORD:
1330 return AUDIO_FLAG_HW_HOTWORD;
1331 case media::AudioFlag::BYPASS_INTERRUPTION_POLICY:
1332 return AUDIO_FLAG_BYPASS_INTERRUPTION_POLICY;
1333 case media::AudioFlag::BYPASS_MUTE:
1334 return AUDIO_FLAG_BYPASS_MUTE;
1335 case media::AudioFlag::LOW_LATENCY:
1336 return AUDIO_FLAG_LOW_LATENCY;
1337 case media::AudioFlag::DEEP_BUFFER:
1338 return AUDIO_FLAG_DEEP_BUFFER;
1339 case media::AudioFlag::NO_MEDIA_PROJECTION:
1340 return AUDIO_FLAG_NO_MEDIA_PROJECTION;
1341 case media::AudioFlag::MUTE_HAPTIC:
1342 return AUDIO_FLAG_MUTE_HAPTIC;
1343 case media::AudioFlag::NO_SYSTEM_CAPTURE:
1344 return AUDIO_FLAG_NO_SYSTEM_CAPTURE;
1345 case media::AudioFlag::CAPTURE_PRIVATE:
1346 return AUDIO_FLAG_CAPTURE_PRIVATE;
1347 }
1348 return unexpected(BAD_VALUE);
1349}
1350
1351ConversionResult<media::AudioFlag>
1352legacy2aidl_audio_flags_mask_t_AudioFlag(audio_flags_mask_t legacy) {
1353 switch (legacy) {
1354 case AUDIO_FLAG_NONE:
1355 return unexpected(BAD_VALUE);
1356 case AUDIO_FLAG_AUDIBILITY_ENFORCED:
1357 return media::AudioFlag::AUDIBILITY_ENFORCED;
1358 case AUDIO_FLAG_SECURE:
1359 return media::AudioFlag::SECURE;
1360 case AUDIO_FLAG_SCO:
1361 return media::AudioFlag::SCO;
1362 case AUDIO_FLAG_BEACON:
1363 return media::AudioFlag::BEACON;
1364 case AUDIO_FLAG_HW_AV_SYNC:
1365 return media::AudioFlag::HW_AV_SYNC;
1366 case AUDIO_FLAG_HW_HOTWORD:
1367 return media::AudioFlag::HW_HOTWORD;
1368 case AUDIO_FLAG_BYPASS_INTERRUPTION_POLICY:
1369 return media::AudioFlag::BYPASS_INTERRUPTION_POLICY;
1370 case AUDIO_FLAG_BYPASS_MUTE:
1371 return media::AudioFlag::BYPASS_MUTE;
1372 case AUDIO_FLAG_LOW_LATENCY:
1373 return media::AudioFlag::LOW_LATENCY;
1374 case AUDIO_FLAG_DEEP_BUFFER:
1375 return media::AudioFlag::DEEP_BUFFER;
1376 case AUDIO_FLAG_NO_MEDIA_PROJECTION:
1377 return media::AudioFlag::NO_MEDIA_PROJECTION;
1378 case AUDIO_FLAG_MUTE_HAPTIC:
1379 return media::AudioFlag::MUTE_HAPTIC;
1380 case AUDIO_FLAG_NO_SYSTEM_CAPTURE:
1381 return media::AudioFlag::NO_SYSTEM_CAPTURE;
1382 case AUDIO_FLAG_CAPTURE_PRIVATE:
1383 return media::AudioFlag::CAPTURE_PRIVATE;
1384 }
1385 return unexpected(BAD_VALUE);
1386}
1387
1388ConversionResult<audio_flags_mask_t>
1389aidl2legacy_int32_t_audio_flags_mask_t_mask(int32_t aidl) {
1390 return convertBitmask<audio_flags_mask_t, int32_t, audio_flags_mask_t, media::AudioFlag>(
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001391 aidl, aidl2legacy_AudioFlag_audio_flags_mask_t, indexToEnum_index<media::AudioFlag>,
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001392 enumToMask_bitmask<audio_flags_mask_t, audio_flags_mask_t>);
1393}
1394
1395ConversionResult<int32_t>
1396legacy2aidl_audio_flags_mask_t_int32_t_mask(audio_flags_mask_t legacy) {
1397 return convertBitmask<int32_t, audio_flags_mask_t, media::AudioFlag, audio_flags_mask_t>(
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001398 legacy, legacy2aidl_audio_flags_mask_t_AudioFlag,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001399 indexToEnum_bitmask<audio_flags_mask_t>,
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001400 enumToMask_index<int32_t, media::AudioFlag>);
1401}
1402
1403ConversionResult<audio_attributes_t>
1404aidl2legacy_AudioAttributesInternal_audio_attributes_t(const media::AudioAttributesInternal& aidl) {
1405 audio_attributes_t legacy;
1406 legacy.content_type = VALUE_OR_RETURN(
1407 aidl2legacy_AudioContentType_audio_content_type_t(aidl.contentType));
1408 legacy.usage = VALUE_OR_RETURN(aidl2legacy_AudioUsage_audio_usage_t(aidl.usage));
1409 legacy.source = VALUE_OR_RETURN(aidl2legacy_AudioSourceType_audio_source_t(aidl.source));
1410 legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_flags_mask_t_mask(aidl.flags));
1411 RETURN_IF_ERROR(aidl2legacy_string(aidl.tags, legacy.tags, sizeof(legacy.tags)));
1412 return legacy;
1413}
1414
1415ConversionResult<media::AudioAttributesInternal>
1416legacy2aidl_audio_attributes_t_AudioAttributesInternal(const audio_attributes_t& legacy) {
1417 media::AudioAttributesInternal aidl;
1418 aidl.contentType = VALUE_OR_RETURN(
1419 legacy2aidl_audio_content_type_t_AudioContentType(legacy.content_type));
1420 aidl.usage = VALUE_OR_RETURN(legacy2aidl_audio_usage_t_AudioUsage(legacy.usage));
1421 aidl.source = VALUE_OR_RETURN(legacy2aidl_audio_source_t_AudioSourceType(legacy.source));
1422 aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_flags_mask_t_int32_t_mask(legacy.flags));
1423 aidl.tags = VALUE_OR_RETURN(legacy2aidl_string(legacy.tags, sizeof(legacy.tags)));
1424 return aidl;
1425}
1426
1427ConversionResult<audio_encapsulation_mode_t>
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001428aidl2legacy_AudioEncapsulationMode_audio_encapsulation_mode_t(media::AudioEncapsulationMode aidl) {
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001429 switch (aidl) {
1430 case media::AudioEncapsulationMode::NONE:
1431 return AUDIO_ENCAPSULATION_MODE_NONE;
1432 case media::AudioEncapsulationMode::ELEMENTARY_STREAM:
1433 return AUDIO_ENCAPSULATION_MODE_ELEMENTARY_STREAM;
1434 case media::AudioEncapsulationMode::HANDLE:
1435 return AUDIO_ENCAPSULATION_MODE_HANDLE;
1436 }
1437 return unexpected(BAD_VALUE);
1438}
1439
1440ConversionResult<media::AudioEncapsulationMode>
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001441legacy2aidl_audio_encapsulation_mode_t_AudioEncapsulationMode(audio_encapsulation_mode_t legacy) {
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001442 switch (legacy) {
1443 case AUDIO_ENCAPSULATION_MODE_NONE:
1444 return media::AudioEncapsulationMode::NONE;
1445 case AUDIO_ENCAPSULATION_MODE_ELEMENTARY_STREAM:
1446 return media::AudioEncapsulationMode::ELEMENTARY_STREAM;
1447 case AUDIO_ENCAPSULATION_MODE_HANDLE:
1448 return media::AudioEncapsulationMode::HANDLE;
1449 }
1450 return unexpected(BAD_VALUE);
1451}
1452
1453ConversionResult<audio_offload_info_t>
1454aidl2legacy_AudioOffloadInfo_audio_offload_info_t(const media::AudioOffloadInfo& aidl) {
1455 audio_offload_info_t legacy;
1456 legacy.version = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.version));
1457 legacy.size = sizeof(audio_offload_info_t);
1458 audio_config_base_t config = VALUE_OR_RETURN(
1459 aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config));
1460 legacy.sample_rate = config.sample_rate;
1461 legacy.channel_mask = config.channel_mask;
1462 legacy.format = config.format;
1463 legacy.stream_type = VALUE_OR_RETURN(
1464 aidl2legacy_AudioStreamType_audio_stream_type_t(aidl.streamType));
1465 legacy.bit_rate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.bitRate));
1466 legacy.duration_us = VALUE_OR_RETURN(convertIntegral<int64_t>(aidl.durationUs));
1467 legacy.has_video = aidl.hasVideo;
1468 legacy.is_streaming = aidl.isStreaming;
1469 legacy.bit_width = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.bitWidth));
1470 legacy.offload_buffer_size = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.offloadBufferSize));
1471 legacy.usage = VALUE_OR_RETURN(aidl2legacy_AudioUsage_audio_usage_t(aidl.usage));
1472 legacy.encapsulation_mode = VALUE_OR_RETURN(
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001473 aidl2legacy_AudioEncapsulationMode_audio_encapsulation_mode_t(aidl.encapsulationMode));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001474 legacy.content_id = VALUE_OR_RETURN(convertReinterpret<int32_t>(aidl.contentId));
1475 legacy.sync_id = VALUE_OR_RETURN(convertReinterpret<int32_t>(aidl.syncId));
1476 return legacy;
1477}
1478
1479ConversionResult<media::AudioOffloadInfo>
1480legacy2aidl_audio_offload_info_t_AudioOffloadInfo(const audio_offload_info_t& legacy) {
1481 media::AudioOffloadInfo aidl;
1482 // Version 0.1 fields.
1483 if (legacy.size < offsetof(audio_offload_info_t, usage) + sizeof(audio_offload_info_t::usage)) {
1484 return unexpected(BAD_VALUE);
1485 }
1486 aidl.version = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.version));
1487 aidl.config.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.sample_rate));
1488 aidl.config.channelMask = VALUE_OR_RETURN(
1489 legacy2aidl_audio_channel_mask_t_int32_t(legacy.channel_mask));
1490 aidl.config.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormat(legacy.format));
1491 aidl.streamType = VALUE_OR_RETURN(
1492 legacy2aidl_audio_stream_type_t_AudioStreamType(legacy.stream_type));
1493 aidl.bitRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.bit_rate));
1494 aidl.durationUs = VALUE_OR_RETURN(convertIntegral<int64_t>(legacy.duration_us));
1495 aidl.hasVideo = legacy.has_video;
1496 aidl.isStreaming = legacy.is_streaming;
1497 aidl.bitWidth = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.bit_width));
1498 aidl.offloadBufferSize = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.offload_buffer_size));
1499 aidl.usage = VALUE_OR_RETURN(legacy2aidl_audio_usage_t_AudioUsage(legacy.usage));
1500
1501 // Version 0.2 fields.
1502 if (legacy.version >= AUDIO_OFFLOAD_INFO_VERSION_0_2) {
1503 if (legacy.size <
1504 offsetof(audio_offload_info_t, sync_id) + sizeof(audio_offload_info_t::sync_id)) {
1505 return unexpected(BAD_VALUE);
1506 }
1507 aidl.encapsulationMode = VALUE_OR_RETURN(
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001508 legacy2aidl_audio_encapsulation_mode_t_AudioEncapsulationMode(
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001509 legacy.encapsulation_mode));
1510 aidl.contentId = VALUE_OR_RETURN(convertReinterpret<int32_t>(legacy.content_id));
1511 aidl.syncId = VALUE_OR_RETURN(convertReinterpret<int32_t>(legacy.sync_id));
1512 }
1513 return aidl;
1514}
1515
1516ConversionResult<audio_config_t>
1517aidl2legacy_AudioConfig_audio_config_t(const media::AudioConfig& aidl) {
1518 audio_config_t legacy;
1519 legacy.sample_rate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001520 legacy.channel_mask = VALUE_OR_RETURN(
1521 aidl2legacy_int32_t_audio_channel_mask_t(aidl.channelMask));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001522 legacy.format = VALUE_OR_RETURN(aidl2legacy_AudioFormat_audio_format_t(aidl.format));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001523 legacy.offload_info = VALUE_OR_RETURN(
1524 aidl2legacy_AudioOffloadInfo_audio_offload_info_t(aidl.offloadInfo));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001525 legacy.frame_count = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.frameCount));
1526 return legacy;
1527}
1528
1529ConversionResult<media::AudioConfig>
1530legacy2aidl_audio_config_t_AudioConfig(const audio_config_t& legacy) {
1531 media::AudioConfig aidl;
1532 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.sample_rate));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001533 aidl.channelMask = VALUE_OR_RETURN(
1534 legacy2aidl_audio_channel_mask_t_int32_t(legacy.channel_mask));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001535 aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormat(legacy.format));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001536 aidl.offloadInfo = VALUE_OR_RETURN(
1537 legacy2aidl_audio_offload_info_t_AudioOffloadInfo(legacy.offload_info));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001538 aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(legacy.frame_count));
1539 return aidl;
1540}
1541
1542ConversionResult<audio_config_base_t>
1543aidl2legacy_AudioConfigBase_audio_config_base_t(const media::AudioConfigBase& aidl) {
1544 audio_config_base_t legacy;
1545 legacy.sample_rate = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sampleRate));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001546 legacy.channel_mask = VALUE_OR_RETURN(
1547 aidl2legacy_int32_t_audio_channel_mask_t(aidl.channelMask));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001548 legacy.format = VALUE_OR_RETURN(aidl2legacy_AudioFormat_audio_format_t(aidl.format));
1549 return legacy;
1550}
1551
1552ConversionResult<media::AudioConfigBase>
1553legacy2aidl_audio_config_base_t_AudioConfigBase(const audio_config_base_t& legacy) {
1554 media::AudioConfigBase aidl;
1555 aidl.sampleRate = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.sample_rate));
Ytai Ben-Tsvia3815202020-10-28 14:58:08 -07001556 aidl.channelMask = VALUE_OR_RETURN(
1557 legacy2aidl_audio_channel_mask_t_int32_t(legacy.channel_mask));
Ytai Ben-Tsvi4dfeb622020-11-02 12:47:30 -08001558 aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormat(legacy.format));
1559 return aidl;
1560}
1561
1562ConversionResult<sp<IMemory>>
1563aidl2legacy_SharedFileRegion_IMemory(const media::SharedFileRegion& aidl) {
1564 sp<IMemory> legacy;
1565 if (!convertSharedFileRegionToIMemory(aidl, &legacy)) {
1566 return unexpected(BAD_VALUE);
1567 }
1568 return legacy;
1569}
1570
1571ConversionResult<media::SharedFileRegion>
1572legacy2aidl_IMemory_SharedFileRegion(const sp<IMemory>& legacy) {
1573 media::SharedFileRegion aidl;
1574 if (!convertIMemoryToSharedFileRegion(legacy, &aidl)) {
1575 return unexpected(BAD_VALUE);
1576 }
1577 return aidl;
1578}
1579
1580ConversionResult<sp<IMemory>>
1581aidl2legacy_NullableSharedFileRegion_IMemory(const std::optional<media::SharedFileRegion>& aidl) {
1582 sp<IMemory> legacy;
1583 if (!convertNullableSharedFileRegionToIMemory(aidl, &legacy)) {
1584 return unexpected(BAD_VALUE);
1585 }
1586 return legacy;
1587}
1588
1589ConversionResult<std::optional<media::SharedFileRegion>>
1590legacy2aidl_NullableIMemory_SharedFileRegion(const sp<IMemory>& legacy) {
1591 std::optional<media::SharedFileRegion> aidl;
1592 if (!convertNullableIMemoryToSharedFileRegion(legacy, &aidl)) {
1593 return unexpected(BAD_VALUE);
1594 }
1595 return aidl;
1596}
1597
Ytai Ben-Tsvibdc293a2020-11-02 17:01:38 -08001598ConversionResult<AudioTimestamp>
Andy Hung973638a2020-12-08 20:47:45 -08001599aidl2legacy_AudioTimestampInternal_AudioTimestamp(const media::AudioTimestampInternal& aidl) {
Ytai Ben-Tsvibdc293a2020-11-02 17:01:38 -08001600 AudioTimestamp legacy;
1601 legacy.mPosition = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.position));
1602 legacy.mTime.tv_sec = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.sec));
1603 legacy.mTime.tv_nsec = VALUE_OR_RETURN(convertIntegral<uint32_t>(aidl.nsec));
1604 return legacy;
1605}
1606
1607ConversionResult<media::AudioTimestampInternal>
Andy Hung973638a2020-12-08 20:47:45 -08001608legacy2aidl_AudioTimestamp_AudioTimestampInternal(const AudioTimestamp& legacy) {
Ytai Ben-Tsvibdc293a2020-11-02 17:01:38 -08001609 media::AudioTimestampInternal aidl;
1610 aidl.position = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.mPosition));
1611 aidl.sec = VALUE_OR_RETURN(convertIntegral<int64_t>(legacy.mTime.tv_sec));
1612 aidl.nsec = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.mTime.tv_nsec));
1613 return aidl;
1614}
1615
Ytai Ben-Tsvice182942020-11-04 14:48:01 -08001616ConversionResult<audio_uuid_t>
1617aidl2legacy_AudioUuid_audio_uuid_t(const media::AudioUuid& aidl) {
1618 audio_uuid_t legacy;
1619 legacy.timeLow = VALUE_OR_RETURN(convertReinterpret<uint32_t>(aidl.timeLow));
1620 legacy.timeMid = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.timeMid));
1621 legacy.timeHiAndVersion = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.timeHiAndVersion));
1622 legacy.clockSeq = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.clockSeq));
1623 if (aidl.node.size() != std::size(legacy.node)) {
1624 return unexpected(BAD_VALUE);
1625 }
1626 std::copy(aidl.node.begin(), aidl.node.end(), legacy.node);
1627 return legacy;
1628}
1629
1630ConversionResult<media::AudioUuid>
1631legacy2aidl_audio_uuid_t_AudioUuid(const audio_uuid_t& legacy) {
1632 media::AudioUuid aidl;
1633 aidl.timeLow = VALUE_OR_RETURN(convertReinterpret<int32_t>(legacy.timeLow));
1634 aidl.timeMid = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.timeMid));
1635 aidl.timeHiAndVersion = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.timeHiAndVersion));
1636 aidl.clockSeq = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.clockSeq));
1637 std::copy(legacy.node, legacy.node + std::size(legacy.node), std::back_inserter(aidl.node));
1638 return aidl;
1639}
1640
1641ConversionResult<effect_descriptor_t>
1642aidl2legacy_EffectDescriptor_effect_descriptor_t(const media::EffectDescriptor& aidl) {
1643 effect_descriptor_t legacy;
1644 legacy.type = VALUE_OR_RETURN(aidl2legacy_AudioUuid_audio_uuid_t(aidl.type));
1645 legacy.uuid = VALUE_OR_RETURN(aidl2legacy_AudioUuid_audio_uuid_t(aidl.uuid));
1646 legacy.apiVersion = VALUE_OR_RETURN(convertReinterpret<uint32_t>(aidl.apiVersion));
1647 legacy.flags = VALUE_OR_RETURN(convertReinterpret<uint32_t>(aidl.flags));
1648 legacy.cpuLoad = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.cpuLoad));
1649 legacy.memoryUsage = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.memoryUsage));
1650 RETURN_IF_ERROR(aidl2legacy_string(aidl.name, legacy.name, sizeof(legacy.name)));
1651 RETURN_IF_ERROR(
1652 aidl2legacy_string(aidl.implementor, legacy.implementor, sizeof(legacy.implementor)));
1653 return legacy;
1654}
1655
1656ConversionResult<media::EffectDescriptor>
1657legacy2aidl_effect_descriptor_t_EffectDescriptor(const effect_descriptor_t& legacy) {
1658 media::EffectDescriptor aidl;
1659 aidl.type = VALUE_OR_RETURN(legacy2aidl_audio_uuid_t_AudioUuid(legacy.type));
1660 aidl.uuid = VALUE_OR_RETURN(legacy2aidl_audio_uuid_t_AudioUuid(legacy.uuid));
1661 aidl.apiVersion = VALUE_OR_RETURN(convertReinterpret<int32_t>(legacy.apiVersion));
1662 aidl.flags = VALUE_OR_RETURN(convertReinterpret<int32_t>(legacy.flags));
1663 aidl.cpuLoad = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.cpuLoad));
1664 aidl.memoryUsage = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.memoryUsage));
1665 aidl.name = VALUE_OR_RETURN(legacy2aidl_string(legacy.name, sizeof(legacy.name)));
1666 aidl.implementor = VALUE_OR_RETURN(
1667 legacy2aidl_string(legacy.implementor, sizeof(legacy.implementor)));
1668 return aidl;
1669}
1670
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001671ConversionResult<audio_encapsulation_metadata_type_t>
1672aidl2legacy_AudioEncapsulationMetadataType_audio_encapsulation_metadata_type_t(
1673 media::AudioEncapsulationMetadataType aidl) {
1674 switch (aidl) {
1675 case media::AudioEncapsulationMetadataType::NONE:
1676 return AUDIO_ENCAPSULATION_METADATA_TYPE_NONE;
1677 case media::AudioEncapsulationMetadataType::FRAMEWORK_TUNER:
1678 return AUDIO_ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER;
1679 case media::AudioEncapsulationMetadataType::DVB_AD_DESCRIPTOR:
1680 return AUDIO_ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR;
1681 }
1682 return unexpected(BAD_VALUE);
1683}
1684
1685ConversionResult<media::AudioEncapsulationMetadataType>
1686legacy2aidl_audio_encapsulation_metadata_type_t_AudioEncapsulationMetadataType(
1687 audio_encapsulation_metadata_type_t legacy) {
1688 switch (legacy) {
1689 case AUDIO_ENCAPSULATION_METADATA_TYPE_NONE:
1690 return media::AudioEncapsulationMetadataType::NONE;
1691 case AUDIO_ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER:
1692 return media::AudioEncapsulationMetadataType::FRAMEWORK_TUNER;
1693 case AUDIO_ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR:
1694 return media::AudioEncapsulationMetadataType::DVB_AD_DESCRIPTOR;
1695 }
1696 return unexpected(BAD_VALUE);
1697}
1698
1699ConversionResult<uint32_t>
1700aidl2legacy_AudioEncapsulationMode_mask(int32_t aidl) {
1701 return convertBitmask<uint32_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001702 int32_t,
1703 audio_encapsulation_mode_t,
1704 media::AudioEncapsulationMode>(
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001705 aidl, aidl2legacy_AudioEncapsulationMode_audio_encapsulation_mode_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001706 indexToEnum_index<media::AudioEncapsulationMode>,
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001707 enumToMask_index<uint32_t, audio_encapsulation_mode_t>);
1708}
1709
1710ConversionResult<int32_t>
1711legacy2aidl_AudioEncapsulationMode_mask(uint32_t legacy) {
1712 return convertBitmask<int32_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001713 uint32_t,
1714 media::AudioEncapsulationMode,
1715 audio_encapsulation_mode_t>(
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001716 legacy, legacy2aidl_audio_encapsulation_mode_t_AudioEncapsulationMode,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001717 indexToEnum_index<audio_encapsulation_mode_t>,
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001718 enumToMask_index<int32_t, media::AudioEncapsulationMode>);
1719}
1720
1721ConversionResult<uint32_t>
1722aidl2legacy_AudioEncapsulationMetadataType_mask(int32_t aidl) {
1723 return convertBitmask<uint32_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001724 int32_t,
1725 audio_encapsulation_metadata_type_t,
1726 media::AudioEncapsulationMetadataType>(
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001727 aidl, aidl2legacy_AudioEncapsulationMetadataType_audio_encapsulation_metadata_type_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001728 indexToEnum_index<media::AudioEncapsulationMetadataType>,
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001729 enumToMask_index<uint32_t, audio_encapsulation_metadata_type_t>);
1730}
1731
1732ConversionResult<int32_t>
1733legacy2aidl_AudioEncapsulationMetadataType_mask(uint32_t legacy) {
1734 return convertBitmask<int32_t,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001735 uint32_t,
1736 media::AudioEncapsulationMetadataType,
1737 audio_encapsulation_metadata_type_t>(
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001738 legacy, legacy2aidl_audio_encapsulation_metadata_type_t_AudioEncapsulationMetadataType,
Ytai Ben-Tsvi08c7d9e2020-12-16 14:32:56 -08001739 indexToEnum_index<audio_encapsulation_metadata_type_t>,
Ytai Ben-Tsvi50e016a2020-11-12 14:26:12 -08001740 enumToMask_index<int32_t, media::AudioEncapsulationMetadataType>);
1741}
1742
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001743ConversionResult<audio_mix_latency_class_t>
1744aidl2legacy_AudioMixLatencyClass_audio_mix_latency_class_t(
1745 media::AudioMixLatencyClass aidl) {
1746 switch (aidl) {
1747 case media::AudioMixLatencyClass::LOW:
1748 return AUDIO_LATENCY_LOW;
1749 case media::AudioMixLatencyClass::NORMAL:
1750 return AUDIO_LATENCY_NORMAL;
1751 }
1752 return unexpected(BAD_VALUE);
1753}
1754
1755ConversionResult<media::AudioMixLatencyClass>
1756legacy2aidl_audio_mix_latency_class_t_AudioMixLatencyClass(
1757 audio_mix_latency_class_t legacy) {
1758 switch (legacy) {
1759 case AUDIO_LATENCY_LOW:
1760 return media::AudioMixLatencyClass::LOW;
1761 case AUDIO_LATENCY_NORMAL:
1762 return media::AudioMixLatencyClass::NORMAL;
1763 }
1764 return unexpected(BAD_VALUE);
1765}
1766
1767ConversionResult<audio_port_device_ext>
1768aidl2legacy_AudioPortDeviceExt_audio_port_device_ext(const media::AudioPortDeviceExt& aidl) {
1769 audio_port_device_ext legacy;
1770 legacy.hw_module = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_module_handle_t(aidl.hwModule));
1771 legacy.type = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_devices_t(aidl.device.type));
1772 RETURN_IF_ERROR(
1773 aidl2legacy_string(aidl.device.address, legacy.address, sizeof(legacy.address)));
1774 legacy.encapsulation_modes = VALUE_OR_RETURN(
1775 aidl2legacy_AudioEncapsulationMode_mask(aidl.encapsulationModes));
1776 legacy.encapsulation_metadata_types = VALUE_OR_RETURN(
1777 aidl2legacy_AudioEncapsulationMetadataType_mask(aidl.encapsulationMetadataTypes));
1778 return legacy;
1779}
1780
1781ConversionResult<media::AudioPortDeviceExt>
1782legacy2aidl_audio_port_device_ext_AudioPortDeviceExt(const audio_port_device_ext& legacy) {
1783 media::AudioPortDeviceExt aidl;
1784 aidl.hwModule = VALUE_OR_RETURN(legacy2aidl_audio_module_handle_t_int32_t(legacy.hw_module));
1785 aidl.device.type = VALUE_OR_RETURN(legacy2aidl_audio_devices_t_int32_t(legacy.type));
1786 aidl.device.address = VALUE_OR_RETURN(
1787 legacy2aidl_string(legacy.address, sizeof(legacy.address)));
1788 aidl.encapsulationModes = VALUE_OR_RETURN(
1789 legacy2aidl_AudioEncapsulationMode_mask(legacy.encapsulation_modes));
1790 aidl.encapsulationMetadataTypes = VALUE_OR_RETURN(
1791 legacy2aidl_AudioEncapsulationMetadataType_mask(legacy.encapsulation_metadata_types));
1792 return aidl;
1793}
1794
1795ConversionResult<audio_port_mix_ext>
1796aidl2legacy_AudioPortMixExt_audio_port_mix_ext(const media::AudioPortMixExt& aidl) {
1797 audio_port_mix_ext legacy;
1798 legacy.hw_module = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_module_handle_t(aidl.hwModule));
1799 legacy.handle = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_io_handle_t(aidl.handle));
1800 legacy.latency_class = VALUE_OR_RETURN(
1801 aidl2legacy_AudioMixLatencyClass_audio_mix_latency_class_t(aidl.latencyClass));
1802 return legacy;
1803}
1804
1805ConversionResult<media::AudioPortMixExt>
1806legacy2aidl_audio_port_mix_ext_AudioPortMixExt(const audio_port_mix_ext& legacy) {
1807 media::AudioPortMixExt aidl;
1808 aidl.hwModule = VALUE_OR_RETURN(legacy2aidl_audio_module_handle_t_int32_t(legacy.hw_module));
1809 aidl.handle = VALUE_OR_RETURN(legacy2aidl_audio_io_handle_t_int32_t(legacy.handle));
1810 aidl.latencyClass = VALUE_OR_RETURN(
1811 legacy2aidl_audio_mix_latency_class_t_AudioMixLatencyClass(legacy.latency_class));
1812 return aidl;
1813}
1814
1815ConversionResult<audio_port_session_ext>
1816aidl2legacy_AudioPortSessionExt_audio_port_session_ext(const media::AudioPortSessionExt& aidl) {
1817 audio_port_session_ext legacy;
1818 legacy.session = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_session_t(aidl.session));
1819 return legacy;
1820}
1821
1822ConversionResult<media::AudioPortSessionExt>
1823legacy2aidl_audio_port_session_ext_AudioPortSessionExt(const audio_port_session_ext& legacy) {
1824 media::AudioPortSessionExt aidl;
1825 aidl.session = VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(legacy.session));
1826 return aidl;
1827}
1828
1829// This type is unnamed in the original definition, thus we name it here.
1830using audio_port_v7_ext = decltype(audio_port_v7::ext);
1831
1832ConversionResult<audio_port_v7_ext> aidl2legacy_AudioPortExt(
1833 const media::AudioPortExt& aidl, media::AudioPortType type) {
1834 audio_port_v7_ext legacy;
1835 switch (type) {
1836 case media::AudioPortType::NONE:
1837 // Just verify that the union is empty.
1838 VALUE_OR_RETURN(UNION_GET(aidl, unspecified));
Andy Hung3f69c162020-12-09 12:08:48 -08001839 return legacy;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001840 case media::AudioPortType::DEVICE:
1841 legacy.device = VALUE_OR_RETURN(
1842 aidl2legacy_AudioPortDeviceExt_audio_port_device_ext(
1843 VALUE_OR_RETURN(UNION_GET(aidl, device))));
Andy Hung3f69c162020-12-09 12:08:48 -08001844 return legacy;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001845 case media::AudioPortType::MIX:
1846 legacy.mix = VALUE_OR_RETURN(
1847 aidl2legacy_AudioPortMixExt_audio_port_mix_ext(
1848 VALUE_OR_RETURN(UNION_GET(aidl, mix))));
Andy Hung3f69c162020-12-09 12:08:48 -08001849 return legacy;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001850 case media::AudioPortType::SESSION:
1851 legacy.session = VALUE_OR_RETURN(aidl2legacy_AudioPortSessionExt_audio_port_session_ext(
1852 VALUE_OR_RETURN(UNION_GET(aidl, session))));
Andy Hung3f69c162020-12-09 12:08:48 -08001853 return legacy;
1854
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001855 }
Andy Hung3f69c162020-12-09 12:08:48 -08001856 LOG_ALWAYS_FATAL("Shouldn't get here"); // with -Werror,-Wswitch may compile-time fail
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001857}
1858
1859ConversionResult<media::AudioPortExt> legacy2aidl_AudioPortExt(
1860 const audio_port_v7_ext& legacy, audio_port_type_t type) {
1861 media::AudioPortExt aidl;
1862 switch (type) {
1863 case AUDIO_PORT_TYPE_NONE:
1864 UNION_SET(aidl, unspecified, false);
Andy Hung3f69c162020-12-09 12:08:48 -08001865 return aidl;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001866 case AUDIO_PORT_TYPE_DEVICE:
1867 UNION_SET(aidl, device,
1868 VALUE_OR_RETURN(
1869 legacy2aidl_audio_port_device_ext_AudioPortDeviceExt(legacy.device)));
Andy Hung3f69c162020-12-09 12:08:48 -08001870 return aidl;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001871 case AUDIO_PORT_TYPE_MIX:
1872 UNION_SET(aidl, mix,
1873 VALUE_OR_RETURN(legacy2aidl_audio_port_mix_ext_AudioPortMixExt(legacy.mix)));
Andy Hung3f69c162020-12-09 12:08:48 -08001874 return aidl;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001875 case AUDIO_PORT_TYPE_SESSION:
1876 UNION_SET(aidl, session,
1877 VALUE_OR_RETURN(legacy2aidl_audio_port_session_ext_AudioPortSessionExt(
1878 legacy.session)));
Andy Hung3f69c162020-12-09 12:08:48 -08001879 return aidl;
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001880 }
Andy Hung3f69c162020-12-09 12:08:48 -08001881 LOG_ALWAYS_FATAL("Shouldn't get here"); // with -Werror,-Wswitch may compile-time fail
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001882}
1883
1884ConversionResult<audio_profile>
1885aidl2legacy_AudioProfile_audio_profile(const media::AudioProfile& aidl) {
1886 audio_profile legacy;
1887 legacy.format = VALUE_OR_RETURN(aidl2legacy_AudioFormat_audio_format_t(aidl.format));
1888
1889 if (aidl.samplingRates.size() > std::size(legacy.sample_rates)) {
1890 return unexpected(BAD_VALUE);
1891 }
1892 RETURN_IF_ERROR(
1893 convertRange(aidl.samplingRates.begin(), aidl.samplingRates.end(), legacy.sample_rates,
1894 convertIntegral<int32_t, unsigned int>));
1895 legacy.num_sample_rates = aidl.samplingRates.size();
1896
1897 if (aidl.channelMasks.size() > std::size(legacy.channel_masks)) {
1898 return unexpected(BAD_VALUE);
1899 }
1900 RETURN_IF_ERROR(
1901 convertRange(aidl.channelMasks.begin(), aidl.channelMasks.end(), legacy.channel_masks,
1902 aidl2legacy_int32_t_audio_channel_mask_t));
1903 legacy.num_channel_masks = aidl.channelMasks.size();
1904 return legacy;
1905}
1906
1907ConversionResult<media::AudioProfile>
1908legacy2aidl_audio_profile_AudioProfile(const audio_profile& legacy) {
1909 media::AudioProfile aidl;
1910 aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_format_t_AudioFormat(legacy.format));
1911
1912 if (legacy.num_sample_rates > std::size(legacy.sample_rates)) {
1913 return unexpected(BAD_VALUE);
1914 }
1915 RETURN_IF_ERROR(
1916 convertRange(legacy.sample_rates, legacy.sample_rates + legacy.num_sample_rates,
1917 std::back_inserter(aidl.samplingRates),
1918 convertIntegral<unsigned int, int32_t>));
1919
1920 if (legacy.num_channel_masks > std::size(legacy.channel_masks)) {
1921 return unexpected(BAD_VALUE);
1922 }
1923 RETURN_IF_ERROR(
1924 convertRange(legacy.channel_masks, legacy.channel_masks + legacy.num_channel_masks,
1925 std::back_inserter(aidl.channelMasks),
1926 legacy2aidl_audio_channel_mask_t_int32_t));
1927 return aidl;
1928}
1929
1930ConversionResult<audio_gain>
1931aidl2legacy_AudioGain_audio_gain(const media::AudioGain& aidl) {
1932 audio_gain legacy;
1933 legacy.mode = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_gain_mode_t_mask(aidl.mode));
1934 legacy.channel_mask = VALUE_OR_RETURN(
1935 aidl2legacy_int32_t_audio_channel_mask_t(aidl.channelMask));
1936 legacy.min_value = VALUE_OR_RETURN(convertIntegral<int>(aidl.minValue));
1937 legacy.max_value = VALUE_OR_RETURN(convertIntegral<int>(aidl.maxValue));
1938 legacy.default_value = VALUE_OR_RETURN(convertIntegral<int>(aidl.defaultValue));
1939 legacy.step_value = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.stepValue));
1940 legacy.min_ramp_ms = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.minRampMs));
1941 legacy.max_ramp_ms = VALUE_OR_RETURN(convertIntegral<unsigned int>(aidl.maxRampMs));
1942 return legacy;
1943}
1944
1945ConversionResult<media::AudioGain>
1946legacy2aidl_audio_gain_AudioGain(const audio_gain& legacy) {
1947 media::AudioGain aidl;
Andy Hung973638a2020-12-08 20:47:45 -08001948 aidl.mode = VALUE_OR_RETURN(legacy2aidl_audio_gain_mode_t_int32_t_mask(legacy.mode));
Ytai Ben-Tsvi0cf92652020-11-23 13:23:00 -08001949 aidl.channelMask = VALUE_OR_RETURN(
1950 legacy2aidl_audio_channel_mask_t_int32_t(legacy.channel_mask));
1951 aidl.minValue = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.min_value));
1952 aidl.maxValue = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.max_value));
1953 aidl.defaultValue = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.default_value));
1954 aidl.stepValue = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.step_value));
1955 aidl.minRampMs = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.min_ramp_ms));
1956 aidl.maxRampMs = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.max_ramp_ms));
1957 return aidl;
1958}
1959
1960ConversionResult<audio_port_v7>
1961aidl2legacy_AudioPort_audio_port_v7(const media::AudioPort& aidl) {
1962 audio_port_v7 legacy;
1963 legacy.id = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_port_handle_t(aidl.id));
1964 legacy.role = VALUE_OR_RETURN(aidl2legacy_AudioPortRole_audio_port_role_t(aidl.role));
1965 legacy.type = VALUE_OR_RETURN(aidl2legacy_AudioPortType_audio_port_type_t(aidl.type));
1966 RETURN_IF_ERROR(aidl2legacy_string(aidl.name, legacy.name, sizeof(legacy.name)));
1967
1968 if (aidl.profiles.size() > std::size(legacy.audio_profiles)) {
1969 return unexpected(BAD_VALUE);
1970 }
1971 RETURN_IF_ERROR(convertRange(aidl.profiles.begin(), aidl.profiles.end(), legacy.audio_profiles,
1972 aidl2legacy_AudioProfile_audio_profile));
1973 legacy.num_audio_profiles = aidl.profiles.size();
1974
1975 if (aidl.gains.size() > std::size(legacy.gains)) {
1976 return unexpected(BAD_VALUE);
1977 }
1978 RETURN_IF_ERROR(convertRange(aidl.gains.begin(), aidl.gains.end(), legacy.gains,
1979 aidl2legacy_AudioGain_audio_gain));
1980 legacy.num_gains = aidl.gains.size();
1981
1982 legacy.active_config = VALUE_OR_RETURN(
1983 aidl2legacy_AudioPortConfig_audio_port_config(aidl.activeConfig));
1984 legacy.ext = VALUE_OR_RETURN(aidl2legacy_AudioPortExt(aidl.ext, aidl.type));
1985 return legacy;
1986}
1987
1988ConversionResult<media::AudioPort>
1989legacy2aidl_audio_port_v7_AudioPort(const audio_port_v7& legacy) {
1990 media::AudioPort aidl;
1991 aidl.id = VALUE_OR_RETURN(legacy2aidl_audio_port_handle_t_int32_t(legacy.id));
1992 aidl.role = VALUE_OR_RETURN(legacy2aidl_audio_port_role_t_AudioPortRole(legacy.role));
1993 aidl.type = VALUE_OR_RETURN(legacy2aidl_audio_port_type_t_AudioPortType(legacy.type));
1994 aidl.name = VALUE_OR_RETURN(legacy2aidl_string(legacy.name, sizeof(legacy.name)));
1995
1996 if (legacy.num_audio_profiles > std::size(legacy.audio_profiles)) {
1997 return unexpected(BAD_VALUE);
1998 }
1999 RETURN_IF_ERROR(
2000 convertRange(legacy.audio_profiles, legacy.audio_profiles + legacy.num_audio_profiles,
2001 std::back_inserter(aidl.profiles),
2002 legacy2aidl_audio_profile_AudioProfile));
2003
2004 if (legacy.num_gains > std::size(legacy.gains)) {
2005 return unexpected(BAD_VALUE);
2006 }
2007 RETURN_IF_ERROR(
2008 convertRange(legacy.gains, legacy.gains + legacy.num_gains,
2009 std::back_inserter(aidl.gains),
2010 legacy2aidl_audio_gain_AudioGain));
2011
2012 aidl.activeConfig = VALUE_OR_RETURN(
2013 legacy2aidl_audio_port_config_AudioPortConfig(legacy.active_config));
2014 aidl.ext = VALUE_OR_RETURN(legacy2aidl_AudioPortExt(legacy.ext, legacy.type));
2015 return aidl;
2016}
2017
Ytai Ben-Tsvi50b8ccb2020-11-24 13:47:54 -08002018ConversionResult<audio_mode_t>
2019aidl2legacy_AudioMode_audio_mode_t(media::AudioMode aidl) {
2020 switch (aidl) {
2021 case media::AudioMode::INVALID:
2022 return AUDIO_MODE_INVALID;
2023 case media::AudioMode::CURRENT:
2024 return AUDIO_MODE_CURRENT;
2025 case media::AudioMode::NORMAL:
2026 return AUDIO_MODE_NORMAL;
2027 case media::AudioMode::RINGTONE:
2028 return AUDIO_MODE_RINGTONE;
2029 case media::AudioMode::IN_CALL:
2030 return AUDIO_MODE_IN_CALL;
2031 case media::AudioMode::IN_COMMUNICATION:
2032 return AUDIO_MODE_IN_COMMUNICATION;
2033 case media::AudioMode::CALL_SCREEN:
2034 return AUDIO_MODE_CALL_SCREEN;
2035 }
2036 return unexpected(BAD_VALUE);
2037}
2038
2039ConversionResult<media::AudioMode>
2040legacy2aidl_audio_mode_t_AudioMode(audio_mode_t legacy) {
2041 switch (legacy) {
2042 case AUDIO_MODE_INVALID:
2043 return media::AudioMode::INVALID;
2044 case AUDIO_MODE_CURRENT:
2045 return media::AudioMode::CURRENT;
2046 case AUDIO_MODE_NORMAL:
2047 return media::AudioMode::NORMAL;
2048 case AUDIO_MODE_RINGTONE:
2049 return media::AudioMode::RINGTONE;
2050 case AUDIO_MODE_IN_CALL:
2051 return media::AudioMode::IN_CALL;
2052 case AUDIO_MODE_IN_COMMUNICATION:
2053 return media::AudioMode::IN_COMMUNICATION;
2054 case AUDIO_MODE_CALL_SCREEN:
2055 return media::AudioMode::CALL_SCREEN;
2056 case AUDIO_MODE_CNT:
2057 break;
2058 }
2059 return unexpected(BAD_VALUE);
2060}
2061
2062ConversionResult<audio_unique_id_use_t>
2063aidl2legacy_AudioUniqueIdUse_audio_unique_id_use_t(media::AudioUniqueIdUse aidl) {
2064 switch (aidl) {
2065 case media::AudioUniqueIdUse::UNSPECIFIED:
2066 return AUDIO_UNIQUE_ID_USE_UNSPECIFIED;
2067 case media::AudioUniqueIdUse::SESSION:
2068 return AUDIO_UNIQUE_ID_USE_SESSION;
2069 case media::AudioUniqueIdUse::MODULE:
2070 return AUDIO_UNIQUE_ID_USE_MODULE;
2071 case media::AudioUniqueIdUse::EFFECT:
2072 return AUDIO_UNIQUE_ID_USE_EFFECT;
2073 case media::AudioUniqueIdUse::PATCH:
2074 return AUDIO_UNIQUE_ID_USE_PATCH;
2075 case media::AudioUniqueIdUse::OUTPUT:
2076 return AUDIO_UNIQUE_ID_USE_OUTPUT;
2077 case media::AudioUniqueIdUse::INPUT:
2078 return AUDIO_UNIQUE_ID_USE_INPUT;
2079 case media::AudioUniqueIdUse::CLIENT:
2080 return AUDIO_UNIQUE_ID_USE_CLIENT;
2081 }
2082 return unexpected(BAD_VALUE);
2083}
2084
2085ConversionResult<media::AudioUniqueIdUse>
2086legacy2aidl_audio_unique_id_use_t_AudioUniqueIdUse(audio_unique_id_use_t legacy) {
2087 switch (legacy) {
2088 case AUDIO_UNIQUE_ID_USE_UNSPECIFIED:
2089 return media::AudioUniqueIdUse::UNSPECIFIED;
2090 case AUDIO_UNIQUE_ID_USE_SESSION:
2091 return media::AudioUniqueIdUse::SESSION;
2092 case AUDIO_UNIQUE_ID_USE_MODULE:
2093 return media::AudioUniqueIdUse::MODULE;
2094 case AUDIO_UNIQUE_ID_USE_EFFECT:
2095 return media::AudioUniqueIdUse::EFFECT;
2096 case AUDIO_UNIQUE_ID_USE_PATCH:
2097 return media::AudioUniqueIdUse::PATCH;
2098 case AUDIO_UNIQUE_ID_USE_OUTPUT:
2099 return media::AudioUniqueIdUse::OUTPUT;
2100 case AUDIO_UNIQUE_ID_USE_INPUT:
2101 return media::AudioUniqueIdUse::INPUT;
2102 case AUDIO_UNIQUE_ID_USE_CLIENT:
2103 return media::AudioUniqueIdUse::CLIENT;
2104 case AUDIO_UNIQUE_ID_USE_MAX:
2105 break;
2106 }
2107 return unexpected(BAD_VALUE);
2108}
2109
Ytai Ben-Tsvi7e7a79d2020-12-15 16:48:16 -08002110ConversionResult<volume_group_t>
2111aidl2legacy_int32_t_volume_group_t(int32_t aidl) {
2112 return convertReinterpret<volume_group_t>(aidl);
2113}
2114
2115ConversionResult<int32_t>
2116legacy2aidl_volume_group_t_int32_t(volume_group_t legacy) {
2117 return convertReinterpret<int32_t>(legacy);
2118}
2119
Ytai Ben-Tsvi10dc0a62020-09-18 11:31:55 -07002120} // namespace android