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

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

?? mp3dec.c

?? 用DSP實現MP3解壓縮的源碼文件
?? C
?? 第 1 頁 / 共 4 頁
字號:
	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);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品一区二区天天拍小说| 在线综合视频播放| 午夜在线电影亚洲一区| 国产亚洲人成网站| 日韩精品一区二区三区老鸭窝| 在线精品视频一区二区三四| 成人午夜电影网站| 国产精品影视在线| 狠狠色丁香久久婷婷综| 久久av资源站| 国产一区在线不卡| 成人av免费网站| 99久久精品国产一区二区三区| 99精品欧美一区二区三区小说 | 一区二区三区在线播| 中文无字幕一区二区三区 | 亚洲国产aⅴ成人精品无吗| 一区二区高清免费观看影视大全| 国产麻豆一精品一av一免费 | 六月丁香综合在线视频| 在线精品视频小说1| 中文字幕一区免费在线观看| 国产精品欧美一区喷水| 精品一区二区三区香蕉蜜桃| av在线播放一区二区三区| 欧美影片第一页| 久久亚洲影视婷婷| 中文字幕va一区二区三区| 精品亚洲porn| 久久午夜电影网| 国产成人在线视频网站| 色婷婷综合久久| 欧美精品在线视频| 国产精品网站在线| 成人h动漫精品一区二区| 欧美国产日产图区| 91丝袜高跟美女视频| 精品视频在线免费看| 久久久精品免费网站| 亚洲成人精品在线观看| 3d动漫精品啪啪1区2区免费| 日韩精品久久久久久| 北条麻妃一区二区三区| 成人免费视频在线观看| 91免费视频网| 日韩福利电影在线观看| 成人av网站在线| 亚洲自拍另类综合| 成人av在线网| 亚洲精品va在线观看| 国产精品中文有码| 日本一区二区高清| 色综合久久中文综合久久97| 亚洲一级在线观看| 日韩三级精品电影久久久| 一二三四区精品视频| 欧美精品亚洲二区| 国产伦精品一区二区三区视频青涩| 久久久精品综合| 欧美亚洲一区二区在线| 另类专区欧美蜜桃臀第一页| 中文字幕av在线一区二区三区| 日本道免费精品一区二区三区| 欧美国产精品一区| 欧美性欧美巨大黑白大战| 激情久久久久久久久久久久久久久久| 国产精品天干天干在线综合| 欧美久久久一区| 成人精品一区二区三区四区| 首页国产丝袜综合| 一色桃子久久精品亚洲| 日韩欧美精品三级| 日本丰满少妇一区二区三区| 韩国精品久久久| 亚洲一二三四久久| 中文久久乱码一区二区| 91精品国产91久久久久久一区二区| 午夜久久福利影院| 91精品婷婷国产综合久久性色 | 韩国欧美一区二区| 一区二区三区在线观看欧美| 久久夜色精品国产欧美乱极品| 欧美在线免费视屏| 成人小视频在线观看| 久久精品国产在热久久| 一区二区不卡在线视频 午夜欧美不卡在| 日韩美一区二区三区| 色成人在线视频| 国产盗摄精品一区二区三区在线 | 亚洲高清不卡在线观看| 中文字幕乱码亚洲精品一区| 欧美一二三区在线观看| 91福利视频网站| 成人精品国产福利| 国内精品伊人久久久久av影院 | 成人深夜视频在线观看| 国产一区二区三区黄视频 | 国产精品午夜电影| 久久久综合视频| 欧美va亚洲va| 成人国产精品免费观看视频| 国产一区二区三区免费播放| 青青国产91久久久久久 | 夜夜嗨av一区二区三区| 中文字幕精品三区| 国产人伦精品一区二区| 欧美日韩一区二区三区在线看| 97精品电影院| 91丨porny丨首页| 色婷婷久久综合| 99久久夜色精品国产网站| 成人性色生活片免费看爆迷你毛片| 丰满白嫩尤物一区二区| 亚洲国产中文字幕| 亚洲国产精品久久艾草纯爱 | 久久综合九色综合欧美98| 欧美一区二区久久| 欧美电影免费观看高清完整版| 欧美成人一区二区三区在线观看 | 欧美电影一区二区| 欧美肥大bbwbbw高潮| 91精品国产综合久久福利| 91精品国产综合久久久蜜臀粉嫩| 欧美一区二区在线不卡| 精品免费一区二区三区| 久久精品夜夜夜夜久久| 1024亚洲合集| 五月天婷婷综合| 久久99国产精品免费| 成人激情开心网| 欧美性生活一区| 日韩欧美国产wwwww| 久久久精品tv| 亚洲视频中文字幕| 久久久久久夜精品精品免费| 国产女人水真多18毛片18精品视频| 国产精品国产三级国产有无不卡 | 在线国产亚洲欧美| 欧美日韩国产一二三| 精品久久久网站| 欧美激情在线看| 亚洲成人精品影院| 国产福利精品一区| 精品视频1区2区3区| 日韩欧美美女一区二区三区| 中文字幕一区二区在线播放| 亚洲成av人影院| 处破女av一区二区| 欧美精品1区2区| 中文字幕日韩av资源站| 婷婷国产在线综合| 丰满少妇在线播放bd日韩电影| 欧美色中文字幕| 欧美电视剧免费观看| 亚洲伦在线观看| 亚洲视频中文字幕| 另类小说欧美激情| 91麻豆精品秘密| 久久日一线二线三线suv| 亚洲自拍欧美精品| 国产91丝袜在线18| 日韩一级二级三级精品视频| 亚洲欧美欧美一区二区三区| 老司机精品视频导航| 色偷偷成人一区二区三区91| 26uuu精品一区二区| 午夜视频一区在线观看| 成人国产亚洲欧美成人综合网| 日韩欧美国产午夜精品| 亚洲一卡二卡三卡四卡| 91最新地址在线播放| 337p日本欧洲亚洲大胆精品| 婷婷中文字幕综合| 97久久超碰国产精品电影| 日本一区二区三区国色天香 | 91福利精品视频| 国产精品丝袜黑色高跟| 韩国精品主播一区二区在线观看 | 不卡免费追剧大全电视剧网站| 欧美成人性战久久| 丝袜亚洲另类欧美综合| 在线视频国内一区二区| 国产精品视频在线看| 国产呦萝稀缺另类资源| 欧美一二三区在线| 日本成人中文字幕在线视频| 欧美视频在线不卡| 亚洲一区在线视频观看| 91香蕉国产在线观看软件| 日本一区二区三区免费乱视频| 国产一级精品在线| 久久精品视频在线看| 国产精品中文字幕一区二区三区| 欧美精品一区男女天堂| 国产精品国产三级国产三级人妇 | 成人av在线资源网| 欧美国产精品久久| 成人一区二区三区中文字幕| 国产欧美一区二区精品忘忧草| 国产精品一区二区在线观看不卡 |