• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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