23 #ifndef AVCODEC_AACPS_TABLEGEN_H 
   24 #define AVCODEC_AACPS_TABLEGEN_H 
   29 #if CONFIG_HARDCODED_TABLES 
   30 #define ps_tableinit() 
   31 #define TABLE_CONST const 
   32 #include "libavcodec/aacps_tables.h" 
   38 #define NR_ALLPASS_BANDS20 30 
   39 #define NR_ALLPASS_BANDS34 50 
   44 static float HA[46][8][4];
 
   45 static float HB[46][8][4];
 
   54     0.00746082949812f, 0.02270420949825f, 0.04546865930473f, 0.07266113929591f,
 
   55     0.09885108575264f, 0.11793710567217f, 0.125f
 
   59     0.04081179924692f, 0.03812810994926f, 0.05144908135699f, 0.06399831151592f,
 
   60     0.07428313801106f, 0.08100347892914f, 0.08333333333333f
 
   64     0.01565675600122f, 0.03752716391991f, 0.05417891378782f, 0.08417044116767f,
 
   65     0.10307344158036f, 0.12222452249753f, 0.125f
 
   69     -0.05908211155639f, -0.04871498374946f, 0.0f,   0.07778723915851f,
 
   70      0.16486303567403f,  0.23279856662996f, 0.25f
 
   76     for (q = 0; q < 
bands; q++) {
 
   77         for (n = 0; n < 7; n++) {
 
   78             double theta = 2 * 
M_PI * (q + 0.5) * (n - 6) / 
bands;
 
   79             filter[q][n][0] = proto[n] *  cos(theta);
 
   80             filter[q][n][1] = proto[n] * -sin(theta);
 
   91     static const float iid_par_dequant[] = {
 
   93         0.05623413251903, 0.12589254117942, 0.19952623149689, 0.31622776601684,
 
   94         0.44668359215096, 0.63095734448019, 0.79432823472428, 1,
 
   95         1.25892541179417, 1.58489319246111, 2.23872113856834, 3.16227766016838,
 
   96         5.01187233627272, 7.94328234724282, 17.7827941003892,
 
   98         0.00316227766017, 0.00562341325190, 0.01,             0.01778279410039,
 
   99         0.03162277660168, 0.05623413251903, 0.07943282347243, 0.11220184543020,
 
  100         0.15848931924611, 0.22387211385683, 0.31622776601684, 0.39810717055350,
 
  101         0.50118723362727, 0.63095734448019, 0.79432823472428, 1,
 
  102         1.25892541179417, 1.58489319246111, 1.99526231496888, 2.51188643150958,
 
  103         3.16227766016838, 4.46683592150963, 6.30957344480193, 8.91250938133745,
 
  104         12.5892541179417, 17.7827941003892, 31.6227766016838, 56.2341325190349,
 
  105         100,              177.827941003892, 316.227766016837,
 
  107     static const float icc_invq[] = {
 
  108         1, 0.937,      0.84118,    0.60092,    0.36764,   0,      -0.589,    -1
 
  110     static const float acos_icc_invq[] = {
 
  111         0, 0.35685527, 0.57133466, 0.92614472, 1.1943263, 
M_PI/2, 2.2006171, 
M_PI 
  116     static const int8_t f_center_20[] = {
 
  117         -3, -1, 1, 3, 5, 7, 10, 14, 18, 22,
 
  119     static const int8_t f_center_34[] = {
 
  120          2,  6, 10, 14, 18, 22, 26, 30,
 
  121         34,-10, -6, -2, 51, 57, 15, 21,
 
  122         27, 33, 39, 45, 54, 66, 78, 42,
 
  123        102, 66, 78, 90,102,114,126, 90,
 
  125     static const float fractional_delay_links[] = { 0.43f, 0.75f, 0.347f };
 
  126     const float fractional_delay_gain = 0.39f;
 
  128     for (pd0 = 0; pd0 < 8; pd0++) {
 
  129         float pd0_re = ipdopd_cos[pd0];
 
  130         float pd0_im = ipdopd_sin[pd0];
 
  131         for (pd1 = 0; pd1 < 8; pd1++) {
 
  132             float pd1_re = ipdopd_cos[pd1];
 
  133             float pd1_im = ipdopd_sin[pd1];
 
  134             for (pd2 = 0; pd2 < 8; pd2++) {
 
  135                 float pd2_re = ipdopd_cos[pd2];
 
  136                 float pd2_im = ipdopd_sin[pd2];
 
  137                 float re_smooth = 0.25f * pd0_re + 0.5f * pd1_re + pd2_re;
 
  138                 float im_smooth = 0.25f * pd0_im + 0.5f * pd1_im + pd2_im;
 
  139                 float pd_mag = 1 / 
hypot(im_smooth, re_smooth);
 
  146     for (iid = 0; iid < 46; iid++) {
 
  147         float c = iid_par_dequant[iid]; 
 
  150         for (icc = 0; icc < 8; icc++) {
 
  152                 float alpha = 0.5f * acos_icc_invq[icc];
 
  159                 float alpha, gamma, mu, rho;
 
  160                 float alpha_c, alpha_s, gamma_c, gamma_s;
 
  161                 rho = 
FFMAX(icc_invq[icc], 0.05
f);
 
  164                 mu = sqrtf(1 + (4 * rho * rho - 4)/(mu * mu));
 
  165                 gamma = 
atanf(sqrtf((1.0
f - mu)/(1.0
f + mu)));
 
  169                 gamma_c = 
cosf(gamma);
 
  170                 gamma_s = 
sinf(gamma);
 
  171                 HB[iid][icc][0] =  
M_SQRT2 * alpha_c * gamma_c;
 
  172                 HB[iid][icc][1] =  
M_SQRT2 * alpha_s * gamma_c;
 
  173                 HB[iid][icc][2] = -
M_SQRT2 * alpha_s * gamma_s;
 
  174                 HB[iid][icc][3] =  
M_SQRT2 * alpha_c * gamma_s;
 
  180         double f_center, theta;
 
  182             f_center = f_center_20[k] * 0.125;
 
  186             theta = -
M_PI * fractional_delay_links[m] * f_center;
 
  190         theta = -
M_PI*fractional_delay_gain*f_center;
 
  195         double f_center, theta;
 
  197             f_center = f_center_34[k] / 24.0;
 
  199             f_center = k - 26.5f;
 
  201             theta = -
M_PI * fractional_delay_links[m] * f_center;
 
  205         theta = -
M_PI*fractional_delay_gain*f_center;