1 /* 2 * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com> 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 17 * 18 */ 19 20 #ifdef HAVE_CONFIG_H 21 #include <config.h> 22 #endif 23 24 #include <gst/gst.h> 25 26 #include "gstfdkaac.h" 27 #include "gstfdkaacenc.h" 28 #include "gstfdkaacdec.h" 29 30 /* *INDENT-OFF* */ 31 const GstFdkAacChannelLayout channel_layouts[] = { 32 /* MPEG 1: Mono */ 33 {1, MODE_1, {GST_AUDIO_CHANNEL_POSITION_MONO}}, 34 /* MPEG 2: Stereo */ 35 {2, MODE_2, { 36 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 37 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 38 }}, 39 /* MPEG 3: Stereo + Center */ 40 {3, MODE_1_2, { 41 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 42 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 43 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 44 }}, 45 /* MPEG 4: Stereo + Center + Rear center */ 46 {4, MODE_1_2_1, { 47 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 48 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 49 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 50 GST_AUDIO_CHANNEL_POSITION_REAR_CENTER, 51 }}, 52 /* MPEG 5: 5.0 Surround */ 53 {5, MODE_1_2_2, { /* Informal, with REAR */ 54 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 55 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 56 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 57 GST_AUDIO_CHANNEL_POSITION_REAR_LEFT, 58 GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT, 59 }}, 60 {5, MODE_1_2_2, { /* Formal, with SURROUND */ 61 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 62 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 63 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 64 GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT, 65 GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT, 66 }}, 67 {5, MODE_1_2_2, { /* Informal, with SIDE; FFmpeg produces this */ 68 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 69 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 70 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 71 GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT, 72 GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT, 73 }}, 74 /* MPEG 6: 5.1 Surround */ 75 {6, MODE_1_2_2_1, { /* Informal, with REAR */ 76 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 77 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 78 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 79 GST_AUDIO_CHANNEL_POSITION_REAR_LEFT, 80 GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT, 81 GST_AUDIO_CHANNEL_POSITION_LFE1, 82 }}, 83 {6, MODE_1_2_2_1, { /* Formal, with SURROUND */ 84 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 85 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 86 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 87 GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT, 88 GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT, 89 GST_AUDIO_CHANNEL_POSITION_LFE1, 90 }}, 91 {6, MODE_1_2_2_1, { /* Informal, with SIDE; FFmpeg produces this */ 92 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 93 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 94 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 95 GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT, 96 GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT, 97 GST_AUDIO_CHANNEL_POSITION_LFE1, 98 }}, 99 /* MPEG 7: SDDS for cinema */ 100 {8, MODE_1_2_2_2_1, { /* Informal, with REAR */ 101 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 102 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, 103 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, 104 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 105 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 106 GST_AUDIO_CHANNEL_POSITION_REAR_LEFT, 107 GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT, 108 GST_AUDIO_CHANNEL_POSITION_LFE1, 109 }}, 110 {8, MODE_1_2_2_2_1, { /* Formal, with SURROUND */ 111 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 112 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, 113 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, 114 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 115 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 116 GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT, 117 GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT, 118 GST_AUDIO_CHANNEL_POSITION_LFE1, 119 }}, 120 /* Note: 8-channel layouts might also have informal variants with 121 * SIDE instead of SURROUND, but they are more complicated. They 122 * can be added here if the need arises */ 123 #ifdef HAVE_FDK_AAC_2_0_0 124 /* MPEG 11: 6.1 Surround */ 125 {7, MODE_6_1, { /* Informal, with REAR */ 126 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 127 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 128 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 129 GST_AUDIO_CHANNEL_POSITION_REAR_LEFT, 130 GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT, 131 GST_AUDIO_CHANNEL_POSITION_REAR_CENTER, 132 GST_AUDIO_CHANNEL_POSITION_LFE1, 133 }}, 134 {7, MODE_6_1, { /* Formal, with SURROUND */ 135 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 136 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 137 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 138 GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT, 139 GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT, 140 GST_AUDIO_CHANNEL_POSITION_REAR_CENTER, 141 GST_AUDIO_CHANNEL_POSITION_LFE1, 142 }}, 143 /* MPEG 12: 7.1 Surround */ 144 {8, MODE_7_1_BACK, { /* Informal, with SIDE */ 145 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 146 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 147 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 148 GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT, 149 GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT, 150 GST_AUDIO_CHANNEL_POSITION_REAR_LEFT, 151 GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT, 152 GST_AUDIO_CHANNEL_POSITION_LFE1, 153 }}, 154 {8, MODE_7_1_BACK, { /* Formal, with SURROUND */ 155 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 156 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 157 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 158 GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT, 159 GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT, 160 GST_AUDIO_CHANNEL_POSITION_REAR_LEFT, 161 GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT, 162 GST_AUDIO_CHANNEL_POSITION_LFE1, 163 }}, 164 /* MPEG 14: 5.1.2 Surround */ 165 {8, MODE_7_1_TOP_FRONT, { /* Informal, with REAR */ 166 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 167 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 168 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 169 GST_AUDIO_CHANNEL_POSITION_REAR_LEFT, 170 GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT, 171 GST_AUDIO_CHANNEL_POSITION_LFE1, 172 GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT, 173 GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT, 174 }}, 175 {8, MODE_7_1_TOP_FRONT, { /* Formal, with SURROUND */ 176 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 177 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 178 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 179 GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT, 180 GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT, 181 GST_AUDIO_CHANNEL_POSITION_LFE1, 182 GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT, 183 GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT, 184 }}, 185 #endif 186 #ifdef HAVE_FDK_AAC_0_1_4 187 /* Non-standard PCE clone of mode 12 */ 188 {8, MODE_7_1_REAR_SURROUND, { /* Informal, with SIDE */ 189 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 190 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 191 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 192 GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT, 193 GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT, 194 GST_AUDIO_CHANNEL_POSITION_REAR_LEFT, 195 GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT, 196 GST_AUDIO_CHANNEL_POSITION_LFE1, 197 }}, 198 {8, MODE_7_1_REAR_SURROUND, { /* Formal, with SURROUND */ 199 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 200 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 201 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 202 GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT, 203 GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT, 204 GST_AUDIO_CHANNEL_POSITION_REAR_LEFT, 205 GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT, 206 GST_AUDIO_CHANNEL_POSITION_LFE1, 207 }}, 208 /* Non-standard PCE clone of mode 7 */ 209 {8, MODE_7_1_FRONT_CENTER,{ /* Informal, with REAR */ 210 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 211 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, 212 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, 213 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 214 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 215 GST_AUDIO_CHANNEL_POSITION_REAR_LEFT, 216 GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT, 217 GST_AUDIO_CHANNEL_POSITION_LFE1, 218 }}, 219 {8, MODE_7_1_FRONT_CENTER, { /* Formal, with SURROUND */ 220 GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER, 221 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, 222 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, 223 GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, 224 GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT, 225 GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT, 226 GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT, 227 GST_AUDIO_CHANNEL_POSITION_LFE1, 228 }}, 229 #endif 230 /* Iteration sentinel */ 231 {0, MODE_INVALID, {GST_AUDIO_CHANNEL_POSITION_INVALID}}, 232 }; 233 /* *INDENT-ON* */ 234