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