1 /* Simple Plugin API 2 * 3 * Copyright © 2018 Wim Taymans 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * DEALINGS IN THE SOFTWARE. 23 */ 24 25 #ifndef SPA_AUDIO_LAYOUT_H 26 #define SPA_AUDIO_LAYOUT_H 27 28 #ifdef __cplusplus 29 extern "C" { 30 #endif 31 32 #ifndef __FreeBSD__ 33 #include <endian.h> 34 #endif 35 36 #include <spa/param/audio/raw.h> 37 38 struct spa_audio_layout_info { 39 uint32_t n_channels; 40 uint32_t position[SPA_AUDIO_MAX_CHANNELS]; 41 }; 42 43 #define SPA_AUDIO_LAYOUT_Mono 1, { SPA_AUDIO_CHANNEL_MONO, } 44 #define SPA_AUDIO_LAYOUT_Stereo 2, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, } 45 #define SPA_AUDIO_LAYOUT_Quad 4, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 46 SPA_AUDIO_CHANNEL_RL, SPA_AUDIO_CHANNEL_RR, } 47 #define SPA_AUDIO_LAYOUT_Pentagonal 5, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 48 SPA_AUDIO_CHANNEL_RL, SPA_AUDIO_CHANNEL_RR, \ 49 SPA_AUDIO_CHANNEL_FC, } 50 #define SPA_AUDIO_LAYOUT_Hexagonal 6, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 51 SPA_AUDIO_CHANNEL_RL, SPA_AUDIO_CHANNEL_RR, \ 52 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_RC, } 53 #define SPA_AUDIO_LAYOUT_Octagonal 8, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 54 SPA_AUDIO_CHANNEL_RL, SPA_AUDIO_CHANNEL_RR, \ 55 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_RC, \ 56 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, } 57 #define SPA_AUDIO_LAYOUT_Cube 8, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR }, \ 58 SPA_AUDIO_CHANNEL_RL, SPA_AUDIO_CHANNEL_RR, \ 59 SPA_AUDIO_CHANNEL_TFL, SPA_AUDIO_CHANNEL_TFR, \ 60 SPA_AUDIO_CHANNEL_TRL, SPA_AUDIO_CHANNEL_TRR, } 61 62 63 #define SPA_AUDIO_LAYOUT_MPEG_1_0 SPA_AUDIO_LAYOUT_MONO 64 #define SPA_AUDIO_LAYOUT_MPEG_2_0 SPA_AUDIO_LAYOUT_STEREO 65 #define SPA_AUDIO_LAYOUT_MPEG_3_0A 3, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 66 SPA_AUDIO_CHANNEL_FC, } 67 #define SPA_AUDIO_LAYOUT_MPEG_3_0B 3, { SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_FL, \ 68 SPA_AUDIO_CHANNEL_FR, } 69 #define SPA_AUDIO_LAYOUT_MPEG_4_0A 4, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 70 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_RC, } 71 #define SPA_AUDIO_LAYOUT_MPEG_4_0B 4, { SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_FL, \ 72 SPA_AUDIO_CHANNEL_FR, SPA_AUDIO_CHANNEL_RC, } 73 #define SPA_AUDIO_LAYOUT_MPEG_5_0A 5, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 74 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_SL, \ 75 SPA_AUDIO_CHANNEL_SR, } 76 #define SPA_AUDIO_LAYOUT_MPEG_5_0B 5, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 77 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, \ 78 SPA_AUDIO_CHANNEL_FC, } 79 #define SPA_AUDIO_LAYOUT_MPEG_5_0C 5, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FC, \ 80 SPA_AUDIO_CHANNEL_FR, SPA_AUDIO_CHANNEL_SL, \ 81 SPA_AUDIO_CHANNEL_SR, } 82 #define SPA_AUDIO_LAYOUT_MPEG_5_0D 5, { SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_FL, \ 83 SPA_AUDIO_CHANNEL_FR, SPA_AUDIO_CHANNEL_SL, \ 84 SPA_AUDIO_CHANNEL_SR, } 85 #define SPA_AUDIO_LAYOUT_MPEG_5_1A 6, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 86 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, \ 87 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, } 88 #define SPA_AUDIO_LAYOUT_MPEG_5_1B 6, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 89 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, \ 90 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, } 91 #define SPA_AUDIO_LAYOUT_MPEG_5_1C 6, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FC, \ 92 SPA_AUDIO_CHANNEL_FR, SPA_AUDIO_CHANNEL_SL, \ 93 SPA_AUDIO_CHANNEL_SR, SPA_AUDIO_CHANNEL_LFE, } 94 #define SPA_AUDIO_LAYOUT_MPEG_5_1D 6, { SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_FL, \ 95 SPA_AUDIO_CHANNEL_FR, SPA_AUDIO_CHANNEL_SL, \ 96 SPA_AUDIO_CHANNEL_SR, SPA_AUDIO_CHANNEL_LFE, } 97 #define SPA_AUDIO_LAYOUT_MPEG_6_1A 7, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 98 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, \ 99 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, \ 100 SPA_AUDIO_CHANNEL_RC, } 101 #define SPA_AUDIO_LAYOUT_MPEG_7_1A 8, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 102 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, \ 103 SPA_AUDIO_CHANNEL_RL, SPA_AUDIO_CHANNEL_RR, \ 104 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, } 105 #define SPA_AUDIO_LAYOUT_MPEG_7_1B 8, { SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_SL, \ 106 SPA_AUDIO_CHANNEL_SR, SPA_AUDIO_CHANNEL_FL, \ 107 SPA_AUDIO_CHANNEL_FR, SPA_AUDIO_CHANNEL_RL, \ 108 SPA_AUDIO_CHANNEL_RR, SPA_AUDIO_CHANNEL_LFE, } 109 #define SPA_AUDIO_LAYOUT_MPEG_7_1C 8, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 110 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, \ 111 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, \ 112 SPA_AUDIO_CHANNEL_RL, SPA_AUDIO_CHANNEL_RR, } 113 114 115 #define SPA_AUDIO_LAYOUT_2_1 3, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 116 SPA_AUDIO_CHANNEL_LFE, } 117 118 #define SPA_AUDIO_LAYOUT_2RC 3, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 119 SPA_AUDIO_CHANNEL_RC, } 120 #define SPA_AUDIO_LAYOUT_2FC 3, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 121 SPA_AUDIO_CHANNEL_FC, } 122 123 #define SPA_AUDIO_LAYOUT_3_1 4, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 124 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, } 125 #define SPA_AUDIO_LAYOUT_4_0 4, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 126 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_RC, } 127 #define SPA_AUDIO_LAYOUT_2_2 4, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 128 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, } 129 130 #define SPA_AUDIO_LAYOUT_4_1 5, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 131 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, \ 132 SPA_AUDIO_CHANNEL_RC, } 133 #define SPA_AUDIO_LAYOUT_5_0 5, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 134 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_SL, \ 135 SPA_AUDIO_CHANNEL_SR, } 136 #define SPA_AUDIO_LAYOUT_5_0R 5, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 137 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_RL, \ 138 SPA_AUDIO_CHANNEL_RR, } 139 #define SPA_AUDIO_LAYOUT_5_1 6, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 140 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, \ 141 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, } 142 #define SPA_AUDIO_LAYOUT_5_1R 6, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 143 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, \ 144 SPA_AUDIO_CHANNEL_RL, SPA_AUDIO_CHANNEL_RR, } 145 #define SPA_AUDIO_LAYOUT_6_0 6, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 146 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_RC, \ 147 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, } 148 #define SPA_AUDIO_LAYOUT_6_0F 6, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 149 SPA_AUDIO_CHANNEL_FLC, SPA_AUDIO_CHANNEL_FRC, \ 150 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, } 151 #define SPA_AUDIO_LAYOUT_6_1 7, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 152 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, \ 153 SPA_AUDIO_CHANNEL_RC, SPA_AUDIO_CHANNEL_SL, \ 154 SPA_AUDIO_CHANNEL_SR, } 155 #define SPA_AUDIO_LAYOUT_6_1F 7, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 156 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, \ 157 SPA_AUDIO_CHANNEL_RL, SPA_AUDIO_CHANNEL_RR, \ 158 SPA_AUDIO_CHANNEL_RC, } 159 #define SPA_AUDIO_LAYOUT_7_0 7, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 160 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_RL, \ 161 SPA_AUDIO_CHANNEL_RR, SPA_AUDIO_CHANNEL_SL, \ 162 SPA_AUDIO_CHANNEL_SR, } 163 #define SPA_AUDIO_LAYOUT_7_0F 7, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 164 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_FLC, \ 165 SPA_AUDIO_CHANNEL_FRC, SPA_AUDIO_CHANNEL_SL, \ 166 SPA_AUDIO_CHANNEL_SR, } 167 #define SPA_AUDIO_LAYOUT_7_1 8, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 168 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, \ 169 SPA_AUDIO_CHANNEL_RL, SPA_AUDIO_CHANNEL_RR, \ 170 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, } 171 #define SPA_AUDIO_LAYOUT_7_1W 8, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 172 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, \ 173 SPA_AUDIO_CHANNEL_FLC, SPA_AUDIO_CHANNEL_FRC, \ 174 SPA_AUDIO_CHANNEL_SL, SPA_AUDIO_CHANNEL_SR, } 175 #define SPA_AUDIO_LAYOUT_7_1WR 8, { SPA_AUDIO_CHANNEL_FL, SPA_AUDIO_CHANNEL_FR, \ 176 SPA_AUDIO_CHANNEL_FC, SPA_AUDIO_CHANNEL_LFE, \ 177 SPA_AUDIO_CHANNEL_RL, SPA_AUDIO_CHANNEL_RR, \ 178 SPA_AUDIO_CHANNEL_FLC, SPA_AUDIO_CHANNEL_FRC, } 179 180 #ifdef __cplusplus 181 } /* extern "C" */ 182 #endif 183 184 #endif /* SPA_AUDIO_LAYOUT_H */ 185