blob: 092aaf62bbc0a6c1de681b1abbcd76bf2c2fe89d [file] [log] [blame]
Glenn Kastenfe834d32014-01-08 14:49:08 -08001/*
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
Eric Laurentb4fae5b2016-07-07 18:58:11 -070023#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
Eric Laurentff0d9f02014-06-09 17:23:02 -070037#define ENCODING_INVALID 0
38#define ENCODING_DEFAULT 1
39
40
Eric Laurentb69681c2014-05-19 19:02:51 -070041
42#define CHANNEL_INVALID 0
43#define CHANNEL_OUT_DEFAULT 1
Glenn Kastenfe834d32014-01-08 14:49:08 -080044
45static inline audio_format_t audioFormatToNative(int audioFormat)
46{
47 switch (audioFormat) {
48 case ENCODING_PCM_16BIT:
49 return AUDIO_FORMAT_PCM_16_BIT;
50 case ENCODING_PCM_8BIT:
51 return AUDIO_FORMAT_PCM_8_BIT;
Glenn Kasten313f5982014-04-30 18:02:08 -070052 case ENCODING_PCM_FLOAT:
53 return AUDIO_FORMAT_PCM_FLOAT;
Eric Laurentff0d9f02014-06-09 17:23:02 -070054 case ENCODING_AC3:
55 return AUDIO_FORMAT_AC3;
56 case ENCODING_E_AC3:
57 return AUDIO_FORMAT_E_AC3;
Phil Burke12189d2015-03-31 14:38:30 -070058 case ENCODING_DTS:
59 return AUDIO_FORMAT_DTS;
60 case ENCODING_DTS_HD:
61 return AUDIO_FORMAT_DTS_HD;
Eric Laurentcae34662015-05-19 16:46:52 -070062 case ENCODING_MP3:
63 return AUDIO_FORMAT_MP3;
64 case ENCODING_AAC_LC:
65 return AUDIO_FORMAT_AAC_LC;
66 case ENCODING_AAC_HE_V1:
67 return AUDIO_FORMAT_AAC_HE_V1;
68 case ENCODING_AAC_HE_V2:
69 return AUDIO_FORMAT_AAC_HE_V2;
Eric Laurentb4fae5b2016-07-07 18:58:11 -070070 case ENCODING_DOLBY_TRUEHD:
71 return AUDIO_FORMAT_DOLBY_TRUEHD;
Phil Burk43f4b272016-01-27 15:35:20 -080072 case ENCODING_IEC61937:
73 return AUDIO_FORMAT_IEC61937;
Eric Laurentb69681c2014-05-19 19:02:51 -070074 case ENCODING_DEFAULT:
75 return AUDIO_FORMAT_DEFAULT;
Glenn Kastenfe834d32014-01-08 14:49:08 -080076 default:
77 return AUDIO_FORMAT_INVALID;
78 }
79}
80
Eric Laurentb69681c2014-05-19 19:02:51 -070081static inline int audioFormatFromNative(audio_format_t nativeFormat)
82{
83 switch (nativeFormat) {
84 case AUDIO_FORMAT_PCM_16_BIT:
85 return ENCODING_PCM_16BIT;
86 case AUDIO_FORMAT_PCM_8_BIT:
87 return ENCODING_PCM_8BIT;
88 case AUDIO_FORMAT_PCM_FLOAT:
89 return ENCODING_PCM_FLOAT;
Paul McLean4e5e9e92015-06-17 10:10:11 -070090
91 // map these to ENCODING_PCM_FLOAT
92 case AUDIO_FORMAT_PCM_8_24_BIT:
93 case AUDIO_FORMAT_PCM_24_BIT_PACKED:
94 case AUDIO_FORMAT_PCM_32_BIT:
95 return ENCODING_PCM_FLOAT;
96
Eric Laurentff0d9f02014-06-09 17:23:02 -070097 case AUDIO_FORMAT_AC3:
98 return ENCODING_AC3;
99 case AUDIO_FORMAT_E_AC3:
100 return ENCODING_E_AC3;
Phil Burke12189d2015-03-31 14:38:30 -0700101 case AUDIO_FORMAT_DTS:
102 return ENCODING_DTS;
103 case AUDIO_FORMAT_DTS_HD:
104 return ENCODING_DTS_HD;
Eric Laurentcae34662015-05-19 16:46:52 -0700105 case AUDIO_FORMAT_MP3:
106 return ENCODING_MP3;
107 case AUDIO_FORMAT_AAC_LC:
108 return ENCODING_AAC_LC;
109 case AUDIO_FORMAT_AAC_HE_V1:
110 return ENCODING_AAC_HE_V1;
111 case AUDIO_FORMAT_AAC_HE_V2:
112 return ENCODING_AAC_HE_V2;
Phil Burk43f4b272016-01-27 15:35:20 -0800113 case AUDIO_FORMAT_IEC61937:
114 return ENCODING_IEC61937;
Eric Laurentb4fae5b2016-07-07 18:58:11 -0700115 case AUDIO_FORMAT_DOLBY_TRUEHD:
116 return ENCODING_DOLBY_TRUEHD;
Eric Laurentb69681c2014-05-19 19:02:51 -0700117 case AUDIO_FORMAT_DEFAULT:
118 return ENCODING_DEFAULT;
119 default:
120 return ENCODING_INVALID;
121 }
122}
123
124static inline audio_channel_mask_t outChannelMaskToNative(int channelMask)
125{
126 switch (channelMask) {
127 case CHANNEL_OUT_DEFAULT:
128 case CHANNEL_INVALID:
129 return AUDIO_CHANNEL_NONE;
130 default:
131 return (audio_channel_mask_t)(channelMask>>2);
132 }
133}
134
135static inline int outChannelMaskFromNative(audio_channel_mask_t nativeMask)
136{
137 switch (nativeMask) {
138 case AUDIO_CHANNEL_NONE:
139 return CHANNEL_OUT_DEFAULT;
140 default:
141 return (int)nativeMask<<2;
142 }
143}
144
145static inline audio_channel_mask_t inChannelMaskToNative(int channelMask)
146{
147 return (audio_channel_mask_t)channelMask;
148}
149
150static inline int inChannelMaskFromNative(audio_channel_mask_t nativeMask)
151{
152 return (int)nativeMask;
153}
154
Glenn Kastenfe834d32014-01-08 14:49:08 -0800155#endif // ANDROID_MEDIA_AUDIOFORMAT_H