Blame libmp3lame/newmdct.c

Packit 47f805
/*
Packit 47f805
 *      MP3 window subband -> subband filtering -> mdct routine
Packit 47f805
 *
Packit 47f805
 *      Copyright (c) 1999-2000 Takehiro Tominaga
Packit 47f805
 *
Packit 47f805
 *
Packit 47f805
 * This library is free software; you can redistribute it and/or
Packit 47f805
 * modify it under the terms of the GNU Library General Public
Packit 47f805
 * License as published by the Free Software Foundation; either
Packit 47f805
 * version 2 of the License, or (at your option) any later version.
Packit 47f805
 *
Packit 47f805
 * This library is distributed in the hope that it will be useful,
Packit 47f805
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 47f805
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 47f805
 * Library General Public License for more details.
Packit 47f805
 *
Packit 47f805
 * You should have received a copy of the GNU Library General Public
Packit 47f805
 * License along with this library; if not, write to the
Packit 47f805
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 47f805
 * Boston, MA 02111-1307, USA.
Packit 47f805
 */
Packit 47f805
Packit 47f805
/*
Packit 47f805
 *         Special Thanks to Patrick De Smet for your advices.
Packit 47f805
 */
Packit 47f805
Packit 47f805
/* $Id: newmdct.c,v 1.39 2011/05/07 16:05:17 rbrito Exp $ */
Packit 47f805
Packit 47f805
#ifdef HAVE_CONFIG_H
Packit 47f805
# include <config.h>
Packit 47f805
#endif
Packit 47f805
Packit 47f805
#include "lame.h"
Packit 47f805
#include "machine.h"
Packit 47f805
#include "encoder.h"
Packit 47f805
#include "util.h"
Packit 47f805
#include "newmdct.h"
Packit 47f805
Packit 47f805
Packit 47f805
Packit 47f805
#ifndef USE_GOGO_SUBBAND
Packit 47f805
static const FLOAT enwindow[] = {
Packit 47f805
    -4.77e-07 * 0.740951125354959 / 2.384e-06, 1.03951e-04 * 0.740951125354959 / 2.384e-06,
Packit 47f805
    9.53674e-04 * 0.740951125354959 / 2.384e-06, 2.841473e-03 * 0.740951125354959 / 2.384e-06,
Packit 47f805
    3.5758972e-02 * 0.740951125354959 / 2.384e-06, 3.401756e-03 * 0.740951125354959 / 2.384e-06, 9.83715e-04 * 0.740951125354959 / 2.384e-06, 9.9182e-05 * 0.740951125354959 / 2.384e-06, /* 15 */
Packit 47f805
    1.2398e-05 * 0.740951125354959 / 2.384e-06, 1.91212e-04 * 0.740951125354959 / 2.384e-06,
Packit 47f805
    2.283096e-03 * 0.740951125354959 / 2.384e-06, 1.6994476e-02 * 0.740951125354959 / 2.384e-06,
Packit 47f805
    -1.8756866e-02 * 0.740951125354959 / 2.384e-06, -2.630711e-03 * 0.740951125354959 / 2.384e-06,
Packit 47f805
    -2.47478e-04 * 0.740951125354959 / 2.384e-06, -1.4782e-05 * 0.740951125354959 / 2.384e-06,
Packit 47f805
    9.063471690191471e-01,
Packit 47f805
    1.960342806591213e-01,
Packit 47f805
Packit 47f805
Packit 47f805
    -4.77e-07 * 0.773010453362737 / 2.384e-06, 1.05858e-04 * 0.773010453362737 / 2.384e-06,
Packit 47f805
    9.30786e-04 * 0.773010453362737 / 2.384e-06, 2.521515e-03 * 0.773010453362737 / 2.384e-06,
Packit 47f805
    3.5694122e-02 * 0.773010453362737 / 2.384e-06, 3.643036e-03 * 0.773010453362737 / 2.384e-06, 9.91821e-04 * 0.773010453362737 / 2.384e-06, 9.6321e-05 * 0.773010453362737 / 2.384e-06, /* 14 */
Packit 47f805
    1.1444e-05 * 0.773010453362737 / 2.384e-06, 1.65462e-04 * 0.773010453362737 / 2.384e-06,
Packit 47f805
    2.110004e-03 * 0.773010453362737 / 2.384e-06, 1.6112804e-02 * 0.773010453362737 / 2.384e-06,
Packit 47f805
    -1.9634247e-02 * 0.773010453362737 / 2.384e-06, -2.803326e-03 * 0.773010453362737 / 2.384e-06,
Packit 47f805
    -2.77042e-04 * 0.773010453362737 / 2.384e-06, -1.6689e-05 * 0.773010453362737 / 2.384e-06,
Packit 47f805
    8.206787908286602e-01,
Packit 47f805
    3.901806440322567e-01,
Packit 47f805
Packit 47f805
Packit 47f805
    -4.77e-07 * 0.803207531480645 / 2.384e-06, 1.07288e-04 * 0.803207531480645 / 2.384e-06,
Packit 47f805
    9.02653e-04 * 0.803207531480645 / 2.384e-06, 2.174854e-03 * 0.803207531480645 / 2.384e-06,
Packit 47f805
    3.5586357e-02 * 0.803207531480645 / 2.384e-06, 3.858566e-03 * 0.803207531480645 / 2.384e-06, 9.95159e-04 * 0.803207531480645 / 2.384e-06, 9.3460e-05 * 0.803207531480645 / 2.384e-06, /* 13 */
Packit 47f805
    1.0014e-05 * 0.803207531480645 / 2.384e-06, 1.40190e-04 * 0.803207531480645 / 2.384e-06,
Packit 47f805
    1.937389e-03 * 0.803207531480645 / 2.384e-06, 1.5233517e-02 * 0.803207531480645 / 2.384e-06,
Packit 47f805
    -2.0506859e-02 * 0.803207531480645 / 2.384e-06, -2.974033e-03 * 0.803207531480645 / 2.384e-06,
Packit 47f805
    -3.07560e-04 * 0.803207531480645 / 2.384e-06, -1.8120e-05 * 0.803207531480645 / 2.384e-06,
Packit 47f805
    7.416505462720353e-01,
Packit 47f805
    5.805693545089249e-01,
Packit 47f805
Packit 47f805
Packit 47f805
    -4.77e-07 * 0.831469612302545 / 2.384e-06, 1.08242e-04 * 0.831469612302545 / 2.384e-06,
Packit 47f805
    8.68797e-04 * 0.831469612302545 / 2.384e-06, 1.800537e-03 * 0.831469612302545 / 2.384e-06,
Packit 47f805
    3.5435200e-02 * 0.831469612302545 / 2.384e-06, 4.049301e-03 * 0.831469612302545 / 2.384e-06, 9.94205e-04 * 0.831469612302545 / 2.384e-06, 9.0599e-05 * 0.831469612302545 / 2.384e-06, /* 12 */
Packit 47f805
    9.060e-06 * 0.831469612302545 / 2.384e-06, 1.16348e-04 * 0.831469612302545 / 2.384e-06,
Packit 47f805
    1.766682e-03 * 0.831469612302545 / 2.384e-06, 1.4358521e-02 * 0.831469612302545 / 2.384e-06,
Packit 47f805
    -2.1372318e-02 * 0.831469612302545 / 2.384e-06, -3.14188e-03 * 0.831469612302545 / 2.384e-06,
Packit 47f805
    -3.39031e-04 * 0.831469612302545 / 2.384e-06, -1.9550e-05 * 0.831469612302545 / 2.384e-06,
Packit 47f805
    6.681786379192989e-01,
Packit 47f805
    7.653668647301797e-01,
Packit 47f805
Packit 47f805
Packit 47f805
    -4.77e-07 * 0.857728610000272 / 2.384e-06, 1.08719e-04 * 0.857728610000272 / 2.384e-06,
Packit 47f805
    8.29220e-04 * 0.857728610000272 / 2.384e-06, 1.399517e-03 * 0.857728610000272 / 2.384e-06,
Packit 47f805
    3.5242081e-02 * 0.857728610000272 / 2.384e-06, 4.215240e-03 * 0.857728610000272 / 2.384e-06, 9.89437e-04 * 0.857728610000272 / 2.384e-06, 8.7261e-05 * 0.857728610000272 / 2.384e-06, /* 11 */
Packit 47f805
    8.106e-06 * 0.857728610000272 / 2.384e-06, 9.3937e-05 * 0.857728610000272 / 2.384e-06,
Packit 47f805
    1.597881e-03 * 0.857728610000272 / 2.384e-06, 1.3489246e-02 * 0.857728610000272 / 2.384e-06,
Packit 47f805
    -2.2228718e-02 * 0.857728610000272 / 2.384e-06, -3.306866e-03 * 0.857728610000272 / 2.384e-06,
Packit 47f805
    -3.71456e-04 * 0.857728610000272 / 2.384e-06, -2.1458e-05 * 0.857728610000272 / 2.384e-06,
Packit 47f805
    5.993769336819237e-01,
Packit 47f805
    9.427934736519954e-01,
Packit 47f805
Packit 47f805
Packit 47f805
    -4.77e-07 * 0.881921264348355 / 2.384e-06, 1.08719e-04 * 0.881921264348355 / 2.384e-06,
Packit 47f805
    7.8392e-04 * 0.881921264348355 / 2.384e-06, 9.71317e-04 * 0.881921264348355 / 2.384e-06,
Packit 47f805
    3.5007000e-02 * 0.881921264348355 / 2.384e-06, 4.357815e-03 * 0.881921264348355 / 2.384e-06, 9.80854e-04 * 0.881921264348355 / 2.384e-06, 8.3923e-05 * 0.881921264348355 / 2.384e-06, /* 10 */
Packit 47f805
    7.629e-06 * 0.881921264348355 / 2.384e-06, 7.2956e-05 * 0.881921264348355 / 2.384e-06,
Packit 47f805
    1.432419e-03 * 0.881921264348355 / 2.384e-06, 1.2627602e-02 * 0.881921264348355 / 2.384e-06,
Packit 47f805
    -2.3074150e-02 * 0.881921264348355 / 2.384e-06, -3.467083e-03 * 0.881921264348355 / 2.384e-06,
Packit 47f805
    -4.04358e-04 * 0.881921264348355 / 2.384e-06, -2.3365e-05 * 0.881921264348355 / 2.384e-06,
Packit 47f805
    5.345111359507916e-01,
Packit 47f805
    1.111140466039205e+00,
Packit 47f805
Packit 47f805
Packit 47f805
    -9.54e-07 * 0.903989293123443 / 2.384e-06, 1.08242e-04 * 0.903989293123443 / 2.384e-06,
Packit 47f805
    7.31945e-04 * 0.903989293123443 / 2.384e-06, 5.15938e-04 * 0.903989293123443 / 2.384e-06,
Packit 47f805
    3.4730434e-02 * 0.903989293123443 / 2.384e-06, 4.477024e-03 * 0.903989293123443 / 2.384e-06, 9.68933e-04 * 0.903989293123443 / 2.384e-06, 8.0585e-05 * 0.903989293123443 / 2.384e-06, /* 9 */
Packit 47f805
    6.676e-06 * 0.903989293123443 / 2.384e-06, 5.2929e-05 * 0.903989293123443 / 2.384e-06,
Packit 47f805
    1.269817e-03 * 0.903989293123443 / 2.384e-06, 1.1775017e-02 * 0.903989293123443 / 2.384e-06,
Packit 47f805
    -2.3907185e-02 * 0.903989293123443 / 2.384e-06, -3.622532e-03 * 0.903989293123443 / 2.384e-06,
Packit 47f805
    -4.38213e-04 * 0.903989293123443 / 2.384e-06, -2.5272e-05 * 0.903989293123443 / 2.384e-06,
Packit 47f805
    4.729647758913199e-01,
Packit 47f805
    1.268786568327291e+00,
Packit 47f805
Packit 47f805
Packit 47f805
    -9.54e-07 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    1.06812e-04 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    6.74248e-04 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    3.3379e-05 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    3.4412861e-02 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    4.573822e-03 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    9.54151e-04 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    7.6771e-05 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    6.199e-06 * 0.92387953251128675613 / 2.384e-06, 3.4332e-05 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    1.111031e-03 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    1.0933399e-02 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    -2.4725437e-02 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    -3.771782e-03 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    -4.72546e-04 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    -2.7657e-05 * 0.92387953251128675613 / 2.384e-06,
Packit 47f805
    4.1421356237309504879e-01, /* tan(PI/8) */
Packit 47f805
    1.414213562373095e+00,
Packit 47f805
Packit 47f805
Packit 47f805
    -9.54e-07 * 0.941544065183021 / 2.384e-06, 1.05381e-04 * 0.941544065183021 / 2.384e-06,
Packit 47f805
    6.10352e-04 * 0.941544065183021 / 2.384e-06, -4.75883e-04 * 0.941544065183021 / 2.384e-06,
Packit 47f805
    3.4055710e-02 * 0.941544065183021 / 2.384e-06, 4.649162e-03 * 0.941544065183021 / 2.384e-06, 9.35555e-04 * 0.941544065183021 / 2.384e-06, 7.3433e-05 * 0.941544065183021 / 2.384e-06, /* 7 */
Packit 47f805
    5.245e-06 * 0.941544065183021 / 2.384e-06, 1.7166e-05 * 0.941544065183021 / 2.384e-06,
Packit 47f805
    9.56535e-04 * 0.941544065183021 / 2.384e-06, 1.0103703e-02 * 0.941544065183021 / 2.384e-06,
Packit 47f805
    -2.5527000e-02 * 0.941544065183021 / 2.384e-06, -3.914356e-03 * 0.941544065183021 / 2.384e-06,
Packit 47f805
    -5.07355e-04 * 0.941544065183021 / 2.384e-06, -3.0041e-05 * 0.941544065183021 / 2.384e-06,
Packit 47f805
    3.578057213145241e-01,
Packit 47f805
    1.546020906725474e+00,
Packit 47f805
Packit 47f805
Packit 47f805
    -9.54e-07 * 0.956940335732209 / 2.384e-06, 1.02520e-04 * 0.956940335732209 / 2.384e-06,
Packit 47f805
    5.39303e-04 * 0.956940335732209 / 2.384e-06, -1.011848e-03 * 0.956940335732209 / 2.384e-06,
Packit 47f805
    3.3659935e-02 * 0.956940335732209 / 2.384e-06, 4.703045e-03 * 0.956940335732209 / 2.384e-06, 9.15051e-04 * 0.956940335732209 / 2.384e-06, 7.0095e-05 * 0.956940335732209 / 2.384e-06, /* 6 */
Packit 47f805
    4.768e-06 * 0.956940335732209 / 2.384e-06, 9.54e-07 * 0.956940335732209 / 2.384e-06,
Packit 47f805
    8.06808e-04 * 0.956940335732209 / 2.384e-06, 9.287834e-03 * 0.956940335732209 / 2.384e-06,
Packit 47f805
    -2.6310921e-02 * 0.956940335732209 / 2.384e-06, -4.048824e-03 * 0.956940335732209 / 2.384e-06,
Packit 47f805
    -5.42164e-04 * 0.956940335732209 / 2.384e-06, -3.2425e-05 * 0.956940335732209 / 2.384e-06,
Packit 47f805
    3.033466836073424e-01,
Packit 47f805
    1.662939224605090e+00,
Packit 47f805
Packit 47f805
Packit 47f805
    -1.431e-06 * 0.970031253194544 / 2.384e-06, 9.9182e-05 * 0.970031253194544 / 2.384e-06,
Packit 47f805
    4.62532e-04 * 0.970031253194544 / 2.384e-06, -1.573563e-03 * 0.970031253194544 / 2.384e-06,
Packit 47f805
    3.3225536e-02 * 0.970031253194544 / 2.384e-06, 4.737377e-03 * 0.970031253194544 / 2.384e-06, 8.91685e-04 * 0.970031253194544 / 2.384e-06, 6.6280e-05 * 0.970031253194544 / 2.384e-06, /* 5 */
Packit 47f805
    4.292e-06 * 0.970031253194544 / 2.384e-06, -1.3828e-05 * 0.970031253194544 / 2.384e-06,
Packit 47f805
    6.61850e-04 * 0.970031253194544 / 2.384e-06, 8.487225e-03 * 0.970031253194544 / 2.384e-06,
Packit 47f805
    -2.7073860e-02 * 0.970031253194544 / 2.384e-06, -4.174709e-03 * 0.970031253194544 / 2.384e-06,
Packit 47f805
    -5.76973e-04 * 0.970031253194544 / 2.384e-06, -3.4809e-05 * 0.970031253194544 / 2.384e-06,
Packit 47f805
    2.504869601913055e-01,
Packit 47f805
    1.763842528696710e+00,
Packit 47f805
Packit 47f805
Packit 47f805
    -1.431e-06 * 0.98078528040323 / 2.384e-06, 9.5367e-05 * 0.98078528040323 / 2.384e-06,
Packit 47f805
    3.78609e-04 * 0.98078528040323 / 2.384e-06, -2.161503e-03 * 0.98078528040323 / 2.384e-06,
Packit 47f805
    3.2754898e-02 * 0.98078528040323 / 2.384e-06, 4.752159e-03 * 0.98078528040323 / 2.384e-06, 8.66413e-04 * 0.98078528040323 / 2.384e-06, 6.2943e-05 * 0.98078528040323 / 2.384e-06, /* 4 */
Packit 47f805
    3.815e-06 * 0.98078528040323 / 2.384e-06, -2.718e-05 * 0.98078528040323 / 2.384e-06,
Packit 47f805
    5.22137e-04 * 0.98078528040323 / 2.384e-06, 7.703304e-03 * 0.98078528040323 / 2.384e-06,
Packit 47f805
    -2.7815342e-02 * 0.98078528040323 / 2.384e-06, -4.290581e-03 * 0.98078528040323 / 2.384e-06,
Packit 47f805
    -6.11782e-04 * 0.98078528040323 / 2.384e-06, -3.7670e-05 * 0.98078528040323 / 2.384e-06,
Packit 47f805
    1.989123673796580e-01,
Packit 47f805
    1.847759065022573e+00,
Packit 47f805
Packit 47f805
Packit 47f805
    -1.907e-06 * 0.989176509964781 / 2.384e-06, 9.0122e-05 * 0.989176509964781 / 2.384e-06,
Packit 47f805
    2.88486e-04 * 0.989176509964781 / 2.384e-06, -2.774239e-03 * 0.989176509964781 / 2.384e-06,
Packit 47f805
    3.2248020e-02 * 0.989176509964781 / 2.384e-06, 4.748821e-03 * 0.989176509964781 / 2.384e-06, 8.38757e-04 * 0.989176509964781 / 2.384e-06, 5.9605e-05 * 0.989176509964781 / 2.384e-06, /* 3 */
Packit 47f805
    3.338e-06 * 0.989176509964781 / 2.384e-06, -3.9577e-05 * 0.989176509964781 / 2.384e-06,
Packit 47f805
    3.88145e-04 * 0.989176509964781 / 2.384e-06, 6.937027e-03 * 0.989176509964781 / 2.384e-06,
Packit 47f805
    -2.8532982e-02 * 0.989176509964781 / 2.384e-06, -4.395962e-03 * 0.989176509964781 / 2.384e-06,
Packit 47f805
    -6.46591e-04 * 0.989176509964781 / 2.384e-06, -4.0531e-05 * 0.989176509964781 / 2.384e-06,
Packit 47f805
    1.483359875383474e-01,
Packit 47f805
    1.913880671464418e+00,
Packit 47f805
Packit 47f805
Packit 47f805
    -1.907e-06 * 0.995184726672197 / 2.384e-06, 8.4400e-05 * 0.995184726672197 / 2.384e-06,
Packit 47f805
    1.91689e-04 * 0.995184726672197 / 2.384e-06, -3.411293e-03 * 0.995184726672197 / 2.384e-06,
Packit 47f805
    3.1706810e-02 * 0.995184726672197 / 2.384e-06, 4.728317e-03 * 0.995184726672197 / 2.384e-06,
Packit 47f805
    8.09669e-04 * 0.995184726672197 / 2.384e-06, 5.579e-05 * 0.995184726672197 / 2.384e-06,
Packit 47f805
    3.338e-06 * 0.995184726672197 / 2.384e-06, -5.0545e-05 * 0.995184726672197 / 2.384e-06,
Packit 47f805
    2.59876e-04 * 0.995184726672197 / 2.384e-06, 6.189346e-03 * 0.995184726672197 / 2.384e-06,
Packit 47f805
    -2.9224873e-02 * 0.995184726672197 / 2.384e-06, -4.489899e-03 * 0.995184726672197 / 2.384e-06,
Packit 47f805
    -6.80923e-04 * 0.995184726672197 / 2.384e-06, -4.3392e-05 * 0.995184726672197 / 2.384e-06,
Packit 47f805
    9.849140335716425e-02,
Packit 47f805
    1.961570560806461e+00,
Packit 47f805
Packit 47f805
Packit 47f805
    -2.384e-06 * 0.998795456205172 / 2.384e-06, 7.7724e-05 * 0.998795456205172 / 2.384e-06,
Packit 47f805
    8.8215e-05 * 0.998795456205172 / 2.384e-06, -4.072189e-03 * 0.998795456205172 / 2.384e-06,
Packit 47f805
    3.1132698e-02 * 0.998795456205172 / 2.384e-06, 4.691124e-03 * 0.998795456205172 / 2.384e-06,
Packit 47f805
    7.79152e-04 * 0.998795456205172 / 2.384e-06, 5.2929e-05 * 0.998795456205172 / 2.384e-06,
Packit 47f805
    2.861e-06 * 0.998795456205172 / 2.384e-06, -6.0558e-05 * 0.998795456205172 / 2.384e-06,
Packit 47f805
    1.37329e-04 * 0.998795456205172 / 2.384e-06, 5.462170e-03 * 0.998795456205172 / 2.384e-06,
Packit 47f805
    -2.9890060e-02 * 0.998795456205172 / 2.384e-06, -4.570484e-03 * 0.998795456205172 / 2.384e-06,
Packit 47f805
    -7.14302e-04 * 0.998795456205172 / 2.384e-06, -4.6253e-05 * 0.998795456205172 / 2.384e-06,
Packit 47f805
    4.912684976946725e-02,
Packit 47f805
    1.990369453344394e+00,
Packit 47f805
Packit 47f805
Packit 47f805
    3.5780907e-02 * SQRT2 * 0.5 / 2.384e-06, 1.7876148e-02 * SQRT2 * 0.5 / 2.384e-06,
Packit 47f805
    3.134727e-03 * SQRT2 * 0.5 / 2.384e-06, 2.457142e-03 * SQRT2 * 0.5 / 2.384e-06,
Packit 47f805
    9.71317e-04 * SQRT2 * 0.5 / 2.384e-06, 2.18868e-04 * SQRT2 * 0.5 / 2.384e-06,
Packit 47f805
    1.01566e-04 * SQRT2 * 0.5 / 2.384e-06, 1.3828e-05 * SQRT2 * 0.5 / 2.384e-06,
Packit 47f805
Packit 47f805
    3.0526638e-02 / 2.384e-06, 4.638195e-03 / 2.384e-06, 7.47204e-04 / 2.384e-06,
Packit 47f805
    4.9591e-05 / 2.384e-06,
Packit 47f805
    4.756451e-03 / 2.384e-06, 2.1458e-05 / 2.384e-06, -6.9618e-05 / 2.384e-06, /*    2.384e-06/2.384e-06 */
Packit 47f805
};
Packit 47f805
#endif
Packit 47f805
Packit 47f805
Packit 47f805
#define NS 12
Packit 47f805
#define NL 36
Packit 47f805
Packit 47f805
static const FLOAT win[4][NL] = {
Packit 47f805
    {
Packit 47f805
     2.382191739347913e-13,
Packit 47f805
     6.423305872147834e-13,
Packit 47f805
     9.400849094049688e-13,
Packit 47f805
     1.122435026096556e-12,
Packit 47f805
     1.183840321267481e-12,
Packit 47f805
     1.122435026096556e-12,
Packit 47f805
     9.400849094049690e-13,
Packit 47f805
     6.423305872147839e-13,
Packit 47f805
     2.382191739347918e-13,
Packit 47f805
Packit 47f805
     5.456116108943412e-12,
Packit 47f805
     4.878985199565852e-12,
Packit 47f805
     4.240448995017367e-12,
Packit 47f805
     3.559909094758252e-12,
Packit 47f805
     2.858043359288075e-12,
Packit 47f805
     2.156177623817898e-12,
Packit 47f805
     1.475637723558783e-12,
Packit 47f805
     8.371015190102974e-13,
Packit 47f805
     2.599706096327376e-13,
Packit 47f805
Packit 47f805
     -5.456116108943412e-12,
Packit 47f805
     -4.878985199565852e-12,
Packit 47f805
     -4.240448995017367e-12,
Packit 47f805
     -3.559909094758252e-12,
Packit 47f805
     -2.858043359288076e-12,
Packit 47f805
     -2.156177623817898e-12,
Packit 47f805
     -1.475637723558783e-12,
Packit 47f805
     -8.371015190102975e-13,
Packit 47f805
     -2.599706096327376e-13,
Packit 47f805
Packit 47f805
     -2.382191739347923e-13,
Packit 47f805
     -6.423305872147843e-13,
Packit 47f805
     -9.400849094049696e-13,
Packit 47f805
     -1.122435026096556e-12,
Packit 47f805
     -1.183840321267481e-12,
Packit 47f805
     -1.122435026096556e-12,
Packit 47f805
     -9.400849094049694e-13,
Packit 47f805
     -6.423305872147840e-13,
Packit 47f805
     -2.382191739347918e-13,
Packit 47f805
     },
Packit 47f805
    {
Packit 47f805
     2.382191739347913e-13,
Packit 47f805
     6.423305872147834e-13,
Packit 47f805
     9.400849094049688e-13,
Packit 47f805
     1.122435026096556e-12,
Packit 47f805
     1.183840321267481e-12,
Packit 47f805
     1.122435026096556e-12,
Packit 47f805
     9.400849094049688e-13,
Packit 47f805
     6.423305872147841e-13,
Packit 47f805
     2.382191739347918e-13,
Packit 47f805
Packit 47f805
     5.456116108943413e-12,
Packit 47f805
     4.878985199565852e-12,
Packit 47f805
     4.240448995017367e-12,
Packit 47f805
     3.559909094758253e-12,
Packit 47f805
     2.858043359288075e-12,
Packit 47f805
     2.156177623817898e-12,
Packit 47f805
     1.475637723558782e-12,
Packit 47f805
     8.371015190102975e-13,
Packit 47f805
     2.599706096327376e-13,
Packit 47f805
Packit 47f805
     -5.461314069809755e-12,
Packit 47f805
     -4.921085770524055e-12,
Packit 47f805
     -4.343405037091838e-12,
Packit 47f805
     -3.732668368707687e-12,
Packit 47f805
     -3.093523840190885e-12,
Packit 47f805
     -2.430835727329465e-12,
Packit 47f805
     -1.734679010007751e-12,
Packit 47f805
     -9.748253656609281e-13,
Packit 47f805
     -2.797435120168326e-13,
Packit 47f805
Packit 47f805
     0.000000000000000e+00,
Packit 47f805
     0.000000000000000e+00,
Packit 47f805
     0.000000000000000e+00,
Packit 47f805
     0.000000000000000e+00,
Packit 47f805
     0.000000000000000e+00,
Packit 47f805
     0.000000000000000e+00,
Packit 47f805
     -2.283748241799531e-13,
Packit 47f805
     -4.037858874020686e-13,
Packit 47f805
     -2.146547464825323e-13,
Packit 47f805
     },
Packit 47f805
    {
Packit 47f805
     1.316524975873958e-01, /* win[SHORT_TYPE] */
Packit 47f805
     4.142135623730950e-01,
Packit 47f805
     7.673269879789602e-01,
Packit 47f805
Packit 47f805
     1.091308501069271e+00, /* tantab_l */
Packit 47f805
     1.303225372841206e+00,
Packit 47f805
     1.569685577117490e+00,
Packit 47f805
     1.920982126971166e+00,
Packit 47f805
     2.414213562373094e+00,
Packit 47f805
     3.171594802363212e+00,
Packit 47f805
     4.510708503662055e+00,
Packit 47f805
     7.595754112725146e+00,
Packit 47f805
     2.290376554843115e+01,
Packit 47f805
Packit 47f805
     0.98480775301220802032, /* cx */
Packit 47f805
     0.64278760968653936292,
Packit 47f805
     0.34202014332566882393,
Packit 47f805
     0.93969262078590842791,
Packit 47f805
     -0.17364817766693030343,
Packit 47f805
     -0.76604444311897790243,
Packit 47f805
     0.86602540378443870761,
Packit 47f805
     0.500000000000000e+00,
Packit 47f805
Packit 47f805
     -5.144957554275265e-01, /* ca */
Packit 47f805
     -4.717319685649723e-01,
Packit 47f805
     -3.133774542039019e-01,
Packit 47f805
     -1.819131996109812e-01,
Packit 47f805
     -9.457419252642064e-02,
Packit 47f805
     -4.096558288530405e-02,
Packit 47f805
     -1.419856857247115e-02,
Packit 47f805
     -3.699974673760037e-03,
Packit 47f805
Packit 47f805
     8.574929257125442e-01, /* cs */
Packit 47f805
     8.817419973177052e-01,
Packit 47f805
     9.496286491027329e-01,
Packit 47f805
     9.833145924917901e-01,
Packit 47f805
     9.955178160675857e-01,
Packit 47f805
     9.991605581781475e-01,
Packit 47f805
     9.998991952444470e-01,
Packit 47f805
     9.999931550702802e-01,
Packit 47f805
     },
Packit 47f805
    {
Packit 47f805
     0.000000000000000e+00,
Packit 47f805
     0.000000000000000e+00,
Packit 47f805
     0.000000000000000e+00,
Packit 47f805
     0.000000000000000e+00,
Packit 47f805
     0.000000000000000e+00,
Packit 47f805
     0.000000000000000e+00,
Packit 47f805
     2.283748241799531e-13,
Packit 47f805
     4.037858874020686e-13,
Packit 47f805
     2.146547464825323e-13,
Packit 47f805
Packit 47f805
     5.461314069809755e-12,
Packit 47f805
     4.921085770524055e-12,
Packit 47f805
     4.343405037091838e-12,
Packit 47f805
     3.732668368707687e-12,
Packit 47f805
     3.093523840190885e-12,
Packit 47f805
     2.430835727329466e-12,
Packit 47f805
     1.734679010007751e-12,
Packit 47f805
     9.748253656609281e-13,
Packit 47f805
     2.797435120168326e-13,
Packit 47f805
Packit 47f805
     -5.456116108943413e-12,
Packit 47f805
     -4.878985199565852e-12,
Packit 47f805
     -4.240448995017367e-12,
Packit 47f805
     -3.559909094758253e-12,
Packit 47f805
     -2.858043359288075e-12,
Packit 47f805
     -2.156177623817898e-12,
Packit 47f805
     -1.475637723558782e-12,
Packit 47f805
     -8.371015190102975e-13,
Packit 47f805
     -2.599706096327376e-13,
Packit 47f805
Packit 47f805
     -2.382191739347913e-13,
Packit 47f805
     -6.423305872147834e-13,
Packit 47f805
     -9.400849094049688e-13,
Packit 47f805
     -1.122435026096556e-12,
Packit 47f805
     -1.183840321267481e-12,
Packit 47f805
     -1.122435026096556e-12,
Packit 47f805
     -9.400849094049688e-13,
Packit 47f805
     -6.423305872147841e-13,
Packit 47f805
     -2.382191739347918e-13,
Packit 47f805
     }
Packit 47f805
};
Packit 47f805
Packit 47f805
#define tantab_l (win[SHORT_TYPE]+3)
Packit 47f805
#define cx (win[SHORT_TYPE]+12)
Packit 47f805
#define ca (win[SHORT_TYPE]+20)
Packit 47f805
#define cs (win[SHORT_TYPE]+28)
Packit 47f805
Packit 47f805
/************************************************************************
Packit 47f805
*
Packit 47f805
* window_subband()
Packit 47f805
*
Packit 47f805
* PURPOSE:  Overlapping window on PCM samples
Packit 47f805
*
Packit 47f805
* SEMANTICS:
Packit 47f805
* 32 16-bit pcm samples are scaled to fractional 2's complement and
Packit 47f805
* concatenated to the end of the window buffer #x#. The updated window
Packit 47f805
* buffer #x# is then windowed by the analysis window #c# to produce the
Packit 47f805
* windowed sample #z#
Packit 47f805
*
Packit 47f805
************************************************************************/
Packit 47f805
Packit 47f805
/*
Packit 47f805
 *      new IDCT routine written by Takehiro TOMINAGA
Packit 47f805
 */
Packit 47f805
static const int order[] = {
Packit 47f805
    0, 1, 16, 17, 8, 9, 24, 25, 4, 5, 20, 21, 12, 13, 28, 29,
Packit 47f805
    2, 3, 18, 19, 10, 11, 26, 27, 6, 7, 22, 23, 14, 15, 30, 31
Packit 47f805
};
Packit 47f805
Packit 47f805
Packit 47f805
/* returns sum_j=0^31 a[j]*cos(PI*j*(k+1/2)/32), 0<=k<32 */
Packit 47f805
inline static void
Packit 47f805
window_subband(const sample_t * x1, FLOAT a[SBLIMIT])
Packit 47f805
{
Packit 47f805
    int     i;
Packit 47f805
    FLOAT const *wp = enwindow + 10;
Packit 47f805
Packit 47f805
    const sample_t *x2 = &x1[238 - 14 - 286];
Packit 47f805
Packit 47f805
    for (i = -15; i < 0; i++) {
Packit 47f805
        FLOAT   w, s, t;
Packit 47f805
Packit 47f805
        w = wp[-10];
Packit 47f805
        s = x2[-224] * w;
Packit 47f805
        t = x1[224] * w;
Packit 47f805
        w = wp[-9];
Packit 47f805
        s += x2[-160] * w;
Packit 47f805
        t += x1[160] * w;
Packit 47f805
        w = wp[-8];
Packit 47f805
        s += x2[-96] * w;
Packit 47f805
        t += x1[96] * w;
Packit 47f805
        w = wp[-7];
Packit 47f805
        s += x2[-32] * w;
Packit 47f805
        t += x1[32] * w;
Packit 47f805
        w = wp[-6];
Packit 47f805
        s += x2[32] * w;
Packit 47f805
        t += x1[-32] * w;
Packit 47f805
        w = wp[-5];
Packit 47f805
        s += x2[96] * w;
Packit 47f805
        t += x1[-96] * w;
Packit 47f805
        w = wp[-4];
Packit 47f805
        s += x2[160] * w;
Packit 47f805
        t += x1[-160] * w;
Packit 47f805
        w = wp[-3];
Packit 47f805
        s += x2[224] * w;
Packit 47f805
        t += x1[-224] * w;
Packit 47f805
Packit 47f805
        w = wp[-2];
Packit 47f805
        s += x1[-256] * w;
Packit 47f805
        t -= x2[256] * w;
Packit 47f805
        w = wp[-1];
Packit 47f805
        s += x1[-192] * w;
Packit 47f805
        t -= x2[192] * w;
Packit 47f805
        w = wp[0];
Packit 47f805
        s += x1[-128] * w;
Packit 47f805
        t -= x2[128] * w;
Packit 47f805
        w = wp[1];
Packit 47f805
        s += x1[-64] * w;
Packit 47f805
        t -= x2[64] * w;
Packit 47f805
        w = wp[2];
Packit 47f805
        s += x1[0] * w;
Packit 47f805
        t -= x2[0] * w;
Packit 47f805
        w = wp[3];
Packit 47f805
        s += x1[64] * w;
Packit 47f805
        t -= x2[-64] * w;
Packit 47f805
        w = wp[4];
Packit 47f805
        s += x1[128] * w;
Packit 47f805
        t -= x2[-128] * w;
Packit 47f805
        w = wp[5];
Packit 47f805
        s += x1[192] * w;
Packit 47f805
        t -= x2[-192] * w;
Packit 47f805
Packit 47f805
        /*
Packit 47f805
         * this multiplyer could be removed, but it needs more 256 FLOAT data.
Packit 47f805
         * thinking about the data cache performance, I think we should not
Packit 47f805
         * use such a huge table. tt 2000/Oct/25
Packit 47f805
         */
Packit 47f805
        s *= wp[6];
Packit 47f805
        w = t - s;
Packit 47f805
        a[30 + i * 2] = t + s;
Packit 47f805
        a[31 + i * 2] = wp[7] * w;
Packit 47f805
        wp += 18;
Packit 47f805
        x1--;
Packit 47f805
        x2++;
Packit 47f805
    }
Packit 47f805
    {
Packit 47f805
        FLOAT   s, t, u, v;
Packit 47f805
        t = x1[-16] * wp[-10];
Packit 47f805
        s = x1[-32] * wp[-2];
Packit 47f805
        t += (x1[-48] - x1[16]) * wp[-9];
Packit 47f805
        s += x1[-96] * wp[-1];
Packit 47f805
        t += (x1[-80] + x1[48]) * wp[-8];
Packit 47f805
        s += x1[-160] * wp[0];
Packit 47f805
        t += (x1[-112] - x1[80]) * wp[-7];
Packit 47f805
        s += x1[-224] * wp[1];
Packit 47f805
        t += (x1[-144] + x1[112]) * wp[-6];
Packit 47f805
        s -= x1[32] * wp[2];
Packit 47f805
        t += (x1[-176] - x1[144]) * wp[-5];
Packit 47f805
        s -= x1[96] * wp[3];
Packit 47f805
        t += (x1[-208] + x1[176]) * wp[-4];
Packit 47f805
        s -= x1[160] * wp[4];
Packit 47f805
        t += (x1[-240] - x1[208]) * wp[-3];
Packit 47f805
        s -= x1[224];
Packit 47f805
Packit 47f805
        u = s - t;
Packit 47f805
        v = s + t;
Packit 47f805
Packit 47f805
        t = a[14];
Packit 47f805
        s = a[15] - t;
Packit 47f805
Packit 47f805
        a[31] = v + t;  /* A0 */
Packit 47f805
        a[30] = u + s;  /* A1 */
Packit 47f805
        a[15] = u - s;  /* A2 */
Packit 47f805
        a[14] = v - t;  /* A3 */
Packit 47f805
    }
Packit 47f805
    {
Packit 47f805
        FLOAT   xr;
Packit 47f805
        xr = a[28] - a[0];
Packit 47f805
        a[0] += a[28];
Packit 47f805
        a[28] = xr * wp[-2 * 18 + 7];
Packit 47f805
        xr = a[29] - a[1];
Packit 47f805
        a[1] += a[29];
Packit 47f805
        a[29] = xr * wp[-2 * 18 + 7];
Packit 47f805
Packit 47f805
        xr = a[26] - a[2];
Packit 47f805
        a[2] += a[26];
Packit 47f805
        a[26] = xr * wp[-4 * 18 + 7];
Packit 47f805
        xr = a[27] - a[3];
Packit 47f805
        a[3] += a[27];
Packit 47f805
        a[27] = xr * wp[-4 * 18 + 7];
Packit 47f805
Packit 47f805
        xr = a[24] - a[4];
Packit 47f805
        a[4] += a[24];
Packit 47f805
        a[24] = xr * wp[-6 * 18 + 7];
Packit 47f805
        xr = a[25] - a[5];
Packit 47f805
        a[5] += a[25];
Packit 47f805
        a[25] = xr * wp[-6 * 18 + 7];
Packit 47f805
Packit 47f805
        xr = a[22] - a[6];
Packit 47f805
        a[6] += a[22];
Packit 47f805
        a[22] = xr * SQRT2;
Packit 47f805
        xr = a[23] - a[7];
Packit 47f805
        a[7] += a[23];
Packit 47f805
        a[23] = xr * SQRT2 - a[7];
Packit 47f805
        a[7] -= a[6];
Packit 47f805
        a[22] -= a[7];
Packit 47f805
        a[23] -= a[22];
Packit 47f805
Packit 47f805
        xr = a[6];
Packit 47f805
        a[6] = a[31] - xr;
Packit 47f805
        a[31] = a[31] + xr;
Packit 47f805
        xr = a[7];
Packit 47f805
        a[7] = a[30] - xr;
Packit 47f805
        a[30] = a[30] + xr;
Packit 47f805
        xr = a[22];
Packit 47f805
        a[22] = a[15] - xr;
Packit 47f805
        a[15] = a[15] + xr;
Packit 47f805
        xr = a[23];
Packit 47f805
        a[23] = a[14] - xr;
Packit 47f805
        a[14] = a[14] + xr;
Packit 47f805
Packit 47f805
        xr = a[20] - a[8];
Packit 47f805
        a[8] += a[20];
Packit 47f805
        a[20] = xr * wp[-10 * 18 + 7];
Packit 47f805
        xr = a[21] - a[9];
Packit 47f805
        a[9] += a[21];
Packit 47f805
        a[21] = xr * wp[-10 * 18 + 7];
Packit 47f805
Packit 47f805
        xr = a[18] - a[10];
Packit 47f805
        a[10] += a[18];
Packit 47f805
        a[18] = xr * wp[-12 * 18 + 7];
Packit 47f805
        xr = a[19] - a[11];
Packit 47f805
        a[11] += a[19];
Packit 47f805
        a[19] = xr * wp[-12 * 18 + 7];
Packit 47f805
Packit 47f805
        xr = a[16] - a[12];
Packit 47f805
        a[12] += a[16];
Packit 47f805
        a[16] = xr * wp[-14 * 18 + 7];
Packit 47f805
        xr = a[17] - a[13];
Packit 47f805
        a[13] += a[17];
Packit 47f805
        a[17] = xr * wp[-14 * 18 + 7];
Packit 47f805
Packit 47f805
        xr = -a[20] + a[24];
Packit 47f805
        a[20] += a[24];
Packit 47f805
        a[24] = xr * wp[-12 * 18 + 7];
Packit 47f805
        xr = -a[21] + a[25];
Packit 47f805
        a[21] += a[25];
Packit 47f805
        a[25] = xr * wp[-12 * 18 + 7];
Packit 47f805
Packit 47f805
        xr = a[4] - a[8];
Packit 47f805
        a[4] += a[8];
Packit 47f805
        a[8] = xr * wp[-12 * 18 + 7];
Packit 47f805
        xr = a[5] - a[9];
Packit 47f805
        a[5] += a[9];
Packit 47f805
        a[9] = xr * wp[-12 * 18 + 7];
Packit 47f805
Packit 47f805
        xr = a[0] - a[12];
Packit 47f805
        a[0] += a[12];
Packit 47f805
        a[12] = xr * wp[-4 * 18 + 7];
Packit 47f805
        xr = a[1] - a[13];
Packit 47f805
        a[1] += a[13];
Packit 47f805
        a[13] = xr * wp[-4 * 18 + 7];
Packit 47f805
        xr = a[16] - a[28];
Packit 47f805
        a[16] += a[28];
Packit 47f805
        a[28] = xr * wp[-4 * 18 + 7];
Packit 47f805
        xr = -a[17] + a[29];
Packit 47f805
        a[17] += a[29];
Packit 47f805
        a[29] = xr * wp[-4 * 18 + 7];
Packit 47f805
Packit 47f805
        xr = SQRT2 * (a[2] - a[10]);
Packit 47f805
        a[2] += a[10];
Packit 47f805
        a[10] = xr;
Packit 47f805
        xr = SQRT2 * (a[3] - a[11]);
Packit 47f805
        a[3] += a[11];
Packit 47f805
        a[11] = xr;
Packit 47f805
        xr = SQRT2 * (-a[18] + a[26]);
Packit 47f805
        a[18] += a[26];
Packit 47f805
        a[26] = xr - a[18];
Packit 47f805
        xr = SQRT2 * (-a[19] + a[27]);
Packit 47f805
        a[19] += a[27];
Packit 47f805
        a[27] = xr - a[19];
Packit 47f805
Packit 47f805
        xr = a[2];
Packit 47f805
        a[19] -= a[3];
Packit 47f805
        a[3] -= xr;
Packit 47f805
        a[2] = a[31] - xr;
Packit 47f805
        a[31] += xr;
Packit 47f805
        xr = a[3];
Packit 47f805
        a[11] -= a[19];
Packit 47f805
        a[18] -= xr;
Packit 47f805
        a[3] = a[30] - xr;
Packit 47f805
        a[30] += xr;
Packit 47f805
        xr = a[18];
Packit 47f805
        a[27] -= a[11];
Packit 47f805
        a[19] -= xr;
Packit 47f805
        a[18] = a[15] - xr;
Packit 47f805
        a[15] += xr;
Packit 47f805
Packit 47f805
        xr = a[19];
Packit 47f805
        a[10] -= xr;
Packit 47f805
        a[19] = a[14] - xr;
Packit 47f805
        a[14] += xr;
Packit 47f805
        xr = a[10];
Packit 47f805
        a[11] -= xr;
Packit 47f805
        a[10] = a[23] - xr;
Packit 47f805
        a[23] += xr;
Packit 47f805
        xr = a[11];
Packit 47f805
        a[26] -= xr;
Packit 47f805
        a[11] = a[22] - xr;
Packit 47f805
        a[22] += xr;
Packit 47f805
        xr = a[26];
Packit 47f805
        a[27] -= xr;
Packit 47f805
        a[26] = a[7] - xr;
Packit 47f805
        a[7] += xr;
Packit 47f805
Packit 47f805
        xr = a[27];
Packit 47f805
        a[27] = a[6] - xr;
Packit 47f805
        a[6] += xr;
Packit 47f805
Packit 47f805
        xr = SQRT2 * (a[0] - a[4]);
Packit 47f805
        a[0] += a[4];
Packit 47f805
        a[4] = xr;
Packit 47f805
        xr = SQRT2 * (a[1] - a[5]);
Packit 47f805
        a[1] += a[5];
Packit 47f805
        a[5] = xr;
Packit 47f805
        xr = SQRT2 * (a[16] - a[20]);
Packit 47f805
        a[16] += a[20];
Packit 47f805
        a[20] = xr;
Packit 47f805
        xr = SQRT2 * (a[17] - a[21]);
Packit 47f805
        a[17] += a[21];
Packit 47f805
        a[21] = xr;
Packit 47f805
Packit 47f805
        xr = -SQRT2 * (a[8] - a[12]);
Packit 47f805
        a[8] += a[12];
Packit 47f805
        a[12] = xr - a[8];
Packit 47f805
        xr = -SQRT2 * (a[9] - a[13]);
Packit 47f805
        a[9] += a[13];
Packit 47f805
        a[13] = xr - a[9];
Packit 47f805
        xr = -SQRT2 * (a[25] - a[29]);
Packit 47f805
        a[25] += a[29];
Packit 47f805
        a[29] = xr - a[25];
Packit 47f805
        xr = -SQRT2 * (a[24] + a[28]);
Packit 47f805
        a[24] -= a[28];
Packit 47f805
        a[28] = xr - a[24];
Packit 47f805
Packit 47f805
        xr = a[24] - a[16];
Packit 47f805
        a[24] = xr;
Packit 47f805
        xr = a[20] - xr;
Packit 47f805
        a[20] = xr;
Packit 47f805
        xr = a[28] - xr;
Packit 47f805
        a[28] = xr;
Packit 47f805
Packit 47f805
        xr = a[25] - a[17];
Packit 47f805
        a[25] = xr;
Packit 47f805
        xr = a[21] - xr;
Packit 47f805
        a[21] = xr;
Packit 47f805
        xr = a[29] - xr;
Packit 47f805
        a[29] = xr;
Packit 47f805
Packit 47f805
        xr = a[17] - a[1];
Packit 47f805
        a[17] = xr;
Packit 47f805
        xr = a[9] - xr;
Packit 47f805
        a[9] = xr;
Packit 47f805
        xr = a[25] - xr;
Packit 47f805
        a[25] = xr;
Packit 47f805
        xr = a[5] - xr;
Packit 47f805
        a[5] = xr;
Packit 47f805
        xr = a[21] - xr;
Packit 47f805
        a[21] = xr;
Packit 47f805
        xr = a[13] - xr;
Packit 47f805
        a[13] = xr;
Packit 47f805
        xr = a[29] - xr;
Packit 47f805
        a[29] = xr;
Packit 47f805
Packit 47f805
        xr = a[1] - a[0];
Packit 47f805
        a[1] = xr;
Packit 47f805
        xr = a[16] - xr;
Packit 47f805
        a[16] = xr;
Packit 47f805
        xr = a[17] - xr;
Packit 47f805
        a[17] = xr;
Packit 47f805
        xr = a[8] - xr;
Packit 47f805
        a[8] = xr;
Packit 47f805
        xr = a[9] - xr;
Packit 47f805
        a[9] = xr;
Packit 47f805
        xr = a[24] - xr;
Packit 47f805
        a[24] = xr;
Packit 47f805
        xr = a[25] - xr;
Packit 47f805
        a[25] = xr;
Packit 47f805
        xr = a[4] - xr;
Packit 47f805
        a[4] = xr;
Packit 47f805
        xr = a[5] - xr;
Packit 47f805
        a[5] = xr;
Packit 47f805
        xr = a[20] - xr;
Packit 47f805
        a[20] = xr;
Packit 47f805
        xr = a[21] - xr;
Packit 47f805
        a[21] = xr;
Packit 47f805
        xr = a[12] - xr;
Packit 47f805
        a[12] = xr;
Packit 47f805
        xr = a[13] - xr;
Packit 47f805
        a[13] = xr;
Packit 47f805
        xr = a[28] - xr;
Packit 47f805
        a[28] = xr;
Packit 47f805
        xr = a[29] - xr;
Packit 47f805
        a[29] = xr;
Packit 47f805
Packit 47f805
        xr = a[0];
Packit 47f805
        a[0] += a[31];
Packit 47f805
        a[31] -= xr;
Packit 47f805
        xr = a[1];
Packit 47f805
        a[1] += a[30];
Packit 47f805
        a[30] -= xr;
Packit 47f805
        xr = a[16];
Packit 47f805
        a[16] += a[15];
Packit 47f805
        a[15] -= xr;
Packit 47f805
        xr = a[17];
Packit 47f805
        a[17] += a[14];
Packit 47f805
        a[14] -= xr;
Packit 47f805
        xr = a[8];
Packit 47f805
        a[8] += a[23];
Packit 47f805
        a[23] -= xr;
Packit 47f805
        xr = a[9];
Packit 47f805
        a[9] += a[22];
Packit 47f805
        a[22] -= xr;
Packit 47f805
        xr = a[24];
Packit 47f805
        a[24] += a[7];
Packit 47f805
        a[7] -= xr;
Packit 47f805
        xr = a[25];
Packit 47f805
        a[25] += a[6];
Packit 47f805
        a[6] -= xr;
Packit 47f805
        xr = a[4];
Packit 47f805
        a[4] += a[27];
Packit 47f805
        a[27] -= xr;
Packit 47f805
        xr = a[5];
Packit 47f805
        a[5] += a[26];
Packit 47f805
        a[26] -= xr;
Packit 47f805
        xr = a[20];
Packit 47f805
        a[20] += a[11];
Packit 47f805
        a[11] -= xr;
Packit 47f805
        xr = a[21];
Packit 47f805
        a[21] += a[10];
Packit 47f805
        a[10] -= xr;
Packit 47f805
        xr = a[12];
Packit 47f805
        a[12] += a[19];
Packit 47f805
        a[19] -= xr;
Packit 47f805
        xr = a[13];
Packit 47f805
        a[13] += a[18];
Packit 47f805
        a[18] -= xr;
Packit 47f805
        xr = a[28];
Packit 47f805
        a[28] += a[3];
Packit 47f805
        a[3] -= xr;
Packit 47f805
        xr = a[29];
Packit 47f805
        a[29] += a[2];
Packit 47f805
        a[2] -= xr;
Packit 47f805
    }
Packit 47f805
Packit 47f805
}
Packit 47f805
Packit 47f805
Packit 47f805
/*-------------------------------------------------------------------*/
Packit 47f805
/*                                                                   */
Packit 47f805
/*   Function: Calculation of the MDCT                               */
Packit 47f805
/*   In the case of long blocks (type 0,1,3) there are               */
Packit 47f805
/*   36 coefficents in the time domain and 18 in the frequency       */
Packit 47f805
/*   domain.                                                         */
Packit 47f805
/*   In the case of short blocks (type 2) there are 3                */
Packit 47f805
/*   transformations with short length. This leads to 12 coefficents */
Packit 47f805
/*   in the time and 6 in the frequency domain. In this case the     */
Packit 47f805
/*   results are stored side by side in the vector out[].            */
Packit 47f805
/*                                                                   */
Packit 47f805
/*   New layer3                                                      */
Packit 47f805
/*                                                                   */
Packit 47f805
/*-------------------------------------------------------------------*/
Packit 47f805
Packit 47f805
inline static void
Packit 47f805
mdct_short(FLOAT * inout)
Packit 47f805
{
Packit 47f805
    int     l;
Packit 47f805
    for (l = 0; l < 3; l++) {
Packit 47f805
        FLOAT   tc0, tc1, tc2, ts0, ts1, ts2;
Packit 47f805
Packit 47f805
        ts0 = inout[2 * 3] * win[SHORT_TYPE][0] - inout[5 * 3];
Packit 47f805
        tc0 = inout[0 * 3] * win[SHORT_TYPE][2] - inout[3 * 3];
Packit 47f805
        tc1 = ts0 + tc0;
Packit 47f805
        tc2 = ts0 - tc0;
Packit 47f805
Packit 47f805
        ts0 = inout[5 * 3] * win[SHORT_TYPE][0] + inout[2 * 3];
Packit 47f805
        tc0 = inout[3 * 3] * win[SHORT_TYPE][2] + inout[0 * 3];
Packit 47f805
        ts1 = ts0 + tc0;
Packit 47f805
        ts2 = -ts0 + tc0;
Packit 47f805
Packit 47f805
        tc0 = (inout[1 * 3] * win[SHORT_TYPE][1] - inout[4 * 3]) * 2.069978111953089e-11; /* tritab_s[1] */
Packit 47f805
        ts0 = (inout[4 * 3] * win[SHORT_TYPE][1] + inout[1 * 3]) * 2.069978111953089e-11; /* tritab_s[1] */
Packit 47f805
Packit 47f805
        inout[3 * 0] = tc1 * 1.907525191737280e-11 /* tritab_s[2] */  + tc0;
Packit 47f805
        inout[3 * 5] = -ts1 * 1.907525191737280e-11 /* tritab_s[0] */  + ts0;
Packit 47f805
Packit 47f805
        tc2 = tc2 * 0.86602540378443870761 * 1.907525191737281e-11 /* tritab_s[2] */ ;
Packit 47f805
        ts1 = ts1 * 0.5 * 1.907525191737281e-11 + ts0;
Packit 47f805
        inout[3 * 1] = tc2 - ts1;
Packit 47f805
        inout[3 * 2] = tc2 + ts1;
Packit 47f805
Packit 47f805
        tc1 = tc1 * 0.5 * 1.907525191737281e-11 - tc0;
Packit 47f805
        ts2 = ts2 * 0.86602540378443870761 * 1.907525191737281e-11 /* tritab_s[0] */ ;
Packit 47f805
        inout[3 * 3] = tc1 + ts2;
Packit 47f805
        inout[3 * 4] = tc1 - ts2;
Packit 47f805
Packit 47f805
        inout++;
Packit 47f805
    }
Packit 47f805
}
Packit 47f805
Packit 47f805
inline static void
Packit 47f805
mdct_long(FLOAT * out, FLOAT const *in)
Packit 47f805
{
Packit 47f805
    FLOAT   ct, st;
Packit 47f805
    {
Packit 47f805
        FLOAT   tc1, tc2, tc3, tc4, ts5, ts6, ts7, ts8;
Packit 47f805
        /* 1,2, 5,6, 9,10, 13,14, 17 */
Packit 47f805
        tc1 = in[17] - in[9];
Packit 47f805
        tc3 = in[15] - in[11];
Packit 47f805
        tc4 = in[14] - in[12];
Packit 47f805
        ts5 = in[0] + in[8];
Packit 47f805
        ts6 = in[1] + in[7];
Packit 47f805
        ts7 = in[2] + in[6];
Packit 47f805
        ts8 = in[3] + in[5];
Packit 47f805
Packit 47f805
        out[17] = (ts5 + ts7 - ts8) - (ts6 - in[4]);
Packit 47f805
        st = (ts5 + ts7 - ts8) * cx[7] + (ts6 - in[4]);
Packit 47f805
        ct = (tc1 - tc3 - tc4) * cx[6];
Packit 47f805
        out[5] = ct + st;
Packit 47f805
        out[6] = ct - st;
Packit 47f805
Packit 47f805
        tc2 = (in[16] - in[10]) * cx[6];
Packit 47f805
        ts6 = ts6 * cx[7] + in[4];
Packit 47f805
        ct = tc1 * cx[0] + tc2 + tc3 * cx[1] + tc4 * cx[2];
Packit 47f805
        st = -ts5 * cx[4] + ts6 - ts7 * cx[5] + ts8 * cx[3];
Packit 47f805
        out[1] = ct + st;
Packit 47f805
        out[2] = ct - st;
Packit 47f805
Packit 47f805
        ct = tc1 * cx[1] - tc2 - tc3 * cx[2] + tc4 * cx[0];
Packit 47f805
        st = -ts5 * cx[5] + ts6 - ts7 * cx[3] + ts8 * cx[4];
Packit 47f805
        out[9] = ct + st;
Packit 47f805
        out[10] = ct - st;
Packit 47f805
Packit 47f805
        ct = tc1 * cx[2] - tc2 + tc3 * cx[0] - tc4 * cx[1];
Packit 47f805
        st = ts5 * cx[3] - ts6 + ts7 * cx[4] - ts8 * cx[5];
Packit 47f805
        out[13] = ct + st;
Packit 47f805
        out[14] = ct - st;
Packit 47f805
    }
Packit 47f805
    {
Packit 47f805
        FLOAT   ts1, ts2, ts3, ts4, tc5, tc6, tc7, tc8;
Packit 47f805
Packit 47f805
        ts1 = in[8] - in[0];
Packit 47f805
        ts3 = in[6] - in[2];
Packit 47f805
        ts4 = in[5] - in[3];
Packit 47f805
        tc5 = in[17] + in[9];
Packit 47f805
        tc6 = in[16] + in[10];
Packit 47f805
        tc7 = in[15] + in[11];
Packit 47f805
        tc8 = in[14] + in[12];
Packit 47f805
Packit 47f805
        out[0] = (tc5 + tc7 + tc8) + (tc6 + in[13]);
Packit 47f805
        ct = (tc5 + tc7 + tc8) * cx[7] - (tc6 + in[13]);
Packit 47f805
        st = (ts1 - ts3 + ts4) * cx[6];
Packit 47f805
        out[11] = ct + st;
Packit 47f805
        out[12] = ct - st;
Packit 47f805
Packit 47f805
        ts2 = (in[7] - in[1]) * cx[6];
Packit 47f805
        tc6 = in[13] - tc6 * cx[7];
Packit 47f805
        ct = tc5 * cx[3] - tc6 + tc7 * cx[4] + tc8 * cx[5];
Packit 47f805
        st = ts1 * cx[2] + ts2 + ts3 * cx[0] + ts4 * cx[1];
Packit 47f805
        out[3] = ct + st;
Packit 47f805
        out[4] = ct - st;
Packit 47f805
Packit 47f805
        ct = -tc5 * cx[5] + tc6 - tc7 * cx[3] - tc8 * cx[4];
Packit 47f805
        st = ts1 * cx[1] + ts2 - ts3 * cx[2] - ts4 * cx[0];
Packit 47f805
        out[7] = ct + st;
Packit 47f805
        out[8] = ct - st;
Packit 47f805
Packit 47f805
        ct = -tc5 * cx[4] + tc6 - tc7 * cx[5] - tc8 * cx[3];
Packit 47f805
        st = ts1 * cx[0] - ts2 + ts3 * cx[1] - ts4 * cx[2];
Packit 47f805
        out[15] = ct + st;
Packit 47f805
        out[16] = ct - st;
Packit 47f805
    }
Packit 47f805
}
Packit 47f805
Packit 47f805
Packit 47f805
void
Packit 47f805
mdct_sub48(lame_internal_flags * gfc, const sample_t * w0, const sample_t * w1)
Packit 47f805
{
Packit 47f805
    SessionConfig_t const *const cfg = &gfc->cfg;
Packit 47f805
    EncStateVar_t *const esv = &gfc->sv_enc;
Packit 47f805
    int     gr, k, ch;
Packit 47f805
    const sample_t *wk;
Packit 47f805
Packit 47f805
    wk = w0 + 286;
Packit 47f805
    /* thinking cache performance, ch->gr loop is better than gr->ch loop */
Packit 47f805
    for (ch = 0; ch < cfg->channels_out; ch++) {
Packit 47f805
        for (gr = 0; gr < cfg->mode_gr; gr++) {
Packit 47f805
            int     band;
Packit 47f805
            gr_info *const gi = &(gfc->l3_side.tt[gr][ch]);
Packit 47f805
            FLOAT  *mdct_enc = gi->xr;
Packit 47f805
            FLOAT  *samp = esv->sb_sample[ch][1 - gr][0];
Packit 47f805
Packit 47f805
            for (k = 0; k < 18 / 2; k++) {
Packit 47f805
                window_subband(wk, samp);
Packit 47f805
                window_subband(wk + 32, samp + 32);
Packit 47f805
                samp += 64;
Packit 47f805
                wk += 64;
Packit 47f805
                /*
Packit 47f805
                 * Compensate for inversion in the analysis filter
Packit 47f805
                 */
Packit 47f805
                for (band = 1; band < 32; band += 2) {
Packit 47f805
                    samp[band - 32] *= -1;
Packit 47f805
                }
Packit 47f805
            }
Packit 47f805
Packit 47f805
            /*
Packit 47f805
             * Perform imdct of 18 previous subband samples
Packit 47f805
             * + 18 current subband samples
Packit 47f805
             */
Packit 47f805
            for (band = 0; band < 32; band++, mdct_enc += 18) {
Packit 47f805
                int     type = gi->block_type;
Packit 47f805
                FLOAT const *const band0 = esv->sb_sample[ch][gr][0] + order[band];
Packit 47f805
                FLOAT  *const band1 = esv->sb_sample[ch][1 - gr][0] + order[band];
Packit 47f805
                if (gi->mixed_block_flag && band < 2)
Packit 47f805
                    type = 0;
Packit 47f805
                if (esv->amp_filter[band] < 1e-12) {
Packit 47f805
                    memset(mdct_enc, 0, 18 * sizeof(FLOAT));
Packit 47f805
                }
Packit 47f805
                else {
Packit 47f805
                    if (esv->amp_filter[band] < 1.0) {
Packit 47f805
                        for (k = 0; k < 18; k++)
Packit 47f805
                            band1[k * 32] *= esv->amp_filter[band];
Packit 47f805
                    }
Packit 47f805
                    if (type == SHORT_TYPE) {
Packit 47f805
                        for (k = -NS / 4; k < 0; k++) {
Packit 47f805
                            FLOAT const w = win[SHORT_TYPE][k + 3];
Packit 47f805
                            mdct_enc[k * 3 + 9] = band0[(9 + k) * 32] * w - band0[(8 - k) * 32];
Packit 47f805
                            mdct_enc[k * 3 + 18] = band0[(14 - k) * 32] * w + band0[(15 + k) * 32];
Packit 47f805
                            mdct_enc[k * 3 + 10] = band0[(15 + k) * 32] * w - band0[(14 - k) * 32];
Packit 47f805
                            mdct_enc[k * 3 + 19] = band1[(2 - k) * 32] * w + band1[(3 + k) * 32];
Packit 47f805
                            mdct_enc[k * 3 + 11] = band1[(3 + k) * 32] * w - band1[(2 - k) * 32];
Packit 47f805
                            mdct_enc[k * 3 + 20] = band1[(8 - k) * 32] * w + band1[(9 + k) * 32];
Packit 47f805
                        }
Packit 47f805
                        mdct_short(mdct_enc);
Packit 47f805
                    }
Packit 47f805
                    else {
Packit 47f805
                        FLOAT   work[18];
Packit 47f805
                        for (k = -NL / 4; k < 0; k++) {
Packit 47f805
                            FLOAT   a, b;
Packit 47f805
                            a = win[type][k + 27] * band1[(k + 9) * 32]
Packit 47f805
                                + win[type][k + 36] * band1[(8 - k) * 32];
Packit 47f805
                            b = win[type][k + 9] * band0[(k + 9) * 32]
Packit 47f805
                                - win[type][k + 18] * band0[(8 - k) * 32];
Packit 47f805
                            work[k + 9] = a - b * tantab_l[k + 9];
Packit 47f805
                            work[k + 18] = a * tantab_l[k + 9] + b;
Packit 47f805
                        }
Packit 47f805
Packit 47f805
                        mdct_long(mdct_enc, work);
Packit 47f805
                    }
Packit 47f805
                }
Packit 47f805
                /*
Packit 47f805
                 * Perform aliasing reduction butterfly
Packit 47f805
                 */
Packit 47f805
                if (type != SHORT_TYPE && band != 0) {
Packit 47f805
                    for (k = 7; k >= 0; --k) {
Packit 47f805
                        FLOAT   bu, bd;
Packit 47f805
                        bu = mdct_enc[k] * ca[k] + mdct_enc[-1 - k] * cs[k];
Packit 47f805
                        bd = mdct_enc[k] * cs[k] - mdct_enc[-1 - k] * ca[k];
Packit 47f805
Packit 47f805
                        mdct_enc[-1 - k] = bu;
Packit 47f805
                        mdct_enc[k] = bd;
Packit 47f805
                    }
Packit 47f805
                }
Packit 47f805
            }
Packit 47f805
        }
Packit 47f805
        wk = w1 + 286;
Packit 47f805
        if (cfg->mode_gr == 1) {
Packit 47f805
            memcpy(esv->sb_sample[ch][0], esv->sb_sample[ch][1], 576 * sizeof(FLOAT));
Packit 47f805
        }
Packit 47f805
    }
Packit 47f805
}