32 #define MAX_SEGMENTS 2 35 #define MAX_EXPONENTS 304 36 #define MAX_MANTISSAS 1024 38 #define MAX_MSTR_EXP 2 39 #define MAX_BIAS_EXP 50 84 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4,
85 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5
99 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
100 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6,
105 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
106 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 6, 7, 7,
107 8, 9, 10, 11, 12, 13, 15, 16, 18, 20, 22, 25,
111 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3,
112 3, 4, 4, 5, 5, 6, 6, 7, 8, 9, 9, 10, 12, 13, 14, 16,
113 18, 19, 22, 24, 27, 29, 32, 36, 40, 44, 49, 54, 60, 66, 74, 82,
120 { 50, { 27, 23 }, 0, 0,
nb_mantissa_50, 2, 0, 1152, 0, 1408, 0 },
124 { 38, { 12, 26 }, 0, 0,
nb_mantissa_38, 0, 0, 192, 0, 256, 0 },
125 { 38, { 12, 26 }, 38, 128,
nb_mantissa_38, 0, 1, 256, 64, 448, 0 },
126 { 38, { 12, 26 }, 76, 256,
nb_mantissa_38, 0, 1, 256, 192, 704, 0 },
127 { 38, { 12, 26 }, 114, 384,
nb_mantissa_38, 0, 1, 256, 320, 0, 0 },
128 { 38, { 12, 26 }, 152, 512,
nb_mantissa_38, 0, 1, 256, 448, 0, 0 },
129 { 38, { 12, 26 }, 190, 640,
nb_mantissa_38, 0, 1, 256, 576, 0, 0 },
130 { 38, { 12, 26 }, 228, 768,
nb_mantissa_38, 0, 1, 256, 704, 0, 0 },
131 { 38, { 12, 26 }, 266, 896,
nb_mantissa_38, 0, 1, 256, 832, 0, 0 },
135 { 38, { 12, 26 }, 0, 0,
nb_mantissa_38, 0, 0, 192, 0, 256, 0 },
136 { 38, { 12, 26 }, 38, 128,
nb_mantissa_38, 0, 1, 256, 64, 448, 0 },
137 { 38, { 12, 26 }, 76, 256,
nb_mantissa_38, 0, 1, 256, 192, 704, 0 },
138 { 38, { 12, 26 }, 114, 384,
nb_mantissa_38, 0, 1, 256, 320, 0, 0 },
139 { 38, { 12, 26 }, 152, 512,
nb_mantissa_38, 0, 1, 256, 448, 0, 0 },
140 { 38, { 12, 26 }, 190, 640,
nb_mantissa_38, 0, 1, 256, 576, 0, 0 },
141 { 44, { 19, 25 }, 228, 768,
nb_mantissa_44, 1, 1, 448, 704, 960, 64 },
145 { 21, { 21 }, 0, 0,
nb_mantissa_50, 2, 0, 1152, 0, 1408, 0 },
149 { 50, { 27, 23 }, 0, 0,
nb_mantissa_50, 2, 2, 1152, 0, 1408, 896 },
153 { 38, { 12, 26 }, 0, 0,
nb_mantissa_38, 0, 1, 256, 64, 0, 0 },
154 { 38, { 12, 26 }, 38, 128,
nb_mantissa_38, 0, 1, 256, 192, 0, 0 },
155 { 38, { 12, 26 }, 76, 256,
nb_mantissa_38, 0, 1, 256, 320, 0, 0 },
156 { 38, { 12, 26 }, 114, 384,
nb_mantissa_38, 0, 1, 256, 448, 0, 0 },
157 { 38, { 12, 26 }, 152, 512,
nb_mantissa_38, 0, 1, 256, 576, 0, 0 },
158 { 38, { 12, 26 }, 190, 640,
nb_mantissa_38, 0, 1, 256, 704, 3008, 0 },
159 { 38, { 12, 26 }, 228, 768,
nb_mantissa_38, 0, 1, 256, 832, 2752, 0 },
160 { 38, { 12, 26 }, 266, 896,
nb_mantissa_38, 0, 2, 192, 960, 2560, 64 },
164 { 44, { 19, 25 }, 0, 0,
nb_mantissa_44, 1, 1, 448, 0, 3264, 0 },
165 { 38, { 12, 26 }, 44, 256,
nb_mantissa_38, 0, 1, 256, 320, 0, 0 },
166 { 38, { 12, 26 }, 82, 384,
nb_mantissa_38, 0, 1, 256, 448, 0, 0 },
167 { 38, { 12, 26 }, 120, 512,
nb_mantissa_38, 0, 1, 256, 576, 0, 0 },
168 { 38, { 12, 26 }, 158, 640,
nb_mantissa_38, 0, 1, 256, 704, 3008, 0 },
169 { 38, { 12, 26 }, 196, 768,
nb_mantissa_38, 0, 1, 256, 832, 2752, 0 },
170 { 38, { 12, 26 }, 234, 896,
nb_mantissa_38, 0, 2, 192, 960, 2560, 64 },
174 { 21, { 21 }, 0, 0,
nb_mantissa_50, 2, 2, 1152, 0, 1408, 896 },
183 { 0, 0, 0, 0 }, { 2, 1, 1, 1 }, { 3, 2, 1, 1 }, { 4, 3, 2, 1 },
184 { 5, 4, 3, 2 }, { 6, 5, 4, 3 }, { 7, 6, 5, 4 }, { 8, 7, 6, 5 },
185 { 9, 8, 7, 6 }, { 10, 9, 8, 7 }, { 11, 10, 9, 8 }, { 12, 11, 10, 9 },
186 { 13, 12, 11, 10 }, { 14, 13, 12, 11 }, { 15, 14, 13, 12 }, { 16, 15, 14, 13 },
190 { 0, 0, 0, 0 }, { 2, 1, 2, 2 }, { 3, 2, 3, 3 }, { 4, 3, 4, 4 },
191 { 5, 4, 5, 5 }, { 6, 5, 6, 6 }, { 7, 6, 7, 7 }, { 8, 7, 8, 8 },
192 { 9, 8, 9, 9 }, { 10, 9, 10, 10 }, { 11, 10, 11, 11 }, { 12, 11, 12, 12 },
193 { 13, 12, 13, 13 }, { 14, 13, 14, 14 }, { 15, 14, 15, 15 }, { 16, 15, 16, 16 },
197 0.00161569379826, 0.00185748233347, 0.00198562758548, 0.00207834078104,
198 0.00215717748523, 0.00223067096393, 0.00230299213147, 0.00237651215396,
199 0.00245275561606, 0.00253281402069, 0.00261754673613, 0.00270768786168,
200 0.00280390761895, 0.00290684998656, 0.00301715751161, 0.00313548872798,
201 0.00326253122934, 0.00339901215995, 0.00354570716636, 0.00370344845023,
202 0.00387313232586, 0.00405572653911, 0.00425227750970, 0.00446391759265,
203 0.00469187240551, 0.00493746822816, 0.00520213944619, 0.00548743597507,
204 0.00579503056737, 0.00612672586953, 0.00648446105606, 0.00687031782873,
205 0.00728652552677, 0.00773546505205, 0.00821967127415, 0.00874183354619,
206 0.00930479393832, 0.00991154278653, 0.01056521116692, 0.01126905994567,
207 0.01202646513050, 0.01284089936559, 0.01371590957417, 0.01465509096066,
208 0.01566205783408, 0.01674041199523, 0.01789370972358, 0.01912542867865,
209 0.02043893626265, 0.02183746113793, 0.02332406961796, 0.02490164852364,
210 0.02657289580178, 0.02834031974193, 0.03020624702903, 0.03217283918354,
211 0.03424211623810, 0.03641598586180, 0.03869627565015, 0.04108476601498,
212 0.04358322107390, 0.04619341515939, 0.04891715301882, 0.05175628239149,
214 0.05471237327267, 0.05778734733755, 0.06098291402413, 0.06430101352084,
215 0.06774345212186, 0.07131188644726, 0.07500780649199, 0.07883251748595,
216 0.08278712056651, 0.08687249228061, 0.09108926295730, 0.09543779401074,
217 0.09991815425851, 0.10453009536427, 0.10927302653894, 0.11414598865987,
218 0.11914762799220, 0.12427616972097, 0.12952939152560, 0.13490459744934,
219 0.14039859233595, 0.14600765712201, 0.15172752528722, 0.15755336077528,
220 0.16347973770491, 0.16950062219342, 0.17560935661442, 0.18179864660619,
221 0.18806055113821, 0.19438647593012, 0.20076717050010, 0.20719272909882,
222 0.21365259576030, 0.22013557367283, 0.22662983904194, 0.23312295958328,
223 0.23960191774666, 0.24605313873388, 0.25246252333253, 0.25881548554631,
224 0.26509699495987, 0.27129162373316, 0.27738359807707, 0.28335685401987,
225 0.28919509723179, 0.29488186663467, 0.30040060148455, 0.30573471157819,
226 0.31086765019993, 0.31578298939317, 0.32046449711227, 0.32489621578468,
227 0.32906254179156, 0.33294830535654, 0.33653885031840, 0.33982011325336,
228 0.34277870140679, 0.34540196889300, 0.34767809062480, 0.34959613344194,
229 0.35114612391958, 0.35231911235422, 0.35310723244504, 0.35350375621308,
231 0.35350314372945, 0.35310108725579, 0.35229454943591, 0.35108179521634,
232 0.34946241721522, 0.34743735430290, 0.34500890320420, 0.34218072298001,
233 0.33895783229541, 0.33534659943168, 0.33135472505060, 0.32699121776996,
234 0.32226636266000, 0.31719168282019, 0.31177989424432, 0.30604485422875,
235 0.30000150362379, 0.29366580327088, 0.28705466500775, 0.28018587766131,
236 0.27307802848095, 0.26575042049535, 0.25822298630189, 0.25051619882000,
237 0.24265097955783, 0.23464860495522, 0.22653061137548, 0.21831869932335,
238 0.21003463746705, 0.20170016703857, 0.19333690717811, 0.18496626177620,
239 0.17660932835062, 0.16828680947474, 0.16001892724986, 0.15182534128597,
240 0.14372507062477, 0.13573642000364, 0.12787691082233, 0.12016321713317,
241 0.11261110693234, 0.10523538898282, 0.09804986534955, 0.09106728977263,
242 0.08429933194438, 0.07775654768810, 0.07144835495683, 0.06538301547324,
243 0.05956762170687, 0.05400808871425, 0.04870915012107, 0.04367435714993,
244 0.03890607899172, 0.03440550179663, 0.03017262174627, 0.02620622428513,
245 0.02250383492507, 0.01906161305732, 0.01587412848221, 0.01293388032354,
246 0.01023019677288, 0.00774641320626, 0.00545109736891, 0.00325868651263,
250 0.00018861094606, 0.00033433010202, 0.00050309624485, 0.00070306161748,
251 0.00093995174533, 0.00121913067128, 0.00154606505568, 0.00192647806126,
252 0.00236641248692, 0.00287225985240, 0.00345077377440, 0.00410907465023,
253 0.00485464855241, 0.00569534163219, 0.00663935063508, 0.00769520981249,
254 0.00887177436246, 0.01017820046395, 0.01162392194150, 0.01321862359335,
255 0.01497221122468, 0.01689477844427, 0.01899657030441, 0.02128794388846,
256 0.02377932597692, 0.02648116795039, 0.02940389811590, 0.03255787167130,
257 0.03595331854986, 0.03960028941437, 0.04350860009563, 0.04768777479454,
258 0.05214698838949, 0.05689500821121, 0.06194013566525, 0.06729014809766,
259 0.07295224131210, 0.07893297315602, 0.08523820859989, 0.09187306673620,
260 0.09884187012422, 0.10614809690222, 0.11379433608064, 0.12178224641797,
261 0.13011251926531, 0.13878484574660, 0.14779788861830, 0.15714925912610,
262 0.16683549914631, 0.17685206886673, 0.18719334022589, 0.19785259629099,
263 0.20882203671372, 0.22009278936030, 0.23165492816694, 0.24349749722585,
264 0.25560854105961, 0.26797514099368, 0.28058345748882, 0.29341877824732,
265 0.30646557185942, 0.31970754671026, 0.33312771482295, 0.34670846027024,
267 0.36043161174692, 0.37427851885723, 0.38823013163645, 0.40226708279486,
268 0.41636977214436, 0.43051845264462, 0.44469331748632, 0.45887458761470,
269 0.47304259908636, 0.48717788964798, 0.50126128392546, 0.51527397661778,
270 0.52919761310050, 0.54301436685998, 0.55670701320069, 0.57025899869448,
271 0.58365450587230, 0.59687851269542, 0.60991684638414, 0.62275623122793,
272 0.63538433005035, 0.64778977905593, 0.65996221584264, 0.67189230042379,
273 0.68357172916486, 0.69499324160511, 0.70615062019861, 0.71703868307548,
274 0.72765326998919, 0.73799122168099, 0.74805035295521, 0.75782941981995,
275 0.76732808110520, 0.77654685502339, 0.78548707118622, 0.79415081863423,
276 0.80254089047207, 0.81066072573188, 0.81851434910893, 0.82610630922734,
277 0.83344161609862, 0.84052567843230, 0.84736424144524, 0.85396332579459,
278 0.86032916822973, 0.86646816451999, 0.87238681516918, 0.87809167437532,
279 0.88358930263537, 0.88888622333073, 0.89398888356256, 0.89890361943564,
280 0.90363662591861, 0.90819393133744, 0.91258137648979, 0.91680459830070,
281 0.92086901787718, 0.92477983276087, 0.92854201312583, 0.93216030163834,
282 0.93563921662343, 0.93898305819384, 0.94219591693690, 0.94528168477979,
284 0.94823843319821, 0.95106834367330, 0.95377776558539, 0.95636718335775,
285 0.95883679961479, 0.96118650212341, 0.96341583179195, 0.96552395212906,
286 0.96750962060547, 0.96937116231768, 0.97110644638309, 0.97271286544154,
287 0.97418731862798, 0.97552619834964, 0.97672538116257, 0.97778022299974,
288 0.97868555895586, 0.97943570778357, 0.98002448120255, 0.98044519806866,
289 0.98069070339493, 0.98075339216123, 0.98062523779637, 0.98029782516478,
290 0.97976238784222, 0.97900984942031, 0.97803086854002, 0.97681588731895,
291 0.97535518280755, 0.97363892108474, 0.97165721358452, 0.96940017523145,
292 0.96685798395452, 0.96402094114589, 0.96087953263194, 0.95742448973047,
293 0.95364684997699, 0.94953801711660, 0.94508981997396, 0.94029456983253,
294 0.93514511597504, 0.92963489905951, 0.92375800202883, 0.91750919827624,
295 0.91088399681406, 0.90387868421832, 0.89649036314692, 0.88871698725397,
296 0.88055739234735, 0.87201132366062, 0.86307945913336, 0.85376342861693,
297 0.84406582894455, 0.83399023482637, 0.82354120554757, 0.81272428745995,
298 0.80154601230457, 0.79001389138101, 0.77813640562199, 0.76592299164227,
299 0.75338402384395, 0.74053079267526, 0.72737547915460, 0.71393112578527,
303 0.00326887936450, 0.00550242900936, 0.00786846643791, 0.01045683453520,
304 0.01330402120132, 0.01643221072863, 0.01985798040609, 0.02359509464766,
305 0.02765559221954, 0.03205025893128, 0.03678884369614, 0.04188015679495,
306 0.04733210987781, 0.05315172583924, 0.05934513287609, 0.06591755045290,
307 0.07287327156378, 0.08021564389822, 0.08794705152307, 0.09606889811179,
308 0.10458159240070, 0.11348453632940, 0.12277611617809, 0.13245369691511,
309 0.14251361989876, 0.15295120402567, 0.16376075037904, 0.17493555039885,
310 0.18646789757072, 0.19834910260891, 0.21056951208995, 0.22311853047787,
311 0.23598464546683, 0.24915545655419, 0.26261770674500, 0.27635731727778,
312 0.29035942525136, 0.30460842402318, 0.31908800624032, 0.33378120935681,
313 0.34867046348260, 0.36373764140285, 0.37896411059909, 0.39433078709788,
314 0.40981819096657, 0.42540650327031, 0.44107562429959, 0.45680523287270,
315 0.47257484651351, 0.48836388230077, 0.50415171818214, 0.51991775454258,
316 0.53564147581496, 0.55130251191887, 0.56688069931047, 0.58235614142007,
317 0.59770926827271, 0.61292089506118, 0.62797227945823, 0.64284517745255,
318 0.65752189749349, 0.67198535273209, 0.68621911114984, 0.70020744337099,
326 { 12, 8, 4, 0 }, { 14, 10, 6, 0 }, { 12, 8, 4, 0 }
332 128, 256, 384, 512, 640, 768, 896, 1024
338 { { 354, -1 }, { 425, 425 } },
339 { { 266, -1 }, { 320, -1 } },
340 { { 213, -1 }, { 256, -1 } }
345 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
346 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
347 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
348 142, 142, 142, 142, 142, 142, 142, 142,
350 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
351 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
352 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
353 -1, -1, -1, -1, -1, -1, -1, -1,
355 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
356 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
357 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
358 170, 170, 170, 170, 170, 170, 170, 170,
360 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
361 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
362 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
363 64, 64, 64, 64, 64, 64, 64, 64,
365 266, 266, 106, 106, 106, 106, 106, 106, 106, 106,
366 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
367 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
368 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
371 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
372 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
373 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
374 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
377 319, 319, 128, 128, 128, 128, 128, 128, 128, 128,
378 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
379 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
380 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
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, -1, -1, -1, -1, -1, -1,
386 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
389 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
390 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
391 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
392 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
393 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
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, -1, -1, -1, -1, -1, -1,
398 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
399 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
401 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
402 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
403 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
404 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
405 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
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 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
411 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
417 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
418 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
419 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
420 0, 1, 2, 4, 7, 11, 16, 29, 44, 59,
421 76, 94, 116, 142, 179, 221, 252, 285, 312, 334,
423 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
424 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
425 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
426 2, 5, 8, 10, 15, 28, 42, 57, 75, 93,
427 115, 140, 177, 219, 247, 280, 308, 330, 427, 533,
429 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
430 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
431 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
432 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
433 0, 2, 5, 8, 12, 21, 35, 51, 69, 89,
434 111, 138, 176, 220, 251, 284, 312, 334,
436 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
437 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
438 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
439 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
440 5, 8, 11, 18, 33, 49, 65, 84, 106, 132,
441 168, 214, 245, 279, 308, 329, 427, 533,
443 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
444 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
445 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
447 0, 0, 0, 0, 0, 1, 4, 7, 10, 17,
448 31, 47, 65, 84, 107, 134, 171, 215, 250, 283,
451 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
452 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
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, 3, 6, 9, 13, 27, 43,
456 60, 79, 100, 126, 160, 207, 242, 276, 307, 329,
463 3072, 3072, 3072, 3072, 3072, 3072, 1063, 1063, 1063, 1063,
464 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
465 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
466 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
468 3072, 3072, 3072, 3072, 3072, 3072, 850, 850, 850, 850,
469 850, 850, 850, 850, 850, 850, 850, 850, 850, 850,
470 850, 850, 850, 850, 850, 850, 850, 850, 850, 850,
471 850, 850, 850, 850, 850, 850, 850, 850,
473 3072, 1212, 1212, 1212, 999, 999, 999, 999, 999, 999,
474 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
475 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
476 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
479 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
480 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
481 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
482 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
485 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072,
486 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
487 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
488 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
489 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
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, -1, -1, -1, -1, -1, -1,
494 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
495 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
501 1403, 1141, 1000, 959, 948, 957, 946, 925, 899, 871,
502 843, 815, 789, 766, 745, 727, 705, 687, 681, 686,
503 701, 725, 768, 854, 940, 1018, 1075, 1103, 1111, 1106,
504 1098, 1105, 1142, 1237, 1419, 1721, 2169, 2805,
506 1401, 1130, 995, 957, 947, 955, 941, 918, 890, 861,
507 831, 803, 777, 754, 734, 717, 698, 684, 682, 692,
508 712, 743, 798, 894, 976, 1045, 1091, 1109, 1110, 1102,
509 1098, 1116, 1174, 1300, 1526, 1884, 2401, 3072,
511 1393, 1086, 974, 949, 957, 941, 913, 878, 843, 808,
512 777, 750, 727, 708, 695, 686, 681, 689, 714, 752,
513 811, 888, 971, 1044, 1087, 1108, 1110, 1102, 1098, 1115,
514 1172, 1290, 1489, 1812, 2293, 2964, 3072, 3072,
516 1412, 1343, 1141, 1047, 1000, 974, 959, 951, 948, 947,
517 957, 953, 946, 936, 925, 906, 878, 850, 822, 795,
518 771, 745, 719, 700, 687, 681, 685, 701, 733, 784,
519 885, 977, 1047, 1092, 1110, 1108, 1099, 1102, 1138, 1233,
520 1413, 1711, 2157, 2797,
522 1412, 1336, 1130, 1040, 995, 970, 957, 950, 947, 947,
523 955, 950, 941, 930, 918, 897, 868, 838, 810, 783,
524 759, 734, 710, 693, 684, 681, 690, 712, 752, 823,
525 924, 1009, 1069, 1102, 1111, 1104, 1098, 1111, 1168, 1295,
526 1518, 1873, 2388, 3072,
528 1411, 1293, 1086, 1009, 974, 957, 949, 947, 957, 951,
529 941, 928, 913, 896, 878, 852, 817, 785, 756, 732,
530 713, 695, 683, 682, 689, 710, 746, 811, 906, 992,
531 1061, 1099, 1111, 1106, 1098, 1107, 1155, 1266, 1471, 1799,
532 2277, 2945, 3072, 3072,
534 1431, 1412, 1403, 1379, 1343, 1293, 1229, 1180, 1125, 1075,
535 1040, 1014, 996, 979, 965, 957, 951, 948, 947, 957,
536 951, 940, 924, 903, 877, 846, 815, 785, 753, 725,
537 702, 686, 681, 689, 714, 760, 847, 947, 1028, 1083,
538 1108, 1109, 1101, 1100, 1132, 1222, 1402, 1705, 2160, 2803,
540 1431, 1412, 1401, 1375, 1336, 1278, 1215, 1168, 1115, 1066,
541 1032, 1008, 991, 975, 962, 954, 950, 947, 947, 955,
542 948, 935, 916, 894, 866, 835, 803, 772, 742, 715,
543 695, 683, 683, 697, 729, 784, 887, 982, 1054, 1096,
544 1111, 1106, 1098, 1107, 1159, 1281, 1505, 1865, 2391, 3072,
546 1427, 1411, 1393, 1353, 1293, 1215, 1160, 1118, 1072, 1031,
547 1003, 984, 971, 960, 952, 948, 947, 957, 952, 941,
548 924, 902, 876, 847, 815, 781, 750, 723, 700, 685,
549 681, 691, 719, 766, 858, 958, 1039, 1089, 1109, 1108,
550 1099, 1102, 1141, 1245, 1442, 1766, 2250, 2930, 3072, 3072,
555 { -21, -197, -271, -466, 32767, 32767, 32767 },
556 { -197, -29, -244, -271, -540, 32767, 32767 },
557 { -271, -244, -29, -249, -271, -593, 32767 },
558 { -466, -271, -249, -29, -251, -271, -632 },
559 { -540, -271, -251, -29, -251, -271, -664 },
560 { -593, -271, -251, -29, -252, -271, -690 },
561 { -632, -271, -252, -29, -252, -271, -711 },
562 { -664, -271, -252, -29, -252, -271, -730 },
563 { -690, -271, -252, -29, -252, -271, -745 },
564 { -711, -271, -252, -29, -253, -271, -759 },
565 { -730, -271, -253, -29, -253, -271, -771 },
569 -192, -320, -448, -512, -448, -320, -192,
573 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 52, 51, 50,
574 49, 48, 47, 47, 46, 45, 44, 44, 43, 42, 41, 41, 40, 39, 38, 38,
575 37, 36, 36, 35, 35, 34, 33, 33, 32, 32, 31, 30, 30, 29, 29, 28,
576 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 21,
577 20, 20, 19, 19, 19, 18, 18, 18, 17, 17, 17, 16, 16, 16, 15, 15,
578 15, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11,
579 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8,
580 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5,
581 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
582 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
583 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
584 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
585 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
590 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4,
591 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8,
592 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12,
593 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 15,
658 for (i = 0, p =
NULL, g = c->
groups; i < c->nb_groups; i++, p = g, g++) {
674 int c =
FFABS(a - b) >> 1;
680 int lwc_val[17] = { 0 };
683 for (i = 0; i < 11; i++) {
688 for (j =
FFMAX(i - 3, 0), k = 0; j <= i + 3; j++, k++) {
697 if (msk_val[i] < thr) {
698 for (j =
FFMAX(max_j - 3, 0),
699 k =
FFMAX(3 - max_j, 0);
700 j <= max_j + 3; j++, k++)
705 for (i = 0; i < 16; i++) {
706 int v =
FFMAX(lwc_val[i], -512);
707 msk_val[
i] =
FFMAX(msk_val[i] + v, 0);
713 int fg_spc,
int fg_ofs,
int msk_mod,
int snr_ofs)
725 const uint16_t *fast_decay =
fast_decay_tab[nb_code][dc_code][msk_mod];
731 psd_val[i] = (48 - exp[i]) * 64;
735 fast_leak =
log_add(fast_leak - fast_decay[i],
736 psd_val[i] - fast_gain + fast_gain_adj[i]);
737 slow_leak =
log_add(slow_leak - slow_decay,
738 psd_val[i] - slow_gain[i]);
739 msk_val[
i] =
FFMAX(fast_leak, slow_leak);
743 for (i = nb_exponent - 1; i >
band_low_tab[nb_code]; i--) {
744 fast_leak =
log_add(fast_leak - misc_decay, psd_val[i] - fast_gain);
745 msk_val[
i] =
FFMAX(msk_val[i], fast_leak);
749 msk_val[i] =
FFMAX(msk_val[i], hearing_thresh[i]);
755 int v = 16 * (snr_ofs - 64) + psd_val[i] - msk_val[i] >> 5;
770 if (bap_strategy[i]) {
775 fg_spc[
i] = fg_spc[i - 1];
776 fg_ofs[
i] = fg_ofs[i - 1];
777 msk_mod[
i] = msk_mod[i - 1];
788 memset(c->
bap, 0,
sizeof(c->
bap));
792 for (i = 0, p =
NULL, g = c->
groups; i < c->nb_groups; i++, p = g, g++) {
796 fg_spc[i], fg_ofs[i], msk_mod[i], snr_ofs);
812 for (i = 0, p =
NULL, g = c->
groups; i < c->nb_groups; i++, p = g, g++) {
821 for (j = 0; j < start; j++)
843 for (i = 0, g = c->
groups; i < c->nb_groups; i++, g++) {
855 memset(mnt, 0, count *
sizeof(*mnt));
858 int escape = -(1 << size1 - 1);
860 for (k = 0; k <
count; k++)
863 for (k = 0; k <
count; k++) {
864 if (values[k] != escape) {
865 mnt[k] = values[k] * scale;
872 mnt[k] = ((value + 1) * a - b) *
exp;
874 mnt[k] = (value * a +
b) * exp;
878 for (k = 0; k <
count; k++)
953 for (ch = start; ch < end; ch++) {
991 for (i = 0; i < n2; i++)
992 result[n2 + i] = result[n2 - i - 1];
998 imdct->
imdct_half(imdct, result + n2, values);
999 for (i = 0; i < n2; i++)
1000 result[i] = -result[n - i - 1];
1014 memset(
result, 0, 1152 *
sizeof(
float));
1015 for (i = 0, g = c->
groups; i < c->nb_groups; i++, g++) {
1024 for (i = 0; i < 256; i++)
1025 output[i] = history[i] +
result[i];
1026 for (i = 256; i < 896; i++)
1028 for (i = 0; i < 256; i++)
1029 history[i] =
result[896 + i];
1034 if (begin == 960 && end == 960)
1045 output[i] *= a * (FRAME_SAMPLES - i - 1) + b *
i;
1079 int *got_frame_ptr,
AVPacket *avpkt)
1090 "channels will be output in native order.\n",
1144 for (i = 0; i < 3; i++)
1156 for (i = 1; i < 17; i++)
1159 for (i = 2; i < 16; i++) {
1169 for (i = 1; i < 17; i++) {
1173 for (j = 1; j < 4; j++)
1174 mantissa_tab3[i][j] = 1.0
f / (1 << i) + 1.0f / (1 << j) - 1.0
f / (1 << i + j);
1179 for (i = 0; i < 25; i++) {
1184 for (i = 1; i < 1024; i++)
1189 for (i = 0; i < 128; i++)
1193 for (i = 0; i < 192; i++)
1197 for (i = 0; i < 192; i++)
1199 for (i = 0; i < 64; i++)
1203 for (i = 0; i < 64; i++)
1205 for (i = 0; i < 192; i++)
1209 for (i = 0; i < 128; i++)
1211 for (i = 0; i < 64; i++)
1216 for (i = 0; i < 640; i++)
1218 for (i = 0; i < 256; i++)
1222 for (i = 0; i < 192; i++)
1226 for (i = 0; i < 256; i++)
1230 for (i = 0; i < 256; i++)
1234 for (i = 0; i < 448; i++)
1247 for (i = 0; i < 3; i++)
static const uint8_t nb_groups_tab[4]
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
#define AV_CH_LAYOUT_7POINT1
int exp_strategy[MAX_GROUPS]
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static const DBEGroup grp_tab_1[8]
static float mantissa_tab3[17][4]
static int filter_frame(DBEDecodeContext *s, AVFrame *frame)
This structure describes decoded (raw) audio or video data.
static void apply_gain(DBEDecodeContext *s, int begin, int end, float *output)
ptrdiff_t const GLvoid * data
static void flush(AVCodecContext *avctx)
Dolby E reading context used by decoder and parser.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
av_cold void ff_kbd_window_init(float *window, float alpha, int n)
Generate a Kaiser-Bessel Derived Window.
uint8_t nb_bias_exp[MAX_MSTR_EXP]
Memory handling functions.
static float win(SuperEqualizerContext *s, float n, int N)
static av_cold int init(AVCodecContext *avctx)
DBEGroup groups[MAX_GROUPS]
static const uint8_t mantissa_size1[16][4]
static const int8_t lfe_channel_tab[MAX_PROG_CONF+1]
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
static const uint8_t ht_code_tab[5]
static const DBEGroup grp_tab_6[7]
#define AV_CH_LAYOUT_4POINT0
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
static const uint8_t ch_reorder_4[4]
static const DBEGroup grp_tab_5[8]
static const uint8_t mantissa_size2[16][4]
static int get_sbits(GetBitContext *s, int n)
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static const uint16_t fast_decay_tab[3][2][2][50]
int ff_dolby_e_convert_input(DBEContext *s, int nb_words, int key)
Use the provided key to transform the input into data (put into s->buffer) suitable for further proce...
static const uint8_t band_ofs_tab[3][4]
int ff_dolby_e_parse_header(DBEContext *s, const uint8_t *buf, int buf_size)
Initialize DBEContext and parse Dolby E metadata.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static int parse_metadata_ext(DBEDecodeContext *s1)
static int parse_channel(DBEDecodeContext *s1, int ch, int seg_id)
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
enum AVSampleFormat sample_fmt
audio sample format
static int dolby_e_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
DolbyEHeaderInfo metadata
static const int16_t lwc_gain_tab[11][7]
static const OptionGroupDef groups[]
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
#define LOCAL_ALIGNED_32(t, v,...)
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce output
GLsizei GLboolean const GLfloat * value
static const uint16_t fast_gain_tab[8]
static const uint8_t ch_reorder_n[8]
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
static const float short_window3[64]
static const uint16_t hearing_thresh_tab[3][3][50]
bitstream reader API header.
static const uint8_t dc_code_tab[5]
static const uint8_t nb_mantissa_50[50]
#define AV_CH_LAYOUT_5POINT1
static const uint8_t imdct_bits_tab[3]
static int parse_key(DBEContext *s)
static int get_bits_left(GetBitContext *gb)
static int parse_bit_alloc(DBEDecodeContext *s1, DBEChannel *c)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static float mantissa_tab2[17][4]
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static const uint8_t ch_reorder_8[8]
static const int16_t lwc_adj_tab[7]
static const DBEGroup grp_tab_2[7]
static const uint8_t bap_tab[64]
DBEChannel channels[MAX_SEGMENTS][MAX_CHANNELS]
static const DBEGroup grp_tab_4[1]
const char * name
Name of the codec implementation.
void(* imdct_calc)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
AVCodec ff_dolby_e_decoder
static const uint16_t slow_gain_tab[3][2][50]
static int parse_indices(DBEContext *s, DBEChannel *c)
static av_cold int dolby_e_init(AVCodecContext *avctx)
uint64_t channel_layout
Audio channel layout.
static const uint8_t nb_mstr_exp_tab[4]
static const uint16_t slow_decay_tab[2][2]
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return values
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
#define AV_EF_EXPLODE
abort decoding on minor error detection
static const uint16_t fast_gain_adj_tab[3][2][62]
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
float mantissas[MAX_MANTISSAS]
static const uint8_t nb_mantissa_44[44]
static void transform(DBEDecodeContext *s1, DBEChannel *c, float *history, float *output)
static const uint16_t misc_decay_tab[3][2][2]
static void imdct_calc(DBEDecodeContext *s1, DBEGroup *g, float *result, float *values)
AVSampleFormat
Audio sample formats.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_RB24
int sample_rate
samples per second
#define AV_CH_LAYOUT_NATIVE
Channel mask value used for AVCodecContext.request_channel_layout to indicate that the user requests ...
static const uint8_t nb_mantissa_38[38]
main external API structure.
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
static void calc_lowcomp(int *msk_val)
static const DBEGroup grp_tab_3[1]
static const float short_window2[192]
static float exponent_tab[50]
static unsigned int get_bits1(GetBitContext *s)
static float gain_tab[1024]
static int parse_mantissas(DBEContext *s, DBEChannel *c)
static int parse_audio(DBEDecodeContext *s1, int start, int end, int seg_id)
void(* vector_fmul_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float.
static const uint8_t log_add_tab[212]
static int log_add(int a, int b)
static const float start_window[192]
static const DBEGroup grp_tab_7[1]
void(* imdct_half)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
static av_cold void dolby_e_flush(AVCodecContext *avctx)
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
static const DBEGroup *const frm_ofs_tab[2][4]
static void bit_allocate(int nb_exponent, int nb_code, int fr_code, int *exp, int *bap, int fg_spc, int fg_ofs, int msk_mod, int snr_ofs)
const uint8_t * nb_mantissa
common internal api header.
float history[MAX_CHANNELS][256]
void(* vector_fmul_add)(float *dst, const float *src0, const float *src1, const float *src2, int len)
Calculate the entry wise product of two vectors of floats, add a third vector of floats and store the...
static const DBEGroup grp_tab_0[1]
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
int exponents[MAX_EXPONENTS]
int channels
number of audio channels
static int parse_exponents(DBEContext *s, DBEChannel *c)
static int ff_thread_once(char *control, void(*routine)(void))
static int skip_input(DBEContext *s, int nb_words)
static av_cold void init_tables(void)
static float mantissa_tab1[17][4]
and forward the result(frame or status change) to the corresponding input.If nothing is possible
static enum AVSampleFormat sample_fmts[]
static const uint8_t band_low_tab[3]
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
uint8_t ** extended_data
pointers to the data planes/channels.
uint64_t request_channel_layout
Request decoder to use this channel layout if it can (0 for default)
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame
static void unbias_exponents(DBEContext *s, DBEChannel *c, DBEGroup *g)
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
static const uint8_t ch_reorder_6[6]
static int parse_meter(DBEDecodeContext *s1)
static float window[3712]
static av_cold int dolby_e_close(AVCodecContext *avctx)