1 /*
2  * Copyright (C) 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 
19 #include <limits>
20 #include <type_traits>
21 
22 #include <system/audio.h>
23 
24 #include <android/media/AudioAttributesInternal.h>
25 #include <android/media/AudioClient.h>
26 #include <android/media/AudioConfig.h>
27 #include <android/media/AudioConfigBase.h>
28 #include <android/media/AudioDualMonoMode.h>
29 #include <android/media/AudioEncapsulationMode.h>
30 #include <android/media/AudioEncapsulationMetadataType.h>
31 #include <android/media/AudioEncapsulationType.h>
32 #include <android/media/AudioFlag.h>
33 #include <android/media/AudioGain.h>
34 #include <android/media/AudioGainMode.h>
35 #include <android/media/AudioInputFlags.h>
36 #include <android/media/AudioIoConfigEvent.h>
37 #include <android/media/AudioIoDescriptor.h>
38 #include <android/media/AudioMixLatencyClass.h>
39 #include <android/media/AudioMode.h>
40 #include <android/media/AudioOutputFlags.h>
41 #include <android/media/AudioPlaybackRate.h>
42 #include <android/media/AudioPort.h>
43 #include <android/media/AudioPortConfigType.h>
44 #include <android/media/AudioPortDeviceExt.h>
45 #include <android/media/AudioPortExt.h>
46 #include <android/media/AudioPortMixExt.h>
47 #include <android/media/AudioPortSessionExt.h>
48 #include <android/media/AudioProfile.h>
49 #include <android/media/AudioTimestampInternal.h>
50 #include <android/media/AudioUniqueIdUse.h>
51 #include <android/media/EffectDescriptor.h>
52 #include <android/media/ExtraAudioDescriptor.h>
53 #include <android/media/TrackSecondaryOutputInfo.h>
54 
55 #include <android/media/SharedFileRegion.h>
56 #include <binder/IMemory.h>
57 #include <media/AidlConversionUtil.h>
58 #include <media/AudioClient.h>
59 #include <media/AudioCommonTypes.h>
60 #include <media/AudioIoDescriptor.h>
61 #include <media/AudioTimestamp.h>
62 #include <system/audio_effect.h>
63 
64 namespace android {
65 
66 // maxSize is the size of the C-string buffer (including the 0-terminator), NOT the max length of
67 // the string.
68 status_t aidl2legacy_string(std::string_view aidl, char* dest, size_t maxSize);
69 ConversionResult<std::string> legacy2aidl_string(const char* legacy, size_t maxSize);
70 
71 ConversionResult<audio_module_handle_t> aidl2legacy_int32_t_audio_module_handle_t(int32_t aidl);
72 ConversionResult<int32_t> legacy2aidl_audio_module_handle_t_int32_t(audio_module_handle_t legacy);
73 
74 ConversionResult<audio_io_handle_t> aidl2legacy_int32_t_audio_io_handle_t(int32_t aidl);
75 ConversionResult<int32_t> legacy2aidl_audio_io_handle_t_int32_t(audio_io_handle_t legacy);
76 
77 ConversionResult<audio_port_handle_t> aidl2legacy_int32_t_audio_port_handle_t(int32_t aidl);
78 ConversionResult<int32_t> legacy2aidl_audio_port_handle_t_int32_t(audio_port_handle_t legacy);
79 
80 ConversionResult<audio_patch_handle_t> aidl2legacy_int32_t_audio_patch_handle_t(int32_t aidl);
81 ConversionResult<int32_t> legacy2aidl_audio_patch_handle_t_int32_t(audio_patch_handle_t legacy);
82 
83 ConversionResult<audio_unique_id_t> aidl2legacy_int32_t_audio_unique_id_t(int32_t aidl);
84 ConversionResult<int32_t> legacy2aidl_audio_unique_id_t_int32_t(audio_unique_id_t legacy);
85 
86 ConversionResult<audio_hw_sync_t> aidl2legacy_int32_t_audio_hw_sync_t(int32_t aidl);
87 ConversionResult<int32_t> legacy2aidl_audio_hw_sync_t_int32_t(audio_hw_sync_t legacy);
88 
89 // The legacy enum is unnamed. Thus, we use int32_t.
90 ConversionResult<int32_t> aidl2legacy_AudioPortConfigType_int32_t(
91         media::AudioPortConfigType aidl);
92 // The legacy enum is unnamed. Thus, we use int32_t.
93 ConversionResult<media::AudioPortConfigType> legacy2aidl_int32_t_AudioPortConfigType(
94         int32_t legacy);
95 
96 ConversionResult<unsigned int> aidl2legacy_int32_t_config_mask(int32_t aidl);
97 ConversionResult<int32_t> legacy2aidl_config_mask_int32_t(unsigned int legacy);
98 
99 ConversionResult<audio_channel_mask_t> aidl2legacy_int32_t_audio_channel_mask_t(int32_t aidl);
100 ConversionResult<int32_t> legacy2aidl_audio_channel_mask_t_int32_t(audio_channel_mask_t legacy);
101 
102 ConversionResult<pid_t> aidl2legacy_int32_t_pid_t(int32_t aidl);
103 ConversionResult<int32_t> legacy2aidl_pid_t_int32_t(pid_t legacy);
104 
105 ConversionResult<uid_t> aidl2legacy_int32_t_uid_t(int32_t aidl);
106 ConversionResult<int32_t> legacy2aidl_uid_t_int32_t(uid_t legacy);
107 
108 ConversionResult<String8> aidl2legacy_string_view_String8(std::string_view aidl);
109 ConversionResult<std::string> legacy2aidl_String8_string(const String8& legacy);
110 
111 ConversionResult<String16> aidl2legacy_string_view_String16(std::string_view aidl);
112 ConversionResult<std::string> legacy2aidl_String16_string(const String16& legacy);
113 
114 ConversionResult<std::optional<String16>>
115 aidl2legacy_optional_string_view_optional_String16(std::optional<std::string_view> aidl);
116 ConversionResult<std::optional<std::string_view>>
117 legacy2aidl_optional_String16_optional_string(std::optional<String16> legacy);
118 
119 ConversionResult<audio_io_config_event> aidl2legacy_AudioIoConfigEvent_audio_io_config_event(
120         media::AudioIoConfigEvent aidl);
121 ConversionResult<media::AudioIoConfigEvent> legacy2aidl_audio_io_config_event_AudioIoConfigEvent(
122         audio_io_config_event legacy);
123 
124 ConversionResult<audio_port_role_t> aidl2legacy_AudioPortRole_audio_port_role_t(
125         media::AudioPortRole aidl);
126 ConversionResult<media::AudioPortRole> legacy2aidl_audio_port_role_t_AudioPortRole(
127         audio_port_role_t legacy);
128 
129 ConversionResult<audio_port_type_t> aidl2legacy_AudioPortType_audio_port_type_t(
130         media::AudioPortType aidl);
131 ConversionResult<media::AudioPortType> legacy2aidl_audio_port_type_t_AudioPortType(
132         audio_port_type_t legacy);
133 
134 ConversionResult<audio_format_t> aidl2legacy_AudioFormat_audio_format_t(
135         media::audio::common::AudioFormat aidl);
136 ConversionResult<media::audio::common::AudioFormat> legacy2aidl_audio_format_t_AudioFormat(
137         audio_format_t legacy);
138 
139 ConversionResult<audio_gain_mode_t>
140 aidl2legacy_AudioGainMode_audio_gain_mode_t(media::AudioGainMode aidl);
141 ConversionResult<media::AudioGainMode>
142 legacy2aidl_audio_gain_mode_t_AudioGainMode(audio_gain_mode_t legacy);
143 
144 ConversionResult<audio_gain_mode_t> aidl2legacy_int32_t_audio_gain_mode_t_mask(int32_t aidl);
145 ConversionResult<int32_t> legacy2aidl_audio_gain_mode_t_int32_t_mask(audio_gain_mode_t legacy);
146 
147 ConversionResult<audio_devices_t> aidl2legacy_int32_t_audio_devices_t(int32_t aidl);
148 ConversionResult<int32_t> legacy2aidl_audio_devices_t_int32_t(audio_devices_t legacy);
149 
150 ConversionResult<audio_gain_config> aidl2legacy_AudioGainConfig_audio_gain_config(
151         const media::AudioGainConfig& aidl, media::AudioPortRole role, media::AudioPortType type);
152 ConversionResult<media::AudioGainConfig> legacy2aidl_audio_gain_config_AudioGainConfig(
153         const audio_gain_config& legacy, audio_port_role_t role, audio_port_type_t type);
154 
155 ConversionResult<audio_input_flags_t> aidl2legacy_AudioInputFlags_audio_input_flags_t(
156         media::AudioInputFlags aidl);
157 ConversionResult<media::AudioInputFlags> legacy2aidl_audio_input_flags_t_AudioInputFlags(
158         audio_input_flags_t legacy);
159 
160 ConversionResult<audio_output_flags_t> aidl2legacy_AudioOutputFlags_audio_output_flags_t(
161         media::AudioOutputFlags aidl);
162 ConversionResult<media::AudioOutputFlags> legacy2aidl_audio_output_flags_t_AudioOutputFlags(
163         audio_output_flags_t legacy);
164 
165 ConversionResult<audio_input_flags_t> aidl2legacy_int32_t_audio_input_flags_t_mask(
166         int32_t aidl);
167 ConversionResult<int32_t> legacy2aidl_audio_input_flags_t_int32_t_mask(
168         audio_input_flags_t legacy);
169 
170 ConversionResult<audio_output_flags_t> aidl2legacy_int32_t_audio_output_flags_t_mask(
171         int32_t aidl);
172 ConversionResult<int32_t> legacy2aidl_audio_output_flags_t_int32_t_mask(
173         audio_output_flags_t legacy);
174 
175 ConversionResult<audio_io_flags> aidl2legacy_AudioIoFlags_audio_io_flags(
176         const media::AudioIoFlags& aidl, media::AudioPortRole role, media::AudioPortType type);
177 ConversionResult<media::AudioIoFlags> legacy2aidl_audio_io_flags_AudioIoFlags(
178         const audio_io_flags& legacy, audio_port_role_t role, audio_port_type_t type);
179 
180 ConversionResult<audio_port_config_device_ext>
181 aidl2legacy_AudioPortConfigDeviceExt_audio_port_config_device_ext(
182         const media::AudioPortConfigDeviceExt& aidl);
183 ConversionResult<media::AudioPortConfigDeviceExt>
184 legacy2aidl_audio_port_config_device_ext_AudioPortConfigDeviceExt(
185         const audio_port_config_device_ext& legacy);
186 
187 ConversionResult<audio_stream_type_t> aidl2legacy_AudioStreamType_audio_stream_type_t(
188         media::AudioStreamType aidl);
189 ConversionResult<media::AudioStreamType> legacy2aidl_audio_stream_type_t_AudioStreamType(
190         audio_stream_type_t legacy);
191 
192 ConversionResult<audio_source_t> aidl2legacy_AudioSourceType_audio_source_t(
193         media::AudioSourceType aidl);
194 ConversionResult<media::AudioSourceType> legacy2aidl_audio_source_t_AudioSourceType(
195         audio_source_t legacy);
196 
197 ConversionResult<audio_session_t> aidl2legacy_int32_t_audio_session_t(int32_t aidl);
198 ConversionResult<int32_t> legacy2aidl_audio_session_t_int32_t(audio_session_t legacy);
199 
200 ConversionResult<audio_port_config_mix_ext> aidl2legacy_AudioPortConfigMixExt(
201         const media::AudioPortConfigMixExt& aidl, media::AudioPortRole role);
202 ConversionResult<media::AudioPortConfigMixExt> legacy2aidl_AudioPortConfigMixExt(
203         const audio_port_config_mix_ext& legacy, audio_port_role_t role);
204 
205 ConversionResult<audio_port_config_session_ext>
206 aidl2legacy_AudioPortConfigSessionExt_audio_port_config_session_ext(
207         const media::AudioPortConfigSessionExt& aidl);
208 ConversionResult<media::AudioPortConfigSessionExt>
209 legacy2aidl_audio_port_config_session_ext_AudioPortConfigSessionExt(
210         const audio_port_config_session_ext& legacy);
211 
212 ConversionResult<audio_port_config> aidl2legacy_AudioPortConfig_audio_port_config(
213         const media::AudioPortConfig& aidl);
214 ConversionResult<media::AudioPortConfig> legacy2aidl_audio_port_config_AudioPortConfig(
215         const audio_port_config& legacy);
216 
217 ConversionResult<struct audio_patch> aidl2legacy_AudioPatch_audio_patch(
218         const media::AudioPatch& aidl);
219 ConversionResult<media::AudioPatch> legacy2aidl_audio_patch_AudioPatch(
220         const struct audio_patch& legacy);
221 
222 ConversionResult<sp<AudioIoDescriptor>> aidl2legacy_AudioIoDescriptor_AudioIoDescriptor(
223         const media::AudioIoDescriptor& aidl);
224 
225 ConversionResult<media::AudioIoDescriptor> legacy2aidl_AudioIoDescriptor_AudioIoDescriptor(
226         const sp<AudioIoDescriptor>& legacy);
227 
228 ConversionResult<AudioClient> aidl2legacy_AudioClient_AudioClient(
229         const media::AudioClient& aidl);
230 ConversionResult<media::AudioClient> legacy2aidl_AudioClient_AudioClient(
231         const AudioClient& legacy);
232 
233 ConversionResult<audio_content_type_t>
234 aidl2legacy_AudioContentType_audio_content_type_t(media::AudioContentType aidl);
235 ConversionResult<media::AudioContentType>
236 legacy2aidl_audio_content_type_t_AudioContentType(audio_content_type_t legacy);
237 
238 ConversionResult<audio_usage_t>
239 aidl2legacy_AudioUsage_audio_usage_t(media::AudioUsage aidl);
240 ConversionResult<media::AudioUsage>
241 legacy2aidl_audio_usage_t_AudioUsage(audio_usage_t legacy);
242 
243 ConversionResult<audio_flags_mask_t>
244 aidl2legacy_AudioFlag_audio_flags_mask_t(media::AudioFlag aidl);
245 ConversionResult<media::AudioFlag>
246 legacy2aidl_audio_flags_mask_t_AudioFlag(audio_flags_mask_t legacy);
247 
248 ConversionResult<audio_flags_mask_t>
249 aidl2legacy_int32_t_audio_flags_mask_t_mask(int32_t aidl);
250 ConversionResult<int32_t>
251 legacy2aidl_audio_flags_mask_t_int32_t_mask(audio_flags_mask_t legacy);
252 
253 ConversionResult<audio_attributes_t>
254 aidl2legacy_AudioAttributesInternal_audio_attributes_t(const media::AudioAttributesInternal& aidl);
255 ConversionResult<media::AudioAttributesInternal>
256 legacy2aidl_audio_attributes_t_AudioAttributesInternal(const audio_attributes_t& legacy);
257 
258 ConversionResult<audio_encapsulation_mode_t>
259 aidl2legacy_AudioEncapsulationMode_audio_encapsulation_mode_t(media::AudioEncapsulationMode aidl);
260 ConversionResult<media::AudioEncapsulationMode>
261 legacy2aidl_audio_encapsulation_mode_t_AudioEncapsulationMode(audio_encapsulation_mode_t legacy);
262 
263 ConversionResult<audio_offload_info_t>
264 aidl2legacy_AudioOffloadInfo_audio_offload_info_t(const media::AudioOffloadInfo& aidl);
265 ConversionResult<media::AudioOffloadInfo>
266 legacy2aidl_audio_offload_info_t_AudioOffloadInfo(const audio_offload_info_t& legacy);
267 
268 ConversionResult<audio_config_t>
269 aidl2legacy_AudioConfig_audio_config_t(const media::AudioConfig& aidl);
270 ConversionResult<media::AudioConfig>
271 legacy2aidl_audio_config_t_AudioConfig(const audio_config_t& legacy);
272 
273 ConversionResult<audio_config_base_t>
274 aidl2legacy_AudioConfigBase_audio_config_base_t(const media::AudioConfigBase& aidl);
275 ConversionResult<media::AudioConfigBase>
276 legacy2aidl_audio_config_base_t_AudioConfigBase(const audio_config_base_t& legacy);
277 
278 ConversionResult<sp<IMemory>>
279 aidl2legacy_SharedFileRegion_IMemory(const media::SharedFileRegion& aidl);
280 ConversionResult<media::SharedFileRegion>
281 legacy2aidl_IMemory_SharedFileRegion(const sp<IMemory>& legacy);
282 
283 ConversionResult<sp<IMemory>>
284 aidl2legacy_NullableSharedFileRegion_IMemory(const std::optional<media::SharedFileRegion>& aidl);
285 ConversionResult<std::optional<media::SharedFileRegion>>
286 legacy2aidl_NullableIMemory_SharedFileRegion(const sp<IMemory>& legacy);
287 
288 ConversionResult<AudioTimestamp>
289 aidl2legacy_AudioTimestampInternal_AudioTimestamp(const media::AudioTimestampInternal& aidl);
290 ConversionResult<media::AudioTimestampInternal>
291 legacy2aidl_AudioTimestamp_AudioTimestampInternal(const AudioTimestamp& legacy);
292 
293 ConversionResult<audio_uuid_t>
294 aidl2legacy_AudioUuid_audio_uuid_t(const media::AudioUuid& aidl);
295 ConversionResult<media::AudioUuid>
296 legacy2aidl_audio_uuid_t_AudioUuid(const audio_uuid_t& legacy);
297 
298 ConversionResult<effect_descriptor_t>
299 aidl2legacy_EffectDescriptor_effect_descriptor_t(const media::EffectDescriptor& aidl);
300 ConversionResult<media::EffectDescriptor>
301 legacy2aidl_effect_descriptor_t_EffectDescriptor(const effect_descriptor_t& legacy);
302 
303 ConversionResult<audio_encapsulation_metadata_type_t>
304 aidl2legacy_AudioEncapsulationMetadataType_audio_encapsulation_metadata_type_t(
305         media::AudioEncapsulationMetadataType aidl);
306 ConversionResult<media::AudioEncapsulationMetadataType>
307 legacy2aidl_audio_encapsulation_metadata_type_t_AudioEncapsulationMetadataType(
308         audio_encapsulation_metadata_type_t legacy);
309 
310 ConversionResult<uint32_t>
311 aidl2legacy_AudioEncapsulationMode_mask(int32_t aidl);
312 ConversionResult<int32_t>
313 legacy2aidl_AudioEncapsulationMode_mask(uint32_t legacy);
314 
315 ConversionResult<uint32_t>
316 aidl2legacy_AudioEncapsulationMetadataType_mask(int32_t aidl);
317 ConversionResult<int32_t>
318 legacy2aidl_AudioEncapsulationMetadataType_mask(uint32_t legacy);
319 
320 ConversionResult<audio_mix_latency_class_t>
321 aidl2legacy_AudioMixLatencyClass_audio_mix_latency_class_t(
322         media::AudioMixLatencyClass aidl);
323 ConversionResult<media::AudioMixLatencyClass>
324 legacy2aidl_audio_mix_latency_class_t_AudioMixLatencyClass(
325         audio_mix_latency_class_t legacy);
326 
327 ConversionResult<audio_port_device_ext>
328 aidl2legacy_AudioPortDeviceExt_audio_port_device_ext(const media::AudioPortDeviceExt& aidl);
329 ConversionResult<media::AudioPortDeviceExt>
330 legacy2aidl_audio_port_device_ext_AudioPortDeviceExt(const audio_port_device_ext& legacy);
331 
332 ConversionResult<audio_port_mix_ext>
333 aidl2legacy_AudioPortMixExt_audio_port_mix_ext(const media::AudioPortMixExt& aidl);
334 ConversionResult<media::AudioPortMixExt>
335 legacy2aidl_audio_port_mix_ext_AudioPortMixExt(const audio_port_mix_ext& legacy);
336 
337 ConversionResult<audio_port_session_ext>
338 aidl2legacy_AudioPortSessionExt_audio_port_session_ext(const media::AudioPortSessionExt& aidl);
339 ConversionResult<media::AudioPortSessionExt>
340 legacy2aidl_audio_port_session_ext_AudioPortSessionExt(const audio_port_session_ext& legacy);
341 
342 ConversionResult<audio_profile>
343 aidl2legacy_AudioProfile_audio_profile(const media::AudioProfile& aidl);
344 ConversionResult<media::AudioProfile>
345 legacy2aidl_audio_profile_AudioProfile(const audio_profile& legacy);
346 
347 ConversionResult<audio_gain>
348 aidl2legacy_AudioGain_audio_gain(const media::AudioGain& aidl);
349 ConversionResult<media::AudioGain>
350 legacy2aidl_audio_gain_AudioGain(const audio_gain& legacy);
351 
352 ConversionResult<audio_port_v7>
353 aidl2legacy_AudioPort_audio_port_v7(const media::AudioPort& aidl);
354 ConversionResult<media::AudioPort>
355 legacy2aidl_audio_port_v7_AudioPort(const audio_port_v7& legacy);
356 
357 ConversionResult<audio_mode_t>
358 aidl2legacy_AudioMode_audio_mode_t(media::AudioMode aidl);
359 ConversionResult<media::AudioMode>
360 legacy2aidl_audio_mode_t_AudioMode(audio_mode_t legacy);
361 
362 ConversionResult<audio_unique_id_use_t>
363 aidl2legacy_AudioUniqueIdUse_audio_unique_id_use_t(media::AudioUniqueIdUse aidl);
364 ConversionResult<media::AudioUniqueIdUse>
365 legacy2aidl_audio_unique_id_use_t_AudioUniqueIdUse(audio_unique_id_use_t legacy);
366 
367 ConversionResult<volume_group_t>
368 aidl2legacy_int32_t_volume_group_t(int32_t aidl);
369 ConversionResult<int32_t>
370 legacy2aidl_volume_group_t_int32_t(volume_group_t legacy);
371 
372 ConversionResult<audio_dual_mono_mode_t>
373 aidl2legacy_AudioDualMonoMode_audio_dual_mono_mode_t(media::AudioDualMonoMode aidl);
374 ConversionResult<media::AudioDualMonoMode>
375 legacy2aidl_audio_dual_mono_mode_t_AudioDualMonoMode(audio_dual_mono_mode_t legacy);
376 
377 ConversionResult<audio_timestretch_fallback_mode_t>
378 aidl2legacy_int32_t_audio_timestretch_fallback_mode_t(int32_t aidl);
379 ConversionResult<int32_t>
380 legacy2aidl_audio_timestretch_fallback_mode_t_int32_t(audio_timestretch_fallback_mode_t legacy);
381 
382 ConversionResult<audio_timestretch_stretch_mode_t>
383 aidl2legacy_int32_t_audio_timestretch_stretch_mode_t(int32_t aidl);
384 ConversionResult<int32_t>
385 legacy2aidl_audio_timestretch_stretch_mode_t_int32_t(audio_timestretch_stretch_mode_t legacy);
386 
387 ConversionResult<audio_playback_rate_t>
388 aidl2legacy_AudioPlaybackRate_audio_playback_rate_t(const media::AudioPlaybackRate& aidl);
389 ConversionResult<media::AudioPlaybackRate>
390 legacy2aidl_audio_playback_rate_t_AudioPlaybackRate(const audio_playback_rate_t& legacy);
391 
392 ConversionResult<audio_standard_t>
393 aidl2legacy_AudioStandard_audio_standard_t(media::AudioStandard aidl);
394 ConversionResult<media::AudioStandard>
395 legacy2aidl_audio_standard_t_AudioStandard(audio_standard_t legacy);
396 
397 ConversionResult<audio_extra_audio_descriptor>
398 aidl2legacy_ExtraAudioDescriptor_audio_extra_audio_descriptor(
399         const media::ExtraAudioDescriptor& aidl);
400 ConversionResult<media::ExtraAudioDescriptor>
401 legacy2aidl_audio_extra_audio_descriptor_ExtraAudioDescriptor(
402         const audio_extra_audio_descriptor& legacy);
403 
404 ConversionResult<audio_encapsulation_type_t>
405 aidl2legacy_AudioEncapsulationType_audio_encapsulation_type_t(
406         const media::AudioEncapsulationType& aidl);
407 ConversionResult<media::AudioEncapsulationType>
408 legacy2aidl_audio_encapsulation_type_t_AudioEncapsulationType(
409         const audio_encapsulation_type_t & legacy);
410 
411 using TrackSecondaryOutputInfoPair = std::pair<audio_port_handle_t, std::vector<audio_io_handle_t>>;
412 ConversionResult<TrackSecondaryOutputInfoPair>
413 aidl2legacy_TrackSecondaryOutputInfo_TrackSecondaryOutputInfoPair(
414         const media::TrackSecondaryOutputInfo& aidl);
415 ConversionResult<media::TrackSecondaryOutputInfo>
416 legacy2aidl_TrackSecondaryOutputInfoPair_TrackSecondaryOutputInfo(
417         const TrackSecondaryOutputInfoPair& legacy);
418 
419 
420 }  // namespace android
421