blob: fd945686e247043aa67f20771e366fefb0d03b94 [file] [log] [blame]
Ytai Ben-Tsvi0a4904a2021-01-06 12:57:05 -08001/*
2 * Copyright (C) 2021 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
17#define LOG_TAG "PolicyAidlConversion"
18//#define LOG_NDEBUG 0
19#include <utils/Log.h>
20
21#include "media/PolicyAidlConversion.h"
22
23#include "media/AidlConversion.h"
24
25namespace android {
26
27using base::unexpected;
Mikhail Naganov932cb962021-09-16 01:05:27 +000028using media::audio::common::AudioDeviceAddress;
Ytai Ben-Tsvi0a4904a2021-01-06 12:57:05 -080029
30ConversionResult<volume_group_t>
31aidl2legacy_int32_t_volume_group_t(int32_t aidl) {
32 return convertReinterpret<volume_group_t>(aidl);
33}
34
35ConversionResult<int32_t>
36legacy2aidl_volume_group_t_int32_t(volume_group_t legacy) {
37 return convertReinterpret<int32_t>(legacy);
38}
39
40ConversionResult<uint32_t>
41aidl2legacy_AudioMixType_uint32_t(media::AudioMixType aidl) {
42 switch (aidl) {
43 case media::AudioMixType::PLAYERS:
44 return MIX_TYPE_PLAYERS;
45 case media::AudioMixType::RECORDERS:
46 return MIX_TYPE_RECORDERS;
47 }
48 return unexpected(BAD_VALUE);
49}
50
51ConversionResult<media::AudioMixType>
52legacy2aidl_uint32_t_AudioMixType(uint32_t legacy) {
53 switch (legacy) {
54 case MIX_TYPE_PLAYERS:
55 return media::AudioMixType::PLAYERS;
56 case MIX_TYPE_RECORDERS:
57 return media::AudioMixType::RECORDERS;
58 }
59 return unexpected(BAD_VALUE);
60}
61
62ConversionResult<uint32_t>
63aidl2legacy_AudioMixCallbackFlag_uint32_t(media::AudioMixCallbackFlag aidl) {
64 switch (aidl) {
65 case media::AudioMixCallbackFlag::NOTIFY_ACTIVITY:
66 return AudioMix::kCbFlagNotifyActivity;
67 }
68 return unexpected(BAD_VALUE);
69}
70
71ConversionResult<media::AudioMixCallbackFlag>
72legacy2aidl_uint32_t_AudioMixCallbackFlag(uint32_t legacy) {
73 switch (legacy) {
74 case AudioMix::kCbFlagNotifyActivity:
75 return media::AudioMixCallbackFlag::NOTIFY_ACTIVITY;
76 }
77 return unexpected(BAD_VALUE);
78}
79
80ConversionResult<uint32_t>
81aidl2legacy_AudioMixCallbackFlag_uint32_t_mask(int32_t aidl) {
82 return convertBitmask<uint32_t, int32_t, uint32_t, media::AudioMixCallbackFlag>(
83 aidl,
84 aidl2legacy_AudioMixCallbackFlag_uint32_t,
85 indexToEnum_index<media::AudioMixCallbackFlag>,
86 enumToMask_bitmask<uint32_t, uint32_t>);
87}
88
89ConversionResult<int32_t>
90legacy2aidl_uint32_t_AudioMixCallbackFlag_mask(uint32_t legacy) {
91 return convertBitmask<int32_t, uint32_t, media::AudioMixCallbackFlag, uint32_t>(
92 legacy,
93 legacy2aidl_uint32_t_AudioMixCallbackFlag,
94 indexToEnum_bitmask<uint32_t>,
95 enumToMask_index<int32_t, media::AudioMixCallbackFlag>);
96}
97
98ConversionResult<uint32_t>
99aidl2legacy_AudioMixRouteFlag_uint32_t(media::AudioMixRouteFlag aidl) {
100 switch (aidl) {
101 case media::AudioMixRouteFlag::RENDER:
102 return MIX_ROUTE_FLAG_RENDER;
103 case media::AudioMixRouteFlag::LOOP_BACK:
104 return MIX_ROUTE_FLAG_LOOP_BACK;
105 }
106 return unexpected(BAD_VALUE);
107}
108
109ConversionResult<media::AudioMixRouteFlag>
110legacy2aidl_uint32_t_AudioMixRouteFlag(uint32_t legacy) {
111 switch (legacy) {
112 case MIX_ROUTE_FLAG_RENDER:
113 return media::AudioMixRouteFlag::RENDER;
114 case MIX_ROUTE_FLAG_LOOP_BACK:
115 return media::AudioMixRouteFlag::LOOP_BACK;
116 }
117 return unexpected(BAD_VALUE);
118}
119
120ConversionResult<uint32_t>
121aidl2legacy_AudioMixRouteFlag_uint32_t_mask(int32_t aidl) {
122 return convertBitmask<uint32_t, int32_t, uint32_t, media::AudioMixRouteFlag>(
123 aidl,
124 aidl2legacy_AudioMixRouteFlag_uint32_t,
125 indexToEnum_index<media::AudioMixRouteFlag>,
126 enumToMask_bitmask<uint32_t, uint32_t>);
127}
128
129ConversionResult<int32_t>
130legacy2aidl_uint32_t_AudioMixRouteFlag_mask(uint32_t legacy) {
131 return convertBitmask<int32_t, uint32_t, media::AudioMixRouteFlag, uint32_t>(
132 legacy,
133 legacy2aidl_uint32_t_AudioMixRouteFlag,
134 indexToEnum_bitmask<uint32_t>,
135 enumToMask_index<int32_t, media::AudioMixRouteFlag>);
136}
137
138// This type is unnamed in the original definition, thus we name it here.
139using AudioMixMatchCriterionValue = decltype(AudioMixMatchCriterion::mValue);
140
141ConversionResult<AudioMixMatchCriterionValue>
142aidl2legacy_AudioMixMatchCriterionValue(
143 const media::AudioMixMatchCriterionValue& aidl,
144 uint32_t* rule) {
145 AudioMixMatchCriterionValue legacy;
146 *rule = 0;
147 switch (aidl.getTag()) {
148 case media::AudioMixMatchCriterionValue::usage:
149 legacy.mUsage = VALUE_OR_RETURN(
150 aidl2legacy_AudioUsage_audio_usage_t(UNION_GET(aidl, usage).value()));
151 *rule |= RULE_MATCH_ATTRIBUTE_USAGE;
152 return legacy;
153
154 case media::AudioMixMatchCriterionValue::source:
155 legacy.mSource = VALUE_OR_RETURN(
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700156 aidl2legacy_AudioSource_audio_source_t(UNION_GET(aidl, source).value()));
Ytai Ben-Tsvi0a4904a2021-01-06 12:57:05 -0800157 *rule |= RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET;
158 return legacy;
159
160 case media::AudioMixMatchCriterionValue::uid:
161 legacy.mUid = VALUE_OR_RETURN(
162 aidl2legacy_int32_t_uid_t(UNION_GET(aidl, uid).value()));
163 *rule |= RULE_MATCH_UID;
164 return legacy;
165
166 case media::AudioMixMatchCriterionValue::userId:
167 legacy.mUserId = VALUE_OR_RETURN(
168 convertIntegral<int>(UNION_GET(aidl, userId).value()));
169 *rule |= RULE_MATCH_USERID;
170 return legacy;
171 }
172 return unexpected(BAD_VALUE);
173}
174
175ConversionResult<media::AudioMixMatchCriterionValue>
176legacy2aidl_AudioMixMatchCriterionValue(
177 const AudioMixMatchCriterionValue& legacy,
178 uint32_t rule) {
179 media::AudioMixMatchCriterionValue aidl;
180 switch (rule) {
181 case RULE_MATCH_ATTRIBUTE_USAGE:
182 UNION_SET(aidl, usage,
183 VALUE_OR_RETURN(legacy2aidl_audio_usage_t_AudioUsage(legacy.mUsage)));
184 break;
185
186 case RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET:
187 UNION_SET(aidl, source,
Mikhail Naganovddceecc2021-09-03 13:58:56 -0700188 VALUE_OR_RETURN(legacy2aidl_audio_source_t_AudioSource(legacy.mSource)));
Ytai Ben-Tsvi0a4904a2021-01-06 12:57:05 -0800189 break;
190
191 case RULE_MATCH_UID:
192 UNION_SET(aidl, uid, VALUE_OR_RETURN(legacy2aidl_uid_t_int32_t(legacy.mUid)));
193 break;
194
195 case RULE_MATCH_USERID:
196 UNION_SET(aidl, userId, VALUE_OR_RETURN(convertReinterpret<uint32_t>(legacy.mUserId)));
197 break;
198
199 default:
200 return unexpected(BAD_VALUE);
201 }
202 return aidl;
203}
204
205
206ConversionResult<AudioMixMatchCriterion>
207aidl2legacy_AudioMixMatchCriterion(const media::AudioMixMatchCriterion& aidl) {
208 AudioMixMatchCriterion legacy;
209 legacy.mValue = VALUE_OR_RETURN(
210 aidl2legacy_AudioMixMatchCriterionValue(aidl.value, &legacy.mRule));
211 if (aidl.invert) {
212 legacy.mRule |= RULE_EXCLUSION_MASK;
213 }
214 return legacy;
215}
216
217ConversionResult<media::AudioMixMatchCriterion>
218legacy2aidl_AudioMixMatchCriterion(const AudioMixMatchCriterion& legacy) {
219 media::AudioMixMatchCriterion aidl;
220 uint32_t rule = legacy.mRule;
221 if (rule & RULE_EXCLUSION_MASK) {
222 aidl.invert = true;
223 rule &= ~RULE_EXCLUSION_MASK;
224 }
225 aidl.value = VALUE_OR_RETURN(legacy2aidl_AudioMixMatchCriterionValue(legacy.mValue, rule));
226 return aidl;
227}
228
229ConversionResult<AudioMix>
230aidl2legacy_AudioMix(const media::AudioMix& aidl) {
231 AudioMix legacy;
232 RETURN_IF_ERROR(convertRange(aidl.criteria.begin(), aidl.criteria.end(),
233 std::back_inserter(legacy.mCriteria),
234 aidl2legacy_AudioMixMatchCriterion));
235 legacy.mMixType = VALUE_OR_RETURN(aidl2legacy_AudioMixType_uint32_t(aidl.mixType));
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700236 // See 'convertAudioMixToNative' in 'android_media_AudioSystem.cpp' -- only
237 // an output mask is expected here.
238 legacy.mFormat = VALUE_OR_RETURN(aidl2legacy_AudioConfig_audio_config_t(
239 aidl.format, false /*isInput*/));
Ytai Ben-Tsvi0a4904a2021-01-06 12:57:05 -0800240 legacy.mRouteFlags = VALUE_OR_RETURN(
241 aidl2legacy_AudioMixRouteFlag_uint32_t_mask(aidl.routeFlags));
Mikhail Naganov932cb962021-09-16 01:05:27 +0000242 RETURN_IF_ERROR(aidl2legacy_AudioDevice_audio_device(
243 aidl.device, &legacy.mDeviceType, &legacy.mDeviceAddress));
Ytai Ben-Tsvi0a4904a2021-01-06 12:57:05 -0800244 legacy.mCbFlags = VALUE_OR_RETURN(aidl2legacy_AudioMixCallbackFlag_uint32_t_mask(aidl.cbFlags));
245 legacy.mAllowPrivilegedMediaPlaybackCapture = aidl.allowPrivilegedMediaPlaybackCapture;
246 legacy.mVoiceCommunicationCaptureAllowed = aidl.voiceCommunicationCaptureAllowed;
247 return legacy;
248}
249
250ConversionResult<media::AudioMix>
251legacy2aidl_AudioMix(const AudioMix& legacy) {
252 media::AudioMix aidl;
253 aidl.criteria = VALUE_OR_RETURN(
254 convertContainer<std::vector<media::AudioMixMatchCriterion>>(
255 legacy.mCriteria,
256 legacy2aidl_AudioMixMatchCriterion));
257 aidl.mixType = VALUE_OR_RETURN(legacy2aidl_uint32_t_AudioMixType(legacy.mMixType));
Mikhail Naganovde3fa182021-07-30 15:06:42 -0700258 // See 'convertAudioMixToNative' in 'android_media_AudioSystem.cpp' -- only
259 // an output mask is expected here.
260 aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_config_t_AudioConfig(
261 legacy.mFormat, false /*isInput*/));
Ytai Ben-Tsvi0a4904a2021-01-06 12:57:05 -0800262 aidl.routeFlags = VALUE_OR_RETURN(
263 legacy2aidl_uint32_t_AudioMixRouteFlag_mask(legacy.mRouteFlags));
Mikhail Naganov932cb962021-09-16 01:05:27 +0000264 aidl.device = VALUE_OR_RETURN(
265 legacy2aidl_audio_device_AudioDevice(
266 legacy.mDeviceType, legacy.mDeviceAddress));
Ytai Ben-Tsvi0a4904a2021-01-06 12:57:05 -0800267 aidl.cbFlags = VALUE_OR_RETURN(legacy2aidl_uint32_t_AudioMixCallbackFlag_mask(legacy.mCbFlags));
268 aidl.allowPrivilegedMediaPlaybackCapture = legacy.mAllowPrivilegedMediaPlaybackCapture;
269 aidl.voiceCommunicationCaptureAllowed = legacy.mVoiceCommunicationCaptureAllowed;
270 return aidl;
271}
272
273ConversionResult<audio_policy_dev_state_t>
274aidl2legacy_AudioPolicyDeviceState_audio_policy_dev_state_t(media::AudioPolicyDeviceState aidl) {
275 switch (aidl) {
276 case media::AudioPolicyDeviceState::UNAVAILABLE:
277 return AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE;
278 case media::AudioPolicyDeviceState::AVAILABLE:
279 return AUDIO_POLICY_DEVICE_STATE_AVAILABLE;
280 }
281 return unexpected(BAD_VALUE);
282}
283
284ConversionResult<media::AudioPolicyDeviceState>
285legacy2aidl_audio_policy_dev_state_t_AudioPolicyDeviceState(audio_policy_dev_state_t legacy) {
286 switch (legacy) {
287 case AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE:
288 return media::AudioPolicyDeviceState::UNAVAILABLE;
289 case AUDIO_POLICY_DEVICE_STATE_AVAILABLE:
290 return media::AudioPolicyDeviceState::AVAILABLE;
291 case AUDIO_POLICY_DEVICE_STATE_CNT:
292 break;
293 }
294 return unexpected(BAD_VALUE);
295}
296
297ConversionResult<audio_policy_force_use_t>
298aidl2legacy_AudioPolicyForceUse_audio_policy_force_use_t(media::AudioPolicyForceUse aidl) {
299 switch (aidl) {
300 case media::AudioPolicyForceUse::COMMUNICATION:
301 return AUDIO_POLICY_FORCE_FOR_COMMUNICATION;
302 case media::AudioPolicyForceUse::MEDIA:
303 return AUDIO_POLICY_FORCE_FOR_MEDIA;
304 case media::AudioPolicyForceUse::RECORD:
305 return AUDIO_POLICY_FORCE_FOR_RECORD;
306 case media::AudioPolicyForceUse::DOCK:
307 return AUDIO_POLICY_FORCE_FOR_DOCK;
308 case media::AudioPolicyForceUse::SYSTEM:
309 return AUDIO_POLICY_FORCE_FOR_SYSTEM;
310 case media::AudioPolicyForceUse::HDMI_SYSTEM_AUDIO:
311 return AUDIO_POLICY_FORCE_FOR_HDMI_SYSTEM_AUDIO;
312 case media::AudioPolicyForceUse::ENCODED_SURROUND:
313 return AUDIO_POLICY_FORCE_FOR_ENCODED_SURROUND;
314 case media::AudioPolicyForceUse::VIBRATE_RINGING:
315 return AUDIO_POLICY_FORCE_FOR_VIBRATE_RINGING;
316 }
317 return unexpected(BAD_VALUE);
318}
319
320ConversionResult<media::AudioPolicyForceUse>
321legacy2aidl_audio_policy_force_use_t_AudioPolicyForceUse(audio_policy_force_use_t legacy) {
322 switch (legacy) {
323 case AUDIO_POLICY_FORCE_FOR_COMMUNICATION:
324 return media::AudioPolicyForceUse::COMMUNICATION;
325 case AUDIO_POLICY_FORCE_FOR_MEDIA:
326 return media::AudioPolicyForceUse::MEDIA;
327 case AUDIO_POLICY_FORCE_FOR_RECORD:
328 return media::AudioPolicyForceUse::RECORD;
329 case AUDIO_POLICY_FORCE_FOR_DOCK:
330 return media::AudioPolicyForceUse::DOCK;
331 case AUDIO_POLICY_FORCE_FOR_SYSTEM:
332 return media::AudioPolicyForceUse::SYSTEM;
333 case AUDIO_POLICY_FORCE_FOR_HDMI_SYSTEM_AUDIO:
334 return media::AudioPolicyForceUse::HDMI_SYSTEM_AUDIO;
335 case AUDIO_POLICY_FORCE_FOR_ENCODED_SURROUND:
336 return media::AudioPolicyForceUse::ENCODED_SURROUND;
337 case AUDIO_POLICY_FORCE_FOR_VIBRATE_RINGING:
338 return media::AudioPolicyForceUse::VIBRATE_RINGING;
339 case AUDIO_POLICY_FORCE_USE_CNT:
340 break;
341 }
342 return unexpected(BAD_VALUE);
343}
344
345ConversionResult<audio_policy_forced_cfg_t>
346aidl2legacy_AudioPolicyForcedConfig_audio_policy_forced_cfg_t(media::AudioPolicyForcedConfig aidl) {
347 switch (aidl) {
348 case media::AudioPolicyForcedConfig::NONE:
349 return AUDIO_POLICY_FORCE_NONE;
350 case media::AudioPolicyForcedConfig::SPEAKER:
351 return AUDIO_POLICY_FORCE_SPEAKER;
352 case media::AudioPolicyForcedConfig::HEADPHONES:
353 return AUDIO_POLICY_FORCE_HEADPHONES;
354 case media::AudioPolicyForcedConfig::BT_SCO:
355 return AUDIO_POLICY_FORCE_BT_SCO;
356 case media::AudioPolicyForcedConfig::BT_A2DP:
357 return AUDIO_POLICY_FORCE_BT_A2DP;
358 case media::AudioPolicyForcedConfig::WIRED_ACCESSORY:
359 return AUDIO_POLICY_FORCE_WIRED_ACCESSORY;
360 case media::AudioPolicyForcedConfig::BT_CAR_DOCK:
361 return AUDIO_POLICY_FORCE_BT_CAR_DOCK;
362 case media::AudioPolicyForcedConfig::BT_DESK_DOCK:
363 return AUDIO_POLICY_FORCE_BT_DESK_DOCK;
364 case media::AudioPolicyForcedConfig::ANALOG_DOCK:
365 return AUDIO_POLICY_FORCE_ANALOG_DOCK;
366 case media::AudioPolicyForcedConfig::DIGITAL_DOCK:
367 return AUDIO_POLICY_FORCE_DIGITAL_DOCK;
368 case media::AudioPolicyForcedConfig::NO_BT_A2DP:
369 return AUDIO_POLICY_FORCE_NO_BT_A2DP;
370 case media::AudioPolicyForcedConfig::SYSTEM_ENFORCED:
371 return AUDIO_POLICY_FORCE_SYSTEM_ENFORCED;
372 case media::AudioPolicyForcedConfig::HDMI_SYSTEM_AUDIO_ENFORCED:
373 return AUDIO_POLICY_FORCE_HDMI_SYSTEM_AUDIO_ENFORCED;
374 case media::AudioPolicyForcedConfig::ENCODED_SURROUND_NEVER:
375 return AUDIO_POLICY_FORCE_ENCODED_SURROUND_NEVER;
376 case media::AudioPolicyForcedConfig::ENCODED_SURROUND_ALWAYS:
377 return AUDIO_POLICY_FORCE_ENCODED_SURROUND_ALWAYS;
378 case media::AudioPolicyForcedConfig::ENCODED_SURROUND_MANUAL:
379 return AUDIO_POLICY_FORCE_ENCODED_SURROUND_MANUAL;
380 }
381 return unexpected(BAD_VALUE);
382}
383
384ConversionResult<media::AudioPolicyForcedConfig>
385legacy2aidl_audio_policy_forced_cfg_t_AudioPolicyForcedConfig(audio_policy_forced_cfg_t legacy) {
386 switch (legacy) {
387 case AUDIO_POLICY_FORCE_NONE:
388 return media::AudioPolicyForcedConfig::NONE;
389 case AUDIO_POLICY_FORCE_SPEAKER:
390 return media::AudioPolicyForcedConfig::SPEAKER;
391 case AUDIO_POLICY_FORCE_HEADPHONES:
392 return media::AudioPolicyForcedConfig::HEADPHONES;
393 case AUDIO_POLICY_FORCE_BT_SCO:
394 return media::AudioPolicyForcedConfig::BT_SCO;
395 case AUDIO_POLICY_FORCE_BT_A2DP:
396 return media::AudioPolicyForcedConfig::BT_A2DP;
397 case AUDIO_POLICY_FORCE_WIRED_ACCESSORY:
398 return media::AudioPolicyForcedConfig::WIRED_ACCESSORY;
399 case AUDIO_POLICY_FORCE_BT_CAR_DOCK:
400 return media::AudioPolicyForcedConfig::BT_CAR_DOCK;
401 case AUDIO_POLICY_FORCE_BT_DESK_DOCK:
402 return media::AudioPolicyForcedConfig::BT_DESK_DOCK;
403 case AUDIO_POLICY_FORCE_ANALOG_DOCK:
404 return media::AudioPolicyForcedConfig::ANALOG_DOCK;
405 case AUDIO_POLICY_FORCE_DIGITAL_DOCK:
406 return media::AudioPolicyForcedConfig::DIGITAL_DOCK;
407 case AUDIO_POLICY_FORCE_NO_BT_A2DP:
408 return media::AudioPolicyForcedConfig::NO_BT_A2DP;
409 case AUDIO_POLICY_FORCE_SYSTEM_ENFORCED:
410 return media::AudioPolicyForcedConfig::SYSTEM_ENFORCED;
411 case AUDIO_POLICY_FORCE_HDMI_SYSTEM_AUDIO_ENFORCED:
412 return media::AudioPolicyForcedConfig::HDMI_SYSTEM_AUDIO_ENFORCED;
413 case AUDIO_POLICY_FORCE_ENCODED_SURROUND_NEVER:
414 return media::AudioPolicyForcedConfig::ENCODED_SURROUND_NEVER;
415 case AUDIO_POLICY_FORCE_ENCODED_SURROUND_ALWAYS:
416 return media::AudioPolicyForcedConfig::ENCODED_SURROUND_ALWAYS;
417 case AUDIO_POLICY_FORCE_ENCODED_SURROUND_MANUAL:
418 return media::AudioPolicyForcedConfig::ENCODED_SURROUND_MANUAL;
419 case AUDIO_POLICY_FORCE_CFG_CNT:
420 break;
421 }
422 return unexpected(BAD_VALUE);
423}
424
425ConversionResult<device_role_t>
426aidl2legacy_DeviceRole_device_role_t(media::DeviceRole aidl) {
427 switch (aidl) {
428 case media::DeviceRole::NONE:
429 return DEVICE_ROLE_NONE;
430 case media::DeviceRole::PREFERRED:
431 return DEVICE_ROLE_PREFERRED;
432 case media::DeviceRole::DISABLED:
433 return DEVICE_ROLE_DISABLED;
434 }
435 return unexpected(BAD_VALUE);
436}
437
438ConversionResult<media::DeviceRole>
439legacy2aidl_device_role_t_DeviceRole(device_role_t legacy) {
440 switch (legacy) {
441 case DEVICE_ROLE_NONE:
442 return media::DeviceRole::NONE;
443 case DEVICE_ROLE_PREFERRED:
444 return media::DeviceRole::PREFERRED;
445 case DEVICE_ROLE_DISABLED:
446 return media::DeviceRole::DISABLED;
447 }
448 return unexpected(BAD_VALUE);
449}
450
451ConversionResult<audio_offload_mode_t>
452aidl2legacy_AudioOffloadMode_audio_offload_mode_t(media::AudioOffloadMode aidl) {
453 switch (aidl) {
454 case media::AudioOffloadMode::NOT_SUPPORTED:
455 return AUDIO_OFFLOAD_NOT_SUPPORTED;
456 case media::AudioOffloadMode::SUPPORTED:
457 return AUDIO_OFFLOAD_SUPPORTED;
458 case media::AudioOffloadMode::GAPLESS_SUPPORTED:
459 return AUDIO_OFFLOAD_GAPLESS_SUPPORTED;
460 }
461 return unexpected(BAD_VALUE);
462}
463
464ConversionResult<media::AudioOffloadMode>
465legacy2aidl_audio_offload_mode_t_AudioOffloadMode(audio_offload_mode_t legacy) {
466 switch (legacy) {
467 case AUDIO_OFFLOAD_NOT_SUPPORTED:
468 return media::AudioOffloadMode::NOT_SUPPORTED;
469 case AUDIO_OFFLOAD_SUPPORTED:
470 return media::AudioOffloadMode::SUPPORTED;
471 case AUDIO_OFFLOAD_GAPLESS_SUPPORTED:
472 return media::AudioOffloadMode::GAPLESS_SUPPORTED;
473 }
474 return unexpected(BAD_VALUE);
475}
476
477} // namespace android