/*
 * Header file for hardcoded AAC SBR windows
 *
 * Copyright (c) 2014 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
 *
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * FFmpeg is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with FFmpeg; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

#ifndef AVCODEC_AACSBR_TABLEGEN_H
#define AVCODEC_AACSBR_TABLEGEN_H

#if CONFIG_HARDCODED_TABLES
#define aacsbr_tableinit()
#include "libavcodec/aacsbr_tables.h"
#else
///< window coefficients for analysis/synthesis QMF banks
static DECLARE_ALIGNED(32, float, sbr_qmf_window_ds)[320];
static DECLARE_ALIGNED(32, float, sbr_qmf_window_us)[640] = {
     0.0000000000, -0.0005525286, -0.0005617692, -0.0004947518,
    -0.0004875227, -0.0004893791, -0.0005040714, -0.0005226564,
    -0.0005466565, -0.0005677802, -0.0005870930, -0.0006132747,
    -0.0006312493, -0.0006540333, -0.0006777690, -0.0006941614,
    -0.0007157736, -0.0007255043, -0.0007440941, -0.0007490598,
    -0.0007681371, -0.0007724848, -0.0007834332, -0.0007779869,
    -0.0007803664, -0.0007801449, -0.0007757977, -0.0007630793,
    -0.0007530001, -0.0007319357, -0.0007215391, -0.0006917937,
    -0.0006650415, -0.0006341594, -0.0005946118, -0.0005564576,
    -0.0005145572, -0.0004606325, -0.0004095121, -0.0003501175,
    -0.0002896981, -0.0002098337, -0.0001446380, -0.0000617334,
     0.0000134949,  0.0001094383,  0.0002043017,  0.0002949531,
     0.0004026540,  0.0005107388,  0.0006239376,  0.0007458025,
     0.0008608443,  0.0009885988,  0.0011250155,  0.0012577884,
     0.0013902494,  0.0015443219,  0.0016868083,  0.0018348265,
     0.0019841140,  0.0021461583,  0.0023017254,  0.0024625616,
     0.0026201758,  0.0027870464,  0.0029469447,  0.0031125420,
     0.0032739613,  0.0034418874,  0.0036008268,  0.0037603922,
     0.0039207432,  0.0040819753,  0.0042264269,  0.0043730719,
     0.0045209852,  0.0046606460,  0.0047932560,  0.0049137603,
     0.0050393022,  0.0051407353,  0.0052461166,  0.0053471681,
     0.0054196775,  0.0054876040,  0.0055475714,  0.0055938023,
     0.0056220643,  0.0056455196,  0.0056389199,  0.0056266114,
     0.0055917128,  0.0055404363,  0.0054753783,  0.0053838975,
     0.0052715758,  0.0051382275,  0.0049839687,  0.0048109469,
     0.0046039530,  0.0043801861,  0.0041251642,  0.0038456408,
     0.0035401246,  0.0032091885,  0.0028446757,  0.0024508540,
     0.0020274176,  0.0015784682,  0.0010902329,  0.0005832264,
     0.0000276045, -0.0005464280, -0.0011568135, -0.0018039472,
    -0.0024826723, -0.0031933778, -0.0039401124, -0.0047222596,
    -0.0055337211, -0.0063792293, -0.0072615816, -0.0081798233,
    -0.0091325329, -0.0101150215, -0.0111315548, -0.0121849995,
     0.0132718220,  0.0143904666,  0.0155405553,  0.0167324712,
     0.0179433381,  0.0191872431,  0.0204531793,  0.0217467550,
     0.0230680169,  0.0244160992,  0.0257875847,  0.0271859429,
     0.0286072173,  0.0300502657,  0.0315017608,  0.0329754081,
     0.0344620948,  0.0359697560,  0.0374812850,  0.0390053679,
     0.0405349170,  0.0420649094,  0.0436097542,  0.0451488405,
     0.0466843027,  0.0482165720,  0.0497385755,  0.0512556155,
     0.0527630746,  0.0542452768,  0.0557173648,  0.0571616450,
     0.0585915683,  0.0599837480,  0.0613455171,  0.0626857808,
     0.0639715898,  0.0652247106,  0.0664367512,  0.0676075985,
     0.0687043828,  0.0697630244,  0.0707628710,  0.0717002673,
     0.0725682583,  0.0733620255,  0.0741003642,  0.0747452558,
     0.0753137336,  0.0758008358,  0.0761992479,  0.0764992170,
     0.0767093490,  0.0768173975,  0.0768230011,  0.0767204924,
     0.0765050718,  0.0761748321,  0.0757305756,  0.0751576255,
     0.0744664394,  0.0736406005,  0.0726774642,  0.0715826364,
     0.0703533073,  0.0689664013,  0.0674525021,  0.0657690668,
     0.0639444805,  0.0619602779,  0.0598166570,  0.0575152691,
     0.0550460034,  0.0524093821,  0.0495978676,  0.0466303305,
     0.0434768782,  0.0401458278,  0.0366418116,  0.0329583930,
     0.0290824006,  0.0250307561,  0.0207997072,  0.0163701258,
     0.0117623832,  0.0069636862,  0.0019765601, -0.0032086896,
    -0.0085711749, -0.0141288827, -0.0198834129, -0.0258227288,
    -0.0319531274, -0.0382776572, -0.0447806821, -0.0514804176,
    -0.0583705326, -0.0654409853, -0.0726943300, -0.0801372934,
    -0.0877547536, -0.0955533352, -0.1035329531, -0.1116826931,
    -0.1200077984, -0.1285002850, -0.1371551761, -0.1459766491,
    -0.1549607071, -0.1640958855, -0.1733808172, -0.1828172548,
    -0.1923966745, -0.2021250176, -0.2119735853, -0.2219652696,
    -0.2320690870, -0.2423016884, -0.2526480309, -0.2631053299,
    -0.2736634040, -0.2843214189, -0.2950716717, -0.3059098575,
    -0.3168278913, -0.3278113727, -0.3388722693, -0.3499914122,
     0.3611589903,  0.3723795546,  0.3836350013,  0.3949211761,
     0.4062317676,  0.4175696896,  0.4289119920,  0.4402553754,
     0.4515996535,  0.4629308085,  0.4742453214,  0.4855253091,
     0.4967708254,  0.5079817500,  0.5191234970,  0.5302240895,
     0.5412553448,  0.5522051258,  0.5630789140,  0.5738524131,
     0.5845403235,  0.5951123086,  0.6055783538,  0.6159109932,
     0.6261242695,  0.6361980107,  0.6461269695,  0.6559016302,
     0.6655139880,  0.6749663190,  0.6842353293,  0.6933282376,
     0.7022388719,  0.7109410426,  0.7194462634,  0.7277448900,
     0.7358211758,  0.7436827863,  0.7513137456,  0.7587080760,
     0.7658674865,  0.7727780881,  0.7794287519,  0.7858353120,
     0.7919735841,  0.7978466413,  0.8034485751,  0.8087695004,
     0.8138191270,  0.8185776004,  0.8230419890,  0.8272275347,
     0.8311038457,  0.8346937361,  0.8379717337,  0.8409541392,
     0.8436238281,  0.8459818469,  0.8480315777,  0.8497805198,
     0.8511971524,  0.8523047035,  0.8531020949,  0.8535720573,
     0.8537385600,
};

static av_cold void aacsbr_tableinit(void)
{
    int n;
    for (n = 1; n < 320; n++)
        sbr_qmf_window_us[320 + n] = sbr_qmf_window_us[320 - n];
    sbr_qmf_window_us[384] = -sbr_qmf_window_us[384];
    sbr_qmf_window_us[512] = -sbr_qmf_window_us[512];

    for (n = 0; n < 320; n++)
        sbr_qmf_window_ds[n] = sbr_qmf_window_us[2*n];
}
#endif /* CONFIG_HARDCODED_TABLES */

#endif /* AVCODEC_AACSBR_TABLEGEN_H */