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

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

?? mp3dec.c

?? arm7制作的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一区二区三区免费野_久草精品视频
亚洲成人tv网| 欧美日本国产视频| 粉嫩在线一区二区三区视频| 午夜电影网亚洲视频| 亚洲国产视频网站| 亚洲不卡一区二区三区| 亚洲bdsm女犯bdsm网站| 五月婷婷综合网| 蜜臀av一区二区在线免费观看| 视频在线观看一区| 久久激情五月激情| 国产999精品久久久久久| 成人一级黄色片| 99r精品视频| 国产精品高潮久久久久无| 国产日产亚洲精品系列| 国产精品国产三级国产普通话99 | 久久综合九色综合欧美98| 久久综合九色综合久久久精品综合 | 972aa.com艺术欧美| 日本韩国欧美国产| 337p亚洲精品色噜噜狠狠| 欧美一区二视频| www国产成人| 国产精品福利电影一区二区三区四区| 成人欧美一区二区三区| 一区二区三区**美女毛片| 日韩黄色免费电影| 国产精品一区二区你懂的| 成人午夜视频网站| 欧美视频日韩视频在线观看| 欧美成人精品3d动漫h| 中文字幕高清一区| 午夜亚洲福利老司机| 蜜桃久久久久久久| 成人一区二区三区| 欧美精品欧美精品系列| 久久人人97超碰com| 亚洲欧美另类图片小说| 蜜桃久久久久久久| 91碰在线视频| 日韩欧美在线一区二区三区| 久久久久九九视频| 亚洲不卡一区二区三区| 国产精品18久久久久久久久久久久| 91麻豆免费视频| 欧美大片拔萝卜| 成人精品电影在线观看| 欧美最新大片在线看| 久久久久久久精| 亚洲.国产.中文慕字在线| 国产高清在线观看免费不卡| 欧美影院精品一区| 欧美国产97人人爽人人喊| 婷婷成人综合网| www.亚洲精品| 精品国产91久久久久久久妲己| 亚洲精品国产一区二区精华液| 精品一二三四在线| 欧美性大战xxxxx久久久| 精品国产乱码久久久久久蜜臀 | 亚洲欧洲性图库| 激情国产一区二区 | 一区二区三区不卡视频| 国产在线精品不卡| 欧美色综合网站| 久久九九全国免费| 日韩成人一级大片| 99九九99九九九视频精品| 欧美成人vr18sexvr| 亚洲超碰精品一区二区| 91丨九色丨黑人外教| 国产性做久久久久久| 蜜桃视频一区二区三区在线观看| 一本大道久久精品懂色aⅴ| 久久精品日产第一区二区三区高清版 | 久久毛片高清国产| 男男视频亚洲欧美| 欧美日韩在线一区二区| 亚洲日韩欧美一区二区在线| 国产盗摄女厕一区二区三区| 精品噜噜噜噜久久久久久久久试看| 亚洲一区二区三区在线播放| 99国产精品久久久| 中文字幕日韩一区| 国产99久久久国产精品潘金 | 国产麻豆成人精品| 欧美一卡二卡三卡四卡| 亚洲大片精品永久免费| 欧洲视频一区二区| 亚洲综合999| 欧美在线观看一区二区| 亚洲日本va午夜在线影院| 成人性视频网站| 国产精品动漫网站| www.视频一区| 亚洲欧美电影一区二区| 99久久国产免费看| 亚洲乱码精品一二三四区日韩在线 | 国产精品综合一区二区三区| 精品动漫一区二区三区在线观看| 美女诱惑一区二区| 亚洲精品在线三区| 极品少妇xxxx精品少妇偷拍| 精品久久久久一区| 国产精品一区二区在线看| 久久亚洲一级片| 国产精品亚洲专一区二区三区| 久久久久国产成人精品亚洲午夜| 国产一区不卡视频| 中文子幕无线码一区tr| 成人av网在线| 一区二区成人在线视频| 欧美性色黄大片手机版| 无码av免费一区二区三区试看 | 一区二区三区欧美亚洲| 欧美日韩一区三区| 日韩av午夜在线观看| 日韩免费视频线观看| 国产美女av一区二区三区| 欧美国产国产综合| 91久久精品日日躁夜夜躁欧美| 亚洲一区二区免费视频| 91精品婷婷国产综合久久竹菊| 久久不见久久见免费视频1| 久久久久久久久久久久久女国产乱| 国产福利一区二区| 一区二区高清视频在线观看| 在线成人免费视频| 国产精品一区三区| 亚洲免费三区一区二区| 欧美精品久久一区| 国产成人精品免费一区二区| 亚洲精品午夜久久久| 日韩视频在线永久播放| 成人永久免费视频| 亚洲成人免费av| 久久亚洲捆绑美女| 91久久精品午夜一区二区| 免费成人av在线播放| 中文字幕不卡的av| 正在播放一区二区| 国产91精品一区二区| 亚洲国产成人91porn| 久久久久亚洲蜜桃| 色偷偷88欧美精品久久久| 美女脱光内衣内裤视频久久影院| 中文字幕乱码久久午夜不卡 | 亚洲在线视频一区| 精品国产伦一区二区三区免费| 不卡av在线免费观看| 日本 国产 欧美色综合| 中文字幕中文乱码欧美一区二区| 欧美日韩国产三级| eeuss国产一区二区三区| 秋霞成人午夜伦在线观看| 国产精品无码永久免费888| 欧美人与性动xxxx| 99精品久久99久久久久| 美女任你摸久久 | 色欧美片视频在线观看在线视频| 欧美在线|欧美| 国产成人高清视频| 免费精品视频最新在线| 亚洲欧美日韩一区二区 | 亚洲日本va午夜在线影院| 精品国产a毛片| 91精品国产欧美一区二区成人| 99视频精品全部免费在线| 久草在线在线精品观看| 亚洲在线视频网站| 成人欧美一区二区三区1314| 日韩免费视频线观看| 欧美日韩精品一区二区三区蜜桃 | 337p亚洲精品色噜噜噜| 色综合天天综合在线视频| 国产在线视视频有精品| 午夜a成v人精品| 悠悠色在线精品| 中文字幕一区二区三| 欧美精品一区二区三区蜜桃| 欧美日韩午夜在线视频| 色综合久久中文字幕综合网| 国产精品一区免费在线观看| 理论电影国产精品| 日韩av二区在线播放| 亚洲一区二区在线免费看| 亚洲色图视频网| 国产精品免费久久| 国产欧美久久久精品影院| 精品粉嫩aⅴ一区二区三区四区| 欧美一区二区三区视频在线观看| 欧美三级电影一区| 91福利国产精品| 91搞黄在线观看| 91成人免费网站| 色香蕉成人二区免费| 色综合中文字幕国产 | 日韩一区二区三区电影在线观看 | 国产日韩av一区二区|