亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? frame.c

?? < VC++視頻音頻開發(fā)>> 這本書的源碼
?? C
字號(hào):
/*
 * libmad - MPEG audio decoder library
 
 */

# ifdef HAVE_CONFIG_H
#  include "config.h"
# endif

# include "global.h"

# include <stdlib.h>

# include "bit.h"
# include "stream.h"
# include "frame.h"
# include "timer.h"
# include "layer12.h"
# include "layer3.h"

static
unsigned long const bitrate_table[5][15] = {
  /* MPEG-1 */
  { 0,  32000,  64000,  96000, 128000, 160000, 192000, 224000,  /* Layer I   */
       256000, 288000, 320000, 352000, 384000, 416000, 448000 },
  { 0,  32000,  48000,  56000,  64000,  80000,  96000, 112000,  /* Layer II  */
       128000, 160000, 192000, 224000, 256000, 320000, 384000 },
  { 0,  32000,  40000,  48000,  56000,  64000,  80000,  96000,  /* Layer III */
       112000, 128000, 160000, 192000, 224000, 256000, 320000 },

  /* MPEG-2 LSF */
  { 0,  32000,  48000,  56000,  64000,  80000,  96000, 112000,  /* Layer I   */
       128000, 144000, 160000, 176000, 192000, 224000, 256000 },
  { 0,   8000,  16000,  24000,  32000,  40000,  48000,  56000,  /* Layers    */
        64000,  80000,  96000, 112000, 128000, 144000, 160000 } /* II & III  */
};

static
unsigned int const samplerate_table[3] = { 44100, 48000, 32000 };

static
int (*const decoder_table[3])(struct mad_stream *, struct mad_frame *) = {
  mad_layer_I,
  mad_layer_II,
  mad_layer_III
};

/*
 * NAME:	header->init()
 * DESCRIPTION:	initialize header struct
 */
void mad_header_init(struct mad_header *header)
{
  header->layer          = 0;
  header->mode           = 0;
  header->mode_extension = 0;
  header->emphasis       = 0;

  header->bitrate        = 0;
  header->samplerate     = 0;

  header->crc_check      = 0;
  header->crc_target     = 0;

  header->flags          = 0;
  header->private_bits   = 0;

  header->duration       = mad_timer_zero;
}

/*
 * NAME:	frame->init()
 * DESCRIPTION:	initialize frame struct
 */
void mad_frame_init(struct mad_frame *frame)
{
  mad_header_init(&frame->header);

  frame->options = 0;

  frame->overlap = 0;
  mad_frame_mute(frame);
}

/*
 * NAME:	frame->finish()
 * DESCRIPTION:	deallocate any dynamic memory associated with frame
 */
void mad_frame_finish(struct mad_frame *frame)
{
  mad_header_finish(&frame->header);

  if (frame->overlap) {
    free(frame->overlap);
    frame->overlap = 0;
  }
}

/*
 * NAME:	decode_header()
 * DESCRIPTION:	read header data and following CRC word
 */
static
int decode_header(struct mad_header *header, struct mad_stream *stream)
{
  unsigned int index;

  header->flags        = 0;
  header->private_bits = 0;

  /* header() */

  /* syncword */
  mad_bit_skip(&stream->ptr, 11);

  /* MPEG 2.5 indicator (really part of syncword) */
  if (mad_bit_read(&stream->ptr, 1) == 0)
    header->flags |= MAD_FLAG_MPEG_2_5_EXT;

  /* ID */
  if (mad_bit_read(&stream->ptr, 1) == 0)
    header->flags |= MAD_FLAG_LSF_EXT;
  else if (header->flags & MAD_FLAG_MPEG_2_5_EXT) {
    stream->error = MAD_ERROR_LOSTSYNC;
    return -1;
  }

  /* layer */
  header->layer = 4 - mad_bit_read(&stream->ptr, 2);

  if (header->layer == 4) {
    stream->error = MAD_ERROR_BADLAYER;
    return -1;
  }

  /* protection_bit */
  if (mad_bit_read(&stream->ptr, 1) == 0) {
    header->flags    |= MAD_FLAG_PROTECTION;
    header->crc_check = mad_bit_crc(stream->ptr, 16, 0xffff);
  }

  /* bitrate_index */
  index = mad_bit_read(&stream->ptr, 4);

  if (index == 15) {
    stream->error = MAD_ERROR_BADBITRATE;
    return -1;
  }

  if (header->flags & MAD_FLAG_LSF_EXT)
    header->bitrate = bitrate_table[3 + (header->layer >> 1)][index];
  else
    header->bitrate = bitrate_table[header->layer - 1][index];

  /* sampling_frequency */
  index = mad_bit_read(&stream->ptr, 2);

  if (index == 3) {
    stream->error = MAD_ERROR_BADSAMPLERATE;
    return -1;
  }

  header->samplerate = samplerate_table[index];

  if (header->flags & MAD_FLAG_LSF_EXT) {
    header->samplerate /= 2;

    if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
      header->samplerate /= 2;
  }

  /* padding_bit */
  if (mad_bit_read(&stream->ptr, 1))
    header->flags |= MAD_FLAG_PADDING;

  /* private_bit */
  if (mad_bit_read(&stream->ptr, 1))
    header->private_bits |= MAD_PRIVATE_HEADER;

  /* mode */
  header->mode = 3 - mad_bit_read(&stream->ptr, 2);

  /* mode_extension */
  header->mode_extension = mad_bit_read(&stream->ptr, 2);

  /* copyright */
  if (mad_bit_read(&stream->ptr, 1))
    header->flags |= MAD_FLAG_COPYRIGHT;

  /* original/copy */
  if (mad_bit_read(&stream->ptr, 1))
    header->flags |= MAD_FLAG_ORIGINAL;

  /* emphasis */
  header->emphasis = mad_bit_read(&stream->ptr, 2);

  if (header->emphasis == 2) {
    stream->error = MAD_ERROR_BADEMPHASIS;
    return -1;
  }

  /* error_check() */

  /* crc_check */
  if (header->flags & MAD_FLAG_PROTECTION)
    header->crc_target = mad_bit_read(&stream->ptr, 16);

  return 0;
}

/*
 * NAME:	free_bitrate()
 * DESCRIPTION:	attempt to discover the bitstream's free bitrate
 */
static
int free_bitrate(struct mad_stream *stream, struct mad_header const *header)
{
  struct mad_bitptr keep_ptr;
  unsigned long rate = 0;
  unsigned int pad_slot, slots_per_frame;
  unsigned char const *ptr = 0;

  keep_ptr = stream->ptr;

  pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
  slots_per_frame = (header->layer == MAD_LAYER_III &&
		     (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;

  while (mad_stream_sync(stream) == 0) {
    struct mad_stream peek_stream;
    struct mad_header peek_header;

    peek_stream = *stream;
    peek_header = *header;

    if (decode_header(&peek_header, &peek_stream) == 0 &&
	peek_header.layer == header->layer &&
	peek_header.samplerate == header->samplerate) {
      unsigned int N;

      ptr = mad_bit_nextbyte(&stream->ptr);

      N = ptr - stream->this_frame;

      if (header->layer == MAD_LAYER_I) {
	rate = (unsigned long) header->samplerate *
	  (N - 4 * pad_slot + 4) / 48 / 1000;
      }
      else {
	rate = (unsigned long) header->samplerate *
	  (N - pad_slot + 1) / slots_per_frame / 1000;
      }

      if (rate >= 8)
	break;
    }

    mad_bit_skip(&stream->ptr, 8);
  }

  stream->ptr = keep_ptr;

  if (rate < 8 || (header->layer == MAD_LAYER_III && rate > 640)) {
    stream->error = MAD_ERROR_LOSTSYNC;
    return -1;
  }

  stream->freerate = rate * 1000;

# if 0 && defined(DEBUG)
  fprintf(stderr, "free bitrate == %lu\n", stream->freerate);
# endif

  return 0;
}

/*
 * NAME:	header->decode()
 * DESCRIPTION:	read the next frame header from the stream
 */
int mad_header_decode(struct mad_header *header, struct mad_stream *stream)
{
  register unsigned char const *ptr, *end;
  unsigned int pad_slot, N;

  ptr = stream->next_frame;
  end = stream->bufend;

  if (ptr == 0) {
    stream->error = MAD_ERROR_BUFPTR;
    goto fail;
  }

  /* stream skip */
  if (stream->skiplen) {
    if (!stream->sync)
      ptr = stream->this_frame;

    if (end - ptr < stream->skiplen) {
      stream->skiplen   -= end - ptr;
      stream->next_frame = end;

      stream->error = MAD_ERROR_BUFLEN;
      goto fail;
    }

    ptr += stream->skiplen;
    stream->skiplen = 0;

    stream->sync = 1;
  }

 sync:
  /* synchronize */
  if (stream->sync) {
    if (end - ptr < MAD_BUFFER_GUARD) {
      stream->next_frame = ptr;

      stream->error = MAD_ERROR_BUFLEN;
      goto fail;
    }
    else if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
      /* mark point where frame sync word was expected */
      stream->this_frame = ptr;
      stream->next_frame = ptr + 1;

      stream->error = MAD_ERROR_LOSTSYNC;
      goto fail;
    }
  }
  else {
    mad_bit_init(&stream->ptr, ptr);

    if (mad_stream_sync(stream) == -1) {
      if (end - stream->next_frame >= MAD_BUFFER_GUARD)
	stream->next_frame = end - MAD_BUFFER_GUARD;

      stream->error = MAD_ERROR_BUFLEN;
      goto fail;
    }

    ptr = mad_bit_nextbyte(&stream->ptr);
  }

  /* begin processing */
  stream->this_frame = ptr;
  stream->next_frame = ptr + 1;  /* possibly bogus sync word */

  mad_bit_init(&stream->ptr, stream->this_frame);

  if (decode_header(header, stream) == -1)
    goto fail;

  /* calculate frame duration */
  mad_timer_set(&header->duration, 0,
		32 * MAD_NSBSAMPLES(header), header->samplerate);

  /* calculate free bit rate */
  if (header->bitrate == 0) {
    if ((stream->freerate == 0 || !stream->sync) &&
	free_bitrate(stream, header) == -1)
      goto fail;

    header->bitrate = stream->freerate;
    header->flags  |= MAD_FLAG_FREEFORMAT;
  }

  /* calculate beginning of next frame */
  pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;

  if (header->layer == MAD_LAYER_I)
    N = ((12 * header->bitrate / header->samplerate) + pad_slot) * 4;
  else {
    unsigned int slots_per_frame;

    slots_per_frame = (header->layer == MAD_LAYER_III &&
		       (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;

    N = (slots_per_frame * header->bitrate / header->samplerate) + pad_slot;
  }

  /* verify there is enough data left in buffer to decode this frame */
  if (N + MAD_BUFFER_GUARD > end - stream->this_frame) {
    stream->next_frame = stream->this_frame;

    stream->error = MAD_ERROR_BUFLEN;
    goto fail;
  }

  stream->next_frame = stream->this_frame + N;

  if (!stream->sync) {
    /* check that a valid frame header follows this frame */

    ptr = stream->next_frame;
    if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
      ptr = stream->next_frame = stream->this_frame + 1;
      goto sync;
    }

    stream->sync = 1;
  }

  header->flags |= MAD_FLAG_INCOMPLETE;

  return 0;

 fail:
  stream->sync = 0;

  return -1;
}

/*
 * NAME:	frame->decode()
 * DESCRIPTION:	decode a single frame from a bitstream
 */
int mad_frame_decode(struct mad_frame *frame, struct mad_stream *stream)
{
  frame->options = stream->options;

  /* header() */
  /* error_check() */

  if (!(frame->header.flags & MAD_FLAG_INCOMPLETE) &&
      mad_header_decode(&frame->header, stream) == -1)
    goto fail;

  /* audio_data() */

  frame->header.flags &= ~MAD_FLAG_INCOMPLETE;

  if (decoder_table[frame->header.layer - 1](stream, frame) == -1) {
    if (!MAD_RECOVERABLE(stream->error))
      stream->next_frame = stream->this_frame;

    goto fail;
  }

  /* ancillary_data() */

  if (frame->header.layer != MAD_LAYER_III) {
    struct mad_bitptr next_frame;

    mad_bit_init(&next_frame, stream->next_frame);

    stream->anc_ptr    = stream->ptr;
    stream->anc_bitlen = mad_bit_length(&stream->ptr, &next_frame);

    mad_bit_finish(&next_frame);
  }

  return 0;

 fail:
  stream->anc_bitlen = 0;
  return -1;
}

/*
 * NAME:	frame->mute()
 * DESCRIPTION:	zero all subband values so the frame becomes silent
 */
void mad_frame_mute(struct mad_frame *frame)
{
  unsigned int s, sb;

  for (s = 0; s < 36; ++s) {
    for (sb = 0; sb < 32; ++sb) {
      frame->sbsample[0][s][sb] =
      frame->sbsample[1][s][sb] = 0;
    }
  }

  if (frame->overlap) {
    for (s = 0; s < 18; ++s) {
      for (sb = 0; sb < 32; ++sb) {
	(*frame->overlap)[0][sb][s] =
	(*frame->overlap)[1][sb][s] = 0;
      }
    }
  }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品在线看| 精品国产亚洲在线| 亚洲日本丝袜连裤袜办公室| av不卡免费在线观看| 亚洲欧美一区二区久久| 欧美日韩免费高清一区色橹橹| 亚洲午夜免费视频| 欧美一区二区观看视频| 国产精品一级二级三级| 亚洲视频一区在线观看| 欧美日韩视频第一区| 久久成人麻豆午夜电影| 国产精品久久久久久久浪潮网站| 色噜噜狠狠色综合欧洲selulu| 三级一区在线视频先锋 | 亚洲一区二区四区蜜桃| 欧美一区二区三区在线观看视频 | 国产午夜精品美女毛片视频| 91在线观看成人| 日本视频免费一区| 欧美国产日韩亚洲一区| 欧美性极品少妇| 国产一区欧美一区| 亚洲影院免费观看| 久久久久久综合| 91精品福利视频| 狠狠色综合色综合网络| 一区二区三区鲁丝不卡| 久久精品在线观看| 在线精品视频小说1| 国内欧美视频一区二区 | 婷婷成人激情在线网| 久久久午夜精品理论片中文字幕| 91女人视频在线观看| 久久99九九99精品| 亚洲午夜久久久久久久久电影网| 2021国产精品久久精品| 欧美无砖砖区免费| 国产成人久久精品77777最新版本| 亚洲午夜久久久久中文字幕久| 久久精品视频免费观看| 欧美一区二区三区免费| 91在线视频网址| 国产精品原创巨作av| 三级影片在线观看欧美日韩一区二区| 中文天堂在线一区| wwww国产精品欧美| 欧美军同video69gay| 色综合久久久网| 成人性生交大合| 久久电影网站中文字幕| 亚洲成人av免费| 亚洲欧美在线视频观看| 国产亚洲精久久久久久| 日韩精品一区二区三区在线播放| 色欧美片视频在线观看在线视频| 成人精品视频一区二区三区| 韩国一区二区视频| 美腿丝袜在线亚洲一区| 亚洲国产精品嫩草影院| 亚洲男人的天堂在线观看| 中文在线免费一区三区高中清不卡| 欧美成人精品福利| 日韩精品一区二区三区蜜臀| 欧美美女一区二区| 欧美人妇做爰xxxⅹ性高电影| 日本高清视频一区二区| 91色九色蝌蚪| 91视频观看视频| 色悠久久久久综合欧美99| 波波电影院一区二区三区| 成人精品在线视频观看| 成人app网站| 波多野结衣的一区二区三区| 北条麻妃国产九九精品视频| 成人午夜精品一区二区三区| 岛国精品一区二区| 91在线视频网址| 日本国产一区二区| 欧美老肥妇做.爰bbww视频| 欧美猛男gaygay网站| 在线综合亚洲欧美在线视频| 日韩一区二区免费电影| 亚洲精品一区二区精华| 精品盗摄一区二区三区| 久久人人爽爽爽人久久久| 久久精品日产第一区二区三区高清版| 久久久91精品国产一区二区精品| 国产午夜精品久久久久久免费视 | 亚洲人成精品久久久久久 | 欧美色窝79yyyycom| 欧洲亚洲精品在线| 欧美精品日韩综合在线| 337p粉嫩大胆色噜噜噜噜亚洲| 精品国产123| 国产精品成人免费精品自在线观看| 亚洲欧洲精品成人久久奇米网| 亚洲美女视频在线观看| 午夜精品久久一牛影视| 久久成人18免费观看| 成人开心网精品视频| 在线观看日韩一区| 日韩欧美在线网站| 中文av一区二区| 亚洲午夜电影网| 韩国v欧美v日本v亚洲v| av福利精品导航| 欧美日韩成人激情| 国产亚洲欧洲一区高清在线观看| 日韩毛片视频在线看| 日日嗨av一区二区三区四区| 国产成人丝袜美腿| 欧美视频自拍偷拍| 久久美女高清视频| 亚洲午夜久久久久久久久久久| 久久国产精品99精品国产| 99这里只有精品| 777午夜精品免费视频| 国产精品五月天| 日本美女一区二区三区| av一区二区三区在线| 欧美第一区第二区| 一区二区三区中文在线观看| 麻豆91精品视频| 色噜噜狠狠色综合中国| 久久视频一区二区| 性做久久久久久久免费看| 成人在线视频一区| 日韩欧美中文一区| 亚洲图片自拍偷拍| 99riav一区二区三区| 精品国产凹凸成av人网站| 亚洲一区免费视频| 99久久精品国产毛片| 26uuu色噜噜精品一区二区| 午夜精品福利视频网站| 99久久精品国产网站| 久久精品一区二区三区av | 国产米奇在线777精品观看| 91精品福利视频| 国产精品欧美极品| 国产精品一区二区久激情瑜伽| 欧美精品欧美精品系列| 亚洲欧美一区二区三区极速播放| 国产寡妇亲子伦一区二区| 日韩精品影音先锋| 午夜精品视频一区| 一本一本久久a久久精品综合麻豆| 久久久久高清精品| 精品亚洲成a人在线观看 | 日韩一级视频免费观看在线| 91免费看片在线观看| 欧美精品一区二区久久久| av在线不卡免费看| 国产女主播视频一区二区| 成人午夜视频免费看| 玉米视频成人免费看| 亚洲成a人v欧美综合天堂下载| 国产999精品久久| 一本色道久久加勒比精品| 狠狠色丁香久久婷婷综| 亚洲卡通动漫在线| 欧美国产日韩在线观看| 欧美成人性战久久| 成人激情免费电影网址| 成人av免费观看| 欧美在线看片a免费观看| 国产美女精品一区二区三区| 精品日韩在线一区| 成人毛片老司机大片| 久久国产尿小便嘘嘘| 亚洲国产成人精品视频| 制服丝袜成人动漫| 麻豆精品在线观看| 亚洲欧美偷拍三级| 精品国产乱码久久久久久蜜臀 | 亚洲欧洲另类国产综合| 日韩女优电影在线观看| 91国产福利在线| 日韩一区精品视频| 亚洲色图制服诱惑 | 波多野结衣中文字幕一区| 日韩精品一二三四| 久久av资源网| 国内一区二区在线| 国产精品一区二区视频| 经典三级一区二区| 日韩精品一二三区| 轻轻草成人在线| 亚洲最大的成人av| 国产精品蜜臀av| 国产视频一区在线观看| 18欧美亚洲精品| 亚洲福利视频导航| 日韩精品成人一区二区三区| 亚洲视频狠狠干| 日欧美一区二区| 成人性生交大片免费看视频在线 | 中文字幕五月欧美| 精品国产免费久久|