Layer3.cpp
上传用户:hxb_1234
上传日期:2010-03-30
资源大小:8328k
文件大小:40k
源码类别:

VC书籍

开发平台:

Visual C++

  1. #include <stdlib.h>
  2. #include <windows.h>
  3. #include "mpg123.h"
  4. #include "mpglib.h"
  5. #include "huffman.h"
  6. extern struct mpstr *gmp;
  7. static real ispow[8207];
  8. static real aa_ca[8],aa_cs[8];
  9. static real COS1[12][6];
  10. static real win[4][36];
  11. static real win1[4][36];
  12. static real gainpow2[256+118+4];
  13. static real COS9[9];
  14. static real COS6_1,COS6_2;
  15. static real tfcos36[9];
  16. static real tfcos12[3];
  17. struct bandInfoStruct {
  18.   short longIdx[23];
  19.   short longDiff[22];
  20.   short shortIdx[14];
  21.   short shortDiff[13];
  22. };
  23. int longLimit[9][23];
  24. int shortLimit[9][14];
  25. struct bandInfoStruct bandInfo[9] = { 
  26.  { {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576},
  27.    {4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158},
  28.    {0,4*3,8*3,12*3,16*3,22*3,30*3,40*3,52*3,66*3, 84*3,106*3,136*3,192*3},
  29.    {4,4,4,4,6,8,10,12,14,18,22,30,56} } ,
  30.  { {0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576},
  31.    {4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192},
  32.    {0,4*3,8*3,12*3,16*3,22*3,28*3,38*3,50*3,64*3, 80*3,100*3,126*3,192*3},
  33.    {4,4,4,4,6,6,10,12,14,16,20,26,66} } ,
  34.  { {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576} ,
  35.    {4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26} ,
  36.    {0,4*3,8*3,12*3,16*3,22*3,30*3,42*3,58*3,78*3,104*3,138*3,180*3,192*3} ,
  37.    {4,4,4,4,6,8,12,16,20,26,34,42,12} }  ,
  38.  { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
  39.    {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } ,
  40.    {0,4*3,8*3,12*3,18*3,24*3,32*3,42*3,56*3,74*3,100*3,132*3,174*3,192*3} ,
  41.    {4,4,4,6,6,8,10,14,18,26,32,42,18 } } ,
  42.  { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576},
  43.    {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,52,64,70,76,36 } ,
  44.    {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,136*3,180*3,192*3} ,
  45.    {4,4,4,6,8,10,12,14,18,24,32,44,12 } } ,
  46.  { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
  47.    {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 },
  48.    {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,134*3,174*3,192*3},
  49.    {4,4,4,6,8,10,12,14,18,24,30,40,18 } } ,
  50.  { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
  51.    {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
  52.    {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
  53.    {4,4,4,6,8,10,12,14,18,24,30,40,18} },
  54.  { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
  55.    {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
  56.    {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
  57.    {4,4,4,6,8,10,12,14,18,24,30,40,18} },
  58.  { {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576},
  59.    {12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2},
  60.    {0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576},
  61.    {8,8,8,12,16,20,24,28,36,2,2,2,26} } ,
  62. };
  63. static int mapbuf0[9][152];
  64. static int mapbuf1[9][156];
  65. static int mapbuf2[9][44];
  66. static int *map[9][3];
  67. static int *mapend[9][3];
  68. static unsigned int n_slen2[512]; 
  69. static unsigned int i_slen2[256]; 
  70. static real tan1_1[16],tan2_1[16],tan1_2[16],tan2_2[16];
  71. static real pow1_1[2][16],pow2_1[2][16],pow1_2[2][16],pow2_2[2][16];
  72. void init_layer3(int down_sample_sblimit)
  73. {
  74.   int i,j,k,l;
  75.   for(i=-256;i<118+4;i++)
  76.     gainpow2[i+256] = pow((double)2.0,-0.25 * (double) (i+210) );
  77.   for(i=0;i<8207;i++)
  78.     ispow[i] = pow((double)i,(double)4.0/3.0);
  79.   for (i=0;i<8;i++)
  80.   {
  81.     static double Ci[8]={-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037};
  82.     double sq=sqrt(1.0+Ci[i]*Ci[i]);
  83.     aa_cs[i] = 1.0/sq;
  84.     aa_ca[i] = Ci[i]/sq;
  85.   }
  86.   for(i=0;i<18;i++)
  87.   {
  88.     win[0][i]    = win[1][i]    = 0.5 * sin( M_PI / 72.0 * (double) (2*(i+0) +1) ) / cos ( M_PI * (double) (2*(i+0) +19) / 72.0 );
  89.     win[0][i+18] = win[3][i+18] = 0.5 * sin( M_PI / 72.0 * (double) (2*(i+18)+1) ) / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 );
  90.   }
  91.   for(i=0;i<6;i++)
  92.   {
  93.     win[1][i+18] = 0.5 / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 );
  94.     win[3][i+12] = 0.5 / cos ( M_PI * (double) (2*(i+12)+19) / 72.0 );
  95.     win[1][i+24] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+13) ) / cos ( M_PI * (double) (2*(i+24)+19) / 72.0 );
  96.     win[1][i+30] = win[3][i] = 0.0;
  97.     win[3][i+6 ] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+1) )  / cos ( M_PI * (double) (2*(i+6 )+19) / 72.0 );
  98.   }
  99.   for(i=0;i<9;i++)
  100.     COS9[i] = cos( M_PI / 18.0 * (double) i);
  101.   for(i=0;i<9;i++)
  102.     tfcos36[i] = 0.5 / cos ( M_PI * (double) (i*2+1) / 36.0 );
  103.   for(i=0;i<3;i++)
  104.     tfcos12[i] = 0.5 / cos ( M_PI * (double) (i*2+1) / 12.0 );
  105.   COS6_1 = cos( M_PI / 6.0 * (double) 1);
  106.   COS6_2 = cos( M_PI / 6.0 * (double) 2);
  107.   for(i=0;i<12;i++)
  108.   {
  109.     win[2][i]  = 0.5 * sin( M_PI / 24.0 * (double) (2*i+1) ) / cos ( M_PI * (double) (2*i+7) / 24.0 );
  110.     for(j=0;j<6;j++)
  111.       COS1[i][j] = cos( M_PI / 24.0 * (double) ((2*i+7)*(2*j+1)) );
  112.   }
  113.   for(j=0;j<4;j++) {
  114.     static int len[4] = { 36,36,12,36 };
  115.     for(i=0;i<len[j];i+=2)
  116.       win1[j][i] = + win[j][i];
  117.     for(i=1;i<len[j];i+=2)
  118.       win1[j][i] = - win[j][i];
  119.   }
  120.   for(i=0;i<16;i++)
  121.   {
  122.     double t = tan( (double) i * M_PI / 12.0 );
  123.     tan1_1[i] = t / (1.0+t);
  124.     tan2_1[i] = 1.0 / (1.0 + t);
  125.     tan1_2[i] = M_SQRT2 * t / (1.0+t);
  126.     tan2_2[i] = M_SQRT2 / (1.0 + t);
  127.     for(j=0;j<2;j++) {
  128.       double base = pow(2.0,-0.25*(j+1.0));
  129.       double p1=1.0,p2=1.0;
  130.       if(i > 0) {
  131.         if( i & 1 )
  132.           p1 = pow(base,(i+1.0)*0.5);
  133.         else
  134.           p2 = pow(base,i*0.5);
  135.       }
  136.       pow1_1[j][i] = p1;
  137.       pow2_1[j][i] = p2;
  138.       pow1_2[j][i] = M_SQRT2 * p1;
  139.       pow2_2[j][i] = M_SQRT2 * p2;
  140.     }
  141.   }
  142.   for(j=0;j<9;j++)
  143.   {
  144.    struct bandInfoStruct *bi = &bandInfo[j];
  145.    int *mp;
  146.    int cb,lwin;
  147.    short *bdf;
  148.    mp = map[j][0] = mapbuf0[j];
  149.    bdf = bi->longDiff;
  150.    for(i=0,cb = 0; cb < 8 ; cb++,i+=*bdf++) {
  151.      *mp++ = (*bdf) >> 1;
  152.      *mp++ = i;
  153.      *mp++ = 3;
  154.      *mp++ = cb;
  155.    }
  156.    bdf = bi->shortDiff+3;
  157.    for(cb=3;cb<13;cb++) {
  158.      int l = (*bdf++) >> 1;
  159.      for(lwin=0;lwin<3;lwin++) {
  160.        *mp++ = l;
  161.        *mp++ = i + lwin;
  162.        *mp++ = lwin;
  163.        *mp++ = cb;
  164.      }
  165.      i += 6*l;
  166.    }
  167.    mapend[j][0] = mp;
  168.    mp = map[j][1] = mapbuf1[j];
  169.    bdf = bi->shortDiff+0;
  170.    for(i=0,cb=0;cb<13;cb++) {
  171.      int l = (*bdf++) >> 1;
  172.      for(lwin=0;lwin<3;lwin++) {
  173.        *mp++ = l;
  174.        *mp++ = i + lwin;
  175.        *mp++ = lwin;
  176.        *mp++ = cb;
  177.      }
  178.      i += 6*l;
  179.    }
  180.    mapend[j][1] = mp;
  181.    mp = map[j][2] = mapbuf2[j];
  182.    bdf = bi->longDiff;
  183.    for(cb = 0; cb < 22 ; cb++) {
  184.      *mp++ = (*bdf++) >> 1;
  185.      *mp++ = cb;
  186.    }
  187.    mapend[j][2] = mp;
  188.   }
  189.   for(j=0;j<9;j++) {
  190.     for(i=0;i<23;i++) {
  191.       longLimit[j][i] = (bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1;
  192.       if(longLimit[j][i] > (down_sample_sblimit) )
  193.         longLimit[j][i] = down_sample_sblimit;
  194.     }
  195.     for(i=0;i<14;i++) {
  196.       shortLimit[j][i] = (bandInfo[j].shortIdx[i] - 1) / 18 + 1;
  197.       if(shortLimit[j][i] > (down_sample_sblimit) )
  198.         shortLimit[j][i] = down_sample_sblimit;
  199.     }
  200.   }
  201.   for(i=0;i<5;i++) {
  202.     for(j=0;j<6;j++) {
  203.       for(k=0;k<6;k++) {
  204.         int n = k + j * 6 + i * 36;
  205.         i_slen2[n] = i|(j<<3)|(k<<6)|(3<<12);
  206.       }
  207.     }
  208.   }
  209.   for(i=0;i<4;i++) {
  210.     for(j=0;j<4;j++) {
  211.       for(k=0;k<4;k++) {
  212.         int n = k + j * 4 + i * 16;
  213.         i_slen2[n+180] = i|(j<<3)|(k<<6)|(4<<12);
  214.       }
  215.     }
  216.   }
  217.   for(i=0;i<4;i++) {
  218.     for(j=0;j<3;j++) {
  219.       int n = j + i * 3;
  220.       i_slen2[n+244] = i|(j<<3) | (5<<12);
  221.       n_slen2[n+500] = i|(j<<3) | (2<<12) | (1<<15);
  222.     }
  223.   }
  224.   for(i=0;i<5;i++) {
  225.     for(j=0;j<5;j++) {
  226.       for(k=0;k<4;k++) {
  227.         for(l=0;l<4;l++) {
  228.           int n = l + k * 4 + j * 16 + i * 80;
  229.           n_slen2[n] = i|(j<<3)|(k<<6)|(l<<9)|(0<<12);
  230.         }
  231.       }
  232.     }
  233.   }
  234.   for(i=0;i<5;i++) {
  235.     for(j=0;j<5;j++) {
  236.       for(k=0;k<4;k++) {
  237.         int n = k + j * 4 + i * 20;
  238.         n_slen2[n+400] = i|(j<<3)|(k<<6)|(1<<12);
  239.       }
  240.     }
  241.   }
  242. }
  243. static void III_get_side_info_1(struct III_sideinfo *si,int stereo,
  244.  int ms_stereo,long sfreq,int single)
  245. {
  246.    int ch, gr;
  247.    int powdiff = (single == 3) ? 4 : 0;
  248.    si->main_data_begin = getbits(9);
  249.    if (stereo == 1)
  250.      si->private_bits = getbits_fast(5);
  251.    else 
  252.      si->private_bits = getbits_fast(3);
  253.    for (ch=0; ch<stereo; ch++) {
  254.        si->ch[ch].gr[0].scfsi = -1;
  255.        si->ch[ch].gr[1].scfsi = getbits_fast(4);
  256.    }
  257.    for (gr=0; gr<2; gr++) 
  258.    {
  259.      for (ch=0; ch<stereo; ch++) 
  260.      {
  261.        register struct gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
  262.        gr_info->part2_3_length = getbits(12);
  263.        gr_info->big_values = getbits_fast(9);
  264.        if(gr_info->big_values > 288) {
  265.           gr_info->big_values = 288;
  266.        }
  267.        gr_info->pow2gain = gainpow2+256 - getbits_fast(8) + powdiff;
  268.        if(ms_stereo)
  269.          gr_info->pow2gain += 2;
  270.        gr_info->scalefac_compress = getbits_fast(4);
  271.        if(get1bit()) 
  272.        {
  273.          int i;
  274.          gr_info->block_type = getbits_fast(2);
  275.          gr_info->mixed_block_flag = get1bit();
  276.          gr_info->table_select[0] = getbits_fast(5);
  277.          gr_info->table_select[1] = getbits_fast(5);
  278.          gr_info->table_select[2] = 0;
  279.          for(i=0;i<3;i++)
  280.            gr_info->full_gain[i] = gr_info->pow2gain + (getbits_fast(3)<<3);
  281.          if(gr_info->block_type == 0) {
  282.    return;
  283.          }
  284.        
  285.          gr_info->region1start = 36>>1;
  286.          gr_info->region2start = 576>>1;
  287.        }
  288.        else 
  289.        {
  290.          int i,r0c,r1c;
  291.          for (i=0; i<3; i++)
  292.            gr_info->table_select[i] = getbits_fast(5);
  293.          r0c = getbits_fast(4);
  294.          r1c = getbits_fast(3);
  295.          gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ;
  296.          gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1;
  297.          gr_info->block_type = 0;
  298.          gr_info->mixed_block_flag = 0;
  299.        }
  300.        gr_info->preflag = get1bit();
  301.        gr_info->scalefac_scale = get1bit();
  302.        gr_info->count1table_select = get1bit();
  303.      }
  304.    }
  305. }
  306. static void III_get_side_info_2(struct III_sideinfo *si,int stereo,
  307.  int ms_stereo,long sfreq,int single)
  308. {
  309.    int ch;
  310.    int powdiff = (single == 3) ? 4 : 0;
  311.    si->main_data_begin = getbits(8);
  312.    if (stereo == 1)
  313.      si->private_bits = get1bit();
  314.    else 
  315.      si->private_bits = getbits_fast(2);
  316.    for (ch=0; ch<stereo; ch++) 
  317.    {
  318.        register struct gr_info_s *gr_info = &(si->ch[ch].gr[0]);
  319.        gr_info->part2_3_length = getbits(12);
  320.        gr_info->big_values = getbits_fast(9);
  321.        if(gr_info->big_values > 288) {
  322.  gr_info->big_values = 288;
  323.        }
  324.        gr_info->pow2gain = gainpow2+256 - getbits_fast(8) + powdiff;
  325.        if(ms_stereo)
  326.          gr_info->pow2gain += 2;
  327.        gr_info->scalefac_compress = getbits(9);
  328.        if(get1bit()) 
  329.        {
  330.          int i;
  331.          gr_info->block_type = getbits_fast(2);
  332.          gr_info->mixed_block_flag = get1bit();
  333.          gr_info->table_select[0] = getbits_fast(5);
  334.          gr_info->table_select[1] = getbits_fast(5);
  335.          /*
  336.           * table_select[2] not needed, because there is no region2,
  337.           * but to satisfy some verifications tools we set it either.
  338.           */
  339.          gr_info->table_select[2] = 0;
  340.          for(i=0;i<3;i++)
  341.            gr_info->full_gain[i] = gr_info->pow2gain + (getbits_fast(3)<<3);
  342.          if(gr_info->block_type == 0) {
  343.            return;
  344.          }
  345.          if(gr_info->block_type == 2)
  346.            gr_info->region1start = 36>>1;
  347.          else if(sfreq == 8)
  348.            gr_info->region1start = 108>>1;
  349.          else
  350.            gr_info->region1start = 54>>1;
  351.          gr_info->region2start = 576>>1;
  352.        }
  353.        else 
  354.        {
  355.          int i,r0c,r1c;
  356.          for (i=0; i<3; i++)
  357.            gr_info->table_select[i] = getbits_fast(5);
  358.          r0c = getbits_fast(4);
  359.          r1c = getbits_fast(3);
  360.          gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ;
  361.          gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1;
  362.          gr_info->block_type = 0;
  363.          gr_info->mixed_block_flag = 0;
  364.        }
  365.        gr_info->scalefac_scale = get1bit();
  366.        gr_info->count1table_select = get1bit();
  367.    }
  368. }
  369. static int III_get_scale_factors_1(int *scf,struct gr_info_s *gr_info)
  370. {
  371.    static const unsigned char slen[2][16] = {
  372.      {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
  373.      {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}
  374.    };
  375.    int numbits;
  376.    int num0 = slen[0][gr_info->scalefac_compress];
  377.    int num1 = slen[1][gr_info->scalefac_compress];
  378.     if (gr_info->block_type == 2) {
  379.       int i=18;
  380.       numbits = (num0 + num1) * 18;
  381.       if (gr_info->mixed_block_flag) {
  382.          for (i=8;i;i--)
  383.            *scf++ = getbits_fast(num0);
  384.          i = 9;
  385.          numbits -= num0; 
  386.       }
  387.       for (;i;i--)
  388.         *scf++ = getbits_fast(num0);
  389.       for (i = 18; i; i--)
  390.         *scf++ = getbits_fast(num1);
  391.       *scf++ = 0; *scf++ = 0; *scf++ = 0; 
  392.     }
  393.     else {
  394.       int i;
  395.       int scfsi = gr_info->scfsi;
  396.       if(scfsi < 0) { 
  397.          for(i=11;i;i--)
  398.            *scf++ = getbits_fast(num0);
  399.          for(i=10;i;i--)
  400.            *scf++ = getbits_fast(num1);
  401.          numbits = (num0 + num1) * 10 + num0;
  402.          *scf++ = 0;
  403.       }
  404.       else {
  405.         numbits = 0;
  406.         if(!(scfsi & 0x8)) {
  407.           for (i=0;i<6;i++)
  408.             *scf++ = getbits_fast(num0);
  409.           numbits += num0 * 6;
  410.         }
  411.         else {
  412.           scf += 6; 
  413.         }
  414.         if(!(scfsi & 0x4)) {
  415.           for (i=0;i<5;i++)
  416.             *scf++ = getbits_fast(num0);
  417.           numbits += num0 * 5;
  418.         }
  419.         else {
  420.           scf += 5;
  421.         }
  422.         if(!(scfsi & 0x2)) {
  423.           for(i=0;i<5;i++)
  424.             *scf++ = getbits_fast(num1);
  425.           numbits += num1 * 5;
  426.         }
  427.         else {
  428.           scf += 5; 
  429.         }
  430.         if(!(scfsi & 0x1)) {
  431.           for (i=0;i<5;i++)
  432.             *scf++ = getbits_fast(num1);
  433.           numbits += num1 * 5;
  434.         }
  435.         else {
  436.            scf += 5;
  437.         }
  438.         *scf++ = 0;  
  439.       }
  440.     }
  441.     return numbits;
  442. }
  443. /**
  444.  *
  445.  **/
  446. static int III_get_scale_factors_2(int *scf,struct gr_info_s *gr_info,int i_stereo)
  447. {
  448.   unsigned char *pnt;
  449.   int i,j;
  450.   unsigned int slen;
  451.   int n = 0;
  452.   int numbits = 0;
  453.   static unsigned char stab[3][6][4] = {
  454.    { { 6, 5, 5,5 } , { 6, 5, 7,3 } , { 11,10,0,0} ,
  455.      { 7, 7, 7,0 } , { 6, 6, 6,3 } , {  8, 8,5,0} } ,
  456.    { { 9, 9, 9,9 } , { 9, 9,12,6 } , { 18,18,0,0} ,
  457.      {12,12,12,0 } , {12, 9, 9,6 } , { 15,12,9,0} } ,
  458.    { { 6, 9, 9,9 } , { 6, 9,12,6 } , { 15,18,0,0} ,
  459.      { 6,15,12,0 } , { 6,12, 9,6 } , {  6,18,9,0} } }; 
  460.   if(i_stereo) 
  461.     slen = i_slen2[gr_info->scalefac_compress>>1];
  462.   else
  463.     slen = n_slen2[gr_info->scalefac_compress];
  464.   gr_info->preflag = (slen>>15) & 0x1;
  465.   n = 0;  
  466.   if( gr_info->block_type == 2 ) {
  467.     n++;
  468.     if(gr_info->mixed_block_flag)
  469.       n++;
  470.   }
  471.   pnt = stab[n][(slen>>12)&0x7];
  472.   for(i=0;i<4;i++) {
  473.     int num = slen & 0x7;
  474.     slen >>= 3;
  475.     if(num) {
  476.       for(j=0;j<(int)(pnt[i]);j++)
  477.         *scf++ = getbits_fast(num);
  478.       numbits += pnt[i] * num;
  479.     }
  480.     else {
  481.       for(j=0;j<(int)(pnt[i]);j++)
  482.         *scf++ = 0;
  483.     }
  484.   }
  485.   
  486.   n = (n << 1) + 1;
  487.   for(i=0;i<n;i++)
  488.     *scf++ = 0;
  489.   return numbits;
  490. }
  491. static int pretab1[22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0};
  492. static int pretab2[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  493. /**
  494.  *
  495.  **/
  496. static int III_dequantize_sample(real xr[SBLIMIT][SSLIMIT],int *scf,
  497.    struct gr_info_s *gr_info,int sfreq,int part2bits)
  498. {
  499.   int shift = 1 + gr_info->scalefac_scale;
  500.   real *xrpnt = (real *) xr;
  501.   int l[3],l3;
  502.   int part2remain = gr_info->part2_3_length - part2bits;
  503.   int *me;
  504.   {
  505.     int bv       = gr_info->big_values;
  506.     int region1  = gr_info->region1start;
  507.     int region2  = gr_info->region2start;
  508.     l3 = ((576>>1)-bv)>>1;   
  509.     if(bv <= region1) {
  510.       l[0] = bv; l[1] = 0; l[2] = 0;
  511.     }
  512.     else {
  513.       l[0] = region1;
  514.       if(bv <= region2) {
  515.         l[1] = bv - l[0];  l[2] = 0;
  516.       }
  517.       else {
  518.         l[1] = region2 - l[0]; l[2] = bv - region2;
  519.       }
  520.     }
  521.   }
  522.  
  523.   if(gr_info->block_type == 2) {
  524.   
  525. int i,max[4];
  526.     int step=0,lwin=0,cb=0;
  527.     register real v = 0.0;
  528.     register int *m,mc;
  529.     if(gr_info->mixed_block_flag) {
  530.       max[3] = -1;
  531.       max[0] = max[1] = max[2] = 2;
  532.       m = map[sfreq][0];
  533.       me = mapend[sfreq][0];
  534.     }
  535.     else {
  536.       max[0] = max[1] = max[2] = max[3] = -1;
  537.       m = map[sfreq][1];
  538.       me = mapend[sfreq][1];
  539.     }
  540.     mc = 0;
  541.     for(i=0;i<2;i++) {
  542.       int lp = l[i];
  543.       struct newhuff *h = ht+gr_info->table_select[i];
  544.       for(;lp;lp--,mc--) {
  545.         register int x,y;
  546.         if( (!mc) ) {
  547.           mc = *m++;
  548.           xrpnt = ((real *) xr) + (*m++);
  549.           lwin = *m++;
  550.           cb = *m++;
  551.           if(lwin == 3) {
  552.             v = gr_info->pow2gain[(*scf++) << shift];
  553.             step = 1;
  554.           }
  555.           else {
  556.             v = gr_info->full_gain[lwin][(*scf++) << shift];
  557.             step = 3;
  558.           }
  559.         }
  560.         {
  561.           register short *val = h->table;
  562.           while((y=*val++)<0) {
  563.             if (get1bit())
  564.               val -= y;
  565.             part2remain--;
  566.           }
  567.           x = y >> 4;
  568.           y &= 0xf;
  569.         }
  570.         if(x == 15) {
  571.           max[lwin] = cb;
  572.           part2remain -= h->linbits+1;
  573.           x += getbits(h->linbits);
  574.           if(get1bit())
  575.             *xrpnt = -ispow[x] * v;
  576.           else
  577.             *xrpnt =  ispow[x] * v;
  578.         }
  579.         else if(x) {
  580.           max[lwin] = cb;
  581.           if(get1bit())
  582.             *xrpnt = -ispow[x] * v;
  583.           else
  584.             *xrpnt =  ispow[x] * v;
  585.           part2remain--;
  586.         }
  587.         else
  588.           *xrpnt = 0.0;
  589.         xrpnt += step;
  590.         if(y == 15) {
  591.           max[lwin] = cb;
  592.           part2remain -= h->linbits+1;
  593.           y += getbits(h->linbits);
  594.           if(get1bit())
  595.             *xrpnt = -ispow[y] * v;
  596.           else
  597.             *xrpnt =  ispow[y] * v;
  598.         }
  599.         else if(y) {
  600.           max[lwin] = cb;
  601.           if(get1bit())
  602.             *xrpnt = -ispow[y] * v;
  603.           else
  604.             *xrpnt =  ispow[y] * v;
  605.           part2remain--;
  606.         }
  607.         else
  608.           *xrpnt = 0.0;
  609.         xrpnt += step;
  610.       }
  611.     }
  612.     for(;l3 && (part2remain > 0);l3--) {
  613.       struct newhuff *h = htc+gr_info->count1table_select;
  614.       register short *val = h->table,a;
  615.       while((a=*val++)<0) {
  616.         part2remain--;
  617.         if(part2remain < 0) {
  618.           part2remain++;
  619.           a = 0;
  620.           break;
  621.         }
  622.         if (get1bit())
  623.           val -= a;
  624.       }
  625.       for(i=0;i<4;i++) {
  626.         if(!(i & 1)) {
  627.           if(!mc) {
  628.             mc = *m++;
  629.             xrpnt = ((real *) xr) + (*m++);
  630.             lwin = *m++;
  631.             cb = *m++;
  632.             if(lwin == 3) {
  633.               v = gr_info->pow2gain[(*scf++) << shift];
  634.               step = 1;
  635.             }
  636.             else {
  637.               v = gr_info->full_gain[lwin][(*scf++) << shift];
  638.               step = 3;
  639.             }
  640.           }
  641.           mc--;
  642.         }
  643.         if( (a & (0x8>>i)) ) {
  644.           max[lwin] = cb;
  645.           part2remain--;
  646.           if(part2remain < 0) {
  647.             part2remain++;
  648.             break;
  649.           }
  650.           if(get1bit()) 
  651.             *xrpnt = -v;
  652.           else
  653.             *xrpnt = v;
  654.         }
  655.         else
  656.           *xrpnt = 0.0;
  657.         xrpnt += step;
  658.       }
  659.     }
  660.     while( m < me ) {
  661.       if(!mc) {
  662.         mc = *m++;
  663.         xrpnt = ((real *) xr) + *m++;
  664.         if( (*m++) == 3)
  665.           step = 1;
  666.         else
  667.           step = 3;
  668.         m++; /* cb */
  669.       }
  670.       mc--;
  671.       *xrpnt = 0.0;
  672.       xrpnt += step;
  673.       *xrpnt = 0.0;
  674.       xrpnt += step;
  675.     }
  676.     gr_info->maxband[0] = max[0]+1;
  677.     gr_info->maxband[1] = max[1]+1;
  678.     gr_info->maxband[2] = max[2]+1;
  679.     gr_info->maxbandl = max[3]+1;
  680.     {
  681.       int rmax = max[0] > max[1] ? max[0] : max[1];
  682.       rmax = (rmax > max[2] ? rmax : max[2]) + 1;
  683.       gr_info->maxb = rmax ? shortLimit[sfreq][rmax] : longLimit[sfreq][max[3]+1];
  684.     }
  685.   }
  686.   else {
  687.     int *pretab = gr_info->preflag ? pretab1 : pretab2;
  688.     int i,max = -1;
  689.     int cb = 0;
  690.     register int *m = map[sfreq][2];
  691.     register real v = 0.0;
  692.     register int mc = 0;
  693. #if 0
  694.     me = mapend[sfreq][2];
  695. #endif
  696.     for(i=0;i<3;i++) {
  697.       int lp = l[i];
  698.       struct newhuff *h = ht+gr_info->table_select[i];
  699.       for(;lp;lp--,mc--) {
  700.         int x,y;
  701.         if(!mc) {
  702.           mc = *m++;
  703.           v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
  704.           cb = *m++;
  705.         }
  706.         {
  707.           register short *val = h->table;
  708.           while((y=*val++)<0) {
  709.             if (get1bit())
  710.               val -= y;
  711.             part2remain--;
  712.           }
  713.           x = y >> 4;
  714.           y &= 0xf;
  715.         }
  716.         if (x == 15) {
  717.           max = cb;
  718.           part2remain -= h->linbits+1;
  719.           x += getbits(h->linbits);
  720.           if(get1bit())
  721.             *xrpnt++ = -ispow[x] * v;
  722.           else
  723.             *xrpnt++ =  ispow[x] * v;
  724.         }
  725.         else if(x) {
  726.           max = cb;
  727.           if(get1bit())
  728.             *xrpnt++ = -ispow[x] * v;
  729.           else
  730.             *xrpnt++ =  ispow[x] * v;
  731.           part2remain--;
  732.         }
  733.         else
  734.           *xrpnt++ = 0.0;
  735.         if (y == 15) {
  736.           max = cb;
  737.           part2remain -= h->linbits+1;
  738.           y += getbits(h->linbits);
  739.           if(get1bit())
  740.             *xrpnt++ = -ispow[y] * v;
  741.           else
  742.             *xrpnt++ =  ispow[y] * v;
  743.         }
  744.         else if(y) {
  745.           max = cb;
  746.           if(get1bit())
  747.             *xrpnt++ = -ispow[y] * v;
  748.           else
  749.             *xrpnt++ =  ispow[y] * v;
  750.           part2remain--;
  751.         }
  752.         else
  753.           *xrpnt++ = 0.0;
  754.       }
  755.     }
  756.     for(;l3 && (part2remain > 0);l3--) {
  757.       struct newhuff *h = htc+gr_info->count1table_select;
  758.       register short *val = h->table,a;
  759.       while((a=*val++)<0) {
  760.         part2remain--;
  761.         if(part2remain < 0) {
  762.           part2remain++;
  763.           a = 0;
  764.           break;
  765.         }
  766.         if (get1bit())
  767.           val -= a;
  768.       }
  769.       for(i=0;i<4;i++) {
  770.         if(!(i & 1)) {
  771.           if(!mc) {
  772.         
  773.     
  774. mc = *m++;
  775.             cb = *m++;
  776. v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
  777.          
  778. }
  779.           mc--;
  780.         }
  781.         if ( (a & (0x8>>i)) ) {
  782.           max = cb;
  783.           part2remain--;
  784.           if(part2remain < 0) {
  785.             part2remain++;
  786.             break;
  787.           }
  788.           if(get1bit())
  789.             *xrpnt++ = -v;
  790.           else
  791.             *xrpnt++ = v;
  792.         }
  793.         else
  794.           *xrpnt++ = 0.0;
  795.       }
  796.     }
  797.     for(i=(&xr[SBLIMIT][0]-xrpnt)>>1;i;i--) {
  798.       *xrpnt++ = 0.0;
  799.       *xrpnt++ = 0.0;
  800.     }
  801.     gr_info->maxbandl = max+1;
  802.     gr_info->maxb = longLimit[sfreq][gr_info->maxbandl];
  803.   }
  804.   while( part2remain > 16 ) {
  805.     getbits(16); 
  806.     part2remain -= 16;
  807.   }
  808.   if(part2remain > 0)
  809.     getbits(part2remain);
  810.   else if(part2remain < 0) {
  811.     return 1;
  812.   }
  813.   return 0;
  814. }
  815. static void III_i_stereo(real xr_buf[2][SBLIMIT][SSLIMIT],int *scalefac,
  816.    struct gr_info_s *gr_info,int sfreq,int ms_stereo,int lsf)
  817. {
  818.       real (*xr)[SBLIMIT*SSLIMIT] = (real (*)[SBLIMIT*SSLIMIT] ) xr_buf;
  819.       struct bandInfoStruct *bi = &bandInfo[sfreq];
  820.       real *tab1,*tab2;
  821.       if(lsf) {
  822.         int p = gr_info->scalefac_compress & 0x1;
  823.     if(ms_stereo) {
  824.           tab1 = pow1_2[p]; tab2 = pow2_2[p];
  825.         }
  826.         else {
  827.           tab1 = pow1_1[p]; tab2 = pow2_1[p];
  828.         }
  829.       }
  830.       else {
  831.         if(ms_stereo) {
  832.           tab1 = tan1_2; tab2 = tan2_2;
  833.         }
  834.         else {
  835.           tab1 = tan1_1; tab2 = tan2_1;
  836.         }
  837.       }
  838.       if (gr_info->block_type == 2)
  839.       {
  840.          int lwin,do_l = 0;
  841.          if( gr_info->mixed_block_flag )
  842.            do_l = 1;
  843.          for (lwin=0;lwin<3;lwin++) 
  844.          {
  845.              
  846.            int is_p,sb,idx,sfb = gr_info->maxband[lwin];  
  847.            if(sfb > 3)
  848.              do_l = 0;
  849.            for(;sfb<12;sfb++)
  850.            {
  851.              is_p = scalefac[sfb*3+lwin-gr_info->mixed_block_flag]; 
  852.              if(is_p != 7) {
  853.                real t1,t2;
  854.                sb = bi->shortDiff[sfb];
  855.                idx = bi->shortIdx[sfb] + lwin;
  856.                t1 = tab1[is_p]; t2 = tab2[is_p];
  857.                for (; sb > 0; sb--,idx+=3)
  858.                {
  859.                  real v = xr[0][idx];
  860.                  xr[0][idx] = v * t1;
  861.                  xr[1][idx] = v * t2;
  862.                }
  863.              }
  864.            }
  865. #if 1
  866.            is_p = scalefac[11*3+lwin-gr_info->mixed_block_flag]; 
  867.            sb = bi->shortDiff[12];
  868.            idx = bi->shortIdx[12] + lwin;
  869. #else
  870.            is_p = scalefac[10*3+lwin-gr_info->mixed_block_flag]; 
  871.            sb = bi->shortDiff[11];
  872.            idx = bi->shortIdx[11] + lwin;
  873. #endif
  874.            if(is_p != 7)
  875.            {
  876.              real t1,t2;
  877.              t1 = tab1[is_p]; t2 = tab2[is_p];
  878.              for ( ; sb > 0; sb--,idx+=3 )
  879.              {  
  880.                real v = xr[0][idx];
  881.                xr[0][idx] = v * t1;
  882.                xr[1][idx] = v * t2;
  883.              }
  884.            }
  885.          } 
  886.          if (do_l)
  887.          {
  888.            int sfb = gr_info->maxbandl;
  889.            int idx = bi->longIdx[sfb];
  890.            for ( ; sfb<8; sfb++ )
  891.            {
  892.              int sb = bi->longDiff[sfb];
  893.              int is_p = scalefac[sfb]; 
  894.              if(is_p != 7) {
  895.                real t1,t2;
  896.                t1 = tab1[is_p]; t2 = tab2[is_p];
  897.                for ( ; sb > 0; sb--,idx++)
  898.                {
  899.                  real v = xr[0][idx];
  900.                  xr[0][idx] = v * t1;
  901.                  xr[1][idx] = v * t2;
  902.                }
  903.              }
  904.              else 
  905.                idx += sb;
  906.            }
  907.          }     
  908.       } 
  909.       else
  910.       {
  911.         int sfb = gr_info->maxbandl;
  912.         int is_p,idx = bi->longIdx[sfb];
  913.         for ( ; sfb<21; sfb++)
  914.         {
  915.           int sb = bi->longDiff[sfb];
  916.           is_p = scalefac[sfb];
  917.           if(is_p != 7) {
  918.             real t1,t2;
  919.             t1 = tab1[is_p]; t2 = tab2[is_p];
  920.             for ( ; sb > 0; sb--,idx++)
  921.             {
  922.                real v = xr[0][idx];
  923.                xr[0][idx] = v * t1;
  924.                xr[1][idx] = v * t2;
  925.             }
  926.           }
  927.           else
  928.             idx += sb;
  929.         }
  930.         is_p = scalefac[20]; 
  931.         if(is_p != 7)
  932.         {
  933.           int sb;
  934.           real t1 = tab1[is_p],t2 = tab2[is_p]; 
  935.           for ( sb = bi->longDiff[21]; sb > 0; sb--,idx++ )
  936.           {
  937.             real v = xr[0][idx];
  938.             xr[0][idx] = v * t1;
  939.             xr[1][idx] = v * t2;
  940.           }
  941.         }
  942.       } /* ... */
  943. }
  944. static void III_antialias(real xr[SBLIMIT][SSLIMIT],struct gr_info_s *gr_info)
  945. {
  946.    int sblim;
  947.    if(gr_info->block_type == 2)
  948.    {
  949.       if(!gr_info->mixed_block_flag) 
  950.         return;
  951.       sblim = 1; 
  952.    }
  953.    else {
  954.      sblim = gr_info->maxb-1;
  955.    }
  956.    {
  957.      int sb;
  958.      real *xr1=(real *) xr[1];
  959.      for(sb=sblim;sb;sb--,xr1+=10)
  960.      {
  961.        int ss;
  962.        real *cs=aa_cs,*ca=aa_ca;
  963.        real *xr2 = xr1;
  964.        for(ss=7;ss>=0;ss--)
  965.        {       
  966.          register real bu = *--xr2,bd = *xr1;
  967.          *xr2   = (bu * (*cs)   ) - (bd * (*ca)   );
  968.          *xr1++ = (bd * (*cs++) ) + (bu * (*ca++) );
  969.        }
  970.      }
  971.   }
  972. }
  973. static void dct36(real *inbuf,real *o1,real *o2,real *wintab,real *tsbuf)
  974. {
  975.   {
  976.     register real *in = inbuf;
  977.     in[17]+=in[16]; in[16]+=in[15]; in[15]+=in[14];
  978.     in[14]+=in[13]; in[13]+=in[12]; in[12]+=in[11];
  979.     in[11]+=in[10]; in[10]+=in[9];  in[9] +=in[8];
  980.     in[8] +=in[7];  in[7] +=in[6];  in[6] +=in[5];
  981.     in[5] +=in[4];  in[4] +=in[3];  in[3] +=in[2];
  982.     in[2] +=in[1];  in[1] +=in[0];
  983.     in[17]+=in[15]; in[15]+=in[13]; in[13]+=in[11]; in[11]+=in[9];
  984.     in[9] +=in[7];  in[7] +=in[5];  in[5] +=in[3];  in[3] +=in[1];
  985.   {
  986. #define MACRO0(v) { 
  987.     real tmp; 
  988.     out2[9+(v)] = (tmp = sum0 + sum1) * w[27+(v)]; 
  989.     out2[8-(v)] = tmp * w[26-(v)];  } 
  990.     sum0 -= sum1; 
  991.     ts[SBLIMIT*(8-(v))] = out1[8-(v)] + sum0 * w[8-(v)]; 
  992.     ts[SBLIMIT*(9+(v))] = out1[9+(v)] + sum0 * w[9+(v)]; 
  993. #define MACRO1(v) { 
  994. real sum0,sum1; 
  995.     sum0 = tmp1a + tmp2a; 
  996. sum1 = (tmp1b + tmp2b) * tfcos36[(v)]; 
  997. MACRO0(v); }
  998. #define MACRO2(v) { 
  999.     real sum0,sum1; 
  1000.     sum0 = tmp2a - tmp1a; 
  1001.     sum1 = (tmp2b - tmp1b) * tfcos36[(v)]; 
  1002. MACRO0(v); }
  1003.     register const real *c = COS9;
  1004.     register real *out2 = o2;
  1005. register real *w = wintab;
  1006. register real *out1 = o1;
  1007. register real *ts = tsbuf;
  1008.     real ta33,ta66,tb33,tb66;
  1009.     ta33 = in[2*3+0] * c[3];
  1010.     ta66 = in[2*6+0] * c[6];
  1011.     tb33 = in[2*3+1] * c[3];
  1012.     tb66 = in[2*6+1] * c[6];
  1013.     { 
  1014.       real tmp1a,tmp2a,tmp1b,tmp2b;
  1015.       tmp1a =             in[2*1+0] * c[1] + ta33 + in[2*5+0] * c[5] + in[2*7+0] * c[7];
  1016.       tmp1b =             in[2*1+1] * c[1] + tb33 + in[2*5+1] * c[5] + in[2*7+1] * c[7];
  1017.       tmp2a = in[2*0+0] + in[2*2+0] * c[2] + in[2*4+0] * c[4] + ta66 + in[2*8+0] * c[8];
  1018.       tmp2b = in[2*0+1] + in[2*2+1] * c[2] + in[2*4+1] * c[4] + tb66 + in[2*8+1] * c[8];
  1019.       MACRO1(0);
  1020.       MACRO2(8);
  1021.     }
  1022.     {
  1023.       real tmp1a,tmp2a,tmp1b,tmp2b;
  1024.       tmp1a = ( in[2*1+0] - in[2*5+0] - in[2*7+0] ) * c[3];
  1025.       tmp1b = ( in[2*1+1] - in[2*5+1] - in[2*7+1] ) * c[3];
  1026.       tmp2a = ( in[2*2+0] - in[2*4+0] - in[2*8+0] ) * c[6] - in[2*6+0] + in[2*0+0];
  1027.       tmp2b = ( in[2*2+1] - in[2*4+1] - in[2*8+1] ) * c[6] - in[2*6+1] + in[2*0+1];
  1028.       MACRO1(1);
  1029.       MACRO2(7);
  1030.     }
  1031.     {
  1032.       real tmp1a,tmp2a,tmp1b,tmp2b;
  1033.       tmp1a =             in[2*1+0] * c[5] - ta33 - in[2*5+0] * c[7] + in[2*7+0] * c[1];
  1034.       tmp1b =             in[2*1+1] * c[5] - tb33 - in[2*5+1] * c[7] + in[2*7+1] * c[1];
  1035.       tmp2a = in[2*0+0] - in[2*2+0] * c[8] - in[2*4+0] * c[2] + ta66 + in[2*8+0] * c[4];
  1036.       tmp2b = in[2*0+1] - in[2*2+1] * c[8] - in[2*4+1] * c[2] + tb66 + in[2*8+1] * c[4];
  1037.       MACRO1(2);
  1038.       MACRO2(6);
  1039.     }
  1040.     {
  1041.       real tmp1a,tmp2a,tmp1b,tmp2b;
  1042.       tmp1a =             in[2*1+0] * c[7] - ta33 + in[2*5+0] * c[1] - in[2*7+0] * c[5];
  1043.       tmp1b =             in[2*1+1] * c[7] - tb33 + in[2*5+1] * c[1] - in[2*7+1] * c[5];
  1044.       tmp2a = in[2*0+0] - in[2*2+0] * c[4] + in[2*4+0] * c[8] + ta66 - in[2*8+0] * c[2];
  1045.       tmp2b = in[2*0+1] - in[2*2+1] * c[4] + in[2*4+1] * c[8] + tb66 - in[2*8+1] * c[2];
  1046.       MACRO1(3);
  1047.       MACRO2(5);
  1048.     }
  1049. {
  1050. real sum0,sum1;
  1051.      sum0 =  in[2*0+0] - in[2*2+0] + in[2*4+0] - in[2*6+0] + in[2*8+0];
  1052.      sum1 = (in[2*0+1] - in[2*2+1] + in[2*4+1] - in[2*6+1] + in[2*8+1] ) * tfcos36[4];
  1053. MACRO0(4);
  1054. }
  1055.   }
  1056.   }
  1057. }
  1058. static void dct12(real *in,real *rawout1,real *rawout2,register real *wi,register real *ts)
  1059. {
  1060. #define DCT12_PART1 
  1061.              in5 = in[5*3];  
  1062.      in5 += (in4 = in[4*3]); 
  1063.      in4 += (in3 = in[3*3]); 
  1064.      in3 += (in2 = in[2*3]); 
  1065.      in2 += (in1 = in[1*3]); 
  1066.      in1 += (in0 = in[0*3]); 
  1067.                              
  1068.      in5 += in3; in3 += in1; 
  1069.                              
  1070.      in2 *= COS6_1; 
  1071.      in3 *= COS6_1; 
  1072. #define DCT12_PART2 
  1073.      in0 += in4 * COS6_2; 
  1074.                           
  1075.      in4 = in0 + in2;     
  1076.      in0 -= in2;          
  1077.                           
  1078.      in1 += in5 * COS6_2; 
  1079.                           
  1080.      in5 = (in1 + in3) * tfcos12[0]; 
  1081.      in1 = (in1 - in3) * tfcos12[2]; 
  1082.                          
  1083.      in3 = in4 + in5;    
  1084.      in4 -= in5;         
  1085.                          
  1086.      in2 = in0 + in1;    
  1087.      in0 -= in1;
  1088.    {
  1089.      real in0,in1,in2,in3,in4,in5;
  1090.      register real *out1 = rawout1;
  1091.      ts[SBLIMIT*0] = out1[0]; ts[SBLIMIT*1] = out1[1]; ts[SBLIMIT*2] = out1[2];
  1092.      ts[SBLIMIT*3] = out1[3]; ts[SBLIMIT*4] = out1[4]; ts[SBLIMIT*5] = out1[5];
  1093.  
  1094.      DCT12_PART1
  1095.      {
  1096.        real tmp0,tmp1 = (in0 - in4);
  1097.        {
  1098.          real tmp2 = (in1 - in5) * tfcos12[1];
  1099.          tmp0 = tmp1 + tmp2;
  1100.          tmp1 -= tmp2;
  1101.        }
  1102.        ts[(17-1)*SBLIMIT] = out1[17-1] + tmp0 * wi[11-1];
  1103.        ts[(12+1)*SBLIMIT] = out1[12+1] + tmp0 * wi[6+1];
  1104.        ts[(6 +1)*SBLIMIT] = out1[6 +1] + tmp1 * wi[1];
  1105.        ts[(11-1)*SBLIMIT] = out1[11-1] + tmp1 * wi[5-1];
  1106.      }
  1107.      DCT12_PART2
  1108.      ts[(17-0)*SBLIMIT] = out1[17-0] + in2 * wi[11-0];
  1109.      ts[(12+0)*SBLIMIT] = out1[12+0] + in2 * wi[6+0];
  1110.      ts[(12+2)*SBLIMIT] = out1[12+2] + in3 * wi[6+2];
  1111.      ts[(17-2)*SBLIMIT] = out1[17-2] + in3 * wi[11-2];
  1112.      ts[(6+0)*SBLIMIT]  = out1[6+0] + in0 * wi[0];
  1113.      ts[(11-0)*SBLIMIT] = out1[11-0] + in0 * wi[5-0];
  1114.      ts[(6+2)*SBLIMIT]  = out1[6+2] + in4 * wi[2];
  1115.      ts[(11-2)*SBLIMIT] = out1[11-2] + in4 * wi[5-2];
  1116.   }
  1117.   in++;
  1118.   {
  1119.      real in0,in1,in2,in3,in4,in5;
  1120.      register real *out2 = rawout2;
  1121.  
  1122.      DCT12_PART1
  1123.      {
  1124.        real tmp0,tmp1 = (in0 - in4);
  1125.        {
  1126.          real tmp2 = (in1 - in5) * tfcos12[1];
  1127.          tmp0 = tmp1 + tmp2;
  1128.          tmp1 -= tmp2;
  1129.        }
  1130.        out2[5-1] = tmp0 * wi[11-1];
  1131.        out2[0+1] = tmp0 * wi[6+1];
  1132.        ts[(12+1)*SBLIMIT] += tmp1 * wi[1];
  1133.        ts[(17-1)*SBLIMIT] += tmp1 * wi[5-1];
  1134.      }
  1135.      DCT12_PART2
  1136.      out2[5-0] = in2 * wi[11-0];
  1137.      out2[0+0] = in2 * wi[6+0];
  1138.      out2[0+2] = in3 * wi[6+2];
  1139.      out2[5-2] = in3 * wi[11-2];
  1140.      ts[(12+0)*SBLIMIT] += in0 * wi[0];
  1141.      ts[(17-0)*SBLIMIT] += in0 * wi[5-0];
  1142.      ts[(12+2)*SBLIMIT] += in4 * wi[2];
  1143.      ts[(17-2)*SBLIMIT] += in4 * wi[5-2];
  1144.   }
  1145.   in++; 
  1146.   {
  1147.      real in0,in1,in2,in3,in4,in5;
  1148.      register real *out2 = rawout2;
  1149.      out2[12]=out2[13]=out2[14]=out2[15]=out2[16]=out2[17]=0.0;
  1150.      DCT12_PART1
  1151.      {
  1152.        real tmp0,tmp1 = (in0 - in4);
  1153.        {
  1154.          real tmp2 = (in1 - in5) * tfcos12[1];
  1155.          tmp0 = tmp1 + tmp2;
  1156.          tmp1 -= tmp2;
  1157.        }
  1158.        out2[11-1] = tmp0 * wi[11-1];
  1159.        out2[6 +1] = tmp0 * wi[6+1];
  1160.        out2[0+1] += tmp1 * wi[1];
  1161.        out2[5-1] += tmp1 * wi[5-1];
  1162.      }
  1163.      DCT12_PART2
  1164.      out2[11-0] = in2 * wi[11-0];
  1165.      out2[6 +0] = in2 * wi[6+0];
  1166.      out2[6 +2] = in3 * wi[6+2];
  1167.      out2[11-2] = in3 * wi[11-2];
  1168.      out2[0+0] += in0 * wi[0];
  1169.      out2[5-0] += in0 * wi[5-0];
  1170.      out2[0+2] += in4 * wi[2];
  1171.      out2[5-2] += in4 * wi[5-2];
  1172.   }
  1173. }
  1174. static void III_hybrid(real fsIn[SBLIMIT][SSLIMIT],real tsOut[SSLIMIT][SBLIMIT],
  1175.    int ch,struct gr_info_s *gr_info)
  1176. {
  1177.    real *tspnt = (real *) tsOut;
  1178.    real (*block)[2][SBLIMIT*SSLIMIT] = gmp->hybrid_block;
  1179.    int *blc = gmp->hybrid_blc;
  1180.    real *rawout1,*rawout2;
  1181.    int bt;
  1182.    int sb = 0;
  1183.    {
  1184.      int b = blc[ch];
  1185.      rawout1=block[b][ch];
  1186.      b=-b+1;
  1187.      rawout2=block[b][ch];
  1188.      blc[ch] = b;
  1189.    }
  1190.   
  1191.    if(gr_info->mixed_block_flag) {
  1192.      sb = 2;
  1193.      dct36(fsIn[0],rawout1,rawout2,win[0],tspnt);
  1194.      dct36(fsIn[1],rawout1+18,rawout2+18,win1[0],tspnt+1);
  1195.      rawout1 += 36; rawout2 += 36; tspnt += 2;
  1196.    }
  1197.  
  1198.    bt = gr_info->block_type;
  1199.    if(bt == 2) {
  1200.      for (; sb<gr_info->maxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36) {
  1201.        dct12(fsIn[sb],rawout1,rawout2,win[2],tspnt);
  1202.        dct12(fsIn[sb+1],rawout1+18,rawout2+18,win1[2],tspnt+1);
  1203.      }
  1204.    }
  1205.    else {
  1206.      for (; sb<gr_info->maxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36) {
  1207.        dct36(fsIn[sb],rawout1,rawout2,win[bt],tspnt);
  1208.        dct36(fsIn[sb+1],rawout1+18,rawout2+18,win1[bt],tspnt+1);
  1209.      }
  1210.    }
  1211.    for(;sb<SBLIMIT;sb++,tspnt++) {
  1212.      int i;
  1213.      for(i=0;i<SSLIMIT;i++) {
  1214.        tspnt[i*SBLIMIT] = *rawout1++;
  1215.        *rawout2++ = 0.0;
  1216.      }
  1217.    }
  1218. }
  1219. int do_layer3(struct frame *fr,unsigned char *pcm_sample,int *pcm_point)
  1220. {
  1221.   int gr, ch, ss,clip=0;
  1222.   int scalefacs[2][39]; 
  1223.   struct III_sideinfo sideinfo;
  1224.   int stereo = fr->stereo;
  1225.   int single = fr->single;
  1226.   int ms_stereo,i_stereo;
  1227.   int sfreq = fr->sampling_frequency;
  1228.   int stereo1,granules;
  1229.   
  1230.   if(stereo == 1) { 
  1231.     stereo1 = 1;
  1232.     single = 0;
  1233.   }
  1234.   else if(single >= 0) 
  1235.     stereo1 = 1;
  1236.   else
  1237.     stereo1 = 2;
  1238.   if(fr->mode == MPG_MD_JOINT_STEREO) {
  1239.     ms_stereo = fr->mode_ext & 0x2;
  1240.     i_stereo  = fr->mode_ext & 0x1;
  1241.   }
  1242.   else
  1243.     ms_stereo = i_stereo = 0;
  1244.   if(fr->lsf) {
  1245.     granules = 1;
  1246.     III_get_side_info_2(&sideinfo,stereo,ms_stereo,sfreq,single);
  1247.   }
  1248.   else {
  1249.     granules = 2;
  1250.     III_get_side_info_1(&sideinfo,stereo,ms_stereo,sfreq,single);
  1251.   }
  1252.   if(set_pointer(sideinfo.main_data_begin) == MP3_ERR)
  1253.     return 0;
  1254.   for (gr=0;gr<granules;gr++) 
  1255.   {
  1256.     real hybridIn[2][SBLIMIT][SSLIMIT];
  1257.     real hybridOut[2][SSLIMIT][SBLIMIT];
  1258.     {
  1259.       struct gr_info_s *gr_info = &(sideinfo.ch[0].gr[gr]);
  1260.       long part2bits;
  1261.   if(fr->lsf)
  1262.         part2bits = III_get_scale_factors_2(scalefacs[0],gr_info,0);
  1263.       else {
  1264.         part2bits = III_get_scale_factors_1(scalefacs[0],gr_info);
  1265.       }
  1266.       if(III_dequantize_sample(hybridIn[0], scalefacs[0],gr_info,sfreq,part2bits))
  1267.         return clip;
  1268.     }
  1269.     if(stereo == 2) {
  1270.       struct gr_info_s *gr_info = &(sideinfo.ch[1].gr[gr]);
  1271.       long part2bits;
  1272.       if(fr->lsf) 
  1273.         part2bits = III_get_scale_factors_2(scalefacs[1],gr_info,i_stereo);
  1274.       else {
  1275.         part2bits = III_get_scale_factors_1(scalefacs[1],gr_info);
  1276.       }
  1277.       if(III_dequantize_sample(hybridIn[1],scalefacs[1],gr_info,sfreq,part2bits))
  1278.           return clip;
  1279.       if(ms_stereo) {
  1280.         int i;
  1281.         for(i=0;i<SBLIMIT*SSLIMIT;i++) {
  1282.           real tmp0,tmp1;
  1283.           tmp0 = ((real *) hybridIn[0])[i];
  1284.           tmp1 = ((real *) hybridIn[1])[i];
  1285.           ((real *) hybridIn[0])[i] = tmp0 + tmp1;
  1286.           ((real *) hybridIn[1])[i] = tmp0 - tmp1;  
  1287.         }
  1288.       }
  1289. if(i_stereo)
  1290. III_i_stereo(hybridIn,scalefacs[1],gr_info,sfreq,ms_stereo,fr->lsf);
  1291. if(ms_stereo || i_stereo || (single == 3) ) {
  1292. if(gr_info->maxb > sideinfo.ch[0].gr[gr].maxb) 
  1293. sideinfo.ch[0].gr[gr].maxb = gr_info->maxb;
  1294. else
  1295. gr_info->maxb = sideinfo.ch[0].gr[gr].maxb;
  1296. }
  1297. switch(single) {
  1298. case 3: {
  1299. register int i;
  1300. register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1];
  1301. for(i=0;i<SSLIMIT*gr_info->maxb;i++,in0++)
  1302. *in0 = (*in0 + *in1++);  
  1303.            break;
  1304. }
  1305. case 1: {
  1306. register int i;
  1307. register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1];
  1308. for(i=0;i<SSLIMIT*gr_info->maxb;i++)
  1309. *in0++ = *in1++;
  1310. break;
  1311. }
  1312. }
  1313. }
  1314. for(ch=0;ch<stereo1;ch++) {
  1315. struct gr_info_s *gr_info = &(sideinfo.ch[ch].gr[gr]);
  1316. III_antialias(hybridIn[ch],gr_info);
  1317. III_hybrid(hybridIn[ch], hybridOut[ch], ch,gr_info);
  1318. }
  1319. if (single >= 0) {
  1320.      for(ss=0;ss<SSLIMIT;ss++)
  1321.          clip += synth_1to1_mono(hybridOut[0][ss],pcm_sample,pcm_point);
  1322.        } else {
  1323.      for(ss=0;ss<SSLIMIT;ss++) {
  1324.          int p1 = *pcm_point;
  1325.          clip += synth_1to1(hybridOut[0][ss],0,pcm_sample,&p1);
  1326.          clip += synth_1to1(hybridOut[1][ss],1,pcm_sample,pcm_point);
  1327. }
  1328. }
  1329. }
  1330. return clip;
  1331. }