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,
606 if (nb_words >
s->input_size) {
611 s->input += nb_words *
s->word_bytes;
612 s->input_size -= nb_words;
618 if (
s->key_present) {
631 if (
s->metadata.mtd_ext_size)
632 return skip_input(
s,
s->key_present +
s->metadata.mtd_ext_size + 1);
642 for (
i = 0;
i <
c->nb_mstr_exp;
i++)
645 for (
i = 0;
i <
g->nb_exponent;
i++)
648 for (
i = k = 0;
i <
c->nb_mstr_exp;
i++)
649 for (j = 0; j <
g->nb_bias_exp[
i]; j++, k++)
650 c->exponents[
g->exp_ofs + k] = mstr_exp[
i] + bias_exp[k];
658 for (
i = 0, p =
NULL,
g =
c->groups; i < c->nb_groups;
i++, p =
g,
g++) {
660 if (
c->exp_strategy[
i]) {
663 memcpy(
c->exponents +
g->exp_ofs,
665 g->nb_exponent *
sizeof(
c->exponents[0]));
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];
730 for (
i = 0;
i < nb_exponent;
i++)
731 psd_val[
i] = (48 -
exp[
i]) * 64;
734 for (
i = 0;
i < nb_exponent;
i++) {
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);
744 fast_leak =
log_add(fast_leak - misc_decay, psd_val[
i] - fast_gain);
745 msk_val[
i] =
FFMAX(msk_val[
i], fast_leak);
748 for (
i = 0;
i < nb_exponent;
i++)
749 msk_val[
i] =
FFMAX(msk_val[
i], hearing_thresh[
i]);
754 for (
i = 0;
i < nb_exponent;
i++) {
755 int v = 16 * (snr_ofs - 64) + psd_val[
i] - msk_val[
i] >> 5;
768 for (
i = 0;
i <
c->nb_groups;
i++) {
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++) {
793 if (
c->exp_strategy[
i] || bap_strategy[
i]) {
795 c->exponents +
g->exp_ofs,
c->bap +
g->exp_ofs,
796 fg_spc[
i], fg_ofs[
i], msk_mod[
i], snr_ofs);
798 memcpy(
c->bap +
g->exp_ofs,
800 g->nb_exponent *
sizeof(
c->bap[0]));
812 for (
i = 0, p =
NULL,
g =
c->groups; i < c->nb_groups;
i++, p =
g,
g++) {
816 if (start >
g->nb_exponent) {
821 for (j = 0; j < start; j++)
822 c->idx[
g->exp_ofs + j] = 0;
824 for (; j <
g->nb_exponent; j++)
827 memcpy(
c->idx +
g->exp_ofs,
829 g->nb_exponent *
sizeof(
c->idx[0]));
831 memset(
c->idx +
g->exp_ofs, 0,
g->nb_exponent *
sizeof(
c->idx[0]));
843 for (
i = 0,
g =
c->groups; i < c->nb_groups;
i++,
g++) {
844 float *mnt =
c->mantissas +
g->mnt_ofs;
846 for (j = 0; j <
g->nb_exponent; j++) {
847 int bap =
c->bap[
g->exp_ofs + j];
848 int idx =
c->idx[
g->exp_ofs + j];
850 int count =
g->nb_mantissa[j];
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;
878 for (k = 0; k < count; k++)
885 for (; j <
g->nb_exponent +
c->bw_code; j++) {
886 memset(mnt, 0,
g->nb_mantissa[j] *
sizeof(*mnt));
887 mnt +=
g->nb_mantissa[j];
900 if (
s->metadata.rev_id[ch] > 1) {
911 if (
c->gr_code == 3) {
920 for (
i = 0;
i <
c->nb_groups;
i++) {
922 if (
c->nb_mstr_exp == 2) {
923 c->groups[
i].nb_exponent -=
c->bw_code;
924 c->groups[
i].nb_bias_exp[1] -=
c->bw_code;
953 for (ch = start; ch < end; ch++) {
954 if (!
s->metadata.ch_size[ch]) {
955 s1->channels[seg_id][ch].nb_groups = 0;
964 s1->channels[seg_id][ch].nb_groups = 0;
976 if (
s->metadata.meter_size)
977 return skip_input(
s,
s->key_present +
s->metadata.meter_size + 1);
988 switch (
g->imdct_phs) {
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++) {
1017 float *dst = result +
g->dst_ofs;
1021 s1->fdsp->vector_fmul_add(dst,
src,
win, dst,
g->win_len);
1024 for (
i = 0;
i < 256;
i++)
1025 output[
i] = history[
i] + result[
i];
1026 for (
i = 256;
i < 896;
i++)
1027 output[
i] = result[
i];
1028 for (
i = 0;
i < 256;
i++)
1029 history[
i] = result[896 +
i];
1034 if (begin == 960 && end == 960)
1070 transform(
s, &
s->channels[0][ch],
s->history[ch], output);
1079 int *got_frame_ptr,
AVPacket *avpkt)
1088 if (
s->metadata.nb_programs > 1 && !
s->metadata.multi_prog_warned) {
1090 "channels will be output in native order.\n",
1091 s->metadata.nb_programs,
s->metadata.prog_conf);
1092 s->metadata.multi_prog_warned = 1;
1095 switch (
s->metadata.nb_channels) {
1107 avctx->
channels =
s->metadata.nb_channels;
1111 i =
s->metadata.nb_channels / 2;
1112 j =
s->metadata.nb_channels;
1136 memset(
s->history, 0,
sizeof(
s->history));
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.0f / (1 <<
i) + 1.0f / (1 << j) - 1.0f / (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++)
1255 s->dectx.avctx =
s->avctx = avctx;
static void flush(AVCodecContext *avctx)
static enum AVSampleFormat sample_fmts[]
static float win(SuperEqualizerContext *s, float n, int N)
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define AV_EF_EXPLODE
abort decoding on minor error detection
static av_cold int init(AVCodecContext *avctx)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static void unbias_exponents(DBEContext *s, DBEChannel *c, DBEGroup *g)
static const uint8_t mantissa_size2[16][4]
static const uint8_t dc_code_tab[5]
static const uint8_t ch_reorder_4[4]
static const float start_window[192]
static const DBEGroup grp_tab_5[8]
static int parse_indices(DBEContext *s, DBEChannel *c)
static const uint8_t ht_code_tab[5]
static const uint16_t misc_decay_tab[3][2][2]
static const uint16_t fast_decay_tab[3][2][2][50]
static const uint8_t band_low_tab[3]
static const uint8_t nb_mantissa_44[44]
static void calc_lowcomp(int *msk_val)
AVCodec ff_dolby_e_decoder
static float window[3712]
static av_cold int dolby_e_init(AVCodecContext *avctx)
static const DBEGroup grp_tab_4[1]
static int parse_key(DBEContext *s)
static const uint8_t band_ofs_tab[3][4]
static const uint8_t ch_reorder_8[8]
static const uint8_t nb_mstr_exp_tab[4]
static const uint8_t imdct_bits_tab[3]
static int dolby_e_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
static void transform(DBEDecodeContext *s1, DBEChannel *c, float *history, float *output)
static const int8_t lfe_channel_tab[MAX_PROG_CONF+1]
static int parse_metadata_ext(DBEDecodeContext *s1)
static const int16_t lwc_gain_tab[11][7]
static const uint16_t slow_decay_tab[2][2]
static const float short_window2[192]
static int parse_mantissas(DBEContext *s, DBEChannel *c)
static const DBEGroup grp_tab_3[1]
static av_cold void init_tables(void)
static av_cold void dolby_e_flush(AVCodecContext *avctx)
static const uint8_t nb_groups_tab[4]
static float exponent_tab[50]
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)
static const int16_t lwc_adj_tab[7]
static const uint16_t fast_gain_adj_tab[3][2][62]
static const DBEGroup *const frm_ofs_tab[2][4]
static const uint16_t fast_gain_tab[8]
static int log_add(int a, int b)
static const uint8_t nb_mantissa_38[38]
static int parse_exponents(DBEContext *s, DBEChannel *c)
static float mantissa_tab3[17][4]
static void apply_gain(DBEDecodeContext *s, int begin, int end, float *output)
static int skip_input(DBEContext *s, int nb_words)
static int filter_frame(DBEDecodeContext *s, AVFrame *frame)
static void imdct_calc(DBEDecodeContext *s1, DBEGroup *g, float *result, float *values)
static const DBEGroup grp_tab_2[7]
static const uint8_t bap_tab[64]
static const uint8_t log_add_tab[212]
static const DBEGroup grp_tab_0[1]
static const DBEGroup grp_tab_1[8]
static const uint8_t nb_mantissa_50[50]
static av_cold int dolby_e_close(AVCodecContext *avctx)
static const DBEGroup grp_tab_6[7]
static int parse_bit_alloc(DBEDecodeContext *s1, DBEChannel *c)
static const uint8_t ch_reorder_n[8]
static float gain_tab[1024]
static const uint8_t mantissa_size1[16][4]
static const uint8_t ch_reorder_6[6]
static float mantissa_tab1[17][4]
static int parse_channel(DBEDecodeContext *s1, int ch, int seg_id)
static const float short_window3[64]
static float mantissa_tab2[17][4]
static int parse_meter(DBEDecodeContext *s1)
static const uint16_t hearing_thresh_tab[3][3][50]
static const uint16_t slow_gain_tab[3][2][50]
static int parse_audio(DBEDecodeContext *s1, int start, int end, int seg_id)
static const DBEGroup grp_tab_7[1]
int ff_dolby_e_parse_header(DBEContext *s, const uint8_t *buf, int buf_size)
Initialize DBEContext and parse Dolby E metadata.
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...
bitstream reader API header.
static int get_sbits(GetBitContext *s, int n)
static int get_bits_left(GetBitContext *gb)
static unsigned int get_bits1(GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define AV_CH_LAYOUT_4POINT0
#define AV_CH_LAYOUT_7POINT1
#define AV_CH_LAYOUT_5POINT1
#define AV_CH_LAYOUT_NATIVE
Channel mask value used for AVCodecContext.request_channel_layout to indicate that the user requests ...
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
AVSampleFormat
Audio sample formats.
@ AV_SAMPLE_FMT_FLTP
float, planar
av_cold void ff_kbd_window_init(float *window, float alpha, int n)
Generate a Kaiser-Bessel Derived Window.
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
static int ff_thread_once(char *control, void(*routine)(void))
Memory handling functions.
#define LOCAL_ALIGNED_32(t, v,...)
main external API structure.
enum AVSampleFormat sample_fmt
audio sample format
int sample_rate
samples per second
uint64_t request_channel_layout
Request decoder to use this channel layout if it can (0 for default)
int channels
number of audio channels
uint64_t channel_layout
Audio channel layout.
const char * name
Name of the codec implementation.
This structure describes decoded (raw) audio or video data.
int nb_samples
number of audio samples (per channel) described by this frame
uint8_t ** extended_data
pointers to the data planes/channels.
This structure stores compressed data.
int exponents[MAX_EXPONENTS]
float mantissas[MAX_MANTISSAS]
int exp_strategy[MAX_GROUPS]
DBEGroup groups[MAX_GROUPS]
Dolby E reading context used by decoder and parser.
float history[MAX_CHANNELS][256]
const uint8_t * nb_mantissa
uint8_t nb_bias_exp[MAX_MSTR_EXP]
void(* imdct_calc)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
void(* imdct_half)(struct FFTContext *s, FFTSample *output, const FFTSample *input)