1 /* 2 * Copyright 2018-2022 NXP 3 * All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 8 #include <stdint.h> 9 #include "fsl_powerquad_data.h" 10 11 /* Component ID definition, used by tools. */ 12 #ifndef FSL_COMPONENT_ID 13 #define FSL_COMPONENT_ID "platform.drivers.powerquad" 14 #endif 15 16 /******************************************************************************* 17 * Definitions 18 ******************************************************************************/ 19 20 /******************************************************************************* 21 * Code 22 ******************************************************************************/ 23 /*! 24 * @brief MATLAB script for calculating twiddle factor table for DCT is below,this gives phasor for FFTs twiddle at end 25 * of DCT, 26 * note that y is raw, scaled y is for fixed point multiplication. 27 * 28 * N=32; 29 * n=0; 30 * while(n<N) 31 * y(n+1)= exp(-1*i*n*(pi/(2*N))); 32 * 33 * if (n==0) 34 * y(n+1) = y(n+1) * sqrt(1/N); 35 * else 36 * y(n+1) = y(n+1) * sqrt(2/N); 37 * end 38 * 39 * scaledy(n+1) = y(n+1) * 1024*1024*16; 40 * n=n+1; 41 * end 42 * 43 * Use real(int32(scaledy)) to get co-efficients for real side and imag(int32(scaledy)) to get co-efficients for 44 * imaginary side 45 * or simply int32(scaledy) to get list of co-efficients for both. 46 */ 47 48 int32_t dct16_twiddle[32] = {4194304, 0, 5903079, -581403, 5817667, -1157206, 5676227, -1721865, 49 5480122, -2269941, 5231241, -2796157, 4931980, -3295444, 4585221, -3762994, 50 4194304, -4194304, 3762994, -4585221, 3295444, -4931980, 2796157, -5231241, 51 2269941, -5480122, 1721865, -5676227, 1157206, -5817667, 581403, -5903079}; 52 53 int32_t dct32_twiddle[64] = { 54 2965821, 0, 4189252, -205805, 4174107, -411114, 4148907, -615432, 4113712, -818268, 4068606, 55 -1019133, 4013699, -1217542, 3949122, -1413018, 3875032, -1605091, 3791606, -1793296, 3699046, -1977181, 56 3597575, -2156303, 3487436, -2330230, 3368897, -2498544, 3242241, -2660838, 3107774, -2816722, 2965821, 57 -2965821, 2816722, -3107774, 2660838, -3242241, 2498544, -3368897, 2330230, -3487436, 2156303, -3597575, 58 1977181, -3699046, 1793296, -3791606, 1605091, -3875032, 1413018, -3949122, 1217542, -4013699, 1019133, 59 -4068606, 818268, -4113712, 615432, -4148907, 411114, -4174107, 205805, -4189252}; 60 61 int32_t dct64_twiddle[128] = { 62 2097152, 0, 2964928, -72785, 2962248, -145526, 2957785, -218179, 2951540, -290701, 2943516, -363048, 63 2933720, -435176, 2922157, -507042, 2908833, -578603, 2893758, -649815, 2876939, -720636, 2858387, -791022, 64 2838114, -860932, 2816130, -930324, 2792451, -999155, 2767089, -1067384, 2740061, -1134970, 2711382, -1201873, 65 2681070, -1268052, 2649143, -1333467, 2615620, -1398078, 2580522, -1461848, 2543869, -1524737, 2505684, -1586707, 66 2465990, -1647722, 2424810, -1707744, 2382170, -1766737, 2338094, -1824667, 2292610, -1881497, 2245746, -1937194, 67 2197528, -1991724, 2147987, -2045054, 2097152, -2097152, 2045054, -2147987, 1991724, -2197528, 1937194, -2245746, 68 1881497, -2292610, 1824667, -2338094, 1766737, -2382170, 1707744, -2424810, 1647722, -2465990, 1586707, -2505684, 69 1524737, -2543869, 1461848, -2580522, 1398078, -2615620, 1333467, -2649143, 1268052, -2681070, 1201873, -2711382, 70 1134970, -2740061, 1067384, -2767089, 999155, -2792451, 930324, -2816130, 860932, -2838114, 791022, -2858387, 71 720636, -2876939, 649815, -2893758, 578603, -2908833, 507042, -2922157, 435176, -2933720, 363048, -2943516, 72 290701, -2951540, 218179, -2957785, 145526, -2962248, 72785, -2964928}; 73 74 int32_t dct128_twiddle[256] = { 75 1482910, 0, 2096994, -25735, 2096520, -51467, 2095731, -77190, 2094626, -102902, 2093205, -128599, 76 2091470, -154276, 2089419, -179930, 2087054, -205557, 2084374, -231153, 2081380, -256714, 2078073, -282236, 77 2074453, -307716, 2070521, -333150, 2066277, -358533, 2061722, -383862, 2056856, -409134, 2051680, -434344, 78 2046196, -459489, 2040403, -484564, 2034303, -509566, 2027897, -534492, 2021185, -559337, 2014169, -584098, 79 2006849, -608771, 1999228, -633352, 1991305, -657838, 1983082, -682225, 1974561, -706509, 1965742, -730687, 80 1956628, -754755, 1947218, -778709, 1937516, -802545, 1927521, -826261, 1917237, -849853, 1906663, -873316, 81 1895803, -896648, 1884657, -919845, 1873227, -942903, 1861515, -965820, 1849523, -988591, 1837252, -1011213, 82 1824705, -1033682, 1811882, -1055997, 1798787, -1078152, 1785421, -1100144, 1771786, -1121971, 1757885, -1143629, 83 1743718, -1165115, 1729289, -1186426, 1714600, -1207557, 1699652, -1228507, 1684448, -1249272, 1668991, -1269849, 84 1653282, -1290234, 1637325, -1310425, 1621120, -1330419, 1604672, -1350213, 1587982, -1369803, 1571053, -1389187, 85 1553887, -1408361, 1536487, -1427324, 1518856, -1446071, 1500996, -1464601, 1482910, -1482910, 1464601, -1500996, 86 1446071, -1518856, 1427324, -1536487, 1408361, -1553887, 1389187, -1571053, 1369803, -1587982, 1350213, -1604672, 87 1330419, -1621120, 1310425, -1637325, 1290234, -1653282, 1269849, -1668991, 1249272, -1684448, 1228507, -1699652, 88 1207557, -1714600, 1186426, -1729289, 1165115, -1743718, 1143629, -1757885, 1121971, -1771786, 1100144, -1785421, 89 1078152, -1798787, 1055997, -1811882, 1033682, -1824705, 1011213, -1837252, 988591, -1849523, 965820, -1861515, 90 942903, -1873227, 919845, -1884657, 896648, -1895803, 873316, -1906663, 849853, -1917237, 826261, -1927521, 91 802545, -1937516, 778709, -1947218, 754755, -1956628, 730687, -1965742, 706509, -1974561, 682225, -1983082, 92 657838, -1991305, 633352, -1999228, 608771, -2006849, 584098, -2014169, 559337, -2021185, 534492, -2027897, 93 509566, -2034303, 484564, -2040403, 459489, -2046196, 434344, -2051680, 409134, -2056856, 383862, -2061722, 94 358533, -2066277, 333150, -2070521, 307716, -2074453, 282236, -2078073, 256714, -2081380, 231153, -2084374, 95 205557, -2087054, 179930, -2089419, 154276, -2091470, 128599, -2093205, 102902, -2094626, 77190, -2095731, 96 51467, -2096520, 25735, -2096994}; 97 98 int32_t dct256_twiddle[512] = { 99 1048576, 0, 1482882, -9099, 1482799, -18198, 1482659, -27296, 1482464, -36392, 1482213, -45488, 100 1481906, -54582, 1481543, -63674, 1481124, -72763, 1480650, -81850, 1480120, -90933, 1479534, -100013, 101 1478892, -109090, 1478195, -118162, 1477442, -127230, 1476634, -136293, 1475770, -145351, 1474850, -154403, 102 1473875, -163450, 1472844, -172490, 1471758, -181524, 1470617, -190551, 1469420, -199571, 1468168, -208584, 103 1466860, -217588, 1465497, -226585, 1464080, -235572, 1462607, -244551, 1461078, -253521, 1459495, -262481, 104 1457857, -271432, 1456164, -280372, 1454417, -289301, 1452614, -298220, 1450757, -307128, 1448845, -316024, 105 1446879, -324908, 1444858, -333779, 1442783, -342638, 1440653, -351485, 1438469, -360318, 1436231, -369137, 106 1433939, -377943, 1431593, -386734, 1429194, -395511, 1426740, -404273, 1424232, -413020, 1421671, -421751, 107 1419057, -430466, 1416389, -439165, 1413667, -447848, 1410893, -456513, 1408065, -465162, 1405185, -473793, 108 1402251, -482406, 1399265, -491001, 1396225, -499577, 1393134, -508135, 1389990, -516674, 1386793, -525193, 109 1383545, -533692, 1380244, -542171, 1376891, -550630, 1373487, -559068, 1370031, -567485, 1366523, -575881, 110 1362963, -584255, 1359353, -592607, 1355691, -600937, 1351978, -609244, 1348215, -617528, 1344400, -625789, 111 1340535, -634026, 1336620, -642239, 1332654, -650429, 1328638, -658593, 1324572, -666733, 1320456, -674848, 112 1316290, -682938, 1312075, -691001, 1307810, -699039, 1303496, -707051, 1299133, -715035, 1294722, -722993, 113 1290261, -730924, 1285752, -738827, 1281194, -746702, 1276589, -754550, 1271935, -762368, 1267233, -770158, 114 1262483, -777919, 1257686, -785651, 1252842, -793354, 1247951, -801026, 1243012, -808668, 1238027, -816280, 115 1232995, -823861, 1227917, -831411, 1222792, -838930, 1217621, -846417, 1212405, -853872, 1207143, -861295, 116 1201835, -868686, 1196483, -876044, 1191085, -883369, 1185642, -890660, 1180155, -897919, 1174623, -905143, 117 1169047, -912333, 1163427, -919489, 1157763, -926611, 1152056, -933697, 1146305, -940748, 1140511, -947764, 118 1134674, -954744, 1128795, -961689, 1122873, -968597, 1116909, -975468, 1110902, -982303, 1104854, -989101, 119 1098764, -995862, 1092633, -1002585, 1086461, -1009270, 1080247, -1015918, 1073994, -1022527, 1067699, -1029097, 120 1061365, -1035629, 1054990, -1042122, 1048576, -1048576, 1042122, -1054990, 1035629, -1061365, 1029097, -1067699, 121 1022527, -1073994, 1015918, -1080247, 1009270, -1086461, 1002585, -1092633, 995862, -1098764, 989101, -1104854, 122 982303, -1110902, 975468, -1116909, 968597, -1122873, 961689, -1128795, 954744, -1134674, 947764, -1140511, 123 940748, -1146305, 933697, -1152056, 926611, -1157763, 919489, -1163427, 912333, -1169047, 905143, -1174623, 124 897919, -1180155, 890660, -1185642, 883369, -1191085, 876044, -1196483, 868686, -1201835, 861295, -1207143, 125 853872, -1212405, 846417, -1217621, 838930, -1222792, 831411, -1227917, 823861, -1232995, 816280, -1238027, 126 808668, -1243012, 801026, -1247951, 793354, -1252842, 785651, -1257686, 777919, -1262483, 770158, -1267233, 127 762368, -1271935, 754550, -1276589, 746702, -1281194, 738827, -1285752, 730924, -1290261, 722993, -1294722, 128 715035, -1299133, 707051, -1303496, 699039, -1307810, 691001, -1312075, 682938, -1316290, 674848, -1320456, 129 666733, -1324572, 658593, -1328638, 650429, -1332654, 642239, -1336620, 634026, -1340535, 625789, -1344400, 130 617528, -1348215, 609244, -1351978, 600937, -1355691, 592607, -1359353, 584255, -1362963, 575881, -1366523, 131 567485, -1370031, 559068, -1373487, 550630, -1376891, 542171, -1380244, 533692, -1383545, 525193, -1386793, 132 516674, -1389990, 508135, -1393134, 499577, -1396225, 491001, -1399265, 482406, -1402251, 473793, -1405185, 133 465162, -1408065, 456513, -1410893, 447848, -1413667, 439165, -1416389, 430466, -1419057, 421751, -1421671, 134 413020, -1424232, 404273, -1426740, 395511, -1429194, 386734, -1431593, 377943, -1433939, 369137, -1436231, 135 360318, -1438469, 351485, -1440653, 342638, -1442783, 333779, -1444858, 324908, -1446879, 316024, -1448845, 136 307128, -1450757, 298220, -1452614, 289301, -1454417, 280372, -1456164, 271432, -1457857, 262481, -1459495, 137 253521, -1461078, 244551, -1462607, 235572, -1464080, 226585, -1465497, 217588, -1466860, 208584, -1468168, 138 199571, -1469420, 190551, -1470617, 181524, -1471758, 172490, -1472844, 163450, -1473875, 154403, -1474850, 139 145351, -1475770, 136293, -1476634, 127230, -1477442, 118162, -1478195, 109090, -1478892, 100013, -1479534, 140 90933, -1480120, 81850, -1480650, 72763, -1481124, 63674, -1481543, 54582, -1481906, 45488, -1482213, 141 36392, -1482464, 27296, -1482659, 18198, -1482799, 9099, -1482882}; 142 143 int32_t dct512_twiddle[1024] = { 144 741455, 0, 1048571, -3217, 1048556, -6434, 1048532, -9651, 1048497, -12868, 1048453, -16084, 145 1048398, -19301, 1048334, -22517, 1048260, -25733, 1048176, -28949, 1048083, -32165, 1047979, -35380, 146 1047865, -38595, 1047742, -41810, 1047609, -45024, 1047466, -48238, 1047313, -51451, 1047150, -54664, 147 1046978, -57876, 1046795, -61088, 1046603, -64299, 1046401, -67510, 1046188, -70720, 1045967, -73929, 148 1045735, -77138, 1045493, -80346, 1045242, -83553, 1044981, -86759, 1044709, -89965, 1044429, -93170, 149 1044138, -96374, 1043837, -99576, 1043527, -102778, 1043207, -105979, 1042877, -109179, 1042537, -112378, 150 1042187, -115576, 1041828, -118773, 1041458, -121969, 1041079, -125163, 1040690, -128357, 1040292, -131549, 151 1039883, -134740, 1039465, -137930, 1039037, -141118, 1038599, -144305, 1038151, -147491, 1037694, -150675, 152 1037227, -153858, 1036750, -157039, 1036263, -160219, 1035767, -163398, 1035261, -166575, 1034745, -169750, 153 1034219, -172924, 1033684, -176096, 1033138, -179267, 1032584, -182435, 1032019, -185602, 1031445, -188768, 154 1030861, -191931, 1030267, -195093, 1029664, -198253, 1029051, -201411, 1028428, -204567, 1027795, -207721, 155 1027153, -210873, 1026502, -214024, 1025840, -217172, 1025169, -220318, 1024488, -223462, 1023798, -226604, 156 1023098, -229744, 1022388, -232882, 1021669, -236018, 1020940, -239151, 1020201, -242282, 1019453, -245411, 157 1018696, -248537, 1017928, -251661, 1017151, -254783, 1016365, -257903, 1015569, -261020, 1014763, -264134, 158 1013948, -267246, 1013124, -270356, 1012289, -273462, 1011446, -276567, 1010592, -279669, 1009730, -282768, 159 1008857, -285864, 1007976, -288958, 1007084, -292049, 1006184, -295137, 1005273, -298223, 1004354, -301306, 160 1003425, -304386, 1002486, -307463, 1001538, -310537, 1000581, -313608, 999614, -316676, 998638, -319741, 161 997652, -322804, 996657, -325863, 995652, -328919, 994639, -331972, 993616, -335022, 992583, -338069, 162 991541, -341113, 990490, -344153, 989429, -347190, 988360, -350224, 987281, -353255, 986192, -356282, 163 985094, -359306, 983987, -362326, 982871, -365343, 981746, -368357, 980611, -371367, 979467, -374374, 164 978314, -377377, 977151, -380377, 975980, -383373, 974799, -386365, 973609, -389354, 972410, -392339, 165 971202, -395321, 969984, -398299, 968758, -401273, 967522, -404243, 966278, -407209, 965024, -410172, 166 963761, -413131, 962489, -416085, 961208, -419036, 959918, -421983, 958618, -424926, 957310, -427865, 167 955993, -430800, 954667, -433731, 953332, -436658, 951988, -439581, 950634, -442499, 949272, -445414, 168 947901, -448324, 946522, -451230, 945133, -454132, 943735, -457029, 942328, -459922, 940913, -462811, 169 939489, -465696, 938056, -468576, 936614, -471452, 935163, -474323, 933703, -477190, 932235, -480052, 170 930758, -482910, 929272, -485763, 927777, -488612, 926274, -491456, 924761, -494295, 923241, -497130, 171 921711, -499960, 920173, -502786, 918626, -505606, 917071, -508422, 915506, -511233, 913934, -514040, 172 912352, -516841, 910762, -519638, 909164, -522430, 907557, -525216, 905941, -527998, 904317, -530775, 173 902684, -533547, 901043, -536314, 899394, -539076, 897736, -541833, 896069, -544584, 894394, -547331, 174 892711, -550072, 891019, -552808, 889319, -555539, 887610, -558265, 885893, -560986, 884168, -563701, 175 882434, -566411, 880692, -569115, 878942, -571815, 877184, -574509, 875417, -577197, 873642, -579880, 176 871859, -582558, 870068, -585230, 868268, -587896, 866460, -590557, 864645, -593213, 862821, -595863, 177 860988, -598507, 859148, -601146, 857300, -603779, 855443, -606406, 853579, -609028, 851706, -611643, 178 849826, -614254, 847937, -616858, 846041, -619456, 844137, -622049, 842224, -624636, 840304, -627217, 179 838376, -629792, 836439, -632361, 834495, -634924, 832544, -637482, 830584, -640033, 828616, -642578, 180 826641, -645117, 824658, -647650, 822667, -650177, 820669, -652698, 818662, -655213, 816648, -657721, 181 814627, -660224, 812597, -662720, 810560, -665210, 808516, -667693, 806463, -670171, 804403, -672642, 182 802336, -675106, 800261, -677565, 798179, -680017, 796089, -682462, 793991, -684901, 791886, -687334, 183 789774, -689760, 787654, -692180, 785526, -694593, 783392, -697000, 781250, -699400, 779100, -701794, 184 776944, -704181, 774780, -706561, 772608, -708935, 770430, -711302, 768244, -713662, 766051, -716015, 185 763850, -718362, 761643, -720702, 759428, -723036, 757206, -725362, 754977, -727682, 752741, -729995, 186 750498, -732301, 748248, -734600, 745991, -736892, 743726, -739177, 741455, -741455, 739177, -743726, 187 736892, -745991, 734600, -748248, 732301, -750498, 729995, -752741, 727682, -754977, 725362, -757206, 188 723036, -759428, 720702, -761643, 718362, -763850, 716015, -766051, 713662, -768244, 711302, -770430, 189 708935, -772608, 706561, -774780, 704181, -776944, 701794, -779100, 699400, -781250, 697000, -783392, 190 694593, -785526, 692180, -787654, 689760, -789774, 687334, -791886, 684901, -793991, 682462, -796089, 191 680017, -798179, 677565, -800261, 675106, -802336, 672642, -804403, 670171, -806463, 667693, -808516, 192 665210, -810560, 662720, -812597, 660224, -814627, 657721, -816648, 655213, -818662, 652698, -820669, 193 650177, -822667, 647650, -824658, 645117, -826641, 642578, -828616, 640033, -830584, 637482, -832544, 194 634924, -834495, 632361, -836439, 629792, -838376, 627217, -840304, 624636, -842224, 622049, -844137, 195 619456, -846041, 616858, -847937, 614254, -849826, 611643, -851706, 609028, -853579, 606406, -855443, 196 603779, -857300, 601146, -859148, 598507, -860988, 595863, -862821, 593213, -864645, 590557, -866460, 197 587896, -868268, 585230, -870068, 582558, -871859, 579880, -873642, 577197, -875417, 574509, -877184, 198 571815, -878942, 569115, -880692, 566411, -882434, 563701, -884168, 560986, -885893, 558265, -887610, 199 555539, -889319, 552808, -891019, 550072, -892711, 547331, -894394, 544584, -896069, 541833, -897736, 200 539076, -899394, 536314, -901043, 533547, -902684, 530775, -904317, 527998, -905941, 525216, -907557, 201 522430, -909164, 519638, -910762, 516841, -912352, 514040, -913934, 511233, -915506, 508422, -917071, 202 505606, -918626, 502786, -920173, 499960, -921711, 497130, -923241, 494295, -924761, 491456, -926274, 203 488612, -927777, 485763, -929272, 482910, -930758, 480052, -932235, 477190, -933703, 474323, -935163, 204 471452, -936614, 468576, -938056, 465696, -939489, 462811, -940913, 459922, -942328, 457029, -943735, 205 454132, -945133, 451230, -946522, 448324, -947901, 445414, -949272, 442499, -950634, 439581, -951988, 206 436658, -953332, 433731, -954667, 430800, -955993, 427865, -957310, 424926, -958618, 421983, -959918, 207 419036, -961208, 416085, -962489, 413131, -963761, 410172, -965024, 407209, -966278, 404243, -967522, 208 401273, -968758, 398299, -969984, 395321, -971202, 392339, -972410, 389354, -973609, 386365, -974799, 209 383373, -975980, 380377, -977151, 377377, -978314, 374374, -979467, 371367, -980611, 368357, -981746, 210 365343, -982871, 362326, -983987, 359306, -985094, 356282, -986192, 353255, -987281, 350224, -988360, 211 347190, -989429, 344153, -990490, 341113, -991541, 338069, -992583, 335022, -993616, 331972, -994639, 212 328919, -995652, 325863, -996657, 322804, -997652, 319741, -998638, 316676, -999614, 313608, -1000581, 213 310537, -1001538, 307463, -1002486, 304386, -1003425, 301306, -1004354, 298223, -1005273, 295137, -1006184, 214 292049, -1007084, 288958, -1007976, 285864, -1008857, 282768, -1009730, 279669, -1010592, 276567, -1011446, 215 273462, -1012289, 270356, -1013124, 267246, -1013948, 264134, -1014763, 261020, -1015569, 257903, -1016365, 216 254783, -1017151, 251661, -1017928, 248537, -1018696, 245411, -1019453, 242282, -1020201, 239151, -1020940, 217 236018, -1021669, 232882, -1022388, 229744, -1023098, 226604, -1023798, 223462, -1024488, 220318, -1025169, 218 217172, -1025840, 214024, -1026502, 210873, -1027153, 207721, -1027795, 204567, -1028428, 201411, -1029051, 219 198253, -1029664, 195093, -1030267, 191931, -1030861, 188768, -1031445, 185602, -1032019, 182435, -1032584, 220 179267, -1033138, 176096, -1033684, 172924, -1034219, 169750, -1034745, 166575, -1035261, 163398, -1035767, 221 160219, -1036263, 157039, -1036750, 153858, -1037227, 150675, -1037694, 147491, -1038151, 144305, -1038599, 222 141118, -1039037, 137930, -1039465, 134740, -1039883, 131549, -1040292, 128357, -1040690, 125163, -1041079, 223 121969, -1041458, 118773, -1041828, 115576, -1042187, 112378, -1042537, 109179, -1042877, 105979, -1043207, 224 102778, -1043527, 99576, -1043837, 96374, -1044138, 93170, -1044429, 89965, -1044709, 86759, -1044981, 225 83553, -1045242, 80346, -1045493, 77138, -1045735, 73929, -1045967, 70720, -1046188, 67510, -1046401, 226 64299, -1046603, 61088, -1046795, 57876, -1046978, 54664, -1047150, 51451, -1047313, 48238, -1047466, 227 45024, -1047609, 41810, -1047742, 38595, -1047865, 35380, -1047979, 32165, -1048083, 28949, -1048176, 228 25733, -1048260, 22517, -1048334, 19301, -1048398, 16084, -1048453, 12868, -1048497, 9651, -1048532, 229 6434, -1048556, 3217, -1048571}; 230 231 /*! 232 * @brief MATLAB script for calculating twiddle factor table for IDCT is below. 233 * 234 * N = 32; 235 * Q=exp(pi*1i*((0:(N-1))')/(2*N)); % Generate e^(jnPi/2N) table 236 * Q(2:N)=Q(2:N)/sqrt(2); % scale twiddle by dividing by sqrt(2) 237 * int32(Q*1024*1024*16*1/sqrt(1/N)) 238 * 239 * Note that for twiddle table, we can already scale by 1/sqrt(1/N) by running following command 240 */ 241 242 int32_t idct16_twiddle[32] = {67108864, 0, 47224633, 4651220, 46541334, 9257647, 45409817, 13774917, 243 43840978, 18159528, 41849927, 22369252, 39455838, 26363548, 36681768, 30103949, 244 33554432, 33554432, 30103949, 36681768, 26363548, 39455838, 22369252, 41849927, 245 18159528, 43840978, 13774917, 45409817, 9257647, 46541334, 4651220, 47224633}; 246 247 int32_t idct32_twiddle[64] = { 248 94906266, 0, 67028028, 3292876, 66785716, 6577819, 66382512, 9846915, 65819386, 13092290, 65097695, 249 16306124, 64219179, 19480675, 63185953, 22608295, 62000506, 25681450, 60665695, 28692737, 59184734, 31634900, 250 57561193, 34500851, 55798981, 37283687, 53902345, 39976704, 51875853, 42573413, 49724388, 45067559, 47453133, 251 47453133, 45067559, 49724388, 42573413, 51875853, 39976704, 53902345, 37283687, 55798981, 34500851, 57561193, 252 31634900, 59184734, 28692737, 60665695, 25681450, 62000506, 22608295, 63185953, 19480675, 64219179, 16306124, 253 65097695, 13092290, 65819386, 9846915, 66382512, 6577819, 66785716, 3292876, 67028028}; 254 255 int32_t idct64_twiddle[128] = { 256 134217728, 0, 94877682, 2329116, 94791947, 4656830, 94649113, 6981738, 94449266, 9302441, 94192526, 257 11617540, 93879049, 13925641, 93509022, 16225354, 93082668, 18515294, 92600246, 20794080, 92062044, 23060341, 258 91468387, 25312712, 90819634, 27549835, 90116174, 29770363, 89358431, 31972958, 88546862, 34156294, 87681956, 259 36319055, 86764234, 38459940, 85794248, 40577657, 84772583, 42670932, 83699854, 44738504, 82576707, 46779127, 260 81403819, 48791572, 80181897, 50774626, 78911676, 52727096, 77593921, 54647805, 76229427, 56535596, 74819015, 261 58389333, 73363535, 60207898, 71863864, 61990195, 70320904, 63735153, 68735586, 65441718, 67108864, 67108864, 262 65441718, 68735586, 63735153, 70320904, 61990195, 71863864, 60207898, 73363535, 58389333, 74819015, 56535596, 263 76229427, 54647805, 77593921, 52727096, 78911676, 50774626, 80181897, 48791572, 81403819, 46779127, 82576707, 264 44738504, 83699854, 42670932, 84772583, 40577657, 85794248, 38459940, 86764234, 36319055, 87681956, 34156294, 265 88546862, 31972958, 89358431, 29770363, 90116174, 27549835, 90819634, 25312712, 91468387, 23060341, 92062044, 266 20794080, 92600246, 18515294, 93082668, 16225354, 93509022, 13925641, 93879049, 11617540, 94192526, 9302441, 267 94449266, 6981738, 94649113, 4656830, 94791947, 2329116, 94877682}; 268 269 int32_t idct128_twiddle[256] = { 270 189812531, 0, 134207622, 1647058, 134177304, 3293868, 134126780, 4940182, 134056057, 6585752, 271 133965145, 8230330, 133854059, 9873669, 133722815, 11515520, 133571433, 13155638, 133399935, 14793774, 272 133208348, 16429683, 132996700, 18063117, 132765024, 19693831, 132513353, 21321579, 132241727, 22946116, 273 131950185, 24567198, 131638772, 26184580, 131307535, 27798018, 130956523, 29407271, 130585790, 31012094, 274 130195391, 32612248, 129785385, 34207490, 129355834, 35797580, 128906802, 37382280, 128438358, 38961350, 275 127950571, 40534552, 127443515, 42101651, 126917267, 43662408, 126371905, 45216591, 125807513, 46763964, 276 125224174, 48304294, 124621977, 49837350, 124001012, 51362901, 123361373, 52880716, 122703156, 54390568, 277 122026461, 55892229, 121331389, 57385473, 120618045, 58870075, 119886536, 60345811, 119136973, 61812459, 278 118369468, 63269799, 117584138, 64717610, 116781099, 66155675, 115960474, 67583778, 115122385, 69001702, 279 114266960, 70409235, 113394326, 71806165, 112504616, 73192281, 111597962, 74567374, 110674503, 75931238, 280 109734376, 77283667, 108777724, 78624457, 107804690, 79953407, 106815421, 81270316, 105810066, 82574986, 281 104788777, 83867221, 103751707, 85146825, 102699012, 86413607, 101630851, 87667375, 100547385, 88907941, 282 99448777, 90135117, 98335192, 91348720, 97206798, 92548565, 96063765, 93734473, 94906266, 94906266, 283 93734473, 96063765, 92548565, 97206798, 91348720, 98335192, 90135117, 99448777, 88907941, 100547385, 284 87667375, 101630851, 86413607, 102699012, 85146825, 103751707, 83867221, 104788777, 82574986, 105810066, 285 81270316, 106815421, 79953407, 107804690, 78624457, 108777724, 77283667, 109734376, 75931238, 110674503, 286 74567374, 111597962, 73192281, 112504616, 71806165, 113394326, 70409235, 114266960, 69001702, 115122385, 287 67583778, 115960474, 66155675, 116781099, 64717610, 117584138, 63269799, 118369468, 61812459, 119136973, 288 60345811, 119886536, 58870075, 120618045, 57385473, 121331389, 55892229, 122026461, 54390568, 122703156, 289 52880716, 123361373, 51362901, 124001012, 49837350, 124621977, 48304294, 125224174, 46763964, 125807513, 290 45216591, 126371905, 43662408, 126917267, 42101651, 127443515, 40534552, 127950571, 38961350, 128438358, 291 37382280, 128906802, 35797580, 129355834, 34207490, 129785385, 32612248, 130195391, 31012094, 130585790, 292 29407271, 130956523, 27798018, 131307535, 26184580, 131638772, 24567198, 131950185, 22946116, 132241727, 293 21321579, 132513353, 19693831, 132765024, 18063117, 132996700, 16429683, 133208348, 14793774, 133399935, 294 13155638, 133571433, 11515520, 133722815, 9873669, 133854059, 8230330, 133965145, 6585752, 134056057, 295 4940182, 134126780, 3293868, 134177304, 1647058, 134207622}; 296 297 int32_t idct256_twiddle[512] = { 298 268435456, 0, 189808958, 1164668, 189798239, 2329292, 189780374, 3493828, 189755363, 4658233, 299 189723209, 5822462, 189683911, 6986472, 189637472, 8150219, 189583894, 9313659, 189523177, 10476749, 300 189455325, 11639444, 189380341, 12801701, 189298226, 13963476, 189208984, 15124725, 189112619, 16285405, 301 189009133, 17445472, 188898532, 18604882, 188780819, 19763591, 188655998, 20921556, 188524074, 22078734, 302 188385053, 23235080, 188238939, 24390552, 188085737, 25545105, 187925455, 26698696, 187758097, 27851283, 303 187583670, 29002821, 187402181, 30153266, 187213637, 31302577, 187018043, 32450709, 186815409, 33597619, 304 186605741, 34743264, 186389048, 35887602, 186165337, 37030588, 185934617, 38172180, 185696897, 39312335, 305 185452185, 40451009, 185200491, 41588161, 184941825, 42723747, 184676195, 43857724, 184403613, 44990051, 306 184124088, 46120683, 183837630, 47249579, 183544252, 48376696, 183243963, 49501992, 182936775, 50625424, 307 182622699, 51746950, 182301748, 52866527, 181973933, 53984115, 181639267, 55099669, 181297763, 56213150, 308 180949433, 57324514, 180594290, 58433719, 180232347, 59540725, 179863620, 60645489, 179488120, 61747970, 309 179105863, 62848126, 178716862, 63945916, 178321133, 65041298, 177918690, 66134232, 177509549, 67224675, 310 177093725, 68312588, 176671233, 69397929, 176242089, 70480656, 175806311, 71560731, 175363913, 72638111, 311 174914912, 73712756, 174459327, 74784626, 173997173, 75853681, 173528468, 76919880, 173053230, 77983182, 312 172571476, 79043549, 172083225, 80100940, 171588496, 81155315, 171087306, 82206634, 170579675, 83254858, 313 170065622, 84299948, 169545166, 85341865, 169018326, 86380568, 168485123, 87416018, 167945577, 88448178, 314 167399708, 89477008, 166847536, 90502469, 166289082, 91524522, 165724368, 92543130, 165153414, 93558254, 315 164576243, 94569855, 163992875, 95577895, 163403333, 96582337, 162807639, 97583143, 162205815, 98580275, 316 161597884, 99573696, 160983869, 100563367, 160363794, 101549252, 159737680, 102531315, 159105553, 103509516, 317 158467436, 104483821, 157823352, 105454192, 157173326, 106420593, 156517383, 107382987, 155855547, 108341338, 318 155187843, 109295610, 154514296, 110245768, 153834932, 111191774, 153149776, 112133594, 152458855, 113071193, 319 151762193, 114004534, 151059817, 114933583, 150351754, 115858305, 149638031, 116778666, 148918674, 117694629, 320 148193710, 118606161, 147463166, 119513228, 146727071, 120415795, 145985451, 121313829, 145238336, 122207295, 321 144485752, 123096160, 143727728, 123980391, 142964293, 124859954, 142195475, 125734815, 141421304, 126604944, 322 140641809, 127470305, 139857018, 128330867, 139066962, 129186598, 138271670, 130037465, 137471172, 130883436, 323 136665499, 131724480, 135854680, 132560564, 135038746, 133391657, 134217728, 134217728, 133391657, 135038746, 324 132560564, 135854680, 131724480, 136665499, 130883436, 137471172, 130037465, 138271670, 129186598, 139066962, 325 128330867, 139857018, 127470305, 140641809, 126604944, 141421304, 125734815, 142195475, 124859954, 142964293, 326 123980391, 143727728, 123096160, 144485752, 122207295, 145238336, 121313829, 145985451, 120415795, 146727071, 327 119513228, 147463166, 118606161, 148193710, 117694629, 148918674, 116778666, 149638031, 115858305, 150351754, 328 114933583, 151059817, 114004534, 151762193, 113071193, 152458855, 112133594, 153149776, 111191774, 153834932, 329 110245768, 154514296, 109295610, 155187843, 108341338, 155855547, 107382987, 156517383, 106420593, 157173326, 330 105454192, 157823352, 104483821, 158467436, 103509516, 159105553, 102531315, 159737680, 101549252, 160363794, 331 100563367, 160983869, 99573696, 161597884, 98580275, 162205815, 97583143, 162807639, 96582337, 163403333, 332 95577895, 163992875, 94569855, 164576243, 93558254, 165153414, 92543130, 165724368, 91524522, 166289082, 333 90502469, 166847536, 89477008, 167399708, 88448178, 167945577, 87416018, 168485123, 86380568, 169018326, 334 85341865, 169545166, 84299948, 170065622, 83254858, 170579675, 82206634, 171087306, 81155315, 171588496, 335 80100940, 172083225, 79043549, 172571476, 77983182, 173053230, 76919880, 173528468, 75853681, 173997173, 336 74784626, 174459327, 73712756, 174914912, 72638111, 175363913, 71560731, 175806311, 70480656, 176242089, 337 69397929, 176671233, 68312588, 177093725, 67224675, 177509549, 66134232, 177918690, 65041298, 178321133, 338 63945916, 178716862, 62848126, 179105863, 61747970, 179488120, 60645489, 179863620, 59540725, 180232347, 339 58433719, 180594290, 57324514, 180949433, 56213150, 181297763, 55099669, 181639267, 53984115, 181973933, 340 52866527, 182301748, 51746950, 182622699, 50625424, 182936775, 49501992, 183243963, 48376696, 183544252, 341 47249579, 183837630, 46120683, 184124088, 44990051, 184403613, 43857724, 184676195, 42723747, 184941825, 342 41588161, 185200491, 40451009, 185452185, 39312335, 185696897, 38172180, 185934617, 37030588, 186165337, 343 35887602, 186389048, 34743264, 186605741, 33597619, 186815409, 32450709, 187018043, 31302577, 187213637, 344 30153266, 187402181, 29002821, 187583670, 27851283, 187758097, 26698696, 187925455, 25545105, 188085737, 345 24390552, 188238939, 23235080, 188385053, 22078734, 188524074, 20921556, 188655998, 19763591, 188780819, 346 18604882, 188898532, 17445472, 189009133, 16285405, 189112619, 15124725, 189208984, 13963476, 189298226, 347 12801701, 189380341, 11639444, 189455325, 10476749, 189523177, 9313659, 189583894, 8150219, 189637472, 348 6986472, 189683911, 5822462, 189723209, 4658233, 189755363, 3493828, 189780374, 2329292, 189798239, 349 1164668, 189808958}; 350 351 int32_t idct512_twiddle[1024] = { 352 379625062, 0, 268434193, 823548, 268430403, 1647089, 268424086, 2470614, 268415243, 3294116, 353 268403874, 4117587, 268389978, 4941019, 268373556, 5764405, 268354608, 6587736, 268333134, 7411005, 354 268309135, 8234205, 268282610, 9057327, 268253560, 9880364, 268221985, 10703307, 268187885, 11526151, 355 268151262, 12348885, 268112114, 13171504, 268070442, 13993998, 268026248, 14816361, 267979530, 15638584, 356 267930291, 16460660, 267878529, 17282581, 267824246, 18104339, 267767443, 18925927, 267708119, 19747337, 357 267646275, 20568561, 267581912, 21389592, 267515030, 22210421, 267445630, 23031041, 267373713, 23851444, 358 267299280, 24671623, 267222331, 25491569, 267142866, 26311276, 267060887, 27130735, 266976394, 27949938, 359 266889388, 28768879, 266799871, 29587548, 266707842, 30405940, 266613302, 31224045, 266516254, 32041856, 360 266416696, 32859365, 266314632, 33676566, 266210060, 34493449, 266102983, 35310008, 265993401, 36126234, 361 265881315, 36942120, 265766727, 37757659, 265649638, 38572842, 265530048, 39387662, 265407958, 40202111, 362 265283371, 41016182, 265156286, 41829867, 265026706, 42643158, 264894632, 43456048, 264760064, 44268529, 363 264623004, 45080593, 264483453, 45892233, 264341413, 46703440, 264196885, 47514209, 264049870, 48324530, 364 263900370, 49134396, 263748386, 49943799, 263593919, 50752733, 263436971, 51561189, 263277544, 52369160, 365 263115639, 53176637, 262951257, 53983614, 262784400, 54790083, 262615070, 55596037, 262443267, 56401467, 366 262268995, 57206366, 262092254, 58010727, 261913046, 58814541, 261731373, 59617802, 261547237, 60420502, 367 261360638, 61222634, 261171580, 62024189, 260980063, 62825160, 260786090, 63625540, 260589662, 64425321, 368 260390782, 65224495, 260189450, 66023056, 259985670, 66820995, 259779443, 67618306, 259570770, 68414980, 369 259359654, 69211009, 259146097, 70006388, 258930101, 70801108, 258711668, 71595161, 258490799, 72388540, 370 258267498, 73181238, 258041766, 73973247, 257813604, 74764560, 257583017, 75555169, 257350004, 76345067, 371 257114570, 77134246, 256876715, 77922700, 256636443, 78710420, 256393755, 79497399, 256148654, 80283630, 372 255901142, 81069105, 255651221, 81853817, 255398894, 82637759, 255144163, 83420922, 254887030, 84203301, 373 254627499, 84984887, 254365570, 85765673, 254101248, 86545652, 253834534, 87324817, 253565430, 88103159, 374 253293940, 88880672, 253020066, 89657349, 252743810, 90433181, 252465176, 91208163, 252184165, 91982286, 375 251900781, 92755543, 251615025, 93527927, 251326901, 94299431, 251036412, 95070047, 250743560, 95839769, 376 250448347, 96608588, 250150778, 97376498, 249850854, 98143492, 249548578, 98909562, 249243953, 99674700, 377 248936982, 100438901, 248627669, 101202156, 248316015, 101964459, 248002024, 102725802, 247685698, 103486178, 378 247367041, 104245580, 247046056, 105004000, 246722746, 105761433, 246397113, 106517870, 246069161, 107273304, 379 245738894, 108027729, 245406313, 108781137, 245071422, 109533521, 244734224, 110284874, 244394723, 111035189, 380 244052922, 111784459, 243708824, 112532677, 243362431, 113279835, 243013748, 114025927, 242662778, 114770946, 381 242309524, 115514885, 241953989, 116257737, 241596176, 116999494, 241236090, 117740150, 240873733, 118479698, 382 240509109, 119218130, 240142221, 119955441, 239773073, 120691622, 239401668, 121426668, 239028009, 122160570, 383 238652101, 122893323, 238273946, 123624919, 237893549, 124355351, 237510913, 125084613, 237126041, 125812698, 384 236738937, 126539598, 236349605, 127265307, 235958048, 127989819, 235564270, 128713125, 235168275, 129435221, 385 234770067, 130156098, 234369649, 130875750, 233967025, 131594170, 233562198, 132311351, 233155174, 133027287, 386 232745954, 133741971, 232334544, 134455396, 231920948, 135167556, 231505168, 135878443, 231087209, 136588051, 387 230667075, 137296374, 230244771, 138003405, 229820298, 138709136, 229393663, 139413562, 228964869, 140116676, 388 228533919, 140818471, 228100819, 141518940, 227665572, 142218078, 227228181, 142915876, 226788652, 143612330, 389 226346988, 144307432, 225903194, 145001176, 225457274, 145693554, 225009231, 146384562, 224559071, 147074192, 390 224106797, 147762437, 223652413, 148449292, 223195925, 149134749, 222737335, 149818802, 222276649, 150501446, 391 221813871, 151182673, 221349006, 151862477, 220882056, 152540851, 220413028, 153217790, 219941925, 153893286, 392 219468752, 154567334, 218993513, 155239928, 218516213, 155911060, 218036857, 156580724, 217555448, 157248915, 393 217071991, 157915626, 216586491, 158580850, 216098952, 159244582, 215609380, 159906814, 215117778, 160567542, 394 214624151, 161226759, 214128505, 161884457, 213630842, 162540633, 213131169, 163195278, 212629490, 163848387, 395 212125810, 164499954, 211620133, 165149973, 211112464, 165798437, 210602808, 166445340, 210091170, 167090677, 396 209577554, 167734442, 209061966, 168376627, 208544410, 169017228, 208024891, 169656238, 207503414, 170293651, 397 206979983, 170929461, 206454605, 171563662, 205927284, 172196248, 205398024, 172827214, 204866831, 173456553, 398 204333709, 174084259, 203798665, 174710327, 203261702, 175334750, 202722826, 175957523, 202182042, 176578640, 399 201639355, 177198094, 201094770, 177815881, 200548292, 178431995, 199999926, 179046428, 199449678, 179659177, 400 198897553, 180270234, 198343556, 180879595, 197787692, 181487253, 197229966, 182093203, 196670384, 182697439, 401 196108950, 183299956, 195545671, 183900747, 194980551, 184499807, 194413596, 185097131, 193844811, 185692712, 402 193274202, 186286546, 192701773, 186878626, 192127530, 187468947, 191551480, 188057504, 190973626, 188644290, 403 190393975, 189229301, 189812531, 189812531, 189229301, 190393975, 188644290, 190973626, 188057504, 191551480, 404 187468947, 192127530, 186878626, 192701773, 186286546, 193274202, 185692712, 193844811, 185097131, 194413596, 405 184499807, 194980551, 183900747, 195545671, 183299956, 196108950, 182697439, 196670384, 182093203, 197229966, 406 181487253, 197787692, 180879595, 198343556, 180270234, 198897553, 179659177, 199449678, 179046428, 199999926, 407 178431995, 200548292, 177815881, 201094770, 177198094, 201639355, 176578640, 202182042, 175957523, 202722826, 408 175334750, 203261702, 174710327, 203798665, 174084259, 204333709, 173456553, 204866831, 172827214, 205398024, 409 172196248, 205927284, 171563662, 206454605, 170929461, 206979983, 170293651, 207503414, 169656238, 208024891, 410 169017228, 208544410, 168376627, 209061966, 167734442, 209577554, 167090677, 210091170, 166445340, 210602808, 411 165798437, 211112464, 165149973, 211620133, 164499954, 212125810, 163848387, 212629490, 163195278, 213131169, 412 162540633, 213630842, 161884457, 214128505, 161226759, 214624151, 160567542, 215117778, 159906814, 215609380, 413 159244582, 216098952, 158580850, 216586491, 157915626, 217071991, 157248915, 217555448, 156580724, 218036857, 414 155911060, 218516213, 155239928, 218993513, 154567334, 219468752, 153893286, 219941925, 153217790, 220413028, 415 152540851, 220882056, 151862477, 221349006, 151182673, 221813871, 150501446, 222276649, 149818802, 222737335, 416 149134749, 223195925, 148449292, 223652413, 147762437, 224106797, 147074192, 224559071, 146384562, 225009231, 417 145693554, 225457274, 145001176, 225903194, 144307432, 226346988, 143612330, 226788652, 142915876, 227228181, 418 142218078, 227665572, 141518940, 228100819, 140818471, 228533919, 140116676, 228964869, 139413562, 229393663, 419 138709136, 229820298, 138003405, 230244771, 137296374, 230667075, 136588051, 231087209, 135878443, 231505168, 420 135167556, 231920948, 134455396, 232334544, 133741971, 232745954, 133027287, 233155174, 132311351, 233562198, 421 131594170, 233967025, 130875750, 234369649, 130156098, 234770067, 129435221, 235168275, 128713125, 235564270, 422 127989819, 235958048, 127265307, 236349605, 126539598, 236738937, 125812698, 237126041, 125084613, 237510913, 423 124355351, 237893549, 123624919, 238273946, 122893323, 238652101, 122160570, 239028009, 121426668, 239401668, 424 120691622, 239773073, 119955441, 240142221, 119218130, 240509109, 118479698, 240873733, 117740150, 241236090, 425 116999494, 241596176, 116257737, 241953989, 115514885, 242309524, 114770946, 242662778, 114025927, 243013748, 426 113279835, 243362431, 112532677, 243708824, 111784459, 244052922, 111035189, 244394723, 110284874, 244734224, 427 109533521, 245071422, 108781137, 245406313, 108027729, 245738894, 107273304, 246069161, 106517870, 246397113, 428 105761433, 246722746, 105004000, 247046056, 104245580, 247367041, 103486178, 247685698, 102725802, 248002024, 429 101964459, 248316015, 101202156, 248627669, 100438901, 248936982, 99674700, 249243953, 98909562, 249548578, 430 98143492, 249850854, 97376498, 250150778, 96608588, 250448347, 95839769, 250743560, 95070047, 251036412, 431 94299431, 251326901, 93527927, 251615025, 92755543, 251900781, 91982286, 252184165, 91208163, 252465176, 432 90433181, 252743810, 89657349, 253020066, 88880672, 253293940, 88103159, 253565430, 87324817, 253834534, 433 86545652, 254101248, 85765673, 254365570, 84984887, 254627499, 84203301, 254887030, 83420922, 255144163, 434 82637759, 255398894, 81853817, 255651221, 81069105, 255901142, 80283630, 256148654, 79497399, 256393755, 435 78710420, 256636443, 77922700, 256876715, 77134246, 257114570, 76345067, 257350004, 75555169, 257583017, 436 74764560, 257813604, 73973247, 258041766, 73181238, 258267498, 72388540, 258490799, 71595161, 258711668, 437 70801108, 258930101, 70006388, 259146097, 69211009, 259359654, 68414980, 259570770, 67618306, 259779443, 438 66820995, 259985670, 66023056, 260189450, 65224495, 260390782, 64425321, 260589662, 63625540, 260786090, 439 62825160, 260980063, 62024189, 261171580, 61222634, 261360638, 60420502, 261547237, 59617802, 261731373, 440 58814541, 261913046, 58010727, 262092254, 57206366, 262268995, 56401467, 262443267, 55596037, 262615070, 441 54790083, 262784400, 53983614, 262951257, 53176637, 263115639, 52369160, 263277544, 51561189, 263436971, 442 50752733, 263593919, 49943799, 263748386, 49134396, 263900370, 48324530, 264049870, 47514209, 264196885, 443 46703440, 264341413, 45892233, 264483453, 45080593, 264623004, 44268529, 264760064, 43456048, 264894632, 444 42643158, 265026706, 41829867, 265156286, 41016182, 265283371, 40202111, 265407958, 39387662, 265530048, 445 38572842, 265649638, 37757659, 265766727, 36942120, 265881315, 36126234, 265993401, 35310008, 266102983, 446 34493449, 266210060, 33676566, 266314632, 32859365, 266416696, 32041856, 266516254, 31224045, 266613302, 447 30405940, 266707842, 29587548, 266799871, 28768879, 266889388, 27949938, 266976394, 27130735, 267060887, 448 26311276, 267142866, 25491569, 267222331, 24671623, 267299280, 23851444, 267373713, 23031041, 267445630, 449 22210421, 267515030, 21389592, 267581912, 20568561, 267646275, 19747337, 267708119, 18925927, 267767443, 450 18104339, 267824246, 17282581, 267878529, 16460660, 267930291, 15638584, 267979530, 14816361, 268026248, 451 13993998, 268070442, 13171504, 268112114, 12348885, 268151262, 11526151, 268187885, 10703307, 268221985, 452 9880364, 268253560, 9057327, 268282610, 8234205, 268309135, 7411005, 268333134, 6587736, 268354608, 453 5764405, 268373556, 4941019, 268389978, 4117587, 268403874, 3294116, 268415243, 2470614, 268424086, 454 1647089, 268430403, 823548, 268434193}; 455 456 /* 457 * Using python [int(2147483648.0 * np.cos(np.pi * (2.0*n+1.0) / (4.0*N))) for n in xrange(N)] 458 * Q31. 459 */ 460 int32_t dct16_cosFactor[16] = {2144896909, 2124240380, 2083126254, 2021950483, 1941302224, 1841958164, 461 1724875039, 1591180425, 1442161874, 1279254515, 1104027236, 918167571, 462 723465451, 521795963, 315101294, 105372028}; 463 464 int32_t dct32_cosFactor[32] = {2146836866, 2141664948, 2131333571, 2115867625, 2095304369, 2069693341, 2039096241, 465 2003586779, 1963250501, 1918184580, 1868497585, 1814309216, 1755750017, 1692961062, 466 1626093615, 1555308767, 1480777044, 1402677999, 1321199780, 1236538675, 1148898640, 467 1058490807, 965532978, 870249095, 772868705, 673626408, 572761285, 470516330, 468 367137860, 262874923, 157978697, 52701886}; 469 470 int32_t dct64_cosFactor[64] = { 471 2147321946, 2146028479, 2143442326, 2139565042, 2134398965, 2127947206, 2120213651, 2111202958, 472 2100920556, 2089372637, 2076566159, 2062508835, 2047209133, 2030676268, 2012920200, 1993951624, 473 1973781967, 1952423376, 1929888719, 1906191570, 1881346201, 1855367580, 1828271355, 1800073848, 474 1770792044, 1740443580, 1709046739, 1676620431, 1643184190, 1608758157, 1573363068, 1537020243, 475 1499751575, 1461579513, 1422527050, 1382617710, 1341875533, 1300325060, 1257991319, 1214899812, 476 1171076495, 1126547765, 1081340445, 1035481765, 988999351, 941921200, 894275670, 846091463, 477 797397602, 748223418, 698598532, 648552837, 598116478, 547319836, 496193509, 444768293, 478 393075166, 341145265, 289009870, 236700387, 184248325, 131685278, 79042909, 26352927}; 479 480 int32_t dct128_cosFactor[128] = { 481 2147443222, 2147119825, 2146473079, 2145503083, 2144209982, 2142593970, 2140655292, 2138394239, 2135811152, 482 2132906419, 2129680479, 2126133817, 2122266966, 2118080510, 2113575079, 2108751351, 2103610053, 2098151959, 483 2092377892, 2086288719, 2079885360, 2073168777, 2066139983, 2058800035, 2051150040, 2043191149, 2034924561, 484 2026351521, 2017473320, 2008291295, 1998806829, 1989021349, 1978936330, 1968553291, 1957873795, 1946899450, 485 1935631910, 1924072870, 1912224072, 1900087300, 1887664382, 1874957189, 1861967634, 1848697673, 1835149306, 486 1821324572, 1807225552, 1792854372, 1778213194, 1763304224, 1748129706, 1732691927, 1716993211, 1701035922, 487 1684822463, 1668355276, 1651636841, 1634669675, 1617456334, 1599999411, 1582301533, 1564365366, 1546193612, 488 1527789007, 1509154322, 1490292364, 1471205974, 1451898025, 1432371426, 1412629117, 1392674071, 1372509294, 489 1352137822, 1331562723, 1310787095, 1289814068, 1268646799, 1247288477, 1225742318, 1204011566, 1182099495, 490 1160009404, 1137744620, 1115308496, 1092704410, 1069935767, 1047005996, 1023918549, 1000676905, 977284561, 491 953745043, 930061894, 906238680, 882278991, 858186434, 833964637, 809617248, 785147934, 760560379, 492 735858287, 711045377, 686125386, 661102068, 635979189, 610760535, 585449902, 560051103, 534567962, 493 509004318, 483364019, 457650927, 431868914, 406021864, 380113668, 354148229, 328129456, 302061268, 494 275947591, 249792357, 223599506, 197372981, 171116732, 144834714, 118530884, 92209204, 65873638, 495 39528151, 13176711}; 496 497 int32_t dct256_cosFactor[256] = { 498 2147473541, 2147392690, 2147230991, 2146988449, 2146665075, 2146260880, 2145775880, 2145210092, 2144563538, 499 2143836243, 2143028234, 2142139540, 2141170197, 2140120239, 2138989707, 2137778644, 2136487094, 2135115107, 500 2133662734, 2132130029, 2130517052, 2128823861, 2127050522, 2125197100, 2123263665, 2121250291, 2119157054, 501 2116984031, 2114731305, 2112398960, 2109987085, 2107495770, 2104925109, 2102275198, 2099546138, 2096738032, 502 2093850984, 2090885105, 2087840504, 2084717298, 2081515603, 2078235540, 2074877233, 2071440808, 2067926394, 503 2064334124, 2060664133, 2056916559, 2053091544, 2049189230, 2045209766, 2041153301, 2037019988, 2032809982, 504 2028523441, 2024160528, 2019721407, 2015206244, 2010615210, 2005948477, 2001206222, 1996388622, 1991495859, 505 1986528118, 1981485585, 1976368450, 1971176906, 1965911148, 1960571375, 1955157787, 1949670589, 1944109987, 506 1938476190, 1932769411, 1926989864, 1921137766, 1915213340, 1909216806, 1903148391, 1897008325, 1890796836, 507 1884514161, 1878160534, 1871736196, 1865241388, 1858676354, 1852041343, 1845336603, 1838562387, 1831718951, 508 1824806551, 1817825449, 1810775906, 1803658189, 1796472564, 1789219304, 1781898681, 1774510970, 1767056450, 509 1759535401, 1751948107, 1744294852, 1736575926, 1728791619, 1720942224, 1713028037, 1705049354, 1697006478, 510 1688899711, 1680729357, 1672495725, 1664199124, 1655839867, 1647418269, 1638934646, 1630389318, 1621782607, 511 1613114837, 1604386334, 1595597427, 1586748446, 1577839726, 1568871600, 1559844408, 1550758488, 1541614183, 512 1532411837, 1523151796, 1513834410, 1504460029, 1495029005, 1485541695, 1475998455, 1466399644, 1456745625, 513 1447036759, 1437273414, 1427455956, 1417584755, 1407660183, 1397682613, 1387652421, 1377569985, 1367435684, 514 1357249900, 1347013016, 1336725418, 1326387494, 1315999631, 1305562222, 1295075659, 1284540337, 1273956653, 515 1263325005, 1252645793, 1241919421, 1231146290, 1220326808, 1209461381, 1198550419, 1187594332, 1176593532, 516 1165548435, 1154459455, 1143327011, 1132151521, 1120933406, 1109673088, 1098370992, 1087027543, 1075643168, 517 1064218296, 1052753356, 1041248781, 1029705003, 1018122458, 1006501581, 994842809, 983146583, 971413341, 518 959643527, 947837582, 935995951, 924119081, 912207419, 900261412, 888281511, 876268167, 864221832, 519 852142959, 840032003, 827889421, 815715669, 803511206, 791276492, 779011986, 766718151, 754395449, 520 742044345, 729665303, 717258789, 704825272, 692365218, 679879097, 667367378, 654830534, 642269036, 521 629683357, 617073970, 604441351, 591785975, 579108319, 566408860, 553688075, 540946445, 528184448, 522 515402566, 502601279, 489781069, 476942419, 464085812, 451211733, 438320667, 425413097, 412489511, 523 399550395, 386596237, 373627523, 360644742, 347648383, 334638935, 321616889, 308582733, 295536960, 524 282480060, 269412525, 256334846, 243247517, 230151030, 217045877, 203932553, 190811551, 177683365, 525 164548489, 151407418, 138260647, 125108670, 111951983, 98791081, 85626459, 72458614, 59288041, 526 46115236, 32940694, 19764912, 6588386}; 527 528 int32_t dct512_cosFactor[512] = { 529 2147481121, 2147460908, 2147420482, 2147359844, 2147278995, 2147177934, 2147056663, 2146915183, 2146753496, 530 2146571603, 2146369505, 2146147205, 2145904704, 2145642006, 2145359112, 2145056024, 2144732747, 2144389283, 531 2144025635, 2143641806, 2143237801, 2142813623, 2142369276, 2141904764, 2141420092, 2140915263, 2140390284, 532 2139845158, 2139279892, 2138694490, 2138088957, 2137463300, 2136817525, 2136151636, 2135465642, 2134759548, 533 2134033360, 2133287087, 2132520733, 2131734308, 2130927818, 2130101272, 2129254675, 2128388038, 2127501367, 534 2126594671, 2125667959, 2124721240, 2123754521, 2122767813, 2121761125, 2120734466, 2119687846, 2118621275, 535 2117534762, 2116428318, 2115301954, 2114155679, 2112989506, 2111803444, 2110597505, 2109371700, 2108126041, 536 2106860539, 2105575207, 2104270057, 2102945100, 2101600350, 2100235818, 2098851518, 2097447463, 2096023667, 537 2094580141, 2093116901, 2091633959, 2090131330, 2088609028, 2087067067, 2085505462, 2083924228, 2082323378, 538 2080702929, 2079062896, 2077403294, 2075724138, 2074025445, 2072307230, 2070569510, 2068812302, 2067035620, 539 2065239483, 2063423907, 2061588910, 2059734507, 2057860718, 2055967560, 2054055050, 2052123206, 2050172047, 540 2048201591, 2046211857, 2044202863, 2042174628, 2040127171, 2038060512, 2035974670, 2033869664, 2031745515, 541 2029602243, 2027439867, 2025258408, 2023057886, 2020838323, 2018599739, 2016342154, 2014065592, 2011770072, 542 2009455617, 2007122248, 2004769987, 2002398856, 2000008878, 1997600075, 1995172471, 1992726086, 1990260946, 543 1987777072, 1985274489, 1982753219, 1980213287, 1977654717, 1975077532, 1972481757, 1969867416, 1967234534, 544 1964583136, 1961913246, 1959224890, 1956518093, 1953792881, 1951049278, 1948287312, 1945507007, 1942708391, 545 1939891490, 1937056329, 1934202936, 1931331337, 1928441560, 1925533632, 1922607580, 1919663432, 1916701215, 546 1913720957, 1910722687, 1907706432, 1904672221, 1901620083, 1898550046, 1895462139, 1892356391, 1889232832, 547 1886091490, 1882932396, 1879755579, 1876561069, 1873348896, 1870119091, 1866871683, 1863606703, 1860324183, 548 1857024152, 1853706643, 1850371685, 1847019311, 1843649553, 1840262441, 1836858008, 1833436286, 1829997306, 549 1826541102, 1823067706, 1819577151, 1816069469, 1812544693, 1809002858, 1805443995, 1801868138, 1798275322, 550 1794665580, 1791038945, 1787395453, 1783735137, 1780058032, 1776364172, 1772653592, 1768926328, 1765182414, 551 1761421885, 1757644777, 1753851125, 1750040965, 1746214334, 1742371266, 1738511799, 1734635968, 1730743810, 552 1726835361, 1722910659, 1718969740, 1715012642, 1711039401, 1707050055, 1703044642, 1699023199, 1694985764, 553 1690932376, 1686863071, 1682777890, 1678676869, 1674560048, 1670427466, 1666279160, 1662115171, 1657935538, 554 1653740300, 1649529495, 1645303165, 1641061349, 1636804086, 1632531417, 1628243383, 1623940022, 1619621376, 555 1615287486, 1610938392, 1606574136, 1602194757, 1597800299, 1593390801, 1588966305, 1584526854, 1580072488, 556 1575603250, 1571119182, 1566620326, 1562106725, 1557578420, 1553035455, 1548477872, 1543905714, 1539319024, 557 1534717846, 1530102222, 1525472196, 1520827812, 1516169114, 1511496144, 1506808948, 1502107569, 1497392052, 558 1492662441, 1487918780, 1483161115, 1478389489, 1473603948, 1468804537, 1463991301, 1459164286, 1454323536, 559 1449469098, 1444601016, 1439719338, 1434824108, 1429915373, 1424993180, 1420057573, 1415108601, 1410146309, 560 1405170744, 1400181953, 1395179984, 1390164882, 1385136695, 1380095471, 1375041257, 1369974101, 1364894050, 561 1359801152, 1354695455, 1349577007, 1344445856, 1339302051, 1334145640, 1328976672, 1323795194, 1318601257, 562 1313394908, 1308176197, 1302945174, 1297701886, 1292446384, 1287178717, 1281898934, 1276607086, 1271303222, 563 1265987391, 1260659645, 1255320033, 1249968606, 1244605413, 1239230506, 1233843934, 1228445749, 1223036002, 564 1217614743, 1212182023, 1206737894, 1201282406, 1195815612, 1190337562, 1184848308, 1179347901, 1173836395, 565 1168313840, 1162780288, 1157235791, 1151680403, 1146114174, 1140537157, 1134949406, 1129350972, 1123741907, 566 1118122266, 1112492101, 1106851464, 1101200410, 1095538990, 1089867259, 1084185270, 1078493075, 1072790730, 567 1067078287, 1061355800, 1055623324, 1049880911, 1044128617, 1038366495, 1032594599, 1026812985, 1021021705, 568 1015220815, 1009410370, 1003590423, 997761031, 991922247, 986074127, 980216725, 974350098, 968474299, 569 962589385, 956695410, 950792431, 944880502, 938959680, 933030020, 927091578, 921144410, 915188572, 570 909224119, 903251109, 897269597, 891279639, 885281293, 879274614, 873259658, 867236484, 861205146, 571 855165703, 849118210, 843062725, 836999305, 830928007, 824848887, 818762004, 812667415, 806565176, 572 800455346, 794337981, 788213140, 782080880, 775941259, 769794334, 763640163, 757478805, 751310317, 573 745134758, 738952185, 732762657, 726566232, 720362968, 714152923, 707936157, 701712728, 695482693, 574 689246113, 683003045, 676753548, 670497682, 664235504, 657967075, 651692452, 645411696, 639124865, 575 632832018, 626533214, 620228513, 613917975, 607601658, 601279622, 594951927, 588618631, 582279796, 576 575935480, 569585742, 563230644, 556870244, 550504603, 544133781, 537757836, 531376830, 524990823, 577 518599874, 512204044, 505803393, 499397981, 492987869, 486573116, 480153784, 473729932, 467301621, 578 460868912, 454431865, 447990540, 441544999, 435095302, 428641510, 422183683, 415721883, 409256169, 579 402786604, 396313247, 389836160, 383355404, 376871039, 370383127, 363891729, 357396906, 350898719, 580 344397229, 337892498, 331384586, 324873555, 318359466, 311842381, 305322360, 298799466, 292273759, 581 285745301, 279214154, 272680379, 266144037, 259605190, 253063900, 246520227, 239974235, 233425983, 582 226875535, 220322951, 213768293, 207211623, 200653003, 194092494, 187530158, 180966058, 174400254, 583 167832808, 161263783, 154693239, 148121240, 141547847, 134973121, 128397125, 121819920, 115241569, 584 108662133, 102081674, 95500255, 88917936, 82334781, 75750851, 69166207, 62580913, 55995030, 585 49408619, 42821744, 36234465, 29646846, 23058947, 16470831, 9882561, 3294197}; 586