xref: /aosp_15_r20/frameworks/base/core/jni/android_media_AudioFormat.h (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
1 /*
2  * Copyright (C) 2014 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 #ifndef ANDROID_MEDIA_AUDIOFORMAT_H
18 #define ANDROID_MEDIA_AUDIOFORMAT_H
19 
20 #include <system/audio.h>
21 
22 // keep these values in sync with AudioFormat.java
23 #define ENCODING_PCM_16BIT      2
24 #define ENCODING_PCM_8BIT       3
25 #define ENCODING_PCM_FLOAT      4
26 #define ENCODING_AC3            5
27 #define ENCODING_E_AC3          6
28 #define ENCODING_DTS            7
29 #define ENCODING_DTS_HD         8
30 #define ENCODING_MP3            9
31 #define ENCODING_AAC_LC         10
32 #define ENCODING_AAC_HE_V1      11
33 #define ENCODING_AAC_HE_V2      12
34 #define ENCODING_IEC61937       13
35 #define ENCODING_DOLBY_TRUEHD   14
36 #define ENCODING_AAC_ELD        15
37 #define ENCODING_AAC_XHE        16
38 #define ENCODING_AC4            17
39 #define ENCODING_E_AC3_JOC      18
40 #define ENCODING_DOLBY_MAT      19
41 #define ENCODING_OPUS           20
42 #define ENCODING_PCM_24BIT_PACKED 21
43 #define ENCODING_PCM_32BIT 22
44 #define ENCODING_MPEGH_BL_L3 23
45 #define ENCODING_MPEGH_BL_L4 24
46 #define ENCODING_MPEGH_LC_L3 25
47 #define ENCODING_MPEGH_LC_L4 26
48 #define ENCODING_DTS_UHD_P1 27
49 #define ENCODING_DRA 28
50 #define ENCODING_DTS_HD_MA 29
51 #define ENCODING_DTS_UHD_P2 30
52 #define ENCODING_DSD 31
53 #define ENCODING_AC4_L4 32
54 #define ENCODING_IAMF_SIMPLE_PROFILE_OPUS 33
55 #define ENCODING_IAMF_SIMPLE_PROFILE_AAC 34
56 #define ENCODING_IAMF_SIMPLE_PROFILE_FLAC 35
57 #define ENCODING_IAMF_SIMPLE_PROFILE_PCM 36
58 #define ENCODING_IAMF_BASE_PROFILE_OPUS 37
59 #define ENCODING_IAMF_BASE_PROFILE_AAC 38
60 #define ENCODING_IAMF_BASE_PROFILE_FLAC 39
61 #define ENCODING_IAMF_BASE_PROFILE_PCM 40
62 #define ENCODING_IAMF_BASE_ENHANCED_PROFILE_OPUS 41
63 #define ENCODING_IAMF_BASE_ENHANCED_PROFILE_AAC 42
64 #define ENCODING_IAMF_BASE_ENHANCED_PROFILE_FLAC 43
65 #define ENCODING_IAMF_BASE_ENHANCED_PROFILE_PCM 44
66 
67 #define ENCODING_INVALID    0
68 #define ENCODING_DEFAULT    1
69 
70 
71 
72 #define CHANNEL_INVALID 0
73 #define CHANNEL_OUT_DEFAULT 1
74 #define CHANNEL_IN_DEFAULT 1
75 
audioFormatToNative(int audioFormat)76 static inline audio_format_t audioFormatToNative(int audioFormat)
77 {
78     switch (audioFormat) {
79     case ENCODING_PCM_16BIT:
80         return AUDIO_FORMAT_PCM_16_BIT;
81     case ENCODING_PCM_8BIT:
82         return AUDIO_FORMAT_PCM_8_BIT;
83     case ENCODING_PCM_FLOAT:
84         return AUDIO_FORMAT_PCM_FLOAT;
85     case ENCODING_AC3:
86         return AUDIO_FORMAT_AC3;
87     case ENCODING_E_AC3:
88         return AUDIO_FORMAT_E_AC3;
89     case ENCODING_DTS:
90         return AUDIO_FORMAT_DTS;
91     case ENCODING_DTS_HD:
92         return AUDIO_FORMAT_DTS_HD;
93     case ENCODING_MP3:
94         return AUDIO_FORMAT_MP3;
95     case ENCODING_AAC_LC:
96         return AUDIO_FORMAT_AAC_LC;
97     case ENCODING_AAC_HE_V1:
98         return AUDIO_FORMAT_AAC_HE_V1;
99     case ENCODING_AAC_HE_V2:
100         return AUDIO_FORMAT_AAC_HE_V2;
101     case ENCODING_IEC61937:
102         return AUDIO_FORMAT_IEC61937;
103     case ENCODING_DOLBY_TRUEHD:
104         return AUDIO_FORMAT_DOLBY_TRUEHD;
105     case ENCODING_AAC_ELD:
106         return AUDIO_FORMAT_AAC_ELD;
107     case ENCODING_AAC_XHE:
108         return AUDIO_FORMAT_AAC_XHE;
109     case ENCODING_AC4:
110         return AUDIO_FORMAT_AC4;
111     case ENCODING_AC4_L4:
112         return AUDIO_FORMAT_AC4_L4;
113     case ENCODING_E_AC3_JOC:
114         return AUDIO_FORMAT_E_AC3_JOC;
115     case ENCODING_DEFAULT:
116         return AUDIO_FORMAT_DEFAULT;
117     case ENCODING_DOLBY_MAT:
118         return AUDIO_FORMAT_MAT;
119     case ENCODING_OPUS:
120         return AUDIO_FORMAT_OPUS;
121     case ENCODING_PCM_24BIT_PACKED:
122         return AUDIO_FORMAT_PCM_24_BIT_PACKED;
123     case ENCODING_PCM_32BIT:
124         return AUDIO_FORMAT_PCM_32_BIT;
125     case ENCODING_MPEGH_BL_L3:
126         return AUDIO_FORMAT_MPEGH_BL_L3;
127     case ENCODING_MPEGH_BL_L4:
128         return AUDIO_FORMAT_MPEGH_BL_L4;
129     case ENCODING_MPEGH_LC_L3:
130         return AUDIO_FORMAT_MPEGH_LC_L3;
131     case ENCODING_MPEGH_LC_L4:
132         return AUDIO_FORMAT_MPEGH_LC_L4;
133     case ENCODING_DTS_UHD_P1:
134         return AUDIO_FORMAT_DTS_UHD;
135     case ENCODING_DRA:
136         return AUDIO_FORMAT_DRA;
137     case ENCODING_DTS_HD_MA:
138         return AUDIO_FORMAT_DTS_HD_MA;
139     case ENCODING_DTS_UHD_P2:
140         return AUDIO_FORMAT_DTS_UHD_P2;
141     case ENCODING_DSD:
142         return AUDIO_FORMAT_DSD;
143     case ENCODING_IAMF_SIMPLE_PROFILE_OPUS:
144         return AUDIO_FORMAT_IAMF_SIMPLE_OPUS;
145     case ENCODING_IAMF_SIMPLE_PROFILE_AAC:
146         return AUDIO_FORMAT_IAMF_SIMPLE_AAC;
147     case ENCODING_IAMF_SIMPLE_PROFILE_FLAC:
148         return AUDIO_FORMAT_IAMF_SIMPLE_FLAC;
149     case ENCODING_IAMF_SIMPLE_PROFILE_PCM:
150         return AUDIO_FORMAT_IAMF_SIMPLE_PCM;
151     case ENCODING_IAMF_BASE_PROFILE_OPUS:
152         return AUDIO_FORMAT_IAMF_BASE_OPUS;
153     case ENCODING_IAMF_BASE_PROFILE_AAC:
154         return AUDIO_FORMAT_IAMF_BASE_AAC;
155     case ENCODING_IAMF_BASE_PROFILE_FLAC:
156         return AUDIO_FORMAT_IAMF_BASE_FLAC;
157     case ENCODING_IAMF_BASE_PROFILE_PCM:
158         return AUDIO_FORMAT_IAMF_BASE_PCM;
159     case ENCODING_IAMF_BASE_ENHANCED_PROFILE_OPUS:
160         return AUDIO_FORMAT_IAMF_BASE_ENHANCED_OPUS;
161     case ENCODING_IAMF_BASE_ENHANCED_PROFILE_AAC:
162         return AUDIO_FORMAT_IAMF_BASE_ENHANCED_AAC;
163     case ENCODING_IAMF_BASE_ENHANCED_PROFILE_FLAC:
164         return AUDIO_FORMAT_IAMF_BASE_ENHANCED_FLAC;
165     case ENCODING_IAMF_BASE_ENHANCED_PROFILE_PCM:
166         return AUDIO_FORMAT_IAMF_BASE_ENHANCED_PCM;
167     default:
168         return AUDIO_FORMAT_INVALID;
169     }
170 }
171 
audioFormatFromNative(audio_format_t nativeFormat)172 static inline int audioFormatFromNative(audio_format_t nativeFormat)
173 {
174     switch (nativeFormat) {
175     case AUDIO_FORMAT_PCM_16_BIT:
176         return ENCODING_PCM_16BIT;
177     case AUDIO_FORMAT_PCM_8_BIT:
178         return ENCODING_PCM_8BIT;
179     case AUDIO_FORMAT_PCM_FLOAT:
180         return ENCODING_PCM_FLOAT;
181 
182     // As of S, these extend integer precision formats now return more specific values
183     // than ENCODING_PCM_FLOAT.
184     case AUDIO_FORMAT_PCM_24_BIT_PACKED:
185         return ENCODING_PCM_24BIT_PACKED;
186     case AUDIO_FORMAT_PCM_32_BIT:
187         return ENCODING_PCM_32BIT;
188 
189     // map this to ENCODING_PCM_FLOAT
190     case AUDIO_FORMAT_PCM_8_24_BIT:
191         return ENCODING_PCM_FLOAT;
192 
193     case AUDIO_FORMAT_AC3:
194         return ENCODING_AC3;
195     case AUDIO_FORMAT_E_AC3:
196         return ENCODING_E_AC3;
197     case AUDIO_FORMAT_DTS:
198         return ENCODING_DTS;
199     case AUDIO_FORMAT_DTS_HD:
200         return ENCODING_DTS_HD;
201     case AUDIO_FORMAT_MP3:
202         return ENCODING_MP3;
203     case AUDIO_FORMAT_AAC_LC:
204         return ENCODING_AAC_LC;
205     case AUDIO_FORMAT_AAC_HE_V1:
206         return ENCODING_AAC_HE_V1;
207     case AUDIO_FORMAT_AAC_HE_V2:
208         return ENCODING_AAC_HE_V2;
209     case AUDIO_FORMAT_IEC61937:
210         return ENCODING_IEC61937;
211     case AUDIO_FORMAT_DOLBY_TRUEHD:
212         return ENCODING_DOLBY_TRUEHD;
213     case AUDIO_FORMAT_AAC_ELD:
214         return ENCODING_AAC_ELD;
215     case AUDIO_FORMAT_AAC_XHE:
216         return ENCODING_AAC_XHE;
217     case AUDIO_FORMAT_AC4:
218         return ENCODING_AC4;
219     case AUDIO_FORMAT_AC4_L4:
220         return ENCODING_AC4_L4;
221     case AUDIO_FORMAT_E_AC3_JOC:
222         return ENCODING_E_AC3_JOC;
223     case AUDIO_FORMAT_MAT:
224     case AUDIO_FORMAT_MAT_1_0:
225     case AUDIO_FORMAT_MAT_2_0:
226     case AUDIO_FORMAT_MAT_2_1:
227         return ENCODING_DOLBY_MAT;
228     case AUDIO_FORMAT_OPUS:
229         return ENCODING_OPUS;
230     case AUDIO_FORMAT_MPEGH_BL_L3:
231         return ENCODING_MPEGH_BL_L3;
232     case AUDIO_FORMAT_MPEGH_BL_L4:
233         return ENCODING_MPEGH_BL_L4;
234     case AUDIO_FORMAT_MPEGH_LC_L3:
235         return ENCODING_MPEGH_LC_L3;
236     case AUDIO_FORMAT_MPEGH_LC_L4:
237         return ENCODING_MPEGH_LC_L4;
238     case AUDIO_FORMAT_DTS_UHD:
239         return ENCODING_DTS_UHD_P1;
240     case AUDIO_FORMAT_DRA:
241         return ENCODING_DRA;
242     case AUDIO_FORMAT_DTS_HD_MA:
243         return ENCODING_DTS_HD_MA;
244     case AUDIO_FORMAT_DTS_UHD_P2:
245         return ENCODING_DTS_UHD_P2;
246     case AUDIO_FORMAT_DEFAULT:
247         return ENCODING_DEFAULT;
248     case AUDIO_FORMAT_DSD:
249         return ENCODING_DSD;
250     case AUDIO_FORMAT_IAMF_SIMPLE_OPUS:
251         return ENCODING_IAMF_SIMPLE_PROFILE_OPUS;
252     case AUDIO_FORMAT_IAMF_SIMPLE_AAC:
253         return ENCODING_IAMF_SIMPLE_PROFILE_AAC;
254     case AUDIO_FORMAT_IAMF_SIMPLE_FLAC:
255         return ENCODING_IAMF_SIMPLE_PROFILE_FLAC;
256     case AUDIO_FORMAT_IAMF_SIMPLE_PCM:
257         return ENCODING_IAMF_SIMPLE_PROFILE_PCM;
258     case AUDIO_FORMAT_IAMF_BASE_OPUS:
259         return ENCODING_IAMF_BASE_PROFILE_OPUS;
260     case AUDIO_FORMAT_IAMF_BASE_AAC:
261         return ENCODING_IAMF_BASE_PROFILE_AAC;
262     case AUDIO_FORMAT_IAMF_BASE_FLAC:
263         return ENCODING_IAMF_BASE_PROFILE_FLAC;
264     case AUDIO_FORMAT_IAMF_BASE_PCM:
265         return ENCODING_IAMF_BASE_PROFILE_PCM;
266     case AUDIO_FORMAT_IAMF_BASE_ENHANCED_OPUS:
267         return ENCODING_IAMF_BASE_ENHANCED_PROFILE_OPUS;
268     case AUDIO_FORMAT_IAMF_BASE_ENHANCED_AAC:
269         return ENCODING_IAMF_BASE_ENHANCED_PROFILE_AAC;
270     case AUDIO_FORMAT_IAMF_BASE_ENHANCED_FLAC:
271         return ENCODING_IAMF_BASE_ENHANCED_PROFILE_FLAC;
272     case AUDIO_FORMAT_IAMF_BASE_ENHANCED_PCM:
273         return ENCODING_IAMF_BASE_ENHANCED_PROFILE_PCM;
274     default:
275         return ENCODING_INVALID;
276     }
277 }
278 
279 // This function converts Java channel masks to a native channel mask.
280 // validity should be checked with audio_is_output_channel().
nativeChannelMaskFromJavaChannelMasks(jint channelPositionMask,jint channelIndexMask)281 static inline audio_channel_mask_t nativeChannelMaskFromJavaChannelMasks(
282         jint channelPositionMask, jint channelIndexMask)
283 {
284     // 0 is the java android.media.AudioFormat.CHANNEL_INVALID value
285     if (channelIndexMask != 0) {  // channel index mask takes priority
286         // To convert to a native channel mask, the Java channel index mask
287         // requires adding the index representation.
288         return audio_channel_mask_from_representation_and_bits(
289                         AUDIO_CHANNEL_REPRESENTATION_INDEX,
290                         channelIndexMask);
291     }
292     // To convert to a native channel mask, the Java channel position mask
293     // requires a shift by 2 to skip the two deprecated channel
294     // configurations "default" and "mono".
295     return (audio_channel_mask_t)((uint32_t)channelPositionMask >> 2);
296 }
297 
outChannelMaskToNative(int channelMask)298 static inline audio_channel_mask_t outChannelMaskToNative(int channelMask)
299 {
300     switch (channelMask) {
301     case CHANNEL_OUT_DEFAULT:
302     case CHANNEL_INVALID:
303         return AUDIO_CHANNEL_NONE;
304     default:
305         return (audio_channel_mask_t)(channelMask>>2);
306     }
307 }
308 
outChannelMaskFromNative(audio_channel_mask_t nativeMask)309 static inline int outChannelMaskFromNative(audio_channel_mask_t nativeMask)
310 {
311     switch (nativeMask) {
312     case AUDIO_CHANNEL_NONE:
313         return CHANNEL_OUT_DEFAULT;
314     default:
315         return (int)nativeMask<<2;
316     }
317 }
318 
inChannelMaskToNative(int channelMask)319 static inline audio_channel_mask_t inChannelMaskToNative(int channelMask)
320 {
321     switch (channelMask) {
322         case CHANNEL_IN_DEFAULT:
323             return AUDIO_CHANNEL_NONE;
324         default:
325             return (audio_channel_mask_t)channelMask;
326     }
327 }
328 
inChannelMaskFromNative(audio_channel_mask_t nativeMask)329 static inline int inChannelMaskFromNative(audio_channel_mask_t nativeMask)
330 {
331     switch (nativeMask) {
332         case AUDIO_CHANNEL_NONE:
333             return CHANNEL_IN_DEFAULT;
334         default:
335             return (int)nativeMask;
336     }
337 }
338 
339 #endif // ANDROID_MEDIA_AUDIOFORMAT_H
340