xref: /aosp_15_r20/frameworks/av/media/libaudioclient/PolicyAidlConversion.cpp (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker  * Copyright (C) 2021 The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker  *
4*ec779b8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker  *
8*ec779b8eSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker  *
10*ec779b8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker  * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker  */
16*ec779b8eSAndroid Build Coastguard Worker 
17*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "PolicyAidlConversion"
18*ec779b8eSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
19*ec779b8eSAndroid Build Coastguard Worker #include <utils/Log.h>
20*ec779b8eSAndroid Build Coastguard Worker 
21*ec779b8eSAndroid Build Coastguard Worker #include "media/PolicyAidlConversion.h"
22*ec779b8eSAndroid Build Coastguard Worker 
23*ec779b8eSAndroid Build Coastguard Worker #include "media/AidlConversion.h"
24*ec779b8eSAndroid Build Coastguard Worker 
25*ec779b8eSAndroid Build Coastguard Worker namespace android {
26*ec779b8eSAndroid Build Coastguard Worker 
27*ec779b8eSAndroid Build Coastguard Worker using base::unexpected;
28*ec779b8eSAndroid Build Coastguard Worker using media::audio::common::AudioDeviceAddress;
29*ec779b8eSAndroid Build Coastguard Worker 
30*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t>
aidl2legacy_AudioMixType_uint32_t(media::AudioMixType aidl)31*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioMixType_uint32_t(media::AudioMixType aidl) {
32*ec779b8eSAndroid Build Coastguard Worker     switch (aidl) {
33*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixType::PLAYERS:
34*ec779b8eSAndroid Build Coastguard Worker             return MIX_TYPE_PLAYERS;
35*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixType::RECORDERS:
36*ec779b8eSAndroid Build Coastguard Worker             return MIX_TYPE_RECORDERS;
37*ec779b8eSAndroid Build Coastguard Worker     }
38*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
39*ec779b8eSAndroid Build Coastguard Worker }
40*ec779b8eSAndroid Build Coastguard Worker 
41*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::AudioMixType>
legacy2aidl_uint32_t_AudioMixType(uint32_t legacy)42*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_uint32_t_AudioMixType(uint32_t legacy) {
43*ec779b8eSAndroid Build Coastguard Worker     switch (legacy) {
44*ec779b8eSAndroid Build Coastguard Worker         case MIX_TYPE_PLAYERS:
45*ec779b8eSAndroid Build Coastguard Worker             return media::AudioMixType::PLAYERS;
46*ec779b8eSAndroid Build Coastguard Worker         case MIX_TYPE_RECORDERS:
47*ec779b8eSAndroid Build Coastguard Worker             return media::AudioMixType::RECORDERS;
48*ec779b8eSAndroid Build Coastguard Worker     }
49*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
50*ec779b8eSAndroid Build Coastguard Worker }
51*ec779b8eSAndroid Build Coastguard Worker 
52*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t>
aidl2legacy_AudioMixCallbackFlag_uint32_t(media::AudioMixCallbackFlag aidl)53*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioMixCallbackFlag_uint32_t(media::AudioMixCallbackFlag aidl) {
54*ec779b8eSAndroid Build Coastguard Worker     switch (aidl) {
55*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixCallbackFlag::NOTIFY_ACTIVITY:
56*ec779b8eSAndroid Build Coastguard Worker             return AudioMix::kCbFlagNotifyActivity;
57*ec779b8eSAndroid Build Coastguard Worker     }
58*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
59*ec779b8eSAndroid Build Coastguard Worker }
60*ec779b8eSAndroid Build Coastguard Worker 
61*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::AudioMixCallbackFlag>
legacy2aidl_uint32_t_AudioMixCallbackFlag(uint32_t legacy)62*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_uint32_t_AudioMixCallbackFlag(uint32_t legacy) {
63*ec779b8eSAndroid Build Coastguard Worker     switch (legacy) {
64*ec779b8eSAndroid Build Coastguard Worker         case AudioMix::kCbFlagNotifyActivity:
65*ec779b8eSAndroid Build Coastguard Worker             return media::AudioMixCallbackFlag::NOTIFY_ACTIVITY;
66*ec779b8eSAndroid Build Coastguard Worker     }
67*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
68*ec779b8eSAndroid Build Coastguard Worker }
69*ec779b8eSAndroid Build Coastguard Worker 
70*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t>
aidl2legacy_AudioMixCallbackFlag_uint32_t_mask(int32_t aidl)71*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioMixCallbackFlag_uint32_t_mask(int32_t aidl) {
72*ec779b8eSAndroid Build Coastguard Worker     return convertBitmask<uint32_t, int32_t, uint32_t, media::AudioMixCallbackFlag>(
73*ec779b8eSAndroid Build Coastguard Worker             aidl,
74*ec779b8eSAndroid Build Coastguard Worker             aidl2legacy_AudioMixCallbackFlag_uint32_t,
75*ec779b8eSAndroid Build Coastguard Worker             indexToEnum_index<media::AudioMixCallbackFlag>,
76*ec779b8eSAndroid Build Coastguard Worker             enumToMask_bitmask<uint32_t, uint32_t>);
77*ec779b8eSAndroid Build Coastguard Worker }
78*ec779b8eSAndroid Build Coastguard Worker 
79*ec779b8eSAndroid Build Coastguard Worker ConversionResult<int32_t>
legacy2aidl_uint32_t_AudioMixCallbackFlag_mask(uint32_t legacy)80*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_uint32_t_AudioMixCallbackFlag_mask(uint32_t legacy) {
81*ec779b8eSAndroid Build Coastguard Worker     return convertBitmask<int32_t, uint32_t, media::AudioMixCallbackFlag, uint32_t>(
82*ec779b8eSAndroid Build Coastguard Worker             legacy,
83*ec779b8eSAndroid Build Coastguard Worker             legacy2aidl_uint32_t_AudioMixCallbackFlag,
84*ec779b8eSAndroid Build Coastguard Worker             indexToEnum_bitmask<uint32_t>,
85*ec779b8eSAndroid Build Coastguard Worker             enumToMask_index<int32_t, media::AudioMixCallbackFlag>);
86*ec779b8eSAndroid Build Coastguard Worker }
87*ec779b8eSAndroid Build Coastguard Worker 
88*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t>
aidl2legacy_AudioMixRouteFlag_uint32_t(media::AudioMixRouteFlag aidl)89*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioMixRouteFlag_uint32_t(media::AudioMixRouteFlag aidl) {
90*ec779b8eSAndroid Build Coastguard Worker     switch (aidl) {
91*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixRouteFlag::RENDER:
92*ec779b8eSAndroid Build Coastguard Worker             return MIX_ROUTE_FLAG_RENDER;
93*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixRouteFlag::LOOP_BACK:
94*ec779b8eSAndroid Build Coastguard Worker             return MIX_ROUTE_FLAG_LOOP_BACK;
95*ec779b8eSAndroid Build Coastguard Worker     }
96*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
97*ec779b8eSAndroid Build Coastguard Worker }
98*ec779b8eSAndroid Build Coastguard Worker 
99*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::AudioMixRouteFlag>
legacy2aidl_uint32_t_AudioMixRouteFlag(uint32_t legacy)100*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_uint32_t_AudioMixRouteFlag(uint32_t legacy) {
101*ec779b8eSAndroid Build Coastguard Worker     switch (legacy) {
102*ec779b8eSAndroid Build Coastguard Worker         case MIX_ROUTE_FLAG_RENDER:
103*ec779b8eSAndroid Build Coastguard Worker             return media::AudioMixRouteFlag::RENDER;
104*ec779b8eSAndroid Build Coastguard Worker         case MIX_ROUTE_FLAG_LOOP_BACK:
105*ec779b8eSAndroid Build Coastguard Worker             return media::AudioMixRouteFlag::LOOP_BACK;
106*ec779b8eSAndroid Build Coastguard Worker     }
107*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
108*ec779b8eSAndroid Build Coastguard Worker }
109*ec779b8eSAndroid Build Coastguard Worker 
110*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t>
aidl2legacy_AudioMixRouteFlag_uint32_t_mask(int32_t aidl)111*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioMixRouteFlag_uint32_t_mask(int32_t aidl) {
112*ec779b8eSAndroid Build Coastguard Worker     return convertBitmask<uint32_t, int32_t, uint32_t, media::AudioMixRouteFlag>(
113*ec779b8eSAndroid Build Coastguard Worker             aidl,
114*ec779b8eSAndroid Build Coastguard Worker             aidl2legacy_AudioMixRouteFlag_uint32_t,
115*ec779b8eSAndroid Build Coastguard Worker             indexToEnum_index<media::AudioMixRouteFlag>,
116*ec779b8eSAndroid Build Coastguard Worker             enumToMask_bitmask<uint32_t, uint32_t>);
117*ec779b8eSAndroid Build Coastguard Worker }
118*ec779b8eSAndroid Build Coastguard Worker 
119*ec779b8eSAndroid Build Coastguard Worker ConversionResult<int32_t>
legacy2aidl_uint32_t_AudioMixRouteFlag_mask(uint32_t legacy)120*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_uint32_t_AudioMixRouteFlag_mask(uint32_t legacy) {
121*ec779b8eSAndroid Build Coastguard Worker     return convertBitmask<int32_t, uint32_t, media::AudioMixRouteFlag, uint32_t>(
122*ec779b8eSAndroid Build Coastguard Worker             legacy,
123*ec779b8eSAndroid Build Coastguard Worker             legacy2aidl_uint32_t_AudioMixRouteFlag,
124*ec779b8eSAndroid Build Coastguard Worker             indexToEnum_bitmask<uint32_t>,
125*ec779b8eSAndroid Build Coastguard Worker             enumToMask_index<int32_t, media::AudioMixRouteFlag>);
126*ec779b8eSAndroid Build Coastguard Worker }
127*ec779b8eSAndroid Build Coastguard Worker 
128*ec779b8eSAndroid Build Coastguard Worker // This type is unnamed in the original definition, thus we name it here.
129*ec779b8eSAndroid Build Coastguard Worker using AudioMixMatchCriterionValue = decltype(AudioMixMatchCriterion::mValue);
130*ec779b8eSAndroid Build Coastguard Worker 
131*ec779b8eSAndroid Build Coastguard Worker ConversionResult<AudioMixMatchCriterionValue>
aidl2legacy_AudioMixMatchCriterionValue(const media::AudioMixMatchCriterionValue & aidl,uint32_t * rule)132*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioMixMatchCriterionValue(
133*ec779b8eSAndroid Build Coastguard Worker         const media::AudioMixMatchCriterionValue& aidl,
134*ec779b8eSAndroid Build Coastguard Worker         uint32_t* rule) {
135*ec779b8eSAndroid Build Coastguard Worker     AudioMixMatchCriterionValue legacy;
136*ec779b8eSAndroid Build Coastguard Worker     *rule = 0;
137*ec779b8eSAndroid Build Coastguard Worker     switch (aidl.getTag()) {
138*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixMatchCriterionValue::usage:
139*ec779b8eSAndroid Build Coastguard Worker             legacy.mUsage = VALUE_OR_RETURN(
140*ec779b8eSAndroid Build Coastguard Worker                     aidl2legacy_AudioUsage_audio_usage_t(UNION_GET(aidl, usage).value()));
141*ec779b8eSAndroid Build Coastguard Worker             *rule |= RULE_MATCH_ATTRIBUTE_USAGE;
142*ec779b8eSAndroid Build Coastguard Worker             return legacy;
143*ec779b8eSAndroid Build Coastguard Worker 
144*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixMatchCriterionValue::source:
145*ec779b8eSAndroid Build Coastguard Worker             legacy.mSource = VALUE_OR_RETURN(
146*ec779b8eSAndroid Build Coastguard Worker                     aidl2legacy_AudioSource_audio_source_t(UNION_GET(aidl, source).value()));
147*ec779b8eSAndroid Build Coastguard Worker             *rule |= RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET;
148*ec779b8eSAndroid Build Coastguard Worker             return legacy;
149*ec779b8eSAndroid Build Coastguard Worker 
150*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixMatchCriterionValue::uid:
151*ec779b8eSAndroid Build Coastguard Worker             legacy.mUid = VALUE_OR_RETURN(
152*ec779b8eSAndroid Build Coastguard Worker                     aidl2legacy_int32_t_uid_t(UNION_GET(aidl, uid).value()));
153*ec779b8eSAndroid Build Coastguard Worker             *rule |= RULE_MATCH_UID;
154*ec779b8eSAndroid Build Coastguard Worker             return legacy;
155*ec779b8eSAndroid Build Coastguard Worker 
156*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixMatchCriterionValue::userId:
157*ec779b8eSAndroid Build Coastguard Worker             legacy.mUserId = VALUE_OR_RETURN(
158*ec779b8eSAndroid Build Coastguard Worker                     convertIntegral<int>(UNION_GET(aidl, userId).value()));
159*ec779b8eSAndroid Build Coastguard Worker             *rule |= RULE_MATCH_USERID;
160*ec779b8eSAndroid Build Coastguard Worker             return legacy;
161*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixMatchCriterionValue::audioSessionId:
162*ec779b8eSAndroid Build Coastguard Worker             legacy.mAudioSessionId = VALUE_OR_RETURN(
163*ec779b8eSAndroid Build Coastguard Worker                     aidl2legacy_int32_t_audio_session_t(UNION_GET(aidl, audioSessionId).value()));
164*ec779b8eSAndroid Build Coastguard Worker             *rule |= RULE_MATCH_AUDIO_SESSION_ID;
165*ec779b8eSAndroid Build Coastguard Worker             return legacy;
166*ec779b8eSAndroid Build Coastguard Worker     }
167*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
168*ec779b8eSAndroid Build Coastguard Worker }
169*ec779b8eSAndroid Build Coastguard Worker 
170*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::AudioMixMatchCriterionValue>
legacy2aidl_AudioMixMatchCriterionValue(const AudioMixMatchCriterionValue & legacy,uint32_t rule)171*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_AudioMixMatchCriterionValue(
172*ec779b8eSAndroid Build Coastguard Worker         const AudioMixMatchCriterionValue& legacy,
173*ec779b8eSAndroid Build Coastguard Worker         uint32_t rule) {
174*ec779b8eSAndroid Build Coastguard Worker     media::AudioMixMatchCriterionValue aidl;
175*ec779b8eSAndroid Build Coastguard Worker     switch (rule) {
176*ec779b8eSAndroid Build Coastguard Worker         case RULE_MATCH_ATTRIBUTE_USAGE:
177*ec779b8eSAndroid Build Coastguard Worker             UNION_SET(aidl, usage,
178*ec779b8eSAndroid Build Coastguard Worker                       VALUE_OR_RETURN(legacy2aidl_audio_usage_t_AudioUsage(legacy.mUsage)));
179*ec779b8eSAndroid Build Coastguard Worker             break;
180*ec779b8eSAndroid Build Coastguard Worker 
181*ec779b8eSAndroid Build Coastguard Worker         case RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET:
182*ec779b8eSAndroid Build Coastguard Worker             UNION_SET(aidl, source,
183*ec779b8eSAndroid Build Coastguard Worker                       VALUE_OR_RETURN(legacy2aidl_audio_source_t_AudioSource(legacy.mSource)));
184*ec779b8eSAndroid Build Coastguard Worker             break;
185*ec779b8eSAndroid Build Coastguard Worker 
186*ec779b8eSAndroid Build Coastguard Worker         case RULE_MATCH_UID:
187*ec779b8eSAndroid Build Coastguard Worker             UNION_SET(aidl, uid, VALUE_OR_RETURN(legacy2aidl_uid_t_int32_t(legacy.mUid)));
188*ec779b8eSAndroid Build Coastguard Worker             break;
189*ec779b8eSAndroid Build Coastguard Worker 
190*ec779b8eSAndroid Build Coastguard Worker         case RULE_MATCH_USERID:
191*ec779b8eSAndroid Build Coastguard Worker             UNION_SET(aidl, userId, VALUE_OR_RETURN(convertReinterpret<uint32_t>(legacy.mUserId)));
192*ec779b8eSAndroid Build Coastguard Worker             break;
193*ec779b8eSAndroid Build Coastguard Worker         case RULE_MATCH_AUDIO_SESSION_ID:
194*ec779b8eSAndroid Build Coastguard Worker             UNION_SET(aidl, audioSessionId,
195*ec779b8eSAndroid Build Coastguard Worker                 VALUE_OR_RETURN(legacy2aidl_audio_session_t_int32_t(legacy.mAudioSessionId)));
196*ec779b8eSAndroid Build Coastguard Worker             break;
197*ec779b8eSAndroid Build Coastguard Worker         default:
198*ec779b8eSAndroid Build Coastguard Worker             return unexpected(BAD_VALUE);
199*ec779b8eSAndroid Build Coastguard Worker     }
200*ec779b8eSAndroid Build Coastguard Worker     return aidl;
201*ec779b8eSAndroid Build Coastguard Worker }
202*ec779b8eSAndroid Build Coastguard Worker 
203*ec779b8eSAndroid Build Coastguard Worker 
204*ec779b8eSAndroid Build Coastguard Worker ConversionResult<AudioMixMatchCriterion>
aidl2legacy_AudioMixMatchCriterion(const media::AudioMixMatchCriterion & aidl)205*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioMixMatchCriterion(const media::AudioMixMatchCriterion& aidl) {
206*ec779b8eSAndroid Build Coastguard Worker     AudioMixMatchCriterion legacy;
207*ec779b8eSAndroid Build Coastguard Worker     legacy.mValue = VALUE_OR_RETURN(
208*ec779b8eSAndroid Build Coastguard Worker             aidl2legacy_AudioMixMatchCriterionValue(aidl.value, &legacy.mRule));
209*ec779b8eSAndroid Build Coastguard Worker     if (aidl.invert) {
210*ec779b8eSAndroid Build Coastguard Worker         legacy.mRule |= RULE_EXCLUSION_MASK;
211*ec779b8eSAndroid Build Coastguard Worker     }
212*ec779b8eSAndroid Build Coastguard Worker     return legacy;
213*ec779b8eSAndroid Build Coastguard Worker }
214*ec779b8eSAndroid Build Coastguard Worker 
215*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::AudioMixMatchCriterion>
legacy2aidl_AudioMixMatchCriterion(const AudioMixMatchCriterion & legacy)216*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_AudioMixMatchCriterion(const AudioMixMatchCriterion& legacy) {
217*ec779b8eSAndroid Build Coastguard Worker     media::AudioMixMatchCriterion aidl;
218*ec779b8eSAndroid Build Coastguard Worker     uint32_t rule = legacy.mRule;
219*ec779b8eSAndroid Build Coastguard Worker     if (rule & RULE_EXCLUSION_MASK) {
220*ec779b8eSAndroid Build Coastguard Worker         aidl.invert = true;
221*ec779b8eSAndroid Build Coastguard Worker         rule &= ~RULE_EXCLUSION_MASK;
222*ec779b8eSAndroid Build Coastguard Worker     }
223*ec779b8eSAndroid Build Coastguard Worker     aidl.value = VALUE_OR_RETURN(legacy2aidl_AudioMixMatchCriterionValue(legacy.mValue, rule));
224*ec779b8eSAndroid Build Coastguard Worker     return aidl;
225*ec779b8eSAndroid Build Coastguard Worker }
226*ec779b8eSAndroid Build Coastguard Worker 
227*ec779b8eSAndroid Build Coastguard Worker ConversionResult<AudioMix>
aidl2legacy_AudioMix(const media::AudioMix & aidl)228*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioMix(const media::AudioMix& aidl) {
229*ec779b8eSAndroid Build Coastguard Worker     AudioMix legacy;
230*ec779b8eSAndroid Build Coastguard Worker     RETURN_IF_ERROR(convertRange(aidl.criteria.begin(), aidl.criteria.end(),
231*ec779b8eSAndroid Build Coastguard Worker                                  std::back_inserter(legacy.mCriteria),
232*ec779b8eSAndroid Build Coastguard Worker                                  aidl2legacy_AudioMixMatchCriterion));
233*ec779b8eSAndroid Build Coastguard Worker     legacy.mMixType = VALUE_OR_RETURN(aidl2legacy_AudioMixType_uint32_t(aidl.mixType));
234*ec779b8eSAndroid Build Coastguard Worker     // See 'convertAudioMixToNative' in 'android_media_AudioSystem.cpp' -- only
235*ec779b8eSAndroid Build Coastguard Worker     // an output mask is expected here.
236*ec779b8eSAndroid Build Coastguard Worker     legacy.mFormat = VALUE_OR_RETURN(aidl2legacy_AudioConfig_audio_config_t(
237*ec779b8eSAndroid Build Coastguard Worker                     aidl.format, false /*isInput*/));
238*ec779b8eSAndroid Build Coastguard Worker     legacy.mRouteFlags = VALUE_OR_RETURN(
239*ec779b8eSAndroid Build Coastguard Worker             aidl2legacy_AudioMixRouteFlag_uint32_t_mask(aidl.routeFlags));
240*ec779b8eSAndroid Build Coastguard Worker     RETURN_IF_ERROR(aidl2legacy_AudioDevice_audio_device(
241*ec779b8eSAndroid Build Coastguard Worker                     aidl.device, &legacy.mDeviceType, &legacy.mDeviceAddress));
242*ec779b8eSAndroid Build Coastguard Worker     legacy.mCbFlags = VALUE_OR_RETURN(aidl2legacy_AudioMixCallbackFlag_uint32_t_mask(aidl.cbFlags));
243*ec779b8eSAndroid Build Coastguard Worker     legacy.mAllowPrivilegedMediaPlaybackCapture = aidl.allowPrivilegedMediaPlaybackCapture;
244*ec779b8eSAndroid Build Coastguard Worker     legacy.mVoiceCommunicationCaptureAllowed = aidl.voiceCommunicationCaptureAllowed;
245*ec779b8eSAndroid Build Coastguard Worker     legacy.mToken = aidl.mToken;
246*ec779b8eSAndroid Build Coastguard Worker     legacy.mVirtualDeviceId = aidl.mVirtualDeviceId;
247*ec779b8eSAndroid Build Coastguard Worker     return legacy;
248*ec779b8eSAndroid Build Coastguard Worker }
249*ec779b8eSAndroid Build Coastguard Worker 
250*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::AudioMix>
legacy2aidl_AudioMix(const AudioMix & legacy)251*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_AudioMix(const AudioMix& legacy) {
252*ec779b8eSAndroid Build Coastguard Worker     media::AudioMix aidl;
253*ec779b8eSAndroid Build Coastguard Worker     aidl.criteria = VALUE_OR_RETURN(
254*ec779b8eSAndroid Build Coastguard Worker             convertContainer<std::vector<media::AudioMixMatchCriterion>>(
255*ec779b8eSAndroid Build Coastguard Worker                     legacy.mCriteria,
256*ec779b8eSAndroid Build Coastguard Worker                     legacy2aidl_AudioMixMatchCriterion));
257*ec779b8eSAndroid Build Coastguard Worker     aidl.mixType = VALUE_OR_RETURN(legacy2aidl_uint32_t_AudioMixType(legacy.mMixType));
258*ec779b8eSAndroid Build Coastguard Worker     // See 'convertAudioMixToNative' in 'android_media_AudioSystem.cpp' -- only
259*ec779b8eSAndroid Build Coastguard Worker     // an output mask is expected here.
260*ec779b8eSAndroid Build Coastguard Worker     aidl.format = VALUE_OR_RETURN(legacy2aidl_audio_config_t_AudioConfig(
261*ec779b8eSAndroid Build Coastguard Worker                     legacy.mFormat, false /*isInput*/));
262*ec779b8eSAndroid Build Coastguard Worker     aidl.routeFlags = VALUE_OR_RETURN(
263*ec779b8eSAndroid Build Coastguard Worker             legacy2aidl_uint32_t_AudioMixRouteFlag_mask(legacy.mRouteFlags));
264*ec779b8eSAndroid Build Coastguard Worker     aidl.device = VALUE_OR_RETURN(
265*ec779b8eSAndroid Build Coastguard Worker             legacy2aidl_audio_device_AudioDevice(
266*ec779b8eSAndroid Build Coastguard Worker                     legacy.mDeviceType, legacy.mDeviceAddress));
267*ec779b8eSAndroid Build Coastguard Worker     aidl.cbFlags = VALUE_OR_RETURN(legacy2aidl_uint32_t_AudioMixCallbackFlag_mask(legacy.mCbFlags));
268*ec779b8eSAndroid Build Coastguard Worker     aidl.allowPrivilegedMediaPlaybackCapture = legacy.mAllowPrivilegedMediaPlaybackCapture;
269*ec779b8eSAndroid Build Coastguard Worker     aidl.voiceCommunicationCaptureAllowed = legacy.mVoiceCommunicationCaptureAllowed;
270*ec779b8eSAndroid Build Coastguard Worker     aidl.mToken = legacy.mToken;
271*ec779b8eSAndroid Build Coastguard Worker     aidl.mVirtualDeviceId = legacy.mVirtualDeviceId;
272*ec779b8eSAndroid Build Coastguard Worker     return aidl;
273*ec779b8eSAndroid Build Coastguard Worker }
274*ec779b8eSAndroid Build Coastguard Worker 
275*ec779b8eSAndroid Build Coastguard Worker ConversionResult<audio_policy_dev_state_t>
aidl2legacy_AudioPolicyDeviceState_audio_policy_dev_state_t(media::AudioPolicyDeviceState aidl)276*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioPolicyDeviceState_audio_policy_dev_state_t(media::AudioPolicyDeviceState aidl) {
277*ec779b8eSAndroid Build Coastguard Worker     switch (aidl) {
278*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyDeviceState::UNAVAILABLE:
279*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE;
280*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyDeviceState::AVAILABLE:
281*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_DEVICE_STATE_AVAILABLE;
282*ec779b8eSAndroid Build Coastguard Worker     }
283*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
284*ec779b8eSAndroid Build Coastguard Worker }
285*ec779b8eSAndroid Build Coastguard Worker 
286*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::AudioPolicyDeviceState>
legacy2aidl_audio_policy_dev_state_t_AudioPolicyDeviceState(audio_policy_dev_state_t legacy)287*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_audio_policy_dev_state_t_AudioPolicyDeviceState(audio_policy_dev_state_t legacy) {
288*ec779b8eSAndroid Build Coastguard Worker     switch (legacy) {
289*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE:
290*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyDeviceState::UNAVAILABLE;
291*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_DEVICE_STATE_AVAILABLE:
292*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyDeviceState::AVAILABLE;
293*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_DEVICE_STATE_CNT:
294*ec779b8eSAndroid Build Coastguard Worker             break;
295*ec779b8eSAndroid Build Coastguard Worker     }
296*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
297*ec779b8eSAndroid Build Coastguard Worker }
298*ec779b8eSAndroid Build Coastguard Worker 
299*ec779b8eSAndroid Build Coastguard Worker ConversionResult<audio_policy_force_use_t>
aidl2legacy_AudioPolicyForceUse_audio_policy_force_use_t(media::AudioPolicyForceUse aidl)300*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioPolicyForceUse_audio_policy_force_use_t(media::AudioPolicyForceUse aidl) {
301*ec779b8eSAndroid Build Coastguard Worker     switch (aidl) {
302*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForceUse::COMMUNICATION:
303*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_FOR_COMMUNICATION;
304*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForceUse::MEDIA:
305*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_FOR_MEDIA;
306*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForceUse::RECORD:
307*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_FOR_RECORD;
308*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForceUse::DOCK:
309*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_FOR_DOCK;
310*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForceUse::SYSTEM:
311*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_FOR_SYSTEM;
312*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForceUse::HDMI_SYSTEM_AUDIO:
313*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_FOR_HDMI_SYSTEM_AUDIO;
314*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForceUse::ENCODED_SURROUND:
315*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_FOR_ENCODED_SURROUND;
316*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForceUse::VIBRATE_RINGING:
317*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_FOR_VIBRATE_RINGING;
318*ec779b8eSAndroid Build Coastguard Worker     }
319*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
320*ec779b8eSAndroid Build Coastguard Worker }
321*ec779b8eSAndroid Build Coastguard Worker 
322*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::AudioPolicyForceUse>
legacy2aidl_audio_policy_force_use_t_AudioPolicyForceUse(audio_policy_force_use_t legacy)323*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_audio_policy_force_use_t_AudioPolicyForceUse(audio_policy_force_use_t legacy) {
324*ec779b8eSAndroid Build Coastguard Worker     switch (legacy) {
325*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_FOR_COMMUNICATION:
326*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForceUse::COMMUNICATION;
327*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_FOR_MEDIA:
328*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForceUse::MEDIA;
329*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_FOR_RECORD:
330*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForceUse::RECORD;
331*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_FOR_DOCK:
332*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForceUse::DOCK;
333*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_FOR_SYSTEM:
334*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForceUse::SYSTEM;
335*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_FOR_HDMI_SYSTEM_AUDIO:
336*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForceUse::HDMI_SYSTEM_AUDIO;
337*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_FOR_ENCODED_SURROUND:
338*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForceUse::ENCODED_SURROUND;
339*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_FOR_VIBRATE_RINGING:
340*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForceUse::VIBRATE_RINGING;
341*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_USE_CNT:
342*ec779b8eSAndroid Build Coastguard Worker             break;
343*ec779b8eSAndroid Build Coastguard Worker     }
344*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
345*ec779b8eSAndroid Build Coastguard Worker }
346*ec779b8eSAndroid Build Coastguard Worker 
347*ec779b8eSAndroid Build Coastguard Worker ConversionResult<audio_policy_forced_cfg_t>
aidl2legacy_AudioPolicyForcedConfig_audio_policy_forced_cfg_t(media::AudioPolicyForcedConfig aidl)348*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioPolicyForcedConfig_audio_policy_forced_cfg_t(media::AudioPolicyForcedConfig aidl) {
349*ec779b8eSAndroid Build Coastguard Worker     switch (aidl) {
350*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::NONE:
351*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_NONE;
352*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::SPEAKER:
353*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_SPEAKER;
354*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::HEADPHONES:
355*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_HEADPHONES;
356*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::BT_SCO:
357*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_BT_SCO;
358*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::BT_A2DP:
359*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_BT_A2DP;
360*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::WIRED_ACCESSORY:
361*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_WIRED_ACCESSORY;
362*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::BT_CAR_DOCK:
363*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_BT_CAR_DOCK;
364*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::BT_DESK_DOCK:
365*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_BT_DESK_DOCK;
366*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::ANALOG_DOCK:
367*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_ANALOG_DOCK;
368*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::DIGITAL_DOCK:
369*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_DIGITAL_DOCK;
370*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::NO_BT_A2DP:
371*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_NO_BT_A2DP;
372*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::SYSTEM_ENFORCED:
373*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_SYSTEM_ENFORCED;
374*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::HDMI_SYSTEM_AUDIO_ENFORCED:
375*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_HDMI_SYSTEM_AUDIO_ENFORCED;
376*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::ENCODED_SURROUND_NEVER:
377*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_ENCODED_SURROUND_NEVER;
378*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::ENCODED_SURROUND_ALWAYS:
379*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_ENCODED_SURROUND_ALWAYS;
380*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::ENCODED_SURROUND_MANUAL:
381*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_ENCODED_SURROUND_MANUAL;
382*ec779b8eSAndroid Build Coastguard Worker         case media::AudioPolicyForcedConfig::BT_BLE:
383*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_POLICY_FORCE_BT_BLE;
384*ec779b8eSAndroid Build Coastguard Worker     }
385*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
386*ec779b8eSAndroid Build Coastguard Worker }
387*ec779b8eSAndroid Build Coastguard Worker 
388*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::AudioPolicyForcedConfig>
legacy2aidl_audio_policy_forced_cfg_t_AudioPolicyForcedConfig(audio_policy_forced_cfg_t legacy)389*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_audio_policy_forced_cfg_t_AudioPolicyForcedConfig(audio_policy_forced_cfg_t legacy) {
390*ec779b8eSAndroid Build Coastguard Worker     switch (legacy) {
391*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_NONE:
392*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::NONE;
393*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_SPEAKER:
394*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::SPEAKER;
395*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_HEADPHONES:
396*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::HEADPHONES;
397*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_BT_SCO:
398*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::BT_SCO;
399*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_BT_A2DP:
400*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::BT_A2DP;
401*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_WIRED_ACCESSORY:
402*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::WIRED_ACCESSORY;
403*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_BT_CAR_DOCK:
404*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::BT_CAR_DOCK;
405*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_BT_DESK_DOCK:
406*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::BT_DESK_DOCK;
407*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_ANALOG_DOCK:
408*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::ANALOG_DOCK;
409*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_DIGITAL_DOCK:
410*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::DIGITAL_DOCK;
411*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_NO_BT_A2DP:
412*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::NO_BT_A2DP;
413*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_SYSTEM_ENFORCED:
414*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::SYSTEM_ENFORCED;
415*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_HDMI_SYSTEM_AUDIO_ENFORCED:
416*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::HDMI_SYSTEM_AUDIO_ENFORCED;
417*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_ENCODED_SURROUND_NEVER:
418*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::ENCODED_SURROUND_NEVER;
419*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_ENCODED_SURROUND_ALWAYS:
420*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::ENCODED_SURROUND_ALWAYS;
421*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_ENCODED_SURROUND_MANUAL:
422*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::ENCODED_SURROUND_MANUAL;
423*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_BT_BLE:
424*ec779b8eSAndroid Build Coastguard Worker             return media::AudioPolicyForcedConfig::BT_BLE;
425*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_POLICY_FORCE_CFG_CNT:
426*ec779b8eSAndroid Build Coastguard Worker             break;
427*ec779b8eSAndroid Build Coastguard Worker     }
428*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
429*ec779b8eSAndroid Build Coastguard Worker }
430*ec779b8eSAndroid Build Coastguard Worker 
431*ec779b8eSAndroid Build Coastguard Worker ConversionResult<device_role_t>
aidl2legacy_DeviceRole_device_role_t(media::DeviceRole aidl)432*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_DeviceRole_device_role_t(media::DeviceRole aidl) {
433*ec779b8eSAndroid Build Coastguard Worker     switch (aidl) {
434*ec779b8eSAndroid Build Coastguard Worker         case media::DeviceRole::NONE:
435*ec779b8eSAndroid Build Coastguard Worker             return DEVICE_ROLE_NONE;
436*ec779b8eSAndroid Build Coastguard Worker         case media::DeviceRole::PREFERRED:
437*ec779b8eSAndroid Build Coastguard Worker             return DEVICE_ROLE_PREFERRED;
438*ec779b8eSAndroid Build Coastguard Worker         case media::DeviceRole::DISABLED:
439*ec779b8eSAndroid Build Coastguard Worker             return DEVICE_ROLE_DISABLED;
440*ec779b8eSAndroid Build Coastguard Worker     }
441*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
442*ec779b8eSAndroid Build Coastguard Worker }
443*ec779b8eSAndroid Build Coastguard Worker 
444*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::DeviceRole>
legacy2aidl_device_role_t_DeviceRole(device_role_t legacy)445*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_device_role_t_DeviceRole(device_role_t legacy) {
446*ec779b8eSAndroid Build Coastguard Worker     switch (legacy) {
447*ec779b8eSAndroid Build Coastguard Worker         case DEVICE_ROLE_NONE:
448*ec779b8eSAndroid Build Coastguard Worker             return media::DeviceRole::NONE;
449*ec779b8eSAndroid Build Coastguard Worker         case DEVICE_ROLE_PREFERRED:
450*ec779b8eSAndroid Build Coastguard Worker             return media::DeviceRole::PREFERRED;
451*ec779b8eSAndroid Build Coastguard Worker         case DEVICE_ROLE_DISABLED:
452*ec779b8eSAndroid Build Coastguard Worker             return media::DeviceRole::DISABLED;
453*ec779b8eSAndroid Build Coastguard Worker     }
454*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
455*ec779b8eSAndroid Build Coastguard Worker }
456*ec779b8eSAndroid Build Coastguard Worker 
457*ec779b8eSAndroid Build Coastguard Worker ConversionResult<audio_offload_mode_t>
aidl2legacy_AudioOffloadMode_audio_offload_mode_t(media::AudioOffloadMode aidl)458*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioOffloadMode_audio_offload_mode_t(media::AudioOffloadMode aidl) {
459*ec779b8eSAndroid Build Coastguard Worker     switch (aidl) {
460*ec779b8eSAndroid Build Coastguard Worker         case media::AudioOffloadMode::NOT_SUPPORTED:
461*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_OFFLOAD_NOT_SUPPORTED;
462*ec779b8eSAndroid Build Coastguard Worker         case media::AudioOffloadMode::SUPPORTED:
463*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_OFFLOAD_SUPPORTED;
464*ec779b8eSAndroid Build Coastguard Worker         case media::AudioOffloadMode::GAPLESS_SUPPORTED:
465*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_OFFLOAD_GAPLESS_SUPPORTED;
466*ec779b8eSAndroid Build Coastguard Worker     }
467*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
468*ec779b8eSAndroid Build Coastguard Worker }
469*ec779b8eSAndroid Build Coastguard Worker 
470*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::AudioOffloadMode>
legacy2aidl_audio_offload_mode_t_AudioOffloadMode(audio_offload_mode_t legacy)471*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_audio_offload_mode_t_AudioOffloadMode(audio_offload_mode_t legacy) {
472*ec779b8eSAndroid Build Coastguard Worker     switch (legacy) {
473*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_OFFLOAD_NOT_SUPPORTED:
474*ec779b8eSAndroid Build Coastguard Worker             return media::AudioOffloadMode::NOT_SUPPORTED;
475*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_OFFLOAD_SUPPORTED:
476*ec779b8eSAndroid Build Coastguard Worker             return media::AudioOffloadMode::SUPPORTED;
477*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_OFFLOAD_GAPLESS_SUPPORTED:
478*ec779b8eSAndroid Build Coastguard Worker             return media::AudioOffloadMode::GAPLESS_SUPPORTED;
479*ec779b8eSAndroid Build Coastguard Worker     }
480*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
481*ec779b8eSAndroid Build Coastguard Worker }
482*ec779b8eSAndroid Build Coastguard Worker 
483*ec779b8eSAndroid Build Coastguard Worker ConversionResult<audio_mixer_behavior_t>
aidl2legacy_AudioMixerBehavior_audio_mixer_behavior_t(media::AudioMixerBehavior aidl)484*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioMixerBehavior_audio_mixer_behavior_t(media::AudioMixerBehavior aidl) {
485*ec779b8eSAndroid Build Coastguard Worker     switch (aidl) {
486*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixerBehavior::DEFAULT:
487*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_MIXER_BEHAVIOR_DEFAULT;
488*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixerBehavior::BIT_PERFECT:
489*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_MIXER_BEHAVIOR_BIT_PERFECT;
490*ec779b8eSAndroid Build Coastguard Worker         case media::AudioMixerBehavior::INVALID:
491*ec779b8eSAndroid Build Coastguard Worker             return AUDIO_MIXER_BEHAVIOR_INVALID;
492*ec779b8eSAndroid Build Coastguard Worker     }
493*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
494*ec779b8eSAndroid Build Coastguard Worker }
495*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::AudioMixerBehavior>
legacy2aidl_audio_mixer_behavior_t_AudioMixerBehavior(audio_mixer_behavior_t legacy)496*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_audio_mixer_behavior_t_AudioMixerBehavior(audio_mixer_behavior_t legacy) {
497*ec779b8eSAndroid Build Coastguard Worker     switch (legacy) {
498*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_MIXER_BEHAVIOR_DEFAULT:
499*ec779b8eSAndroid Build Coastguard Worker             return media::AudioMixerBehavior::DEFAULT;
500*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_MIXER_BEHAVIOR_BIT_PERFECT:
501*ec779b8eSAndroid Build Coastguard Worker             return media::AudioMixerBehavior::BIT_PERFECT;
502*ec779b8eSAndroid Build Coastguard Worker         case AUDIO_MIXER_BEHAVIOR_INVALID:
503*ec779b8eSAndroid Build Coastguard Worker             return media::AudioMixerBehavior::INVALID;
504*ec779b8eSAndroid Build Coastguard Worker     }
505*ec779b8eSAndroid Build Coastguard Worker     return unexpected(BAD_VALUE);
506*ec779b8eSAndroid Build Coastguard Worker }
507*ec779b8eSAndroid Build Coastguard Worker 
508*ec779b8eSAndroid Build Coastguard Worker ConversionResult<audio_mixer_attributes_t>
aidl2legacy_AudioMixerAttributesInternal_audio_mixer_attributes_t(const media::AudioMixerAttributesInternal & aidl)509*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_AudioMixerAttributesInternal_audio_mixer_attributes_t(
510*ec779b8eSAndroid Build Coastguard Worker         const media::AudioMixerAttributesInternal& aidl) {
511*ec779b8eSAndroid Build Coastguard Worker     audio_mixer_attributes_t legacy = AUDIO_MIXER_ATTRIBUTES_INITIALIZER;
512*ec779b8eSAndroid Build Coastguard Worker     legacy.config = VALUE_OR_RETURN(
513*ec779b8eSAndroid Build Coastguard Worker             aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config, false /*isInput*/));
514*ec779b8eSAndroid Build Coastguard Worker     legacy.mixer_behavior = VALUE_OR_RETURN(
515*ec779b8eSAndroid Build Coastguard Worker             aidl2legacy_AudioMixerBehavior_audio_mixer_behavior_t(aidl.mixerBehavior));
516*ec779b8eSAndroid Build Coastguard Worker     return legacy;
517*ec779b8eSAndroid Build Coastguard Worker }
518*ec779b8eSAndroid Build Coastguard Worker ConversionResult<media::AudioMixerAttributesInternal>
legacy2aidl_audio_mixer_attributes_t_AudioMixerAttributesInternal(const audio_mixer_attributes & legacy)519*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_audio_mixer_attributes_t_AudioMixerAttributesInternal(
520*ec779b8eSAndroid Build Coastguard Worker         const audio_mixer_attributes& legacy) {
521*ec779b8eSAndroid Build Coastguard Worker     media::AudioMixerAttributesInternal aidl;
522*ec779b8eSAndroid Build Coastguard Worker     aidl.config = VALUE_OR_RETURN(
523*ec779b8eSAndroid Build Coastguard Worker             legacy2aidl_audio_config_base_t_AudioConfigBase(legacy.config, false /*isInput*/));
524*ec779b8eSAndroid Build Coastguard Worker     aidl.mixerBehavior = VALUE_OR_RETURN(
525*ec779b8eSAndroid Build Coastguard Worker             legacy2aidl_audio_mixer_behavior_t_AudioMixerBehavior(legacy.mixer_behavior));
526*ec779b8eSAndroid Build Coastguard Worker     return aidl;
527*ec779b8eSAndroid Build Coastguard Worker }
528*ec779b8eSAndroid Build Coastguard Worker 
529*ec779b8eSAndroid Build Coastguard Worker 
530*ec779b8eSAndroid Build Coastguard Worker }  // namespace android
531