layer12.c
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:11k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /*
  2.  * libmad - MPEG audio decoder library
  3.  */
  4. # ifdef HAVE_CONFIG_H
  5. #  include "config.h"
  6. # endif
  7. # include "global.h"
  8. # ifdef HAVE_LIMITS_H
  9. #  include <limits.h>
  10. # else
  11. #  define CHAR_BIT  8
  12. # endif
  13. # include "fixed.h"
  14. # include "bit.h"
  15. # include "stream.h"
  16. # include "frame.h"
  17. # include "layer12.h"
  18. static
  19. mad_fixed_t const sf_table[63] = {
  20. # include "sf_table.dat"
  21. };
  22. /* --- Layer I ------------------------------------------------------------- */
  23. static
  24. mad_fixed_t const linear_table[14] = {
  25.   MAD_F(0x15555555),  /* 2^2  / (2^2  - 1) == 1.33333333333333 */
  26.   MAD_F(0x12492492),  /* 2^3  / (2^3  - 1) == 1.14285714285714 */
  27.   MAD_F(0x11111111),  /* 2^4  / (2^4  - 1) == 1.06666666666667 */
  28.   MAD_F(0x10842108),  /* 2^5  / (2^5  - 1) == 1.03225806451613 */
  29.   MAD_F(0x10410410),  /* 2^6  / (2^6  - 1) == 1.01587301587302 */
  30.   MAD_F(0x10204081),  /* 2^7  / (2^7  - 1) == 1.00787401574803 */
  31.   MAD_F(0x10101010),  /* 2^8  / (2^8  - 1) == 1.00392156862745 */
  32.   MAD_F(0x10080402),  /* 2^9  / (2^9  - 1) == 1.00195694716243 */
  33.   MAD_F(0x10040100),  /* 2^10 / (2^10 - 1) == 1.00097751710655 */
  34.   MAD_F(0x10020040),  /* 2^11 / (2^11 - 1) == 1.00048851978505 */
  35.   MAD_F(0x10010010),  /* 2^12 / (2^12 - 1) == 1.00024420024420 */
  36.   MAD_F(0x10008004),  /* 2^13 / (2^13 - 1) == 1.00012208521548 */
  37.   MAD_F(0x10004001),  /* 2^14 / (2^14 - 1) == 1.00006103888177 */
  38.   MAD_F(0x10002000)   /* 2^15 / (2^15 - 1) == 1.00003051850948 */
  39. };
  40. static
  41. mad_fixed_t I_sample(struct mad_bitptr *ptr, unsigned int nb)
  42. {
  43.   mad_fixed_t sample;
  44.   sample = mad_bit_read(ptr, nb);
  45.   sample ^= 1 << (nb - 1);
  46.   sample |= -(sample & (1 << (nb - 1)));
  47.   sample <<= MAD_F_FRACBITS - (nb - 1);
  48.   /* s'' = (2^nb / (2^nb - 1)) * (s''' + 2^(-nb + 1)) */
  49.   sample += MAD_F_ONE >> (nb - 1);
  50.   return mad_f_mul(sample, linear_table[nb - 2]);
  51.   /* s' = factor * s'' */
  52. }
  53. int mad_layer_I(struct mad_stream *stream, struct mad_frame *frame)
  54. {
  55.   struct mad_header *header = &frame->header;
  56.   unsigned int nch, bound, ch, s, sb, nb;
  57.   unsigned char allocation[2][32], scalefactor[2][32];
  58.   nch = MAD_NCHANNELS(header);
  59.   bound = 32;
  60.   if (header->mode == MAD_MODE_JOINT_STEREO) {
  61.     header->flags |= MAD_FLAG_I_STEREO;
  62.     bound = 4 + header->mode_extension * 4;
  63.   }
  64.   if (header->flags & MAD_FLAG_PROTECTION) {
  65.     header->crc_check =
  66.       mad_bit_crc(stream->ptr, 4 * (bound * nch + (32 - bound)),
  67.   header->crc_check);
  68.     if (header->crc_check != header->crc_target &&
  69. !(frame->options & MAD_OPTION_IGNORECRC)) {
  70.       stream->error = MAD_ERROR_BADCRC;
  71.       return -1;
  72.     }
  73.   }
  74.   for (sb = 0; sb < bound; ++sb) {
  75.     for (ch = 0; ch < nch; ++ch) {
  76.       nb = mad_bit_read(&stream->ptr, 4);
  77.       if (nb == 15) {
  78. stream->error = MAD_ERROR_BADBITALLOC;
  79. return -1;
  80.       }
  81.       allocation[ch][sb] = nb ? nb + 1 : 0;
  82.     }
  83.   }
  84.   for (sb = bound; sb < 32; ++sb) {
  85.     nb = mad_bit_read(&stream->ptr, 4);
  86.     if (nb == 15) {
  87.       stream->error = MAD_ERROR_BADBITALLOC;
  88.       return -1;
  89.     }
  90.     allocation[0][sb] =
  91.     allocation[1][sb] = nb ? nb + 1 : 0;
  92.   }
  93.   for (sb = 0; sb < 32; ++sb) {
  94.     for (ch = 0; ch < nch; ++ch) {
  95.       if (allocation[ch][sb]) {
  96. scalefactor[ch][sb] = mad_bit_read(&stream->ptr, 6);
  97. if (scalefactor[ch][sb] == 63) {
  98.   stream->error = MAD_ERROR_BADSCALEFACTOR;
  99.   return -1;
  100. }
  101.       }
  102.     }
  103.   }
  104.   for (s = 0; s < 12; ++s) {
  105.     for (sb = 0; sb < bound; ++sb) {
  106.       for (ch = 0; ch < nch; ++ch) {
  107. nb = allocation[ch][sb];
  108. frame->sbsample[ch][s][sb] = nb ?
  109.   mad_f_mul(I_sample(&stream->ptr, nb),
  110.     sf_table[scalefactor[ch][sb]]) : 0;
  111.       }
  112.     }
  113.     for (sb = bound; sb < 32; ++sb) {
  114.       if ((nb = allocation[0][sb])) {
  115. mad_fixed_t sample;
  116. sample = I_sample(&stream->ptr, nb);
  117. for (ch = 0; ch < nch; ++ch) {
  118.   frame->sbsample[ch][s][sb] =
  119.     mad_f_mul(sample, sf_table[scalefactor[ch][sb]]);
  120. }
  121.       }
  122.       else {
  123. for (ch = 0; ch < nch; ++ch)
  124.   frame->sbsample[ch][s][sb] = 0;
  125.       }
  126.     }
  127.   }
  128.   return 0;
  129. }
  130. /* --- Layer II ------------------------------------------------------------ */
  131. static
  132. struct {
  133.   unsigned int sblimit;
  134.   unsigned char const offsets[30];
  135. } const sbquant_table[5] = {
  136.   /* ISO/IEC 11172-3 Table B.2a */
  137.   { 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, /* 0 */
  138.   3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
  139.   /* ISO/IEC 11172-3 Table B.2b */
  140.   { 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, /* 1 */
  141.   3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
  142.   /* ISO/IEC 11172-3 Table B.2c */
  143.   {  8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
  144.   /* ISO/IEC 11172-3 Table B.2d */
  145.   { 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
  146.   /* ISO/IEC 13818-3 Table B.1 */
  147.   { 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, /* 4 */
  148.   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
  149. };
  150. static
  151. struct {
  152.   unsigned short nbal;
  153.   unsigned short offset;
  154. } const bitalloc_table[8] = {
  155.   { 2, 0 },  /* 0 */
  156.   { 2, 3 },  /* 1 */
  157.   { 3, 3 },  /* 2 */
  158.   { 3, 1 },  /* 3 */
  159.   { 4, 2 },  /* 4 */
  160.   { 4, 3 },  /* 5 */
  161.   { 4, 4 },  /* 6 */
  162.   { 4, 5 }   /* 7 */
  163. };
  164. static
  165. unsigned char const offset_table[6][15] = {
  166.   { 0, 1, 16                                             },  /* 0 */
  167.   { 0, 1,  2, 3, 4, 5, 16                                },  /* 1 */
  168.   { 0, 1,  2, 3, 4, 5,  6, 7,  8,  9, 10, 11, 12, 13, 14 },  /* 2 */
  169.   { 0, 1,  3, 4, 5, 6,  7, 8,  9, 10, 11, 12, 13, 14, 15 },  /* 3 */
  170.   { 0, 1,  2, 3, 4, 5,  6, 7,  8,  9, 10, 11, 12, 13, 16 },  /* 4 */
  171.   { 0, 2,  4, 5, 6, 7,  8, 9, 10, 11, 12, 13, 14, 15, 16 }   /* 5 */
  172. };
  173. static
  174. struct quantclass {
  175.   unsigned short nlevels;
  176.   unsigned char group;
  177.   unsigned char bits;
  178.   mad_fixed_t C;
  179.   mad_fixed_t D;
  180. } const qc_table[17] = {
  181. # include "qc_table.dat"
  182. };
  183. static
  184. void II_samples(struct mad_bitptr *ptr,
  185. struct quantclass const *quantclass,
  186. mad_fixed_t output[3])
  187. {
  188.   unsigned int nb, s, sample[3];
  189.   if ((nb = quantclass->group)) {
  190.     unsigned int c, nlevels;
  191.     c = mad_bit_read(ptr, quantclass->bits);
  192.     nlevels = quantclass->nlevels;
  193.     for (s = 0; s < 3; ++s) {
  194.       sample[s] = c % nlevels;
  195.       c /= nlevels;
  196.     }
  197.   }
  198.   else {
  199.     nb = quantclass->bits;
  200.     for (s = 0; s < 3; ++s)
  201.       sample[s] = mad_bit_read(ptr, nb);
  202.   }
  203.   for (s = 0; s < 3; ++s) {
  204.     mad_fixed_t requantized;
  205.     requantized  = sample[s] ^ (1 << (nb - 1));
  206.     requantized |= -(requantized & (1 << (nb - 1)));
  207.     requantized <<= MAD_F_FRACBITS - (nb - 1);
  208.     /* s'' = C * (s''' + D) */
  209.     output[s] = mad_f_mul(requantized + quantclass->D, quantclass->C);
  210.     /* s' = factor * s'' */
  211.   }
  212. }
  213. int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
  214. {
  215.   struct mad_header *header = &frame->header;
  216.   struct mad_bitptr start;
  217.   unsigned int index, sblimit, nbal, nch, bound, gr, ch, s, sb;
  218.   unsigned char const *offsets;
  219.   unsigned char allocation[2][32], scfsi[2][32], scalefactor[2][32][3];
  220.   mad_fixed_t samples[3];
  221.   nch = MAD_NCHANNELS(header);
  222.   if (header->flags & MAD_FLAG_LSF_EXT)
  223.     index = 4;
  224.   else {
  225.     switch (nch == 2 ? header->bitrate / 2 : header->bitrate) {
  226.     case 32000:
  227.     case 48000:
  228.       index = (header->samplerate == 32000) ? 3 : 2;
  229.       break;
  230.     case 56000:
  231.     case 64000:
  232.     case 80000:
  233.       index = 0;
  234.       break;
  235.     default:
  236.       index = (header->samplerate == 48000) ? 0 : 1;
  237.     }
  238.   }
  239.   sblimit = sbquant_table[index].sblimit;
  240.   offsets = sbquant_table[index].offsets;
  241.   bound = 32;
  242.   if (header->mode == MAD_MODE_JOINT_STEREO) {
  243.     header->flags |= MAD_FLAG_I_STEREO;
  244.     bound = 4 + header->mode_extension * 4;
  245.   }
  246.   if (bound > sblimit)
  247.     bound = sblimit;
  248.   start = stream->ptr;
  249.   for (sb = 0; sb < bound; ++sb) {
  250.     nbal = bitalloc_table[offsets[sb]].nbal;
  251.     for (ch = 0; ch < nch; ++ch)
  252.       allocation[ch][sb] = mad_bit_read(&stream->ptr, nbal);
  253.   }
  254.   for (sb = bound; sb < sblimit; ++sb) {
  255.     nbal = bitalloc_table[offsets[sb]].nbal;
  256.     allocation[0][sb] =
  257.     allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
  258.   }
  259.   for (sb = 0; sb < sblimit; ++sb) {
  260.     for (ch = 0; ch < nch; ++ch) {
  261.       if (allocation[ch][sb])
  262. scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
  263.     }
  264.   }
  265.   if (header->flags & MAD_FLAG_PROTECTION) {
  266.     header->crc_check =
  267.       mad_bit_crc(start, mad_bit_length(&start, &stream->ptr),
  268.   header->crc_check);
  269.     if (header->crc_check != header->crc_target &&
  270. !(frame->options & MAD_OPTION_IGNORECRC)) {
  271.       stream->error = MAD_ERROR_BADCRC;
  272.       return -1;
  273.     }
  274.   }
  275.   for (sb = 0; sb < sblimit; ++sb) {
  276.     for (ch = 0; ch < nch; ++ch) {
  277.       if (allocation[ch][sb]) {
  278. scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);
  279. switch (scfsi[ch][sb]) {
  280. case 2:
  281.   scalefactor[ch][sb][2] =
  282.   scalefactor[ch][sb][1] =
  283.   scalefactor[ch][sb][0];
  284.   break;
  285. case 0:
  286.   scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
  287. case 1:
  288. case 3:
  289.   scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
  290. }
  291. if (scfsi[ch][sb] & 1)
  292.   scalefactor[ch][sb][1] = scalefactor[ch][sb][scfsi[ch][sb] - 1];
  293. if (scalefactor[ch][sb][0] == 63 ||
  294.     scalefactor[ch][sb][1] == 63 ||
  295.     scalefactor[ch][sb][2] == 63) {
  296.   stream->error = MAD_ERROR_BADSCALEFACTOR;
  297.   return -1;
  298. }
  299.       }
  300.     }
  301.   }
  302.   for (gr = 0; gr < 12; ++gr) {
  303.     for (sb = 0; sb < bound; ++sb) {
  304.       for (ch = 0; ch < nch; ++ch) {
  305. if ((index = allocation[ch][sb])) {
  306.   index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
  307.   II_samples(&stream->ptr, &qc_table[index], samples);
  308.   for (s = 0; s < 3; ++s) {
  309.     frame->sbsample[ch][3 * gr + s][sb] =
  310.       mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
  311.   }
  312. }
  313. else {
  314.   for (s = 0; s < 3; ++s)
  315.     frame->sbsample[ch][3 * gr + s][sb] = 0;
  316. }
  317.       }
  318.     }
  319.     for (sb = bound; sb < sblimit; ++sb) {
  320.       if ((index = allocation[0][sb])) {
  321. index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
  322. II_samples(&stream->ptr, &qc_table[index], samples);
  323. for (ch = 0; ch < nch; ++ch) {
  324.   for (s = 0; s < 3; ++s) {
  325.     frame->sbsample[ch][3 * gr + s][sb] =
  326.       mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
  327.   }
  328. }
  329.       }
  330.       else {
  331. for (ch = 0; ch < nch; ++ch) {
  332.   for (s = 0; s < 3; ++s)
  333.     frame->sbsample[ch][3 * gr + s][sb] = 0;
  334. }
  335.       }
  336.     }
  337.     for (ch = 0; ch < nch; ++ch) {
  338.       for (s = 0; s < 3; ++s) {
  339. for (sb = sblimit; sb < 32; ++sb)
  340.   frame->sbsample[ch][3 * gr + s][sb] = 0;
  341.       }
  342.     }
  343.   }
  344.   return 0;
  345. }