sbr_dct.c
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:82k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /*
  2. ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
  3. ** Copyright (C) 2003-2005 M. Bakker, Ahead Software AG, http://www.nero.com
  4. **  
  5. ** This program is free software; you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation; either version 2 of the License, or
  8. ** (at your option) any later version.
  9. ** 
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. ** GNU General Public License for more details.
  14. ** 
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program; if not, write to the Free Software 
  17. ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  18. **
  19. ** Any non-GPL usage of this software or parts of this software is strictly
  20. ** forbidden.
  21. **
  22. ** Software using this code must display the following message visibly in the
  23. ** software:
  24. ** "FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Ahead Software, www.nero.com"
  25. ** in, for example, the about-box or help/startup screen.
  26. **
  27. ** Commercial non-GPL licensing of this software is possible.
  28. ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
  29. **
  30. ** $Id: sbr_dct.c,v 1.2 2005/11/01 21:41:43 gabest Exp $
  31. **/
  32. #include "common.h"
  33. #ifdef SBR_DEC
  34. #ifdef _MSC_VER
  35. #pragma warning(disable:4305)
  36. #pragma warning(disable:4244)
  37. #endif
  38. #include "sbr_dct.h"
  39. void DCT4_32(real_t *y, real_t *x)
  40. {
  41.     real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10;
  42.     real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20;
  43.     real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30;
  44.     real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40;
  45.     real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50;
  46.     real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60;
  47.     real_t f61, f62, f63, f64, f65, f66, f67, f68, f69, f70;
  48.     real_t f71, f72, f73, f74, f75, f76, f77, f78, f79, f80;
  49.     real_t f81, f82, f83, f84, f85, f86, f87, f88, f89, f90;
  50.     real_t f91, f92, f93, f94, f95, f96, f97, f98, f99, f100;
  51.     real_t f101, f102, f103, f104, f105, f106, f107, f108, f109, f110;
  52.     real_t f111, f112, f113, f114, f115, f116, f117, f118, f119, f120;
  53.     real_t f121, f122, f123, f124, f125, f126, f127, f128, f129, f130;
  54.     real_t f131, f132, f133, f134, f135, f136, f137, f138, f139, f140;
  55.     real_t f141, f142, f143, f144, f145, f146, f147, f148, f149, f150;
  56.     real_t f151, f152, f153, f154, f155, f156, f157, f158, f159, f160;
  57.     real_t f161, f162, f163, f164, f165, f166, f167, f168, f169, f170;
  58.     real_t f171, f172, f173, f174, f175, f176, f177, f178, f179, f180;
  59.     real_t f181, f182, f183, f184, f185, f186, f187, f188, f189, f190;
  60.     real_t f191, f192, f193, f194, f195, f196, f197, f198, f199, f200;
  61.     real_t f201, f202, f203, f204, f205, f206, f207, f208, f209, f210;
  62.     real_t f211, f212, f213, f214, f215, f216, f217, f218, f219, f220;
  63.     real_t f221, f222, f223, f224, f225, f226, f227, f228, f229, f230;
  64.     real_t f231, f232, f233, f234, f235, f236, f237, f238, f239, f240;
  65.     real_t f241, f242, f243, f244, f245, f246, f247, f248, f249, f250;
  66.     real_t f251, f252, f253, f254, f255, f256, f257, f258, f259, f260;
  67.     real_t f261, f262, f263, f264, f265, f266, f267, f268, f269, f270;
  68.     real_t f271, f272, f273, f274, f275, f276, f277, f278, f279, f280;
  69.     real_t f281, f282, f283, f284, f285, f286, f287, f288, f289, f290;
  70.     real_t f291, f292, f293, f294, f295, f296, f297, f298, f299, f300;
  71.     real_t f301, f302, f303, f304, f305, f306, f307, f310, f311, f312;
  72.     real_t f313, f316, f317, f318, f319, f322, f323, f324, f325, f328;
  73.     real_t f329, f330, f331, f334, f335, f336, f337, f340, f341, f342;
  74.     real_t f343, f346, f347, f348, f349, f352, f353, f354, f355, f358;
  75.     real_t f359, f360, f361, f364, f365, f366, f367, f370, f371, f372;
  76.     real_t f373, f376, f377, f378, f379, f382, f383, f384, f385, f388;
  77.     real_t f389, f390, f391, f394, f395, f396, f397;
  78.     f0 = x[15] - x[16];
  79.     f1 = x[15] + x[16];
  80.     f2 = MUL_F(FRAC_CONST(0.7071067811865476), f1);
  81.     f3 = MUL_F(FRAC_CONST(0.7071067811865476), f0);
  82.     f4 = x[8] - x[23];
  83.     f5 = x[8] + x[23];
  84.     f6 = MUL_F(FRAC_CONST(0.7071067811865476), f5);
  85.     f7 = MUL_F(FRAC_CONST(0.7071067811865476), f4);
  86.     f8 = x[12] - x[19];
  87.     f9 = x[12] + x[19];
  88.     f10 = MUL_F(FRAC_CONST(0.7071067811865476), f9);
  89.     f11 = MUL_F(FRAC_CONST(0.7071067811865476), f8);
  90.     f12 = x[11] - x[20];
  91.     f13 = x[11] + x[20];
  92.     f14 = MUL_F(FRAC_CONST(0.7071067811865476), f13);
  93.     f15 = MUL_F(FRAC_CONST(0.7071067811865476), f12);
  94.     f16 = x[14] - x[17];
  95.     f17 = x[14] + x[17];
  96.     f18 = MUL_F(FRAC_CONST(0.7071067811865476), f17);
  97.     f19 = MUL_F(FRAC_CONST(0.7071067811865476), f16);
  98.     f20 = x[9] - x[22];
  99.     f21 = x[9] + x[22];
  100.     f22 = MUL_F(FRAC_CONST(0.7071067811865476), f21);
  101.     f23 = MUL_F(FRAC_CONST(0.7071067811865476), f20);
  102.     f24 = x[13] - x[18];
  103.     f25 = x[13] + x[18];
  104.     f26 = MUL_F(FRAC_CONST(0.7071067811865476), f25);
  105.     f27 = MUL_F(FRAC_CONST(0.7071067811865476), f24);
  106.     f28 = x[10] - x[21];
  107.     f29 = x[10] + x[21];
  108.     f30 = MUL_F(FRAC_CONST(0.7071067811865476), f29);
  109.     f31 = MUL_F(FRAC_CONST(0.7071067811865476), f28);
  110.     f32 = x[0] - f2;
  111.     f33 = x[0] + f2;
  112.     f34 = x[31] - f3;
  113.     f35 = x[31] + f3;
  114.     f36 = x[7] - f6;
  115.     f37 = x[7] + f6;
  116.     f38 = x[24] - f7;
  117.     f39 = x[24] + f7;
  118.     f40 = x[3] - f10;
  119.     f41 = x[3] + f10;
  120.     f42 = x[28] - f11;
  121.     f43 = x[28] + f11;
  122.     f44 = x[4] - f14;
  123.     f45 = x[4] + f14;
  124.     f46 = x[27] - f15;
  125.     f47 = x[27] + f15;
  126.     f48 = x[1] - f18;
  127.     f49 = x[1] + f18;
  128.     f50 = x[30] - f19;
  129.     f51 = x[30] + f19;
  130.     f52 = x[6] - f22;
  131.     f53 = x[6] + f22;
  132.     f54 = x[25] - f23;
  133.     f55 = x[25] + f23;
  134.     f56 = x[2] - f26;
  135.     f57 = x[2] + f26;
  136.     f58 = x[29] - f27;
  137.     f59 = x[29] + f27;
  138.     f60 = x[5] - f30;
  139.     f61 = x[5] + f30;
  140.     f62 = x[26] - f31;
  141.     f63 = x[26] + f31;
  142.     f64 = f39 + f37;
  143.     f65 = MUL_F(FRAC_CONST(-0.5411961001461969), f39);
  144.     f66 = MUL_F(FRAC_CONST(0.9238795325112867), f64);
  145.     f67 = MUL_C(COEF_CONST(1.3065629648763766), f37);
  146.     f68 = f65 + f66;
  147.     f69 = f67 - f66;
  148.     f70 = f38 + f36;
  149.     f71 = MUL_C(COEF_CONST(1.3065629648763770), f38);
  150.     f72 = MUL_F(FRAC_CONST(-0.3826834323650904), f70);
  151.     f73 = MUL_F(FRAC_CONST(0.5411961001461961), f36);
  152.     f74 = f71 + f72;
  153.     f75 = f73 - f72;
  154.     f76 = f47 + f45;
  155.     f77 = MUL_F(FRAC_CONST(-0.5411961001461969), f47);
  156.     f78 = MUL_F(FRAC_CONST(0.9238795325112867), f76);
  157.     f79 = MUL_C(COEF_CONST(1.3065629648763766), f45);
  158.     f80 = f77 + f78;
  159.     f81 = f79 - f78;
  160.     f82 = f46 + f44;
  161.     f83 = MUL_C(COEF_CONST(1.3065629648763770), f46);
  162.     f84 = MUL_F(FRAC_CONST(-0.3826834323650904), f82);
  163.     f85 = MUL_F(FRAC_CONST(0.5411961001461961), f44);
  164.     f86 = f83 + f84;
  165.     f87 = f85 - f84;
  166.     f88 = f55 + f53;
  167.     f89 = MUL_F(FRAC_CONST(-0.5411961001461969), f55);
  168.     f90 = MUL_F(FRAC_CONST(0.9238795325112867), f88);
  169.     f91 = MUL_C(COEF_CONST(1.3065629648763766), f53);
  170.     f92 = f89 + f90;
  171.     f93 = f91 - f90;
  172.     f94 = f54 + f52;
  173.     f95 = MUL_C(COEF_CONST(1.3065629648763770), f54);
  174.     f96 = MUL_F(FRAC_CONST(-0.3826834323650904), f94);
  175.     f97 = MUL_F(FRAC_CONST(0.5411961001461961), f52);
  176.     f98 = f95 + f96;
  177.     f99 = f97 - f96;
  178.     f100 = f63 + f61;
  179.     f101 = MUL_F(FRAC_CONST(-0.5411961001461969), f63);
  180.     f102 = MUL_F(FRAC_CONST(0.9238795325112867), f100);
  181.     f103 = MUL_C(COEF_CONST(1.3065629648763766), f61);
  182.     f104 = f101 + f102;
  183.     f105 = f103 - f102;
  184.     f106 = f62 + f60;
  185.     f107 = MUL_C(COEF_CONST(1.3065629648763770), f62);
  186.     f108 = MUL_F(FRAC_CONST(-0.3826834323650904), f106);
  187.     f109 = MUL_F(FRAC_CONST(0.5411961001461961), f60);
  188.     f110 = f107 + f108;
  189.     f111 = f109 - f108;
  190.     f112 = f33 - f68;
  191.     f113 = f33 + f68;
  192.     f114 = f35 - f69;
  193.     f115 = f35 + f69;
  194.     f116 = f32 - f74;
  195.     f117 = f32 + f74;
  196.     f118 = f34 - f75;
  197.     f119 = f34 + f75;
  198.     f120 = f41 - f80;
  199.     f121 = f41 + f80;
  200.     f122 = f43 - f81;
  201.     f123 = f43 + f81;
  202.     f124 = f40 - f86;
  203.     f125 = f40 + f86;
  204.     f126 = f42 - f87;
  205.     f127 = f42 + f87;
  206.     f128 = f49 - f92;
  207.     f129 = f49 + f92;
  208.     f130 = f51 - f93;
  209.     f131 = f51 + f93;
  210.     f132 = f48 - f98;
  211.     f133 = f48 + f98;
  212.     f134 = f50 - f99;
  213.     f135 = f50 + f99;
  214.     f136 = f57 - f104;
  215.     f137 = f57 + f104;
  216.     f138 = f59 - f105;
  217.     f139 = f59 + f105;
  218.     f140 = f56 - f110;
  219.     f141 = f56 + f110;
  220.     f142 = f58 - f111;
  221.     f143 = f58 + f111;
  222.     f144 = f123 + f121;
  223.     f145 = MUL_F(FRAC_CONST(-0.7856949583871021), f123);
  224.     f146 = MUL_F(FRAC_CONST(0.9807852804032304), f144);
  225.     f147 = MUL_C(COEF_CONST(1.1758756024193588), f121);
  226.     f148 = f145 + f146;
  227.     f149 = f147 - f146;
  228.     f150 = f127 + f125;
  229.     f151 = MUL_F(FRAC_CONST(0.2758993792829431), f127);
  230.     f152 = MUL_F(FRAC_CONST(0.5555702330196022), f150);
  231.     f153 = MUL_C(COEF_CONST(1.3870398453221475), f125);
  232.     f154 = f151 + f152;
  233.     f155 = f153 - f152;
  234.     f156 = f122 + f120;
  235.     f157 = MUL_C(COEF_CONST(1.1758756024193591), f122);
  236.     f158 = MUL_F(FRAC_CONST(-0.1950903220161287), f156);
  237.     f159 = MUL_F(FRAC_CONST(0.7856949583871016), f120);
  238.     f160 = f157 + f158;
  239.     f161 = f159 - f158;
  240.     f162 = f126 + f124;
  241.     f163 = MUL_C(COEF_CONST(1.3870398453221473), f126);
  242.     f164 = MUL_F(FRAC_CONST(-0.8314696123025455), f162);
  243.     f165 = MUL_F(FRAC_CONST(-0.2758993792829436), f124);
  244.     f166 = f163 + f164;
  245.     f167 = f165 - f164;
  246.     f168 = f139 + f137;
  247.     f169 = MUL_F(FRAC_CONST(-0.7856949583871021), f139);
  248.     f170 = MUL_F(FRAC_CONST(0.9807852804032304), f168);
  249.     f171 = MUL_C(COEF_CONST(1.1758756024193588), f137);
  250.     f172 = f169 + f170;
  251.     f173 = f171 - f170;
  252.     f174 = f143 + f141;
  253.     f175 = MUL_F(FRAC_CONST(0.2758993792829431), f143);
  254.     f176 = MUL_F(FRAC_CONST(0.5555702330196022), f174);
  255.     f177 = MUL_C(COEF_CONST(1.3870398453221475), f141);
  256.     f178 = f175 + f176;
  257.     f179 = f177 - f176;
  258.     f180 = f138 + f136;
  259.     f181 = MUL_C(COEF_CONST(1.1758756024193591), f138);
  260.     f182 = MUL_F(FRAC_CONST(-0.1950903220161287), f180);
  261.     f183 = MUL_F(FRAC_CONST(0.7856949583871016), f136);
  262.     f184 = f181 + f182;
  263.     f185 = f183 - f182;
  264.     f186 = f142 + f140;
  265.     f187 = MUL_C(COEF_CONST(1.3870398453221473), f142);
  266.     f188 = MUL_F(FRAC_CONST(-0.8314696123025455), f186);
  267.     f189 = MUL_F(FRAC_CONST(-0.2758993792829436), f140);
  268.     f190 = f187 + f188;
  269.     f191 = f189 - f188;
  270.     f192 = f113 - f148;
  271.     f193 = f113 + f148;
  272.     f194 = f115 - f149;
  273.     f195 = f115 + f149;
  274.     f196 = f117 - f154;
  275.     f197 = f117 + f154;
  276.     f198 = f119 - f155;
  277.     f199 = f119 + f155;
  278.     f200 = f112 - f160;
  279.     f201 = f112 + f160;
  280.     f202 = f114 - f161;
  281.     f203 = f114 + f161;
  282.     f204 = f116 - f166;
  283.     f205 = f116 + f166;
  284.     f206 = f118 - f167;
  285.     f207 = f118 + f167;
  286.     f208 = f129 - f172;
  287.     f209 = f129 + f172;
  288.     f210 = f131 - f173;
  289.     f211 = f131 + f173;
  290.     f212 = f133 - f178;
  291.     f213 = f133 + f178;
  292.     f214 = f135 - f179;
  293.     f215 = f135 + f179;
  294.     f216 = f128 - f184;
  295.     f217 = f128 + f184;
  296.     f218 = f130 - f185;
  297.     f219 = f130 + f185;
  298.     f220 = f132 - f190;
  299.     f221 = f132 + f190;
  300.     f222 = f134 - f191;
  301.     f223 = f134 + f191;
  302.     f224 = f211 + f209;
  303.     f225 = MUL_F(FRAC_CONST(-0.8971675863426361), f211);
  304.     f226 = MUL_F(FRAC_CONST(0.9951847266721968), f224);
  305.     f227 = MUL_C(COEF_CONST(1.0932018670017576), f209);
  306.     f228 = f225 + f226;
  307.     f229 = f227 - f226;
  308.     f230 = f215 + f213;
  309.     f231 = MUL_F(FRAC_CONST(-0.4105245275223571), f215);
  310.     f232 = MUL_F(FRAC_CONST(0.8819212643483549), f230);
  311.     f233 = MUL_C(COEF_CONST(1.3533180011743529), f213);
  312.     f234 = f231 + f232;
  313.     f235 = f233 - f232;
  314.     f236 = f219 + f217;
  315.     f237 = MUL_F(FRAC_CONST(0.1386171691990915), f219);
  316.     f238 = MUL_F(FRAC_CONST(0.6343932841636455), f236);
  317.     f239 = MUL_C(COEF_CONST(1.4074037375263826), f217);
  318.     f240 = f237 + f238;
  319.     f241 = f239 - f238;
  320.     f242 = f223 + f221;
  321.     f243 = MUL_F(FRAC_CONST(0.6666556584777466), f223);
  322.     f244 = MUL_F(FRAC_CONST(0.2902846772544623), f242);
  323.     f245 = MUL_C(COEF_CONST(1.2472250129866711), f221);
  324.     f246 = f243 + f244;
  325.     f247 = f245 - f244;
  326.     f248 = f210 + f208;
  327.     f249 = MUL_C(COEF_CONST(1.0932018670017574), f210);
  328.     f250 = MUL_F(FRAC_CONST(-0.0980171403295605), f248);
  329.     f251 = MUL_F(FRAC_CONST(0.8971675863426364), f208);
  330.     f252 = f249 + f250;
  331.     f253 = f251 - f250;
  332.     f254 = f214 + f212;
  333.     f255 = MUL_C(COEF_CONST(1.3533180011743529), f214);
  334.     f256 = MUL_F(FRAC_CONST(-0.4713967368259979), f254);
  335.     f257 = MUL_F(FRAC_CONST(0.4105245275223569), f212);
  336.     f258 = f255 + f256;
  337.     f259 = f257 - f256;
  338.     f260 = f218 + f216;
  339.     f261 = MUL_C(COEF_CONST(1.4074037375263826), f218);
  340.     f262 = MUL_F(FRAC_CONST(-0.7730104533627369), f260);
  341.     f263 = MUL_F(FRAC_CONST(-0.1386171691990913), f216);
  342.     f264 = f261 + f262;
  343.     f265 = f263 - f262;
  344.     f266 = f222 + f220;
  345.     f267 = MUL_C(COEF_CONST(1.2472250129866711), f222);
  346.     f268 = MUL_F(FRAC_CONST(-0.9569403357322089), f266);
  347.     f269 = MUL_F(FRAC_CONST(-0.6666556584777469), f220);
  348.     f270 = f267 + f268;
  349.     f271 = f269 - f268;
  350.     f272 = f193 - f228;
  351.     f273 = f193 + f228;
  352.     f274 = f195 - f229;
  353.     f275 = f195 + f229;
  354.     f276 = f197 - f234;
  355.     f277 = f197 + f234;
  356.     f278 = f199 - f235;
  357.     f279 = f199 + f235;
  358.     f280 = f201 - f240;
  359.     f281 = f201 + f240;
  360.     f282 = f203 - f241;
  361.     f283 = f203 + f241;
  362.     f284 = f205 - f246;
  363.     f285 = f205 + f246;
  364.     f286 = f207 - f247;
  365.     f287 = f207 + f247;
  366.     f288 = f192 - f252;
  367.     f289 = f192 + f252;
  368.     f290 = f194 - f253;
  369.     f291 = f194 + f253;
  370.     f292 = f196 - f258;
  371.     f293 = f196 + f258;
  372.     f294 = f198 - f259;
  373.     f295 = f198 + f259;
  374.     f296 = f200 - f264;
  375.     f297 = f200 + f264;
  376.     f298 = f202 - f265;
  377.     f299 = f202 + f265;
  378.     f300 = f204 - f270;
  379.     f301 = f204 + f270;
  380.     f302 = f206 - f271;
  381.     f303 = f206 + f271;
  382.     f304 = f275 + f273;
  383.     f305 = MUL_F(FRAC_CONST(-0.9751575901732920), f275);
  384.     f306 = MUL_F(FRAC_CONST(0.9996988186962043), f304);
  385.     f307 = MUL_C(COEF_CONST(1.0242400472191164), f273);
  386.     y[0] = f305 + f306;
  387.     y[31] = f307 - f306;
  388.     f310 = f279 + f277;
  389.     f311 = MUL_F(FRAC_CONST(-0.8700688593994936), f279);
  390.     f312 = MUL_F(FRAC_CONST(0.9924795345987100), f310);
  391.     f313 = MUL_C(COEF_CONST(1.1148902097979263), f277);
  392.     y[2] = f311 + f312;
  393.     y[29] = f313 - f312;
  394.     f316 = f283 + f281;
  395.     f317 = MUL_F(FRAC_CONST(-0.7566008898816587), f283);
  396.     f318 = MUL_F(FRAC_CONST(0.9757021300385286), f316);
  397.     f319 = MUL_C(COEF_CONST(1.1948033701953984), f281);
  398.     y[4] = f317 + f318;
  399.     y[27] = f319 - f318;
  400.     f322 = f287 + f285;
  401.     f323 = MUL_F(FRAC_CONST(-0.6358464401941451), f287);
  402.     f324 = MUL_F(FRAC_CONST(0.9495281805930367), f322);
  403.     f325 = MUL_C(COEF_CONST(1.2632099209919283), f285);
  404.     y[6] = f323 + f324;
  405.     y[25] = f325 - f324;
  406.     f328 = f291 + f289;
  407.     f329 = MUL_F(FRAC_CONST(-0.5089684416985408), f291);
  408.     f330 = MUL_F(FRAC_CONST(0.9142097557035307), f328);
  409.     f331 = MUL_C(COEF_CONST(1.3194510697085207), f289);
  410.     y[8] = f329 + f330;
  411.     y[23] = f331 - f330;
  412.     f334 = f295 + f293;
  413.     f335 = MUL_F(FRAC_CONST(-0.3771887988789273), f295);
  414.     f336 = MUL_F(FRAC_CONST(0.8700869911087114), f334);
  415.     f337 = MUL_C(COEF_CONST(1.3629851833384954), f293);
  416.     y[10] = f335 + f336;
  417.     y[21] = f337 - f336;
  418.     f340 = f299 + f297;
  419.     f341 = MUL_F(FRAC_CONST(-0.2417766217337384), f299);
  420.     f342 = MUL_F(FRAC_CONST(0.8175848131515837), f340);
  421.     f343 = MUL_C(COEF_CONST(1.3933930045694289), f297);
  422.     y[12] = f341 + f342;
  423.     y[19] = f343 - f342;
  424.     f346 = f303 + f301;
  425.     f347 = MUL_F(FRAC_CONST(-0.1040360035527077), f303);
  426.     f348 = MUL_F(FRAC_CONST(0.7572088465064845), f346);
  427.     f349 = MUL_C(COEF_CONST(1.4103816894602612), f301);
  428.     y[14] = f347 + f348;
  429.     y[17] = f349 - f348;
  430.     f352 = f274 + f272;
  431.     f353 = MUL_F(FRAC_CONST(0.0347065382144002), f274);
  432.     f354 = MUL_F(FRAC_CONST(0.6895405447370668), f352);
  433.     f355 = MUL_C(COEF_CONST(1.4137876276885337), f272);
  434.     y[16] = f353 + f354;
  435.     y[15] = f355 - f354;
  436.     f358 = f278 + f276;
  437.     f359 = MUL_F(FRAC_CONST(0.1731148370459795), f278);
  438.     f360 = MUL_F(FRAC_CONST(0.6152315905806268), f358);
  439.     f361 = MUL_C(COEF_CONST(1.4035780182072330), f276);
  440.     y[18] = f359 + f360;
  441.     y[13] = f361 - f360;
  442.     f364 = f282 + f280;
  443.     f365 = MUL_F(FRAC_CONST(0.3098559453626100), f282);
  444.     f366 = MUL_F(FRAC_CONST(0.5349976198870972), f364);
  445.     f367 = MUL_C(COEF_CONST(1.3798511851368043), f280);
  446.     y[20] = f365 + f366;
  447.     y[11] = f367 - f366;
  448.     f370 = f286 + f284;
  449.     f371 = MUL_F(FRAC_CONST(0.4436129715409088), f286);
  450.     f372 = MUL_F(FRAC_CONST(0.4496113296546065), f370);
  451.     f373 = MUL_C(COEF_CONST(1.3428356308501219), f284);
  452.     y[22] = f371 + f372;
  453.     y[9] = f373 - f372;
  454.     f376 = f290 + f288;
  455.     f377 = MUL_F(FRAC_CONST(0.5730977622997509), f290);
  456.     f378 = MUL_F(FRAC_CONST(0.3598950365349881), f376);
  457.     f379 = MUL_C(COEF_CONST(1.2928878353697271), f288);
  458.     y[24] = f377 + f378;
  459.     y[7] = f379 - f378;
  460.     f382 = f294 + f292;
  461.     f383 = MUL_F(FRAC_CONST(0.6970633083205415), f294);
  462.     f384 = MUL_F(FRAC_CONST(0.2667127574748984), f382);
  463.     f385 = MUL_C(COEF_CONST(1.2304888232703382), f292);
  464.     y[26] = f383 + f384;
  465.     y[5] = f385 - f384;
  466.     f388 = f298 + f296;
  467.     f389 = MUL_F(FRAC_CONST(0.8143157536286401), f298);
  468.     f390 = MUL_F(FRAC_CONST(0.1709618887603012), f388);
  469.     f391 = MUL_C(COEF_CONST(1.1562395311492424), f296);
  470.     y[28] = f389 + f390;
  471.     y[3] = f391 - f390;
  472.     f394 = f302 + f300;
  473.     f395 = MUL_F(FRAC_CONST(0.9237258930790228), f302);
  474.     f396 = MUL_F(FRAC_CONST(0.0735645635996674), f394);
  475.     f397 = MUL_C(COEF_CONST(1.0708550202783576), f300);
  476.     y[30] = f395 + f396;
  477.     y[1] = f397 - f396;
  478. }
  479. #ifdef SBR_LOW_POWER
  480. void DCT2_16_unscaled(real_t *y, real_t *x)
  481. {
  482.     real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10;
  483.     real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20;
  484.     real_t f21, f22, f23, f24, f25, f26, f27, f28, f31, f32;
  485.     real_t f33, f34, f37, f38, f39, f40, f41, f42, f43, f44;
  486.     real_t f45, f46, f47, f48, f49, f51, f53, f54, f57, f58;
  487.     real_t f59, f60, f61, f62, f63, f64, f65, f66, f67, f68;
  488.     real_t f69, f70, f71, f72, f73, f74, f75, f76, f77, f78;
  489.     real_t f79, f80, f81, f82, f83, f84, f85, f86, f87, f88;
  490.     real_t f89, f90, f91, f92, f95, f96, f97, f98, f101, f102;
  491.     real_t f103, f104, f107, f108, f109, f110;
  492.     f0 = x[0] - x[15];
  493.     f1 = x[0] + x[15];
  494.     f2 = x[1] - x[14];
  495.     f3 = x[1] + x[14];
  496.     f4 = x[2] - x[13];
  497.     f5 = x[2] + x[13];
  498.     f6 = x[3] - x[12];
  499.     f7 = x[3] + x[12];
  500.     f8 = x[4] - x[11];
  501.     f9 = x[4] + x[11];
  502.     f10 = x[5] - x[10];
  503.     f11 = x[5] + x[10];
  504.     f12 = x[6] - x[9];
  505.     f13 = x[6] + x[9];
  506.     f14 = x[7] - x[8];
  507.     f15 = x[7] + x[8];
  508.     f16 = f1 - f15;
  509.     f17 = f1 + f15;
  510.     f18 = f3 - f13;
  511.     f19 = f3 + f13;
  512.     f20 = f5 - f11;
  513.     f21 = f5 + f11;
  514.     f22 = f7 - f9;
  515.     f23 = f7 + f9;
  516.     f24 = f17 - f23;
  517.     f25 = f17 + f23;
  518.     f26 = f19 - f21;
  519.     f27 = f19 + f21;
  520.     f28 = f25 - f27;
  521.     y[0] = f25 + f27;
  522.     y[8] = MUL_F(f28, FRAC_CONST(0.7071067811865476));
  523.     f31 = f24 + f26;
  524.     f32 = MUL_C(f24, COEF_CONST(1.3065629648763766));
  525.     f33 = MUL_F(f31, FRAC_CONST(-0.9238795325112866));
  526.     f34 = MUL_F(f26, FRAC_CONST(-0.5411961001461967));
  527.     y[12] = f32 + f33;
  528.     y[4] = f34 - f33;
  529.     f37 = f16 + f22;
  530.     f38 = MUL_C(f16, COEF_CONST(1.1758756024193588));
  531.     f39 = MUL_F(f37, FRAC_CONST(-0.9807852804032304));
  532.     f40 = MUL_F(f22, FRAC_CONST(-0.7856949583871021));
  533.     f41 = f38 + f39;
  534.     f42 = f40 - f39;
  535.     f43 = f18 + f20;
  536.     f44 = MUL_C(f18, COEF_CONST(1.3870398453221473));
  537.     f45 = MUL_F(f43, FRAC_CONST(-0.8314696123025455));
  538.     f46 = MUL_F(f20, FRAC_CONST(-0.2758993792829436));
  539.     f47 = f44 + f45;
  540.     f48 = f46 - f45;
  541.     f49 = f42 - f48;
  542.     y[2] = f42 + f48;
  543.     f51 = MUL_F(f49, FRAC_CONST(0.7071067811865476));
  544.     y[14] = f41 - f47;
  545.     f53 = f41 + f47;
  546.     f54 = MUL_F(f53, FRAC_CONST(0.7071067811865476));
  547.     y[10] = f51 - f54;
  548.     y[6] = f51 + f54;
  549.     f57 = f2 - f4;
  550.     f58 = f2 + f4;
  551.     f59 = f6 - f8;
  552.     f60 = f6 + f8;
  553.     f61 = f10 - f12;
  554.     f62 = f10 + f12;
  555.     f63 = MUL_F(f60, FRAC_CONST(0.7071067811865476));
  556.     f64 = f0 - f63;
  557.     f65 = f0 + f63;
  558.     f66 = f58 + f62;
  559.     f67 = MUL_C(f58, COEF_CONST(1.3065629648763766));
  560.     f68 = MUL_F(f66, FRAC_CONST(-0.9238795325112866));
  561.     f69 = MUL_F(f62, FRAC_CONST(-0.5411961001461967));
  562.     f70 = f67 + f68;
  563.     f71 = f69 - f68;
  564.     f72 = f65 - f71;
  565.     f73 = f65 + f71;
  566.     f74 = f64 - f70;
  567.     f75 = f64 + f70;
  568.     f76 = MUL_F(f59, FRAC_CONST(0.7071067811865476));
  569.     f77 = f14 - f76;
  570.     f78 = f14 + f76;
  571.     f79 = f61 + f57;
  572.     f80 = MUL_C(f61, COEF_CONST(1.3065629648763766));
  573.     f81 = MUL_F(f79, FRAC_CONST(-0.9238795325112866));
  574.     f82 = MUL_F(f57, FRAC_CONST(-0.5411961001461967));
  575.     f83 = f80 + f81;
  576.     f84 = f82 - f81;
  577.     f85 = f78 - f84;
  578.     f86 = f78 + f84;
  579.     f87 = f77 - f83;
  580.     f88 = f77 + f83;
  581.     f89 = f86 + f73;
  582.     f90 = MUL_F(f86, FRAC_CONST(-0.8971675863426361));
  583.     f91 = MUL_F(f89, FRAC_CONST(0.9951847266721968));
  584.     f92 = MUL_C(f73, COEF_CONST(1.0932018670017576));
  585.     y[1] = f90 + f91;
  586.     y[15] = f92 - f91;
  587.     f95 = f75 - f88;
  588.     f96 = MUL_F(f88, FRAC_CONST(-0.6666556584777466));
  589.     f97 = MUL_F(f95, FRAC_CONST(0.9569403357322089));
  590.     f98 = MUL_C(f75, COEF_CONST(1.2472250129866713));
  591.     y[3] = f97 - f96;
  592.     y[13] = f98 - f97;
  593.     f101 = f87 + f74;
  594.     f102 = MUL_F(f87, FRAC_CONST(-0.4105245275223571));
  595.     f103 = MUL_F(f101, FRAC_CONST(0.8819212643483549));
  596.     f104 = MUL_C(f74, COEF_CONST(1.3533180011743529));
  597.     y[5] = f102 + f103;
  598.     y[11] = f104 - f103;
  599.     f107 = f72 - f85;
  600.     f108 = MUL_F(f85, FRAC_CONST(-0.1386171691990915));
  601.     f109 = MUL_F(f107, FRAC_CONST(0.7730104533627370));
  602.     f110 = MUL_C(f72, COEF_CONST(1.4074037375263826));
  603.     y[7] = f109 - f108;
  604.     y[9] = f110 - f109;
  605. }
  606. void DCT4_16(real_t *y, real_t *x)
  607. {
  608.     real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10;
  609.     real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20;
  610.     real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30;
  611.     real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40;
  612.     real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50;
  613.     real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60;
  614.     real_t f61, f62, f63, f64, f65, f66, f67, f68, f69, f70;
  615.     real_t f71, f72, f73, f74, f75, f76, f77, f78, f79, f80;
  616.     real_t f81, f82, f83, f84, f85, f86, f87, f88, f89, f90;
  617.     real_t f91, f92, f93, f94, f95, f96, f97, f98, f99, f100;
  618.     real_t f101, f102, f103, f104, f105, f106, f107, f108, f109, f110;
  619.     real_t f111, f112, f113, f114, f115, f116, f117, f118, f119, f120;
  620.     real_t f121, f122, f123, f124, f125, f126, f127, f128, f130, f132;
  621.     real_t f134, f136, f138, f140, f142, f144, f145, f148, f149, f152;
  622.     real_t f153, f156, f157;
  623.     f0 = x[0] + x[15];
  624.     f1 = MUL_C(COEF_CONST(1.0478631305325901), x[0]);
  625.     f2 = MUL_F(FRAC_CONST(-0.9987954562051724), f0);
  626.     f3 = MUL_F(FRAC_CONST(-0.9497277818777548), x[15]);
  627.     f4 = f1 + f2;
  628.     f5 = f3 - f2;
  629.     f6 = x[2] + x[13];
  630.     f7 = MUL_C(COEF_CONST(1.2130114330978077), x[2]);
  631.     f8 = MUL_F(FRAC_CONST(-0.9700312531945440), f6);
  632.     f9 = MUL_F(FRAC_CONST(-0.7270510732912803), x[13]);
  633.     f10 = f7 + f8;
  634.     f11 = f9 - f8;
  635.     f12 = x[4] + x[11];
  636.     f13 = MUL_C(COEF_CONST(1.3315443865537255), x[4]);
  637.     f14 = MUL_F(FRAC_CONST(-0.9039892931234433), f12);
  638.     f15 = MUL_F(FRAC_CONST(-0.4764341996931612), x[11]);
  639.     f16 = f13 + f14;
  640.     f17 = f15 - f14;
  641.     f18 = x[6] + x[9];
  642.     f19 = MUL_C(COEF_CONST(1.3989068359730781), x[6]);
  643.     f20 = MUL_F(FRAC_CONST(-0.8032075314806453), f18);
  644.     f21 = MUL_F(FRAC_CONST(-0.2075082269882124), x[9]);
  645.     f22 = f19 + f20;
  646.     f23 = f21 - f20;
  647.     f24 = x[8] + x[7];
  648.     f25 = MUL_C(COEF_CONST(1.4125100802019777), x[8]);
  649.     f26 = MUL_F(FRAC_CONST(-0.6715589548470187), f24);
  650.     f27 = MUL_F(FRAC_CONST(0.0693921705079402), x[7]);
  651.     f28 = f25 + f26;
  652.     f29 = f27 - f26;
  653.     f30 = x[10] + x[5];
  654.     f31 = MUL_C(COEF_CONST(1.3718313541934939), x[10]);
  655.     f32 = MUL_F(FRAC_CONST(-0.5141027441932219), f30);
  656.     f33 = MUL_F(FRAC_CONST(0.3436258658070501), x[5]);
  657.     f34 = f31 + f32;
  658.     f35 = f33 - f32;
  659.     f36 = x[12] + x[3];
  660.     f37 = MUL_C(COEF_CONST(1.2784339185752409), x[12]);
  661.     f38 = MUL_F(FRAC_CONST(-0.3368898533922200), f36);
  662.     f39 = MUL_F(FRAC_CONST(0.6046542117908008), x[3]);
  663.     f40 = f37 + f38;
  664.     f41 = f39 - f38;
  665.     f42 = x[14] + x[1];
  666.     f43 = MUL_C(COEF_CONST(1.1359069844201433), x[14]);
  667.     f44 = MUL_F(FRAC_CONST(-0.1467304744553624), f42);
  668.     f45 = MUL_F(FRAC_CONST(0.8424460355094185), x[1]);
  669.     f46 = f43 + f44;
  670.     f47 = f45 - f44;
  671.     f48 = f5 - f29;
  672.     f49 = f5 + f29;
  673.     f50 = f4 - f28;
  674.     f51 = f4 + f28;
  675.     f52 = f11 - f35;
  676.     f53 = f11 + f35;
  677.     f54 = f10 - f34;
  678.     f55 = f10 + f34;
  679.     f56 = f17 - f41;
  680.     f57 = f17 + f41;
  681.     f58 = f16 - f40;
  682.     f59 = f16 + f40;
  683.     f60 = f23 - f47;
  684.     f61 = f23 + f47;
  685.     f62 = f22 - f46;
  686.     f63 = f22 + f46;
  687.     f64 = f48 + f50;
  688.     f65 = MUL_C(COEF_CONST(1.1758756024193588), f48);
  689.     f66 = MUL_F(FRAC_CONST(-0.9807852804032304), f64);
  690.     f67 = MUL_F(FRAC_CONST(-0.7856949583871021), f50);
  691.     f68 = f65 + f66;
  692.     f69 = f67 - f66;
  693.     f70 = f52 + f54;
  694.     f71 = MUL_C(COEF_CONST(1.3870398453221475), f52);
  695.     f72 = MUL_F(FRAC_CONST(-0.5555702330196022), f70);
  696.     f73 = MUL_F(FRAC_CONST(0.2758993792829431), f54);
  697.     f74 = f71 + f72;
  698.     f75 = f73 - f72;
  699.     f76 = f56 + f58;
  700.     f77 = MUL_F(FRAC_CONST(0.7856949583871022), f56);
  701.     f78 = MUL_F(FRAC_CONST(0.1950903220161283), f76);
  702.     f79 = MUL_C(COEF_CONST(1.1758756024193586), f58);
  703.     f80 = f77 + f78;
  704.     f81 = f79 - f78;
  705.     f82 = f60 + f62;
  706.     f83 = MUL_F(FRAC_CONST(-0.2758993792829430), f60);
  707.     f84 = MUL_F(FRAC_CONST(0.8314696123025452), f82);
  708.     f85 = MUL_C(COEF_CONST(1.3870398453221475), f62);
  709.     f86 = f83 + f84;
  710.     f87 = f85 - f84;
  711.     f88 = f49 - f57;
  712.     f89 = f49 + f57;
  713.     f90 = f51 - f59;
  714.     f91 = f51 + f59;
  715.     f92 = f53 - f61;
  716.     f93 = f53 + f61;
  717.     f94 = f55 - f63;
  718.     f95 = f55 + f63;
  719.     f96 = f69 - f81;
  720.     f97 = f69 + f81;
  721.     f98 = f68 - f80;
  722.     f99 = f68 + f80;
  723.     f100 = f75 - f87;
  724.     f101 = f75 + f87;
  725.     f102 = f74 - f86;
  726.     f103 = f74 + f86;
  727.     f104 = f88 + f90;
  728.     f105 = MUL_C(COEF_CONST(1.3065629648763766), f88);
  729.     f106 = MUL_F(FRAC_CONST(-0.9238795325112866), f104);
  730.     f107 = MUL_F(FRAC_CONST(-0.5411961001461967), f90);
  731.     f108 = f105 + f106;
  732.     f109 = f107 - f106;
  733.     f110 = f92 + f94;
  734.     f111 = MUL_F(FRAC_CONST(0.5411961001461969), f92);
  735.     f112 = MUL_F(FRAC_CONST(0.3826834323650898), f110);
  736.     f113 = MUL_C(COEF_CONST(1.3065629648763766), f94);
  737.     f114 = f111 + f112;
  738.     f115 = f113 - f112;
  739.     f116 = f96 + f98;
  740.     f117 = MUL_C(COEF_CONST(1.3065629648763766), f96);
  741.     f118 = MUL_F(FRAC_CONST(-0.9238795325112866), f116);
  742.     f119 = MUL_F(FRAC_CONST(-0.5411961001461967), f98);
  743.     f120 = f117 + f118;
  744.     f121 = f119 - f118;
  745.     f122 = f100 + f102;
  746.     f123 = MUL_F(FRAC_CONST(0.5411961001461969), f100);
  747.     f124 = MUL_F(FRAC_CONST(0.3826834323650898), f122);
  748.     f125 = MUL_C(COEF_CONST(1.3065629648763766), f102);
  749.     f126 = f123 + f124;
  750.     f127 = f125 - f124;
  751.     f128 = f89 - f93;
  752.     y[0] = f89 + f93;
  753.     f130 = f91 - f95;
  754.     y[15] = f91 + f95;
  755.     f132 = f109 - f115;
  756.     y[3] = f109 + f115;
  757.     f134 = f108 - f114;
  758.     y[12] = f108 + f114;
  759.     f136 = f97 - f101;
  760.     y[1] = f97 + f101;
  761.     f138 = f99 - f103;
  762.     y[14] = f99 + f103;
  763.     f140 = f121 - f127;
  764.     y[2] = f121 + f127;
  765.     f142 = f120 - f126;
  766.     y[13] = f120 + f126;
  767.     f144 = f128 - f130;
  768.     f145 = f128 + f130;
  769.     y[8] = MUL_F(FRAC_CONST(0.7071067811865474), f144);
  770.     y[7] = MUL_F(FRAC_CONST(0.7071067811865474), f145);
  771.     f148 = f132 - f134;
  772.     f149 = f132 + f134;
  773.     y[11] = MUL_F(FRAC_CONST(0.7071067811865474), f148);
  774.     y[4] = MUL_F(FRAC_CONST(0.7071067811865474), f149);
  775.     f152 = f136 - f138;
  776.     f153 = f136 + f138;
  777.     y[9] = MUL_F(FRAC_CONST(0.7071067811865474), f152);
  778.     y[6] = MUL_F(FRAC_CONST(0.7071067811865474), f153);
  779.     f156 = f140 - f142;
  780.     f157 = f140 + f142;
  781.     y[10] = MUL_F(FRAC_CONST(0.7071067811865474), f156);
  782.     y[5] = MUL_F(FRAC_CONST(0.7071067811865474), f157);
  783. }
  784. void DCT3_32_unscaled(real_t *y, real_t *x)
  785. {
  786.     real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10;
  787.     real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20;
  788.     real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30;
  789.     real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40;
  790.     real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50;
  791.     real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60;
  792.     real_t f61, f62, f63, f64, f65, f66, f67, f68, f69, f70;
  793.     real_t f71, f72, f73, f74, f75, f76, f77, f78, f79, f80;
  794.     real_t f81, f82, f83, f84, f85, f86, f87, f88, f89, f90;
  795.     real_t f91, f92, f93, f94, f95, f96, f97, f98, f99, f100;
  796.     real_t f101, f102, f103, f104, f105, f106, f107, f108, f109, f110;
  797.     real_t f111, f112, f113, f114, f115, f116, f117, f118, f119, f120;
  798.     real_t f121, f122, f123, f124, f125, f126, f127, f128, f129, f130;
  799.     real_t f131, f132, f133, f134, f135, f136, f137, f138, f139, f140;
  800.     real_t f141, f142, f143, f144, f145, f146, f147, f148, f149, f150;
  801.     real_t f151, f152, f153, f154, f155, f156, f157, f158, f159, f160;
  802.     real_t f161, f162, f163, f164, f165, f166, f167, f168, f169, f170;
  803.     real_t f171, f172, f173, f174, f175, f176, f177, f178, f179, f180;
  804.     real_t f181, f182, f183, f184, f185, f186, f187, f188, f189, f190;
  805.     real_t f191, f192, f193, f194, f195, f196, f197, f198, f199, f200;
  806.     real_t f201, f202, f203, f204, f205, f206, f207, f208, f209, f210;
  807.     real_t f211, f212, f213, f214, f215, f216, f217, f218, f219, f220;
  808.     real_t f221, f222, f223, f224, f225, f226, f227, f228, f229, f230;
  809.     real_t f231, f232, f233, f234, f235, f236, f237, f238, f239, f240;
  810.     real_t f241, f242, f243, f244, f245, f246, f247, f248, f249, f250;
  811.     real_t f251, f252, f253, f254, f255, f256, f257, f258, f259, f260;
  812.     real_t f261, f262, f263, f264, f265, f266, f267, f268, f269, f270;
  813.     real_t f271, f272;
  814.     f0 = MUL_F(x[16], FRAC_CONST(0.7071067811865476));
  815.     f1 = x[0] - f0;
  816.     f2 = x[0] + f0;
  817.     f3 = x[8] + x[24];
  818.     f4 = MUL_C(x[8], COEF_CONST(1.3065629648763766));
  819.     f5 = MUL_F(f3, FRAC_CONST((-0.9238795325112866)));
  820.     f6 = MUL_F(x[24], FRAC_CONST((-0.5411961001461967)));
  821.     f7 = f4 + f5;
  822.     f8 = f6 - f5;
  823.     f9 = f2 - f8;
  824.     f10 = f2 + f8;
  825.     f11 = f1 - f7;
  826.     f12 = f1 + f7;
  827.     f13 = x[4] + x[28];
  828.     f14 = MUL_C(x[4], COEF_CONST(1.1758756024193588));
  829.     f15 = MUL_F(f13, FRAC_CONST((-0.9807852804032304)));
  830.     f16 = MUL_F(x[28], FRAC_CONST((-0.7856949583871021)));
  831.     f17 = f14 + f15;
  832.     f18 = f16 - f15;
  833.     f19 = x[12] + x[20];
  834.     f20 = MUL_C(x[12], COEF_CONST(1.3870398453221473));
  835.     f21 = MUL_F(f19, FRAC_CONST((-0.8314696123025455)));
  836.     f22 = MUL_F(x[20], FRAC_CONST((-0.2758993792829436)));
  837.     f23 = f20 + f21;
  838.     f24 = f22 - f21;
  839.     f25 = f18 - f24;
  840.     f26 = f18 + f24;
  841.     f27 = MUL_F(f25, FRAC_CONST(0.7071067811865476));
  842.     f28 = f17 - f23;
  843.     f29 = f17 + f23;
  844.     f30 = MUL_F(f29, FRAC_CONST(0.7071067811865476));
  845.     f31 = f27 - f30;
  846.     f32 = f27 + f30;
  847.     f33 = f10 - f26;
  848.     f34 = f10 + f26;
  849.     f35 = f12 - f32;
  850.     f36 = f12 + f32;
  851.     f37 = f11 - f31;
  852.     f38 = f11 + f31;
  853.     f39 = f9 - f28;
  854.     f40 = f9 + f28;
  855.     f41 = x[2] + x[30];
  856.     f42 = MUL_C(x[2], COEF_CONST(1.0932018670017569));
  857.     f43 = MUL_F(f41, FRAC_CONST((-0.9951847266721969)));
  858.     f44 = MUL_F(x[30], FRAC_CONST((-0.8971675863426368)));
  859.     f45 = f42 + f43;
  860.     f46 = f44 - f43;
  861.     f47 = x[6] + x[26];
  862.     f48 = MUL_C(x[6], COEF_CONST(1.2472250129866711));
  863.     f49 = MUL_F(f47, FRAC_CONST((-0.9569403357322089)));
  864.     f50 = MUL_F(x[26], FRAC_CONST((-0.6666556584777469)));
  865.     f51 = f48 + f49;
  866.     f52 = f50 - f49;
  867.     f53 = x[10] + x[22];
  868.     f54 = MUL_C(x[10], COEF_CONST(1.3533180011743526));
  869.     f55 = MUL_F(f53, FRAC_CONST((-0.8819212643483551)));
  870.     f56 = MUL_F(x[22], FRAC_CONST((-0.4105245275223575)));
  871.     f57 = f54 + f55;
  872.     f58 = f56 - f55;
  873.     f59 = x[14] + x[18];
  874.     f60 = MUL_C(x[14], COEF_CONST(1.4074037375263826));
  875.     f61 = MUL_F(f59, FRAC_CONST((-0.7730104533627369)));
  876.     f62 = MUL_F(x[18], FRAC_CONST((-0.1386171691990913)));
  877.     f63 = f60 + f61;
  878.     f64 = f62 - f61;
  879.     f65 = f46 - f64;
  880.     f66 = f46 + f64;
  881.     f67 = f52 - f58;
  882.     f68 = f52 + f58;
  883.     f69 = f66 - f68;
  884.     f70 = f66 + f68;
  885.     f71 = MUL_F(f69, FRAC_CONST(0.7071067811865476));
  886.     f72 = f65 + f67;
  887.     f73 = MUL_C(f65, COEF_CONST(1.3065629648763766));
  888.     f74 = MUL_F(f72, FRAC_CONST((-0.9238795325112866)));
  889.     f75 = MUL_F(f67, FRAC_CONST((-0.5411961001461967)));
  890.     f76 = f73 + f74;
  891.     f77 = f75 - f74;
  892.     f78 = f45 - f63;
  893.     f79 = f45 + f63;
  894.     f80 = f51 - f57;
  895.     f81 = f51 + f57;
  896.     f82 = f79 + f81;
  897.     f83 = MUL_C(f79, COEF_CONST(1.3065629648763770));
  898.     f84 = MUL_F(f82, FRAC_CONST((-0.3826834323650904)));
  899.     f85 = MUL_F(f81, FRAC_CONST(0.5411961001461961));
  900.     f86 = f83 + f84;
  901.     f87 = f85 - f84;
  902.     f88 = f78 - f80;
  903.     f89 = f78 + f80;
  904.     f90 = MUL_F(f89, FRAC_CONST(0.7071067811865476));
  905.     f91 = f77 - f87;
  906.     f92 = f77 + f87;
  907.     f93 = f71 - f90;
  908.     f94 = f71 + f90;
  909.     f95 = f76 - f86;
  910.     f96 = f76 + f86;
  911.     f97 = f34 - f70;
  912.     f98 = f34 + f70;
  913.     f99 = f36 - f92;
  914.     f100 = f36 + f92;
  915.     f101 = f38 - f91;
  916.     f102 = f38 + f91;
  917.     f103 = f40 - f94;
  918.     f104 = f40 + f94;
  919.     f105 = f39 - f93;
  920.     f106 = f39 + f93;
  921.     f107 = f37 - f96;
  922.     f108 = f37 + f96;
  923.     f109 = f35 - f95;
  924.     f110 = f35 + f95;
  925.     f111 = f33 - f88;
  926.     f112 = f33 + f88;
  927.     f113 = x[1] + x[31];
  928.     f114 = MUL_C(x[1], COEF_CONST(1.0478631305325901));
  929.     f115 = MUL_F(f113, FRAC_CONST((-0.9987954562051724)));
  930.     f116 = MUL_F(x[31], FRAC_CONST((-0.9497277818777548)));
  931.     f117 = f114 + f115;
  932.     f118 = f116 - f115;
  933.     f119 = x[5] + x[27];
  934.     f120 = MUL_C(x[5], COEF_CONST(1.2130114330978077));
  935.     f121 = MUL_F(f119, FRAC_CONST((-0.9700312531945440)));
  936.     f122 = MUL_F(x[27], FRAC_CONST((-0.7270510732912803)));
  937.     f123 = f120 + f121;
  938.     f124 = f122 - f121;
  939.     f125 = x[9] + x[23];
  940.     f126 = MUL_C(x[9], COEF_CONST(1.3315443865537255));
  941.     f127 = MUL_F(f125, FRAC_CONST((-0.9039892931234433)));
  942.     f128 = MUL_F(x[23], FRAC_CONST((-0.4764341996931612)));
  943.     f129 = f126 + f127;
  944.     f130 = f128 - f127;
  945.     f131 = x[13] + x[19];
  946.     f132 = MUL_C(x[13], COEF_CONST(1.3989068359730781));
  947.     f133 = MUL_F(f131, FRAC_CONST((-0.8032075314806453)));
  948.     f134 = MUL_F(x[19], FRAC_CONST((-0.2075082269882124)));
  949.     f135 = f132 + f133;
  950.     f136 = f134 - f133;
  951.     f137 = x[17] + x[15];
  952.     f138 = MUL_C(x[17], COEF_CONST(1.4125100802019777));
  953.     f139 = MUL_F(f137, FRAC_CONST((-0.6715589548470187)));
  954.     f140 = MUL_F(x[15], FRAC_CONST(0.0693921705079402));
  955.     f141 = f138 + f139;
  956.     f142 = f140 - f139;
  957.     f143 = x[21] + x[11];
  958.     f144 = MUL_C(x[21], COEF_CONST(1.3718313541934939));
  959.     f145 = MUL_F(f143, FRAC_CONST((-0.5141027441932219)));
  960.     f146 = MUL_F(x[11], FRAC_CONST(0.3436258658070501));
  961.     f147 = f144 + f145;
  962.     f148 = f146 - f145;
  963.     f149 = x[25] + x[7];
  964.     f150 = MUL_C(x[25], COEF_CONST(1.2784339185752409));
  965.     f151 = MUL_F(f149, FRAC_CONST((-0.3368898533922200)));
  966.     f152 = MUL_F(x[7], FRAC_CONST(0.6046542117908008));
  967.     f153 = f150 + f151;
  968.     f154 = f152 - f151;
  969.     f155 = x[29] + x[3];
  970.     f156 = MUL_C(x[29], COEF_CONST(1.1359069844201433));
  971.     f157 = MUL_F(f155, FRAC_CONST((-0.1467304744553624)));
  972.     f158 = MUL_F(x[3], FRAC_CONST(0.8424460355094185));
  973.     f159 = f156 + f157;
  974.     f160 = f158 - f157;
  975.     f161 = f118 - f142;
  976.     f162 = f118 + f142;
  977.     f163 = f117 - f141;
  978.     f164 = f117 + f141;
  979.     f165 = f124 - f148;
  980.     f166 = f124 + f148;
  981.     f167 = f123 - f147;
  982.     f168 = f123 + f147;
  983.     f169 = f130 - f154;
  984.     f170 = f130 + f154;
  985.     f171 = f129 - f153;
  986.     f172 = f129 + f153;
  987.     f173 = f136 - f160;
  988.     f174 = f136 + f160;
  989.     f175 = f135 - f159;
  990.     f176 = f135 + f159;
  991.     f177 = f161 + f163;
  992.     f178 = MUL_C(f161, COEF_CONST(1.1758756024193588));
  993.     f179 = MUL_F(f177, FRAC_CONST((-0.9807852804032304)));
  994.     f180 = MUL_F(f163, FRAC_CONST((-0.7856949583871021)));
  995.     f181 = f178 + f179;
  996.     f182 = f180 - f179;
  997.     f183 = f165 + f167;
  998.     f184 = MUL_C(f165, COEF_CONST(1.3870398453221475));
  999.     f185 = MUL_F(f183, FRAC_CONST((-0.5555702330196022)));
  1000.     f186 = MUL_F(f167, FRAC_CONST(0.2758993792829431));
  1001.     f187 = f184 + f185;
  1002.     f188 = f186 - f185;
  1003.     f189 = f169 + f171;
  1004.     f190 = MUL_F(f169, FRAC_CONST(0.7856949583871022));
  1005.     f191 = MUL_F(f189, FRAC_CONST(0.1950903220161283));
  1006.     f192 = MUL_C(f171, COEF_CONST(1.1758756024193586));
  1007.     f193 = f190 + f191;
  1008.     f194 = f192 - f191;
  1009.     f195 = f173 + f175;
  1010.     f196 = MUL_F(f173, FRAC_CONST((-0.2758993792829430)));
  1011.     f197 = MUL_F(f195, FRAC_CONST(0.8314696123025452));
  1012.     f198 = MUL_C(f175, COEF_CONST(1.3870398453221475));
  1013.     f199 = f196 + f197;
  1014.     f200 = f198 - f197;
  1015.     f201 = f162 - f170;
  1016.     f202 = f162 + f170;
  1017.     f203 = f164 - f172;
  1018.     f204 = f164 + f172;
  1019.     f205 = f166 - f174;
  1020.     f206 = f166 + f174;
  1021.     f207 = f168 - f176;
  1022.     f208 = f168 + f176;
  1023.     f209 = f182 - f194;
  1024.     f210 = f182 + f194;
  1025.     f211 = f181 - f193;
  1026.     f212 = f181 + f193;
  1027.     f213 = f188 - f200;
  1028.     f214 = f188 + f200;
  1029.     f215 = f187 - f199;
  1030.     f216 = f187 + f199;
  1031.     f217 = f201 + f203;
  1032.     f218 = MUL_C(f201, COEF_CONST(1.3065629648763766));
  1033.     f219 = MUL_F(f217, FRAC_CONST((-0.9238795325112866)));
  1034.     f220 = MUL_F(f203, FRAC_CONST((-0.5411961001461967)));
  1035.     f221 = f218 + f219;
  1036.     f222 = f220 - f219;
  1037.     f223 = f205 + f207;
  1038.     f224 = MUL_F(f205, FRAC_CONST(0.5411961001461969));
  1039.     f225 = MUL_F(f223, FRAC_CONST(0.3826834323650898));
  1040.     f226 = MUL_C(f207, COEF_CONST(1.3065629648763766));
  1041.     f227 = f224 + f225;
  1042.     f228 = f226 - f225;
  1043.     f229 = f209 + f211;
  1044.     f230 = MUL_C(f209, COEF_CONST(1.3065629648763766));
  1045.     f231 = MUL_F(f229, FRAC_CONST((-0.9238795325112866)));
  1046.     f232 = MUL_F(f211, FRAC_CONST((-0.5411961001461967)));
  1047.     f233 = f230 + f231;
  1048.     f234 = f232 - f231;
  1049.     f235 = f213 + f215;
  1050.     f236 = MUL_F(f213, FRAC_CONST(0.5411961001461969));
  1051.     f237 = MUL_F(f235, FRAC_CONST(0.3826834323650898));
  1052.     f238 = MUL_C(f215, COEF_CONST(1.3065629648763766));
  1053.     f239 = f236 + f237;
  1054.     f240 = f238 - f237;
  1055.     f241 = f202 - f206;
  1056.     f242 = f202 + f206;
  1057.     f243 = f204 - f208;
  1058.     f244 = f204 + f208;
  1059.     f245 = f222 - f228;
  1060.     f246 = f222 + f228;
  1061.     f247 = f221 - f227;
  1062.     f248 = f221 + f227;
  1063.     f249 = f210 - f214;
  1064.     f250 = f210 + f214;
  1065.     f251 = f212 - f216;
  1066.     f252 = f212 + f216;
  1067.     f253 = f234 - f240;
  1068.     f254 = f234 + f240;
  1069.     f255 = f233 - f239;
  1070.     f256 = f233 + f239;
  1071.     f257 = f241 - f243;
  1072.     f258 = f241 + f243;
  1073.     f259 = MUL_F(f257, FRAC_CONST(0.7071067811865474));
  1074.     f260 = MUL_F(f258, FRAC_CONST(0.7071067811865474));
  1075.     f261 = f245 - f247;
  1076.     f262 = f245 + f247;
  1077.     f263 = MUL_F(f261, FRAC_CONST(0.7071067811865474));
  1078.     f264 = MUL_F(f262, FRAC_CONST(0.7071067811865474));
  1079.     f265 = f249 - f251;
  1080.     f266 = f249 + f251;
  1081.     f267 = MUL_F(f265, FRAC_CONST(0.7071067811865474));
  1082.     f268 = MUL_F(f266, FRAC_CONST(0.7071067811865474));
  1083.     f269 = f253 - f255;
  1084.     f270 = f253 + f255;
  1085.     f271 = MUL_F(f269, FRAC_CONST(0.7071067811865474));
  1086.     f272 = MUL_F(f270, FRAC_CONST(0.7071067811865474));
  1087.     y[31] = f98 - f242;
  1088.     y[0] = f98 + f242;
  1089.     y[30] = f100 - f250;
  1090.     y[1] = f100 + f250;
  1091.     y[29] = f102 - f254;
  1092.     y[2] = f102 + f254;
  1093.     y[28] = f104 - f246;
  1094.     y[3] = f104 + f246;
  1095.     y[27] = f106 - f264;
  1096.     y[4] = f106 + f264;
  1097.     y[26] = f108 - f272;
  1098.     y[5] = f108 + f272;
  1099.     y[25] = f110 - f268;
  1100.     y[6] = f110 + f268;
  1101.     y[24] = f112 - f260;
  1102.     y[7] = f112 + f260;
  1103.     y[23] = f111 - f259;
  1104.     y[8] = f111 + f259;
  1105.     y[22] = f109 - f267;
  1106.     y[9] = f109 + f267;
  1107.     y[21] = f107 - f271;
  1108.     y[10] = f107 + f271;
  1109.     y[20] = f105 - f263;
  1110.     y[11] = f105 + f263;
  1111.     y[19] = f103 - f248;
  1112.     y[12] = f103 + f248;
  1113.     y[18] = f101 - f256;
  1114.     y[13] = f101 + f256;
  1115.     y[17] = f99 - f252;
  1116.     y[14] = f99 + f252;
  1117.     y[16] = f97 - f244;
  1118.     y[15] = f97 + f244;
  1119. }
  1120. void DCT2_32_unscaled(real_t *y, real_t *x)
  1121. {
  1122.     real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10;
  1123.     real_t f11, f12, f13, f14, f15, f16, f17, f18, f19, f20;
  1124.     real_t f21, f22, f23, f24, f25, f26, f27, f28, f29, f30;
  1125.     real_t f31, f32, f33, f34, f35, f36, f37, f38, f39, f40;
  1126.     real_t f41, f42, f43, f44, f45, f46, f47, f48, f49, f50;
  1127.     real_t f51, f52, f53, f54, f55, f56, f57, f58, f59, f60;
  1128.     real_t f63, f64, f65, f66, f69, f70, f71, f72, f73, f74;
  1129.     real_t f75, f76, f77, f78, f79, f80, f81, f83, f85, f86;
  1130.     real_t f89, f90, f91, f92, f93, f94, f95, f96, f97, f98;
  1131.     real_t f99, f100, f101, f102, f103, f104, f105, f106, f107, f108;
  1132.     real_t f109, f110, f111, f112, f113, f114, f115, f116, f117, f118;
  1133.     real_t f119, f120, f121, f122, f123, f124, f127, f128, f129, f130;
  1134.     real_t f133, f134, f135, f136, f139, f140, f141, f142, f145, f146;
  1135.     real_t f147, f148, f149, f150, f151, f152, f153, f154, f155, f156;
  1136.     real_t f157, f158, f159, f160, f161, f162, f163, f164, f165, f166;
  1137.     real_t f167, f168, f169, f170, f171, f172, f173, f174, f175, f176;
  1138.     real_t f177, f178, f179, f180, f181, f182, f183, f184, f185, f186;
  1139.     real_t f187, f188, f189, f190, f191, f192, f193, f194, f195, f196;
  1140.     real_t f197, f198, f199, f200, f201, f202, f203, f204, f205, f206;
  1141.     real_t f207, f208, f209, f210, f211, f212, f213, f214, f215, f216;
  1142.     real_t f217, f218, f219, f220, f221, f222, f223, f224, f225, f226;
  1143.     real_t f227, f228, f229, f230, f231, f232, f233, f234, f235, f236;
  1144.     real_t f237, f238, f239, f240, f241, f242, f243, f244, f247, f248;
  1145.     real_t f249, f250, f253, f254, f255, f256, f259, f260, f261, f262;
  1146.     real_t f265, f266, f267, f268, f271, f272, f273, f274, f277, f278;
  1147.     real_t f279, f280, f283, f284, f285, f286;
  1148.     f0 = x[0] - x[31];
  1149.     f1 = x[0] + x[31];
  1150.     f2 = x[1] - x[30];
  1151.     f3 = x[1] + x[30];
  1152.     f4 = x[2] - x[29];
  1153.     f5 = x[2] + x[29];
  1154.     f6 = x[3] - x[28];
  1155.     f7 = x[3] + x[28];
  1156.     f8 = x[4] - x[27];
  1157.     f9 = x[4] + x[27];
  1158.     f10 = x[5] - x[26];
  1159.     f11 = x[5] + x[26];
  1160.     f12 = x[6] - x[25];
  1161.     f13 = x[6] + x[25];
  1162.     f14 = x[7] - x[24];
  1163.     f15 = x[7] + x[24];
  1164.     f16 = x[8] - x[23];
  1165.     f17 = x[8] + x[23];
  1166.     f18 = x[9] - x[22];
  1167.     f19 = x[9] + x[22];
  1168.     f20 = x[10] - x[21];
  1169.     f21 = x[10] + x[21];
  1170.     f22 = x[11] - x[20];
  1171.     f23 = x[11] + x[20];
  1172.     f24 = x[12] - x[19];
  1173.     f25 = x[12] + x[19];
  1174.     f26 = x[13] - x[18];
  1175.     f27 = x[13] + x[18];
  1176.     f28 = x[14] - x[17];
  1177.     f29 = x[14] + x[17];
  1178.     f30 = x[15] - x[16];
  1179.     f31 = x[15] + x[16];
  1180.     f32 = f1 - f31;
  1181.     f33 = f1 + f31;
  1182.     f34 = f3 - f29;
  1183.     f35 = f3 + f29;
  1184.     f36 = f5 - f27;
  1185.     f37 = f5 + f27;
  1186.     f38 = f7 - f25;
  1187.     f39 = f7 + f25;
  1188.     f40 = f9 - f23;
  1189.     f41 = f9 + f23;
  1190.     f42 = f11 - f21;
  1191.     f43 = f11 + f21;
  1192.     f44 = f13 - f19;
  1193.     f45 = f13 + f19;
  1194.     f46 = f15 - f17;
  1195.     f47 = f15 + f17;
  1196.     f48 = f33 - f47;
  1197.     f49 = f33 + f47;
  1198.     f50 = f35 - f45;
  1199.     f51 = f35 + f45;
  1200.     f52 = f37 - f43;
  1201.     f53 = f37 + f43;
  1202.     f54 = f39 - f41;
  1203.     f55 = f39 + f41;
  1204.     f56 = f49 - f55;
  1205.     f57 = f49 + f55;
  1206.     f58 = f51 - f53;
  1207.     f59 = f51 + f53;
  1208.     f60 = f57 - f59;
  1209.     y[0] = f57 + f59;
  1210.     y[16] = MUL_F(FRAC_CONST(0.7071067811865476), f60);
  1211.     f63 = f56 + f58;
  1212.     f64 = MUL_C(COEF_CONST(1.3065629648763766), f56);
  1213.     f65 = MUL_F(FRAC_CONST(-0.9238795325112866), f63);
  1214.     f66 = MUL_F(FRAC_CONST(-0.5411961001461967), f58);
  1215.     y[24] = f64 + f65;
  1216.     y[8] = f66 - f65;
  1217.     f69 = f48 + f54;
  1218.     f70 = MUL_C(COEF_CONST(1.1758756024193588), f48);
  1219.     f71 = MUL_F(FRAC_CONST(-0.9807852804032304), f69);
  1220.     f72 = MUL_F(FRAC_CONST(-0.7856949583871021), f54);
  1221.     f73 = f70 + f71;
  1222.     f74 = f72 - f71;
  1223.     f75 = f50 + f52;
  1224.     f76 = MUL_C(COEF_CONST(1.3870398453221473), f50);
  1225.     f77 = MUL_F(FRAC_CONST(-0.8314696123025455), f75);
  1226.     f78 = MUL_F(FRAC_CONST(-0.2758993792829436), f52);
  1227.     f79 = f76 + f77;
  1228.     f80 = f78 - f77;
  1229.     f81 = f74 - f80;
  1230.     y[4] = f74 + f80;
  1231.     f83 = MUL_F(FRAC_CONST(0.7071067811865476), f81);
  1232.     y[28] = f73 - f79;
  1233.     f85 = f73 + f79;
  1234.     f86 = MUL_F(FRAC_CONST(0.7071067811865476), f85);
  1235.     y[20] = f83 - f86;
  1236.     y[12] = f83 + f86;
  1237.     f89 = f34 - f36;
  1238.     f90 = f34 + f36;
  1239.     f91 = f38 - f40;
  1240.     f92 = f38 + f40;
  1241.     f93 = f42 - f44;
  1242.     f94 = f42 + f44;
  1243.     f95 = MUL_F(FRAC_CONST(0.7071067811865476), f92);
  1244.     f96 = f32 - f95;
  1245.     f97 = f32 + f95;
  1246.     f98 = f90 + f94;
  1247.     f99 = MUL_C(COEF_CONST(1.3065629648763766), f90);
  1248.     f100 = MUL_F(FRAC_CONST(-0.9238795325112866), f98);
  1249.     f101 = MUL_F(FRAC_CONST(-0.5411961001461967), f94);
  1250.     f102 = f99 + f100;
  1251.     f103 = f101 - f100;
  1252.     f104 = f97 - f103;
  1253.     f105 = f97 + f103;
  1254.     f106 = f96 - f102;
  1255.     f107 = f96 + f102;
  1256.     f108 = MUL_F(FRAC_CONST(0.7071067811865476), f91);
  1257.     f109 = f46 - f108;
  1258.     f110 = f46 + f108;
  1259.     f111 = f93 + f89;
  1260.     f112 = MUL_C(COEF_CONST(1.3065629648763766), f93);
  1261.     f113 = MUL_F(FRAC_CONST(-0.9238795325112866), f111);
  1262.     f114 = MUL_F(FRAC_CONST(-0.5411961001461967), f89);
  1263.     f115 = f112 + f113;
  1264.     f116 = f114 - f113;
  1265.     f117 = f110 - f116;
  1266.     f118 = f110 + f116;
  1267.     f119 = f109 - f115;
  1268.     f120 = f109 + f115;
  1269.     f121 = f118 + f105;
  1270.     f122 = MUL_F(FRAC_CONST(-0.8971675863426361), f118);
  1271.     f123 = MUL_F(FRAC_CONST(0.9951847266721968), f121);
  1272.     f124 = MUL_C(COEF_CONST(1.0932018670017576), f105);
  1273.     y[2] = f122 + f123;
  1274.     y[30] = f124 - f123;
  1275.     f127 = f107 - f120;
  1276.     f128 = MUL_F(FRAC_CONST(-0.6666556584777466), f120);
  1277.     f129 = MUL_F(FRAC_CONST(0.9569403357322089), f127);
  1278.     f130 = MUL_C(COEF_CONST(1.2472250129866713), f107);
  1279.     y[6] = f129 - f128;
  1280.     y[26] = f130 - f129;
  1281.     f133 = f119 + f106;
  1282.     f134 = MUL_F(FRAC_CONST(-0.4105245275223571), f119);
  1283.     f135 = MUL_F(FRAC_CONST(0.8819212643483549), f133);
  1284.     f136 = MUL_C(COEF_CONST(1.3533180011743529), f106);
  1285.     y[10] = f134 + f135;
  1286.     y[22] = f136 - f135;
  1287.     f139 = f104 - f117;
  1288.     f140 = MUL_F(FRAC_CONST(-0.1386171691990915), f117);
  1289.     f141 = MUL_F(FRAC_CONST(0.7730104533627370), f139);
  1290.     f142 = MUL_C(COEF_CONST(1.4074037375263826), f104);
  1291.     y[14] = f141 - f140;
  1292.     y[18] = f142 - f141;
  1293.     f145 = f2 - f4;
  1294.     f146 = f2 + f4;
  1295.     f147 = f6 - f8;
  1296.     f148 = f6 + f8;
  1297.     f149 = f10 - f12;
  1298.     f150 = f10 + f12;
  1299.     f151 = f14 - f16;
  1300.     f152 = f14 + f16;
  1301.     f153 = f18 - f20;
  1302.     f154 = f18 + f20;
  1303.     f155 = f22 - f24;
  1304.     f156 = f22 + f24;
  1305.     f157 = f26 - f28;
  1306.     f158 = f26 + f28;
  1307.     f159 = MUL_F(FRAC_CONST(0.7071067811865476), f152);
  1308.     f160 = f0 - f159;
  1309.     f161 = f0 + f159;
  1310.     f162 = f148 + f156;
  1311.     f163 = MUL_C(COEF_CONST(1.3065629648763766), f148);
  1312.     f164 = MUL_F(FRAC_CONST(-0.9238795325112866), f162);
  1313.     f165 = MUL_F(FRAC_CONST(-0.5411961001461967), f156);
  1314.     f166 = f163 + f164;
  1315.     f167 = f165 - f164;
  1316.     f168 = f161 - f167;
  1317.     f169 = f161 + f167;
  1318.     f170 = f160 - f166;
  1319.     f171 = f160 + f166;
  1320.     f172 = f146 + f158;
  1321.     f173 = MUL_C(COEF_CONST(1.1758756024193588), f146);
  1322.     f174 = MUL_F(FRAC_CONST(-0.9807852804032304), f172);
  1323.     f175 = MUL_F(FRAC_CONST(-0.7856949583871021), f158);
  1324.     f176 = f173 + f174;
  1325.     f177 = f175 - f174;
  1326.     f178 = f150 + f154;
  1327.     f179 = MUL_C(COEF_CONST(1.3870398453221473), f150);
  1328.     f180 = MUL_F(FRAC_CONST(-0.8314696123025455), f178);
  1329.     f181 = MUL_F(FRAC_CONST(-0.2758993792829436), f154);
  1330.     f182 = f179 + f180;
  1331.     f183 = f181 - f180;
  1332.     f184 = f177 - f183;
  1333.     f185 = f177 + f183;
  1334.     f186 = MUL_F(FRAC_CONST(0.7071067811865476), f184);
  1335.     f187 = f176 - f182;
  1336.     f188 = f176 + f182;
  1337.     f189 = MUL_F(FRAC_CONST(0.7071067811865476), f188);
  1338.     f190 = f186 - f189;
  1339.     f191 = f186 + f189;
  1340.     f192 = f169 - f185;
  1341.     f193 = f169 + f185;
  1342.     f194 = f171 - f191;
  1343.     f195 = f171 + f191;
  1344.     f196 = f170 - f190;
  1345.     f197 = f170 + f190;
  1346.     f198 = f168 - f187;
  1347.     f199 = f168 + f187;
  1348.     f200 = MUL_F(FRAC_CONST(0.7071067811865476), f151);
  1349.     f201 = f30 - f200;
  1350.     f202 = f30 + f200;
  1351.     f203 = f155 + f147;
  1352.     f204 = MUL_C(COEF_CONST(1.3065629648763766), f155);
  1353.     f205 = MUL_F(FRAC_CONST(-0.9238795325112866), f203);
  1354.     f206 = MUL_F(FRAC_CONST(-0.5411961001461967), f147);
  1355.     f207 = f204 + f205;
  1356.     f208 = f206 - f205;
  1357.     f209 = f202 - f208;
  1358.     f210 = f202 + f208;
  1359.     f211 = f201 - f207;
  1360.     f212 = f201 + f207;
  1361.     f213 = f157 + f145;
  1362.     f214 = MUL_C(COEF_CONST(1.1758756024193588), f157);
  1363.     f215 = MUL_F(FRAC_CONST(-0.9807852804032304), f213);
  1364.     f216 = MUL_F(FRAC_CONST(-0.7856949583871021), f145);
  1365.     f217 = f214 + f215;
  1366.     f218 = f216 - f215;
  1367.     f219 = f153 + f149;
  1368.     f220 = MUL_C(COEF_CONST(1.3870398453221473), f153);
  1369.     f221 = MUL_F(FRAC_CONST(-0.8314696123025455), f219);
  1370.     f222 = MUL_F(FRAC_CONST(-0.2758993792829436), f149);
  1371.     f223 = f220 + f221;
  1372.     f224 = f222 - f221;
  1373.     f225 = f218 - f224;
  1374.     f226 = f218 + f224;
  1375.     f227 = MUL_F(FRAC_CONST(0.7071067811865476), f225);
  1376.     f228 = f217 - f223;
  1377.     f229 = f217 + f223;
  1378.     f230 = MUL_F(FRAC_CONST(0.7071067811865476), f229);
  1379.     f231 = f227 - f230;
  1380.     f232 = f227 + f230;
  1381.     f233 = f210 - f226;
  1382.     f234 = f210 + f226;
  1383.     f235 = f212 - f232;
  1384.     f236 = f212 + f232;
  1385.     f237 = f211 - f231;
  1386.     f238 = f211 + f231;
  1387.     f239 = f209 - f228;
  1388.     f240 = f209 + f228;
  1389.     f241 = f234 + f193;
  1390.     f242 = MUL_F(FRAC_CONST(-0.9497277818777543), f234);
  1391.     f243 = MUL_F(FRAC_CONST(0.9987954562051724), f241);
  1392.     f244 = MUL_C(COEF_CONST(1.0478631305325905), f193);
  1393.     y[1] = f242 + f243;
  1394.     y[31] = f244 - f243;
  1395.     f247 = f195 - f236;
  1396.     f248 = MUL_F(FRAC_CONST(-0.8424460355094192), f236);
  1397.     f249 = MUL_F(FRAC_CONST(0.9891765099647810), f247);
  1398.     f250 = MUL_C(COEF_CONST(1.1359069844201428), f195);
  1399.     y[3] = f249 - f248;
  1400.     y[29] = f250 - f249;
  1401.     f253 = f238 + f197;
  1402.     f254 = MUL_F(FRAC_CONST(-0.7270510732912801), f238);
  1403.     f255 = MUL_F(FRAC_CONST(0.9700312531945440), f253);
  1404.     f256 = MUL_C(COEF_CONST(1.2130114330978079), f197);
  1405.     y[5] = f254 + f255;
  1406.     y[27] = f256 - f255;
  1407.     f259 = f199 - f240;
  1408.     f260 = MUL_F(FRAC_CONST(-0.6046542117908007), f240);
  1409.     f261 = MUL_F(FRAC_CONST(0.9415440651830208), f259);
  1410.     f262 = MUL_C(COEF_CONST(1.2784339185752409), f199);
  1411.     y[7] = f261 - f260;
  1412.     y[25] = f262 - f261;
  1413.     f265 = f239 + f198;
  1414.     f266 = MUL_F(FRAC_CONST(-0.4764341996931611), f239);
  1415.     f267 = MUL_F(FRAC_CONST(0.9039892931234433), f265);
  1416.     f268 = MUL_C(COEF_CONST(1.3315443865537255), f198);
  1417.     y[9] = f266 + f267;
  1418.     y[23] = f268 - f267;
  1419.     f271 = f196 - f237;
  1420.     f272 = MUL_F(FRAC_CONST(-0.3436258658070505), f237);
  1421.     f273 = MUL_F(FRAC_CONST(0.8577286100002721), f271);
  1422.     f274 = MUL_C(COEF_CONST(1.3718313541934939), f196);
  1423.     y[11] = f273 - f272;
  1424.     y[21] = f274 - f273;
  1425.     f277 = f235 + f194;
  1426.     f278 = MUL_F(FRAC_CONST(-0.2075082269882114), f235);
  1427.     f279 = MUL_F(FRAC_CONST(0.8032075314806448), f277);
  1428.     f280 = MUL_C(COEF_CONST(1.3989068359730783), f194);
  1429.     y[13] = f278 + f279;
  1430.     y[19] = f280 - f279;
  1431.     f283 = f192 - f233;
  1432.     f284 = MUL_F(FRAC_CONST(-0.0693921705079408), f233);
  1433.     f285 = MUL_F(FRAC_CONST(0.7409511253549591), f283);
  1434.     f286 = MUL_C(COEF_CONST(1.4125100802019774), f192);
  1435.     y[15] = f285 - f284;
  1436.     y[17] = f286 - f285;
  1437. }
  1438. #else
  1439. #define n 32
  1440. #define log2n 5
  1441. // w_array_real[i] = cos(2*M_PI*i/32)
  1442. static const real_t w_array_real[] = {
  1443.     FRAC_CONST(1.000000000000000), FRAC_CONST(0.980785279337272),
  1444.     FRAC_CONST(0.923879528329380), FRAC_CONST(0.831469603195765),
  1445.     FRAC_CONST(0.707106765732237), FRAC_CONST(0.555570210304169),
  1446.     FRAC_CONST(0.382683402077046), FRAC_CONST(0.195090284503576),
  1447.     FRAC_CONST(0.000000000000000), FRAC_CONST(-0.195090370246552),
  1448.     FRAC_CONST(-0.382683482845162), FRAC_CONST(-0.555570282993553),
  1449.     FRAC_CONST(-0.707106827549476), FRAC_CONST(-0.831469651765257),
  1450.     FRAC_CONST(-0.923879561784627), FRAC_CONST(-0.980785296392607)
  1451. };
  1452. // w_array_imag[i] = sin(-2*M_PI*i/32)
  1453. static const real_t w_array_imag[] = {
  1454.     FRAC_CONST(0.000000000000000), FRAC_CONST(-0.195090327375064),
  1455.     FRAC_CONST(-0.382683442461104), FRAC_CONST(-0.555570246648862),
  1456.     FRAC_CONST(-0.707106796640858), FRAC_CONST(-0.831469627480512),
  1457.     FRAC_CONST(-0.923879545057005), FRAC_CONST(-0.980785287864940),
  1458.     FRAC_CONST(-1.000000000000000), FRAC_CONST(-0.980785270809601),
  1459.     FRAC_CONST(-0.923879511601754), FRAC_CONST(-0.831469578911016),
  1460.     FRAC_CONST(-0.707106734823616), FRAC_CONST(-0.555570173959476),
  1461.     FRAC_CONST(-0.382683361692986), FRAC_CONST(-0.195090241632088)
  1462. };
  1463. // FFT decimation in frequency
  1464. // 4*16*2+16=128+16=144 multiplications
  1465. // 6*16*2+10*8+4*16*2=192+80+128=400 additions
  1466. static void fft_dif(real_t * Real, real_t * Imag)
  1467. {
  1468.     real_t w_real, w_imag; // For faster access
  1469.     real_t point1_real, point1_imag, point2_real, point2_imag; // For faster access
  1470.     uint32_t j, i, i2, w_index; // Counters
  1471.     // First 2 stages of 32 point FFT decimation in frequency
  1472.     // 4*16*2=64*2=128 multiplications
  1473.     // 6*16*2=96*2=192 additions
  1474. // Stage 1 of 32 point FFT decimation in frequency
  1475.     for (i = 0; i < 16; i++)
  1476.     {
  1477.         point1_real = Real[i];
  1478.         point1_imag = Imag[i];
  1479.         i2 = i+16;
  1480.         point2_real = Real[i2];
  1481.         point2_imag = Imag[i2];
  1482.         w_real = w_array_real[i];
  1483.         w_imag = w_array_imag[i];
  1484.         // temp1 = x[i] - x[i2]
  1485.         point1_real -= point2_real;
  1486.         point1_imag -= point2_imag;
  1487.         // x[i1] = x[i] + x[i2]
  1488.         Real[i] += point2_real;
  1489.         Imag[i] += point2_imag;
  1490.         // x[i2] = (x[i] - x[i2]) * w
  1491.         Real[i2] = (MUL_F(point1_real,w_real) - MUL_F(point1_imag,w_imag));
  1492.         Imag[i2] = (MUL_F(point1_real,w_imag) + MUL_F(point1_imag,w_real));
  1493.      }
  1494.     // Stage 2 of 32 point FFT decimation in frequency
  1495.     for (j = 0, w_index = 0; j < 8; j++, w_index += 2)
  1496.     {
  1497.         w_real = w_array_real[w_index];
  1498.         w_imag = w_array_imag[w_index];
  1499.      i = j;
  1500.         point1_real = Real[i];
  1501.         point1_imag = Imag[i];
  1502.         i2 = i+8;
  1503.         point2_real = Real[i2];
  1504.         point2_imag = Imag[i2];
  1505.         // temp1 = x[i] - x[i2]
  1506.         point1_real -= point2_real;
  1507.         point1_imag -= point2_imag;
  1508.         // x[i1] = x[i] + x[i2]
  1509.         Real[i] += point2_real;
  1510.         Imag[i] += point2_imag;
  1511.         // x[i2] = (x[i] - x[i2]) * w
  1512.         Real[i2] = (MUL_F(point1_real,w_real) - MUL_F(point1_imag,w_imag));
  1513.         Imag[i2] = (MUL_F(point1_real,w_imag) + MUL_F(point1_imag,w_real));
  1514.         i = j+16;
  1515.         point1_real = Real[i];
  1516.         point1_imag = Imag[i];
  1517.         i2 = i+8;
  1518.         point2_real = Real[i2];
  1519.         point2_imag = Imag[i2];
  1520.         // temp1 = x[i] - x[i2]
  1521.         point1_real -= point2_real;
  1522.         point1_imag -= point2_imag;
  1523.         // x[i1] = x[i] + x[i2]
  1524.         Real[i] += point2_real;
  1525.         Imag[i] += point2_imag;
  1526.         // x[i2] = (x[i] - x[i2]) * w
  1527.         Real[i2] = (MUL_F(point1_real,w_real) - MUL_F(point1_imag,w_imag));
  1528.         Imag[i2] = (MUL_F(point1_real,w_imag) + MUL_F(point1_imag,w_real));
  1529.     }
  1530.     // Stage 3 of 32 point FFT decimation in frequency
  1531.     // 2*4*2=16 multiplications
  1532.     // 4*4*2+6*4*2=10*8=80 additions
  1533.     for (i = 0; i < n; i += 8)
  1534.     {
  1535.         i2 = i+4;
  1536.         point1_real = Real[i];
  1537.         point1_imag = Imag[i];
  1538.         point2_real = Real[i2];
  1539.         point2_imag = Imag[i2];
  1540.         // out[i1] = point1 + point2
  1541.         Real[i] += point2_real;
  1542.         Imag[i] += point2_imag;
  1543.         // out[i2] = point1 - point2
  1544.         Real[i2] = point1_real - point2_real;
  1545.         Imag[i2] = point1_imag - point2_imag;
  1546.     }
  1547.     w_real = w_array_real[4]; // = sqrt(2)/2
  1548.     // w_imag = -w_real; // = w_array_imag[4]; // = -sqrt(2)/2
  1549.     for (i = 1; i < n; i += 8)
  1550.     {
  1551.         i2 = i+4;
  1552.         point1_real = Real[i];
  1553.         point1_imag = Imag[i];
  1554.         point2_real = Real[i2];
  1555.         point2_imag = Imag[i2];
  1556.         // temp1 = x[i] - x[i2]
  1557.         point1_real -= point2_real;
  1558.         point1_imag -= point2_imag;
  1559.         // x[i1] = x[i] + x[i2]
  1560.         Real[i] += point2_real;
  1561.         Imag[i] += point2_imag;
  1562.         // x[i2] = (x[i] - x[i2]) * w
  1563.         Real[i2] = MUL_F(point1_real+point1_imag, w_real);
  1564.         Imag[i2] = MUL_F(point1_imag-point1_real, w_real);
  1565.     }
  1566.     for (i = 2; i < n; i += 8)
  1567.     {
  1568.         i2 = i+4;
  1569.         point1_real = Real[i];
  1570.         point1_imag = Imag[i];
  1571.         point2_real = Real[i2];
  1572.         point2_imag = Imag[i2];
  1573.         // x[i] = x[i] + x[i2]
  1574.         Real[i] += point2_real;
  1575.         Imag[i] += point2_imag;
  1576.         // x[i2] = (x[i] - x[i2]) * (-i)
  1577.         Real[i2] = point1_imag - point2_imag;
  1578.         Imag[i2] = point2_real - point1_real;
  1579.     }
  1580.     w_real = w_array_real[12]; // = -sqrt(2)/2
  1581.     // w_imag = w_real; // = w_array_imag[12]; // = -sqrt(2)/2
  1582.     for (i = 3; i < n; i += 8)
  1583.     {
  1584.         i2 = i+4;
  1585.         point1_real = Real[i];
  1586.         point1_imag = Imag[i];
  1587.         point2_real = Real[i2];
  1588.         point2_imag = Imag[i2];
  1589.         // temp1 = x[i] - x[i2]
  1590.         point1_real -= point2_real;
  1591.         point1_imag -= point2_imag;
  1592.         // x[i1] = x[i] + x[i2]
  1593.         Real[i] += point2_real;
  1594.         Imag[i] += point2_imag;
  1595.         // x[i2] = (x[i] - x[i2]) * w
  1596.         Real[i2] = MUL_F(point1_real-point1_imag, w_real);
  1597.         Imag[i2] = MUL_F(point1_real+point1_imag, w_real);
  1598.     }
  1599.     // Stage 4 of 32 point FFT decimation in frequency (no multiplications)
  1600.     // 16*4=64 additions
  1601.     for (i = 0; i < n; i += 4)
  1602.     {
  1603.         i2 = i+2;
  1604.         point1_real = Real[i];
  1605.         point1_imag = Imag[i];
  1606.         point2_real = Real[i2];
  1607.         point2_imag = Imag[i2];
  1608.         // x[i1] = x[i] + x[i2]
  1609.         Real[i] += point2_real;
  1610.         Imag[i] += point2_imag;
  1611.         // x[i2] = x[i] - x[i2]
  1612.         Real[i2] = point1_real - point2_real;
  1613.         Imag[i2] = point1_imag - point2_imag;
  1614.     }
  1615.     for (i = 1; i < n; i += 4)
  1616.     {
  1617.         i2 = i+2;
  1618.         point1_real = Real[i];
  1619.         point1_imag = Imag[i];
  1620.         point2_real = Real[i2];
  1621.         point2_imag = Imag[i2];
  1622.         // x[i] = x[i] + x[i2]
  1623.         Real[i] += point2_real;
  1624.         Imag[i] += point2_imag;
  1625.         // x[i2] = (x[i] - x[i2]) * (-i)
  1626.         Real[i2] = point1_imag - point2_imag;
  1627.         Imag[i2] = point2_real - point1_real;
  1628.     }
  1629.     // Stage 5 of 32 point FFT decimation in frequency (no multiplications)
  1630.     // 16*4=64 additions
  1631.     for (i = 0; i < n; i += 2)
  1632.     {
  1633.         i2 = i+1;
  1634.         point1_real = Real[i];
  1635.         point1_imag = Imag[i];
  1636.         point2_real = Real[i2];
  1637.         point2_imag = Imag[i2];
  1638.         // out[i1] = point1 + point2
  1639.         Real[i] += point2_real;
  1640.         Imag[i] += point2_imag;
  1641.         // out[i2] = point1 - point2
  1642.         Real[i2] = point1_real - point2_real;
  1643.         Imag[i2] = point1_imag - point2_imag;
  1644.     }
  1645. #ifdef REORDER_IN_FFT
  1646.     FFTReorder(Real, Imag);
  1647. #endif // #ifdef REORDER_IN_FFT
  1648. }
  1649. #undef n
  1650. #undef log2n
  1651. static const real_t dct4_64_tab[] = {
  1652.     COEF_CONST(0.999924719333649), COEF_CONST(0.998118102550507),
  1653.     COEF_CONST(0.993906974792480), COEF_CONST(0.987301409244537),
  1654.     COEF_CONST(0.978317379951477), COEF_CONST(0.966976463794708),
  1655.     COEF_CONST(0.953306019306183), COEF_CONST(0.937339007854462),
  1656.     COEF_CONST(0.919113874435425), COEF_CONST(0.898674488067627),
  1657.     COEF_CONST(0.876070082187653), COEF_CONST(0.851355195045471),
  1658.     COEF_CONST(0.824589252471924), COEF_CONST(0.795836925506592),
  1659.     COEF_CONST(0.765167236328125), COEF_CONST(0.732654273509979),
  1660.     COEF_CONST(0.698376238346100), COEF_CONST(0.662415742874146),
  1661.     COEF_CONST(0.624859452247620), COEF_CONST(0.585797846317291),
  1662.     COEF_CONST(0.545324981212616), COEF_CONST(0.503538429737091),
  1663.     COEF_CONST(0.460538715124130), COEF_CONST(0.416429549455643),
  1664.     COEF_CONST(0.371317148208618), COEF_CONST(0.325310230255127),
  1665.     COEF_CONST(0.278519600629807), COEF_CONST(0.231058135628700),
  1666.     COEF_CONST(0.183039888739586), COEF_CONST(0.134580686688423),
  1667.     COEF_CONST(0.085797272622585), COEF_CONST(0.036807164549828),
  1668.     COEF_CONST(-1.012196302413940), COEF_CONST(-1.059438824653626),
  1669.     COEF_CONST(-1.104129195213318), COEF_CONST(-1.146159529685974),
  1670.     COEF_CONST(-1.185428738594055), COEF_CONST(-1.221842169761658),
  1671.     COEF_CONST(-1.255311965942383), COEF_CONST(-1.285757660865784),
  1672.     COEF_CONST(-1.313105940818787), COEF_CONST(-1.337290763854981),
  1673.     COEF_CONST(-1.358253836631775), COEF_CONST(-1.375944852828980),
  1674.     COEF_CONST(-1.390321016311646), COEF_CONST(-1.401347875595093),
  1675.     COEF_CONST(-1.408998727798462), COEF_CONST(-1.413255214691162),
  1676.     COEF_CONST(-1.414107084274292), COEF_CONST(-1.411552190780640),
  1677.     COEF_CONST(-1.405596733093262), COEF_CONST(-1.396255016326904),
  1678.     COEF_CONST(-1.383549690246582), COEF_CONST(-1.367511272430420),
  1679.     COEF_CONST(-1.348178386688232), COEF_CONST(-1.325597524642944),
  1680.     COEF_CONST(-1.299823284149170), COEF_CONST(-1.270917654037476),
  1681.     COEF_CONST(-1.238950133323669), COEF_CONST(-1.203998088836670),
  1682.     COEF_CONST(-1.166145324707031), COEF_CONST(-1.125483393669128),
  1683.     COEF_CONST(-1.082109928131104), COEF_CONST(-1.036129593849182),
  1684.     COEF_CONST(-0.987653195858002), COEF_CONST(-0.936797380447388),
  1685.     COEF_CONST(-0.883684754371643), COEF_CONST(-0.828443288803101),
  1686.     COEF_CONST(-0.771206021308899), COEF_CONST(-0.712110757827759),
  1687.     COEF_CONST(-0.651300072669983), COEF_CONST(-0.588920354843140),
  1688.     COEF_CONST(-0.525121808052063), COEF_CONST(-0.460058242082596),
  1689.     COEF_CONST(-0.393886327743530), COEF_CONST(-0.326765477657318),
  1690.     COEF_CONST(-0.258857429027557), COEF_CONST(-0.190325915813446),
  1691.     COEF_CONST(-0.121335685253143), COEF_CONST(-0.052053272724152),
  1692.     COEF_CONST(0.017354607582092), COEF_CONST(0.086720645427704),
  1693.     COEF_CONST(0.155877828598022), COEF_CONST(0.224659323692322),
  1694.     COEF_CONST(0.292899727821350), COEF_CONST(0.360434412956238),
  1695.     COEF_CONST(0.427100926637650), COEF_CONST(0.492738455533981),
  1696.     COEF_CONST(0.557188928127289), COEF_CONST(0.620297133922577),
  1697.     COEF_CONST(0.681910991668701), COEF_CONST(0.741881847381592),
  1698.     COEF_CONST(0.800065577030182), COEF_CONST(0.856321990489960),
  1699.     COEF_CONST(0.910515367984772), COEF_CONST(0.962515234947205),
  1700.     COEF_CONST(1.000000000000000), COEF_CONST(0.998795449733734),
  1701.     COEF_CONST(0.995184719562531), COEF_CONST(0.989176511764526),
  1702.     COEF_CONST(0.980785250663757), COEF_CONST(0.970031261444092),
  1703.     COEF_CONST(0.956940352916718), COEF_CONST(0.941544055938721),
  1704.     COEF_CONST(0.923879504203796), COEF_CONST(0.903989315032959),
  1705.     COEF_CONST(0.881921231746674), COEF_CONST(0.857728600502014),
  1706.     COEF_CONST(0.831469595432281), COEF_CONST(0.803207516670227),
  1707.     COEF_CONST(0.773010432720184), COEF_CONST(0.740951120853424),
  1708.     COEF_CONST(0.707106769084930), COEF_CONST(0.671558916568756),
  1709.     COEF_CONST(0.634393274784088), COEF_CONST(0.595699310302734),
  1710.     COEF_CONST(0.555570185184479), COEF_CONST(0.514102697372437),
  1711.     COEF_CONST(0.471396654844284), COEF_CONST(0.427555114030838),
  1712.     COEF_CONST(0.382683426141739), COEF_CONST(0.336889833211899),
  1713.     COEF_CONST(0.290284633636475), COEF_CONST(0.242980122566223),
  1714.     COEF_CONST(0.195090234279633), COEF_CONST(0.146730497479439),
  1715.     COEF_CONST(0.098017133772373), COEF_CONST(0.049067649990320),
  1716.     COEF_CONST(-1.000000000000000), COEF_CONST(-1.047863125801086),
  1717.     COEF_CONST(-1.093201875686646), COEF_CONST(-1.135906934738159),
  1718.     COEF_CONST(-1.175875544548035), COEF_CONST(-1.213011503219605),
  1719.     COEF_CONST(-1.247225046157837), COEF_CONST(-1.278433918952942),
  1720.     COEF_CONST(-1.306562900543213), COEF_CONST(-1.331544399261475),
  1721.     COEF_CONST(-1.353317975997925), COEF_CONST(-1.371831417083740),
  1722.     COEF_CONST(-1.387039899826050), COEF_CONST(-1.398906826972961),
  1723.     COEF_CONST(-1.407403707504273), COEF_CONST(-1.412510156631470),
  1724.     COEF_CONST(0), COEF_CONST(-1.412510156631470),
  1725.     COEF_CONST(-1.407403707504273), COEF_CONST(-1.398906826972961),
  1726.     COEF_CONST(-1.387039899826050), COEF_CONST(-1.371831417083740),
  1727.     COEF_CONST(-1.353317975997925), COEF_CONST(-1.331544399261475),
  1728.     COEF_CONST(-1.306562900543213), COEF_CONST(-1.278433918952942),
  1729.     COEF_CONST(-1.247225046157837), COEF_CONST(-1.213011384010315),
  1730.     COEF_CONST(-1.175875544548035), COEF_CONST(-1.135907053947449),
  1731.     COEF_CONST(-1.093201875686646), COEF_CONST(-1.047863125801086),
  1732.     COEF_CONST(-1.000000000000000), COEF_CONST(-0.949727773666382),
  1733.     COEF_CONST(-0.897167563438416), COEF_CONST(-0.842446029186249),
  1734.     COEF_CONST(-0.785694956779480), COEF_CONST(-0.727051079273224),
  1735.     COEF_CONST(-0.666655659675598), COEF_CONST(-0.604654192924500),
  1736.     COEF_CONST(-0.541196048259735), COEF_CONST(-0.476434230804443),
  1737.     COEF_CONST(-0.410524487495422), COEF_CONST(-0.343625843524933),
  1738.     COEF_CONST(-0.275899350643158), COEF_CONST(-0.207508206367493),
  1739.     COEF_CONST(-0.138617098331451), COEF_CONST(-0.069392144680023),
  1740.     COEF_CONST(0), COEF_CONST(0.069392263889313),
  1741.     COEF_CONST(0.138617157936096), COEF_CONST(0.207508206367493),
  1742.     COEF_CONST(0.275899469852448), COEF_CONST(0.343625962734222),
  1743.     COEF_CONST(0.410524636507034), COEF_CONST(0.476434201002121),
  1744.     COEF_CONST(0.541196107864380), COEF_CONST(0.604654192924500),
  1745.     COEF_CONST(0.666655719280243), COEF_CONST(0.727051138877869),
  1746.     COEF_CONST(0.785695075988770), COEF_CONST(0.842446029186249),
  1747.     COEF_CONST(0.897167563438416), COEF_CONST(0.949727773666382)
  1748. };
  1749. /* size 64 only! */
  1750. void dct4_kernel(real_t * in_real, real_t * in_imag, real_t * out_real, real_t * out_imag)
  1751. {
  1752.     // Tables with bit reverse values for 5 bits, bit reverse of i at i-th position
  1753.     const uint8_t bit_rev_tab[32] = { 0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23,15,31 };
  1754.     uint32_t i, i_rev;
  1755.     /* Step 2: modulate */
  1756.     // 3*32=96 multiplications
  1757.     // 3*32=96 additions
  1758.     for (i = 0; i < 32; i++)
  1759.     {
  1760.      real_t x_re, x_im, tmp;
  1761.      x_re = in_real[i];
  1762.      x_im = in_imag[i];
  1763.         tmp =        MUL_C(x_re + x_im, dct4_64_tab[i]);
  1764.         in_real[i] = MUL_C(x_im, dct4_64_tab[i + 64]) + tmp;
  1765.         in_imag[i] = MUL_C(x_re, dct4_64_tab[i + 32]) + tmp;
  1766.     }
  1767.     /* Step 3: FFT, but with output in bit reverse order */
  1768.     fft_dif(in_real, in_imag);
  1769.     /* Step 4: modulate + bitreverse reordering */
  1770.     // 3*31+2=95 multiplications
  1771.     // 3*31+2=95 additions
  1772.     for (i = 0; i < 16; i++)
  1773.     {
  1774.      real_t x_re, x_im, tmp;
  1775.      i_rev = bit_rev_tab[i];
  1776.      x_re = in_real[i_rev];
  1777.      x_im = in_imag[i_rev];
  1778.         tmp =         MUL_C(x_re + x_im, dct4_64_tab[i + 3*32]);
  1779.         out_real[i] = MUL_C(x_im, dct4_64_tab[i + 5*32]) + tmp;
  1780.         out_imag[i] = MUL_C(x_re, dct4_64_tab[i + 4*32]) + tmp;
  1781.     }
  1782.     // i = 16, i_rev = 1 = rev(16);
  1783.     out_imag[16] = MUL_C(in_imag[1] - in_real[1], dct4_64_tab[16 + 3*32]);
  1784.     out_real[16] = MUL_C(in_real[1] + in_imag[1], dct4_64_tab[16 + 3*32]);
  1785.     for (i = 17; i < 32; i++)
  1786.     {
  1787.      real_t x_re, x_im, tmp;
  1788.      i_rev = bit_rev_tab[i];
  1789.      x_re = in_real[i_rev];
  1790.      x_im = in_imag[i_rev];
  1791.         tmp =         MUL_C(x_re + x_im, dct4_64_tab[i + 3*32]);
  1792.         out_real[i] = MUL_C(x_im, dct4_64_tab[i + 5*32]) + tmp;
  1793.         out_imag[i] = MUL_C(x_re, dct4_64_tab[i + 4*32]) + tmp;
  1794.     }
  1795. }
  1796. void DST4_32(real_t *y, real_t *x)
  1797. {
  1798.     real_t f0, f1, f2, f3, f4, f5, f6, f7, f8, f9;
  1799.     real_t f10, f11, f12, f13, f14, f15, f16, f17, f18, f19;
  1800.     real_t f20, f21, f22, f23, f24, f25, f26, f27, f28, f29;
  1801.     real_t f30, f31, f32, f33, f34, f35, f36, f37, f38, f39;
  1802.     real_t f40, f41, f42, f43, f44, f45, f46, f47, f48, f49;
  1803.     real_t f50, f51, f52, f53, f54, f55, f56, f57, f58, f59;
  1804.     real_t f60, f61, f62, f63, f64, f65, f66, f67, f68, f69;
  1805.     real_t f70, f71, f72, f73, f74, f75, f76, f77, f78, f79;
  1806.     real_t f80, f81, f82, f83, f84, f85, f86, f87, f88, f89;
  1807.     real_t f90, f91, f92, f93, f94, f95, f96, f97, f98, f99;
  1808.     real_t f100, f101, f102, f103, f104, f105, f106, f107, f108, f109;
  1809.     real_t f110, f111, f112, f113, f114, f115, f116, f117, f118, f119;
  1810.     real_t f120, f121, f122, f123, f124, f125, f126, f127, f128, f129;
  1811.     real_t f130, f131, f132, f133, f134, f135, f136, f137, f138, f139;
  1812.     real_t f140, f141, f142, f143, f144, f145, f146, f147, f148, f149;
  1813.     real_t f150, f151, f152, f153, f154, f155, f156, f157, f158, f159;
  1814.     real_t f160, f161, f162, f163, f164, f165, f166, f167, f168, f169;
  1815.     real_t f170, f171, f172, f173, f174, f175, f176, f177, f178, f179;
  1816.     real_t f180, f181, f182, f183, f184, f185, f186, f187, f188, f189;
  1817.     real_t f190, f191, f192, f193, f194, f195, f196, f197, f198, f199;
  1818.     real_t f200, f201, f202, f203, f204, f205, f206, f207, f208, f209;
  1819.     real_t f210, f211, f212, f213, f214, f215, f216, f217, f218, f219;
  1820.     real_t f220, f221, f222, f223, f224, f225, f226, f227, f228, f229;
  1821.     real_t f230, f231, f232, f233, f234, f235, f236, f237, f238, f239;
  1822.     real_t f240, f241, f242, f243, f244, f245, f246, f247, f248, f249;
  1823.     real_t f250, f251, f252, f253, f254, f255, f256, f257, f258, f259;
  1824.     real_t f260, f261, f262, f263, f264, f265, f266, f267, f268, f269;
  1825.     real_t f270, f271, f272, f273, f274, f275, f276, f277, f278, f279;
  1826.     real_t f280, f281, f282, f283, f284, f285, f286, f287, f288, f289;
  1827.     real_t f290, f291, f292, f293, f294, f295, f296, f297, f298, f299;
  1828.     real_t f300, f301, f302, f303, f304, f305, f306, f307, f308, f309;
  1829.     real_t f310, f311, f312, f313, f314, f315, f316, f317, f318, f319;
  1830.     real_t f320, f321, f322, f323, f324, f325, f326, f327, f328, f329;
  1831.     real_t f330, f331, f332, f333, f334, f335;
  1832.     f0 = x[0] - x[1];
  1833.     f1 = x[2] - x[1];
  1834.     f2 = x[2] - x[3];
  1835.     f3 = x[4] - x[3];
  1836.     f4 = x[4] - x[5];
  1837.     f5 = x[6] - x[5];
  1838.     f6 = x[6] - x[7];
  1839.     f7 = x[8] - x[7];
  1840.     f8 = x[8] - x[9];
  1841.     f9 = x[10] - x[9];
  1842.     f10 = x[10] - x[11];
  1843.     f11 = x[12] - x[11];
  1844.     f12 = x[12] - x[13];
  1845.     f13 = x[14] - x[13];
  1846.     f14 = x[14] - x[15];
  1847.     f15 = x[16] - x[15];
  1848.     f16 = x[16] - x[17];
  1849.     f17 = x[18] - x[17];
  1850.     f18 = x[18] - x[19];
  1851.     f19 = x[20] - x[19];
  1852.     f20 = x[20] - x[21];
  1853.     f21 = x[22] - x[21];
  1854.     f22 = x[22] - x[23];
  1855.     f23 = x[24] - x[23];
  1856.     f24 = x[24] - x[25];
  1857.     f25 = x[26] - x[25];
  1858.     f26 = x[26] - x[27];
  1859.     f27 = x[28] - x[27];
  1860.     f28 = x[28] - x[29];
  1861.     f29 = x[30] - x[29];
  1862.     f30 = x[30] - x[31];
  1863.     f31 = MUL_F(FRAC_CONST(0.7071067811865476), f15);
  1864.     f32 = x[0] - f31;
  1865.     f33 = x[0] + f31;
  1866.     f34 = f7 + f23;
  1867.     f35 = MUL_C(COEF_CONST(1.3065629648763766), f7);
  1868.     f36 = MUL_F(FRAC_CONST(-0.9238795325112866), f34);
  1869.     f37 = MUL_F(FRAC_CONST(-0.5411961001461967), f23);
  1870.     f38 = f35 + f36;
  1871.     f39 = f37 - f36;
  1872.     f40 = f33 - f39;
  1873.     f41 = f33 + f39;
  1874.     f42 = f32 - f38;
  1875.     f43 = f32 + f38;
  1876.     f44 = f11 - f19;
  1877.     f45 = f11 + f19;
  1878.     f46 = MUL_F(FRAC_CONST(0.7071067811865476), f45);
  1879.     f47 = f3 - f46;
  1880.     f48 = f3 + f46;
  1881.     f49 = MUL_F(FRAC_CONST(0.7071067811865476), f44);
  1882.     f50 = f49 - f27;
  1883.     f51 = f49 + f27;
  1884.     f52 = f51 + f48;
  1885.     f53 = MUL_F(FRAC_CONST(-0.7856949583871021), f51);
  1886.     f54 = MUL_F(FRAC_CONST(0.9807852804032304), f52);
  1887.     f55 = MUL_C(COEF_CONST(1.1758756024193588), f48);
  1888.     f56 = f53 + f54;
  1889.     f57 = f55 - f54;
  1890.     f58 = f50 + f47;
  1891.     f59 = MUL_F(FRAC_CONST(-0.2758993792829430), f50);
  1892.     f60 = MUL_F(FRAC_CONST(0.8314696123025452), f58);
  1893.     f61 = MUL_C(COEF_CONST(1.3870398453221475), f47);
  1894.     f62 = f59 + f60;
  1895.     f63 = f61 - f60;
  1896.     f64 = f41 - f56;
  1897.     f65 = f41 + f56;
  1898.     f66 = f43 - f62;
  1899.     f67 = f43 + f62;
  1900.     f68 = f42 - f63;
  1901.     f69 = f42 + f63;
  1902.     f70 = f40 - f57;
  1903.     f71 = f40 + f57;
  1904.     f72 = f5 - f9;
  1905.     f73 = f5 + f9;
  1906.     f74 = f13 - f17;
  1907.     f75 = f13 + f17;
  1908.     f76 = f21 - f25;
  1909.     f77 = f21 + f25;
  1910.     f78 = MUL_F(FRAC_CONST(0.7071067811865476), f75);
  1911.     f79 = f1 - f78;
  1912.     f80 = f1 + f78;
  1913.     f81 = f73 + f77;
  1914.     f82 = MUL_C(COEF_CONST(1.3065629648763766), f73);
  1915.     f83 = MUL_F(FRAC_CONST(-0.9238795325112866), f81);
  1916.     f84 = MUL_F(FRAC_CONST(-0.5411961001461967), f77);
  1917.     f85 = f82 + f83;
  1918.     f86 = f84 - f83;
  1919.     f87 = f80 - f86;
  1920.     f88 = f80 + f86;
  1921.     f89 = f79 - f85;
  1922.     f90 = f79 + f85;
  1923.     f91 = MUL_F(FRAC_CONST(0.7071067811865476), f74);
  1924.     f92 = f29 - f91;
  1925.     f93 = f29 + f91;
  1926.     f94 = f76 + f72;
  1927.     f95 = MUL_C(COEF_CONST(1.3065629648763766), f76);
  1928.     f96 = MUL_F(FRAC_CONST(-0.9238795325112866), f94);
  1929.     f97 = MUL_F(FRAC_CONST(-0.5411961001461967), f72);
  1930.     f98 = f95 + f96;
  1931.     f99 = f97 - f96;
  1932.     f100 = f93 - f99;
  1933.     f101 = f93 + f99;
  1934.     f102 = f92 - f98;
  1935.     f103 = f92 + f98;
  1936.     f104 = f101 + f88;
  1937.     f105 = MUL_F(FRAC_CONST(-0.8971675863426361), f101);
  1938.     f106 = MUL_F(FRAC_CONST(0.9951847266721968), f104);
  1939.     f107 = MUL_C(COEF_CONST(1.0932018670017576), f88);
  1940.     f108 = f105 + f106;
  1941.     f109 = f107 - f106;
  1942.     f110 = f90 - f103;
  1943.     f111 = MUL_F(FRAC_CONST(-0.6666556584777466), f103);
  1944.     f112 = MUL_F(FRAC_CONST(0.9569403357322089), f110);
  1945.     f113 = MUL_C(COEF_CONST(1.2472250129866713), f90);
  1946.     f114 = f112 - f111;
  1947.     f115 = f113 - f112;
  1948.     f116 = f102 + f89;
  1949.     f117 = MUL_F(FRAC_CONST(-0.4105245275223571), f102);
  1950.     f118 = MUL_F(FRAC_CONST(0.8819212643483549), f116);
  1951.     f119 = MUL_C(COEF_CONST(1.3533180011743529), f89);
  1952.     f120 = f117 + f118;
  1953.     f121 = f119 - f118;
  1954.     f122 = f87 - f100;
  1955.     f123 = MUL_F(FRAC_CONST(-0.1386171691990915), f100);
  1956.     f124 = MUL_F(FRAC_CONST(0.7730104533627370), f122);
  1957.     f125 = MUL_C(COEF_CONST(1.4074037375263826), f87);
  1958.     f126 = f124 - f123;
  1959.     f127 = f125 - f124;
  1960.     f128 = f65 - f108;
  1961.     f129 = f65 + f108;
  1962.     f130 = f67 - f114;
  1963.     f131 = f67 + f114;
  1964.     f132 = f69 - f120;
  1965.     f133 = f69 + f120;
  1966.     f134 = f71 - f126;
  1967.     f135 = f71 + f126;
  1968.     f136 = f70 - f127;
  1969.     f137 = f70 + f127;
  1970.     f138 = f68 - f121;
  1971.     f139 = f68 + f121;
  1972.     f140 = f66 - f115;
  1973.     f141 = f66 + f115;
  1974.     f142 = f64 - f109;
  1975.     f143 = f64 + f109;
  1976.     f144 = f0 + f30;
  1977.     f145 = MUL_C(COEF_CONST(1.0478631305325901), f0);
  1978.     f146 = MUL_F(FRAC_CONST(-0.9987954562051724), f144);
  1979.     f147 = MUL_F(FRAC_CONST(-0.9497277818777548), f30);
  1980.     f148 = f145 + f146;
  1981.     f149 = f147 - f146;
  1982.     f150 = f4 + f26;
  1983.     f151 = MUL_F(FRAC_CONST(1.2130114330978077), f4);
  1984.     f152 = MUL_F(FRAC_CONST(-0.9700312531945440), f150);
  1985.     f153 = MUL_F(FRAC_CONST(-0.7270510732912803), f26);
  1986.     f154 = f151 + f152;
  1987.     f155 = f153 - f152;
  1988.     f156 = f8 + f22;
  1989.     f157 = MUL_C(COEF_CONST(1.3315443865537255), f8);
  1990.     f158 = MUL_F(FRAC_CONST(-0.9039892931234433), f156);
  1991.     f159 = MUL_F(FRAC_CONST(-0.4764341996931612), f22);
  1992.     f160 = f157 + f158;
  1993.     f161 = f159 - f158;
  1994.     f162 = f12 + f18;
  1995.     f163 = MUL_C(COEF_CONST(1.3989068359730781), f12);
  1996.     f164 = MUL_F(FRAC_CONST(-0.8032075314806453), f162);
  1997.     f165 = MUL_F(FRAC_CONST(-0.2075082269882124), f18);
  1998.     f166 = f163 + f164;
  1999.     f167 = f165 - f164;
  2000.     f168 = f16 + f14;
  2001.     f169 = MUL_C(COEF_CONST(1.4125100802019777), f16);
  2002.     f170 = MUL_F(FRAC_CONST(-0.6715589548470187), f168);
  2003.     f171 = MUL_F(FRAC_CONST(0.0693921705079402), f14);
  2004.     f172 = f169 + f170;
  2005.     f173 = f171 - f170;
  2006.     f174 = f20 + f10;
  2007.     f175 = MUL_C(COEF_CONST(1.3718313541934939), f20);
  2008.     f176 = MUL_F(FRAC_CONST(-0.5141027441932219), f174);
  2009.     f177 = MUL_F(FRAC_CONST(0.3436258658070501), f10);
  2010.     f178 = f175 + f176;
  2011.     f179 = f177 - f176;
  2012.     f180 = f24 + f6;
  2013.     f181 = MUL_C(COEF_CONST(1.2784339185752409), f24);
  2014.     f182 = MUL_F(FRAC_CONST(-0.3368898533922200), f180);
  2015.     f183 = MUL_F(FRAC_CONST(0.6046542117908008), f6);
  2016.     f184 = f181 + f182;
  2017.     f185 = f183 - f182;
  2018.     f186 = f28 + f2;
  2019.     f187 = MUL_C(COEF_CONST(1.1359069844201433), f28);
  2020.     f188 = MUL_F(FRAC_CONST(-0.1467304744553624), f186);
  2021.     f189 = MUL_F(FRAC_CONST(0.8424460355094185), f2);
  2022.     f190 = f187 + f188;
  2023.     f191 = f189 - f188;
  2024.     f192 = f149 - f173;
  2025.     f193 = f149 + f173;
  2026.     f194 = f148 - f172;
  2027.     f195 = f148 + f172;
  2028.     f196 = f155 - f179;
  2029.     f197 = f155 + f179;
  2030.     f198 = f154 - f178;
  2031.     f199 = f154 + f178;
  2032.     f200 = f161 - f185;
  2033.     f201 = f161 + f185;
  2034.     f202 = f160 - f184;
  2035.     f203 = f160 + f184;
  2036.     f204 = f167 - f191;
  2037.     f205 = f167 + f191;
  2038.     f206 = f166 - f190;
  2039.     f207 = f166 + f190;
  2040.     f208 = f192 + f194;
  2041.     f209 = MUL_C(COEF_CONST(1.1758756024193588), f192);
  2042.     f210 = MUL_F(FRAC_CONST(-0.9807852804032304), f208);
  2043.     f211 = MUL_F(FRAC_CONST(-0.7856949583871021), f194);
  2044.     f212 = f209 + f210;
  2045.     f213 = f211 - f210;
  2046.     f214 = f196 + f198;
  2047.     f215 = MUL_C(COEF_CONST(1.3870398453221475), f196);
  2048.     f216 = MUL_F(FRAC_CONST(-0.5555702330196022), f214);
  2049.     f217 = MUL_F(FRAC_CONST(0.2758993792829431), f198);
  2050.     f218 = f215 + f216;
  2051.     f219 = f217 - f216;
  2052.     f220 = f200 + f202;
  2053.     f221 = MUL_F(FRAC_CONST(0.7856949583871022), f200);
  2054.     f222 = MUL_F(FRAC_CONST(0.1950903220161283), f220);
  2055.     f223 = MUL_C(COEF_CONST(1.1758756024193586), f202);
  2056.     f224 = f221 + f222;
  2057.     f225 = f223 - f222;
  2058.     f226 = f204 + f206;
  2059.     f227 = MUL_F(FRAC_CONST(-0.2758993792829430), f204);
  2060.     f228 = MUL_F(FRAC_CONST(0.8314696123025452), f226);
  2061.     f229 = MUL_C(COEF_CONST(1.3870398453221475), f206);
  2062.     f230 = f227 + f228;
  2063.     f231 = f229 - f228;
  2064.     f232 = f193 - f201;
  2065.     f233 = f193 + f201;
  2066.     f234 = f195 - f203;
  2067.     f235 = f195 + f203;
  2068.     f236 = f197 - f205;
  2069.     f237 = f197 + f205;
  2070.     f238 = f199 - f207;
  2071.     f239 = f199 + f207;
  2072.     f240 = f213 - f225;
  2073.     f241 = f213 + f225;
  2074.     f242 = f212 - f224;
  2075.     f243 = f212 + f224;
  2076.     f244 = f219 - f231;
  2077.     f245 = f219 + f231;
  2078.     f246 = f218 - f230;
  2079.     f247 = f218 + f230;
  2080.     f248 = f232 + f234;
  2081.     f249 = MUL_C(COEF_CONST(1.3065629648763766), f232);
  2082.     f250 = MUL_F(FRAC_CONST(-0.9238795325112866), f248);
  2083.     f251 = MUL_F(FRAC_CONST(-0.5411961001461967), f234);
  2084.     f252 = f249 + f250;
  2085.     f253 = f251 - f250;
  2086.     f254 = f236 + f238;
  2087.     f255 = MUL_F(FRAC_CONST(0.5411961001461969), f236);
  2088.     f256 = MUL_F(FRAC_CONST(0.3826834323650898), f254);
  2089.     f257 = MUL_C(COEF_CONST(1.3065629648763766), f238);
  2090.     f258 = f255 + f256;
  2091.     f259 = f257 - f256;
  2092.     f260 = f240 + f242;
  2093.     f261 = MUL_C(COEF_CONST(1.3065629648763766), f240);
  2094.     f262 = MUL_F(FRAC_CONST(-0.9238795325112866), f260);
  2095.     f263 = MUL_F(FRAC_CONST(-0.5411961001461967), f242);
  2096.     f264 = f261 + f262;
  2097.     f265 = f263 - f262;
  2098.     f266 = f244 + f246;
  2099.     f267 = MUL_F(FRAC_CONST(0.5411961001461969), f244);
  2100.     f268 = MUL_F(FRAC_CONST(0.3826834323650898), f266);
  2101.     f269 = MUL_C(COEF_CONST(1.3065629648763766), f246);
  2102.     f270 = f267 + f268;
  2103.     f271 = f269 - f268;
  2104.     f272 = f233 - f237;
  2105.     f273 = f233 + f237;
  2106.     f274 = f235 - f239;
  2107.     f275 = f235 + f239;
  2108.     f276 = f253 - f259;
  2109.     f277 = f253 + f259;
  2110.     f278 = f252 - f258;
  2111.     f279 = f252 + f258;
  2112.     f280 = f241 - f245;
  2113.     f281 = f241 + f245;
  2114.     f282 = f243 - f247;
  2115.     f283 = f243 + f247;
  2116.     f284 = f265 - f271;
  2117.     f285 = f265 + f271;
  2118.     f286 = f264 - f270;
  2119.     f287 = f264 + f270;
  2120.     f288 = f272 - f274;
  2121.     f289 = f272 + f274;
  2122.     f290 = MUL_F(FRAC_CONST(0.7071067811865474), f288);
  2123.     f291 = MUL_F(FRAC_CONST(0.7071067811865474), f289);
  2124.     f292 = f276 - f278;
  2125.     f293 = f276 + f278;
  2126.     f294 = MUL_F(FRAC_CONST(0.7071067811865474), f292);
  2127.     f295 = MUL_F(FRAC_CONST(0.7071067811865474), f293);
  2128.     f296 = f280 - f282;
  2129.     f297 = f280 + f282;
  2130.     f298 = MUL_F(FRAC_CONST(0.7071067811865474), f296);
  2131.     f299 = MUL_F(FRAC_CONST(0.7071067811865474), f297);
  2132.     f300 = f284 - f286;
  2133.     f301 = f284 + f286;
  2134.     f302 = MUL_F(FRAC_CONST(0.7071067811865474), f300);
  2135.     f303 = MUL_F(FRAC_CONST(0.7071067811865474), f301);
  2136.     f304 = f129 - f273;
  2137.     f305 = f129 + f273;
  2138.     f306 = f131 - f281;
  2139.     f307 = f131 + f281;
  2140.     f308 = f133 - f285;
  2141.     f309 = f133 + f285;
  2142.     f310 = f135 - f277;
  2143.     f311 = f135 + f277;
  2144.     f312 = f137 - f295;
  2145.     f313 = f137 + f295;
  2146.     f314 = f139 - f303;
  2147.     f315 = f139 + f303;
  2148.     f316 = f141 - f299;
  2149.     f317 = f141 + f299;
  2150.     f318 = f143 - f291;
  2151.     f319 = f143 + f291;
  2152.     f320 = f142 - f290;
  2153.     f321 = f142 + f290;
  2154.     f322 = f140 - f298;
  2155.     f323 = f140 + f298;
  2156.     f324 = f138 - f302;
  2157.     f325 = f138 + f302;
  2158.     f326 = f136 - f294;
  2159.     f327 = f136 + f294;
  2160.     f328 = f134 - f279;
  2161.     f329 = f134 + f279;
  2162.     f330 = f132 - f287;
  2163.     f331 = f132 + f287;
  2164.     f332 = f130 - f283;
  2165.     f333 = f130 + f283;
  2166.     f334 = f128 - f275;
  2167.     f335 = f128 + f275;
  2168.     y[31] = MUL_F(FRAC_CONST(0.5001506360206510), f305);
  2169.     y[30] = MUL_F(FRAC_CONST(0.5013584524464084), f307);
  2170.     y[29] = MUL_F(FRAC_CONST(0.5037887256810443), f309);
  2171.     y[28] = MUL_F(FRAC_CONST(0.5074711720725553), f311);
  2172.     y[27] = MUL_F(FRAC_CONST(0.5124514794082247), f313);
  2173.     y[26] = MUL_F(FRAC_CONST(0.5187927131053328), f315);
  2174.     y[25] = MUL_F(FRAC_CONST(0.5265773151542700), f317);
  2175.     y[24] = MUL_F(FRAC_CONST(0.5359098169079920), f319);
  2176.     y[23] = MUL_F(FRAC_CONST(0.5469204379855088), f321);
  2177.     y[22] = MUL_F(FRAC_CONST(0.5597698129470802), f323);
  2178.     y[21] = MUL_F(FRAC_CONST(0.5746551840326600), f325);
  2179.     y[20] = MUL_F(FRAC_CONST(0.5918185358574165), f327);
  2180.     y[19] = MUL_F(FRAC_CONST(0.6115573478825099), f329);
  2181.     y[18] = MUL_F(FRAC_CONST(0.6342389366884031), f331);
  2182.     y[17] = MUL_F(FRAC_CONST(0.6603198078137061), f333);
  2183.     y[16] = MUL_F(FRAC_CONST(0.6903721282002123), f335);
  2184.     y[15] = MUL_F(FRAC_CONST(0.7251205223771985), f334);
  2185.     y[14] = MUL_F(FRAC_CONST(0.7654941649730891), f332);
  2186.     y[13] = MUL_F(FRAC_CONST(0.8127020908144905), f330);
  2187.     y[12] = MUL_F(FRAC_CONST(0.8683447152233481), f328);
  2188.     y[11] = MUL_F(FRAC_CONST(0.9345835970364075), f326);
  2189.     y[10] = MUL_C(COEF_CONST(1.0144082649970547), f324);
  2190.     y[9] = MUL_C(COEF_CONST(1.1120716205797176), f322);
  2191.     y[8] = MUL_C(COEF_CONST(1.2338327379765710), f320);
  2192.     y[7] = MUL_C(COEF_CONST(1.3892939586328277), f318);
  2193.     y[6] = MUL_C(COEF_CONST(1.5939722833856311), f316);
  2194.     y[5] = MUL_C(COEF_CONST(1.8746759800084078), f314);
  2195.     y[4] = MUL_C(COEF_CONST(2.2820500680051619), f312);
  2196.     y[3] = MUL_C(COEF_CONST(2.9246284281582162), f310);
  2197.     y[2] = MUL_C(COEF_CONST(4.0846110781292477), f308);
  2198.     y[1] = MUL_C(COEF_CONST(6.7967507116736332), f306);
  2199.     y[0] = MUL_R(REAL_CONST(20.3738781672314530), f304);
  2200. }
  2201. #endif
  2202. #endif