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
28
34
35 #define MAX_SEGMENTS 2
36
38 #define MAX_EXPONENTS 304
39 #define MAX_MANTISSAS 1024
40
41 #define MAX_MSTR_EXP 2
42 #define MAX_BIAS_EXP 50
43
47 };
48
62
66
70
75
78
83
85
87
92
94 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,
95 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5
96 };
97
102
103
105
107
109 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
110 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6,
111 7, 8, 9, 10, 11, 12,
112 };
113
115 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
116 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 6, 7, 7,
117 8, 9, 10, 11, 12, 13, 15, 16, 18, 20, 22, 25,
118 };
119
121 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3,
122 3, 4, 4, 5, 5, 6, 6, 7, 8, 9, 9, 10, 12, 13, 14, 16,
123 18, 19, 22, 24, 27, 29, 32, 36, 40, 44, 49, 54, 60, 66, 74, 82,
124 90, 100,
125 };
126
128
130 { 50, { 27, 23 }, 0, 0,
nb_mantissa_50, 2, 0, 1152, 0, 1408, 0 },
131 };
132
134 { 38, { 12, 26 }, 0, 0,
nb_mantissa_38, 0, 0, 192, 0, 256, 0 },
135 { 38, { 12, 26 }, 38, 128,
nb_mantissa_38, 0, 1, 256, 64, 448, 0 },
136 { 38, { 12, 26 }, 76, 256,
nb_mantissa_38, 0, 1, 256, 192, 704, 0 },
137 { 38, { 12, 26 }, 114, 384,
nb_mantissa_38, 0, 1, 256, 320, 0, 0 },
138 { 38, { 12, 26 }, 152, 512,
nb_mantissa_38, 0, 1, 256, 448, 0, 0 },
139 { 38, { 12, 26 }, 190, 640,
nb_mantissa_38, 0, 1, 256, 576, 0, 0 },
140 { 38, { 12, 26 }, 228, 768,
nb_mantissa_38, 0, 1, 256, 704, 0, 0 },
141 { 38, { 12, 26 }, 266, 896,
nb_mantissa_38, 0, 1, 256, 832, 0, 0 },
142 };
143
145 { 38, { 12, 26 }, 0, 0,
nb_mantissa_38, 0, 0, 192, 0, 256, 0 },
146 { 38, { 12, 26 }, 38, 128,
nb_mantissa_38, 0, 1, 256, 64, 448, 0 },
147 { 38, { 12, 26 }, 76, 256,
nb_mantissa_38, 0, 1, 256, 192, 704, 0 },
148 { 38, { 12, 26 }, 114, 384,
nb_mantissa_38, 0, 1, 256, 320, 0, 0 },
149 { 38, { 12, 26 }, 152, 512,
nb_mantissa_38, 0, 1, 256, 448, 0, 0 },
150 { 38, { 12, 26 }, 190, 640,
nb_mantissa_38, 0, 1, 256, 576, 0, 0 },
151 { 44, { 19, 25 }, 228, 768,
nb_mantissa_44, 1, 1, 448, 704, 960, 64 },
152 };
153
155 { 21, { 21 }, 0, 0,
nb_mantissa_50, 2, 0, 1152, 0, 1408, 0 },
156 };
157
159 { 50, { 27, 23 }, 0, 0,
nb_mantissa_50, 2, 2, 1152, 0, 1408, 896 },
160 };
161
163 { 38, { 12, 26 }, 0, 0,
nb_mantissa_38, 0, 1, 256, 64, 0, 0 },
164 { 38, { 12, 26 }, 38, 128,
nb_mantissa_38, 0, 1, 256, 192, 0, 0 },
165 { 38, { 12, 26 }, 76, 256,
nb_mantissa_38, 0, 1, 256, 320, 0, 0 },
166 { 38, { 12, 26 }, 114, 384,
nb_mantissa_38, 0, 1, 256, 448, 0, 0 },
167 { 38, { 12, 26 }, 152, 512,
nb_mantissa_38, 0, 1, 256, 576, 0, 0 },
168 { 38, { 12, 26 }, 190, 640,
nb_mantissa_38, 0, 1, 256, 704, 3008, 0 },
169 { 38, { 12, 26 }, 228, 768,
nb_mantissa_38, 0, 1, 256, 832, 2752, 0 },
170 { 38, { 12, 26 }, 266, 896,
nb_mantissa_38, 0, 2, 192, 960, 2560, 64 },
171 };
172
174 { 44, { 19, 25 }, 0, 0,
nb_mantissa_44, 1, 1, 448, 0, 3264, 0 },
175 { 38, { 12, 26 }, 44, 256,
nb_mantissa_38, 0, 1, 256, 320, 0, 0 },
176 { 38, { 12, 26 }, 82, 384,
nb_mantissa_38, 0, 1, 256, 448, 0, 0 },
177 { 38, { 12, 26 }, 120, 512,
nb_mantissa_38, 0, 1, 256, 576, 0, 0 },
178 { 38, { 12, 26 }, 158, 640,
nb_mantissa_38, 0, 1, 256, 704, 3008, 0 },
179 { 38, { 12, 26 }, 196, 768,
nb_mantissa_38, 0, 1, 256, 832, 2752, 0 },
180 { 38, { 12, 26 }, 234, 896,
nb_mantissa_38, 0, 2, 192, 960, 2560, 64 },
181 };
182
184 { 21, { 21 }, 0, 0,
nb_mantissa_50, 2, 2, 1152, 0, 1408, 896 },
185 };
186
190 };
191
193 { 0, 0, 0, 0 }, { 2, 1, 1, 1 }, { 3, 2, 1, 1 }, { 4, 3, 2, 1 },
194 { 5, 4, 3, 2 }, { 6, 5, 4, 3 }, { 7, 6, 5, 4 }, { 8, 7, 6, 5 },
195 { 9, 8, 7, 6 }, { 10, 9, 8, 7 }, { 11, 10, 9, 8 }, { 12, 11, 10, 9 },
196 { 13, 12, 11, 10 }, { 14, 13, 12, 11 }, { 15, 14, 13, 12 }, { 16, 15, 14, 13 },
197 };
198
200 { 0, 0, 0, 0 }, { 2, 1, 2, 2 }, { 3, 2, 3, 3 }, { 4, 3, 4, 4 },
201 { 5, 4, 5, 5 }, { 6, 5, 6, 6 }, { 7, 6, 7, 7 }, { 8, 7, 8, 8 },
202 { 9, 8, 9, 9 }, { 10, 9, 10, 10 }, { 11, 10, 11, 11 }, { 12, 11, 12, 12 },
203 { 13, 12, 13, 13 }, { 14, 13, 14, 14 }, { 15, 14, 15, 15 }, { 16, 15, 16, 16 },
204 };
205
207 0.00161569379826, 0.00185748233347, 0.00198562758548, 0.00207834078104,
208 0.00215717748523, 0.00223067096393, 0.00230299213147, 0.00237651215396,
209 0.00245275561606, 0.00253281402069, 0.00261754673613, 0.00270768786168,
210 0.00280390761895, 0.00290684998656, 0.00301715751161, 0.00313548872798,
211 0.00326253122934, 0.00339901215995, 0.00354570716636, 0.00370344845023,
212 0.00387313232586, 0.00405572653911, 0.00425227750970, 0.00446391759265,
213 0.00469187240551, 0.00493746822816, 0.00520213944619, 0.00548743597507,
214 0.00579503056737, 0.00612672586953, 0.00648446105606, 0.00687031782873,
215 0.00728652552677, 0.00773546505205, 0.00821967127415, 0.00874183354619,
216 0.00930479393832, 0.00991154278653, 0.01056521116692, 0.01126905994567,
217 0.01202646513050, 0.01284089936559, 0.01371590957417, 0.01465509096066,
218 0.01566205783408, 0.01674041199523, 0.01789370972358, 0.01912542867865,
219 0.02043893626265, 0.02183746113793, 0.02332406961796, 0.02490164852364,
220 0.02657289580178, 0.02834031974193, 0.03020624702903, 0.03217283918354,
221 0.03424211623810, 0.03641598586180, 0.03869627565015, 0.04108476601498,
222 0.04358322107390, 0.04619341515939, 0.04891715301882, 0.05175628239149,
223
224 0.05471237327267, 0.05778734733755, 0.06098291402413, 0.06430101352084,
225 0.06774345212186, 0.07131188644726, 0.07500780649199, 0.07883251748595,
226 0.08278712056651, 0.08687249228061, 0.09108926295730, 0.09543779401074,
227 0.09991815425851, 0.10453009536427, 0.10927302653894, 0.11414598865987,
228 0.11914762799220, 0.12427616972097, 0.12952939152560, 0.13490459744934,
229 0.14039859233595, 0.14600765712201, 0.15172752528722, 0.15755336077528,
230 0.16347973770491, 0.16950062219342, 0.17560935661442, 0.18179864660619,
231 0.18806055113821, 0.19438647593012, 0.20076717050010, 0.20719272909882,
232 0.21365259576030, 0.22013557367283, 0.22662983904194, 0.23312295958328,
233 0.23960191774666, 0.24605313873388, 0.25246252333253, 0.25881548554631,
234 0.26509699495987, 0.27129162373316, 0.27738359807707, 0.28335685401987,
235 0.28919509723179, 0.29488186663467, 0.30040060148455, 0.30573471157819,
236 0.31086765019993, 0.31578298939317, 0.32046449711227, 0.32489621578468,
237 0.32906254179156, 0.33294830535654, 0.33653885031840, 0.33982011325336,
238 0.34277870140679, 0.34540196889300, 0.34767809062480, 0.34959613344194,
239 0.35114612391958, 0.35231911235422, 0.35310723244504, 0.35350375621308,
240
241 0.35350314372945, 0.35310108725579, 0.35229454943591, 0.35108179521634,
242 0.34946241721522, 0.34743735430290, 0.34500890320420, 0.34218072298001,
243 0.33895783229541, 0.33534659943168, 0.33135472505060, 0.32699121776996,
244 0.32226636266000, 0.31719168282019, 0.31177989424432, 0.30604485422875,
245 0.30000150362379, 0.29366580327088, 0.28705466500775, 0.28018587766131,
246 0.27307802848095, 0.26575042049535, 0.25822298630189, 0.25051619882000,
247 0.24265097955783, 0.23464860495522, 0.22653061137548, 0.21831869932335,
248 0.21003463746705, 0.20170016703857, 0.19333690717811, 0.18496626177620,
249 0.17660932835062, 0.16828680947474, 0.16001892724986, 0.15182534128597,
250 0.14372507062477, 0.13573642000364, 0.12787691082233, 0.12016321713317,
251 0.11261110693234, 0.10523538898282, 0.09804986534955, 0.09106728977263,
252 0.08429933194438, 0.07775654768810, 0.07144835495683, 0.06538301547324,
253 0.05956762170687, 0.05400808871425, 0.04870915012107, 0.04367435714993,
254 0.03890607899172, 0.03440550179663, 0.03017262174627, 0.02620622428513,
255 0.02250383492507, 0.01906161305732, 0.01587412848221, 0.01293388032354,
256 0.01023019677288, 0.00774641320626, 0.00545109736891, 0.00325868651263,
257 };
258
260 0.00018861094606, 0.00033433010202, 0.00050309624485, 0.00070306161748,
261 0.00093995174533, 0.00121913067128, 0.00154606505568, 0.00192647806126,
262 0.00236641248692, 0.00287225985240, 0.00345077377440, 0.00410907465023,
263 0.00485464855241, 0.00569534163219, 0.00663935063508, 0.00769520981249,
264 0.00887177436246, 0.01017820046395, 0.01162392194150, 0.01321862359335,
265 0.01497221122468, 0.01689477844427, 0.01899657030441, 0.02128794388846,
266 0.02377932597692, 0.02648116795039, 0.02940389811590, 0.03255787167130,
267 0.03595331854986, 0.03960028941437, 0.04350860009563, 0.04768777479454,
268 0.05214698838949, 0.05689500821121, 0.06194013566525, 0.06729014809766,
269 0.07295224131210, 0.07893297315602, 0.08523820859989, 0.09187306673620,
270 0.09884187012422, 0.10614809690222, 0.11379433608064, 0.12178224641797,
271 0.13011251926531, 0.13878484574660, 0.14779788861830, 0.15714925912610,
272 0.16683549914631, 0.17685206886673, 0.18719334022589, 0.19785259629099,
273 0.20882203671372, 0.22009278936030, 0.23165492816694, 0.24349749722585,
274 0.25560854105961, 0.26797514099368, 0.28058345748882, 0.29341877824732,
275 0.30646557185942, 0.31970754671026, 0.33312771482295, 0.34670846027024,
276
277 0.36043161174692, 0.37427851885723, 0.38823013163645, 0.40226708279486,
278 0.41636977214436, 0.43051845264462, 0.44469331748632, 0.45887458761470,
279 0.47304259908636, 0.48717788964798, 0.50126128392546, 0.51527397661778,
280 0.52919761310050, 0.54301436685998, 0.55670701320069, 0.57025899869448,
281 0.58365450587230, 0.59687851269542, 0.60991684638414, 0.62275623122793,
282 0.63538433005035, 0.64778977905593, 0.65996221584264, 0.67189230042379,
283 0.68357172916486, 0.69499324160511, 0.70615062019861, 0.71703868307548,
284 0.72765326998919, 0.73799122168099, 0.74805035295521, 0.75782941981995,
285 0.76732808110520, 0.77654685502339, 0.78548707118622, 0.79415081863423,
286 0.80254089047207, 0.81066072573188, 0.81851434910893, 0.82610630922734,
287 0.83344161609862, 0.84052567843230, 0.84736424144524, 0.85396332579459,
288 0.86032916822973, 0.86646816451999, 0.87238681516918, 0.87809167437532,
289 0.88358930263537, 0.88888622333073, 0.89398888356256, 0.89890361943564,
290 0.90363662591861, 0.90819393133744, 0.91258137648979, 0.91680459830070,
291 0.92086901787718, 0.92477983276087, 0.92854201312583, 0.93216030163834,
292 0.93563921662343, 0.93898305819384, 0.94219591693690, 0.94528168477979,
293
294 0.94823843319821, 0.95106834367330, 0.95377776558539, 0.95636718335775,
295 0.95883679961479, 0.96118650212341, 0.96341583179195, 0.96552395212906,
296 0.96750962060547, 0.96937116231768, 0.97110644638309, 0.97271286544154,
297 0.97418731862798, 0.97552619834964, 0.97672538116257, 0.97778022299974,
298 0.97868555895586, 0.97943570778357, 0.98002448120255, 0.98044519806866,
299 0.98069070339493, 0.98075339216123, 0.98062523779637, 0.98029782516478,
300 0.97976238784222, 0.97900984942031, 0.97803086854002, 0.97681588731895,
301 0.97535518280755, 0.97363892108474, 0.97165721358452, 0.96940017523145,
302 0.96685798395452, 0.96402094114589, 0.96087953263194, 0.95742448973047,
303 0.95364684997699, 0.94953801711660, 0.94508981997396, 0.94029456983253,
304 0.93514511597504, 0.92963489905951, 0.92375800202883, 0.91750919827624,
305 0.91088399681406, 0.90387868421832, 0.89649036314692, 0.88871698725397,
306 0.88055739234735, 0.87201132366062, 0.86307945913336, 0.85376342861693,
307 0.84406582894455, 0.83399023482637, 0.82354120554757, 0.81272428745995,
308 0.80154601230457, 0.79001389138101, 0.77813640562199, 0.76592299164227,
309 0.75338402384395, 0.74053079267526, 0.72737547915460, 0.71393112578527,
310 };
311
313 0.00326887936450, 0.00550242900936, 0.00786846643791, 0.01045683453520,
314 0.01330402120132, 0.01643221072863, 0.01985798040609, 0.02359509464766,
315 0.02765559221954, 0.03205025893128, 0.03678884369614, 0.04188015679495,
316 0.04733210987781, 0.05315172583924, 0.05934513287609, 0.06591755045290,
317 0.07287327156378, 0.08021564389822, 0.08794705152307, 0.09606889811179,
318 0.10458159240070, 0.11348453632940, 0.12277611617809, 0.13245369691511,
319 0.14251361989876, 0.15295120402567, 0.16376075037904, 0.17493555039885,
320 0.18646789757072, 0.19834910260891, 0.21056951208995, 0.22311853047787,
321 0.23598464546683, 0.24915545655419, 0.26261770674500, 0.27635731727778,
322 0.29035942525136, 0.30460842402318, 0.31908800624032, 0.33378120935681,
323 0.34867046348260, 0.36373764140285, 0.37896411059909, 0.39433078709788,
324 0.40981819096657, 0.42540650327031, 0.44107562429959, 0.45680523287270,
325 0.47257484651351, 0.48836388230077, 0.50415171818214, 0.51991775454258,
326 0.53564147581496, 0.55130251191887, 0.56688069931047, 0.58235614142007,
327 0.59770926827271, 0.61292089506118, 0.62797227945823, 0.64284517745255,
328 0.65752189749349, 0.67198535273209, 0.68621911114984, 0.70020744337099,
329 };
330
332
334
336 { 12, 8, 4, 0 }, { 14, 10, 6, 0 }, { 12, 8, 4, 0 }
337 };
338
340
342 128, 256, 384, 512, 640, 768, 896, 1024
343 };
344
346
348 { { 354, -1 }, { 425, 425 } },
349 { { 266, -1 }, { 320, -1 } },
350 { { 213, -1 }, { 256, -1 } }
351 };
352
354 {{{
355 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
356 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
357 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
358 142, 142, 142, 142, 142, 142, 142, 142,
359 }, {
360 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
361 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
362 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
363 -1, -1, -1, -1, -1, -1, -1, -1,
364 }}, {{
365 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
366 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
367 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
368 170, 170, 170, 170, 170, 170, 170, 170,
369 }, {
370 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
371 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
372 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
373 64, 64, 64, 64, 64, 64, 64, 64,
374 }}}, {{{
375 266, 266, 106, 106, 106, 106, 106, 106, 106, 106,
376 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
377 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
378 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
379 106, 106, 106, 106,
380 }, {
381 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
382 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
383 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
384 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
385 -1, -1, -1, -1,
386 }}, {{
387 319, 319, 128, 128, 128, 128, 128, 128, 128, 128,
388 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
389 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
390 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
391 128, 128, 128, 128,
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, -1, -1,
397 -1, -1, -1, -1,
398 }}}, {{{
399 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
400 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
401 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
402 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
403 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
404 }, {
405 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
406 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
407 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
408 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
409 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
410 }}, {{
411 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
412 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
413 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
414 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
415 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
416 }, {
417 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
418 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
419 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
420 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
421 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
422 }}}
423 };
424
426 {{
427 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
428 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
429 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
430 0, 1, 2, 4, 7, 11, 16, 29, 44, 59,
431 76, 94, 116, 142, 179, 221, 252, 285, 312, 334,
432 }, {
433 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
434 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
435 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
436 2, 5, 8, 10, 15, 28, 42, 57, 75, 93,
437 115, 140, 177, 219, 247, 280, 308, 330, 427, 533,
438 }}, {{
439 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
440 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
441 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
442 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
443 0, 2, 5, 8, 12, 21, 35, 51, 69, 89,
444 111, 138, 176, 220, 251, 284, 312, 334,
445 }, {
446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
447 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
448 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
449 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
450 5, 8, 11, 18, 33, 49, 65, 84, 106, 132,
451 168, 214, 245, 279, 308, 329, 427, 533,
452 }}, {{
453 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
454 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
455 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
456 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
457 0, 0, 0, 0, 0, 1, 4, 7, 10, 17,
458 31, 47, 65, 84, 107, 134, 171, 215, 250, 283,
459 312, 334,
460 }, {
461 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
462 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
463 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
464 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
465 0, 0, 0, 0, 3, 6, 9, 13, 27, 43,
466 60, 79, 100, 126, 160, 207, 242, 276, 307, 329,
467 427, 533,
468 }}
469 };
470
472 {{
473 3072, 3072, 3072, 3072, 3072, 3072, 1063, 1063, 1063, 1063,
474 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
475 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
476 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
477 }, {
478 3072, 3072, 3072, 3072, 3072, 3072, 850, 850, 850, 850,
479 850, 850, 850, 850, 850, 850, 850, 850, 850, 850,
480 850, 850, 850, 850, 850, 850, 850, 850, 850, 850,
481 850, 850, 850, 850, 850, 850, 850, 850,
482 }}, {{
483 3072, 1212, 1212, 1212, 999, 999, 999, 999, 999, 999,
484 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
485 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
486 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
487 999, 999, 999, 999,
488 }, {
489 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
490 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
491 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
492 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
493 -1, -1, -1, -1,
494 }}, {{
495 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072,
496 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
497 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
498 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
499 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
500 }, {
501 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
502 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
503 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
504 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
505 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
506 }}
507 };
508
510 {{
511 1403, 1141, 1000, 959, 948, 957, 946, 925, 899, 871,
512 843, 815, 789, 766, 745, 727, 705, 687, 681, 686,
513 701, 725, 768, 854, 940, 1018, 1075, 1103, 1111, 1106,
514 1098, 1105, 1142, 1237, 1419, 1721, 2169, 2805,
515 }, {
516 1401, 1130, 995, 957, 947, 955, 941, 918, 890, 861,
517 831, 803, 777, 754, 734, 717, 698, 684, 682, 692,
518 712, 743, 798, 894, 976, 1045, 1091, 1109, 1110, 1102,
519 1098, 1116, 1174, 1300, 1526, 1884, 2401, 3072,
520 }, {
521 1393, 1086, 974, 949, 957, 941, 913, 878, 843, 808,
522 777, 750, 727, 708, 695, 686, 681, 689, 714, 752,
523 811, 888, 971, 1044, 1087, 1108, 1110, 1102, 1098, 1115,
524 1172, 1290, 1489, 1812, 2293, 2964, 3072, 3072,
525 }}, {{
526 1412, 1343, 1141, 1047, 1000, 974, 959, 951, 948, 947,
527 957, 953, 946, 936, 925, 906, 878, 850, 822, 795,
528 771, 745, 719, 700, 687, 681, 685, 701, 733, 784,
529 885, 977, 1047, 1092, 1110, 1108, 1099, 1102, 1138, 1233,
530 1413, 1711, 2157, 2797,
531 }, {
532 1412, 1336, 1130, 1040, 995, 970, 957, 950, 947, 947,
533 955, 950, 941, 930, 918, 897, 868, 838, 810, 783,
534 759, 734, 710, 693, 684, 681, 690, 712, 752, 823,
535 924, 1009, 1069, 1102, 1111, 1104, 1098, 1111, 1168, 1295,
536 1518, 1873, 2388, 3072,
537 }, {
538 1411, 1293, 1086, 1009, 974, 957, 949, 947, 957, 951,
539 941, 928, 913, 896, 878, 852, 817, 785, 756, 732,
540 713, 695, 683, 682, 689, 710, 746, 811, 906, 992,
541 1061, 1099, 1111, 1106, 1098, 1107, 1155, 1266, 1471, 1799,
542 2277, 2945, 3072, 3072,
543 }}, {{
544 1431, 1412, 1403, 1379, 1343, 1293, 1229, 1180, 1125, 1075,
545 1040, 1014, 996, 979, 965, 957, 951, 948, 947, 957,
546 951, 940, 924, 903, 877, 846, 815, 785, 753, 725,
547 702, 686, 681, 689, 714, 760, 847, 947, 1028, 1083,
548 1108, 1109, 1101, 1100, 1132, 1222, 1402, 1705, 2160, 2803,
549 }, {
550 1431, 1412, 1401, 1375, 1336, 1278, 1215, 1168, 1115, 1066,
551 1032, 1008, 991, 975, 962, 954, 950, 947, 947, 955,
552 948, 935, 916, 894, 866, 835, 803, 772, 742, 715,
553 695, 683, 683, 697, 729, 784, 887, 982, 1054, 1096,
554 1111, 1106, 1098, 1107, 1159, 1281, 1505, 1865, 2391, 3072,
555 }, {
556 1427, 1411, 1393, 1353, 1293, 1215, 1160, 1118, 1072, 1031,
557 1003, 984, 971, 960, 952, 948, 947, 957, 952, 941,
558 924, 902, 876, 847, 815, 781, 750, 723, 700, 685,
559 681, 691, 719, 766, 858, 958, 1039, 1089, 1109, 1108,
560 1099, 1102, 1141, 1245, 1442, 1766, 2250, 2930, 3072, 3072,
561 }}
562 };
563
565 { -21, -197, -271, -466, 32767, 32767, 32767 },
566 { -197, -29, -244, -271, -540, 32767, 32767 },
567 { -271, -244, -29, -249, -271, -593, 32767 },
568 { -466, -271, -249, -29, -251, -271, -632 },
569 { -540, -271, -251, -29, -251, -271, -664 },
570 { -593, -271, -251, -29, -252, -271, -690 },
571 { -632, -271, -252, -29, -252, -271, -711 },
572 { -664, -271, -252, -29, -252, -271, -730 },
573 { -690, -271, -252, -29, -252, -271, -745 },
574 { -711, -271, -252, -29, -253, -271, -759 },
575 { -730, -271, -253, -29, -253, -271, -771 },
576 };
577
579 -192, -320, -448, -512, -448, -320, -192,
580 };
581
583 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 52, 51, 50,
584 49, 48, 47, 47, 46, 45, 44, 44, 43, 42, 41, 41, 40, 39, 38, 38,
585 37, 36, 36, 35, 35, 34, 33, 33, 32, 32, 31, 30, 30, 29, 29, 28,
586 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 21,
587 20, 20, 19, 19, 19, 18, 18, 18, 17, 17, 17, 16, 16, 16, 15, 15,
588 15, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11,
589 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8,
590 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5,
591 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
592 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
593 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
594 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
595 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
596 1, 1, 0, 0,
597 };
598
600 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4,
601 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8,
602 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12,
603 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 15,
604 };
605
611
613
615 {
616 if (nb_words >
s->input_size) {
619 }
620
621 s->input += nb_words *
s->word_bytes;
622 s->input_size -= nb_words;
623 return 0;
624 }
625
627 {
628 if (
s->key_present) {
629 const uint8_t *
key =
s->input;
634 }
635 return 0;
636 }
637
639 {
641 if (
s->metadata.mtd_ext_size)
642 return skip_input(
s,
s->key_present +
s->metadata.mtd_ext_size + 1);
643 return 0;
644 }
645
647 {
651
652 for (
i = 0;
i <
c->nb_mstr_exp;
i++)
654
655 for (
i = 0;
i <
g->nb_exponent;
i++)
657
658 for (
i = k = 0;
i <
c->nb_mstr_exp;
i++)
659 for (j = 0; j <
g->nb_bias_exp[
i]; j++, k++)
660 c->exponents[
g->exp_ofs + k] = mstr_exp[
i] + bias_exp[k];
661 }
662
664 {
667
668 for (
i = 0,
p =
NULL,
g =
c->groups; i < c->nb_groups;
i++,
p =
g,
g++) {
669 c->exp_strategy[
i] = !
i ||
g->nb_exponent !=
p->nb_exponent ||
get_bits1(&
s->gb);
670 if (
c->exp_strategy[
i]) {
672 } else {
673 memcpy(
c->exponents +
g->exp_ofs,
674 c->exponents +
p->exp_ofs,
675 g->nb_exponent *
sizeof(
c->exponents[0]));
676 }
677 }
678
679 return 0;
680 }
681
683 {
686 }
687
689 {
690 int lwc_val[17] = { 0 };
692
693 for (
i = 0;
i < 11;
i++) {
694 int max_j = 0;
695 int max_v = INT_MIN;
696 int thr = 0;
697
698 for (j =
FFMAX(
i - 3, 0), k = 0; j <=
i + 3; j++, k++) {
700 if (v > max_v) {
701 max_j = j;
702 max_v = v;
703 }
705 }
706
707 if (msk_val[
i] < thr) {
708 for (j =
FFMAX(max_j - 3, 0),
709 k =
FFMAX(3 - max_j, 0);
710 j <= max_j + 3; j++, k++)
712 }
713 }
714
715 for (
i = 0;
i < 16;
i++) {
716 int v =
FFMAX(lwc_val[
i], -512);
717 msk_val[
i] =
FFMAX(msk_val[
i] + v, 0);
718 }
719 }
720
723 int fg_spc, int fg_ofs, int msk_mod, int snr_ofs)
724 {
727 int fast_leak = 0;
728 int slow_leak = 0;
735 const uint16_t *fast_decay =
fast_decay_tab[nb_code][dc_code][msk_mod];
739
740 for (
i = 0;
i < nb_exponent;
i++)
741 psd_val[
i] = (48 -
exp[
i]) * 64;
742
744 for (
i = 0;
i < nb_exponent;
i++) {
745 fast_leak =
log_add(fast_leak - fast_decay[
i],
746 psd_val[
i] - fast_gain + fast_gain_adj[
i]);
747 slow_leak =
log_add(slow_leak - slow_decay,
748 psd_val[
i] - slow_gain[
i]);
749 msk_val[
i] =
FFMAX(fast_leak, slow_leak);
750 }
751
752 fast_leak = 0;
754 fast_leak =
log_add(fast_leak - misc_decay, psd_val[
i] - fast_gain);
755 msk_val[
i] =
FFMAX(msk_val[
i], fast_leak);
756 }
757
758 for (
i = 0;
i < nb_exponent;
i++)
759 msk_val[
i] =
FFMAX(msk_val[
i], hearing_thresh[
i]);
760
761 if (!nb_code)
763
764 for (
i = 0;
i < nb_exponent;
i++) {
765 int v = 16 * (snr_ofs - 64) + psd_val[
i] - msk_val[
i] >> 5;
767 }
768 }
769
771 {
777
778 for (
i = 0;
i <
c->nb_groups;
i++) {
780 if (bap_strategy[
i]) {
784 } else {
785 fg_spc[
i] = fg_spc[
i - 1];
786 fg_ofs[
i] = fg_ofs[
i - 1];
787 msk_mod[
i] = msk_mod[
i - 1];
788 }
789 }
790
794 }
795
797 if (!snr_ofs) {
798 memset(
c->bap, 0,
sizeof(
c->bap));
799 return 0;
800 }
801
802 for (
i = 0,
p =
NULL,
g =
c->groups; i < c->nb_groups;
i++,
p =
g,
g++) {
803 if (
c->exp_strategy[
i] || bap_strategy[
i]) {
805 c->exponents +
g->exp_ofs,
c->bap +
g->exp_ofs,
806 fg_spc[
i], fg_ofs[
i], msk_mod[
i], snr_ofs);
807 } else {
808 memcpy(
c->bap +
g->exp_ofs,
810 g->nb_exponent *
sizeof(
c->bap[0]));
811 }
812 }
813
814 return 0;
815 }
816
818 {
821
822 for (
i = 0,
p =
NULL,
g =
c->groups; i < c->nb_groups;
i++,
p =
g,
g++) {
825
826 if (start >
g->nb_exponent) {
829 }
830
831 for (j = 0; j < start; j++)
832 c->idx[
g->exp_ofs + j] = 0;
833
834 for (; j <
g->nb_exponent; j++)
836 }
else if (
i &&
g->nb_exponent ==
p->nb_exponent) {
837 memcpy(
c->idx +
g->exp_ofs,
839 g->nb_exponent *
sizeof(
c->idx[0]));
840 } else {
841 memset(
c->idx +
g->exp_ofs, 0,
g->nb_exponent *
sizeof(
c->idx[0]));
842 }
843 }
844
845 return 0;
846 }
847
849 {
852
853 for (
i = 0,
g =
c->groups; i < c->nb_groups;
i++,
g++) {
854 float *mnt =
c->mantissas +
g->mnt_ofs;
855
856 for (j = 0; j <
g->nb_exponent; j++) {
857 int bap =
c->bap[
g->exp_ofs + j];
858 int idx =
c->idx[
g->exp_ofs + j];
860 int count =
g->nb_mantissa[j];
863
864 if (!size1) {
865 memset(mnt, 0, count * sizeof(*mnt));
866 } else if (idx) {
868 int escape = -(1 << size1 - 1);
869
870 for (k = 0; k < count; k++)
872
873 for (k = 0; k < count; k++) {
874 if (
values[k] != escape) {
876 } else {
883 else
885 }
886 }
887 } else {
888 for (k = 0; k < count; k++)
890 }
891
892 mnt += count;
893 }
894
895 for (; j <
g->nb_exponent +
c->bw_code; j++) {
896 memset(mnt, 0,
g->nb_mantissa[j] *
sizeof(*mnt));
897 mnt +=
g->nb_mantissa[j];
898 }
899 }
900
901 return 0;
902 }
903
905 {
909
910 if (
s->metadata.rev_id[ch] > 1) {
913 }
914
918 } else {
921 if (
c->gr_code == 3) {
924 }
925 }
926
929
930 for (
i = 0;
i <
c->nb_groups;
i++) {
932 if (
c->nb_mstr_exp == 2) {
933 c->groups[
i].nb_exponent -=
c->bw_code;
934 c->groups[
i].nb_bias_exp[1] -=
c->bw_code;
935 }
936 }
937
946
950 }
951
952 return 0;
953 }
954
956 {
959
962
963 for (ch = start; ch < end; ch++) {
964 if (!
s->metadata.ch_size[ch]) {
966 continue;
967 }
975 }
978 }
979
981 }
982
984 {
986 if (
s->metadata.meter_size)
987 return skip_input(
s,
s->key_present +
s->metadata.meter_size + 1);
988 return 0;
989 }
990
992 {
996 int n2 = n >> 1;
997
998 switch (
g->imdct_phs) {
999 case 0:
1001 for (
int i = 0;
i < n2;
i++)
1003 break;
1004 case 1:
1006 break;
1007 case 2:
1009 for (
int i = 0;
i < n2;
i++)
1011 break;
1012 default:
1014 }
1015 }
1016
1018 {
1023
1024 memset(
result, 0, 1152 *
sizeof(
float));
1025 for (
i = 0,
g =
c->groups; i < c->nb_groups;
i++,
g++) {
1029
1032 }
1033
1034 for (
i = 0;
i < 256;
i++)
1036 for (
i = 256;
i < 896;
i++)
1038 for (
i = 0;
i < 256;
i++)
1040 }
1041
1043 {
1044 if (begin == 960 && end == 960)
1045 return;
1046
1047 if (begin == end) {
1049 } else {
1053
1056 }
1057 }
1058
1060 {
1062 const uint8_t *reorder;
1064
1067 else if (
metadata->nb_channels == 6)
1071 else
1073
1077
1078 for (ch = 0; ch <
metadata->nb_channels; ch++) {
1079 float *
output = (
float *)
frame->extended_data[reorder[ch]];
1083 }
1084
1085 return 0;
1086 }
1087
1089 int *got_frame_ptr,
AVPacket *avpkt)
1090 {
1094
1097
1098 if (
s->metadata.nb_programs > 1 && !
s->metadata.multi_prog_warned) {
1100 "channels will be output in native order.\n",
1101 s->metadata.nb_programs,
s->metadata.prog_conf);
1102 s->metadata.multi_prog_warned = 1;
1103 }
1104
1106 switch (
s->metadata.nb_channels) {
1107 case 4:
1109 break;
1110 case 6:
1112 break;
1113 case 8:
1115 break;
1116 default:
1119 break;
1120 }
1121
1124
1125 i =
s->metadata.nb_channels / 2;
1126 j =
s->metadata.nb_channels;
1141
1142 *got_frame_ptr = 1;
1144 }
1145
1147 {
1149
1150 memset(
s->history, 0,
sizeof(
s->history));
1151 }
1152
1154 {
1156
1157 for (
int i = 0;
i < 3;
i++) {
1160 }
1161
1163 return 0;
1164 }
1165
1166
1168 {
1170
1171 for (
i = 1;
i < 17;
i++)
1173
1174 for (
i = 2;
i < 16;
i++) {
1178 }
1179
1183
1184 for (
i = 1;
i < 17;
i++) {
1188 for (j = 1; j < 4; j++)
1190 }
1191
1193
1194 for (
i = 0;
i < 25;
i++) {
1197 }
1198
1199 for (
i = 1;
i < 1024;
i++)
1201
1202 // short 1
1204 for (
i = 0;
i < 128;
i++)
1206
1207 // start
1208 for (
i = 0;
i < 192;
i++)
1210
1211 // short 2
1212 for (
i = 0;
i < 192;
i++)
1214 for (
i = 0;
i < 64;
i++)
1216
1217 // short 3
1218 for (
i = 0;
i < 64;
i++)
1220 for (
i = 0;
i < 192;
i++)
1222
1223 // bridge
1224 for (
i = 0;
i < 128;
i++)
1226 for (
i = 0;
i < 64;
i++)
1228
1229 // long
1231 for (
i = 0;
i < 640;
i++)
1233 for (
i = 0;
i < 256;
i++)
1235
1236 // reverse start
1237 for (
i = 0;
i < 192;
i++)
1239
1240 // reverse short 2
1241 for (
i = 0;
i < 256;
i++)
1243
1244 // reverse short 3
1245 for (
i = 0;
i < 256;
i++)
1247
1248 // reverse bridge
1249 for (
i = 0;
i < 448;
i++)
1251 }
1252
1254 {
1259
1262
1263 for (
int i = 0;
i < 3;
i++) {
1270 }
1271
1274
1275 s->dectx.metadata.multi_prog_warned =
s->dectx.metadata.output_channel_order ==
CHANNEL_ORDER_CODED;
1276 s->dectx.avctx =
s->avctx = avctx;
1277 return 0;
1278 }
1279
1280 #define OFFSET(x) offsetof(DBEDecodeContext, x)
1281 #define FLAGS (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
1283 { "channel_order", "Order in which the channels are to be exported",
1288 { "coded", "order in which the channels are coded in the bitstream",
1290
1292 };
1293
1299 };
1300
1302 .
p.
name =
"dolby_e",
1315 };