ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

dct64.c
Go to the documentation of this file.
00001 /*
00002     dct64.c: DCT64, the plain C version
00003 
00004     copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1
00005     see COPYING and AUTHORS files in distribution or http://mpg123.org
00006     initially written by Michael Hipp
00007 */
00008 
00009 /*
00010  * Discrete Cosine Tansform (DCT) for subband synthesis
00011  *
00012  * -funroll-loops (for gcc) will remove the loops for better performance
00013  * using loops in the source-code enhances readabillity
00014  *
00015  *
00016  * TODO: write an optimized version for the down-sampling modes
00017  *       (in these modes the bands 16-31 (2:1) or 8-31 (4:1) are zero 
00018  */
00019 
00020 #include "mpg123lib_intern.h"
00021 
00022 void dct64(real *out0,real *out1,real *samples)
00023 {
00024   real bufs[64];
00025 
00026  {
00027   register int i,j;
00028   register real *b1,*b2,*bs,*costab;
00029 
00030   b1 = samples;
00031   bs = bufs;
00032   costab = pnts[0]+16;
00033   b2 = b1 + 32;
00034 
00035   for(i=15;i>=0;i--)
00036     *bs++ = (*b1++ + *--b2); 
00037   for(i=15;i>=0;i--)
00038     *bs++ = REAL_MUL((*--b2 - *b1++), *--costab);
00039 
00040   b1 = bufs;
00041   costab = pnts[1]+8;
00042   b2 = b1 + 16;
00043 
00044   {
00045     for(i=7;i>=0;i--)
00046       *bs++ = (*b1++ + *--b2); 
00047     for(i=7;i>=0;i--)
00048       *bs++ = REAL_MUL((*--b2 - *b1++), *--costab);
00049     b2 += 32;
00050     costab += 8;
00051     for(i=7;i>=0;i--)
00052       *bs++ = (*b1++ + *--b2); 
00053     for(i=7;i>=0;i--)
00054       *bs++ = REAL_MUL((*b1++ - *--b2), *--costab);
00055     b2 += 32;
00056   }
00057 
00058   bs = bufs;
00059   costab = pnts[2];
00060   b2 = b1 + 8;
00061 
00062   for(j=2;j;j--)
00063   {
00064     for(i=3;i>=0;i--)
00065       *bs++ = (*b1++ + *--b2); 
00066     for(i=3;i>=0;i--)
00067       *bs++ = REAL_MUL((*--b2 - *b1++), costab[i]);
00068     b2 += 16;
00069     for(i=3;i>=0;i--)
00070       *bs++ = (*b1++ + *--b2); 
00071     for(i=3;i>=0;i--)
00072       *bs++ = REAL_MUL((*b1++ - *--b2), costab[i]);
00073     b2 += 16;
00074   }
00075 
00076   b1 = bufs;
00077   costab = pnts[3];
00078   b2 = b1 + 4;
00079 
00080   for(j=4;j;j--)
00081   {
00082     *bs++ = (*b1++ + *--b2); 
00083     *bs++ = (*b1++ + *--b2);
00084     *bs++ = REAL_MUL((*--b2 - *b1++), costab[1]);
00085     *bs++ = REAL_MUL((*--b2 - *b1++), costab[0]);
00086     b2 += 8;
00087     *bs++ = (*b1++ + *--b2); 
00088     *bs++ = (*b1++ + *--b2);
00089     *bs++ = REAL_MUL((*b1++ - *--b2), costab[1]);
00090     *bs++ = REAL_MUL((*b1++ - *--b2), costab[0]);
00091     b2 += 8;
00092   }
00093   bs = bufs;
00094   costab = pnts[4];
00095 
00096   for(j=8;j;j--)
00097   {
00098     real v0,v1;
00099     v0=*b1++; v1 = *b1++;
00100     *bs++ = (v0 + v1);
00101     *bs++ = REAL_MUL((v0 - v1), (*costab));
00102     v0=*b1++; v1 = *b1++;
00103     *bs++ = (v0 + v1);
00104     *bs++ = REAL_MUL((v1 - v0), (*costab));
00105   }
00106 
00107  }
00108 
00109 
00110  {
00111   register real *b1;
00112   register int i;
00113 
00114   for(b1=bufs,i=8;i;i--,b1+=4)
00115     b1[2] += b1[3];
00116 
00117   for(b1=bufs,i=4;i;i--,b1+=8)
00118   {
00119     b1[4] += b1[6];
00120     b1[6] += b1[5];
00121     b1[5] += b1[7];
00122   }
00123 
00124   for(b1=bufs,i=2;i;i--,b1+=16)
00125   {
00126     b1[8]  += b1[12];
00127     b1[12] += b1[10];
00128     b1[10] += b1[14];
00129     b1[14] += b1[9];
00130     b1[9]  += b1[13];
00131     b1[13] += b1[11];
00132     b1[11] += b1[15];
00133   }
00134  }
00135 
00136 
00137   out0[0x10*16] = REAL_SCALE_DCT64(bufs[0]);
00138   out0[0x10*15] = REAL_SCALE_DCT64(bufs[16+0]  + bufs[16+8]);
00139   out0[0x10*14] = REAL_SCALE_DCT64(bufs[8]);
00140   out0[0x10*13] = REAL_SCALE_DCT64(bufs[16+8]  + bufs[16+4]);
00141   out0[0x10*12] = REAL_SCALE_DCT64(bufs[4]);
00142   out0[0x10*11] = REAL_SCALE_DCT64(bufs[16+4]  + bufs[16+12]);
00143   out0[0x10*10] = REAL_SCALE_DCT64(bufs[12]);
00144   out0[0x10* 9] = REAL_SCALE_DCT64(bufs[16+12] + bufs[16+2]);
00145   out0[0x10* 8] = REAL_SCALE_DCT64(bufs[2]);
00146   out0[0x10* 7] = REAL_SCALE_DCT64(bufs[16+2]  + bufs[16+10]);
00147   out0[0x10* 6] = REAL_SCALE_DCT64(bufs[10]);
00148   out0[0x10* 5] = REAL_SCALE_DCT64(bufs[16+10] + bufs[16+6]);
00149   out0[0x10* 4] = REAL_SCALE_DCT64(bufs[6]);
00150   out0[0x10* 3] = REAL_SCALE_DCT64(bufs[16+6]  + bufs[16+14]);
00151   out0[0x10* 2] = REAL_SCALE_DCT64(bufs[14]);
00152   out0[0x10* 1] = REAL_SCALE_DCT64(bufs[16+14] + bufs[16+1]);
00153   out0[0x10* 0] = REAL_SCALE_DCT64(bufs[1]);
00154 
00155   out1[0x10* 0] = REAL_SCALE_DCT64(bufs[1]);
00156   out1[0x10* 1] = REAL_SCALE_DCT64(bufs[16+1]  + bufs[16+9]);
00157   out1[0x10* 2] = REAL_SCALE_DCT64(bufs[9]);
00158   out1[0x10* 3] = REAL_SCALE_DCT64(bufs[16+9]  + bufs[16+5]);
00159   out1[0x10* 4] = REAL_SCALE_DCT64(bufs[5]);
00160   out1[0x10* 5] = REAL_SCALE_DCT64(bufs[16+5]  + bufs[16+13]);
00161   out1[0x10* 6] = REAL_SCALE_DCT64(bufs[13]);
00162   out1[0x10* 7] = REAL_SCALE_DCT64(bufs[16+13] + bufs[16+3]);
00163   out1[0x10* 8] = REAL_SCALE_DCT64(bufs[3]);
00164   out1[0x10* 9] = REAL_SCALE_DCT64(bufs[16+3]  + bufs[16+11]);
00165   out1[0x10*10] = REAL_SCALE_DCT64(bufs[11]);
00166   out1[0x10*11] = REAL_SCALE_DCT64(bufs[16+11] + bufs[16+7]);
00167   out1[0x10*12] = REAL_SCALE_DCT64(bufs[7]);
00168   out1[0x10*13] = REAL_SCALE_DCT64(bufs[16+7]  + bufs[16+15]);
00169   out1[0x10*14] = REAL_SCALE_DCT64(bufs[15]);
00170   out1[0x10*15] = REAL_SCALE_DCT64(bufs[16+15]);
00171 
00172 }
00173 
00174 

Generated on Fri May 25 2012 04:32:36 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.