📄 floor1.c
字号:
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 + -