• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 27
49 #define ENCODING_DRA 28
50 
51 #define ENCODING_INVALID    0
52 #define ENCODING_DEFAULT    1
53 
54 
55 
56 #define CHANNEL_INVALID 0
57 #define CHANNEL_OUT_DEFAULT 1
58 #define CHANNEL_IN_DEFAULT 1
59 
audioFormatToNative(int audioFormat)60 static inline audio_format_t audioFormatToNative(int audioFormat)
61 {
62     switch (audioFormat) {
63     case ENCODING_PCM_16BIT:
64         return AUDIO_FORMAT_PCM_16_BIT;
65     case ENCODING_PCM_8BIT:
66         return AUDIO_FORMAT_PCM_8_BIT;
67     case ENCODING_PCM_FLOAT:
68         return AUDIO_FORMAT_PCM_FLOAT;
69     case ENCODING_AC3:
70         return AUDIO_FORMAT_AC3;
71     case ENCODING_E_AC3:
72         return AUDIO_FORMAT_E_AC3;
73     case ENCODING_DTS:
74         return AUDIO_FORMAT_DTS;
75     case ENCODING_DTS_HD:
76         return AUDIO_FORMAT_DTS_HD;
77     case ENCODING_MP3:
78         return AUDIO_FORMAT_MP3;
79     case ENCODING_AAC_LC:
80         return AUDIO_FORMAT_AAC_LC;
81     case ENCODING_AAC_HE_V1:
82         return AUDIO_FORMAT_AAC_HE_V1;
83     case ENCODING_AAC_HE_V2:
84         return AUDIO_FORMAT_AAC_HE_V2;
85     case ENCODING_IEC61937:
86         return AUDIO_FORMAT_IEC61937;
87     case ENCODING_DOLBY_TRUEHD:
88         return AUDIO_FORMAT_DOLBY_TRUEHD;
89     case ENCODING_AAC_ELD:
90         return AUDIO_FORMAT_AAC_ELD;
91     case ENCODING_AAC_XHE:
92         return AUDIO_FORMAT_AAC_XHE;
93     case ENCODING_AC4:
94         return AUDIO_FORMAT_AC4;
95     case ENCODING_E_AC3_JOC:
96         return AUDIO_FORMAT_E_AC3_JOC;
97     case ENCODING_DEFAULT:
98         return AUDIO_FORMAT_DEFAULT;
99     case ENCODING_DOLBY_MAT:
100         return AUDIO_FORMAT_MAT;
101     case ENCODING_OPUS:
102         return AUDIO_FORMAT_OPUS;
103     case ENCODING_PCM_24BIT_PACKED:
104         return AUDIO_FORMAT_PCM_24_BIT_PACKED;
105     case ENCODING_PCM_32BIT:
106         return AUDIO_FORMAT_PCM_32_BIT;
107     case ENCODING_MPEGH_BL_L3:
108         return AUDIO_FORMAT_MPEGH_BL_L3;
109     case ENCODING_MPEGH_BL_L4:
110         return AUDIO_FORMAT_MPEGH_BL_L4;
111     case ENCODING_MPEGH_LC_L3:
112         return AUDIO_FORMAT_MPEGH_LC_L3;
113     case ENCODING_MPEGH_LC_L4:
114         return AUDIO_FORMAT_MPEGH_LC_L4;
115     case ENCODING_DTS_UHD:
116         return AUDIO_FORMAT_DTS_UHD;
117     case ENCODING_DRA:
118         return AUDIO_FORMAT_DRA;
119     default:
120         return AUDIO_FORMAT_INVALID;
121     }
122 }
123 
audioFormatFromNative(audio_format_t nativeFormat)124 static inline int audioFormatFromNative(audio_format_t nativeFormat)
125 {
126     switch (nativeFormat) {
127     case AUDIO_FORMAT_PCM_16_BIT:
128         return ENCODING_PCM_16BIT;
129     case AUDIO_FORMAT_PCM_8_BIT:
130         return ENCODING_PCM_8BIT;
131     case AUDIO_FORMAT_PCM_FLOAT:
132         return ENCODING_PCM_FLOAT;
133 
134     // As of S, these extend integer precision formats now return more specific values
135     // than ENCODING_PCM_FLOAT.
136     case AUDIO_FORMAT_PCM_24_BIT_PACKED:
137         return ENCODING_PCM_24BIT_PACKED;
138     case AUDIO_FORMAT_PCM_32_BIT:
139         return ENCODING_PCM_32BIT;
140 
141     // map this to ENCODING_PCM_FLOAT
142     case AUDIO_FORMAT_PCM_8_24_BIT:
143         return ENCODING_PCM_FLOAT;
144 
145     case AUDIO_FORMAT_AC3:
146         return ENCODING_AC3;
147     case AUDIO_FORMAT_E_AC3:
148         return ENCODING_E_AC3;
149     case AUDIO_FORMAT_DTS:
150         return ENCODING_DTS;
151     case AUDIO_FORMAT_DTS_HD:
152         return ENCODING_DTS_HD;
153     case AUDIO_FORMAT_MP3:
154         return ENCODING_MP3;
155     case AUDIO_FORMAT_AAC_LC:
156         return ENCODING_AAC_LC;
157     case AUDIO_FORMAT_AAC_HE_V1:
158         return ENCODING_AAC_HE_V1;
159     case AUDIO_FORMAT_AAC_HE_V2:
160         return ENCODING_AAC_HE_V2;
161     case AUDIO_FORMAT_IEC61937:
162         return ENCODING_IEC61937;
163     case AUDIO_FORMAT_DOLBY_TRUEHD:
164         return ENCODING_DOLBY_TRUEHD;
165     case AUDIO_FORMAT_AAC_ELD:
166         return ENCODING_AAC_ELD;
167     case AUDIO_FORMAT_AAC_XHE:
168         return ENCODING_AAC_XHE;
169     case AUDIO_FORMAT_AC4:
170         return ENCODING_AC4;
171     case AUDIO_FORMAT_E_AC3_JOC:
172         return ENCODING_E_AC3_JOC;
173     case AUDIO_FORMAT_MAT:
174     case AUDIO_FORMAT_MAT_1_0:
175     case AUDIO_FORMAT_MAT_2_0:
176     case AUDIO_FORMAT_MAT_2_1:
177         return ENCODING_DOLBY_MAT;
178     case AUDIO_FORMAT_OPUS:
179         return ENCODING_OPUS;
180     case AUDIO_FORMAT_MPEGH_BL_L3:
181         return ENCODING_MPEGH_BL_L3;
182     case AUDIO_FORMAT_MPEGH_BL_L4:
183         return ENCODING_MPEGH_BL_L4;
184     case AUDIO_FORMAT_MPEGH_LC_L3:
185         return ENCODING_MPEGH_LC_L3;
186     case AUDIO_FORMAT_MPEGH_LC_L4:
187         return ENCODING_MPEGH_LC_L4;
188     case AUDIO_FORMAT_DTS_UHD:
189         return ENCODING_DTS_UHD;
190     case AUDIO_FORMAT_DRA:
191         return ENCODING_DRA;
192     case AUDIO_FORMAT_DEFAULT:
193         return ENCODING_DEFAULT;
194     default:
195         return ENCODING_INVALID;
196     }
197 }
198 
199 // This function converts Java channel masks to a native channel mask.
200 // validity should be checked with audio_is_output_channel().
nativeChannelMaskFromJavaChannelMasks(jint channelPositionMask,jint channelIndexMask)201 static inline audio_channel_mask_t nativeChannelMaskFromJavaChannelMasks(
202         jint channelPositionMask, jint channelIndexMask)
203 {
204     // 0 is the java android.media.AudioFormat.CHANNEL_INVALID value
205     if (channelIndexMask != 0) {  // channel index mask takes priority
206         // To convert to a native channel mask, the Java channel index mask
207         // requires adding the index representation.
208         return audio_channel_mask_from_representation_and_bits(
209                         AUDIO_CHANNEL_REPRESENTATION_INDEX,
210                         channelIndexMask);
211     }
212     // To convert to a native channel mask, the Java channel position mask
213     // requires a shift by 2 to skip the two deprecated channel
214     // configurations "default" and "mono".
215     return (audio_channel_mask_t)((uint32_t)channelPositionMask >> 2);
216 }
217 
outChannelMaskToNative(int channelMask)218 static inline audio_channel_mask_t outChannelMaskToNative(int channelMask)
219 {
220     switch (channelMask) {
221     case CHANNEL_OUT_DEFAULT:
222     case CHANNEL_INVALID:
223         return AUDIO_CHANNEL_NONE;
224     default:
225         return (audio_channel_mask_t)(channelMask>>2);
226     }
227 }
228 
outChannelMaskFromNative(audio_channel_mask_t nativeMask)229 static inline int outChannelMaskFromNative(audio_channel_mask_t nativeMask)
230 {
231     switch (nativeMask) {
232     case AUDIO_CHANNEL_NONE:
233         return CHANNEL_OUT_DEFAULT;
234     default:
235         return (int)nativeMask<<2;
236     }
237 }
238 
inChannelMaskToNative(int channelMask)239 static inline audio_channel_mask_t inChannelMaskToNative(int channelMask)
240 {
241     switch (channelMask) {
242         case CHANNEL_IN_DEFAULT:
243             return AUDIO_CHANNEL_NONE;
244         default:
245             return (audio_channel_mask_t)channelMask;
246     }
247 }
248 
inChannelMaskFromNative(audio_channel_mask_t nativeMask)249 static inline int inChannelMaskFromNative(audio_channel_mask_t nativeMask)
250 {
251     switch (nativeMask) {
252         case AUDIO_CHANNEL_NONE:
253             return CHANNEL_IN_DEFAULT;
254         default:
255             return (int)nativeMask;
256     }
257 }
258 
259 #endif // ANDROID_MEDIA_AUDIOFORMAT_H
260