00001
00002
00003 #ifdef HAVE_CONFIG_H
00004 # include <config.h>
00005 #endif
00006
00007 #include <stdlib.h>
00008 #include "tabinit.h"
00009 #include "mpg123.h"
00010
00011 #ifdef WITH_DMALLOC
00012 #include <dmalloc.h>
00013 #endif
00014
00015 real decwin[512+32];
00016 static real cos64[16],cos32[8],cos16[4],cos8[2],cos4[1];
00017 real *pnts[] = { cos64,cos32,cos16,cos8,cos4 };
00018
00019 static const double dewin[512] = {
00020 0.000000000,-0.000015259,-0.000015259,-0.000015259,
00021 -0.000015259,-0.000015259,-0.000015259,-0.000030518,
00022 -0.000030518,-0.000030518,-0.000030518,-0.000045776,
00023 -0.000045776,-0.000061035,-0.000061035,-0.000076294,
00024 -0.000076294,-0.000091553,-0.000106812,-0.000106812,
00025 -0.000122070,-0.000137329,-0.000152588,-0.000167847,
00026 -0.000198364,-0.000213623,-0.000244141,-0.000259399,
00027 -0.000289917,-0.000320435,-0.000366211,-0.000396729,
00028 -0.000442505,-0.000473022,-0.000534058,-0.000579834,
00029 -0.000625610,-0.000686646,-0.000747681,-0.000808716,
00030 -0.000885010,-0.000961304,-0.001037598,-0.001113892,
00031 -0.001205444,-0.001296997,-0.001388550,-0.001480103,
00032 -0.001586914,-0.001693726,-0.001785278,-0.001907349,
00033 -0.002014160,-0.002120972,-0.002243042,-0.002349854,
00034 -0.002456665,-0.002578735,-0.002685547,-0.002792358,
00035 -0.002899170,-0.002990723,-0.003082275,-0.003173828,
00036 -0.003250122,-0.003326416,-0.003387451,-0.003433228,
00037 -0.003463745,-0.003479004,-0.003479004,-0.003463745,
00038 -0.003417969,-0.003372192,-0.003280640,-0.003173828,
00039 -0.003051758,-0.002883911,-0.002700806,-0.002487183,
00040 -0.002227783,-0.001937866,-0.001617432,-0.001266479,
00041 -0.000869751,-0.000442505, 0.000030518, 0.000549316,
00042 0.001098633, 0.001693726, 0.002334595, 0.003005981,
00043 0.003723145, 0.004486084, 0.005294800, 0.006118774,
00044 0.007003784, 0.007919312, 0.008865356, 0.009841919,
00045 0.010848999, 0.011886597, 0.012939453, 0.014022827,
00046 0.015121460, 0.016235352, 0.017349243, 0.018463135,
00047 0.019577026, 0.020690918, 0.021789551, 0.022857666,
00048 0.023910522, 0.024932861, 0.025909424, 0.026840210,
00049 0.027725220, 0.028533936, 0.029281616, 0.029937744,
00050 0.030532837, 0.031005859, 0.031387329, 0.031661987,
00051 0.031814575, 0.031845093, 0.031738281, 0.031478882,
00052 0.031082153, 0.030517578, 0.029785156, 0.028884888,
00053 0.027801514, 0.026535034, 0.025085449, 0.023422241,
00054 0.021575928, 0.019531250, 0.017257690, 0.014801025,
00055 0.012115479, 0.009231567, 0.006134033, 0.002822876,
00056 -0.000686646,-0.004394531,-0.008316040,-0.012420654,
00057 -0.016708374,-0.021179199,-0.025817871,-0.030609131,
00058 -0.035552979,-0.040634155,-0.045837402,-0.051132202,
00059 -0.056533813,-0.061996460,-0.067520142,-0.073059082,
00060 -0.078628540,-0.084182739,-0.089706421,-0.095169067,
00061 -0.100540161,-0.105819702,-0.110946655,-0.115921021,
00062 -0.120697021,-0.125259399,-0.129562378,-0.133590698,
00063 -0.137298584,-0.140670776,-0.143676758,-0.146255493,
00064 -0.148422241,-0.150115967,-0.151306152,-0.151962280,
00065 -0.152069092,-0.151596069,-0.150497437,-0.148773193,
00066 -0.146362305,-0.143264771,-0.139450073,-0.134887695,
00067 -0.129577637,-0.123474121,-0.116577148,-0.108856201,
00068 -0.100311279,-0.090927124,-0.080688477,-0.069595337,
00069 -0.057617187,-0.044784546,-0.031082153,-0.016510010,
00070 -0.001068115, 0.015228271, 0.032379150, 0.050354004,
00071 0.069168091, 0.088775635, 0.109161377, 0.130310059,
00072 0.152206421, 0.174789429, 0.198059082, 0.221984863,
00073 0.246505737, 0.271591187, 0.297210693, 0.323318481,
00074 0.349868774, 0.376800537, 0.404083252, 0.431655884,
00075 0.459472656, 0.487472534, 0.515609741, 0.543823242,
00076 0.572036743, 0.600219727, 0.628295898, 0.656219482,
00077 0.683914185, 0.711318970, 0.738372803, 0.765029907,
00078 0.791213989, 0.816864014, 0.841949463, 0.866363525,
00079 0.890090942, 0.913055420, 0.935195923, 0.956481934,
00080 0.976852417, 0.996246338, 1.014617920, 1.031936646,
00081 1.048156738, 1.063217163, 1.077117920, 1.089782715,
00082 1.101211548, 1.111373901, 1.120223999, 1.127746582,
00083 1.133926392, 1.138763428, 1.142211914, 1.144287109,
00084 1.144989014
00085 };
00086
00087 void make_decode_tables(long scaleval)
00088 {
00089 int i,j,k,kr,divv;
00090 real *table,*costab;
00091
00092
00093 for(i=0;i<5;i++)
00094 {
00095 kr=0x10>>i; divv=0x40>>i;
00096 costab = pnts[i];
00097 for(k=0;k<kr;k++)
00098 costab[k] = (real)( 1.0 / (2.0 * cos(M_PI * ((double) k * 2.0 + 1.0) / (double) divv)) );
00099 }
00100
00101 table = decwin;
00102 scaleval = -scaleval;
00103 for(i=0,j=0;i<256;i++,j++,table+=32)
00104 {
00105 if(table < decwin+512+16)
00106 table[16] = table[0] = (real)( dewin[j] * scaleval );
00107 if(i % 32 == 31)
00108 table -= 1023;
00109 if(i % 64 == 63)
00110 scaleval = - scaleval;
00111 }
00112
00113 for( ;i<512;i++,j--,table+=32)
00114 {
00115 if(table < decwin+512+16)
00116 table[16] = table[0] = (real) ( dewin[j] * scaleval );
00117 if(i % 32 == 31)
00118 table -= 1023;
00119 if(i % 64 == 63)
00120 scaleval = - scaleval;
00121 }
00122 }
00123