1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker * Copyright (C) 2023 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 #include <cstdint>
18*ec779b8eSAndroid Build Coastguard Worker #include <inttypes.h>
19*ec779b8eSAndroid Build Coastguard Worker #include <utility>
20*ec779b8eSAndroid Build Coastguard Worker
21*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "AidlConversionEffect"
22*ec779b8eSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
23*ec779b8eSAndroid Build Coastguard Worker #include <utils/Log.h>
24*ec779b8eSAndroid Build Coastguard Worker
25*ec779b8eSAndroid Build Coastguard Worker #include <aidl/android/hardware/audio/effect/DefaultExtension.h>
26*ec779b8eSAndroid Build Coastguard Worker #include <aidl/android/hardware/audio/effect/VendorExtension.h>
27*ec779b8eSAndroid Build Coastguard Worker #include <media/AidlConversionCppNdk.h>
28*ec779b8eSAndroid Build Coastguard Worker #include <media/AidlConversionEffect.h>
29*ec779b8eSAndroid Build Coastguard Worker
30*ec779b8eSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////////////////////////
31*ec779b8eSAndroid Build Coastguard Worker // AIDL NDK backend to legacy audio data structure conversion utilities.
32*ec779b8eSAndroid Build Coastguard Worker
33*ec779b8eSAndroid Build Coastguard Worker namespace aidl {
34*ec779b8eSAndroid Build Coastguard Worker namespace android {
35*ec779b8eSAndroid Build Coastguard Worker
36*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::audio::effect::AcousticEchoCanceler;
37*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::audio::effect::AutomaticGainControlV2;
38*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::audio::effect::BassBoost;
39*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::audio::effect::DefaultExtension;
40*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::audio::effect::Descriptor;
41*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::audio::effect::Downmix;
42*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::audio::effect::DynamicsProcessing;
43*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::audio::effect::Flags;
44*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::audio::effect::Parameter;
45*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::audio::effect::PresetReverb;
46*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::audio::effect::VendorExtension;
47*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::hardware::audio::effect::Visualizer;
48*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::media::audio::common::AudioDeviceDescription;
49*ec779b8eSAndroid Build Coastguard Worker
50*ec779b8eSAndroid Build Coastguard Worker using ::android::BAD_VALUE;
51*ec779b8eSAndroid Build Coastguard Worker using ::android::OK;
52*ec779b8eSAndroid Build Coastguard Worker using ::android::status_t;
53*ec779b8eSAndroid Build Coastguard Worker using ::android::base::unexpected;
54*ec779b8eSAndroid Build Coastguard Worker using ::android::effect::utils::EffectParamReader;
55*ec779b8eSAndroid Build Coastguard Worker using ::android::effect::utils::EffectParamWrapper;
56*ec779b8eSAndroid Build Coastguard Worker using ::android::effect::utils::EffectParamWriter;
57*ec779b8eSAndroid Build Coastguard Worker
58*ec779b8eSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////////////////////////
59*ec779b8eSAndroid Build Coastguard Worker // Converters
60*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Flags_Type_uint32(Flags::Type type)61*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t> aidl2legacy_Flags_Type_uint32(Flags::Type type) {
62*ec779b8eSAndroid Build Coastguard Worker switch (type) {
63*ec779b8eSAndroid Build Coastguard Worker case Flags::Type::INSERT:
64*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_TYPE_INSERT;
65*ec779b8eSAndroid Build Coastguard Worker case Flags::Type::AUXILIARY:
66*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_TYPE_AUXILIARY;
67*ec779b8eSAndroid Build Coastguard Worker case Flags::Type::REPLACE:
68*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_TYPE_REPLACE;
69*ec779b8eSAndroid Build Coastguard Worker case Flags::Type::PRE_PROC:
70*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_TYPE_PRE_PROC;
71*ec779b8eSAndroid Build Coastguard Worker case Flags::Type::POST_PROC:
72*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_TYPE_POST_PROC;
73*ec779b8eSAndroid Build Coastguard Worker }
74*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
75*ec779b8eSAndroid Build Coastguard Worker }
76*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_uint32_Flags_Type(uint32_t legacy)77*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Flags::Type> legacy2aidl_uint32_Flags_Type(uint32_t legacy) {
78*ec779b8eSAndroid Build Coastguard Worker switch (legacy & EFFECT_FLAG_TYPE_MASK) {
79*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_TYPE_INSERT:
80*ec779b8eSAndroid Build Coastguard Worker return Flags::Type::INSERT;
81*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_TYPE_AUXILIARY:
82*ec779b8eSAndroid Build Coastguard Worker return Flags::Type::AUXILIARY;
83*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_TYPE_REPLACE:
84*ec779b8eSAndroid Build Coastguard Worker return Flags::Type::REPLACE;
85*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_TYPE_PRE_PROC:
86*ec779b8eSAndroid Build Coastguard Worker return Flags::Type::PRE_PROC;
87*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_TYPE_POST_PROC:
88*ec779b8eSAndroid Build Coastguard Worker return Flags::Type::POST_PROC;
89*ec779b8eSAndroid Build Coastguard Worker }
90*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
91*ec779b8eSAndroid Build Coastguard Worker }
92*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Flags_Insert_uint32(Flags::Insert insert)93*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t> aidl2legacy_Flags_Insert_uint32(Flags::Insert insert) {
94*ec779b8eSAndroid Build Coastguard Worker switch (insert) {
95*ec779b8eSAndroid Build Coastguard Worker case Flags::Insert::ANY:
96*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_INSERT_ANY;
97*ec779b8eSAndroid Build Coastguard Worker case Flags::Insert::FIRST:
98*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_INSERT_FIRST;
99*ec779b8eSAndroid Build Coastguard Worker case Flags::Insert::LAST:
100*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_INSERT_LAST;
101*ec779b8eSAndroid Build Coastguard Worker case Flags::Insert::EXCLUSIVE:
102*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_INSERT_EXCLUSIVE;
103*ec779b8eSAndroid Build Coastguard Worker }
104*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
105*ec779b8eSAndroid Build Coastguard Worker }
106*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_uint32_Flags_Insert(uint32_t legacy)107*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Flags::Insert> legacy2aidl_uint32_Flags_Insert(uint32_t legacy) {
108*ec779b8eSAndroid Build Coastguard Worker switch (legacy & EFFECT_FLAG_INSERT_MASK) {
109*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_INSERT_ANY:
110*ec779b8eSAndroid Build Coastguard Worker return Flags::Insert::ANY;
111*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_INSERT_FIRST:
112*ec779b8eSAndroid Build Coastguard Worker return Flags::Insert::FIRST;
113*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_INSERT_LAST:
114*ec779b8eSAndroid Build Coastguard Worker return Flags::Insert::LAST;
115*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_INSERT_EXCLUSIVE:
116*ec779b8eSAndroid Build Coastguard Worker return Flags::Insert::EXCLUSIVE;
117*ec779b8eSAndroid Build Coastguard Worker }
118*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
119*ec779b8eSAndroid Build Coastguard Worker }
120*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Flags_Volume_uint32(Flags::Volume volume)121*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t> aidl2legacy_Flags_Volume_uint32(Flags::Volume volume) {
122*ec779b8eSAndroid Build Coastguard Worker switch (volume) {
123*ec779b8eSAndroid Build Coastguard Worker case Flags::Volume::NONE:
124*ec779b8eSAndroid Build Coastguard Worker return 0;
125*ec779b8eSAndroid Build Coastguard Worker case Flags::Volume::CTRL:
126*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_VOLUME_CTRL;
127*ec779b8eSAndroid Build Coastguard Worker case Flags::Volume::IND:
128*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_VOLUME_IND;
129*ec779b8eSAndroid Build Coastguard Worker case Flags::Volume::MONITOR:
130*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_VOLUME_MONITOR;
131*ec779b8eSAndroid Build Coastguard Worker }
132*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
133*ec779b8eSAndroid Build Coastguard Worker }
134*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_uint32_Flags_Volume(uint32_t legacy)135*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Flags::Volume> legacy2aidl_uint32_Flags_Volume(uint32_t legacy) {
136*ec779b8eSAndroid Build Coastguard Worker switch (legacy & EFFECT_FLAG_VOLUME_MASK) {
137*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_VOLUME_CTRL:
138*ec779b8eSAndroid Build Coastguard Worker return Flags::Volume::CTRL;
139*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_VOLUME_IND:
140*ec779b8eSAndroid Build Coastguard Worker return Flags::Volume::IND;
141*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_VOLUME_MONITOR:
142*ec779b8eSAndroid Build Coastguard Worker return Flags::Volume::MONITOR;
143*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_VOLUME_NONE:
144*ec779b8eSAndroid Build Coastguard Worker return Flags::Volume::NONE;
145*ec779b8eSAndroid Build Coastguard Worker }
146*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
147*ec779b8eSAndroid Build Coastguard Worker }
148*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Flags_uint32(Flags aidl)149*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t> aidl2legacy_Flags_uint32(Flags aidl) {
150*ec779b8eSAndroid Build Coastguard Worker uint32_t legacy = 0;
151*ec779b8eSAndroid Build Coastguard Worker legacy |= VALUE_OR_RETURN(aidl2legacy_Flags_Type_uint32(aidl.type));
152*ec779b8eSAndroid Build Coastguard Worker legacy |= VALUE_OR_RETURN(aidl2legacy_Flags_Insert_uint32(aidl.insert));
153*ec779b8eSAndroid Build Coastguard Worker legacy |= VALUE_OR_RETURN(aidl2legacy_Flags_Volume_uint32(aidl.volume));
154*ec779b8eSAndroid Build Coastguard Worker legacy |= VALUE_OR_RETURN(aidl2legacy_Flags_HardwareAccelerator_uint32(aidl.hwAcceleratorMode));
155*ec779b8eSAndroid Build Coastguard Worker
156*ec779b8eSAndroid Build Coastguard Worker if (aidl.offloadIndication) {
157*ec779b8eSAndroid Build Coastguard Worker legacy |= EFFECT_FLAG_OFFLOAD_SUPPORTED;
158*ec779b8eSAndroid Build Coastguard Worker }
159*ec779b8eSAndroid Build Coastguard Worker if (aidl.deviceIndication) {
160*ec779b8eSAndroid Build Coastguard Worker legacy |= EFFECT_FLAG_DEVICE_IND;
161*ec779b8eSAndroid Build Coastguard Worker }
162*ec779b8eSAndroid Build Coastguard Worker if (aidl.audioModeIndication) {
163*ec779b8eSAndroid Build Coastguard Worker legacy |= EFFECT_FLAG_AUDIO_MODE_IND;
164*ec779b8eSAndroid Build Coastguard Worker }
165*ec779b8eSAndroid Build Coastguard Worker if (aidl.audioSourceIndication) {
166*ec779b8eSAndroid Build Coastguard Worker legacy |= EFFECT_FLAG_AUDIO_SOURCE_IND;
167*ec779b8eSAndroid Build Coastguard Worker }
168*ec779b8eSAndroid Build Coastguard Worker if (aidl.bypass) {
169*ec779b8eSAndroid Build Coastguard Worker legacy |= EFFECT_FLAG_NO_PROCESS;
170*ec779b8eSAndroid Build Coastguard Worker }
171*ec779b8eSAndroid Build Coastguard Worker return legacy;
172*ec779b8eSAndroid Build Coastguard Worker }
173*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_uint32_Flags(uint32_t legacy)174*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Flags> legacy2aidl_uint32_Flags(uint32_t legacy) {
175*ec779b8eSAndroid Build Coastguard Worker Flags aidl;
176*ec779b8eSAndroid Build Coastguard Worker
177*ec779b8eSAndroid Build Coastguard Worker aidl.type = VALUE_OR_RETURN(legacy2aidl_uint32_Flags_Type(legacy));
178*ec779b8eSAndroid Build Coastguard Worker aidl.insert = VALUE_OR_RETURN(legacy2aidl_uint32_Flags_Insert(legacy));
179*ec779b8eSAndroid Build Coastguard Worker aidl.volume = VALUE_OR_RETURN(legacy2aidl_uint32_Flags_Volume(legacy));
180*ec779b8eSAndroid Build Coastguard Worker aidl.hwAcceleratorMode = VALUE_OR_RETURN(legacy2aidl_uint32_Flags_HardwareAccelerator(legacy));
181*ec779b8eSAndroid Build Coastguard Worker aidl.offloadIndication = (legacy & EFFECT_FLAG_OFFLOAD_SUPPORTED);
182*ec779b8eSAndroid Build Coastguard Worker aidl.deviceIndication = (legacy & EFFECT_FLAG_DEVICE_IND);
183*ec779b8eSAndroid Build Coastguard Worker aidl.audioModeIndication = (legacy & EFFECT_FLAG_AUDIO_MODE_IND);
184*ec779b8eSAndroid Build Coastguard Worker aidl.audioSourceIndication = (legacy & EFFECT_FLAG_AUDIO_SOURCE_IND);
185*ec779b8eSAndroid Build Coastguard Worker aidl.bypass = (legacy & EFFECT_FLAG_NO_PROCESS);
186*ec779b8eSAndroid Build Coastguard Worker return aidl;
187*ec779b8eSAndroid Build Coastguard Worker }
188*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Flags_HardwareAccelerator_uint32(Flags::HardwareAccelerator hwAcceleratorMode)189*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t> aidl2legacy_Flags_HardwareAccelerator_uint32(
190*ec779b8eSAndroid Build Coastguard Worker Flags::HardwareAccelerator hwAcceleratorMode) {
191*ec779b8eSAndroid Build Coastguard Worker switch (hwAcceleratorMode) {
192*ec779b8eSAndroid Build Coastguard Worker case Flags::HardwareAccelerator::NONE:
193*ec779b8eSAndroid Build Coastguard Worker return 0;
194*ec779b8eSAndroid Build Coastguard Worker case Flags::HardwareAccelerator::SIMPLE:
195*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_HW_ACC_SIMPLE;
196*ec779b8eSAndroid Build Coastguard Worker case Flags::HardwareAccelerator::TUNNEL:
197*ec779b8eSAndroid Build Coastguard Worker return EFFECT_FLAG_HW_ACC_TUNNEL;
198*ec779b8eSAndroid Build Coastguard Worker }
199*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
200*ec779b8eSAndroid Build Coastguard Worker }
201*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_uint32_Flags_HardwareAccelerator(uint32_t legacy)202*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Flags::HardwareAccelerator> legacy2aidl_uint32_Flags_HardwareAccelerator(
203*ec779b8eSAndroid Build Coastguard Worker uint32_t legacy) {
204*ec779b8eSAndroid Build Coastguard Worker switch (legacy & EFFECT_FLAG_HW_ACC_MASK) {
205*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_HW_ACC_SIMPLE:
206*ec779b8eSAndroid Build Coastguard Worker return Flags::HardwareAccelerator::SIMPLE;
207*ec779b8eSAndroid Build Coastguard Worker case EFFECT_FLAG_HW_ACC_TUNNEL:
208*ec779b8eSAndroid Build Coastguard Worker return Flags::HardwareAccelerator::TUNNEL;
209*ec779b8eSAndroid Build Coastguard Worker case 0:
210*ec779b8eSAndroid Build Coastguard Worker return Flags::HardwareAccelerator::NONE;
211*ec779b8eSAndroid Build Coastguard Worker }
212*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
213*ec779b8eSAndroid Build Coastguard Worker }
214*ec779b8eSAndroid Build Coastguard Worker
215*ec779b8eSAndroid Build Coastguard Worker ConversionResult<effect_descriptor_t>
aidl2legacy_Descriptor_effect_descriptor(const Descriptor & aidl)216*ec779b8eSAndroid Build Coastguard Worker aidl2legacy_Descriptor_effect_descriptor(const Descriptor& aidl) {
217*ec779b8eSAndroid Build Coastguard Worker effect_descriptor_t legacy;
218*ec779b8eSAndroid Build Coastguard Worker legacy.type = VALUE_OR_RETURN(aidl2legacy_AudioUuid_audio_uuid_t(aidl.common.id.type));
219*ec779b8eSAndroid Build Coastguard Worker legacy.uuid = VALUE_OR_RETURN(aidl2legacy_AudioUuid_audio_uuid_t(aidl.common.id.uuid));
220*ec779b8eSAndroid Build Coastguard Worker // legacy descriptor doesn't have proxy information
221*ec779b8eSAndroid Build Coastguard Worker // proxy = VALUE_OR_RETURN(aidl2legacy_AudioUuid_audio_uuid_t(aidl.proxy));
222*ec779b8eSAndroid Build Coastguard Worker legacy.apiVersion = EFFECT_CONTROL_API_VERSION;
223*ec779b8eSAndroid Build Coastguard Worker legacy.flags = VALUE_OR_RETURN(aidl2legacy_Flags_uint32(aidl.common.flags));
224*ec779b8eSAndroid Build Coastguard Worker legacy.cpuLoad = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.common.cpuLoad));
225*ec779b8eSAndroid Build Coastguard Worker legacy.memoryUsage = VALUE_OR_RETURN(convertIntegral<uint16_t>(aidl.common.memoryUsage));
226*ec779b8eSAndroid Build Coastguard Worker RETURN_IF_ERROR(aidl2legacy_string(aidl.common.name, legacy.name, sizeof(legacy.name)));
227*ec779b8eSAndroid Build Coastguard Worker RETURN_IF_ERROR(aidl2legacy_string(aidl.common.implementor, legacy.implementor,
228*ec779b8eSAndroid Build Coastguard Worker sizeof(legacy.implementor)));
229*ec779b8eSAndroid Build Coastguard Worker return legacy;
230*ec779b8eSAndroid Build Coastguard Worker }
231*ec779b8eSAndroid Build Coastguard Worker
232*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Descriptor>
legacy2aidl_effect_descriptor_Descriptor(const effect_descriptor_t & legacy)233*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_effect_descriptor_Descriptor(const effect_descriptor_t& legacy) {
234*ec779b8eSAndroid Build Coastguard Worker Descriptor aidl;
235*ec779b8eSAndroid Build Coastguard Worker aidl.common.id.type = VALUE_OR_RETURN(legacy2aidl_audio_uuid_t_AudioUuid(legacy.type));
236*ec779b8eSAndroid Build Coastguard Worker aidl.common.id.uuid = VALUE_OR_RETURN(legacy2aidl_audio_uuid_t_AudioUuid(legacy.uuid));
237*ec779b8eSAndroid Build Coastguard Worker // legacy descriptor doesn't have proxy information
238*ec779b8eSAndroid Build Coastguard Worker // aidl.common.id.proxy
239*ec779b8eSAndroid Build Coastguard Worker aidl.common.flags = VALUE_OR_RETURN(legacy2aidl_uint32_Flags(legacy.flags));
240*ec779b8eSAndroid Build Coastguard Worker aidl.common.cpuLoad = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.cpuLoad));
241*ec779b8eSAndroid Build Coastguard Worker aidl.common.memoryUsage = VALUE_OR_RETURN(convertIntegral<int32_t>(legacy.memoryUsage));
242*ec779b8eSAndroid Build Coastguard Worker aidl.common.name = VALUE_OR_RETURN(legacy2aidl_string(legacy.name, sizeof(legacy.name)));
243*ec779b8eSAndroid Build Coastguard Worker aidl.common.implementor =
244*ec779b8eSAndroid Build Coastguard Worker VALUE_OR_RETURN(legacy2aidl_string(legacy.implementor, sizeof(legacy.implementor)));
245*ec779b8eSAndroid Build Coastguard Worker return aidl;
246*ec779b8eSAndroid Build Coastguard Worker }
247*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Parameter_aec_uint32_echoDelay(const Parameter & aidl)248*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t> aidl2legacy_Parameter_aec_uint32_echoDelay(const Parameter& aidl) {
249*ec779b8eSAndroid Build Coastguard Worker int echoDelay = VALUE_OR_RETURN(
250*ec779b8eSAndroid Build Coastguard Worker GET_PARAMETER_SPECIFIC_FIELD(aidl, AcousticEchoCanceler, acousticEchoCanceler,
251*ec779b8eSAndroid Build Coastguard Worker AcousticEchoCanceler::echoDelayUs, int));
252*ec779b8eSAndroid Build Coastguard Worker return VALUE_OR_RETURN(convertReinterpret<uint32_t>(echoDelay));
253*ec779b8eSAndroid Build Coastguard Worker }
254*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_uint32_echoDelay_Parameter_aec(uint32_t legacy)255*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Parameter> legacy2aidl_uint32_echoDelay_Parameter_aec(uint32_t legacy) {
256*ec779b8eSAndroid Build Coastguard Worker int delay = VALUE_OR_RETURN(convertReinterpret<int32_t>(legacy));
257*ec779b8eSAndroid Build Coastguard Worker return MAKE_SPECIFIC_PARAMETER(AcousticEchoCanceler, acousticEchoCanceler, echoDelayUs, delay);
258*ec779b8eSAndroid Build Coastguard Worker }
259*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Parameter_aec_uint32_mobileMode(const Parameter & aidl)260*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t> aidl2legacy_Parameter_aec_uint32_mobileMode(const Parameter& aidl) {
261*ec779b8eSAndroid Build Coastguard Worker bool mobileMode = VALUE_OR_RETURN(
262*ec779b8eSAndroid Build Coastguard Worker GET_PARAMETER_SPECIFIC_FIELD(aidl, AcousticEchoCanceler, acousticEchoCanceler,
263*ec779b8eSAndroid Build Coastguard Worker AcousticEchoCanceler::mobileMode, bool));
264*ec779b8eSAndroid Build Coastguard Worker return VALUE_OR_RETURN(convertIntegral<uint32_t>(mobileMode));
265*ec779b8eSAndroid Build Coastguard Worker }
266*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_uint32_mobileMode_Parameter_aec(uint32_t legacy)267*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Parameter> legacy2aidl_uint32_mobileMode_Parameter_aec(uint32_t legacy) {
268*ec779b8eSAndroid Build Coastguard Worker bool mode = VALUE_OR_RETURN(convertIntegral<bool>(legacy));
269*ec779b8eSAndroid Build Coastguard Worker return MAKE_SPECIFIC_PARAMETER(AcousticEchoCanceler, acousticEchoCanceler, mobileMode, mode);
270*ec779b8eSAndroid Build Coastguard Worker }
271*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Parameter_agc_uint32_fixedDigitalGain(const Parameter & aidl)272*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t> aidl2legacy_Parameter_agc_uint32_fixedDigitalGain(
273*ec779b8eSAndroid Build Coastguard Worker const Parameter& aidl) {
274*ec779b8eSAndroid Build Coastguard Worker int gain = VALUE_OR_RETURN(
275*ec779b8eSAndroid Build Coastguard Worker GET_PARAMETER_SPECIFIC_FIELD(aidl, AutomaticGainControlV2, automaticGainControlV2,
276*ec779b8eSAndroid Build Coastguard Worker AutomaticGainControlV2::fixedDigitalGainMb, int));
277*ec779b8eSAndroid Build Coastguard Worker return VALUE_OR_RETURN(convertReinterpret<uint32_t>(gain));
278*ec779b8eSAndroid Build Coastguard Worker }
279*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_uint32_fixedDigitalGain_Parameter_agc(uint32_t legacy)280*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Parameter> legacy2aidl_uint32_fixedDigitalGain_Parameter_agc(uint32_t legacy) {
281*ec779b8eSAndroid Build Coastguard Worker int gain = VALUE_OR_RETURN(convertReinterpret<int>(legacy));
282*ec779b8eSAndroid Build Coastguard Worker return MAKE_SPECIFIC_PARAMETER(AutomaticGainControlV2, automaticGainControlV2,
283*ec779b8eSAndroid Build Coastguard Worker fixedDigitalGainMb, gain);
284*ec779b8eSAndroid Build Coastguard Worker }
285*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Parameter_agc_uint32_levelEstimator(const Parameter & aidl)286*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t> aidl2legacy_Parameter_agc_uint32_levelEstimator(
287*ec779b8eSAndroid Build Coastguard Worker const Parameter& aidl) {
288*ec779b8eSAndroid Build Coastguard Worker const auto& le = VALUE_OR_RETURN(GET_PARAMETER_SPECIFIC_FIELD(
289*ec779b8eSAndroid Build Coastguard Worker aidl, AutomaticGainControlV2, automaticGainControlV2,
290*ec779b8eSAndroid Build Coastguard Worker AutomaticGainControlV2::levelEstimator, AutomaticGainControlV2::LevelEstimator));
291*ec779b8eSAndroid Build Coastguard Worker return static_cast<uint32_t>(le);
292*ec779b8eSAndroid Build Coastguard Worker }
293*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_uint32_levelEstimator_Parameter_agc(uint32_t legacy)294*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Parameter> legacy2aidl_uint32_levelEstimator_Parameter_agc(uint32_t legacy) {
295*ec779b8eSAndroid Build Coastguard Worker if (legacy > (uint32_t)AutomaticGainControlV2::LevelEstimator::PEAK) {
296*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
297*ec779b8eSAndroid Build Coastguard Worker }
298*ec779b8eSAndroid Build Coastguard Worker AutomaticGainControlV2::LevelEstimator le =
299*ec779b8eSAndroid Build Coastguard Worker static_cast<AutomaticGainControlV2::LevelEstimator>(legacy);
300*ec779b8eSAndroid Build Coastguard Worker return MAKE_SPECIFIC_PARAMETER(AutomaticGainControlV2, automaticGainControlV2, levelEstimator,
301*ec779b8eSAndroid Build Coastguard Worker le);
302*ec779b8eSAndroid Build Coastguard Worker }
303*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Parameter_agc_uint32_saturationMargin(const Parameter & aidl)304*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t> aidl2legacy_Parameter_agc_uint32_saturationMargin(
305*ec779b8eSAndroid Build Coastguard Worker const Parameter& aidl) {
306*ec779b8eSAndroid Build Coastguard Worker int saturationMargin = VALUE_OR_RETURN(
307*ec779b8eSAndroid Build Coastguard Worker GET_PARAMETER_SPECIFIC_FIELD(aidl, AutomaticGainControlV2, automaticGainControlV2,
308*ec779b8eSAndroid Build Coastguard Worker AutomaticGainControlV2::saturationMarginMb, int));
309*ec779b8eSAndroid Build Coastguard Worker return VALUE_OR_RETURN(convertIntegral<uint32_t>(saturationMargin));
310*ec779b8eSAndroid Build Coastguard Worker }
311*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_uint32_saturationMargin_Parameter_agc(uint32_t legacy)312*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Parameter> legacy2aidl_uint32_saturationMargin_Parameter_agc(uint32_t legacy) {
313*ec779b8eSAndroid Build Coastguard Worker int saturationMargin = VALUE_OR_RETURN(convertIntegral<int>(legacy));
314*ec779b8eSAndroid Build Coastguard Worker return MAKE_SPECIFIC_PARAMETER(AutomaticGainControlV2, automaticGainControlV2,
315*ec779b8eSAndroid Build Coastguard Worker saturationMarginMb, saturationMargin);
316*ec779b8eSAndroid Build Coastguard Worker }
317*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Parameter_BassBoost_uint16_strengthPm(const Parameter & aidl)318*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint16_t> aidl2legacy_Parameter_BassBoost_uint16_strengthPm(
319*ec779b8eSAndroid Build Coastguard Worker const Parameter& aidl) {
320*ec779b8eSAndroid Build Coastguard Worker int strength = VALUE_OR_RETURN(
321*ec779b8eSAndroid Build Coastguard Worker GET_PARAMETER_SPECIFIC_FIELD(aidl, BassBoost, bassBoost, BassBoost::strengthPm, int));
322*ec779b8eSAndroid Build Coastguard Worker return VALUE_OR_RETURN(convertIntegral<uint16_t>(strength));
323*ec779b8eSAndroid Build Coastguard Worker }
324*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_uint16_strengthPm_Parameter_BassBoost(uint16_t legacy)325*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Parameter> legacy2aidl_uint16_strengthPm_Parameter_BassBoost(uint16_t legacy) {
326*ec779b8eSAndroid Build Coastguard Worker int strength = VALUE_OR_RETURN(convertIntegral<int>(legacy));
327*ec779b8eSAndroid Build Coastguard Worker return MAKE_SPECIFIC_PARAMETER(BassBoost, bassBoost, strengthPm, strength);
328*ec779b8eSAndroid Build Coastguard Worker }
329*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Parameter_Downmix_int16_type(const Parameter & aidl)330*ec779b8eSAndroid Build Coastguard Worker ConversionResult<int16_t> aidl2legacy_Parameter_Downmix_int16_type(const Parameter& aidl) {
331*ec779b8eSAndroid Build Coastguard Worker Downmix::Type aidlType = VALUE_OR_RETURN(
332*ec779b8eSAndroid Build Coastguard Worker GET_PARAMETER_SPECIFIC_FIELD(aidl, Downmix, downmix, Downmix::type, Downmix::Type));
333*ec779b8eSAndroid Build Coastguard Worker return VALUE_OR_RETURN(convertIntegral<int16_t>(static_cast<uint32_t>(aidlType)));
334*ec779b8eSAndroid Build Coastguard Worker }
335*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_int16_type_Parameter_Downmix(int16_t legacy)336*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Parameter> legacy2aidl_int16_type_Parameter_Downmix(int16_t legacy) {
337*ec779b8eSAndroid Build Coastguard Worker if (legacy > (uint32_t) Downmix::Type::FOLD) {
338*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
339*ec779b8eSAndroid Build Coastguard Worker }
340*ec779b8eSAndroid Build Coastguard Worker Downmix::Type aidlType = static_cast<Downmix::Type>(legacy);
341*ec779b8eSAndroid Build Coastguard Worker return MAKE_SPECIFIC_PARAMETER(Downmix, downmix, type, aidlType);
342*ec779b8eSAndroid Build Coastguard Worker }
343*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_DynamicsProcessing_ResolutionPreference_uint32_(const Parameter & aidl)344*ec779b8eSAndroid Build Coastguard Worker ConversionResult<int16_t> aidl2legacy_DynamicsProcessing_ResolutionPreference_uint32_(
345*ec779b8eSAndroid Build Coastguard Worker const Parameter& aidl) {
346*ec779b8eSAndroid Build Coastguard Worker Downmix::Type aidlType = VALUE_OR_RETURN(
347*ec779b8eSAndroid Build Coastguard Worker GET_PARAMETER_SPECIFIC_FIELD(aidl, Downmix, downmix, Downmix::type, Downmix::Type));
348*ec779b8eSAndroid Build Coastguard Worker return VALUE_OR_RETURN(convertIntegral<int16_t>(static_cast<uint32_t>(aidlType)));
349*ec779b8eSAndroid Build Coastguard Worker }
350*ec779b8eSAndroid Build Coastguard Worker
351*ec779b8eSAndroid Build Coastguard Worker ConversionResult<DynamicsProcessing::ResolutionPreference>
legacy2aidl_int32_DynamicsProcessing_ResolutionPreference(int32_t legacy)352*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_int32_DynamicsProcessing_ResolutionPreference(int32_t legacy) {
353*ec779b8eSAndroid Build Coastguard Worker if (legacy > (int32_t)DynamicsProcessing::ResolutionPreference::FAVOR_TIME_RESOLUTION) {
354*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
355*ec779b8eSAndroid Build Coastguard Worker }
356*ec779b8eSAndroid Build Coastguard Worker return static_cast<DynamicsProcessing::ResolutionPreference>(legacy);
357*ec779b8eSAndroid Build Coastguard Worker }
358*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_DynamicsProcessing_ResolutionPreference_int32(DynamicsProcessing::ResolutionPreference aidl)359*ec779b8eSAndroid Build Coastguard Worker ConversionResult<int32_t> aidl2legacy_DynamicsProcessing_ResolutionPreference_int32(
360*ec779b8eSAndroid Build Coastguard Worker DynamicsProcessing::ResolutionPreference aidl) {
361*ec779b8eSAndroid Build Coastguard Worker return static_cast<int32_t>(aidl);
362*ec779b8eSAndroid Build Coastguard Worker }
363*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Parameter_Visualizer_ScalingMode_uint32(Visualizer::ScalingMode aidl)364*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t> aidl2legacy_Parameter_Visualizer_ScalingMode_uint32(
365*ec779b8eSAndroid Build Coastguard Worker Visualizer::ScalingMode aidl) {
366*ec779b8eSAndroid Build Coastguard Worker switch (aidl) {
367*ec779b8eSAndroid Build Coastguard Worker case Visualizer::ScalingMode::NORMALIZED: {
368*ec779b8eSAndroid Build Coastguard Worker return 0;
369*ec779b8eSAndroid Build Coastguard Worker }
370*ec779b8eSAndroid Build Coastguard Worker case Visualizer::ScalingMode::AS_PLAYED: {
371*ec779b8eSAndroid Build Coastguard Worker return 1;
372*ec779b8eSAndroid Build Coastguard Worker }
373*ec779b8eSAndroid Build Coastguard Worker }
374*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
375*ec779b8eSAndroid Build Coastguard Worker }
376*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_Parameter_Visualizer_uint32_ScalingMode(uint32_t legacy)377*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Visualizer::ScalingMode> legacy2aidl_Parameter_Visualizer_uint32_ScalingMode(
378*ec779b8eSAndroid Build Coastguard Worker uint32_t legacy) {
379*ec779b8eSAndroid Build Coastguard Worker if (legacy == 0) {
380*ec779b8eSAndroid Build Coastguard Worker return Visualizer::ScalingMode::NORMALIZED;
381*ec779b8eSAndroid Build Coastguard Worker } else if (legacy == 1) {
382*ec779b8eSAndroid Build Coastguard Worker return Visualizer::ScalingMode::AS_PLAYED;
383*ec779b8eSAndroid Build Coastguard Worker } else {
384*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
385*ec779b8eSAndroid Build Coastguard Worker }
386*ec779b8eSAndroid Build Coastguard Worker }
387*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Parameter_Visualizer_MeasurementMode_uint32(Visualizer::MeasurementMode aidl)388*ec779b8eSAndroid Build Coastguard Worker ConversionResult<uint32_t> aidl2legacy_Parameter_Visualizer_MeasurementMode_uint32(
389*ec779b8eSAndroid Build Coastguard Worker Visualizer::MeasurementMode aidl) {
390*ec779b8eSAndroid Build Coastguard Worker switch (aidl) {
391*ec779b8eSAndroid Build Coastguard Worker case Visualizer::MeasurementMode::NONE: {
392*ec779b8eSAndroid Build Coastguard Worker return 0;
393*ec779b8eSAndroid Build Coastguard Worker }
394*ec779b8eSAndroid Build Coastguard Worker case Visualizer::MeasurementMode::PEAK_RMS: {
395*ec779b8eSAndroid Build Coastguard Worker return 1;
396*ec779b8eSAndroid Build Coastguard Worker }
397*ec779b8eSAndroid Build Coastguard Worker }
398*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
399*ec779b8eSAndroid Build Coastguard Worker }
400*ec779b8eSAndroid Build Coastguard Worker
401*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Visualizer::MeasurementMode>
legacy2aidl_Parameter_Visualizer_uint32_MeasurementMode(uint32_t legacy)402*ec779b8eSAndroid Build Coastguard Worker legacy2aidl_Parameter_Visualizer_uint32_MeasurementMode(uint32_t legacy) {
403*ec779b8eSAndroid Build Coastguard Worker if (legacy == 0) {
404*ec779b8eSAndroid Build Coastguard Worker return Visualizer::MeasurementMode::NONE;
405*ec779b8eSAndroid Build Coastguard Worker } else if (legacy == 1) {
406*ec779b8eSAndroid Build Coastguard Worker return Visualizer::MeasurementMode::PEAK_RMS;
407*ec779b8eSAndroid Build Coastguard Worker } else {
408*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
409*ec779b8eSAndroid Build Coastguard Worker }
410*ec779b8eSAndroid Build Coastguard Worker }
411*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_VendorExtension_EffectParameterWriter(EffectParamWriter & param,VendorExtension ext)412*ec779b8eSAndroid Build Coastguard Worker ConversionResult<status_t> aidl2legacy_VendorExtension_EffectParameterWriter(
413*ec779b8eSAndroid Build Coastguard Worker EffectParamWriter& param, VendorExtension ext) {
414*ec779b8eSAndroid Build Coastguard Worker std::optional<DefaultExtension> defaultExt;
415*ec779b8eSAndroid Build Coastguard Worker RETURN_IF_ERROR(ext.extension.getParcelable(&defaultExt));
416*ec779b8eSAndroid Build Coastguard Worker if (!defaultExt.has_value()) {
417*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
418*ec779b8eSAndroid Build Coastguard Worker }
419*ec779b8eSAndroid Build Coastguard Worker
420*ec779b8eSAndroid Build Coastguard Worker // DefaultExtension defaultValue = defaultExt->get();
421*ec779b8eSAndroid Build Coastguard Worker if (defaultExt->bytes.size() < sizeof(effect_param_t)) {
422*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
423*ec779b8eSAndroid Build Coastguard Worker }
424*ec779b8eSAndroid Build Coastguard Worker // verify data length with EffectParamWrapper, DefaultExtension array size should not smaller
425*ec779b8eSAndroid Build Coastguard Worker // than (sizeof(effect_param_t) + paddedPSize + vSize)
426*ec779b8eSAndroid Build Coastguard Worker EffectParamWrapper wrapper(*(effect_param_t*)defaultExt->bytes.data());
427*ec779b8eSAndroid Build Coastguard Worker if (sizeof(effect_param_t) + wrapper.getPaddedParameterSize() + wrapper.getValueSize() >
428*ec779b8eSAndroid Build Coastguard Worker defaultExt->bytes.size()) {
429*ec779b8eSAndroid Build Coastguard Worker return unexpected(BAD_VALUE);
430*ec779b8eSAndroid Build Coastguard Worker }
431*ec779b8eSAndroid Build Coastguard Worker
432*ec779b8eSAndroid Build Coastguard Worker RETURN_IF_ERROR(param.overwrite(wrapper.getEffectParam()));
433*ec779b8eSAndroid Build Coastguard Worker return OK;
434*ec779b8eSAndroid Build Coastguard Worker }
435*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_EffectParameterReader_VendorExtension(EffectParamReader & param)436*ec779b8eSAndroid Build Coastguard Worker ConversionResult<VendorExtension> legacy2aidl_EffectParameterReader_VendorExtension(
437*ec779b8eSAndroid Build Coastguard Worker EffectParamReader& param) {
438*ec779b8eSAndroid Build Coastguard Worker size_t len = param.getTotalSize();
439*ec779b8eSAndroid Build Coastguard Worker DefaultExtension defaultExt;
440*ec779b8eSAndroid Build Coastguard Worker defaultExt.bytes.resize(len);
441*ec779b8eSAndroid Build Coastguard Worker
442*ec779b8eSAndroid Build Coastguard Worker std::memcpy(defaultExt.bytes.data(), (void *)¶m.getEffectParam(), len);
443*ec779b8eSAndroid Build Coastguard Worker
444*ec779b8eSAndroid Build Coastguard Worker VendorExtension ext;
445*ec779b8eSAndroid Build Coastguard Worker ext.extension.setParcelable(defaultExt);
446*ec779b8eSAndroid Build Coastguard Worker return ext;
447*ec779b8eSAndroid Build Coastguard Worker }
448*ec779b8eSAndroid Build Coastguard Worker
aidl2legacy_Parameter_EffectParameterWriter(const::aidl::android::hardware::audio::effect::Parameter & aidl,EffectParamWriter & legacy)449*ec779b8eSAndroid Build Coastguard Worker ConversionResult<::android::status_t> aidl2legacy_Parameter_EffectParameterWriter(
450*ec779b8eSAndroid Build Coastguard Worker const ::aidl::android::hardware::audio::effect::Parameter& aidl,
451*ec779b8eSAndroid Build Coastguard Worker EffectParamWriter& legacy) {
452*ec779b8eSAndroid Build Coastguard Worker VendorExtension ext = VALUE_OR_RETURN(
453*ec779b8eSAndroid Build Coastguard Worker (::aidl::android::getParameterSpecific<Parameter, VendorExtension,
454*ec779b8eSAndroid Build Coastguard Worker Parameter::Specific::vendorEffect>(aidl)));
455*ec779b8eSAndroid Build Coastguard Worker return VALUE_OR_RETURN_STATUS(aidl2legacy_VendorExtension_EffectParameterWriter(legacy, ext));
456*ec779b8eSAndroid Build Coastguard Worker }
457*ec779b8eSAndroid Build Coastguard Worker
legacy2aidl_EffectParameterReader_Parameter(EffectParamReader & param)458*ec779b8eSAndroid Build Coastguard Worker ConversionResult<Parameter> legacy2aidl_EffectParameterReader_Parameter(EffectParamReader& param) {
459*ec779b8eSAndroid Build Coastguard Worker VendorExtension ext = VALUE_OR_RETURN(legacy2aidl_EffectParameterReader_VendorExtension(param));
460*ec779b8eSAndroid Build Coastguard Worker return UNION_MAKE(Parameter, specific, UNION_MAKE(Parameter::Specific, vendorEffect, ext));
461*ec779b8eSAndroid Build Coastguard Worker }
462*ec779b8eSAndroid Build Coastguard Worker
463*ec779b8eSAndroid Build Coastguard Worker } // namespace android
464*ec779b8eSAndroid Build Coastguard Worker } // aidl
465