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