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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? layer3.c

?? < VC++視頻音頻開發>> 這本書的源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
	sfbound += *sfbwidth++;

	/* change table if region boundary */

	if (--rcount == 0) {
	  if (region == 0)
	    rcount = channel->region1_count + 1;
	  else
	    rcount = 0;  /* all remaining */

	  entry     = &mad_huff_pair_table[channel->table_select[++region]];
	  table     = entry->table;
	  linbits   = entry->linbits;
	  startbits = entry->startbits;

	  if (table == 0)
	    return MAD_ERROR_BADHUFFTABLE;
	}

	if (exp != *expptr) {
	  exp = *expptr;
	  reqhits = 0;
	}

	++expptr;
      }

      if (cachesz < 21) {
	unsigned int bits;

	bits       = ((32 - 1 - 21) + (21 - cachesz)) & ~7;
	bitcache   = (bitcache << bits) | mad_bit_read(&peek, bits);
	cachesz   += bits;
	bits_left -= bits;
      }

      /* hcod (0..19) */

      clumpsz = startbits;
      pair    = &table[MASK(bitcache, cachesz, clumpsz)];

      while (!pair->final) {
	cachesz -= clumpsz;

	clumpsz = pair->ptr.bits;
	pair    = &table[pair->ptr.offset + MASK(bitcache, cachesz, clumpsz)];
      }

      cachesz -= pair->value.hlen;

      if (linbits) {
	/* x (0..14) */

	value = pair->value.x;

	switch (value) {
	case 0:
	  xrptr[0] = 0;
	  break;

	case 15:
	  if (cachesz < linbits + 2) {
	    bitcache   = (bitcache << 16) | mad_bit_read(&peek, 16);
	    cachesz   += 16;
	    bits_left -= 16;
	  }

	  value += MASK(bitcache, cachesz, linbits);
	  cachesz -= linbits;

	  requantized = III_requantize(value, exp);
	  goto x_final;

	default:
	  if (reqhits & (1 << value))
	    requantized = reqcache[value];
	  else {
	    reqhits |= (1 << value);
	    requantized = reqcache[value] = III_requantize(value, exp);
	  }

	x_final:
	  xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
	    -requantized : requantized;
	}

	/* y (0..14) */

	value = pair->value.y;

	switch (value) {
	case 0:
	  xrptr[1] = 0;
	  break;

	case 15:
	  if (cachesz < linbits + 1) {
	    bitcache   = (bitcache << 16) | mad_bit_read(&peek, 16);
	    cachesz   += 16;
	    bits_left -= 16;
	  }

	  value += MASK(bitcache, cachesz, linbits);
	  cachesz -= linbits;

	  requantized = III_requantize(value, exp);
	  goto y_final;

	default:
	  if (reqhits & (1 << value))
	    requantized = reqcache[value];
	  else {
	    reqhits |= (1 << value);
	    requantized = reqcache[value] = III_requantize(value, exp);
	  }

	y_final:
	  xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
	    -requantized : requantized;
	}
      }
      else {
	/* x (0..1) */

	value = pair->value.x;

	if (value == 0)
	  xrptr[0] = 0;
	else {
	  if (reqhits & (1 << value))
	    requantized = reqcache[value];
	  else {
	    reqhits |= (1 << value);
	    requantized = reqcache[value] = III_requantize(value, exp);
	  }

	  xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
	    -requantized : requantized;
	}

	/* y (0..1) */

	value = pair->value.y;

	if (value == 0)
	  xrptr[1] = 0;
	else {
	  if (reqhits & (1 << value))
	    requantized = reqcache[value];
	  else {
	    reqhits |= (1 << value);
	    requantized = reqcache[value] = III_requantize(value, exp);
	  }

	  xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
	    -requantized : requantized;
	}
      }

      xrptr += 2;
    }
  }

  if (cachesz + bits_left < 0)
    return MAD_ERROR_BADHUFFDATA;  /* big_values overrun */

  /* count1 */
  {
    union huffquad const *table;
    register mad_fixed_t requantized;

    table = mad_huff_quad_table[channel->flags & count1table_select];

    requantized = III_requantize(1, exp);

    while (cachesz + bits_left > 0 && xrptr <= &xr[572]) {
      union huffquad const *quad;

      /* hcod (1..6) */

      if (cachesz < 10) {
	bitcache   = (bitcache << 16) | mad_bit_read(&peek, 16);
	cachesz   += 16;
	bits_left -= 16;
      }

      quad = &table[MASK(bitcache, cachesz, 4)];

      /* quad tables guaranteed to have at most one extra lookup */
      if (!quad->final) {
	cachesz -= 4;

	quad = &table[quad->ptr.offset +
		      MASK(bitcache, cachesz, quad->ptr.bits)];
      }

      cachesz -= quad->value.hlen;

      if (xrptr == sfbound) {
	sfbound += *sfbwidth++;

	if (exp != *expptr) {
	  exp = *expptr;
	  requantized = III_requantize(1, exp);
	}

	++expptr;
      }

      /* v (0..1) */

      xrptr[0] = quad->value.v ?
	(MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;

      /* w (0..1) */

      xrptr[1] = quad->value.w ?
	(MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;

      xrptr += 2;

      if (xrptr == sfbound) {
	sfbound += *sfbwidth++;

	if (exp != *expptr) {
	  exp = *expptr;
	  requantized = III_requantize(1, exp);
	}

	++expptr;
      }

      /* x (0..1) */

      xrptr[0] = quad->value.x ?
	(MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;

      /* y (0..1) */

      xrptr[1] = quad->value.y ?
	(MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;

      xrptr += 2;
    }

    if (cachesz + bits_left < 0) {
# if 0 && defined(DEBUG)
      fprintf(stderr, "huffman count1 overrun (%d bits)\n",
	      -(cachesz + bits_left));
# endif

      /* technically the bitstream is misformatted, but apparently
	 some encoders are just a bit sloppy with stuffing bits */

      xrptr -= 4;
    }
  }

  assert(-bits_left <= MAD_BUFFER_GUARD * CHAR_BIT);

# if 0 && defined(DEBUG)
  if (bits_left < 0)
    fprintf(stderr, "read %d bits too many\n", -bits_left);
  else if (cachesz + bits_left > 0)
    fprintf(stderr, "%d stuffing bits\n", cachesz + bits_left);
# endif

  /* rzero */
  while (xrptr < &xr[576]) {
    xrptr[0] = 0;
    xrptr[1] = 0;

    xrptr += 2;
  }

  return MAD_ERROR_NONE;
}

# undef MASK
# undef MASK1BIT

/*
 * NAME:	III_reorder()
 * DESCRIPTION:	reorder frequency lines of a short block into subband order
 */
static
void III_reorder(mad_fixed_t xr[576], struct channel const *channel,
		 unsigned char const sfbwidth[39])
{
  mad_fixed_t tmp[32][3][6];
  unsigned int sb, l, f, w, sbw[3], sw[3];

  /* this is probably wrong for 8000 Hz mixed blocks */

  sb = 0;
  if (channel->flags & mixed_block_flag) {
    sb = 2;

    l = 0;
    while (l < 36)
      l += *sfbwidth++;
  }

  for (w = 0; w < 3; ++w) {
    sbw[w] = sb;
    sw[w]  = 0;
  }

  f = *sfbwidth++;
  w = 0;

  for (l = 18 * sb; l < 576; ++l) {
    if (f-- == 0) {
      f = *sfbwidth++ - 1;
      w = (w + 1) % 3;
    }

    tmp[sbw[w]][w][sw[w]++] = xr[l];

    if (sw[w] == 6) {
      sw[w] = 0;
      ++sbw[w];
    }
  }

  memcpy(&xr[18 * sb], &tmp[sb], (576 - 18 * sb) * sizeof(mad_fixed_t));
}

/*
 * NAME:	III_stereo()
 * DESCRIPTION:	perform joint stereo processing on a granule
 */
static
enum mad_error III_stereo(mad_fixed_t xr[2][576],
			  struct granule const *granule,
			  struct mad_header *header,
			  unsigned char const *sfbwidth)
{
  short modes[39];
  unsigned int sfbi, l, n, i;

  if (granule->ch[0].block_type !=
      granule->ch[1].block_type ||
      (granule->ch[0].flags & mixed_block_flag) !=
      (granule->ch[1].flags & mixed_block_flag))
    return MAD_ERROR_BADSTEREO;

  for (i = 0; i < 39; ++i)
    modes[i] = header->mode_extension;

  /* intensity stereo */

  if (header->mode_extension & I_STEREO) {
    struct channel const *right_ch = &granule->ch[1];
    mad_fixed_t const *right_xr = xr[1];
    unsigned int is_pos;

    header->flags |= MAD_FLAG_I_STEREO;

    /* first determine which scalefactor bands are to be processed */

    if (right_ch->block_type == 2) {
      unsigned int lower, start, max, bound[3], w;

      lower = start = max = bound[0] = bound[1] = bound[2] = 0;

      sfbi = l = 0;

      if (right_ch->flags & mixed_block_flag) {
	while (l < 36) {
	  n = sfbwidth[sfbi++];

	  for (i = 0; i < n; ++i) {
	    if (right_xr[i]) {
	      lower = sfbi;
	      break;
	    }
	  }

	  right_xr += n;
	  l += n;
	}

	start = sfbi;
      }

      w = 0;
      while (l < 576) {
	n = sfbwidth[sfbi++];

	for (i = 0; i < n; ++i) {
	  if (right_xr[i]) {
	    max = bound[w] = sfbi;
	    break;
	  }
	}

	right_xr += n;
	l += n;
	w = (w + 1) % 3;
      }

      if (max)
	lower = start;

      /* long blocks */

      for (i = 0; i < lower; ++i)
	modes[i] = header->mode_extension & ~I_STEREO;

      /* short blocks */

      w = 0;
      for (i = start; i < max; ++i) {
	if (i < bound[w])
	  modes[i] = header->mode_extension & ~I_STEREO;

	w = (w + 1) % 3;
      }
    }
    else {  /* right_ch->block_type != 2 */
      unsigned int bound;

      bound = 0;
      for (sfbi = l = 0; l < 576; l += n) {
	n = sfbwidth[sfbi++];

	for (i = 0; i < n; ++i) {
	  if (right_xr[i]) {
	    bound = sfbi;
	    break;
	  }
	}

	right_xr += n;
      }

      for (i = 0; i < bound; ++i)
	modes[i] = header->mode_extension & ~I_STEREO;
    }

    /* now do the actual processing */

    if (header->flags & MAD_FLAG_LSF_EXT) {
      unsigned char const *illegal_pos = granule[1].ch[1].scalefac;
      mad_fixed_t const *lsf_scale;

      /* intensity_scale */
      lsf_scale = is_lsf_table[right_ch->scalefac_compress & 0x1];

      for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
	n = sfbwidth[sfbi];

	if (!(modes[sfbi] & I_STEREO))
	  continue;

	if (illegal_pos[sfbi]) {
	  modes[sfbi] &= ~I_STEREO;
	  continue;
	}

	is_pos = right_ch->scalefac[sfbi];

	for (i = 0; i < n; ++i) {
	  register mad_fixed_t left;

	  left = xr[0][l + i];

	  if (is_pos == 0)
	    xr[1][l + i] = left;
	  else {
	    register mad_fixed_t opposite;

	    opposite = mad_f_mul(left, lsf_scale[(is_pos - 1) / 2]);

	    if (is_pos & 1) {
	      xr[0][l + i] = opposite;
	      xr[1][l + i] = left;
	    }
	    else
	      xr[1][l + i] = opposite;
	  }
	}
      }
    }
    else {  /* !(header->flags & MAD_FLAG_LSF_EXT) */
      for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
	n = sfbwidth[sfbi];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线不卡中文字幕| 2023国产精华国产精品| 欧美一卡2卡3卡4卡| 久久精品这里都是精品| 强制捆绑调教一区二区| 日本高清不卡视频| 国产精品国产三级国产三级人妇| 首页亚洲欧美制服丝腿| 91精品福利视频| 国产农村妇女毛片精品久久麻豆 | 美女被吸乳得到大胸91| 9i在线看片成人免费| 亚洲精品一区二区三区香蕉 | 国产成人av网站| 91精品欧美综合在线观看最新| 亚洲婷婷综合久久一本伊一区| 国产成人午夜99999| 日韩亚洲电影在线| 日韩精品成人一区二区三区| 91久久精品一区二区三区| 中文字幕第一区| 成人免费不卡视频| 日本一区二区三区久久久久久久久不 | 日韩国产精品大片| 欧美日韩一区二区欧美激情| 亚洲日韩欧美一区二区在线| 成人免费黄色在线| 日本一区二区久久| 成人av电影在线播放| 国产精品国产a| 99riav久久精品riav| 亚洲美女精品一区| 91国偷自产一区二区开放时间| 亚洲理论在线观看| 欧美午夜视频网站| 丝袜美腿一区二区三区| 69av一区二区三区| 美女一区二区久久| 26uuu亚洲综合色欧美| 国产在线视频一区二区三区| 国产欧美一区在线| k8久久久一区二区三区| 亚洲欧美aⅴ...| 欧美性猛交xxxx乱大交退制版| 亚洲成va人在线观看| 日韩一本二本av| 国产综合一区二区| 中文字幕字幕中文在线中不卡视频| 成人免费毛片片v| 一区二区三区中文在线| 欧美午夜视频网站| 日本在线观看不卡视频| 久久久久久久综合狠狠综合| 国产福利一区二区三区| 亚洲欧美成人一区二区三区| 欧美精品高清视频| 国产精品99久久久久久宅男| 亚洲美女屁股眼交| 日韩三级视频中文字幕| 不卡电影一区二区三区| 亚洲影院免费观看| 精品久久人人做人人爽| 91在线视频免费观看| 五月天亚洲婷婷| 久久久久久电影| 在线观看精品一区| 久久99精品久久只有精品| 136国产福利精品导航| 在线观看一区二区精品视频| 久久机这里只有精品| 亚洲青青青在线视频| 精品久久久久久久一区二区蜜臀| 成人精品一区二区三区四区| 亚洲成人av在线电影| 国产日韩精品一区| 制服视频三区第一页精品| av不卡免费电影| 蜜桃视频免费观看一区| 亚洲乱码日产精品bd| 精品久久国产老人久久综合| 91久久精品一区二区二区| 国产综合色精品一区二区三区| 一级中文字幕一区二区| 亚洲国产精品二十页| 精品日本一线二线三线不卡| 一本色道久久综合精品竹菊| 国产在线视频一区二区三区| 水野朝阳av一区二区三区| 1区2区3区国产精品| 久久久久久久久岛国免费| 欧美美女激情18p| 99久久久久免费精品国产| 国内久久精品视频| 日韩精品一级中文字幕精品视频免费观看| 国产欧美视频一区二区| 日韩欧美一区中文| 欧美高清视频www夜色资源网| 91亚洲国产成人精品一区二区三| 国产一区二三区好的| 久久精品久久久精品美女| 亚洲成av人综合在线观看| 亚洲色图第一区| 国产精品视频九色porn| 国产免费久久精品| 久久久国产午夜精品| 精品精品欲导航| 日韩女优毛片在线| 欧美一区二区精美| 91精品国产全国免费观看| 精品视频资源站| 欧美日韩免费一区二区三区| 91精品91久久久中77777| 一本久久a久久免费精品不卡| 99re这里只有精品视频首页| 9人人澡人人爽人人精品| 99国产精品久久久久久久久久久 | 国产精品一区二区免费不卡| 久久99九九99精品| 国产一区二区看久久| 国产做a爰片久久毛片| 国产激情精品久久久第一区二区 | 风间由美性色一区二区三区| 国产高清不卡一区| 99久久99久久久精品齐齐| 97精品电影院| 精品视频1区2区3区| 欧美一级午夜免费电影| 精品精品国产高清一毛片一天堂| 国产日韩欧美一区二区三区乱码 | 日韩欧美三级在线| 日韩精品一区二区三区三区免费| 欧美电视剧在线观看完整版| 久久综合狠狠综合| 国产精品久久久久三级| 亚洲自拍偷拍网站| 视频一区免费在线观看| 久久99九九99精品| 99久久久无码国产精品| 欧美日韩国产123区| 久久―日本道色综合久久| 国产精品国产自产拍高清av王其 | 国产精品夫妻自拍| 亚洲高清不卡在线观看| 国产在线视频一区二区| 色噜噜狠狠色综合中国| 日韩亚洲欧美中文三级| 中文字幕视频一区二区三区久| 亚洲成a人v欧美综合天堂| 国产一区二区三区蝌蚪| 日本精品视频一区二区| 精品国产一区二区三区忘忧草| 国产精品嫩草影院av蜜臀| 亚洲成人精品一区| 国产成人av一区| 91精品国产一区二区| 国产精品乱子久久久久| 日日骚欧美日韩| 成人久久18免费网站麻豆 | 亚洲男人天堂一区| 久久精品国产第一区二区三区| 91在线丨porny丨国产| 日韩女优制服丝袜电影| 依依成人精品视频| 粉嫩一区二区三区在线看| 欧美美女bb生活片| 亚洲美女免费在线| 豆国产96在线|亚洲| 日韩欧美自拍偷拍| 亚洲午夜久久久久| 91网上在线视频| 国产日韩精品一区二区三区| 蜜桃视频第一区免费观看| 欧美日韩精品欧美日韩精品一| 亚洲欧洲国产日本综合| 久久电影网电视剧免费观看| 欧美日韩国产综合一区二区三区 | 欧美日韩中字一区| 国产精品久久久久国产精品日日| 麻豆精品在线看| 正在播放一区二区| 午夜欧美视频在线观看| 欧美视频在线观看一区二区| 国产精品美女久久久久高潮| 久久99久久久久| 91精品国产综合久久精品| 三级精品在线观看| 欧美在线播放高清精品| 亚洲色图制服诱惑| 91麻豆国产精品久久| 中文字幕av免费专区久久| 国产精品538一区二区在线| 精品成人一区二区| 久久99精品一区二区三区三区| 日韩欧美高清dvd碟片| 蜜臀av性久久久久蜜臀aⅴ| 欧美日韩国产一二三| 日韩电影在线免费| 欧美一级黄色录像| 国内成+人亚洲+欧美+综合在线| 欧美mv日韩mv国产网站app|