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

多媒体编程

开发平台:

Visual C++

  1. /*
  2.  * libmad - MPEG audio decoder library
  3.  
  4.  */
  5. # ifdef HAVE_CONFIG_H
  6. #  include "config.h"
  7. # endif
  8. # include "global.h"
  9. # include <stdlib.h>
  10. # include "bit.h"
  11. # include "stream.h"
  12. # include "frame.h"
  13. # include "timer.h"
  14. # include "layer12.h"
  15. # include "layer3.h"
  16. static
  17. unsigned long const bitrate_table[5][15] = {
  18.   /* MPEG-1 */
  19.   { 0,  32000,  64000,  96000, 128000, 160000, 192000, 224000,  /* Layer I   */
  20.        256000, 288000, 320000, 352000, 384000, 416000, 448000 },
  21.   { 0,  32000,  48000,  56000,  64000,  80000,  96000, 112000,  /* Layer II  */
  22.        128000, 160000, 192000, 224000, 256000, 320000, 384000 },
  23.   { 0,  32000,  40000,  48000,  56000,  64000,  80000,  96000,  /* Layer III */
  24.        112000, 128000, 160000, 192000, 224000, 256000, 320000 },
  25.   /* MPEG-2 LSF */
  26.   { 0,  32000,  48000,  56000,  64000,  80000,  96000, 112000,  /* Layer I   */
  27.        128000, 144000, 160000, 176000, 192000, 224000, 256000 },
  28.   { 0,   8000,  16000,  24000,  32000,  40000,  48000,  56000,  /* Layers    */
  29.         64000,  80000,  96000, 112000, 128000, 144000, 160000 } /* II & III  */
  30. };
  31. static
  32. unsigned int const samplerate_table[3] = { 44100, 48000, 32000 };
  33. static
  34. int (*const decoder_table[3])(struct mad_stream *, struct mad_frame *) = {
  35.   mad_layer_I,
  36.   mad_layer_II,
  37.   mad_layer_III
  38. };
  39. /*
  40.  * NAME: header->init()
  41.  * DESCRIPTION: initialize header struct
  42.  */
  43. void mad_header_init(struct mad_header *header)
  44. {
  45.   header->layer          = 0;
  46.   header->mode           = 0;
  47.   header->mode_extension = 0;
  48.   header->emphasis       = 0;
  49.   header->bitrate        = 0;
  50.   header->samplerate     = 0;
  51.   header->crc_check      = 0;
  52.   header->crc_target     = 0;
  53.   header->flags          = 0;
  54.   header->private_bits   = 0;
  55.   header->duration       = mad_timer_zero;
  56. }
  57. /*
  58.  * NAME: frame->init()
  59.  * DESCRIPTION: initialize frame struct
  60.  */
  61. void mad_frame_init(struct mad_frame *frame)
  62. {
  63.   mad_header_init(&frame->header);
  64.   frame->options = 0;
  65.   frame->overlap = 0;
  66.   mad_frame_mute(frame);
  67. }
  68. /*
  69.  * NAME: frame->finish()
  70.  * DESCRIPTION: deallocate any dynamic memory associated with frame
  71.  */
  72. void mad_frame_finish(struct mad_frame *frame)
  73. {
  74.   mad_header_finish(&frame->header);
  75.   if (frame->overlap) {
  76.     free(frame->overlap);
  77.     frame->overlap = 0;
  78.   }
  79. }
  80. /*
  81.  * NAME: decode_header()
  82.  * DESCRIPTION: read header data and following CRC word
  83.  */
  84. static
  85. int decode_header(struct mad_header *header, struct mad_stream *stream)
  86. {
  87.   unsigned int index;
  88.   header->flags        = 0;
  89.   header->private_bits = 0;
  90.   /* header() */
  91.   /* syncword */
  92.   mad_bit_skip(&stream->ptr, 11);
  93.   /* MPEG 2.5 indicator (really part of syncword) */
  94.   if (mad_bit_read(&stream->ptr, 1) == 0)
  95.     header->flags |= MAD_FLAG_MPEG_2_5_EXT;
  96.   /* ID */
  97.   if (mad_bit_read(&stream->ptr, 1) == 0)
  98.     header->flags |= MAD_FLAG_LSF_EXT;
  99.   else if (header->flags & MAD_FLAG_MPEG_2_5_EXT) {
  100.     stream->error = MAD_ERROR_LOSTSYNC;
  101.     return -1;
  102.   }
  103.   /* layer */
  104.   header->layer = 4 - mad_bit_read(&stream->ptr, 2);
  105.   if (header->layer == 4) {
  106.     stream->error = MAD_ERROR_BADLAYER;
  107.     return -1;
  108.   }
  109.   /* protection_bit */
  110.   if (mad_bit_read(&stream->ptr, 1) == 0) {
  111.     header->flags    |= MAD_FLAG_PROTECTION;
  112.     header->crc_check = mad_bit_crc(stream->ptr, 16, 0xffff);
  113.   }
  114.   /* bitrate_index */
  115.   index = mad_bit_read(&stream->ptr, 4);
  116.   if (index == 15) {
  117.     stream->error = MAD_ERROR_BADBITRATE;
  118.     return -1;
  119.   }
  120.   if (header->flags & MAD_FLAG_LSF_EXT)
  121.     header->bitrate = bitrate_table[3 + (header->layer >> 1)][index];
  122.   else
  123.     header->bitrate = bitrate_table[header->layer - 1][index];
  124.   /* sampling_frequency */
  125.   index = mad_bit_read(&stream->ptr, 2);
  126.   if (index == 3) {
  127.     stream->error = MAD_ERROR_BADSAMPLERATE;
  128.     return -1;
  129.   }
  130.   header->samplerate = samplerate_table[index];
  131.   if (header->flags & MAD_FLAG_LSF_EXT) {
  132.     header->samplerate /= 2;
  133.     if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
  134.       header->samplerate /= 2;
  135.   }
  136.   /* padding_bit */
  137.   if (mad_bit_read(&stream->ptr, 1))
  138.     header->flags |= MAD_FLAG_PADDING;
  139.   /* private_bit */
  140.   if (mad_bit_read(&stream->ptr, 1))
  141.     header->private_bits |= MAD_PRIVATE_HEADER;
  142.   /* mode */
  143.   header->mode = 3 - mad_bit_read(&stream->ptr, 2);
  144.   /* mode_extension */
  145.   header->mode_extension = mad_bit_read(&stream->ptr, 2);
  146.   /* copyright */
  147.   if (mad_bit_read(&stream->ptr, 1))
  148.     header->flags |= MAD_FLAG_COPYRIGHT;
  149.   /* original/copy */
  150.   if (mad_bit_read(&stream->ptr, 1))
  151.     header->flags |= MAD_FLAG_ORIGINAL;
  152.   /* emphasis */
  153.   header->emphasis = mad_bit_read(&stream->ptr, 2);
  154.   if (header->emphasis == 2) {
  155.     stream->error = MAD_ERROR_BADEMPHASIS;
  156.     return -1;
  157.   }
  158.   /* error_check() */
  159.   /* crc_check */
  160.   if (header->flags & MAD_FLAG_PROTECTION)
  161.     header->crc_target = mad_bit_read(&stream->ptr, 16);
  162.   return 0;
  163. }
  164. /*
  165.  * NAME: free_bitrate()
  166.  * DESCRIPTION: attempt to discover the bitstream's free bitrate
  167.  */
  168. static
  169. int free_bitrate(struct mad_stream *stream, struct mad_header const *header)
  170. {
  171.   struct mad_bitptr keep_ptr;
  172.   unsigned long rate = 0;
  173.   unsigned int pad_slot, slots_per_frame;
  174.   unsigned char const *ptr = 0;
  175.   keep_ptr = stream->ptr;
  176.   pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
  177.   slots_per_frame = (header->layer == MAD_LAYER_III &&
  178.      (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
  179.   while (mad_stream_sync(stream) == 0) {
  180.     struct mad_stream peek_stream;
  181.     struct mad_header peek_header;
  182.     peek_stream = *stream;
  183.     peek_header = *header;
  184.     if (decode_header(&peek_header, &peek_stream) == 0 &&
  185. peek_header.layer == header->layer &&
  186. peek_header.samplerate == header->samplerate) {
  187.       unsigned int N;
  188.       ptr = mad_bit_nextbyte(&stream->ptr);
  189.       N = ptr - stream->this_frame;
  190.       if (header->layer == MAD_LAYER_I) {
  191. rate = (unsigned long) header->samplerate *
  192.   (N - 4 * pad_slot + 4) / 48 / 1000;
  193.       }
  194.       else {
  195. rate = (unsigned long) header->samplerate *
  196.   (N - pad_slot + 1) / slots_per_frame / 1000;
  197.       }
  198.       if (rate >= 8)
  199. break;
  200.     }
  201.     mad_bit_skip(&stream->ptr, 8);
  202.   }
  203.   stream->ptr = keep_ptr;
  204.   if (rate < 8 || (header->layer == MAD_LAYER_III && rate > 640)) {
  205.     stream->error = MAD_ERROR_LOSTSYNC;
  206.     return -1;
  207.   }
  208.   stream->freerate = rate * 1000;
  209. # if 0 && defined(DEBUG)
  210.   fprintf(stderr, "free bitrate == %lun", stream->freerate);
  211. # endif
  212.   return 0;
  213. }
  214. /*
  215.  * NAME: header->decode()
  216.  * DESCRIPTION: read the next frame header from the stream
  217.  */
  218. int mad_header_decode(struct mad_header *header, struct mad_stream *stream)
  219. {
  220.   register unsigned char const *ptr, *end;
  221.   unsigned int pad_slot, N;
  222.   ptr = stream->next_frame;
  223.   end = stream->bufend;
  224.   if (ptr == 0) {
  225.     stream->error = MAD_ERROR_BUFPTR;
  226.     goto fail;
  227.   }
  228.   /* stream skip */
  229.   if (stream->skiplen) {
  230.     if (!stream->sync)
  231.       ptr = stream->this_frame;
  232.     if (end - ptr < stream->skiplen) {
  233.       stream->skiplen   -= end - ptr;
  234.       stream->next_frame = end;
  235.       stream->error = MAD_ERROR_BUFLEN;
  236.       goto fail;
  237.     }
  238.     ptr += stream->skiplen;
  239.     stream->skiplen = 0;
  240.     stream->sync = 1;
  241.   }
  242.  sync:
  243.   /* synchronize */
  244.   if (stream->sync) {
  245.     if (end - ptr < MAD_BUFFER_GUARD) {
  246.       stream->next_frame = ptr;
  247.       stream->error = MAD_ERROR_BUFLEN;
  248.       goto fail;
  249.     }
  250.     else if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
  251.       /* mark point where frame sync word was expected */
  252.       stream->this_frame = ptr;
  253.       stream->next_frame = ptr + 1;
  254.       stream->error = MAD_ERROR_LOSTSYNC;
  255.       goto fail;
  256.     }
  257.   }
  258.   else {
  259.     mad_bit_init(&stream->ptr, ptr);
  260.     if (mad_stream_sync(stream) == -1) {
  261.       if (end - stream->next_frame >= MAD_BUFFER_GUARD)
  262. stream->next_frame = end - MAD_BUFFER_GUARD;
  263.       stream->error = MAD_ERROR_BUFLEN;
  264.       goto fail;
  265.     }
  266.     ptr = mad_bit_nextbyte(&stream->ptr);
  267.   }
  268.   /* begin processing */
  269.   stream->this_frame = ptr;
  270.   stream->next_frame = ptr + 1;  /* possibly bogus sync word */
  271.   mad_bit_init(&stream->ptr, stream->this_frame);
  272.   if (decode_header(header, stream) == -1)
  273.     goto fail;
  274.   /* calculate frame duration */
  275.   mad_timer_set(&header->duration, 0,
  276. 32 * MAD_NSBSAMPLES(header), header->samplerate);
  277.   /* calculate free bit rate */
  278.   if (header->bitrate == 0) {
  279.     if ((stream->freerate == 0 || !stream->sync) &&
  280. free_bitrate(stream, header) == -1)
  281.       goto fail;
  282.     header->bitrate = stream->freerate;
  283.     header->flags  |= MAD_FLAG_FREEFORMAT;
  284.   }
  285.   /* calculate beginning of next frame */
  286.   pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
  287.   if (header->layer == MAD_LAYER_I)
  288.     N = ((12 * header->bitrate / header->samplerate) + pad_slot) * 4;
  289.   else {
  290.     unsigned int slots_per_frame;
  291.     slots_per_frame = (header->layer == MAD_LAYER_III &&
  292.        (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
  293.     N = (slots_per_frame * header->bitrate / header->samplerate) + pad_slot;
  294.   }
  295.   /* verify there is enough data left in buffer to decode this frame */
  296.   if (N + MAD_BUFFER_GUARD > end - stream->this_frame) {
  297.     stream->next_frame = stream->this_frame;
  298.     stream->error = MAD_ERROR_BUFLEN;
  299.     goto fail;
  300.   }
  301.   stream->next_frame = stream->this_frame + N;
  302.   if (!stream->sync) {
  303.     /* check that a valid frame header follows this frame */
  304.     ptr = stream->next_frame;
  305.     if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
  306.       ptr = stream->next_frame = stream->this_frame + 1;
  307.       goto sync;
  308.     }
  309.     stream->sync = 1;
  310.   }
  311.   header->flags |= MAD_FLAG_INCOMPLETE;
  312.   return 0;
  313.  fail:
  314.   stream->sync = 0;
  315.   return -1;
  316. }
  317. /*
  318.  * NAME: frame->decode()
  319.  * DESCRIPTION: decode a single frame from a bitstream
  320.  */
  321. int mad_frame_decode(struct mad_frame *frame, struct mad_stream *stream)
  322. {
  323.   frame->options = stream->options;
  324.   /* header() */
  325.   /* error_check() */
  326.   if (!(frame->header.flags & MAD_FLAG_INCOMPLETE) &&
  327.       mad_header_decode(&frame->header, stream) == -1)
  328.     goto fail;
  329.   /* audio_data() */
  330.   frame->header.flags &= ~MAD_FLAG_INCOMPLETE;
  331.   if (decoder_table[frame->header.layer - 1](stream, frame) == -1) {
  332.     if (!MAD_RECOVERABLE(stream->error))
  333.       stream->next_frame = stream->this_frame;
  334.     goto fail;
  335.   }
  336.   /* ancillary_data() */
  337.   if (frame->header.layer != MAD_LAYER_III) {
  338.     struct mad_bitptr next_frame;
  339.     mad_bit_init(&next_frame, stream->next_frame);
  340.     stream->anc_ptr    = stream->ptr;
  341.     stream->anc_bitlen = mad_bit_length(&stream->ptr, &next_frame);
  342.     mad_bit_finish(&next_frame);
  343.   }
  344.   return 0;
  345.  fail:
  346.   stream->anc_bitlen = 0;
  347.   return -1;
  348. }
  349. /*
  350.  * NAME: frame->mute()
  351.  * DESCRIPTION: zero all subband values so the frame becomes silent
  352.  */
  353. void mad_frame_mute(struct mad_frame *frame)
  354. {
  355.   unsigned int s, sb;
  356.   for (s = 0; s < 36; ++s) {
  357.     for (sb = 0; sb < 32; ++sb) {
  358.       frame->sbsample[0][s][sb] =
  359.       frame->sbsample[1][s][sb] = 0;
  360.     }
  361.   }
  362.   if (frame->overlap) {
  363.     for (s = 0; s < 18; ++s) {
  364.       for (sb = 0; sb < 32; ++sb) {
  365. (*frame->overlap)[0][sb][s] =
  366. (*frame->overlap)[1][sb][s] = 0;
  367.       }
  368.     }
  369.   }
  370. }