LCOV - code coverage report
Current view: top level - libavcodec - dolby_e.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 53 0.0 %
Date: 2017-12-13 10:57:33 Functions: 0 1 0.0 %

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

Generated by: LCOV version 1.13