dct12.c
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:4k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /*
  2.  * new DCT12
  3.  */
  4. static void dct12(real *in,real *rawout1,real *rawout2,register real *wi,register real *ts)
  5. {
  6. #define DCT12_PART1 
  7.              in5 = in[5*3];  
  8.      in5 += (in4 = in[4*3]); 
  9.      in4 += (in3 = in[3*3]); 
  10.      in3 += (in2 = in[2*3]); 
  11.      in2 += (in1 = in[1*3]); 
  12.      in1 += (in0 = in[0*3]); 
  13.                              
  14.      in5 += in3; in3 += in1; 
  15.                              
  16.      in2 *= COS6_1; 
  17.      in3 *= COS6_1; 
  18. #define DCT12_PART2 
  19.      in0 += in4 * COS6_2; 
  20.                           
  21.      in4 = in0 + in2;     
  22.      in0 -= in2;          
  23.                           
  24.      in1 += in5 * COS6_2; 
  25.                           
  26.      in5 = (in1 + in3) * tfcos12[0]; 
  27.      in1 = (in1 - in3) * tfcos12[2]; 
  28.                          
  29.      in3 = in4 + in5;    
  30.      in4 -= in5;         
  31.                          
  32.      in2 = in0 + in1;    
  33.      in0 -= in1;
  34.    {
  35.      real in0,in1,in2,in3,in4,in5;
  36.      register real *out1 = rawout1;
  37.      ts[SBLIMIT*0] = out1[0]; ts[SBLIMIT*1] = out1[1]; ts[SBLIMIT*2] = out1[2];
  38.      ts[SBLIMIT*3] = out1[3]; ts[SBLIMIT*4] = out1[4]; ts[SBLIMIT*5] = out1[5];
  39.  
  40.      DCT12_PART1
  41.      {
  42.        real tmp0,tmp1 = (in0 - in4);
  43.        {
  44.          real tmp2 = (in1 - in5) * tfcos12[1];
  45.          tmp0 = tmp1 + tmp2;
  46.          tmp1 -= tmp2;
  47.        }
  48.        ts[(17-1)*SBLIMIT] = out1[17-1] + tmp0 * wi[11-1];
  49.        ts[(12+1)*SBLIMIT] = out1[12+1] + tmp0 * wi[6+1];
  50.        ts[(6 +1)*SBLIMIT] = out1[6 +1] + tmp1 * wi[1];
  51.        ts[(11-1)*SBLIMIT] = out1[11-1] + tmp1 * wi[5-1];
  52.      }
  53.      DCT12_PART2
  54.      ts[(17-0)*SBLIMIT] = out1[17-0] + in2 * wi[11-0];
  55.      ts[(12+0)*SBLIMIT] = out1[12+0] + in2 * wi[6+0];
  56.      ts[(12+2)*SBLIMIT] = out1[12+2] + in3 * wi[6+2];
  57.      ts[(17-2)*SBLIMIT] = out1[17-2] + in3 * wi[11-2];
  58.      ts[(6+0)*SBLIMIT]  = out1[6+0] + in0 * wi[0];
  59.      ts[(11-0)*SBLIMIT] = out1[11-0] + in0 * wi[5-0];
  60.      ts[(6+2)*SBLIMIT]  = out1[6+2] + in4 * wi[2];
  61.      ts[(11-2)*SBLIMIT] = out1[11-2] + in4 * wi[5-2];
  62.   }
  63.   in++;
  64.   {
  65.      real in0,in1,in2,in3,in4,in5;
  66.      register real *out2 = rawout2;
  67.  
  68.      DCT12_PART1
  69.      {
  70.        real tmp0,tmp1 = (in0 - in4);
  71.        {
  72.          real tmp2 = (in1 - in5) * tfcos12[1];
  73.          tmp0 = tmp1 + tmp2;
  74.          tmp1 -= tmp2;
  75.        }
  76.        out2[5-1] = tmp0 * wi[11-1];
  77.        out2[0+1] = tmp0 * wi[6+1];
  78.        ts[(12+1)*SBLIMIT] += tmp1 * wi[1];
  79.        ts[(17-1)*SBLIMIT] += tmp1 * wi[5-1];
  80.      }
  81.      DCT12_PART2
  82.      out2[5-0] = in2 * wi[11-0];
  83.      out2[0+0] = in2 * wi[6+0];
  84.      out2[0+2] = in3 * wi[6+2];
  85.      out2[5-2] = in3 * wi[11-2];
  86.      ts[(12+0)*SBLIMIT] += in0 * wi[0];
  87.      ts[(17-0)*SBLIMIT] += in0 * wi[5-0];
  88.      ts[(12+2)*SBLIMIT] += in4 * wi[2];
  89.      ts[(17-2)*SBLIMIT] += in4 * wi[5-2];
  90.   }
  91.   in++; 
  92.   {
  93.      real in0,in1,in2,in3,in4,in5;
  94.      register real *out2 = rawout2;
  95.      out2[12]=out2[13]=out2[14]=out2[15]=out2[16]=out2[17]=0.0;
  96.      DCT12_PART1
  97.      {
  98.        real tmp0,tmp1 = (in0 - in4);
  99.        {
  100.          real tmp2 = (in1 - in5) * tfcos12[1];
  101.          tmp0 = tmp1 + tmp2;
  102.          tmp1 -= tmp2;
  103.        }
  104.        out2[11-1] = tmp0 * wi[11-1];
  105.        out2[6 +1] = tmp0 * wi[6+1];
  106.        out2[0+1] += tmp1 * wi[1];
  107.        out2[5-1] += tmp1 * wi[5-1];
  108.      }
  109.      DCT12_PART2
  110.      out2[11-0] = in2 * wi[11-0];
  111.      out2[6 +0] = in2 * wi[6+0];
  112.      out2[6 +2] = in3 * wi[6+2];
  113.      out2[11-2] = in3 * wi[11-2];
  114.      out2[0+0] += in0 * wi[0];
  115.      out2[5-0] += in0 * wi[5-0];
  116.      out2[0+2] += in4 * wi[2];
  117.      out2[5-2] += in4 * wi[5-2];
  118.   }
  119. }