1/* 2 * Copyright (C) 2023 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/** 17 * @addtogroup MediaFoundation 18 * @{ 19 * 20 * @brief Provides APIs for media foundation. 21 * 22 * @since 11 23 */ 24 25/** 26 * @file native_audio_channel_layout.h 27 * 28 * @brief The channel layout indicates the appearance and order of the speakers for recording or playback. 29 * 30 * @kit AVCodecKit 31 * @library NA 32 * @syscap SystemCapability.Multimedia.Media.Core 33 * @since 11 34 */ 35 36#ifndef NATIVE_AUDIO_CHANNEL_LAYOUT_H 37#define NATIVE_AUDIO_CHANNEL_LAYOUT_H 38 39#include <stdint.h> 40 41#ifdef __cplusplus 42extern "C" { 43#endif 44 45/** 46 * @brief Audio Channel Set 47 * 48 * A 64-bit integer with bits set for each channel. 49 * @syscap SystemCapability.Multimedia.Media.Core 50 * @since 11 51 */ 52typedef enum OH_AudioChannelSet { 53 /** Channel set For FRONT-LEFT position */ 54 CH_SET_FRONT_LEFT = 1ULL << 0U, 55 56 /** Channel set For FRONT_RIGHT position */ 57 CH_SET_FRONT_RIGHT = 1ULL << 1U, 58 59 /** Channel set For FRONT_CENTER position */ 60 CH_SET_FRONT_CENTER = 1ULL << 2U, 61 62 /** Channel set For LOW_FREQUENCY position */ 63 CH_SET_LOW_FREQUENCY = 1ULL << 3U, 64 65 /** Channel set For BACK_LEFT position */ 66 CH_SET_BACK_LEFT = 1ULL << 4U, 67 68 /** Channel set For BACK_RIGHT position */ 69 CH_SET_BACK_RIGHT = 1ULL << 5U, 70 71 /** Channel set For FRONT_LEFT_OF_CENTER position */ 72 CH_SET_FRONT_LEFT_OF_CENTER = 1ULL << 6U, 73 74 /** Channel set For FRONT_RIGHT_OF_CENTER position */ 75 CH_SET_FRONT_RIGHT_OF_CENTER = 1ULL << 7U, 76 77 /** Channel set For BACK_CENTER position */ 78 CH_SET_BACK_CENTER = 1ULL << 8U, 79 80 /** Channel set For SIDE_LEFT position */ 81 CH_SET_SIDE_LEFT = 1ULL << 9U, 82 83 /** Channel set For SIDE_RIGHT position */ 84 CH_SET_SIDE_RIGHT = 1ULL << 10U, 85 86 /** Channel set For TOP_CENTER position */ 87 CH_SET_TOP_CENTER = 1ULL << 11U, 88 89 /** Channel set For TOP_FRONT_LEFT position */ 90 CH_SET_TOP_FRONT_LEFT = 1ULL << 12U, 91 92 /** Channel set For TOP_FRONT_CENTER position */ 93 CH_SET_TOP_FRONT_CENTER = 1ULL << 13U, 94 95 /** Channel set For TOP_FRONT_RIGHT position */ 96 CH_SET_TOP_FRONT_RIGHT = 1ULL << 14U, 97 98 /** Channel set For TOP_BACK_LEFT position */ 99 CH_SET_TOP_BACK_LEFT = 1ULL << 15U, 100 101 /** Channel set For TOP_BACK_CENTER position */ 102 CH_SET_TOP_BACK_CENTER = 1ULL << 16U, 103 104 /** Channel set For TOP_BACK_RIGHT position */ 105 CH_SET_TOP_BACK_RIGHT = 1ULL << 17U, 106 107 /** Channel set For STEREO_LEFT position */ 108 CH_SET_STEREO_LEFT = 1ULL << 29U, 109 110 /** Channel set For STEREO_RIGHT position */ 111 CH_SET_STEREO_RIGHT = 1ULL << 30U, 112 113 /** Channel set For WIDE_LEFT position */ 114 CH_SET_WIDE_LEFT = 1ULL << 31U, 115 116 /** Channel set For WIDE_RIGHT position */ 117 CH_SET_WIDE_RIGHT = 1ULL << 32U, 118 119 /** Channel set For SURROUND_DIRECT_LEFT position */ 120 CH_SET_SURROUND_DIRECT_LEFT = 1ULL << 33U, 121 122 /** Channel set For SURROUND_DIRECT_RIGHT position */ 123 CH_SET_SURROUND_DIRECT_RIGHT = 1ULL << 34U, 124 125 /** Channel set For LOW_FREQUENCY_2 position */ 126 CH_SET_LOW_FREQUENCY_2 = 1ULL << 35U, 127 128 /** Channel set For TOP_SIDE_LEFT position */ 129 CH_SET_TOP_SIDE_LEFT = 1ULL << 36U, 130 131 /** Channel set For TOP_SIDE_RIGHT position */ 132 CH_SET_TOP_SIDE_RIGHT = 1ULL << 37U, 133 134 /** Channel set For BOTTOM_FRONT_CENTER position */ 135 CH_SET_BOTTOM_FRONT_CENTER = 1ULL << 38U, 136 137 /** Channel set For BOTTOM_FRONT_LEFT position */ 138 CH_SET_BOTTOM_FRONT_LEFT = 1ULL << 39U, 139 140 /** Channel set For BOTTOM_FRONT_RIGHT position */ 141 CH_SET_BOTTOM_FRONT_RIGHT = 1ULL << 40U 142} OH_AudioChannelSet; 143 144/** 145 * @brief Ambisonic attribute set. 146 * 147 * A set of 64-bit integers indicate the ambisonic attributes. 148 * @syscap SystemCapability.Multimedia.Media.Core 149 * @since 11 150 */ 151typedef enum OH_AmbAttributeSet { 152 /** Ambisonic attribute: order 1 */ 153 AMB_ORD_1 = 1ULL << 0U, 154 155 /** Ambisonic attribute: order 2 */ 156 AMB_ORD_2 = 2ULL << 0U, 157 158 /** Ambisonic attribute: order 3 */ 159 AMB_ORD_3 = 3ULL << 0U, 160 161 /** Ambisonic attribute: ACN Component Ordering */ 162 AMB_COM_ACN = 0ULL << 8U, 163 164 /** Ambisonic attribute: FUMA Component Ordering */ 165 AMB_COM_FUMA = 1ULL << 8U, 166 167 /** Ambisonic attribute: N3D Normalization */ 168 AMB_NOR_N3D = 0ULL << 12U, 169 170 /** Ambisonic attribute: SN3D Normalization */ 171 AMB_NOR_SN3D = 1ULL << 12U, 172 173 /** Channel layout: Ambisonic mode */ 174 AMB_MODE = 1ULL << 44U 175} OH_AmbAttributeSet; 176 177/** 178 * @brief Audio Channel Layout 179 * 180 * A 64-bit integer indicates that the appearance and order of the speakers for recording or playback. 181 * @syscap SystemCapability.Multimedia.Media.Core 182 * @since 11 183 */ 184typedef enum OH_AudioChannelLayout { 185 /** Unknown Channel Layout */ 186 CH_LAYOUT_UNKNOWN = 0ULL, 187 188 /** Channel Layout For Mono, 1 channel in total */ 189 CH_LAYOUT_MONO = CH_SET_FRONT_CENTER, 190 191 /** Channel Layout For Stereo, 2 channels in total */ 192 CH_LAYOUT_STEREO = CH_SET_FRONT_LEFT | CH_SET_FRONT_RIGHT, 193 194 /** Channel Layout For Stereo-Downmix, 2 channels in total */ 195 CH_LAYOUT_STEREO_DOWNMIX = CH_SET_STEREO_LEFT | CH_SET_STEREO_RIGHT, 196 197 /** Channel Layout For 2.1, 3 channels in total */ 198 CH_LAYOUT_2POINT1 = CH_LAYOUT_STEREO | CH_SET_LOW_FREQUENCY, 199 200 /** Channel Layout For 3.0, 3 channels in total */ 201 CH_LAYOUT_3POINT0 = CH_LAYOUT_STEREO | CH_SET_BACK_CENTER, 202 203 /** Channel Layout For Surround, 3 channels in total */ 204 CH_LAYOUT_SURROUND = CH_LAYOUT_STEREO | CH_SET_FRONT_CENTER, 205 206 /** Channel Layout For 3.1, 4 channels in total */ 207 CH_LAYOUT_3POINT1 = CH_LAYOUT_SURROUND | CH_SET_LOW_FREQUENCY, 208 209 /** Channel Layout For 4.0, 4 channels in total */ 210 CH_LAYOUT_4POINT0 = CH_LAYOUT_SURROUND | CH_SET_BACK_CENTER, 211 212 /** Channel Layout For Quad-Side, 4 channels in total */ 213 CH_LAYOUT_QUAD_SIDE = CH_LAYOUT_STEREO | CH_SET_SIDE_LEFT | CH_SET_SIDE_RIGHT, 214 215 /** Channel Layout For Quad, 4 channels in total */ 216 CH_LAYOUT_QUAD = CH_LAYOUT_STEREO | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT, 217 218 /** Channel Layout For 2.0.2, 4 channels in total */ 219 CH_LAYOUT_2POINT0POINT2 = CH_LAYOUT_STEREO | CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT, 220 221 /** Channel Layout For ORDER1-ACN-N3D First Order Ambisonic(FOA), 4 channels in total */ 222 CH_LAYOUT_AMB_ORDER1_ACN_N3D = AMB_MODE | AMB_ORD_1 | AMB_COM_ACN | AMB_NOR_N3D, 223 224 /** Channel Layout For ORDER1-ACN-SN3D FOA, 4 channels in total */ 225 CH_LAYOUT_AMB_ORDER1_ACN_SN3D = AMB_MODE | AMB_ORD_1 | AMB_COM_ACN | AMB_NOR_SN3D, 226 227 /** Channel Layout For ORDER1-FUMA FOA, 4 channels in total */ 228 CH_LAYOUT_AMB_ORDER1_FUMA = AMB_MODE | AMB_ORD_1 | AMB_COM_FUMA, 229 230 /** Channel Layout For 4.1, 5 channels in total */ 231 CH_LAYOUT_4POINT1 = CH_LAYOUT_4POINT0 | CH_SET_LOW_FREQUENCY, 232 233 /** Channel Layout For 5.0, 5 channels in total */ 234 CH_LAYOUT_5POINT0 = CH_LAYOUT_SURROUND | CH_SET_SIDE_LEFT | CH_SET_SIDE_RIGHT, 235 236 /** Channel Layout For 5.0-Back, 5 channels in total */ 237 CH_LAYOUT_5POINT0_BACK = CH_LAYOUT_SURROUND | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT, 238 239 /** Channel Layout For 2.1.2, 5 channels in total */ 240 CH_LAYOUT_2POINT1POINT2 = CH_LAYOUT_2POINT0POINT2 | CH_SET_LOW_FREQUENCY, 241 242 /** Channel Layout For 3.0.2, 5 channels in total */ 243 CH_LAYOUT_3POINT0POINT2 = CH_LAYOUT_2POINT0POINT2 | CH_SET_FRONT_CENTER, 244 245 /** Channel Layout For 5.1, 6 channels in total */ 246 CH_LAYOUT_5POINT1 = CH_LAYOUT_5POINT0 | CH_SET_LOW_FREQUENCY, 247 248 /** Channel Layout For 5.1-Back, 6 channels in total */ 249 CH_LAYOUT_5POINT1_BACK = CH_LAYOUT_5POINT0_BACK | CH_SET_LOW_FREQUENCY, 250 251 /** Channel Layout For 6.0, 6 channels in total */ 252 CH_LAYOUT_6POINT0 = CH_LAYOUT_5POINT0 | CH_SET_BACK_CENTER, 253 254 /** Channel Layout For 3.1.2, 6 channels in total */ 255 CH_LAYOUT_3POINT1POINT2 = CH_LAYOUT_3POINT1 | CH_SET_TOP_FRONT_LEFT | CH_SET_TOP_FRONT_RIGHT, 256 257 /** Channel Layout For 6.0-Front, 6 channels in total */ 258 CH_LAYOUT_6POINT0_FRONT = CH_LAYOUT_QUAD_SIDE | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER, 259 260 /** Channel Layout For Hexagonal, 6 channels in total */ 261 CH_LAYOUT_HEXAGONAL = CH_LAYOUT_5POINT0_BACK | CH_SET_BACK_CENTER, 262 263 /** Channel Layout For 6.1, 7 channels in total */ 264 CH_LAYOUT_6POINT1 = CH_LAYOUT_5POINT1 | CH_SET_BACK_CENTER, 265 266 /** Channel Layout For 6.1-Back, 7 channels in total */ 267 CH_LAYOUT_6POINT1_BACK = CH_LAYOUT_5POINT1_BACK | CH_SET_BACK_CENTER, 268 269 /** Channel Layout For 6.1-Front, 7 channels in total */ 270 CH_LAYOUT_6POINT1_FRONT = CH_LAYOUT_6POINT0_FRONT | CH_SET_LOW_FREQUENCY, 271 272 /** Channel Layout For 7.0, 7 channels in total */ 273 CH_LAYOUT_7POINT0 = CH_LAYOUT_5POINT0 | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT, 274 275 /** Channel Layout For 7.0-Front, 7 channels in total */ 276 CH_LAYOUT_7POINT0_FRONT = CH_LAYOUT_5POINT0 | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER, 277 278 /** Channel Layout For 7.1, 8 channels in total */ 279 CH_LAYOUT_7POINT1 = CH_LAYOUT_5POINT1 | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT, 280 281 /** Channel Layout For Octagonal, 8 channels in total */ 282 CH_LAYOUT_OCTAGONAL = CH_LAYOUT_5POINT0 | CH_SET_BACK_LEFT | CH_SET_BACK_CENTER | CH_SET_BACK_RIGHT, 283 284 /** Channel Layout For 5.1.2, 8 channels in total */ 285 CH_LAYOUT_5POINT1POINT2 = CH_LAYOUT_5POINT1 | CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT, 286 287 /** Channel Layout For 7.1-Wide, 8 channels in total */ 288 CH_LAYOUT_7POINT1_WIDE = CH_LAYOUT_5POINT1 | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER, 289 290 /** Channel Layout For 7.1-Wide-Back, 8 channels in total */ 291 CH_LAYOUT_7POINT1_WIDE_BACK = CH_LAYOUT_5POINT1_BACK | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER, 292 293 /** Channel Layout For ORDER2-ACN-N3D Higher Order Ambisonics(HOA), 9 channels in total */ 294 CH_LAYOUT_AMB_ORDER2_ACN_N3D = AMB_MODE | AMB_ORD_2 | AMB_COM_ACN | AMB_NOR_N3D, 295 296 /** Channel Layout For ORDER2-ACN-SN3D HOA, 9 channels in total */ 297 CH_LAYOUT_AMB_ORDER2_ACN_SN3D = AMB_MODE | AMB_ORD_2 | AMB_COM_ACN | AMB_NOR_SN3D, 298 299 /** Channel Layout For ORDER2-FUMA HOA, 9 channels in total */ 300 CH_LAYOUT_AMB_ORDER2_FUMA = AMB_MODE | AMB_ORD_2 | AMB_COM_FUMA, 301 302 /** Channel Layout For 5.1.4, 10 channels in total */ 303 CH_LAYOUT_5POINT1POINT4 = CH_LAYOUT_5POINT1 | CH_SET_TOP_FRONT_LEFT | CH_SET_TOP_FRONT_RIGHT | 304 CH_SET_TOP_BACK_LEFT | CH_SET_TOP_BACK_RIGHT, 305 306 /** Channel Layout For 7.1.2, 10 channels in total */ 307 CH_LAYOUT_7POINT1POINT2 = CH_LAYOUT_7POINT1 | CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT, 308 309 /** Channel Layout For 7.1.4, 12 channels in total */ 310 CH_LAYOUT_7POINT1POINT4 = CH_LAYOUT_7POINT1 | CH_SET_TOP_FRONT_LEFT | CH_SET_TOP_FRONT_RIGHT | 311 CH_SET_TOP_BACK_LEFT | CH_SET_TOP_BACK_RIGHT, 312 313 /** Channel Layout For 10.2, 12 channels in total */ 314 CH_LAYOUT_10POINT2 = CH_SET_FRONT_LEFT | CH_SET_FRONT_RIGHT | CH_SET_FRONT_CENTER | CH_SET_TOP_FRONT_LEFT | 315 CH_SET_TOP_FRONT_RIGHT | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT | CH_SET_BACK_CENTER | 316 CH_SET_SIDE_LEFT | CH_SET_SIDE_RIGHT | CH_SET_WIDE_LEFT | CH_SET_WIDE_RIGHT, 317 318 /** Channel Layout For 9.1.4, 14 channels in total */ 319 CH_LAYOUT_9POINT1POINT4 = CH_LAYOUT_7POINT1POINT4 | CH_SET_WIDE_LEFT | CH_SET_WIDE_RIGHT, 320 321 /** Channel Layout For 9.1.6, 16 channels in total */ 322 CH_LAYOUT_9POINT1POINT6 = CH_LAYOUT_9POINT1POINT4 | CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT, 323 324 /** Channel Layout For Hexadecagonal, 16 channels in total */ 325 CH_LAYOUT_HEXADECAGONAL = CH_LAYOUT_OCTAGONAL | CH_SET_WIDE_LEFT | CH_SET_WIDE_RIGHT | CH_SET_TOP_BACK_LEFT | 326 CH_SET_TOP_BACK_RIGHT | CH_SET_TOP_BACK_CENTER | CH_SET_TOP_FRONT_CENTER | 327 CH_SET_TOP_FRONT_LEFT | CH_SET_TOP_FRONT_RIGHT, 328 329 /** Channel Layout For ORDER3-ACN-N3D HOA, 16 channels in total */ 330 CH_LAYOUT_AMB_ORDER3_ACN_N3D = AMB_MODE | AMB_ORD_3 | AMB_COM_ACN | AMB_NOR_N3D, 331 332 /** Channel Layout For ORDER3-ACN-SN3D HOA, 16 channels in total */ 333 CH_LAYOUT_AMB_ORDER3_ACN_SN3D = AMB_MODE | AMB_ORD_3 | AMB_COM_ACN | AMB_NOR_SN3D, 334 335 /** Channel Layout For ORDER3-FUMA HOA, 16 channels in total */ 336 CH_LAYOUT_AMB_ORDER3_FUMA = AMB_MODE | AMB_ORD_3 | AMB_COM_FUMA, 337 338 /** Channel Layout For 22.2, 24 channels in total */ 339 CH_LAYOUT_22POINT2 = CH_LAYOUT_7POINT1POINT4 | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER | 340 CH_SET_BACK_CENTER | CH_SET_TOP_CENTER | CH_SET_TOP_FRONT_CENTER | CH_SET_TOP_BACK_CENTER | 341 CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT | CH_SET_BOTTOM_FRONT_LEFT | 342 CH_SET_BOTTOM_FRONT_RIGHT | CH_SET_BOTTOM_FRONT_CENTER | CH_SET_LOW_FREQUENCY_2 343} OH_AudioChannelLayout; 344 345#ifdef __cplusplus 346} 347#endif 348 349#endif // NATIVE_AUDIO_CHANNEL_LAYOUT_H 350 351/** @} */