⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 floor1.c

📁 fix point版本的Ogg Vorbis decoder
💻 C
📖 第 1 页 / 共 2 页
字号:
	TO_FIXP(30,2.8133190e-06F), TO_FIXP(30,2.9961443e-06F), 	TO_FIXP(30,3.1908506e-06F), TO_FIXP(30,3.3982101e-06F),	TO_FIXP(30,3.6190449e-06F), TO_FIXP(30,3.8542308e-06F), 	TO_FIXP(30,4.1047004e-06F), TO_FIXP(30,4.3714470e-06F),	TO_FIXP(30,4.6555282e-06F), TO_FIXP(30,4.9580707e-06F), 	TO_FIXP(30,5.2802740e-06F), TO_FIXP(30,5.6234160e-06F),	TO_FIXP(30,5.9888572e-06F), TO_FIXP(30,6.3780469e-06F), 	TO_FIXP(30,6.7925283e-06F), TO_FIXP(30,7.2339451e-06F),	TO_FIXP(30,7.7040476e-06F), TO_FIXP(30,8.2047000e-06F), 	TO_FIXP(30,8.7378876e-06F), TO_FIXP(30,9.3057248e-06F),	TO_FIXP(30,9.9104632e-06F), TO_FIXP(30,1.0554501e-05F), 	TO_FIXP(30,1.1240392e-05F), TO_FIXP(30,1.1970856e-05F),	TO_FIXP(30,1.2748789e-05F), TO_FIXP(30,1.3577278e-05F), 	TO_FIXP(30,1.4459606e-05F), TO_FIXP(30,1.5399272e-05F),	TO_FIXP(30,1.6400004e-05F), TO_FIXP(30,1.7465768e-05F), 	TO_FIXP(30,1.8600792e-05F), TO_FIXP(30,1.9809576e-05F),	TO_FIXP(30,2.1096914e-05F), TO_FIXP(30,2.2467911e-05F), 	TO_FIXP(30,2.3928002e-05F), TO_FIXP(30,2.5482978e-05F),	TO_FIXP(30,2.7139006e-05F), TO_FIXP(30,2.8902651e-05F), 	TO_FIXP(30,3.0780908e-05F), TO_FIXP(30,3.2781225e-05F),	TO_FIXP(30,3.4911534e-05F), TO_FIXP(30,3.7180282e-05F), 	TO_FIXP(30,3.9596466e-05F), TO_FIXP(30,4.2169667e-05F),	TO_FIXP(30,4.4910090e-05F), TO_FIXP(30,4.7828601e-05F), 	TO_FIXP(30,5.0936773e-05F), TO_FIXP(30,5.4246931e-05F),	TO_FIXP(30,5.7772202e-05F), TO_FIXP(30,6.1526565e-05F), 	TO_FIXP(30,6.5524908e-05F), TO_FIXP(30,6.9783085e-05F),	TO_FIXP(30,7.4317983e-05F), TO_FIXP(30,7.9147585e-05F), 	TO_FIXP(30,8.4291040e-05F), TO_FIXP(30,8.9768747e-05F),	TO_FIXP(30,9.5602426e-05F), TO_FIXP(30,0.00010181521F), 	TO_FIXP(30,0.00010843174F), TO_FIXP(30,0.00011547824F),	TO_FIXP(30,0.00012298267F), TO_FIXP(30,0.00013097477F), 	TO_FIXP(30,0.00013948625F), TO_FIXP(30,0.00014855085F),	TO_FIXP(30,0.00015820453F), TO_FIXP(30,0.00016848555F), 	TO_FIXP(30,0.00017943469F), TO_FIXP(30,0.00019109536F),	TO_FIXP(30,0.00020351382F), TO_FIXP(30,0.00021673929F), 	TO_FIXP(30,0.00023082423F), TO_FIXP(30,0.00024582449F),	TO_FIXP(30,0.00026179955F), TO_FIXP(30,0.00027881276F), 	TO_FIXP(30,0.00029693158F), TO_FIXP(30,0.00031622787F),	TO_FIXP(30,0.00033677814F), TO_FIXP(30,0.00035866388F), 	TO_FIXP(30,0.00038197188F), TO_FIXP(30,0.00040679456F),	TO_FIXP(30,0.00043323036F), TO_FIXP(30,0.00046138411F), 	TO_FIXP(30,0.00049136745F), TO_FIXP(30,0.00052329927F),	TO_FIXP(30,0.00055730621F), TO_FIXP(30,0.00059352311F), 	TO_FIXP(30,0.00063209358F), TO_FIXP(30,0.00067317058F),	TO_FIXP(30,0.00071691700F), TO_FIXP(30,0.00076350630F), 	TO_FIXP(30,0.00081312324F), TO_FIXP(30,0.00086596457F),	TO_FIXP(30,0.00092223983F), TO_FIXP(30,0.00098217216F), 	TO_FIXP(30,0.0010459992F), TO_FIXP(30,0.0011139742F),	TO_FIXP(30,0.0011863665F), TO_FIXP(30,0.0012634633F),	TO_FIXP(30,0.0013455702F), TO_FIXP(30,0.0014330129F),	TO_FIXP(30,0.0015261382F), TO_FIXP(30,0.0016253153F),	TO_FIXP(30,0.0017309374F), TO_FIXP(30,0.0018434235F),	TO_FIXP(30,0.0019632195F), TO_FIXP(30,0.0020908006F),	TO_FIXP(30,0.0022266726F), TO_FIXP(30,0.0023713743F),	TO_FIXP(30,0.0025254795F), TO_FIXP(30,0.0026895994F),	TO_FIXP(30,0.0028643847F), TO_FIXP(30,0.0030505286F),	TO_FIXP(30,0.0032487691F), TO_FIXP(30,0.0034598925F),	TO_FIXP(30,0.0036847358F), TO_FIXP(30,0.0039241906F),	TO_FIXP(30,0.0041792066F), TO_FIXP(30,0.0044507950F),	TO_FIXP(30,0.0047400328F), TO_FIXP(30,0.0050480668F),	TO_FIXP(30,0.0053761186F), TO_FIXP(30,0.0057254891F),	TO_FIXP(30,0.0060975636F), TO_FIXP(30,0.0064938176F),	TO_FIXP(30,0.0069158225F), TO_FIXP(30,0.0073652516F),	TO_FIXP(30,0.0078438871F), TO_FIXP(30,0.0083536271F),	TO_FIXP(30,0.0088964928F), TO_FIXP(30,0.009474637F),	TO_FIXP(30,0.010090352F), TO_FIXP(30,0.010746080F),	TO_FIXP(30,0.011444421F), TO_FIXP(30,0.012188144F),	TO_FIXP(30,0.012980198F), TO_FIXP(30,0.013823725F),	TO_FIXP(30,0.014722068F), TO_FIXP(30,0.015678791F),	TO_FIXP(30,0.016697687F), TO_FIXP(30,0.017782797F),	TO_FIXP(30,0.018938423F), TO_FIXP(30,0.020169149F),	TO_FIXP(30,0.021479854F), TO_FIXP(30,0.022875735F),	TO_FIXP(30,0.024362330F), TO_FIXP(30,0.025945531F),	TO_FIXP(30,0.027631618F), TO_FIXP(30,0.029427276F),	TO_FIXP(30,0.031339626F), TO_FIXP(30,0.033376252F),	TO_FIXP(30,0.035545228F), TO_FIXP(30,0.037855157F),	TO_FIXP(30,0.040315199F), TO_FIXP(30,0.042935108F),	TO_FIXP(30,0.045725273F), TO_FIXP(30,0.048696758F),	TO_FIXP(30,0.051861348F), TO_FIXP(30,0.055231591F),	TO_FIXP(30,0.058820850F), TO_FIXP(30,0.062643361F),	TO_FIXP(30,0.066714279F), TO_FIXP(30,0.071049749F),	TO_FIXP(30,0.075666962F), TO_FIXP(30,0.080584227F),	TO_FIXP(30,0.085821044F), TO_FIXP(30,0.091398179F),	TO_FIXP(30,0.097337747F), TO_FIXP(30,0.10366330F),	TO_FIXP(30,0.11039993F), TO_FIXP(30,0.11757434F), 	TO_FIXP(30,0.12521498F), TO_FIXP(30,0.13335215F),	TO_FIXP(30,0.14201813F), TO_FIXP(30,0.15124727F),	TO_FIXP(30,0.16107617F), TO_FIXP(30,0.17154380F),	TO_FIXP(30,0.18269168F), TO_FIXP(30,0.19456402F),	TO_FIXP(30,0.20720788F), TO_FIXP(30,0.22067342F),	TO_FIXP(30,0.23501402F), TO_FIXP(30,0.25028656F),	TO_FIXP(30,0.26655159F), TO_FIXP(30,0.28387361F),	TO_FIXP(30,0.30232132F), TO_FIXP(30,0.32196786F),	TO_FIXP(30,0.34289114F), TO_FIXP(30,0.36517414F),	TO_FIXP(30,0.38890521F), TO_FIXP(30,0.41417847F),	TO_FIXP(30,0.44109412F), TO_FIXP(30,0.46975890F),	TO_FIXP(30,0.50028648F), TO_FIXP(30,0.53279791F),	TO_FIXP(30,0.56742212F), TO_FIXP(30,0.60429640F),	TO_FIXP(30,0.64356699F), TO_FIXP(30,0.68538959F),	TO_FIXP(30,0.72993007F), TO_FIXP(30,0.77736504F),	TO_FIXP(30,0.82788260F), TO_FIXP(30,0.88168307F),	TO_FIXP(30,0.9389798F), TO_FIXP(30,1.F),};static void render_line(int x0,int x1,int y0,int y1,FIXP *d){  int dy=y1-y0;  int adx=x1-x0;  int ady=abs(dy);  int base=dy/adx;  int sy=(dy<0?base-1:base+1);  int x=x0;  int y=y0;  int err=0;  ady-=abs(base*adx);  /*   * FIXP note: d[] (x.16) * FLOOR_fromdB_LOOKUP[] (x.30) = (x.46).   * We want to scale it back to FIXP_FRACBITS.   */  d[x]=MUL(46-FIXP_FRACBITS,d[x],FLOOR_fromdB_LOOKUP[y]);  while(++x<x1){    err=err+ady;    if(err>=adx){      err-=adx;      y+=sy;    }else{      y+=base;    }    d[x]=MUL(46-FIXP_FRACBITS,d[x],FLOOR_fromdB_LOOKUP[y]);  }}static void *floor1_inverse1(vorbis_block *vb,vorbis_look_floor *in){  vorbis_look_floor1 *look=(vorbis_look_floor1 *)in;  vorbis_info_floor1 *info=look->vi;  codec_setup_info   *ci=vb->vd->vi->codec_setup;    int i,j,k;  codebook *books=ci->fullbooks;     /* unpack wrapped/predicted values from stream */  if(oggpack_read(&vb->opb,1)==1){    int *fit_value=_vorbis_block_alloc(vb,(look->posts)*sizeof(*fit_value));    fit_value[0]=oggpack_read(&vb->opb,ilog(look->quant_q-1));    fit_value[1]=oggpack_read(&vb->opb,ilog(look->quant_q-1));    /* partition by partition */    /* partition by partition */    for(i=0,j=2;i<info->partitions;i++){      int class=info->partitionclass[i];      int cdim=info->class_dim[class];      int csubbits=info->class_subs[class];      int csub=1<<csubbits;      int cval=0;      /* decode the partition's first stage cascade value */      if(csubbits){	cval=vorbis_book_decode(books+info->class_book[class],&vb->opb);	if(cval==-1)goto eop;      }      for(k=0;k<cdim;k++){	int book=info->class_subbook[class][cval&(csub-1)];	cval>>=csubbits;	if(book>=0){	  if((fit_value[j+k]=vorbis_book_decode(books+book,&vb->opb))==-1)	    goto eop;	}else{	  fit_value[j+k]=0;	}      }      j+=cdim;    }    /* unwrap positive values and reconsitute via linear interpolation */    for(i=2;i<look->posts;i++){      int predicted=render_point(info->postlist[look->loneighbor[i-2]],				 info->postlist[look->hineighbor[i-2]],				 fit_value[look->loneighbor[i-2]],				 fit_value[look->hineighbor[i-2]],				 info->postlist[i]);      int hiroom=look->quant_q-predicted;      int loroom=predicted;      int room=(hiroom<loroom?hiroom:loroom)<<1;      int val=fit_value[i];      if(val){	if(val>=room){	  if(hiroom>loroom){	    val = val-loroom;	  }else{	  val = -1-(val-hiroom);	  }	}else{	  if(val&1){	    val= -((val+1)>>1);	  }else{	    val>>=1;	  }	}	fit_value[i]=val+predicted;	fit_value[look->loneighbor[i-2]]&=0x7fff;	fit_value[look->hineighbor[i-2]]&=0x7fff;      }else{	fit_value[i]=predicted|0x8000;      }	    }    return(fit_value);  } eop:  return(NULL);}static int floor1_inverse2(vorbis_block *vb,vorbis_look_floor *in,void *memo,			  FIXP *out){  vorbis_look_floor1 *look=(vorbis_look_floor1 *)in;  vorbis_info_floor1 *info=look->vi;  codec_setup_info   *ci=vb->vd->vi->codec_setup;  int                  n=ci->blocksizes[vb->mode]/2;  int j;  if(memo){    /* render the lines */    int *fit_value=(int *)memo;    int hx=0;    int lx=0;    int ly=fit_value[0]*info->mult;    for(j=1;j<look->posts;j++){      int current=look->forward_index[j];      int hy=fit_value[current]&0x7fff;      if(hy==fit_value[current]){		hy*=info->mult;	hx=info->postlist[current];		render_line(lx,hx,ly,hy,out);		lx=hx;	ly=hy;      }    }    for(j=hx;j<n;j++)out[j]*=ly; /* be certain */        return(1);  }  memset(out,0,sizeof(*out)*n);  return(0);}/* export hooks */vorbis_func_floor floor1_exportbundle={  NULL,&floor1_unpack,&floor1_look,NULL,&floor1_free_info,  &floor1_free_look,NULL,&floor1_inverse1,&floor1_inverse2};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -