1 /* 2 * Copyright (c) 2021-2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef MEDIA_FOUNDATION_AUDIO_TYPES_H 17 #define MEDIA_FOUNDATION_AUDIO_TYPES_H 18 19 #include <cstdint> // NOLINT: used it 20 21 namespace OHOS { 22 namespace Media { 23 namespace Plugins { 24 /** 25 * @enum Audio AAC Profile 26 * 27 * AAC mode type. Note that the term profile is used with the MPEG-2 28 * standard and the term object type and profile is used with MPEG-4 29 * 30 * @since 1.0 31 * @version 1.0 32 */ 33 enum struct AudioAacProfile : uint8_t { 34 NONE = 0, ///< Null, not used 35 MAIN = 1, ///< AAC Main object 36 LC, ///< AAC Low Complexity object (AAC profile) 37 SSR, ///< AAC Scalable Sample Rate object 38 LTP, ///< AAC Long Term Prediction object 39 HE, ///< AAC High Efficiency (object type SBR, HE-AAC profile) 40 SCALABLE, ///< AAC Scalable object 41 ERLC = 17, ///< ER AAC Low Complexity object (Error Resilient AAC-LC) 42 ER_SCALABLE = 20, ///< ER AAC scalable object 43 LD = 23, ///< AAC Low Delay object (Error Resilient) 44 HE_PS = 29, ///< AAC High Efficiency with Parametric Stereo coding (HE-AAC v2, object type PS) 45 ELD = 39, ///< AAC Enhanced Low Delay. NOTE: Pending Khronos standardization 46 XHE = 42, ///< extended High Efficiency AAC. NOTE: Pending Khronos standardization 47 }; 48 49 /** 50 * @enum Audio AAC Stream Format 51 * 52 * @since 1.0 53 * @version 1.0 54 */ 55 enum struct AudioAacStreamFormat : uint8_t { 56 MP2ADTS = 0, ///< AAC Audio Data Transport Stream 2 format 57 MP4ADTS, ///< AAC Audio Data Transport Stream 4 format 58 MP4LOAS, ///< AAC Low Overhead Audio Stream format 59 MP4LATM, ///< AAC Low overhead Audio Transport Multiplex 60 ADIF, ///< AAC Audio Data Interchange Format 61 MP4FF, ///< AAC inside MPEG-4/ISO File Format 62 RAW, ///< AAC Raw Format 63 }; 64 65 /* 66 * @brief Audio RenderInfo, default ContentType::CONTENT_TYPE_UNKNOWN(0) and StreamUsage::STREAM_USAGE_UNKNOWN(0) 67 * combined into AudioStreamType::STREAM_MUSIC. 68 */ 69 struct AudioRenderInfo { 70 int32_t contentType {0}; 71 int32_t streamUsage {0}; 72 int32_t rendererFlags {0}; 73 }; 74 75 enum class AudioInterruptMode { 76 SHARE_MODE, 77 INDEPENDENT_MODE 78 }; 79 80 enum AudioSampleFormat : int32_t { 81 SAMPLE_U8 = 0, 82 SAMPLE_S16LE = 1, 83 SAMPLE_S24LE = 2, 84 SAMPLE_S32LE = 3, 85 SAMPLE_F32LE = 4, 86 SAMPLE_U8P = 5, 87 SAMPLE_S16P = 6, 88 SAMPLE_S24P = 7, 89 SAMPLE_S32P = 8, 90 SAMPLE_F32P = 9, 91 SAMPLE_S8 = 10, 92 SAMPLE_S8P = 11, 93 SAMPLE_U16 = 12, 94 SAMPLE_U16P = 13, 95 SAMPLE_U24 = 14, 96 SAMPLE_U24P = 15, 97 SAMPLE_U32 = 16, 98 SAMPLE_U32P = 17, 99 SAMPLE_S64 = 18, 100 SAMPLE_U64 = 19, 101 SAMPLE_S64P = 20, 102 SAMPLE_U64P = 21, 103 SAMPLE_F64 = 22, 104 SAMPLE_F64P = 23, 105 INVALID_WIDTH = -1 106 }; 107 108 enum AudioChannelSet : uint64_t { 109 FRONT_LEFT = 1ULL << 0U, 110 FRONT_RIGHT = 1ULL << 1U, 111 FRONT_CENTER = 1ULL << 2U, 112 LOW_FREQUENCY = 1ULL << 3U, 113 BACK_LEFT = 1ULL << 4U, 114 BACK_RIGHT = 1ULL << 5U, 115 FRONT_LEFT_OF_CENTER = 1ULL << 6U, 116 FRONT_RIGHT_OF_CENTER = 1ULL << 7U, 117 BACK_CENTER = 1ULL << 8U, 118 SIDE_LEFT = 1ULL << 9U, 119 SIDE_RIGHT = 1ULL << 10U, 120 TOP_CENTER = 1ULL << 11U, 121 TOP_FRONT_LEFT = 1ULL << 12U, 122 TOP_FRONT_CENTER = 1ULL << 13U, 123 TOP_FRONT_RIGHT = 1ULL << 14U, 124 TOP_BACK_LEFT = 1ULL << 15U, 125 TOP_BACK_CENTER = 1ULL << 16U, 126 TOP_BACK_RIGHT = 1ULL << 17U, 127 STEREO_LEFT = 1ULL << 29U, 128 STEREO_RIGHT = 1ULL << 30U, 129 WIDE_LEFT = 1ULL << 31U, 130 WIDE_RIGHT = 1ULL << 32U, 131 SURROUND_DIRECT_LEFT = 1ULL << 33U, 132 SURROUND_DIRECT_RIGHT = 1ULL << 34U, 133 LOW_FREQUENCY_2 = 1ULL << 35U, 134 TOP_SIDE_LEFT = 1ULL << 36U, 135 TOP_SIDE_RIGHT = 1ULL << 37U, 136 BOTTOM_FRONT_CENTER = 1ULL << 38U, 137 BOTTOM_FRONT_LEFT = 1ULL << 39U, 138 BOTTOM_FRONT_RIGHT = 1ULL << 40U, 139 140 // Ambisonics ACN formats 141 // 0th and first order ambisonics ACN 142 AMBISONICS_ACN0 = 1ULL << 41U, /** 0th ambisonics channel number 0. */ 143 AMBISONICS_ACN1 = 1ULL << 42U, /** first-order ambisonics channel number 1. */ 144 AMBISONICS_ACN2 = 1ULL << 43U, /** first-order ambisonics channel number 2. */ 145 AMBISONICS_ACN3 = 1ULL << 44U, /** first-order ambisonics channel number 3. */ 146 AMBISONICS_W = AMBISONICS_ACN0, /** same as 0th ambisonics channel number 0. */ 147 AMBISONICS_Y = AMBISONICS_ACN1, /** same as first-order ambisonics channel number 1. */ 148 AMBISONICS_Z = AMBISONICS_ACN2, /** same as first-order ambisonics channel number 2. */ 149 AMBISONICS_X = AMBISONICS_ACN3, /** same as first-order ambisonics channel number 3. */ 150 151 // second order ambisonics ACN 152 AMBISONICS_ACN4 = 1ULL << 45U, /** second-order ambisonics channel number 4. */ 153 AMBISONICS_ACN5 = 1ULL << 46U, /** second-order ambisonics channel number 5. */ 154 AMBISONICS_ACN6 = 1ULL << 47U, /** second-order ambisonics channel number 6. */ 155 AMBISONICS_ACN7 = 1ULL << 48U, /** second-order ambisonics channel number 7. */ 156 AMBISONICS_ACN8 = 1ULL << 49U, /** second-order ambisonics channel number 8. */ 157 158 // third order ambisonics ACN 159 AMBISONICS_ACN9 = 1ULL << 50U, /** third-order ambisonics channel number 9. */ 160 AMBISONICS_ACN10 = 1ULL << 51U, /** third-order ambisonics channel number 10. */ 161 AMBISONICS_ACN11 = 1ULL << 52U, /** third-order ambisonics channel number 11. */ 162 AMBISONICS_ACN12 = 1ULL << 53U, /** third-order ambisonics channel number 12. */ 163 AMBISONICS_ACN13 = 1ULL << 54U, /** third-order ambisonics channel number 13. */ 164 AMBISONICS_ACN14 = 1ULL << 55U, /** third-order ambisonics channel number 14. */ 165 AMBISONICS_ACN15 = 1ULL << 56U, /** third-order ambisonics channel number 15. */ 166 }; 167 168 /** 169 * @brief Ambisonic attribute set. 170 * 171 * A set of 64-bit integers indicate the ambisonic attributes. 172 */ 173 enum AmbAttributeSet : int64_t { 174 /** Ambisonic attribute: order 1 */ 175 AMB_ORD_1 = 1ULL << 0U, 176 177 /** Ambisonic attribute: order 2 */ 178 AMB_ORD_2 = 2ULL << 0U, 179 180 /** Ambisonic attribute: order 3 */ 181 AMB_ORD_3 = 3ULL << 0U, 182 183 /** Ambisonic attribute: ACN Component Ordering */ 184 AMB_COM_ACN = 0ULL << 8U, 185 186 /** Ambisonic attribute: FUMA Component Ordering */ 187 AMB_COM_FUMA = 1ULL << 8U, 188 189 /** Ambisonic attribute: N3D Normalization */ 190 AMB_NOR_N3D = 0ULL << 12U, 191 192 /** Ambisonic attribute: SN3D Normalization */ 193 AMB_NOR_SN3D = 1ULL << 12U, 194 195 /** Channel layout: Ambisonic mode */ 196 AMB_MODE = 1ULL << 44U 197 }; 198 199 enum AudioChannelLayout : int64_t { 200 UNKNOWN = 0, 201 202 MONO = (AudioChannelSet::FRONT_CENTER), 203 204 STEREO = (AudioChannelSet::FRONT_LEFT | AudioChannelSet::FRONT_RIGHT), 205 STEREO_DOWNMIX = (AudioChannelSet::STEREO_LEFT | AudioChannelSet::STEREO_RIGHT), 206 207 CH_2POINT1 = (STEREO | AudioChannelSet::LOW_FREQUENCY), 208 209 /**CH_LAYOUT_3POINT0 in native_audio_channel_layout*/ 210 CH_2_1 = (STEREO | AudioChannelSet::BACK_CENTER), 211 SURROUND = (STEREO | AudioChannelSet::FRONT_CENTER), 212 CH_3POINT1 = (SURROUND | AudioChannelSet::LOW_FREQUENCY), 213 CH_4POINT0 = (SURROUND | AudioChannelSet::BACK_CENTER), 214 215 /**CH_LAYOUT_QUAD_SIDE in native_audio_channel_layout*/ 216 CH_2_2 = (STEREO | AudioChannelSet::SIDE_LEFT | AudioChannelSet::SIDE_RIGHT), 217 QUAD = (STEREO | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT), 218 CH_2POINT0POINT2 = (STEREO | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT), 219 HOA_ORDER1_ACN_N3D = AMB_MODE | AMB_ORD_1 | AMB_COM_ACN | AMB_NOR_N3D, 220 HOA_ORDER1_ACN_SN3D = AMB_MODE | AMB_ORD_1 | AMB_COM_ACN | AMB_NOR_SN3D, 221 HOA_ORDER1_FUMA = AMB_MODE | AMB_ORD_1 | AMB_COM_FUMA, 222 223 CH_4POINT1 = (CH_4POINT0 | AudioChannelSet::LOW_FREQUENCY), 224 CH_5POINT0 = (SURROUND | AudioChannelSet::SIDE_LEFT | AudioChannelSet::SIDE_RIGHT), 225 CH_5POINT0_BACK = (SURROUND | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT), 226 CH_2POINT1POINT2 = (CH_2POINT0POINT2 | AudioChannelSet::LOW_FREQUENCY), 227 CH_3POINT0POINT2 = (CH_2POINT0POINT2 | AudioChannelSet::FRONT_CENTER), 228 229 CH_5POINT1 = (CH_5POINT0 | AudioChannelSet::LOW_FREQUENCY), 230 CH_5POINT1_BACK = (CH_5POINT0_BACK | AudioChannelSet::LOW_FREQUENCY), 231 CH_6POINT0 = (CH_5POINT0 | AudioChannelSet::BACK_CENTER), 232 CH_3POINT1POINT2 = (CH_3POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT), 233 CH_6POINT0_FRONT = (CH_2_2 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER), 234 HEXAGONAL = (CH_5POINT0_BACK | AudioChannelSet::BACK_CENTER), 235 236 CH_6POINT1 = (CH_5POINT1 | AudioChannelSet::BACK_CENTER), 237 CH_6POINT1_BACK = (CH_5POINT1_BACK | AudioChannelSet::BACK_CENTER), 238 CH_6POINT1_FRONT = (CH_6POINT0_FRONT | AudioChannelSet::LOW_FREQUENCY), 239 CH_7POINT0 = (CH_5POINT0 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT), 240 CH_7POINT0_FRONT = (CH_5POINT0 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER), 241 242 CH_7POINT1 = (CH_5POINT1 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT), 243 OCTAGONAL = (CH_5POINT0 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_CENTER | AudioChannelSet::BACK_RIGHT), 244 CH_5POINT1POINT2 = (CH_5POINT1 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT), 245 CH_7POINT1_WIDE = (CH_5POINT1 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER), 246 CH_7POINT1_WIDE_BACK = 247 (CH_5POINT1_BACK | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER), 248 249 HOA_ORDER2_ACN_N3D = AMB_MODE | AMB_ORD_2 | AMB_COM_ACN | AMB_NOR_N3D, 250 HOA_ORDER2_ACN_SN3D = AMB_MODE | AMB_ORD_2 | AMB_COM_ACN | AMB_NOR_SN3D, 251 HOA_ORDER2_FUMA = AMB_MODE | AMB_ORD_2 | AMB_COM_FUMA, 252 CH_5POINT1POINT4 = (CH_5POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT | 253 AudioChannelSet::TOP_BACK_LEFT | AudioChannelSet::TOP_BACK_RIGHT), 254 CH_7POINT1POINT2 = (CH_7POINT1 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT), 255 256 CH_7POINT1POINT4 = (CH_7POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT | 257 AudioChannelSet::TOP_BACK_LEFT | AudioChannelSet::TOP_BACK_RIGHT), 258 CH_10POINT2 = (AudioChannelSet::FRONT_LEFT | AudioChannelSet::FRONT_RIGHT | AudioChannelSet::FRONT_CENTER | 259 AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT | AudioChannelSet::BACK_LEFT | 260 AudioChannelSet::BACK_RIGHT | AudioChannelSet::BACK_CENTER | AudioChannelSet::SIDE_LEFT | 261 AudioChannelSet::SIDE_RIGHT | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT), 262 263 CH_9POINT1POINT4 = (CH_7POINT1POINT4 | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT), 264 265 CH_9POINT1POINT6 = (CH_9POINT1POINT4 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT), 266 HEXADECAGONAL = 267 (OCTAGONAL | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT | AudioChannelSet::TOP_BACK_LEFT | 268 AudioChannelSet::TOP_BACK_RIGHT | AudioChannelSet::TOP_BACK_CENTER | AudioChannelSet::TOP_FRONT_CENTER | 269 AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT), 270 271 HOA_ORDER3_ACN_N3D = AMB_MODE | AMB_ORD_3 | AMB_COM_ACN | AMB_NOR_N3D, 272 HOA_ORDER3_ACN_SN3D = AMB_MODE | AMB_ORD_3 | AMB_COM_ACN | AMB_NOR_SN3D, 273 HOA_ORDER3_FUMA = AMB_MODE | AMB_ORD_3 | AMB_COM_FUMA, 274 275 CH_22POINT2 = (CH_7POINT1POINT4 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER | 276 AudioChannelSet::BACK_CENTER | AudioChannelSet::TOP_CENTER | AudioChannelSet::TOP_FRONT_CENTER | 277 AudioChannelSet::TOP_BACK_CENTER | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT | 278 AudioChannelSet::BOTTOM_FRONT_LEFT | AudioChannelSet::BOTTOM_FRONT_RIGHT | 279 AudioChannelSet::BOTTOM_FRONT_CENTER | AudioChannelSet::LOW_FREQUENCY_2), 280 }; 281 282 enum AACProfile : int32_t { 283 AAC_PROFILE_LC = 0, 284 AAC_PROFILE_ELD = 1, 285 AAC_PROFILE_ERLC = 2, 286 AAC_PROFILE_HE = 3, 287 AAC_PROFILE_HE_V2 = 4, 288 AAC_PROFILE_LD = 5, 289 AAC_PROFILE_MAIN = 6, 290 }; 291 } // namespace Plugins 292 } // namespace Media 293 } // namespace OHOS 294 #endif // MEDIA_FOUNDATION_AUDIO_TYPES_H 295