FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
dolby_e.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2017 foo86
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #ifndef AVCODEC_DOLBY_E_H
22 #define AVCODEC_DOLBY_E_H
23 
24 #include "libavutil/float_dsp.h"
25 #include "libavutil/libm.h"
26 #include "libavutil/mem.h"
27 
28 #include "internal.h"
29 #include "get_bits.h"
30 #include "kbdwin.h"
31 #include "fft.h"
32 
33 #define FRAME_SAMPLES 1792
34 
35 #define MAX_PROG_CONF 23
36 #define MAX_PROGRAMS 8
37 #define MAX_CHANNELS 8
38 #define MAX_SEGMENTS 2
39 
40 #define MAX_GROUPS 8
41 #define MAX_EXPONENTS 304
42 #define MAX_MANTISSAS 1024
43 
44 #define MAX_MSTR_EXP 2
45 #define MAX_BIAS_EXP 50
46 
47 typedef struct DBEGroup {
50  uint16_t exp_ofs;
51  uint16_t mnt_ofs;
55  uint16_t win_len;
56  uint16_t dst_ofs;
57  uint16_t win_ofs;
58  uint16_t src_ofs;
59 } DBEGroup;
60 
61 typedef struct DBEChannel {
62  int gr_code;
63  int bw_code;
64 
65  int nb_groups;
68 
73 
75 } DBEChannel;
76 
77 typedef struct DBEContext {
80 
83 
84  int word_bits;
87 
88  int prog_conf;
91 
92  int fr_code;
94 
98 
102 
104 
106 
108 
111 
113 } DBEContext;
114 
115 static const uint8_t nb_programs_tab[MAX_PROG_CONF + 1] = {
116  2, 3, 2, 3, 4, 5, 4, 5, 6, 7, 8, 1, 2, 3, 3, 4, 5, 6, 1, 2, 3, 4, 1, 1
117 };
118 
119 static const uint8_t nb_channels_tab[MAX_PROG_CONF + 1] = {
120  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4, 8, 8
121 };
122 
123 static const int8_t lfe_channel_tab[MAX_PROG_CONF + 1] = {
124  5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,
125  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5
126 };
127 
128 static const uint8_t ch_reorder_4[4] = { 0, 2, 1, 3 };
129 static const uint8_t ch_reorder_6[6] = { 0, 2, 4, 1, 3, 5 };
130 static const uint8_t ch_reorder_8[8] = { 0, 2, 6, 4, 1, 3, 7, 5 };
131 static const uint8_t ch_reorder_n[8] = { 0, 2, 4, 6, 1, 3, 5, 7 };
132 
133 static const uint16_t sample_rate_tab[16] = {
134  0, 42965, 43008, 44800, 53706, 53760
135 };
136 
137 static const uint8_t nb_groups_tab[4] = { 1, 8, 7, 1 };
138 
139 static const uint8_t nb_mstr_exp_tab[4] = { 2, 2, 2, 1 };
140 
141 static const uint8_t nb_mantissa_38[38] = {
142  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
143  2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6,
144  7, 8, 9, 10, 11, 12,
145 };
146 
147 static const uint8_t nb_mantissa_44[44] = {
148  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
149  2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 6, 7, 7,
150  8, 9, 10, 11, 12, 13, 15, 16, 18, 20, 22, 25,
151 };
152 
153 static const uint8_t nb_mantissa_50[50] = {
154  1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3,
155  3, 4, 4, 5, 5, 6, 6, 7, 8, 9, 9, 10, 12, 13, 14, 16,
156  18, 19, 22, 24, 27, 29, 32, 36, 40, 44, 49, 54, 60, 66, 74, 82,
157  90, 100,
158 };
159 
160 static const uint8_t imdct_bits_tab[3] = { 8, 9, 11 };
161 
162 static const DBEGroup grp_tab_0[1] = {
163  { 50, { 27, 23 }, 0, 0, nb_mantissa_50, 2, 0, 1152, 0, 1408, 0 },
164 };
165 
166 static const DBEGroup grp_tab_1[8] = {
167  { 38, { 12, 26 }, 0, 0, nb_mantissa_38, 0, 0, 192, 0, 256, 0 },
168  { 38, { 12, 26 }, 38, 128, nb_mantissa_38, 0, 1, 256, 64, 448, 0 },
169  { 38, { 12, 26 }, 76, 256, nb_mantissa_38, 0, 1, 256, 192, 704, 0 },
170  { 38, { 12, 26 }, 114, 384, nb_mantissa_38, 0, 1, 256, 320, 0, 0 },
171  { 38, { 12, 26 }, 152, 512, nb_mantissa_38, 0, 1, 256, 448, 0, 0 },
172  { 38, { 12, 26 }, 190, 640, nb_mantissa_38, 0, 1, 256, 576, 0, 0 },
173  { 38, { 12, 26 }, 228, 768, nb_mantissa_38, 0, 1, 256, 704, 0, 0 },
174  { 38, { 12, 26 }, 266, 896, nb_mantissa_38, 0, 1, 256, 832, 0, 0 },
175 };
176 
177 static const DBEGroup grp_tab_2[7] = {
178  { 38, { 12, 26 }, 0, 0, nb_mantissa_38, 0, 0, 192, 0, 256, 0 },
179  { 38, { 12, 26 }, 38, 128, nb_mantissa_38, 0, 1, 256, 64, 448, 0 },
180  { 38, { 12, 26 }, 76, 256, nb_mantissa_38, 0, 1, 256, 192, 704, 0 },
181  { 38, { 12, 26 }, 114, 384, nb_mantissa_38, 0, 1, 256, 320, 0, 0 },
182  { 38, { 12, 26 }, 152, 512, nb_mantissa_38, 0, 1, 256, 448, 0, 0 },
183  { 38, { 12, 26 }, 190, 640, nb_mantissa_38, 0, 1, 256, 576, 0, 0 },
184  { 44, { 19, 25 }, 228, 768, nb_mantissa_44, 1, 1, 448, 704, 960, 64 },
185 };
186 
187 static const DBEGroup grp_tab_3[1] = {
188  { 21, { 21 }, 0, 0, nb_mantissa_50, 2, 0, 1152, 0, 1408, 0 },
189 };
190 
191 static const DBEGroup grp_tab_4[1] = {
192  { 50, { 27, 23 }, 0, 0, nb_mantissa_50, 2, 2, 1152, 0, 1408, 896 },
193 };
194 
195 static const DBEGroup grp_tab_5[8] = {
196  { 38, { 12, 26 }, 0, 0, nb_mantissa_38, 0, 1, 256, 64, 0, 0 },
197  { 38, { 12, 26 }, 38, 128, nb_mantissa_38, 0, 1, 256, 192, 0, 0 },
198  { 38, { 12, 26 }, 76, 256, nb_mantissa_38, 0, 1, 256, 320, 0, 0 },
199  { 38, { 12, 26 }, 114, 384, nb_mantissa_38, 0, 1, 256, 448, 0, 0 },
200  { 38, { 12, 26 }, 152, 512, nb_mantissa_38, 0, 1, 256, 576, 0, 0 },
201  { 38, { 12, 26 }, 190, 640, nb_mantissa_38, 0, 1, 256, 704, 3008, 0 },
202  { 38, { 12, 26 }, 228, 768, nb_mantissa_38, 0, 1, 256, 832, 2752, 0 },
203  { 38, { 12, 26 }, 266, 896, nb_mantissa_38, 0, 2, 192, 960, 2560, 64 },
204 };
205 
206 static const DBEGroup grp_tab_6[7] = {
207  { 44, { 19, 25 }, 0, 0, nb_mantissa_44, 1, 1, 448, 0, 3264, 0 },
208  { 38, { 12, 26 }, 44, 256, nb_mantissa_38, 0, 1, 256, 320, 0, 0 },
209  { 38, { 12, 26 }, 82, 384, nb_mantissa_38, 0, 1, 256, 448, 0, 0 },
210  { 38, { 12, 26 }, 120, 512, nb_mantissa_38, 0, 1, 256, 576, 0, 0 },
211  { 38, { 12, 26 }, 158, 640, nb_mantissa_38, 0, 1, 256, 704, 3008, 0 },
212  { 38, { 12, 26 }, 196, 768, nb_mantissa_38, 0, 1, 256, 832, 2752, 0 },
213  { 38, { 12, 26 }, 234, 896, nb_mantissa_38, 0, 2, 192, 960, 2560, 64 },
214 };
215 
216 static const DBEGroup grp_tab_7[1] = {
217  { 21, { 21 }, 0, 0, nb_mantissa_50, 2, 2, 1152, 0, 1408, 896 },
218 };
219 
220 static const DBEGroup *const frm_ofs_tab[2][4] = {
221  { grp_tab_0, grp_tab_1, grp_tab_2, grp_tab_3 },
222  { grp_tab_4, grp_tab_5, grp_tab_6, grp_tab_7 }
223 };
224 
225 static const uint8_t mantissa_size1[16][4] = {
226  { 0, 0, 0, 0 }, { 2, 1, 1, 1 }, { 3, 2, 1, 1 }, { 4, 3, 2, 1 },
227  { 5, 4, 3, 2 }, { 6, 5, 4, 3 }, { 7, 6, 5, 4 }, { 8, 7, 6, 5 },
228  { 9, 8, 7, 6 }, { 10, 9, 8, 7 }, { 11, 10, 9, 8 }, { 12, 11, 10, 9 },
229  { 13, 12, 11, 10 }, { 14, 13, 12, 11 }, { 15, 14, 13, 12 }, { 16, 15, 14, 13 },
230 };
231 
232 static const uint8_t mantissa_size2[16][4] = {
233  { 0, 0, 0, 0 }, { 2, 1, 2, 2 }, { 3, 2, 3, 3 }, { 4, 3, 4, 4 },
234  { 5, 4, 5, 5 }, { 6, 5, 6, 6 }, { 7, 6, 7, 7 }, { 8, 7, 8, 8 },
235  { 9, 8, 9, 9 }, { 10, 9, 10, 10 }, { 11, 10, 11, 11 }, { 12, 11, 12, 12 },
236  { 13, 12, 13, 13 }, { 14, 13, 14, 14 }, { 15, 14, 15, 15 }, { 16, 15, 16, 16 },
237 };
238 
239 static const float start_window[192] = {
240  0.00161569379826, 0.00185748233347, 0.00198562758548, 0.00207834078104,
241  0.00215717748523, 0.00223067096393, 0.00230299213147, 0.00237651215396,
242  0.00245275561606, 0.00253281402069, 0.00261754673613, 0.00270768786168,
243  0.00280390761895, 0.00290684998656, 0.00301715751161, 0.00313548872798,
244  0.00326253122934, 0.00339901215995, 0.00354570716636, 0.00370344845023,
245  0.00387313232586, 0.00405572653911, 0.00425227750970, 0.00446391759265,
246  0.00469187240551, 0.00493746822816, 0.00520213944619, 0.00548743597507,
247  0.00579503056737, 0.00612672586953, 0.00648446105606, 0.00687031782873,
248  0.00728652552677, 0.00773546505205, 0.00821967127415, 0.00874183354619,
249  0.00930479393832, 0.00991154278653, 0.01056521116692, 0.01126905994567,
250  0.01202646513050, 0.01284089936559, 0.01371590957417, 0.01465509096066,
251  0.01566205783408, 0.01674041199523, 0.01789370972358, 0.01912542867865,
252  0.02043893626265, 0.02183746113793, 0.02332406961796, 0.02490164852364,
253  0.02657289580178, 0.02834031974193, 0.03020624702903, 0.03217283918354,
254  0.03424211623810, 0.03641598586180, 0.03869627565015, 0.04108476601498,
255  0.04358322107390, 0.04619341515939, 0.04891715301882, 0.05175628239149,
256 
257  0.05471237327267, 0.05778734733755, 0.06098291402413, 0.06430101352084,
258  0.06774345212186, 0.07131188644726, 0.07500780649199, 0.07883251748595,
259  0.08278712056651, 0.08687249228061, 0.09108926295730, 0.09543779401074,
260  0.09991815425851, 0.10453009536427, 0.10927302653894, 0.11414598865987,
261  0.11914762799220, 0.12427616972097, 0.12952939152560, 0.13490459744934,
262  0.14039859233595, 0.14600765712201, 0.15172752528722, 0.15755336077528,
263  0.16347973770491, 0.16950062219342, 0.17560935661442, 0.18179864660619,
264  0.18806055113821, 0.19438647593012, 0.20076717050010, 0.20719272909882,
265  0.21365259576030, 0.22013557367283, 0.22662983904194, 0.23312295958328,
266  0.23960191774666, 0.24605313873388, 0.25246252333253, 0.25881548554631,
267  0.26509699495987, 0.27129162373316, 0.27738359807707, 0.28335685401987,
268  0.28919509723179, 0.29488186663467, 0.30040060148455, 0.30573471157819,
269  0.31086765019993, 0.31578298939317, 0.32046449711227, 0.32489621578468,
270  0.32906254179156, 0.33294830535654, 0.33653885031840, 0.33982011325336,
271  0.34277870140679, 0.34540196889300, 0.34767809062480, 0.34959613344194,
272  0.35114612391958, 0.35231911235422, 0.35310723244504, 0.35350375621308,
273 
274  0.35350314372945, 0.35310108725579, 0.35229454943591, 0.35108179521634,
275  0.34946241721522, 0.34743735430290, 0.34500890320420, 0.34218072298001,
276  0.33895783229541, 0.33534659943168, 0.33135472505060, 0.32699121776996,
277  0.32226636266000, 0.31719168282019, 0.31177989424432, 0.30604485422875,
278  0.30000150362379, 0.29366580327088, 0.28705466500775, 0.28018587766131,
279  0.27307802848095, 0.26575042049535, 0.25822298630189, 0.25051619882000,
280  0.24265097955783, 0.23464860495522, 0.22653061137548, 0.21831869932335,
281  0.21003463746705, 0.20170016703857, 0.19333690717811, 0.18496626177620,
282  0.17660932835062, 0.16828680947474, 0.16001892724986, 0.15182534128597,
283  0.14372507062477, 0.13573642000364, 0.12787691082233, 0.12016321713317,
284  0.11261110693234, 0.10523538898282, 0.09804986534955, 0.09106728977263,
285  0.08429933194438, 0.07775654768810, 0.07144835495683, 0.06538301547324,
286  0.05956762170687, 0.05400808871425, 0.04870915012107, 0.04367435714993,
287  0.03890607899172, 0.03440550179663, 0.03017262174627, 0.02620622428513,
288  0.02250383492507, 0.01906161305732, 0.01587412848221, 0.01293388032354,
289  0.01023019677288, 0.00774641320626, 0.00545109736891, 0.00325868651263,
290 };
291 
292 static const float short_window2[192] = {
293  0.00018861094606, 0.00033433010202, 0.00050309624485, 0.00070306161748,
294  0.00093995174533, 0.00121913067128, 0.00154606505568, 0.00192647806126,
295  0.00236641248692, 0.00287225985240, 0.00345077377440, 0.00410907465023,
296  0.00485464855241, 0.00569534163219, 0.00663935063508, 0.00769520981249,
297  0.00887177436246, 0.01017820046395, 0.01162392194150, 0.01321862359335,
298  0.01497221122468, 0.01689477844427, 0.01899657030441, 0.02128794388846,
299  0.02377932597692, 0.02648116795039, 0.02940389811590, 0.03255787167130,
300  0.03595331854986, 0.03960028941437, 0.04350860009563, 0.04768777479454,
301  0.05214698838949, 0.05689500821121, 0.06194013566525, 0.06729014809766,
302  0.07295224131210, 0.07893297315602, 0.08523820859989, 0.09187306673620,
303  0.09884187012422, 0.10614809690222, 0.11379433608064, 0.12178224641797,
304  0.13011251926531, 0.13878484574660, 0.14779788861830, 0.15714925912610,
305  0.16683549914631, 0.17685206886673, 0.18719334022589, 0.19785259629099,
306  0.20882203671372, 0.22009278936030, 0.23165492816694, 0.24349749722585,
307  0.25560854105961, 0.26797514099368, 0.28058345748882, 0.29341877824732,
308  0.30646557185942, 0.31970754671026, 0.33312771482295, 0.34670846027024,
309 
310  0.36043161174692, 0.37427851885723, 0.38823013163645, 0.40226708279486,
311  0.41636977214436, 0.43051845264462, 0.44469331748632, 0.45887458761470,
312  0.47304259908636, 0.48717788964798, 0.50126128392546, 0.51527397661778,
313  0.52919761310050, 0.54301436685998, 0.55670701320069, 0.57025899869448,
314  0.58365450587230, 0.59687851269542, 0.60991684638414, 0.62275623122793,
315  0.63538433005035, 0.64778977905593, 0.65996221584264, 0.67189230042379,
316  0.68357172916486, 0.69499324160511, 0.70615062019861, 0.71703868307548,
317  0.72765326998919, 0.73799122168099, 0.74805035295521, 0.75782941981995,
318  0.76732808110520, 0.77654685502339, 0.78548707118622, 0.79415081863423,
319  0.80254089047207, 0.81066072573188, 0.81851434910893, 0.82610630922734,
320  0.83344161609862, 0.84052567843230, 0.84736424144524, 0.85396332579459,
321  0.86032916822973, 0.86646816451999, 0.87238681516918, 0.87809167437532,
322  0.88358930263537, 0.88888622333073, 0.89398888356256, 0.89890361943564,
323  0.90363662591861, 0.90819393133744, 0.91258137648979, 0.91680459830070,
324  0.92086901787718, 0.92477983276087, 0.92854201312583, 0.93216030163834,
325  0.93563921662343, 0.93898305819384, 0.94219591693690, 0.94528168477979,
326 
327  0.94823843319821, 0.95106834367330, 0.95377776558539, 0.95636718335775,
328  0.95883679961479, 0.96118650212341, 0.96341583179195, 0.96552395212906,
329  0.96750962060547, 0.96937116231768, 0.97110644638309, 0.97271286544154,
330  0.97418731862798, 0.97552619834964, 0.97672538116257, 0.97778022299974,
331  0.97868555895586, 0.97943570778357, 0.98002448120255, 0.98044519806866,
332  0.98069070339493, 0.98075339216123, 0.98062523779637, 0.98029782516478,
333  0.97976238784222, 0.97900984942031, 0.97803086854002, 0.97681588731895,
334  0.97535518280755, 0.97363892108474, 0.97165721358452, 0.96940017523145,
335  0.96685798395452, 0.96402094114589, 0.96087953263194, 0.95742448973047,
336  0.95364684997699, 0.94953801711660, 0.94508981997396, 0.94029456983253,
337  0.93514511597504, 0.92963489905951, 0.92375800202883, 0.91750919827624,
338  0.91088399681406, 0.90387868421832, 0.89649036314692, 0.88871698725397,
339  0.88055739234735, 0.87201132366062, 0.86307945913336, 0.85376342861693,
340  0.84406582894455, 0.83399023482637, 0.82354120554757, 0.81272428745995,
341  0.80154601230457, 0.79001389138101, 0.77813640562199, 0.76592299164227,
342  0.75338402384395, 0.74053079267526, 0.72737547915460, 0.71393112578527,
343 };
344 
345 static const float short_window3[64] = {
346  0.00326887936450, 0.00550242900936, 0.00786846643791, 0.01045683453520,
347  0.01330402120132, 0.01643221072863, 0.01985798040609, 0.02359509464766,
348  0.02765559221954, 0.03205025893128, 0.03678884369614, 0.04188015679495,
349  0.04733210987781, 0.05315172583924, 0.05934513287609, 0.06591755045290,
350  0.07287327156378, 0.08021564389822, 0.08794705152307, 0.09606889811179,
351  0.10458159240070, 0.11348453632940, 0.12277611617809, 0.13245369691511,
352  0.14251361989876, 0.15295120402567, 0.16376075037904, 0.17493555039885,
353  0.18646789757072, 0.19834910260891, 0.21056951208995, 0.22311853047787,
354  0.23598464546683, 0.24915545655419, 0.26261770674500, 0.27635731727778,
355  0.29035942525136, 0.30460842402318, 0.31908800624032, 0.33378120935681,
356  0.34867046348260, 0.36373764140285, 0.37896411059909, 0.39433078709788,
357  0.40981819096657, 0.42540650327031, 0.44107562429959, 0.45680523287270,
358  0.47257484651351, 0.48836388230077, 0.50415171818214, 0.51991775454258,
359  0.53564147581496, 0.55130251191887, 0.56688069931047, 0.58235614142007,
360  0.59770926827271, 0.61292089506118, 0.62797227945823, 0.64284517745255,
361  0.65752189749349, 0.67198535273209, 0.68621911114984, 0.70020744337099,
362 };
363 
364 static const uint8_t dc_code_tab[5] = { 0, 0, 0, 1, 1 };
365 
366 static const uint8_t ht_code_tab[5] = { 0, 0, 1, 2, 2 };
367 
368 static const uint8_t band_ofs_tab[3][4] = {
369  { 12, 8, 4, 0 }, { 14, 10, 6, 0 }, { 12, 8, 4, 0 }
370 };
371 
372 static const uint8_t band_low_tab[3] = { 9, 17, 24 };
373 
374 static const uint16_t fast_gain_tab[8] = {
375  128, 256, 384, 512, 640, 768, 896, 1024
376 };
377 
378 static const uint16_t slow_decay_tab[2][2] = { { 27, -1 }, { 32, 21 } };
379 
380 static const uint16_t misc_decay_tab[3][2][2] = {
381  { { 354, -1 }, { 425, 425 } },
382  { { 266, -1 }, { 320, -1 } },
383  { { 213, -1 }, { 256, -1 } }
384 };
385 
386 static const uint16_t fast_decay_tab[3][2][2][50] = {
387  {{{
388  142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
389  142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
390  142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
391  142, 142, 142, 142, 142, 142, 142, 142,
392  }, {
393  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
394  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
395  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
396  -1, -1, -1, -1, -1, -1, -1, -1,
397  }}, {{
398  170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
399  170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
400  170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
401  170, 170, 170, 170, 170, 170, 170, 170,
402  }, {
403  64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
404  64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
405  64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
406  64, 64, 64, 64, 64, 64, 64, 64,
407  }}}, {{{
408  266, 266, 106, 106, 106, 106, 106, 106, 106, 106,
409  106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
410  106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
411  106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
412  106, 106, 106, 106,
413  }, {
414  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
415  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
416  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
417  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
418  -1, -1, -1, -1,
419  }}, {{
420  319, 319, 128, 128, 128, 128, 128, 128, 128, 128,
421  128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
422  128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
423  128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
424  128, 128, 128, 128,
425  }, {
426  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
427  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
428  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
429  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
430  -1, -1, -1, -1,
431  }}}, {{{
432  106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
433  106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
434  106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
435  106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
436  106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
437  }, {
438  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
439  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
440  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
441  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
442  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
443  }}, {{
444  128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
445  128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
446  128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
447  128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
448  128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
449  }, {
450  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
451  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
452  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
453  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
454  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
455  }}}
456 };
457 
458 static const uint16_t fast_gain_adj_tab[3][2][62] = {
459  {{
460  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
461  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
462  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
463  0, 1, 2, 4, 7, 11, 16, 29, 44, 59,
464  76, 94, 116, 142, 179, 221, 252, 285, 312, 334,
465  }, {
466  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
467  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
468  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
469  2, 5, 8, 10, 15, 28, 42, 57, 75, 93,
470  115, 140, 177, 219, 247, 280, 308, 330, 427, 533,
471  }}, {{
472  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
473  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
474  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
475  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
476  0, 2, 5, 8, 12, 21, 35, 51, 69, 89,
477  111, 138, 176, 220, 251, 284, 312, 334,
478  }, {
479  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
480  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
481  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
482  0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
483  5, 8, 11, 18, 33, 49, 65, 84, 106, 132,
484  168, 214, 245, 279, 308, 329, 427, 533,
485  }}, {{
486  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
487  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
488  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
489  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
490  0, 0, 0, 0, 0, 1, 4, 7, 10, 17,
491  31, 47, 65, 84, 107, 134, 171, 215, 250, 283,
492  312, 334,
493  }, {
494  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
495  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
496  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
497  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
498  0, 0, 0, 0, 3, 6, 9, 13, 27, 43,
499  60, 79, 100, 126, 160, 207, 242, 276, 307, 329,
500  427, 533,
501  }}
502 };
503 
504 static const uint16_t slow_gain_tab[3][2][50] = {
505  {{
506  3072, 3072, 3072, 3072, 3072, 3072, 1063, 1063, 1063, 1063,
507  1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
508  1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
509  1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
510  }, {
511  3072, 3072, 3072, 3072, 3072, 3072, 850, 850, 850, 850,
512  850, 850, 850, 850, 850, 850, 850, 850, 850, 850,
513  850, 850, 850, 850, 850, 850, 850, 850, 850, 850,
514  850, 850, 850, 850, 850, 850, 850, 850,
515  }}, {{
516  3072, 1212, 1212, 1212, 999, 999, 999, 999, 999, 999,
517  999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
518  999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
519  999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
520  999, 999, 999, 999,
521  }, {
522  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
523  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
524  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
525  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
526  -1, -1, -1, -1,
527  }}, {{
528  3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072,
529  999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
530  999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
531  999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
532  999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
533  }, {
534  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
535  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
536  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
537  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
538  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
539  }}
540 };
541 
542 static const uint16_t hearing_thresh_tab[3][3][50] = {
543  {{
544  1403, 1141, 1000, 959, 948, 957, 946, 925, 899, 871,
545  843, 815, 789, 766, 745, 727, 705, 687, 681, 686,
546  701, 725, 768, 854, 940, 1018, 1075, 1103, 1111, 1106,
547  1098, 1105, 1142, 1237, 1419, 1721, 2169, 2805,
548  }, {
549  1401, 1130, 995, 957, 947, 955, 941, 918, 890, 861,
550  831, 803, 777, 754, 734, 717, 698, 684, 682, 692,
551  712, 743, 798, 894, 976, 1045, 1091, 1109, 1110, 1102,
552  1098, 1116, 1174, 1300, 1526, 1884, 2401, 3072,
553  }, {
554  1393, 1086, 974, 949, 957, 941, 913, 878, 843, 808,
555  777, 750, 727, 708, 695, 686, 681, 689, 714, 752,
556  811, 888, 971, 1044, 1087, 1108, 1110, 1102, 1098, 1115,
557  1172, 1290, 1489, 1812, 2293, 2964, 3072, 3072,
558  }}, {{
559  1412, 1343, 1141, 1047, 1000, 974, 959, 951, 948, 947,
560  957, 953, 946, 936, 925, 906, 878, 850, 822, 795,
561  771, 745, 719, 700, 687, 681, 685, 701, 733, 784,
562  885, 977, 1047, 1092, 1110, 1108, 1099, 1102, 1138, 1233,
563  1413, 1711, 2157, 2797,
564  }, {
565  1412, 1336, 1130, 1040, 995, 970, 957, 950, 947, 947,
566  955, 950, 941, 930, 918, 897, 868, 838, 810, 783,
567  759, 734, 710, 693, 684, 681, 690, 712, 752, 823,
568  924, 1009, 1069, 1102, 1111, 1104, 1098, 1111, 1168, 1295,
569  1518, 1873, 2388, 3072,
570  }, {
571  1411, 1293, 1086, 1009, 974, 957, 949, 947, 957, 951,
572  941, 928, 913, 896, 878, 852, 817, 785, 756, 732,
573  713, 695, 683, 682, 689, 710, 746, 811, 906, 992,
574  1061, 1099, 1111, 1106, 1098, 1107, 1155, 1266, 1471, 1799,
575  2277, 2945, 3072, 3072,
576  }}, {{
577  1431, 1412, 1403, 1379, 1343, 1293, 1229, 1180, 1125, 1075,
578  1040, 1014, 996, 979, 965, 957, 951, 948, 947, 957,
579  951, 940, 924, 903, 877, 846, 815, 785, 753, 725,
580  702, 686, 681, 689, 714, 760, 847, 947, 1028, 1083,
581  1108, 1109, 1101, 1100, 1132, 1222, 1402, 1705, 2160, 2803,
582  }, {
583  1431, 1412, 1401, 1375, 1336, 1278, 1215, 1168, 1115, 1066,
584  1032, 1008, 991, 975, 962, 954, 950, 947, 947, 955,
585  948, 935, 916, 894, 866, 835, 803, 772, 742, 715,
586  695, 683, 683, 697, 729, 784, 887, 982, 1054, 1096,
587  1111, 1106, 1098, 1107, 1159, 1281, 1505, 1865, 2391, 3072,
588  }, {
589  1427, 1411, 1393, 1353, 1293, 1215, 1160, 1118, 1072, 1031,
590  1003, 984, 971, 960, 952, 948, 947, 957, 952, 941,
591  924, 902, 876, 847, 815, 781, 750, 723, 700, 685,
592  681, 691, 719, 766, 858, 958, 1039, 1089, 1109, 1108,
593  1099, 1102, 1141, 1245, 1442, 1766, 2250, 2930, 3072, 3072,
594  }}
595 };
596 
597 static const int16_t lwc_gain_tab[11][7] = {
598  { -21, -197, -271, -466, 32767, 32767, 32767 },
599  { -197, -29, -244, -271, -540, 32767, 32767 },
600  { -271, -244, -29, -249, -271, -593, 32767 },
601  { -466, -271, -249, -29, -251, -271, -632 },
602  { -540, -271, -251, -29, -251, -271, -664 },
603  { -593, -271, -251, -29, -252, -271, -690 },
604  { -632, -271, -252, -29, -252, -271, -711 },
605  { -664, -271, -252, -29, -252, -271, -730 },
606  { -690, -271, -252, -29, -252, -271, -745 },
607  { -711, -271, -252, -29, -253, -271, -759 },
608  { -730, -271, -253, -29, -253, -271, -771 },
609 };
610 
611 static const int16_t lwc_adj_tab[7] = {
612  -192, -320, -448, -512, -448, -320, -192,
613 };
614 
615 static const uint8_t log_add_tab[212] = {
616  64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 52, 51, 50,
617  49, 48, 47, 47, 46, 45, 44, 44, 43, 42, 41, 41, 40, 39, 38, 38,
618  37, 36, 36, 35, 35, 34, 33, 33, 32, 32, 31, 30, 30, 29, 29, 28,
619  28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 21,
620  20, 20, 19, 19, 19, 18, 18, 18, 17, 17, 17, 16, 16, 16, 15, 15,
621  15, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11,
622  10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8,
623  7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5,
624  5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
625  4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
626  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
627  2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
628  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
629  1, 1, 0, 0,
630 };
631 
632 static const uint8_t bap_tab[64] = {
633  0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4,
634  4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8,
635  8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12,
636  12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 15,
637 };
638 
639 static float mantissa_tab1[17][4];
640 static float mantissa_tab2[17][4];
641 static float mantissa_tab3[17][4];
642 static float exponent_tab[50];
643 static float gain_tab[1024];
644 
645 DECLARE_ALIGNED(32, static float, window)[3712];
646 
647 #endif
uint16_t src_ofs
Definition: dolby_e.h:58
int fr_code_orig
Definition: dolby_e.h:93
int exp_strategy[MAX_GROUPS]
Definition: dolby_e.h:69
static const DBEGroup grp_tab_5[8]
Definition: dolby_e.h:195
static const uint8_t mantissa_size2[16][4]
Definition: dolby_e.h:232
static const uint8_t nb_groups_tab[4]
Definition: dolby_e.h:137
static const uint8_t mantissa_size1[16][4]
Definition: dolby_e.h:225
static float mantissa_tab2[17][4]
Definition: dolby_e.h:640
uint8_t nb_bias_exp[MAX_MSTR_EXP]
Definition: dolby_e.h:49
Memory handling functions.
uint16_t win_len
Definition: dolby_e.h:55
DBEGroup groups[MAX_GROUPS]
Definition: dolby_e.h:67
static const uint16_t fast_gain_adj_tab[3][2][62]
Definition: dolby_e.h:458
static const DBEGroup grp_tab_2[7]
Definition: dolby_e.h:177
channels
Definition: aptx.c:30
static const uint8_t bap_tab[64]
Definition: dolby_e.h:632
static const DBEGroup grp_tab_4[1]
Definition: dolby_e.h:191
uint16_t win_ofs
Definition: dolby_e.h:57
#define MAX_EXPONENTS
Definition: dolby_e.h:41
int nb_mstr_exp
Definition: dolby_e.h:66
static const uint8_t nb_mstr_exp_tab[4]
Definition: dolby_e.h:139
static float mantissa_tab3[17][4]
Definition: dolby_e.h:641
static const DBEGroup grp_tab_6[7]
Definition: dolby_e.h:206
uint8_t imdct_phs
Definition: dolby_e.h:54
static const uint8_t ch_reorder_4[4]
Definition: dolby_e.h:128
int multi_prog_warned
Definition: dolby_e.h:103
AVCodecContext * avctx
Definition: dolby_e.h:78
uint8_t
static const uint8_t log_add_tab[212]
Definition: dolby_e.h:615
static const DBEGroup grp_tab_7[1]
Definition: dolby_e.h:216
int idx[MAX_EXPONENTS]
Definition: dolby_e.h:72
GetBitContext gb
Definition: dolby_e.h:79
static const uint8_t dc_code_tab[5]
Definition: dolby_e.h:364
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
Definition: mem.h:112
static const int16_t lwc_gain_tab[11][7]
Definition: dolby_e.h:597
uint16_t mnt_ofs
Definition: dolby_e.h:51
static const uint8_t imdct_bits_tab[3]
Definition: dolby_e.h:160
bitstream reader API header.
int ch_size[MAX_CHANNELS]
Definition: dolby_e.h:95
static const uint8_t nb_mantissa_38[38]
Definition: dolby_e.h:141
static const DBEGroup grp_tab_0[1]
Definition: dolby_e.h:162
int key_present
Definition: dolby_e.h:86
#define MAX_GROUPS
Definition: dolby_e.h:40
int fr_code
Definition: dolby_e.h:92
static const uint8_t ch_reorder_8[8]
Definition: dolby_e.h:130
AVFloatDSPContext * fdsp
Definition: dolby_e.h:110
int gr_code
Definition: dolby_e.h:62
int nb_groups
Definition: dolby_e.h:65
#define MAX_PROG_CONF
Definition: dolby_e.h:35
static const uint8_t band_low_tab[3]
Definition: dolby_e.h:372
int end_gain[MAX_CHANNELS]
Definition: dolby_e.h:101
#define MAX_MSTR_EXP
Definition: dolby_e.h:44
#define MAX_SEGMENTS
Definition: dolby_e.h:38
static const uint8_t nb_mantissa_50[50]
Definition: dolby_e.h:153
static const uint8_t ch_reorder_6[6]
Definition: dolby_e.h:129
uint8_t * input
Definition: dolby_e.h:81
int mtd_ext_size
Definition: dolby_e.h:96
uint8_t imdct_idx
Definition: dolby_e.h:53
static const uint16_t sample_rate_tab[16]
Definition: dolby_e.h:133
int prog_conf
Definition: dolby_e.h:88
static float window[3712]
Definition: dolby_e.h:645
Definition: fft.h:88
static const uint8_t nb_programs_tab[MAX_PROG_CONF+1]
Definition: dolby_e.h:115
int bap[MAX_EXPONENTS]
Definition: dolby_e.h:71
int begin_gain[MAX_CHANNELS]
Definition: dolby_e.h:100
int meter_size
Definition: dolby_e.h:97
static const float short_window2[192]
Definition: dolby_e.h:292
int word_bytes
Definition: dolby_e.h:85
float history[MAX_CHANNELS][256]
Definition: dolby_e.h:107
static const uint16_t fast_gain_tab[8]
Definition: dolby_e.h:374
int nb_programs
Definition: dolby_e.h:90
int input_size
Definition: dolby_e.h:82
static const float start_window[192]
Definition: dolby_e.h:239
static const uint8_t ch_reorder_n[8]
Definition: dolby_e.h:131
float mantissas[MAX_MANTISSAS]
Definition: dolby_e.h:74
static const uint16_t hearing_thresh_tab[3][3][50]
Definition: dolby_e.h:542
int nb_channels
Definition: dolby_e.h:89
static const int8_t lfe_channel_tab[MAX_PROG_CONF+1]
Definition: dolby_e.h:123
main external API structure.
Definition: avcodec.h:1533
static const uint16_t misc_decay_tab[3][2][2]
Definition: dolby_e.h:380
Replacements for frequently missing libm functions.
static const uint8_t nb_channels_tab[MAX_PROG_CONF+1]
Definition: dolby_e.h:119
static const uint8_t band_ofs_tab[3][4]
Definition: dolby_e.h:368
uint16_t dst_ofs
Definition: dolby_e.h:56
static const DBEGroup grp_tab_3[1]
Definition: dolby_e.h:187
static float exponent_tab[50]
Definition: dolby_e.h:642
static const uint8_t nb_mantissa_44[44]
Definition: dolby_e.h:147
static float mantissa_tab1[17][4]
Definition: dolby_e.h:639
FFTContext imdct[3]
Definition: dolby_e.h:109
const uint8_t * nb_mantissa
Definition: dolby_e.h:52
static const float short_window3[64]
Definition: dolby_e.h:345
#define MAX_CHANNELS
Definition: dolby_e.h:37
common internal api header.
static const uint16_t slow_decay_tab[2][2]
Definition: dolby_e.h:378
static const uint8_t ht_code_tab[5]
Definition: dolby_e.h:366
int rev_id[MAX_CHANNELS]
Definition: dolby_e.h:99
static float gain_tab[1024]
Definition: dolby_e.h:643
static const DBEGroup *const frm_ofs_tab[2][4]
Definition: dolby_e.h:220
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
Definition: avcodec.h:782
#define MAX_MANTISSAS
Definition: dolby_e.h:42
static const uint16_t fast_decay_tab[3][2][2][50]
Definition: dolby_e.h:386
int exponents[MAX_EXPONENTS]
Definition: dolby_e.h:70
uint16_t exp_ofs
Definition: dolby_e.h:50
static const DBEGroup grp_tab_1[8]
Definition: dolby_e.h:166
uint8_t nb_exponent
Definition: dolby_e.h:48
static const int16_t lwc_adj_tab[7]
Definition: dolby_e.h:611
int bw_code
Definition: dolby_e.h:63
static const uint16_t slow_gain_tab[3][2][50]
Definition: dolby_e.h:504
int word_bits
Definition: dolby_e.h:84
GLuint buffer
Definition: opengl_enc.c:102