Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #include "bstream.h"
  2. #include "mp3dec.h"
  3.  
  4. extern float m_sample[2304];
  5. extern int      m_nsb_limit;
  6. int m_stereo_sb;
  7. int m_max_sb;
  8.  
  9. SBT_PROC m_sbt_proc;
  10. float m_sf_table[64];
  11. float m_look_c_valueL2[18];
  12. char m_group3_table[32][3];
  13. char m_group5_table[128][3];
  14. short m_group9_table[1024][3];
  15. int m_nbat[4];// = {3, 8, 12, 7};
  16. int m_bat[4][16];
  17.  
  18. int m_ballo[64];
  19. uint m_samp_dispatch[66];
  20. float m_c_value[64];
  21. uint m_sf_dispatch[66];
  22. float m_cs_factor[3][64];
  23.  
  24. int m_bit_skip;
  25.  
  26. static const int look_joint[16] =
  27. {                               /* lookup stereo sb's by mode+ext */
  28.    64, 64, 64, 64,              /* stereo */
  29.    2 * 4, 2 * 8, 2 * 12, 2 * 16,        /* joint */
  30.    64, 64, 64, 64,              /* dual */
  31.    32, 32, 32, 32,              /* mono */
  32. };
  33.  
  34. static const int bat_bit_masterL2[] =
  35. {
  36.    0, 5, 7, 9, 10, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48
  37. };
  38.  
  39. void unpack_ba();
  40. void unpack_sfs();
  41. void unpack_sf();
  42. void unpack_samp();
  43.  
  44. void L2decode_frame(MPEG_HEADER* h, byte* mpeg, byte* pcm)
  45. {
  46.         int crc_size;
  47.  
  48.         crc_size = (h->error_prot) ? 2 : 0;
  49.         bitget_init(mpeg + 4 + crc_size);
  50.  
  51.         m_stereo_sb = look_joint[(h->mode << 2) + h->mode_ext];
  52.         unpack_ba();            // unpack bit allocation
  53.         unpack_sfs();           // unpack scale factor selectors
  54.         unpack_sf();            // unpack scale factor
  55.         unpack_samp();          // unpack samples
  56.  
  57.         m_sbt_proc(m_sample, pcm, 36);
  58. }
  59.  
  60. void unpack_ba()
  61. {
  62.         int i, j, k;
  63.         int nstereo;
  64.         int nbit[4] = {4, 4, 3, 2};
  65.  
  66.         m_bit_skip = 0;
  67.         nstereo = m_stereo_sb;
  68.         k = 0;
  69.         for (i = 0; i < 4; i++) {
  70.                 for (j = 0; j < m_nbat[i]; j++, k++) {
  71.                         bitget_check(4);
  72.                         m_ballo[k] = m_samp_dispatch[k] = m_bat[i][mac_bitget(nbit[i])];
  73.                         if (k >= m_nsb_limit)
  74.                                 m_bit_skip += bat_bit_masterL2[m_samp_dispatch[k]];
  75.                         m_c_value[k] = m_look_c_valueL2[m_samp_dispatch[k]];
  76.                         if (--nstereo < 0) {
  77.                                 m_ballo[k + 1] = m_ballo[k];
  78.                                 m_samp_dispatch[k] += 18;       /* flag as joint */
  79.                                 m_samp_dispatch[k + 1] = m_samp_dispatch[k];    /* flag for sf */
  80.                                 m_c_value[k + 1] = m_c_value[k];
  81.                                 k++;
  82.                                 j++;
  83.                         }
  84.                 }
  85.         }
  86.         m_samp_dispatch[m_nsb_limit] = 37;      /* terminate the dispatcher with skip */
  87.         m_samp_dispatch[k] = 36;        /* terminate the dispatcher */
  88. }
  89.  
  90. void unpack_sfs()       /* unpack scale factor selectors */
  91. {
  92.         int i;
  93.  
  94.         for (i = 0; i < m_max_sb; i++) {
  95.                 bitget_check(2);
  96.                 if (m_ballo[i])
  97.                         m_sf_dispatch[i] = mac_bitget(2);
  98.                 else
  99.                         m_sf_dispatch[i] = 4;   /* no allo */
  100.         }
  101.         m_sf_dispatch[i] = 5;           /* terminate dispatcher */
  102. }
  103.  
  104. void unpack_sf()                /* unpack scale factor */
  105. {                               /* combine dequant and scale factors */
  106.    int i;
  107.  
  108.    i = -1;
  109.  dispatch:switch (m_sf_dispatch[++i])
  110.    {
  111.       case 0:                   /* 3 factors 012 */
  112.          bitget_check(18);
  113.          m_cs_factor[0][i] = m_c_value[i] * m_sf_table[mac_bitget(6)];
  114.          m_cs_factor[1][i] = m_c_value[i] * m_sf_table[mac_bitget(6)];
  115.          m_cs_factor[2][i] = m_c_value[i] * m_sf_table[mac_bitget(6)];
  116.          goto dispatch;
  117.       case 1:                   /* 2 factors 002 */
  118.          bitget_check(12);
  119.          m_cs_factor[1][i] = m_cs_factor[0][i] = m_c_value[i] * m_sf_table[mac_bitget(6)];
  120.          m_cs_factor[2][i] = m_c_value[i] * m_sf_table[mac_bitget(6)];
  121.          goto dispatch;
  122.       case 2:                   /* 1 factor 000 */
  123.          bitget_check(6);
  124.          m_cs_factor[2][i] = m_cs_factor[1][i] = m_cs_factor[0][i] =
  125.             m_c_value[i] * m_sf_table[mac_bitget(6)];
  126.          goto dispatch;
  127.       case 3:                   /* 2 factors 022 */
  128.          bitget_check(12);
  129.          m_cs_factor[0][i] = m_c_value[i] * m_sf_table[mac_bitget(6)];
  130.          m_cs_factor[2][i] = m_cs_factor[1][i] = m_c_value[i] * m_sf_table[mac_bitget(6)];
  131.          goto dispatch;
  132.       case 4:                   /* no allo */
  133. /*-- m_cs_factor[2][i] = m_cs_factor[1][i] = m_cs_factor[0][i] = 0.0;  --*/
  134.          goto dispatch;
  135.       case 5:                   /* all done */
  136.          ;
  137.    }                            /* end switch */
  138. }
  139. /*-------------------------------------------------------------------------*/
  140. #define UNPACK_N(n) s[k]     =  m_cs_factor[i][k]*(bitget(n)-((1 << n-1) -1));   \
  141.     s[k+64]  =  m_cs_factor[i][k]*(bitget(n)-((1 << n-1) -1));   \
  142.     s[k+128] =  m_cs_factor[i][k]*(bitget(n)-((1 << n-1) -1));   \
  143.     goto dispatch;
  144. #define UNPACK_N2(n) bitget_check(3*n);                                         \
  145.     s[k]     =  m_cs_factor[i][k]*(mac_bitget(n)-((1 << n-1) -1));   \
  146.     s[k+64]  =  m_cs_factor[i][k]*(mac_bitget(n)-((1 << n-1) -1));   \
  147.     s[k+128] =  m_cs_factor[i][k]*(mac_bitget(n)-((1 << n-1) -1));   \
  148.     goto dispatch;
  149. #define UNPACK_N3(n) bitget_check(2*n);                                         \
  150.     s[k]     =  m_cs_factor[i][k]*(mac_bitget(n)-((1 << n-1) -1));   \
  151.     s[k+64]  =  m_cs_factor[i][k]*(mac_bitget(n)-((1 << n-1) -1));   \
  152.     bitget_check(n);                                           \
  153.     s[k+128] =  m_cs_factor[i][k]*(mac_bitget(n)-((1 << n-1) -1));   \
  154.     goto dispatch;
  155. #define UNPACKJ_N(n) tmp        =  (bitget(n)-((1 << n-1) -1));                 \
  156.     s[k]       =  m_cs_factor[i][k]*tmp;                       \
  157.     s[k+1]     =  m_cs_factor[i][k+1]*tmp;                     \
  158.     tmp        =  (bitget(n)-((1 << n-1) -1));                 \
  159.     s[k+64]    =  m_cs_factor[i][k]*tmp;                       \
  160.     s[k+64+1]  =  m_cs_factor[i][k+1]*tmp;                     \
  161.     tmp        =  (bitget(n)-((1 << n-1) -1));                 \
  162.     s[k+128]   =  m_cs_factor[i][k]*tmp;                       \
  163.     s[k+128+1] =  m_cs_factor[i][k+1]*tmp;                     \
  164.     k++;       /* skip right chan dispatch */                \
  165.     goto dispatch;
  166. /*-------------------------------------------------------------------------*/
  167.  
  168. void unpack_samp()      /* unpack samples */
  169. {
  170.    int i, j, k;
  171.    float *s;
  172.    int n;
  173.    long tmp;
  174.  
  175.    s = m_sample;
  176.    for (i = 0; i < 3; i++)
  177.    {                            /* 3 groups of scale factors */
  178.       for (j = 0; j < 4; j++)
  179.       {
  180.          k = -1;
  181.        dispatch:switch (m_samp_dispatch[++k])
  182.          {
  183.             case 0:
  184.                s[k + 128] = s[k + 64] = s[k] = 0.0F;
  185.                goto dispatch;
  186.             case 1:             /* 3 levels grouped 5 bits */
  187.                bitget_check(5);
  188.                n = mac_bitget(5);
  189.                s[k] = m_cs_factor[i][k] * m_group3_table[n][0];
  190.                s[k + 64] = m_cs_factor[i][k] * m_group3_table[n][1];
  191.                s[k + 128] = m_cs_factor[i][k] * m_group3_table[n][2];
  192.                goto dispatch;
  193.             case 2:             /* 5 levels grouped 7 bits */
  194.                bitget_check(7);
  195.                n = mac_bitget(7);
  196.                s[k] = m_cs_factor[i][k] * m_group5_table[n][0];
  197.                s[k + 64] = m_cs_factor[i][k] * m_group5_table[n][1];
  198.                s[k + 128] = m_cs_factor[i][k] * m_group5_table[n][2];
  199.                goto dispatch;
  200.             case 3:
  201.                UNPACK_N2(3)     /* 7 levels */
  202.             case 4:             /* 9 levels grouped 10 bits */
  203.                bitget_check(10);
  204.                n = mac_bitget(10);
  205.                s[k] = m_cs_factor[i][k] * m_group9_table[n][0];
  206.                s[k + 64] = m_cs_factor[i][k] * m_group9_table[n][1];
  207.                s[k + 128] = m_cs_factor[i][k] * m_group9_table[n][2];
  208.                goto dispatch;
  209.             case 5:
  210.                UNPACK_N2(4)     /* 15 levels */
  211.             case 6:
  212.                UNPACK_N2(5)     /* 31 levels */
  213.             case 7:
  214.                UNPACK_N2(6)     /* 63 levels */
  215.             case 8:
  216.                UNPACK_N2(7)     /* 127 levels */
  217.             case 9:
  218.                UNPACK_N2(8)     /* 255 levels */
  219.             case 10:
  220.                UNPACK_N3(9)     /* 511 levels */
  221.             case 11:
  222.                UNPACK_N3(10)    /* 1023 levels */
  223.             case 12:
  224.                UNPACK_N3(11)    /* 2047 levels */
  225.             case 13:
  226.                UNPACK_N3(12)    /* 4095 levels */
  227.             case 14:
  228.                UNPACK_N(13)     /* 8191 levels */
  229.             case 15:
  230.                UNPACK_N(14)     /* 16383 levels */
  231.             case 16:
  232.                UNPACK_N(15)     /* 32767 levels */
  233.             case 17:
  234.                UNPACK_N(16)     /* 65535 levels */
  235. /* -- joint ---- */
  236.             case 18 + 0:
  237.                s[k + 128 + 1] = s[k + 128] = s[k + 64 + 1] = s[k + 64] = s[k + 1] = s[k] = 0.0F;
  238.                k++;             /* skip right chan dispatch */
  239.                goto dispatch;
  240.             case 18 + 1:        /* 3 levels grouped 5 bits */
  241.                n = bitget(5);
  242.                s[k] = m_cs_factor[i][k] * m_group3_table[n][0];
  243.                s[k + 1] = m_cs_factor[i][k + 1] * m_group3_table[n][0];
  244.                s[k + 64] = m_cs_factor[i][k] * m_group3_table[n][1];
  245.                s[k + 64 + 1] = m_cs_factor[i][k + 1] * m_group3_table[n][1];
  246.                s[k + 128] = m_cs_factor[i][k] * m_group3_table[n][2];
  247.                s[k + 128 + 1] = m_cs_factor[i][k + 1] * m_group3_table[n][2];
  248.                k++;             /* skip right chan dispatch */
  249.                goto dispatch;
  250.             case 18 + 2:        /* 5 levels grouped 7 bits */
  251.                n = bitget(7);
  252.                s[k] = m_cs_factor[i][k] * m_group5_table[n][0];
  253.                s[k + 1] = m_cs_factor[i][k + 1] * m_group5_table[n][0];
  254.                s[k + 64] = m_cs_factor[i][k] * m_group5_table[n][1];
  255.                s[k + 64 + 1] = m_cs_factor[i][k + 1] * m_group5_table[n][1];
  256.                s[k + 128] = m_cs_factor[i][k] * m_group5_table[n][2];
  257.                s[k + 128 + 1] = m_cs_factor[i][k + 1] * m_group5_table[n][2];
  258.                k++;             /* skip right chan dispatch */
  259.                goto dispatch;
  260.             case 18 + 3:
  261.                UNPACKJ_N(3)     /* 7 levels */
  262.             case 18 + 4:        /* 9 levels grouped 10 bits */
  263.                n = bitget(10);
  264.                s[k] = m_cs_factor[i][k] * m_group9_table[n][0];
  265.                s[k + 1] = m_cs_factor[i][k + 1] * m_group9_table[n][0];
  266.                s[k + 64] = m_cs_factor[i][k] * m_group9_table[n][1];
  267.                s[k + 64 + 1] = m_cs_factor[i][k + 1] * m_group9_table[n][1];
  268.                s[k + 128] = m_cs_factor[i][k] * m_group9_table[n][2];
  269.                s[k + 128 + 1] = m_cs_factor[i][k + 1] * m_group9_table[n][2];
  270.                k++;             /* skip right chan dispatch */
  271.                goto dispatch;
  272.             case 18 + 5:
  273.                UNPACKJ_N(4)     /* 15 levels */
  274.             case 18 + 6:
  275.                UNPACKJ_N(5)     /* 31 levels */
  276.             case 18 + 7:
  277.                UNPACKJ_N(6)     /* 63 levels */
  278.             case 18 + 8:
  279.                UNPACKJ_N(7)     /* 127 levels */
  280.             case 18 + 9:
  281.                UNPACKJ_N(8)     /* 255 levels */
  282.             case 18 + 10:
  283.                UNPACKJ_N(9)     /* 511 levels */
  284.             case 18 + 11:
  285.                UNPACKJ_N(10)    /* 1023 levels */
  286.             case 18 + 12:
  287.                UNPACKJ_N(11)    /* 2047 levels */
  288.             case 18 + 13:
  289.                UNPACKJ_N(12)    /* 4095 levels */
  290.             case 18 + 14:
  291.                UNPACKJ_N(13)    /* 8191 levels */
  292.             case 18 + 15:
  293.                UNPACKJ_N(14)    /* 16383 levels */
  294.             case 18 + 16:
  295.                UNPACKJ_N(15)    /* 32767 levels */
  296.             case 18 + 17:
  297.                UNPACKJ_N(16)    /* 65535 levels */
  298. /* -- end of dispatch -- */
  299.             case 37:
  300.                bitget_skip(m_bit_skip);
  301.             case 36:
  302.                s += 3 * 64;
  303.          }                      /* end switch */
  304.       }                         /* end j loop */
  305.    }                            /* end i loop */
  306. }
  307.