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 int32_t volumeMode {0}; 74 }; 75 76 enum class AudioInterruptMode { 77 SHARE_MODE, 78 INDEPENDENT_MODE 79 }; 80 81 enum AudioSampleFormat : int32_t { 82 SAMPLE_U8 = 0, 83 SAMPLE_S16LE = 1, 84 SAMPLE_S24LE = 2, 85 SAMPLE_S32LE = 3, 86 SAMPLE_F32LE = 4, 87 SAMPLE_U8P = 5, 88 SAMPLE_S16P = 6, 89 SAMPLE_S24P = 7, 90 SAMPLE_S32P = 8, 91 SAMPLE_F32P = 9, 92 SAMPLE_S8 = 10, 93 SAMPLE_S8P = 11, 94 SAMPLE_U16 = 12, 95 SAMPLE_U16P = 13, 96 SAMPLE_U24 = 14, 97 SAMPLE_U24P = 15, 98 SAMPLE_U32 = 16, 99 SAMPLE_U32P = 17, 100 SAMPLE_S64 = 18, 101 SAMPLE_U64 = 19, 102 SAMPLE_S64P = 20, 103 SAMPLE_U64P = 21, 104 SAMPLE_F64 = 22, 105 SAMPLE_F64P = 23, 106 SAMPLE_S16BE = 24, 107 SAMPLE_S24BE = 25, 108 SAMPLE_S32BE = 26, 109 SAMPLE_F32BE = 27, 110 SAMPLE_F64BE = 28, 111 INVALID_WIDTH = -1 112 }; 113 114 enum AudioChannelSet : uint64_t { 115 FRONT_LEFT = 1ULL << 0U, 116 FRONT_RIGHT = 1ULL << 1U, 117 FRONT_CENTER = 1ULL << 2U, 118 LOW_FREQUENCY = 1ULL << 3U, 119 BACK_LEFT = 1ULL << 4U, 120 BACK_RIGHT = 1ULL << 5U, 121 FRONT_LEFT_OF_CENTER = 1ULL << 6U, 122 FRONT_RIGHT_OF_CENTER = 1ULL << 7U, 123 BACK_CENTER = 1ULL << 8U, 124 SIDE_LEFT = 1ULL << 9U, 125 SIDE_RIGHT = 1ULL << 10U, 126 TOP_CENTER = 1ULL << 11U, 127 TOP_FRONT_LEFT = 1ULL << 12U, 128 TOP_FRONT_CENTER = 1ULL << 13U, 129 TOP_FRONT_RIGHT = 1ULL << 14U, 130 TOP_BACK_LEFT = 1ULL << 15U, 131 TOP_BACK_CENTER = 1ULL << 16U, 132 TOP_BACK_RIGHT = 1ULL << 17U, 133 STEREO_LEFT = 1ULL << 29U, 134 STEREO_RIGHT = 1ULL << 30U, 135 WIDE_LEFT = 1ULL << 31U, 136 WIDE_RIGHT = 1ULL << 32U, 137 SURROUND_DIRECT_LEFT = 1ULL << 33U, 138 SURROUND_DIRECT_RIGHT = 1ULL << 34U, 139 LOW_FREQUENCY_2 = 1ULL << 35U, 140 TOP_SIDE_LEFT = 1ULL << 36U, 141 TOP_SIDE_RIGHT = 1ULL << 37U, 142 BOTTOM_FRONT_CENTER = 1ULL << 38U, 143 BOTTOM_FRONT_LEFT = 1ULL << 39U, 144 BOTTOM_FRONT_RIGHT = 1ULL << 40U, 145 146 // Ambisonics ACN formats 147 // 0th and first order ambisonics ACN 148 AMBISONICS_ACN0 = 1ULL << 41U, /** 0th ambisonics channel number 0. */ 149 AMBISONICS_ACN1 = 1ULL << 42U, /** first-order ambisonics channel number 1. */ 150 AMBISONICS_ACN2 = 1ULL << 43U, /** first-order ambisonics channel number 2. */ 151 AMBISONICS_ACN3 = 1ULL << 44U, /** first-order ambisonics channel number 3. */ 152 AMBISONICS_W = AMBISONICS_ACN0, /** same as 0th ambisonics channel number 0. */ 153 AMBISONICS_Y = AMBISONICS_ACN1, /** same as first-order ambisonics channel number 1. */ 154 AMBISONICS_Z = AMBISONICS_ACN2, /** same as first-order ambisonics channel number 2. */ 155 AMBISONICS_X = AMBISONICS_ACN3, /** same as first-order ambisonics channel number 3. */ 156 157 // second order ambisonics ACN 158 AMBISONICS_ACN4 = 1ULL << 45U, /** second-order ambisonics channel number 4. */ 159 AMBISONICS_ACN5 = 1ULL << 46U, /** second-order ambisonics channel number 5. */ 160 AMBISONICS_ACN6 = 1ULL << 47U, /** second-order ambisonics channel number 6. */ 161 AMBISONICS_ACN7 = 1ULL << 48U, /** second-order ambisonics channel number 7. */ 162 AMBISONICS_ACN8 = 1ULL << 49U, /** second-order ambisonics channel number 8. */ 163 164 // third order ambisonics ACN 165 AMBISONICS_ACN9 = 1ULL << 50U, /** third-order ambisonics channel number 9. */ 166 AMBISONICS_ACN10 = 1ULL << 51U, /** third-order ambisonics channel number 10. */ 167 AMBISONICS_ACN11 = 1ULL << 52U, /** third-order ambisonics channel number 11. */ 168 AMBISONICS_ACN12 = 1ULL << 53U, /** third-order ambisonics channel number 12. */ 169 AMBISONICS_ACN13 = 1ULL << 54U, /** third-order ambisonics channel number 13. */ 170 AMBISONICS_ACN14 = 1ULL << 55U, /** third-order ambisonics channel number 14. */ 171 AMBISONICS_ACN15 = 1ULL << 56U, /** third-order ambisonics channel number 15. */ 172 }; 173 174 /** 175 * @brief Ambisonic attribute set. 176 * 177 * A set of 64-bit integers indicate the ambisonic attributes. 178 */ 179 enum AmbAttributeSet : int64_t { 180 /** Ambisonic attribute: order 1 */ 181 AMB_ORD_1 = 1ULL << 0U, 182 183 /** Ambisonic attribute: order 2 */ 184 AMB_ORD_2 = 2ULL << 0U, 185 186 /** Ambisonic attribute: order 3 */ 187 AMB_ORD_3 = 3ULL << 0U, 188 189 /** Ambisonic attribute: ACN Component Ordering */ 190 AMB_COM_ACN = 0ULL << 8U, 191 192 /** Ambisonic attribute: FUMA Component Ordering */ 193 AMB_COM_FUMA = 1ULL << 8U, 194 195 /** Ambisonic attribute: N3D Normalization */ 196 AMB_NOR_N3D = 0ULL << 12U, 197 198 /** Ambisonic attribute: SN3D Normalization */ 199 AMB_NOR_SN3D = 1ULL << 12U, 200 201 /** Channel layout: Ambisonic mode */ 202 AMB_MODE = 1ULL << 44U 203 }; 204 205 enum AudioChannelLayout : int64_t { 206 UNKNOWN = 0, 207 208 MONO = (AudioChannelSet::FRONT_CENTER), 209 210 STEREO = (AudioChannelSet::FRONT_LEFT | AudioChannelSet::FRONT_RIGHT), 211 STEREO_DOWNMIX = (AudioChannelSet::STEREO_LEFT | AudioChannelSet::STEREO_RIGHT), 212 213 CH_2POINT1 = (STEREO | AudioChannelSet::LOW_FREQUENCY), 214 215 /**CH_LAYOUT_3POINT0 in native_audio_channel_layout*/ 216 CH_2_1 = (STEREO | AudioChannelSet::BACK_CENTER), 217 SURROUND = (STEREO | AudioChannelSet::FRONT_CENTER), 218 CH_3POINT1 = (SURROUND | AudioChannelSet::LOW_FREQUENCY), 219 CH_4POINT0 = (SURROUND | AudioChannelSet::BACK_CENTER), 220 221 /**CH_LAYOUT_QUAD_SIDE in native_audio_channel_layout*/ 222 CH_2_2 = (STEREO | AudioChannelSet::SIDE_LEFT | AudioChannelSet::SIDE_RIGHT), 223 QUAD = (STEREO | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT), 224 CH_2POINT0POINT2 = (STEREO | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT), 225 HOA_ORDER1_ACN_N3D = AMB_MODE | AMB_ORD_1 | AMB_COM_ACN | AMB_NOR_N3D, 226 HOA_ORDER1_ACN_SN3D = AMB_MODE | AMB_ORD_1 | AMB_COM_ACN | AMB_NOR_SN3D, 227 HOA_ORDER1_FUMA = AMB_MODE | AMB_ORD_1 | AMB_COM_FUMA, 228 229 CH_4POINT1 = (CH_4POINT0 | AudioChannelSet::LOW_FREQUENCY), 230 CH_5POINT0 = (SURROUND | AudioChannelSet::SIDE_LEFT | AudioChannelSet::SIDE_RIGHT), 231 CH_5POINT0_BACK = (SURROUND | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT), 232 CH_2POINT1POINT2 = (CH_2POINT0POINT2 | AudioChannelSet::LOW_FREQUENCY), 233 CH_3POINT0POINT2 = (CH_2POINT0POINT2 | AudioChannelSet::FRONT_CENTER), 234 235 CH_5POINT1 = (CH_5POINT0 | AudioChannelSet::LOW_FREQUENCY), 236 CH_5POINT1_BACK = (CH_5POINT0_BACK | AudioChannelSet::LOW_FREQUENCY), 237 CH_6POINT0 = (CH_5POINT0 | AudioChannelSet::BACK_CENTER), 238 CH_3POINT1POINT2 = (CH_3POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT), 239 CH_6POINT0_FRONT = (CH_2_2 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER), 240 HEXAGONAL = (CH_5POINT0_BACK | AudioChannelSet::BACK_CENTER), 241 242 CH_6POINT1 = (CH_5POINT1 | AudioChannelSet::BACK_CENTER), 243 CH_6POINT1_BACK = (CH_5POINT1_BACK | AudioChannelSet::BACK_CENTER), 244 CH_6POINT1_FRONT = (CH_6POINT0_FRONT | AudioChannelSet::LOW_FREQUENCY), 245 CH_7POINT0 = (CH_5POINT0 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT), 246 CH_7POINT0_FRONT = (CH_5POINT0 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER), 247 248 CH_7POINT1 = (CH_5POINT1 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT), 249 OCTAGONAL = (CH_5POINT0 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_CENTER | AudioChannelSet::BACK_RIGHT), 250 CH_5POINT1POINT2 = (CH_5POINT1 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT), 251 CH_7POINT1_WIDE = (CH_5POINT1 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER), 252 CH_7POINT1_WIDE_BACK = 253 (CH_5POINT1_BACK | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER), 254 255 HOA_ORDER2_ACN_N3D = AMB_MODE | AMB_ORD_2 | AMB_COM_ACN | AMB_NOR_N3D, 256 HOA_ORDER2_ACN_SN3D = AMB_MODE | AMB_ORD_2 | AMB_COM_ACN | AMB_NOR_SN3D, 257 HOA_ORDER2_FUMA = AMB_MODE | AMB_ORD_2 | AMB_COM_FUMA, 258 CH_5POINT1POINT4 = (CH_5POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT | 259 AudioChannelSet::TOP_BACK_LEFT | AudioChannelSet::TOP_BACK_RIGHT), 260 CH_7POINT1POINT2 = (CH_7POINT1 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT), 261 262 CH_7POINT1POINT4 = (CH_7POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT | 263 AudioChannelSet::TOP_BACK_LEFT | AudioChannelSet::TOP_BACK_RIGHT), 264 CH_10POINT2 = (AudioChannelSet::FRONT_LEFT | AudioChannelSet::FRONT_RIGHT | AudioChannelSet::FRONT_CENTER | 265 AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT | AudioChannelSet::BACK_LEFT | 266 AudioChannelSet::BACK_RIGHT | AudioChannelSet::BACK_CENTER | AudioChannelSet::SIDE_LEFT | 267 AudioChannelSet::SIDE_RIGHT | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT), 268 269 CH_9POINT1POINT4 = (CH_7POINT1POINT4 | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT), 270 271 CH_9POINT1POINT6 = (CH_9POINT1POINT4 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT), 272 HEXADECAGONAL = 273 (OCTAGONAL | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT | AudioChannelSet::TOP_BACK_LEFT | 274 AudioChannelSet::TOP_BACK_RIGHT | AudioChannelSet::TOP_BACK_CENTER | AudioChannelSet::TOP_FRONT_CENTER | 275 AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT), 276 277 HOA_ORDER3_ACN_N3D = AMB_MODE | AMB_ORD_3 | AMB_COM_ACN | AMB_NOR_N3D, 278 HOA_ORDER3_ACN_SN3D = AMB_MODE | AMB_ORD_3 | AMB_COM_ACN | AMB_NOR_SN3D, 279 HOA_ORDER3_FUMA = AMB_MODE | AMB_ORD_3 | AMB_COM_FUMA, 280 281 CH_22POINT2 = (CH_7POINT1POINT4 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER | 282 AudioChannelSet::BACK_CENTER | AudioChannelSet::TOP_CENTER | AudioChannelSet::TOP_FRONT_CENTER | 283 AudioChannelSet::TOP_BACK_CENTER | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT | 284 AudioChannelSet::BOTTOM_FRONT_LEFT | AudioChannelSet::BOTTOM_FRONT_RIGHT | 285 AudioChannelSet::BOTTOM_FRONT_CENTER | AudioChannelSet::LOW_FREQUENCY_2), 286 }; 287 288 enum AACProfile : int32_t { 289 AAC_PROFILE_LC = 0, 290 AAC_PROFILE_ELD = 1, 291 AAC_PROFILE_ERLC = 2, 292 AAC_PROFILE_HE = 3, 293 AAC_PROFILE_HE_V2 = 4, 294 AAC_PROFILE_LD = 5, 295 AAC_PROFILE_MAIN = 6, 296 }; 297 298 enum AudioEncodePtsMode : int32_t { 299 DEFAULT_ENCODE_PTS_MODE = 0, // not use input pts, calculate by encoder, pts start in 0 300 GENERATE_ENCODE_PTS_BY_INPUT_MODE, // use input pts, calculate start from input pts 301 }; 302 303 enum AudioEncodeBitrateMode : int32_t { 304 AUDIO_CBR = 0, // constant bit rate mode. 305 AUDIO_VBR = 1, // variable bit rate mode. 306 AUDIO_MBR = 2, // single frame multiple bit rate mode 307 }; 308 309 } // namespace Plugins 310 } // namespace Media 311 } // namespace OHOS 312 #endif // MEDIA_FOUNDATION_AUDIO_TYPES_H 313