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

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

?? mp3dec.c

?? 用TMS320X281x進(jìn)行mp3解壓縮的算法原程序
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
	faddp st(1), st
	add eax, 32
	and eax, 0x3ff
	add ecx, 256
	inc edx
	cmp edx, 7
	jle filt_lp1

	// store accumulated sums as integers
	// scaling is not necessary, because we put the 32768 factor in the D coefficients
	fistp	isum2
	fistp	isum1

	// clipcheck and store sample 1
	mov edx, isum1
#ifdef OVERFLOW_CHECKING
	cmp edx, 32767
	jle no_isum1_of
	mov word ptr [edi], 0x7fff
	jmp done_isum1
no_isum1_of:
	cmp edx, -32768
	jge no_isum1_uf
	mov word ptr [edi], 0x8000
	jmp done_isum1
no_isum1_uf:
#endif
	mov [edi], dx
done_isum1:

	// clipcheck and store sample 2
	mov edx, isum2
#ifdef OVERFLOW_CHECKING
	cmp edx, 32767
	jle no_isum2_of
	mov word ptr [edi+2], 0x7fff
	jmp done_isum2
no_isum2_of:
	cmp edx, -32768
	jge no_isum2_uf
	mov word ptr [edi+2], 0x8000
	jmp done_isum2
no_isum2_uf:
#endif
	mov [edi+2], dx
done_isum2:
	add edi, 4

	// increase loop counter and loop

	inc ebx
	cmp ebx, 31
	jle window_loop

	// store the new sample counter
	mov S, edi
	pop edi
}

#else

	for (j = 0; j < 32; j++) {
	    
	    a = &Granule_sbsynth_D[j];
	    k = j + Granule_sbsynth_Vptr[0];
	    b = &Granule_sbsynth_V[0][0];
	    
	    sum = (mpfloat)0.0f;
	    sum2 = (mpfloat)0.0f;
	    for(i = 0; i < 8; i++) {
		sum += a[0] * b[k];
		sum2 += a[0] * b[k+1024];
		k = (k + 96) & 0x3ff;
		sum += a[32] * b[k];
		sum2 += a[32] * b[k+1024];
		k = (k + 32) & 0x3ff; 
		a = &a[64];
	    }
	   
#ifdef INT_MATH
	    i = sum.rint();
#else
	    /* convert to integer, and clip the output */
	    i = (int)sum;
#endif

#ifdef OVERFLOW_CHECKING
	    if(i >= 32768) {
		*S = 32767;	
	    } else if(i < -32768) {
		*S = -32768;
	    } else 
#endif
		*S = i;
	    
	    S++;

#ifdef INT_MATH
	    i = sum2.rint();
#else
	    /* convert to integer, and clip the output */
	    i = (int)sum2;
#endif

#ifdef OVERFLOW_CHECKING
	    if(i >= 32768) {
		*S = 32767;
	    } else if(i < -32768) {
		*S = -32768;
	    } else 
#endif
		*S = i;
	    
	    S++;

	}
#endif

    }
}



#ifdef DECVERBOSE
void
Frame_dump(Frame *f)
{
  printf("CRC %d, ", f->CRC_enable);
  printf("bitrate %d, ", f->bitrate_index);
  printf("sampfreq %d, ", f->sampling_frequency);
  printf("mode %d, ", f->mode);
  printf("mode_ext %d\n", f->mode_extension);
  printf("copyright %d, ", f->copyright);
  printf("originality %d, ", f->originality);
  printf("emphasis %d\n", f->emphasis);
  if(f->CRC_enable)
    printf("CRC 0x%4x\n", f->CRC);
  printf("main_data_begin %d, header_size %d, datasize %d\n",
	 f->main_data_begin,
	 f->header_size,
	 f->main_data_size);
 
}
#endif


/* Bitstream code */
/* ###TODO Its NOT optimal to have a hardcoded bufsize */

int
Bitstream_open(Bitstream *bs, char *fname)
{
#ifndef DSP
  if(fname) {
    /* open the file */
    
    if(!(bs->f = fopen(fname, "rb"))) {
      printf("Couldn't open file %s for reading.\n", fname);
      bs->eof_found = 1;
      return -1;
    }
  } else
    bs->f = 0;
#endif

  /* reset indexes to first bit in the file */

  bs->bit_index = 0;
#if 0
  bs->byte_index = 0;
#endif
  bs->offset = 0;
  bs->write_index = 0;
  bs->pos = 0;
  bs->eof_found = 0;

  /* fill it up */
#ifndef DSP
  if(bs->f)
    Bitstream_fillbuffer(bs);
#endif
  return 0;
}


/* close the bitstream */

void
Bitstream_close(Bitstream *bs)
{
#ifndef DSP
  if(bs->f) {
    fclose(bs->f);
    bs->f = 0;
  }
#endif
}

/* fill the buffer with as many new bytes as possible */
/* returns 0 if successful, -1 if it couldn't load any new bytes */

int
Bitstream_fillbuffer(Bitstream *bs)
{
  int to_load, loaded, i;

  /* Figure out how many bytes we can read. we have a circular buffer
     with a read (byte_index) and write (write_index) pointer.
     We can load new bytes from the write pointer up to but not including
     the read pointer. */
  
  to_load = ((bs->pos >> 3) - bs->write_index) % BITSTREAM_BUFSIZE;
  /* if the read and write pointers are equal, we assume we should read in
     the whole buffer */
  if(!to_load)
      to_load = BITSTREAM_BUFSIZE;
  
#ifndef DSP
  /* don't bother to fill if the buffer is more than half full */
  if(to_load < BITSTREAM_BUFSIZE/2)
      return 0;
#endif

#ifdef DSP
  loaded = MIN(20000 - bs->offset, MIN(to_load,
				       BITSTREAM_BUFSIZE - bs->write_index));
  for(i = 0; i < loaded; i++)
      bs->buffer[bs->write_index++] = inbuffer[bs->offset++];
  bs->write_index = bs->write_index % BITSTREAM_BUFSIZE;
  to_load -= loaded;

  if(to_load) {
      loaded = MIN(20000 - bs->offset, to_load);
      for(i = 0; i < loaded; i++)
	  bs->buffer[bs->write_index++] = inbuffer[bs->offset++];
      bs->write_index = bs->write_index % BITSTREAM_BUFSIZE;
  }
  
#else
  loaded = fread(&bs->buffer[bs->write_index], 1, 
		 MIN(to_load, BITSTREAM_BUFSIZE - bs->write_index),
		 bs->f);
  if(!loaded) {
      printf("End of file in Bitstream_fillbuffer.\n");
      return -1;
  }
  to_load -= loaded;
  bs->offset += loaded;
  bs->write_index = (bs->write_index + loaded) % BITSTREAM_BUFSIZE;
  
  if(to_load) {
    /* read the second chunk if any */
    loaded = fread(bs->buffer, 1, to_load, bs->f);
    if(loaded != to_load) {
      printf("End of file in Bitstream_fillbuffer.\n");
      return 0;
    }
    bs->offset += loaded;
    bs->write_index = (bs->write_index + loaded) % BITSTREAM_BUFSIZE;
  }
#endif

  /* duplicate the end to reduce the need for modulo calcs in viewbits */
  
  bs->buffer[BITSTREAM_BUFSIZE] = bs->buffer[0];
  bs->buffer[BITSTREAM_BUFSIZE + 1] = bs->buffer[1];
  bs->buffer[BITSTREAM_BUFSIZE + 2] = bs->buffer[2];
  bs->buffer[BITSTREAM_BUFSIZE + 3] = bs->buffer[3];

  return 0;
}

ibool
Bitstream_eof(Bitstream *bs)
{
  return bs->eof_found;
}
/*
static int Bitstream_getmask[9] = { 0, 0x1, 0x3, 0x7, 0xf,
				    0x1f, 0x3f, 0x7f, 0xff };

static int Bitstream_getmask2[9] = { 0, 0x1, 0x2, 0x4, 0x8,
				     0x10, 0x20, 0x40, 0x80 };
				     */

unsigned int Bitstream_msk[8] = {
    0xffffffff,0x7fffffff,0x3fffffff,0x1fffffff,
    0x0fffffff,0x07ffffff,0x03ffffff,0x01ffffff,
};

/* get numbits from the bitstream bs */
/* it is assumed that the buffer has enough fresh bits to satisfy the
   request
*/
unsigned int 
Bitstream_viewbits(Bitstream *bs, int n)
{
    int pos;
    unsigned int ret_value=0;
    if(!n)
	return 0;
    pos = (bs->pos >> 3) & (BITSTREAM_BUFSIZE - 1);
    ret_value = bs->buffer[pos] << 24 |
	bs->buffer[pos + 1] << 16 | 
	bs->buffer[pos + 2] << 8 |
	bs->buffer[pos + 3];
    ret_value &= Bitstream_msk[bs->pos & 7];
    ret_value >>= 32 - n - (bs->pos & 7);
    return ret_value;
}

void 
Bitstream_flushbits(Bitstream *bs, int n)
{
	bs->pos += n;
/*	bs->pos &= 8 * BITSTREAM_BUFSIZE - 1; */
}

unsigned int 
Bitstream_get(Bitstream *bs, int n)
{
    unsigned int ret_value;
    if(!n)
	return 0;
    ret_value = Bitstream_viewbits(bs, n);
    Bitstream_flushbits(bs, n);
    return ret_value;	
}	

unsigned int
Bitstream_get1(Bitstream *bs)
{
    return Bitstream_get(bs, 1);
}

void
Bitstream_putbyte(Bitstream *bs, unsigned int val)
{
    bs->buffer[bs->write_index] = val;
    bs->write_index = (bs->write_index + 1) % BITSTREAM_BUFSIZE;
}


void
Bitstream_rewindbits(Bitstream *bs, int n)
{
    bs->pos -= n;
/*
    bs->bit_index += n;
    bs->byte_index -= bs->bit_index / 8;
    bs->bit_index = bs->bit_index % 8;
    */
}

void
Bitstream_rewindbytes(Bitstream *bs, int n)
{
    bs->pos -= n*8;
/*
    bs->byte_index -= n;
    */
}

int
Bitstream_tell(Bitstream *bs)
{
    return bs->pos;
}

/* seek forward until we find a bytealigned bit sequence of 1111 1111 1111 */
/* this is the syncword in mpeg audio layer 3 */

ibool
Bitstream32_seek_sync(Bitstream *bs)
{
    int aligning;
    unsigned int val;
    
    aligning = bs->pos % 8;   /* sync words are byte aligned */
    
    if (aligning)
	Bitstream32_get(bs, 8 - aligning);
    
    /* preload val with 8 bits, then keep loading 4 bits at a time until we
       find the sync word */
    
    val = Bitstream32_get(bs, 8);
    while (((val & 0xfff) != 0xfff) && !Bitstream_eof(bs)) {
	val <<= 4;
	val |= Bitstream32_get(bs, 4);
    }
    
/*  printf("sync found, now at %d\n", bs->pos);
 */
    
    if (Bitstream_eof(bs))
	return(0);
    else
	return(1);
}

int
Bitstream32_open(Bitstream *bs, char *fname)
{
#ifndef DSP
  if(fname) {
    /* open the file */
    
    if(!(bs->f = fopen(fname, "rb"))) {
      printf("Couldn't open file %s for reading.\n", fname);
      bs->eof_found = 1;
      return -1;
    }
  } else
    bs->f = 0;
#endif

  /* reset indexes to first bit in the file */

  bs->bit_index = 0;
#if 0
  bs->byte_index = 0;
#endif
  bs->offset = 0;
  bs->write_index = 0;
  bs->pos = 0;
  bs->eof_found = 0;

  /* fill it up */
#ifndef DSP
  if(bs->f)
    Bitstream32_fillbuffer(bs);
#endif
  return 0;
}

/* fill the buffer with as many new bytes as possible */
/* returns 0 if successful, -1 if it couldn't load any new bytes */

int
Bitstream32_fillbuffer(Bitstream *bs)
{
  int to_load, loaded, i;

  /* Figure out how many bytes we can read. we have a circular buffer
     with a read (byte_index) and write (write_index) pointer.
     We can load new bytes from the write pointer up to but not including
     the read pointer. */
  
  to_load = ((bs->pos >> 5) - bs->write_index) & 0x1fff;
  /* if the read and write pointers are equal, we assume we should read in
     the whole buffer */
  if(!to_load)
      to_load = 0x2000;
  
#ifndef DSP
  /* don't bother to fill if the buffer is more than half full */
  if(to_load < 0x1000)
      return 0;
#endif

#ifdef DSP
  loaded = MIN(20000 - bs->offset, MIN(to_load,
				       BITSTREAM_BUFSIZE - bs->write_index));
  for(i = 0; i < loaded; i++)
      bs->buffer[bs->write_index++] = inbuffer[bs->offset++];
  bs->write_index = bs->write_index % BITSTREAM_BUFSIZE;
  to_load -= loaded;

  if(to_load) {
      loaded = MIN(20000 - bs->offset, to_load);
      for(i = 0; i < loaded; i++)
	  bs->buffer[bs->write_index++] = inbuffer[bs->offset++];
      bs->write_index = bs->write_index % BITSTREAM_BUFSIZE;
  }
  
#else
  for(i = 0; i < MIN(to_load, 0x2000 - bs->write_index); i++) {
      loaded = fread(&bs->buffer32[bs->write_index], 4, 1, bs->f);
      if(!loaded) {
	  printf("End of file in Bitstream_fillbuffer.\n");
	  return -1;
      }
      bs->buffer32[bs->write_index] = htonl(bs->buffer32[bs->write_index]);
      bs->write_index = (bs->write_index + loaded) & 0x1fff;
      to_load -= loaded;
      bs->offset += loaded;
  }
  
/* read the second chunk if any */  
  for(i = 0; i < to_load; i++) {
      loaded = fread(&bs->buffer32[bs->write_index], 4, 1, bs->f);
      if(!loaded) {
	  printf("End of file in Bitstream_fillbuffer.\n");
	  return 0;
      }
      bs->buffer32[bs->write_index] = htonl(bs->buffer32[bs->write_index]);
      bs->offset += loaded;
      bs->write_index = (bs->write_index + loaded) & 0x1fff;
  }
#endif

  return 0;
}

unsigned int Bitstream32_msk[32] = {
    0xffffffff,0x7fffffff,0x3fffffff,0x1fffffff,
    0x0fffffff,0x07ffffff,0x03ffffff,0x01ffffff,

    0x00ffffff,0x007fffff,0x003fffff,0x001fffff,
    0x000fffff,0x0007ffff,0x0003ffff,0x0001ffff,

    0x0000ffff,0x00007fff,0x00003fff,0x00001fff,
    0x00000fff,0x000007ff,0x000003ff,0x000001ff,

    0x000000ff,0x0000007f,0x0000003f,0x0000001f,
    0x0000000f,0x00000007,0x00000003,0x00000001
};

/* get numbits from the bitstream bs */
/* it is assumed that the buffer has enough fresh bits to satisfy the
   request
*/
unsigned int 
Bitstream32_viewbits(Bitstream *bs, int n)
{
    int pos;
    unsigned int ret_value=0;
    if(!n)
	return 0;
    pos = (bs->pos >> 5) & 0x1fff;  /* find index in buffer */
    
    ret_value = bs->buffer[pos] << 24 |
	bs->buffer[pos + 1] << 16 | 
	bs->buffer[pos + 2] << 8 |
	bs->buffer[pos + 3];
    ret_value &= Bitstream_msk[bs->pos & 7];
    ret_value >>= 32 - n - (bs->pos & 7);
    return ret_value;
}

unsigned int 
Bitstream32_get(Bitstream *bs, int n)
{
    unsigned int ret_value;
    if(!n)
	return 0;
    ret_value = Bitstream_viewbits(bs, n);
    Bitstream_flushbits(bs, n);
    return ret_value;	
}	

unsigned int
Bitstream32_get1(Bitstream *bs)
{
    return Bitstream_get(bs, 1);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一级电影视频| 精品一区二区免费| 欧美精品一区二区久久久| 成人精品视频一区| 久久草av在线| 亚洲综合成人在线视频| 国产无人区一区二区三区| 欧美日韩国产经典色站一区二区三区 | 国产成人综合自拍| 视频一区国产视频| 樱花草国产18久久久久| 久久蜜桃av一区精品变态类天堂 | 精品一区二区三区免费观看| 亚洲欧美怡红院| 国产日产欧产精品推荐色| 欧美精选在线播放| 欧美色精品天天在线观看视频| 国产91清纯白嫩初高中在线观看| 麻豆精品一区二区av白丝在线| 一级做a爱片久久| 亚洲欧洲精品一区二区三区| 精品电影一区二区| 日韩欧美精品三级| 91精品久久久久久久久99蜜臂| 色哟哟国产精品| 一本大道av伊人久久综合| 国产精品一区二区三区四区| 狠狠色丁香久久婷婷综| 蜜臀av一区二区三区| 丝袜美腿一区二区三区| 亚洲成人免费视| 亚洲一区二区三区四区不卡| 亚洲综合一区二区三区| 伊人色综合久久天天人手人婷| 中文字幕在线不卡国产视频| 欧美国产综合色视频| 中文字幕乱码亚洲精品一区 | 欧美v亚洲v综合ⅴ国产v| 欧美日韩国产精选| 91麻豆精品国产综合久久久久久| 欧美亚洲国产一区二区三区va | 色爱区综合激月婷婷| 91首页免费视频| 欧洲av一区二区嗯嗯嗯啊| 色素色在线综合| 精品视频资源站| 欧美精品电影在线播放| 日韩精品一区二区在线| 精品国产乱码久久久久久蜜臀| 精品久久人人做人人爱| 国产调教视频一区| 亚洲欧洲制服丝袜| 亚洲中国最大av网站| 日韩 欧美一区二区三区| 麻豆精品在线视频| 国产一区二区三区免费看| 国产mv日韩mv欧美| 日本精品一区二区三区高清| 欧美视频精品在线| 精品久久久三级丝袜| 国产精品久久一卡二卡| 一区二区三区成人在线视频| 亚洲成人免费视频| 国产一区二区伦理片| 99久久综合狠狠综合久久| 日本韩国欧美一区二区三区| 欧美日韩国产成人在线91| 久久综合九色综合97婷婷 | 日韩高清不卡一区二区| 国模冰冰炮一区二区| 成人av网址在线| 欧美日韩国产区一| 国产无一区二区| 亚洲成人综合视频| 国产综合久久久久久鬼色| 97se亚洲国产综合自在线观| 91成人国产精品| 日韩免费高清视频| 亚洲人吸女人奶水| 激情图片小说一区| 在线观看亚洲一区| 久久综合久久综合九色| 亚洲一区二区三区国产| 韩国精品免费视频| 欧洲精品在线观看| 国产欧美日韩三区| 日韩黄色免费电影| 99v久久综合狠狠综合久久| 欧美日韩小视频| 国产精品久久久久国产精品日日| 亚洲成人自拍偷拍| 99精品视频在线播放观看| 日韩午夜精品视频| 一区二区三区免费网站| 国产真实乱对白精彩久久| 欧美视频一区二区在线观看| 中文字幕av一区二区三区高| 麻豆一区二区99久久久久| 在线看一区二区| 国产精品久久久久毛片软件| 蜜臀久久99精品久久久画质超高清 | 美国十次综合导航| 色婷婷久久综合| 国产精品视频麻豆| 精品一区二区三区免费| 欧美日韩一本到| 亚洲欧美日韩在线播放| 懂色av一区二区夜夜嗨| 日韩视频永久免费| 天天av天天翘天天综合网色鬼国产| 成人黄色小视频| 精品国产一区二区三区av性色| 亚洲成av人片观看| 欧美最新大片在线看| 亚洲欧美电影院| av在线这里只有精品| 久久蜜桃av一区二区天堂| 麻豆91精品视频| 在线播放欧美女士性生活| 亚洲一区二区五区| 色94色欧美sute亚洲线路一久| 欧美国产激情一区二区三区蜜月 | 国产成人av在线影院| 精品国产乱码久久久久久免费| 日本欧美一区二区三区乱码| 欧美日韩高清影院| 香蕉久久夜色精品国产使用方法| 色94色欧美sute亚洲13| 亚洲三级在线免费| 91在线porny国产在线看| 中文字幕在线观看一区| 成人免费视频视频在线观看免费| 久久这里只精品最新地址| 久久机这里只有精品| 欧美大胆一级视频| 久久99九九99精品| 久久久久久电影| 夫妻av一区二区| 国产精品欧美久久久久一区二区| 成人中文字幕在线| 国产精品久久久久aaaa| 色诱亚洲精品久久久久久| 亚洲精品久久久蜜桃| 精品婷婷伊人一区三区三| 日韩成人免费看| 精品免费国产一区二区三区四区| 久久精品国产99国产| 欧美刺激午夜性久久久久久久| 久久99精品久久久久久国产越南| 日韩欧美精品在线视频| 国产乱码精品一区二区三区av| 国产丝袜在线精品| 91丨porny丨在线| 性久久久久久久| 欧美精品一区二区高清在线观看| 国产精品一区在线观看乱码| 一色桃子久久精品亚洲| 在线日韩国产精品| 日本欧美韩国一区三区| 久久这里只精品最新地址| 成人av网站在线| 亚洲成人av在线电影| 精品国产凹凸成av人网站| 成人18精品视频| 午夜激情久久久| 久久美女艺术照精彩视频福利播放| 成人ar影院免费观看视频| 亚洲激情成人在线| 日韩免费观看2025年上映的电影| 国产+成+人+亚洲欧洲自线| 亚洲激情在线激情| 欧美电影免费观看高清完整版在线观看| 丁香婷婷综合网| 亚洲亚洲人成综合网络| 精品国产伦一区二区三区观看方式| av影院午夜一区| 日本人妖一区二区| 亚洲欧洲一区二区在线播放| 91精品国产色综合久久不卡电影| 国产精品亚洲成人| 亚洲大片免费看| 国产日韩精品一区二区三区在线| 在线观看网站黄不卡| 国内成人自拍视频| 亚洲成人你懂的| 国产精品久久久久婷婷二区次| 欧美日韩精品一二三区| 高清av一区二区| 麻豆91免费看| 亚洲福利一区二区| 国产欧美一区二区在线| 在线观看91av| 91国产福利在线| 国产99久久久国产精品潘金| 日韩激情av在线| 亚洲精品国产无套在线观| 国产亚洲精品bt天堂精选| 欧美精品粉嫩高潮一区二区| 91一区一区三区| 国产精品综合视频|