Pastebin launched a little side project called HostCabi.net, check it out ;-)Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Dec 18th, 2009  |  syntax: C  |  size: 18.41 KB  |  hits: 145  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1.  
  2. <!-- saved from url=(0057)http://www.prettyprinter.de/module.php?name=PrettyPrinter -->
  3. <HTML><HEAD><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></HEAD><BODY>extern void mdct_backward(int n, int *in, int *out);
  4. extern int ff_mdct_init(MDCTContext *s, int nbits, int inverse);
  5. extern void ff_imdct_calc(MDCTContext *s, int *output, int *input);
  6. extern int mdct_init_global(void);
  7. # 85 "/home/mike/rockbox/mdct/apps/codecs/lib/codeclib.h"
  8. extern const unsigned char bs_log2_tab[256] ;
  9. extern const unsigned char bs_clz_tab[256] ;
  10. # 96 "/home/mike/rockbox/mdct/apps/codecs/lib/codeclib.h"
  11. static inline unsigned int bs_generic(unsigned int v, int mode)
  12. {
  13.         # 111 "/home/mike/rockbox/mdct/apps/codecs/lib/codeclib.h"
  14.         const unsigned char *bs_tab;
  15.         unsigned int r;
  16.         unsigned int n = v;
  17.         int inc;
  18.         if (mode &amp; 1)
  19.         {
  20.                 bs_tab = bs_clz_tab;
  21.                 r = 24;
  22.                 inc = -16;
  23.         }
  24.         else {
  25.                 bs_tab = bs_log2_tab;
  26.                 r = 0;
  27.                 inc = 16;
  28.         }
  29.         if (!(mode &amp; 2) &amp;&amp; n &gt;
  30.         = 0x10000) {
  31.                 n &gt;
  32.                 &gt;
  33.                 = 16;
  34.                 r += inc;
  35.         }
  36.         if (n &gt;
  37.         0xff) {
  38.                 n &gt;
  39.                 &gt;
  40.                 = 8;
  41.                 r += inc / 2;
  42.         }
  43.         # 145 "/home/mike/rockbox/mdct/apps/codecs/lib/codeclib.h"
  44.         n = bs_tab[n];
  45.         r += n;
  46.         if (mode &amp; 1 &amp;&amp; mode &amp; 4 &amp;&amp; v == 0)
  47.         r = 0;
  48.         return r;
  49. }
  50. int codec_init(void);
  51. void codec_set_replaygain(struct mp3entry* id3);
  52. # 36 "/home/mike/rockbox/mdct/apps/codecs/lib/fft-ffmpeg.c" 2
  53. # 44 "/home/mike/rockbox/mdct/apps/codecs/lib/fft-ffmpeg.c"
  54. static void ff_fft_permute_c(FFTContext *s, FFTComplex *z);
  55. # 55 "/home/mike/rockbox/mdct/apps/codecs/lib/fft-ffmpeg.c"
  56. int flattabs[8+16+32+64+128+256+512+1024+2048];
  57. int * tabstabstabs[] = {
  58.         flattabs, flattabs+8, flattabs+8+16,flattabs+8+16+32, flattabs+8+16+32+64,
  59.         flattabs+8+16+32+64+128, flattabs+8+16+32+64+128+256,
  60.         flattabs+8+16+32+64+128+256+512, flattabs+8+16+32+64+128+256+512+1024
  61. }
  62. ;
  63. int muls, adds;
  64. # 84 "/home/mike/rockbox/mdct/apps/codecs/lib/fft-ffmpeg.c"
  65. static FFTSample * ff_cos_16 = ((void *)0);
  66. static FFTSample * ff_cos_32 = ((void *)0);
  67. static FFTSample * ff_cos_64 = ((void *)0);
  68. static FFTSample * ff_cos_128 = ((void *)0);
  69. static FFTSample * ff_cos_256 = ((void *)0);
  70. static FFTSample * ff_cos_512 = ((void *)0);
  71. static FFTSample * ff_cos_1024 = ((void *)0);
  72. static FFTSample * ff_cos_2048 = ((void *)0);
  73. static FFTSample * ff_cos_4096 = ((void *)0);
  74. # 101 "/home/mike/rockbox/mdct/apps/codecs/lib/fft-ffmpeg.c"
  75. static FFTSample ** const ff_cos_tabs[] = {
  76.         &amp;ff_cos_16, &amp;ff_cos_32, &amp;ff_cos_64, &amp;ff_cos_128, &amp;ff_cos_256, &amp;ff_cos_512, &amp;ff_cos_1024,
  77.         &amp;ff_cos_2048, &amp;ff_cos_4096
  78. }
  79. ;
  80. unsigned short revtab[1&lt;
  81. &lt;
  82. 12];
  83. FFTComplex exptab[1&lt;
  84. &lt;
  85. 11], tmp_buf[1&lt;
  86. &lt;
  87. 12];
  88. static int split_radix_permutation(int i, int n, int inverse)
  89. {
  90.         int m;
  91.         if(n &lt;
  92.         = 2) return i&amp;1;
  93.         m = n &gt;
  94.         &gt;
  95.         1;
  96.         if(!(i&amp;m)) return split_radix_permutation(i, m, inverse)*2;
  97.         m &gt;
  98.         &gt;
  99.         = 1;
  100.         if(inverse == !(i&amp;m)) return split_radix_permutation(i, m, inverse)*4 + 1;
  101.         else return split_radix_permutation(i, m, inverse)*4 - 1;
  102. }
  103. int ff_fft_init(void *arg_s, int nbits, int inverse)
  104. {
  105.         int i, j, n;
  106.         FFTContext *s = (FFTContext *)(arg_s);
  107.         fixed32 temp, phase;
  108.         if (nbits &lt;
  109.         2 || nbits &gt;
  110.         12)
  111.         return -1;
  112.         s-&gt;
  113.         nbits = nbits;
  114.         n = 1 &lt;
  115.         &lt;
  116.         nbits;
  117.         s-&gt;
  118.         tmp_buf = ((void *)0);
  119.         s-&gt;
  120.         exptab = exptab;
  121.         s-&gt;
  122.         revtab = revtab;
  123.         s-&gt;
  124.         inverse = inverse;
  125.         s-&gt;
  126.         fft_permute = ff_fft_permute_c;
  127.         s-&gt;
  128.         fft_calc = ff_fft_calc_c;
  129.         s-&gt;
  130.         split_radix = 1;
  131.         # 152 "/home/mike/rockbox/mdct/apps/codecs/lib/fft-ffmpeg.c"
  132.         for(j=4; j&lt;=nbits; j++) {
  133.                 int m = 1&lt;
  134.                 &lt;
  135.                 j;
  136.                 FFTSample *tab = *(ff_cos_tabs[j-4]);
  137.                 if(((void *)0)==tab)
  138.                 {
  139.                         tab = tabstabstabs[j-4];
  140.                         *(ff_cos_tabs[j-4]) = tab;
  141.                         for(i=0; i&lt;=m/4; i++) {
  142.                                 phase = ((i&lt;
  143.                                 &lt;
  144.                                 16) / m)&lt;
  145.                                 &lt;
  146.                                 16;
  147.                                 fsincos(phase, &amp;temp);
  148.                                 tab[i] = temp&gt;
  149.                                 &gt;
  150.                                 15;
  151.                         }
  152.                         for(i=1; i&lt;m/4; i++)
  153.                         tab[m/2-i] = tab[i];
  154.                 }
  155.         }
  156.         for(i=0; i&lt;n; i++)
  157.         s-&gt;
  158.         revtab[-split_radix_permutation(i, n, s-&gt;
  159.         inverse) &amp; (n-1)] = i;
  160.         s-&gt;
  161.         tmp_buf = tmp_buf;
  162.         return 0;
  163. }
  164. static void ff_fft_permute_c(FFTContext *s, FFTComplex *z)
  165. {
  166.         int j, k, np;
  167.         FFTComplex tmp;
  168.         const unsigned short *revtab = s-&gt;
  169.         revtab;
  170.         np = 1 &lt;
  171.         &lt;
  172.         s-&gt;
  173.         nbits;
  174.         if (s-&gt;
  175.         tmp_buf) {
  176.                 for(j=0;j&lt;np;j++) s-&gt;tmp_buf[revtab[j]] = z[j];
  177.                 memcpy(z, s-&gt;
  178.                 tmp_buf, np * sizeof(FFTComplex));
  179.                 return;
  180.         }
  181.         for(j=0;j&lt;np;j++) {
  182.                 k = revtab[j];
  183.                 if (k &lt;
  184.                 j) {
  185.                         tmp = z[k];
  186.                         z[k] = z[j];
  187.                         z[j] = tmp;
  188.                 }
  189.         }
  190. }
  191. # 292 "/home/mike/rockbox/mdct/apps/codecs/lib/fft-ffmpeg.c"
  192. static void pass(FFTComplex *z, const FFTSample *wre, unsigned int n){
  193.         FFTSample t1, t2, t3, t4, t5, t6;
  194.         int o1 = 2*n;
  195.         int o2 = 4*n;
  196.         int o3 = 6*n;
  197.         muls += 3;
  198.         const FFTSample *wim = wre+o1;
  199.         n--;
  200.         adds += 2;
  201.         {
  202.                 t1 = z[o2].re;
  203.                 t2 = z[o2].im;
  204.                 t5 = z[o3].re;
  205.                 t6 = z[o3].im;
  206.                 {
  207.                         {
  208.                                 t3 = t5 - t1;
  209.                                 t5 = t5 + t1;
  210.                                 adds += 2;
  211.                         }
  212.                         ;
  213.                         {
  214.                                 z[o2].re = z[0].re - t5;
  215.                                 z[0].re = z[0].re + t5;
  216.                                 adds += 2;
  217.                         }
  218.                         ;
  219.                         {
  220.                                 z[o3].im = z[o1].im - t3;
  221.                                 z[o1].im = z[o1].im + t3;
  222.                                 adds += 2;
  223.                         }
  224.                         ;
  225.                         {
  226.                                 t4 = t2 - t6;
  227.                                 t6 = t2 + t6;
  228.                                 adds += 2;
  229.                         }
  230.                         ;
  231.                         {
  232.                                 z[o3].re = z[o1].re - t4;
  233.                                 z[o1].re = z[o1].re + t4;
  234.                                 adds += 2;
  235.                         }
  236.                         ;
  237.                         {
  238.                                 z[o2].im = z[0].im - t6;
  239.                                 z[0].im = z[0].im + t6;
  240.                                 adds += 2;
  241.                         }
  242.                         ;
  243.                 }
  244.         }
  245.         ;
  246.         {
  247.                 t1 = fixmul32(z[o2+1].re, wre[1]) + fixmul32(z[o2+1].im, wim[-1]);
  248.                 t2 = fixmul32(z[o2+1].im, wre[1]) - fixmul32(z[o2+1].re, wim[-1]);
  249.                 t5 = fixmul32(z[o3+1].re, wre[1]) - fixmul32(z[o3+1].im, wim[-1]);
  250.                 t6 = fixmul32(z[o3+1].im, wre[1]) + fixmul32(z[o3+1].re, wim[-1]);
  251.                 muls += 8;
  252.                 {
  253.                         {
  254.                                 t3 = t5 - t1;
  255.                                 t5 = t5 + t1;
  256.                                 adds += 2;
  257.                         }
  258.                         ;
  259.                         {
  260.                                 z[o2+1].re = z[1].re - t5;
  261.                                 z[1].re = z[1].re + t5;
  262.                                 adds += 2;
  263.                         }
  264.                         ;
  265.                         {
  266.                                 z[o3+1].im = z[o1+1].im - t3;
  267.                                 z[o1+1].im = z[o1+1].im + t3;
  268.                                 adds += 2;
  269.                         }
  270.                         ;
  271.                         {
  272.                                 t4 = t2 - t6;
  273.                                 t6 = t2 + t6;
  274.                                 adds += 2;
  275.                         }
  276.                         ;
  277.                         {
  278.                                 z[o3+1].re = z[o1+1].re - t4;
  279.                                 z[o1+1].re = z[o1+1].re + t4;
  280.                                 adds += 2;
  281.                         }
  282.                         ;
  283.                         {
  284.                                 z[o2+1].im = z[1].im - t6;
  285.                                 z[1].im = z[1].im + t6;
  286.                                 adds += 2;
  287.                         }
  288.                         ;
  289.                 }
  290.         }
  291.         ;
  292.         do {
  293.                 z += 2;
  294.                 wre += 2;
  295.                 wim -= 2;
  296.                 {
  297.                         t1 = fixmul32(z[o2].re, wre[0]) + fixmul32(z[o2].im, wim[0]);
  298.                         t2 = fixmul32(z[o2].im, wre[0]) - fixmul32(z[o2].re, wim[0]);
  299.                         t5 = fixmul32(z[o3].re, wre[0]) - fixmul32(z[o3].im, wim[0]);
  300.                         t6 = fixmul32(z[o3].im, wre[0]) + fixmul32(z[o3].re, wim[0]);
  301.                         muls += 8;
  302.                         {
  303.                                 {
  304.                                         t3 = t5 - t1;
  305.                                         t5 = t5 + t1;
  306.                                         adds += 2;
  307.                                 }
  308.                                 ;
  309.                                 {
  310.                                         z[o2].re = z[0].re - t5;
  311.                                         z[0].re = z[0].re + t5;
  312.                                         adds += 2;
  313.                                 }
  314.                                 ;
  315.                                 {
  316.                                         z[o3].im = z[o1].im - t3;
  317.                                         z[o1].im = z[o1].im + t3;
  318.                                         adds += 2;
  319.                                 }
  320.                                 ;
  321.                                 {
  322.                                         t4 = t2 - t6;
  323.                                         t6 = t2 + t6;
  324.                                         adds += 2;
  325.                                 }
  326.                                 ;
  327.                                 {
  328.                                         z[o3].re = z[o1].re - t4;
  329.                                         z[o1].re = z[o1].re + t4;
  330.                                         adds += 2;
  331.                                 }
  332.                                 ;
  333.                                 {
  334.                                         z[o2].im = z[0].im - t6;
  335.                                         z[0].im = z[0].im + t6;
  336.                                         adds += 2;
  337.                                 }
  338.                                 ;
  339.                         }
  340.                 }
  341.                 ;
  342.                 {
  343.                         t1 = fixmul32(z[o2+1].re, wre[1]) + fixmul32(z[o2+1].im, wim[-1]);
  344.                         t2 = fixmul32(z[o2+1].im, wre[1]) - fixmul32(z[o2+1].re, wim[-1]);
  345.                         t5 = fixmul32(z[o3+1].re, wre[1]) - fixmul32(z[o3+1].im, wim[-1]);
  346.                         t6 = fixmul32(z[o3+1].im, wre[1]) + fixmul32(z[o3+1].re, wim[-1]);
  347.                         muls += 8;
  348.                         {
  349.                                 {
  350.                                         t3 = t5 - t1;
  351.                                         t5 = t5 + t1;
  352.                                         adds += 2;
  353.                                 }
  354.                                 ;
  355.                                 {
  356.                                         z[o2+1].re = z[1].re - t5;
  357.                                         z[1].re = z[1].re + t5;
  358.                                         adds += 2;
  359.                                 }
  360.                                 ;
  361.                                 {
  362.                                         z[o3+1].im = z[o1+1].im - t3;
  363.                                         z[o1+1].im = z[o1+1].im + t3;
  364.                                         adds += 2;
  365.                                 }
  366.                                 ;
  367.                                 {
  368.                                         t4 = t2 - t6;
  369.                                         t6 = t2 + t6;
  370.                                         adds += 2;
  371.                                 }
  372.                                 ;
  373.                                 {
  374.                                         z[o3+1].re = z[o1+1].re - t4;
  375.                                         z[o1+1].re = z[o1+1].re + t4;
  376.                                         adds += 2;
  377.                                 }
  378.                                 ;
  379.                                 {
  380.                                         z[o2+1].im = z[1].im - t6;
  381.                                         z[1].im = z[1].im + t6;
  382.                                         adds += 2;
  383.                                 }
  384.                                 ;
  385.                         }
  386.                 }
  387.                 ;
  388.                 adds += 4;
  389.         }
  390.         while(--n);
  391. }
  392. static void pass_big(FFTComplex *z, const FFTSample *wre, unsigned int n){
  393.         FFTSample t1, t2, t3, t4, t5, t6;
  394.         int o1 = 2*n;
  395.         int o2 = 4*n;
  396.         int o3 = 6*n;
  397.         muls += 3;
  398.         const FFTSample *wim = wre+o1;
  399.         n--;
  400.         adds += 2;
  401.         {
  402.                 t1 = z[o2].re;
  403.                 t2 = z[o2].im;
  404.                 t5 = z[o3].re;
  405.                 t6 = z[o3].im;
  406.                 {
  407.                         FFTSample r0=z[0].re, i0=z[0].im, r1=z[o1].re, i1=z[o1].im;
  408.                         {
  409.                                 t3 = t5 - t1;
  410.                                 t5 = t5 + t1;
  411.                                 adds += 2;
  412.                         }
  413.                         ;
  414.                         {
  415.                                 z[o2].re = r0 - t5;
  416.                                 z[0].re = r0 + t5;
  417.                                 adds += 2;
  418.                         }
  419.                         ;
  420.                         {
  421.                                 z[o3].im = i1 - t3;
  422.                                 z[o1].im = i1 + t3;
  423.                                 adds += 2;
  424.                         }
  425.                         ;
  426.                         {
  427.                                 t4 = t2 - t6;
  428.                                 t6 = t2 + t6;
  429.                                 adds += 2;
  430.                         }
  431.                         ;
  432.                         {
  433.                                 z[o3].re = r1 - t4;
  434.                                 z[o1].re = r1 + t4;
  435.                                 adds += 2;
  436.                         }
  437.                         ;
  438.                         {
  439.                                 z[o2].im = i0 - t6;
  440.                                 z[0].im = i0 + t6;
  441.                                 adds += 2;
  442.                         }
  443.                         ;
  444.                 }
  445.         }
  446.         ;
  447.         {
  448.                 t1 = fixmul32(z[o2+1].re, wre[1]) + fixmul32(z[o2+1].im, wim[-1]);
  449.                 t2 = fixmul32(z[o2+1].im, wre[1]) - fixmul32(z[o2+1].re, wim[-1]);
  450.                 t5 = fixmul32(z[o3+1].re, wre[1]) - fixmul32(z[o3+1].im, wim[-1]);
  451.                 t6 = fixmul32(z[o3+1].im, wre[1]) + fixmul32(z[o3+1].re, wim[-1]);
  452.                 muls += 8;
  453.                 {
  454.                         FFTSample r0=z[1].re, i0=z[1].im, r1=z[o1+1].re, i1=z[o1+1].im;
  455.                         {
  456.                                 t3 = t5 - t1;
  457.                                 t5 = t5 + t1;
  458.                                 adds += 2;
  459.                         }
  460.                         ;
  461.                         {
  462.                                 z[o2+1].re = r0 - t5;
  463.                                 z[1].re = r0 + t5;
  464.                                 adds += 2;
  465.                         }
  466.                         ;
  467.                         {
  468.                                 z[o3+1].im = i1 - t3;
  469.                                 z[o1+1].im = i1 + t3;
  470.                                 adds += 2;
  471.                         }
  472.                         ;
  473.                         {
  474.                                 t4 = t2 - t6;
  475.                                 t6 = t2 + t6;
  476.                                 adds += 2;
  477.                         }
  478.                         ;
  479.                         {
  480.                                 z[o3+1].re = r1 - t4;
  481.                                 z[o1+1].re = r1 + t4;
  482.                                 adds += 2;
  483.                         }
  484.                         ;
  485.                         {
  486.                                 z[o2+1].im = i0 - t6;
  487.                                 z[1].im = i0 + t6;
  488.                                 adds += 2;
  489.                         }
  490.                         ;
  491.                 }
  492.         }
  493.         ;
  494.         do {
  495.                 z += 2;
  496.                 wre += 2;
  497.                 wim -= 2;
  498.                 {
  499.                         t1 = fixmul32(z[o2].re, wre[0]) + fixmul32(z[o2].im, wim[0]);
  500.                         t2 = fixmul32(z[o2].im, wre[0]) - fixmul32(z[o2].re, wim[0]);
  501.                         t5 = fixmul32(z[o3].re, wre[0]) - fixmul32(z[o3].im, wim[0]);
  502.                         t6 = fixmul32(z[o3].im, wre[0]) + fixmul32(z[o3].re, wim[0]);
  503.                         muls += 8;
  504.                         {
  505.                                 FFTSample r0=z[0].re, i0=z[0].im, r1=z[o1].re, i1=z[o1].im;
  506.                                 {
  507.                                         t3 = t5 - t1;
  508.                                         t5 = t5 + t1;
  509.                                         adds += 2;
  510.                                 }
  511.                                 ;
  512.                                 {
  513.                                         z[o2].re = r0 - t5;
  514.                                         z[0].re = r0 + t5;
  515.                                         adds += 2;
  516.                                 }
  517.                                 ;
  518.                                 {
  519.                                         z[o3].im = i1 - t3;
  520.                                         z[o1].im = i1 + t3;
  521.                                         adds += 2;
  522.                                 }
  523.                                 ;
  524.                                 {
  525.                                         t4 = t2 - t6;
  526.                                         t6 = t2 + t6;
  527.                                         adds += 2;
  528.                                 }
  529.                                 ;
  530.                                 {
  531.                                         z[o3].re = r1 - t4;
  532.                                         z[o1].re = r1 + t4;
  533.                                         adds += 2;
  534.                                 }
  535.                                 ;
  536.                                 {
  537.                                         z[o2].im = i0 - t6;
  538.                                         z[0].im = i0 + t6;
  539.                                         adds += 2;
  540.                                 }
  541.                                 ;
  542.                         }
  543.                 }
  544.                 ;
  545.                 {
  546.                         t1 = fixmul32(z[o2+1].re, wre[1]) + fixmul32(z[o2+1].im, wim[-1]);
  547.                         t2 = fixmul32(z[o2+1].im, wre[1]) - fixmul32(z[o2+1].re, wim[-1]);
  548.                         t5 = fixmul32(z[o3+1].re, wre[1]) - fixmul32(z[o3+1].im, wim[-1]);
  549.                         t6 = fixmul32(z[o3+1].im, wre[1]) + fixmul32(z[o3+1].re, wim[-1]);
  550.                         muls += 8;
  551.                         {
  552.                                 FFTSample r0=z[1].re, i0=z[1].im, r1=z[o1+1].re, i1=z[o1+1].im;
  553.                                 {
  554.                                         t3 = t5 - t1;
  555.                                         t5 = t5 + t1;
  556.                                         adds += 2;
  557.                                 }
  558.                                 ;
  559.                                 {
  560.                                         z[o2+1].re = r0 - t5;
  561.                                         z[1].re = r0 + t5;
  562.                                         adds += 2;
  563.                                 }
  564.                                 ;
  565.                                 {
  566.                                         z[o3+1].im = i1 - t3;
  567.                                         z[o1+1].im = i1 + t3;
  568.                                         adds += 2;
  569.                                 }
  570.                                 ;
  571.                                 {
  572.                                         t4 = t2 - t6;
  573.                                         t6 = t2 + t6;
  574.                                         adds += 2;
  575.                                 }
  576.                                 ;
  577.                                 {
  578.                                         z[o3+1].re = r1 - t4;
  579.                                         z[o1+1].re = r1 + t4;
  580.                                         adds += 2;
  581.                                 }
  582.                                 ;
  583.                                 {
  584.                                         z[o2+1].im = i0 - t6;
  585.                                         z[1].im = i0 + t6;
  586.                                         adds += 2;
  587.                                 }
  588.                                 ;
  589.                         }
  590.                 }
  591.                 ;
  592.                 adds += 4;
  593.         }
  594.         while(--n);
  595. }
  596. # 306 "/home/mike/rockbox/mdct/apps/codecs/lib/fft-ffmpeg.c"
  597. static void fft4(FFTComplex *z)
  598. {
  599.         FFTSample t1, t2, t3, t4, t5, t6, t7, t8;
  600.         {
  601.                 t3 = z[0].re - z[1].re;
  602.                 t1 = z[0].re + z[1].re;
  603.                 adds += 2;
  604.         }
  605.         ;
  606.         {
  607.                 t8 = z[3].re - z[2].re;
  608.                 t6 = z[3].re + z[2].re;
  609.                 adds += 2;
  610.         }
  611.         ;
  612.         {
  613.                 z[2].re = t1 - t6;
  614.                 z[0].re = t1 + t6;
  615.                 adds += 2;
  616.         }
  617.         ;
  618.         {
  619.                 t4 = z[0].im - z[1].im;
  620.                 t2 = z[0].im + z[1].im;
  621.                 adds += 2;
  622.         }
  623.         ;
  624.         {
  625.                 t7 = z[2].im - z[3].im;
  626.                 t5 = z[2].im + z[3].im;
  627.                 adds += 2;
  628.         }
  629.         ;
  630.         {
  631.                 z[3].im = t4 - t8;
  632.                 z[1].im = t4 + t8;
  633.                 adds += 2;
  634.         }
  635.         ;
  636.         {
  637.                 z[3].re = t3 - t7;
  638.                 z[1].re = t3 + t7;
  639.                 adds += 2;
  640.         }
  641.         ;
  642.         {
  643.                 z[2].im = t2 - t5;
  644.                 z[0].im = t2 + t5;
  645.                 adds += 2;
  646.         }
  647.         ;
  648. }
  649. static void fft8(FFTComplex *z)
  650. {
  651.         FFTSample t1, t2, t3, t4, t5, t6, t7, t8;
  652.         fft4(z);
  653.         {
  654.                 t1 = z[4].re - -z[5].re;
  655.                 z[5].re = z[4].re + -z[5].re;
  656.                 adds += 2;
  657.         }
  658.         ;
  659.         {
  660.                 t2 = z[4].im - -z[5].im;
  661.                 z[5].im = z[4].im + -z[5].im;
  662.                 adds += 2;
  663.         }
  664.         ;
  665.         {
  666.                 t3 = z[6].re - -z[7].re;
  667.                 z[7].re = z[6].re + -z[7].re;
  668.                 adds += 2;
  669.         }
  670.         ;
  671.         {
  672.                 t4 = z[6].im - -z[7].im;
  673.                 z[7].im = z[6].im + -z[7].im;
  674.                 adds += 2;
  675.         }
  676.         ;
  677.         {
  678.                 t8 = t3 - t1;
  679.                 t1 = t3 + t1;
  680.                 adds += 2;
  681.         }
  682.         ;
  683.         {
  684.                 t7 = t2 - t4;
  685.                 t2 = t2 + t4;
  686.                 adds += 2;
  687.         }
  688.         ;
  689.         {
  690.                 z[4].re = z[0].re - t1;
  691.                 z[0].re = z[0].re + t1;
  692.                 adds += 2;
  693.         }
  694.         ;
  695.         {
  696.                 z[4].im = z[0].im - t2;
  697.                 z[0].im = z[0].im + t2;
  698.                 adds += 2;
  699.         }
  700.         ;
  701.         {
  702.                 z[6].re = z[2].re - t7;
  703.                 z[2].re = z[2].re + t7;
  704.                 adds += 2;
  705.         }
  706.         ;
  707.         {
  708.                 z[6].im = z[2].im - t8;
  709.                 z[2].im = z[2].im + t8;
  710.                 adds += 2;
  711.         }
  712.         ;
  713.         {
  714.                 t3 = fixmul32(z[5].re, 0x0000b505);
  715.                 t4 = fixmul32(z[5].im, 0x0000b505);
  716.                 t7 = fixmul32(z[7].re, 0x0000b505);
  717.                 t8 = fixmul32(z[7].im, 0x0000b505);
  718.                 t1 = t3 + t4;
  719.                 t2 = t4 - t3;
  720.                 t5 = t7 - t8;
  721.                 t6 = t8 + t7;
  722.                 {
  723.                         FFTSample r0=z[1].re, i0=z[1].im, r1=z[3].re, i1=z[3].im;
  724.                         {
  725.                                 t3 = t5 - t1;
  726.                                 t5 = t5 + t1;
  727.                                 adds += 2;
  728.                         }
  729.                         ;
  730.                         {
  731.                                 z[5].re = r0 - t5;
  732.                                 z[1].re = r0 + t5;
  733.                                 adds += 2;
  734.                         }
  735.                         ;
  736.                         {
  737.                                 z[7].im = i1 - t3;
  738.                                 z[3].im = i1 + t3;
  739.                                 adds += 2;
  740.                         }
  741.                         ;
  742.                         {
  743.                                 t4 = t2 - t6;
  744.                                 t6 = t2 + t6;
  745.                                 adds += 2;
  746.                         }
  747.                         ;
  748.                         {
  749.                                 z[7].re = r1 - t4;
  750.                                 z[3].re = r1 + t4;
  751.                                 adds += 2;
  752.                         }
  753.                         ;
  754.                         {
  755.                                 z[5].im = i0 - t6;
  756.                                 z[1].im = i0 + t6;
  757.                                 adds += 2;
  758.                         }
  759.                         ;
  760.                 }
  761.         }
  762. }
  763. static void fft16(FFTComplex *z)
  764. {
  765.         FFTSample t1, t2, t3, t4, t5, t6, t7, t8;
  766.         fft8(z);
  767.         fft4(z+8);
  768.         fft4(z+12);
  769.         {
  770.                 t1 = z[8].re;
  771.                 t2 = z[8].im;
  772.                 t5 = z[12].re;
  773.                 t6 = z[12].im;
  774.                 {
  775.                         FFTSample r0=z[0].re, i0=z[0].im, r1=z[4].re, i1=z[4].im;
  776.                         {
  777.                                 t3 = t5 - t1;
  778.                                 t5 = t5 + t1;
  779.                                 adds += 2;
  780.                         }
  781.                         ;
  782.                         {
  783.                                 z[8].re = r0 - t5;
  784.                                 z[0].re = r0 + t5;
  785.                                 adds += 2;
  786.                         }
  787.                         ;
  788.                         {
  789.                                 z[12].im = i1 - t3;
  790.                                 z[4].im = i1 + t3;
  791.                                 adds += 2;
  792.                         }
  793.                         ;
  794.                         {
  795.                                 t4 = t2 - t6;
  796.                                 t6 = t2 + t6;
  797.                                 adds += 2;
  798.                         }
  799.                         ;
  800.                         {
  801.                                 z[12].re = r1 - t4;
  802.                                 z[4].re = r1 + t4;
  803.                                 adds += 2;
  804.                         }
  805.                         ;
  806.                         {
  807.                                 z[8].im = i0 - t6;
  808.                                 z[0].im = i0 + t6;
  809.                                 adds += 2;
  810.                         }
  811.                         ;
  812.                 }
  813.         }
  814.         ;
  815.         {
  816.                 t3 = fixmul32(z[10].re, 0x0000b505);
  817.                 t4 = fixmul32(z[10].im, 0x0000b505);
  818.                 t7 = fixmul32(z[14].re, 0x0000b505);
  819.                 t8 = fixmul32(z[14].im, 0x0000b505);
  820.                 t1 = t3 + t4;
  821.                 t2 = t4 - t3;
  822.                 t5 = t7 - t8;
  823.                 t6 = t8 + t7;
  824.                 {
  825.                         FFTSample r0=z[2].re, i0=z[2].im, r1=z[6].re, i1=z[6].im;
  826.                         {
  827.                                 t3 = t5 - t1;
  828.                                 t5 = t5 + t1;
  829.                                 adds += 2;
  830.                         }
  831.                         ;
  832.                         {
  833.                                 z[10].re = r0 - t5;
  834.                                 z[2].re = r0 + t5;
  835.                                 adds += 2;
  836.                         }
  837.                         ;
  838.                         {
  839.                                 z[14].im = i1 - t3;
  840.                                 z[6].im = i1 + t3;
  841.                                 adds += 2;
  842.                         }
  843.                         ;
  844.                         {
  845.                                 t4 = t2 - t6;
  846.                                 t6 = t2 + t6;
  847.                                 adds += 2;
  848.                         }
  849.                         ;
  850.                         {
  851.                                 z[14].re = r1 - t4;
  852.                                 z[6].re = r1 + t4;
  853.                                 adds += 2;
  854.                         }
  855.                         ;
  856.                         {
  857.                                 z[10].im = i0 - t6;
  858.                                 z[2].im = i0 + t6;
  859.                                 adds += 2;
  860.                         }
  861.                         ;
  862.                 }
  863.         }
  864.         ;
  865.         {
  866.                 t1 = fixmul32(z[9].re, ff_cos_16[1]) + fixmul32(z[9].im, ff_cos_16[3]);
  867.                 t2 = fixmul32(z[9].im, ff_cos_16[1]) - fixmul32(z[9].re, ff_cos_16[3]);
  868.                 t5 = fixmul32(z[13].re, ff_cos_16[1]) - fixmul32(z[13].im, ff_cos_16[3]);
  869.                 t6 = fixmul32(z[13].im, ff_cos_16[1]) + fixmul32(z[13].re, ff_cos_16[3]);
  870.                 muls += 8;
  871.                 {
  872.                         FFTSample r0=z[1].re, i0=z[1].im, r1=z[5].re, i1=z[5].im;
  873.                         {
  874.                                 t3 = t5 - t1;
  875.                                 t5 = t5 + t1;
  876.                                 adds += 2;
  877.                         }
  878.                         ;
  879.                         {
  880.                                 z[9].re = r0 - t5;
  881.                                 z[1].re = r0 + t5;
  882.                                 adds += 2;
  883.                         }
  884.                         ;
  885.                         {
  886.                                 z[13].im = i1 - t3;
  887.                                 z[5].im = i1 + t3;
  888.                                 adds += 2;
  889.                         }
  890.                         ;
  891.                         {
  892.                                 t4 = t2 - t6;
  893.                                 t6 = t2 + t6;
  894.                                 adds += 2;
  895.                         }
  896.                         ;
  897.                         {
  898.                                 z[13].re = r1 - t4;
  899.                                 z[5].re = r1 + t4;
  900.                                 adds += 2;
  901.                         }
  902.                         ;
  903.                         {
  904.                                 z[9].im = i0 - t6;
  905.                                 z[1].im = i0 + t6;
  906.                                 adds += 2;
  907.                         }
  908.                         ;
  909.                 }
  910.         }
  911.         ;
  912.         {
  913.                 t1 = fixmul32(z[11].re, ff_cos_16[3]) + fixmul32(z[11].im, ff_cos_16[1]);
  914.                 t2 = fixmul32(z[11].im, ff_cos_16[3]) - fixmul32(z[11].re, ff_cos_16[1]);
  915.                 t5 = fixmul32(z[15].re, ff_cos_16[3]) - fixmul32(z[15].im, ff_cos_16[1]);
  916.                 t6 = fixmul32(z[15].im, ff_cos_16[3]) + fixmul32(z[15].re, ff_cos_16[1]);
  917.                 muls += 8;
  918.                 {
  919.                         FFTSample r0=z[3].re, i0=z[3].im, r1=z[7].re, i1=z[7].im;
  920.                         {
  921.                                 t3 = t5 - t1;
  922.                                 t5 = t5 + t1;
  923.                                 adds += 2;
  924.                         }
  925.                         ;
  926.                         {
  927.                                 z[11].re = r0 - t5;
  928.                                 z[3].re = r0 + t5;
  929.                                 adds += 2;
  930.                         }
  931.                         ;
  932.                         {
  933.                                 z[15].im = i1 - t3;
  934.                                 z[7].im = i1 + t3;
  935.                                 adds += 2;
  936.                         }
  937.                         ;
  938.                         {
  939.                                 t4 = t2 - t6;
  940.                                 t6 = t2 + t6;
  941.                                 adds += 2;
  942.                         }
  943.                         ;
  944.                         {
  945.                                 z[15].re = r1 - t4;
  946.                                 z[7].re = r1 + t4;
  947.                                 adds += 2;
  948.                         }
  949.                         ;
  950.                         {
  951.                                 z[11].im = i0 - t6;
  952.                                 z[3].im = i0 + t6;
  953.                                 adds += 2;
  954.                         }
  955.                         ;
  956.                 }
  957.         }
  958.         ;
  959. }
  960. static void fft32(FFTComplex *z){
  961.         fft16(z);
  962.         fft8(z+8*2);
  963.         fft8(z+8*3);
  964.         pass(z,ff_cos_32,8/2);
  965. }
  966. static void fft64(FFTComplex *z){
  967.         fft32(z);
  968.         fft16(z+16*2);
  969.         fft16(z+16*3);
  970.         pass(z,ff_cos_64,16/2);
  971. }
  972. static void fft128(FFTComplex *z){
  973.         fft64(z);
  974.         fft32(z+32*2);
  975.         fft32(z+32*3);
  976.         pass(z,ff_cos_128,32/2);
  977. }
  978. static void fft256(FFTComplex *z){
  979.         fft128(z);
  980.         fft64(z+64*2);
  981.         fft64(z+64*3);
  982.         pass(z,ff_cos_256,64/2);
  983. }
  984. static void fft512(FFTComplex *z){
  985.         fft256(z);
  986.         fft128(z+128*2);
  987.         fft128(z+128*3);
  988.         pass(z,ff_cos_512,128/2);
  989. }
  990. static void fft1024(FFTComplex *z){
  991.         fft512(z);
  992.         fft256(z+256*2);
  993.         fft256(z+256*3);
  994.         pass_big(z,ff_cos_1024,256/2);
  995. }
  996. static void fft2048(FFTComplex *z){
  997.         fft1024(z);
  998.         fft512(z+512*2);
  999.         fft512(z+512*3);
  1000.         pass_big(z,ff_cos_2048,512/2);
  1001. }
  1002. static void fft4096(FFTComplex *z){
  1003.         fft2048(z);
  1004.         fft1024(z+1024*2);
  1005.         fft1024(z+1024*3);
  1006.         pass_big(z,ff_cos_4096,1024/2);
  1007. }
  1008. static void (*fft_dispatch[])(FFTComplex*) = {
  1009.         fft4, fft8, fft16, fft32, fft64, fft128, fft256, fft512, fft1024,
  1010.         fft2048, fft4096
  1011. }
  1012. ;
  1013. void ff_fft_calc_c(FFTContext *s, FFTComplex *z)
  1014. {
  1015.         fft_dispatch[s-&gt;
  1016.         nbits-2](z);
  1017. }</BODY></HTML>