diff options
author | Monty <xiphmont@xiph.org> | 2001-12-06 07:33:30 +0000 |
---|---|---|
committer | Monty <xiphmont@xiph.org> | 2001-12-06 07:33:30 +0000 |
commit | cb3b6e05c8621cf3e187f5ead57a882962a3b661 (patch) | |
tree | 05d37010472c294c64f1fa551ebef9a42c0e12d0 | |
parent | c5dbab6b138adadc26bf158c39ab2ee427e7519b (diff) | |
download | libvorbis-git-cb3b6e05c8621cf3e187f5ead57a882962a3b661.tar.gz |
fixes to numerous typos and thinkos
svn path=/branches/branch_monty_20011009/vorbis/; revision=2422
-rw-r--r-- | lib/psy.c | 8 | ||||
-rw-r--r-- | lib/vorbisenc.c | 157 |
2 files changed, 90 insertions, 75 deletions
@@ -11,7 +11,7 @@ ******************************************************************** function: psychoacoustics not including preecho - last mod: $Id: psy.c,v 1.56.2.6 2001/12/05 08:03:17 xiphmont Exp $ + last mod: $Id: psy.c,v 1.56.2.7 2001/12/06 07:33:30 xiphmont Exp $ ********************************************************************/ @@ -837,6 +837,11 @@ void _vp_compute_mask(vorbis_look_psy *p, /* work[i] holds the median line (.5), logmask holds the upper envelope line (1.) */ + _analysis_output("noisemedian",seq,work,n,1,0); + + for(i=0;i<n;i++)logmask[i]+=work[i]; + _analysis_output("noiseenvelope",seq,logmask,n,1,0); + for(i=0;i<n;i++)logmask[i]-=work[i]; for(i=0;i<n;i++){ int dB=logmask[i]+.5; @@ -844,6 +849,7 @@ void _vp_compute_mask(vorbis_look_psy *p, logmask[i]= work[i]+p->vi->noisecompand[dB]+p->noiseoffset[i]+bitrate_noise_offset; if(logmask[i]>p->vi->noisemaxsupp)logmask[i]=p->vi->noisemaxsupp; } + _analysis_output("noise",seq,logmask,n,1,0); }else{ for(i=0;i<n;i++)logmask[i]=NEGINF; diff --git a/lib/vorbisenc.c b/lib/vorbisenc.c index 2ed24b6d..de39345a 100644 --- a/lib/vorbisenc.c +++ b/lib/vorbisenc.c @@ -11,7 +11,7 @@ ******************************************************************** function: simple programmatic interface for encoder mode setup - last mod: $Id: vorbisenc.c,v 1.17.2.2 2001/12/05 08:03:18 xiphmont Exp $ + last mod: $Id: vorbisenc.c,v 1.17.2.3 2001/12/06 07:33:30 xiphmont Exp $ ********************************************************************/ @@ -77,21 +77,26 @@ static int vorbis_encode_toplevel_init(vorbis_info *vi,int small,int large,int c /* time mapping hooks are unused in vorbis I */ ci->times=1; ci->time_type[0]=0; - ci->time_param[0]=&_time_dummy; + ci->time_param[0]=calloc(1,sizeof(_time_dummy)); + memcpy(ci->time_param[0],&_time_dummy,sizeof(_time_dummy)); /* by convention, two modes: one for short, one for long blocks. short block mode uses mapping sero, long block uses mapping 1 */ ci->modes=2; - ci->mode_param[0]=&_mode_set_short; - ci->mode_param[1]=&_mode_set_long; + ci->mode_param[0]=calloc(1,sizeof(_mode_set_short)); + memcpy(ci->mode_param[0],&_mode_set_short,sizeof(_mode_set_short)); + ci->mode_param[1]=calloc(1,sizeof(_mode_set_long)); + memcpy(ci->mode_param[1],&_mode_set_long,sizeof(_mode_set_long)); /* by convention two mappings, both mapping type zero (polyphonic PCM), first for short, second for long blocks */ ci->maps=2; ci->map_type[0]=0; - ci->map_param[0]=&_mapping_set_short; + ci->map_param[0]=calloc(1,sizeof(_mapping_set_short)); + memcpy(ci->map_param[0],&_mapping_set_short,sizeof(_mapping_set_short)); ci->map_type[1]=0; - ci->map_param[1]=&_mapping_set_short; + ci->map_param[1]=calloc(1,sizeof(_mapping_set_long)); + memcpy(ci->map_param[1],&_mapping_set_long,sizeof(_mapping_set_long)); return(0); } @@ -166,27 +171,29 @@ static int vorbis_encode_global_psych_init(vorbis_info *vi,double q, memcpy(g,in+(int)x[iq],sizeof(*g)); + dq=x[iq]*(1.-dq)+x[iq+1]*dq; + iq=(int)dq; + dq-=iq; + if(dq==0 && iq>0){ + iq--; + dq=1.; + } + /* interpolate the trigger threshholds */ for(i=0;i<4;i++){ g->preecho_thresh[i]=in[iq].preecho_thresh[i]*(1.-dq)+in[iq+1].preecho_thresh[i]*dq; - g->preecho_thresh[i]=in[iq].postecho_thresh[i]*(1.-dq)+in[iq+1].postecho_thresh[i]*dq; + g->postecho_thresh[i]=in[iq].postecho_thresh[i]*(1.-dq)+in[iq+1].postecho_thresh[i]*dq; } g->ampmax_att_per_sec=in[iq].ampmax_att_per_sec*(1.-dq)+in[iq+1].ampmax_att_per_sec*dq; return(0); } static int vorbis_encode_psyset_init(vorbis_info *vi,double q,int block, - vorbis_info_psy *in, ...){ - int i,iq=q*10; - double x[11],dq; + vorbis_info_psy *in){ + int iq=q*10; + double dq; codec_setup_info *ci=vi->codec_setup; vorbis_info_psy *p=ci->psy_param[block]; - va_list ap; - - va_start(ap,in); - for(i=0;i<11;i++) - x[i]=va_arg(ap,double); - va_end(ap); if(iq==10){ iq=9; @@ -212,6 +219,20 @@ static int vorbis_encode_psyset_init(vorbis_info *vi,double q,int block, p->tone_abs_limit=in[iq].tone_abs_limit*(1.-dq)+in[iq+1].tone_abs_limit*dq; p->noisemaxsupp=in[iq].noisemaxsupp*(1.-dq)+in[iq+1].noisemaxsupp*dq; + + switch(block){ + case 0: + p->noisewindowlomin=2; + p->noisewindowhimin=2; + p->noisewindowfixed=15; + break; + default: + p->noisewindowlomin=4; + p->noisewindowhimin=4; + p->noisewindowfixed=100; + break; + } + return(0); } @@ -232,7 +253,15 @@ static int vorbis_encode_compand_init(vorbis_info *vi,double q,int block, iq=9; dq=1.; }else{ - dq=q+10.-iq; + dq=q*10.-iq; + } + + dq=x[iq]*(1.-dq)+x[iq+1]*dq; + iq=(int)dq; + dq-=iq; + if(dq==0 && iq>0){ + iq--; + dq=1.; } /* interpolate the compander settings */ @@ -242,23 +271,17 @@ static int vorbis_encode_compand_init(vorbis_info *vi,double q,int block, } static int vorbis_encode_tonemask_init(vorbis_info *vi,double q,int block, - vp_adjblock *in, ...){ - int i,j,iq=q*10; - double x[11],dq; + vp_adjblock *in){ + int i,j,iq=q*5.; + double dq; codec_setup_info *ci=vi->codec_setup; vorbis_info_psy *p=ci->psy_param[block]; - va_list ap; - - va_start(ap,in); - for(i=0;i<11;i++) - x[i]=va_arg(ap,double); - va_end(ap); - if(iq==10){ - iq=9; + if(iq==5){ + iq=5; dq=1.; }else{ - dq=q*10.-iq; + dq=q*5.-iq; } for(i=0;i<P_BANDS;i++) @@ -269,23 +292,17 @@ static int vorbis_encode_tonemask_init(vorbis_info *vi,double q,int block, } static int vorbis_encode_peak_init(vorbis_info *vi,double q,int block, - vp_adjblock *in, ...){ - int i,j,iq=q*10; - double x[11],dq; + vp_adjblock *in){ + int i,j,iq=q*5.; + double dq; codec_setup_info *ci=vi->codec_setup; vorbis_info_psy *p=ci->psy_param[block]; - va_list ap; - - va_start(ap,in); - for(i=0;i<11;i++) - x[i]=va_arg(ap,double); - va_end(ap); - if(iq==10){ - iq=9; + if(iq==5){ + iq=5; dq=1.; }else{ - dq=q*10.-iq; + dq=q*5.-iq; } for(i=0;i<P_BANDS;i++) @@ -296,17 +313,11 @@ static int vorbis_encode_peak_init(vorbis_info *vi,double q,int block, } static int vorbis_encode_noisebias_init(vorbis_info *vi,double q,int block, - int in[][17], ...){ + int in[][17]){ int i,iq=q*10; - double x[11],dq; + double dq; codec_setup_info *ci=vi->codec_setup; vorbis_info_psy *p=ci->psy_param[block]; - va_list ap; - - va_start(ap,in); - for(i=0;i<11;i++) - x[i]=va_arg(ap,double); - va_end(ap); if(iq==10){ iq=9; @@ -340,6 +351,14 @@ static int vorbis_encode_ath_init(vorbis_info *vi,double q,int block, dq=q*10.-iq; } + dq=x[iq]*(1.-dq)+x[iq+1]*dq; + iq=(int)dq; + dq-=iq; + if(dq==0 && iq>0){ + iq--; + dq=1.; + } + for(i=0;i<P_BANDS;i++) p->ath[i]=in[iq][i]*(1.-dq)+in[iq+1][i]*dq; return(0); @@ -567,6 +586,8 @@ int vorbis_encode_init_vbr(vorbis_info *vi, ){ int ret=0; + base_quality=0.; + if(rate>40000){ ret|=vorbis_encode_toplevel_init(vi,256,2048,channels,rate); ret|=vorbis_encode_floor_init(vi,base_quality,0,_floor_44_128_books,_floor_44_128, @@ -577,19 +598,13 @@ int vorbis_encode_init_vbr(vorbis_info *vi, ret|=vorbis_encode_global_psych_init(vi,base_quality,_psy_global_44, 0., 0., .5, 1., 1., 1., 1., 1., 1., 1., 1.); - ret|=vorbis_encode_psyset_init(vi,base_quality,0,_psy_settings, - 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.); - ret|=vorbis_encode_psyset_init(vi,base_quality,1,_psy_settings, - 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.); - ret|=vorbis_encode_psyset_init(vi,base_quality,2,_psy_settings, - 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.); - - ret|=vorbis_encode_tonemask_init(vi,base_quality,0,_vp_tonemask_adj_otherblock, - 0., .5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5.); - ret|=vorbis_encode_tonemask_init(vi,base_quality,1,_vp_tonemask_adj_otherblock, - 0., .5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5.); - ret|=vorbis_encode_tonemask_init(vi,base_quality,2,_vp_tonemask_adj_longblock, - 0., .5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5.); + ret|=vorbis_encode_psyset_init(vi,base_quality,0,_psy_settings); + ret|=vorbis_encode_psyset_init(vi,base_quality,1,_psy_settings); + ret|=vorbis_encode_psyset_init(vi,base_quality,2,_psy_settings); + + ret|=vorbis_encode_tonemask_init(vi,base_quality,0,_vp_tonemask_adj_otherblock); + ret|=vorbis_encode_tonemask_init(vi,base_quality,1,_vp_tonemask_adj_otherblock); + ret|=vorbis_encode_tonemask_init(vi,base_quality,2,_vp_tonemask_adj_longblock); ret|=vorbis_encode_compand_init(vi,base_quality,0,_psy_compand_44, 1., 1., 1.3, 1.6, 2., 2., 2., 2., 2., 2., 2.); @@ -598,19 +613,13 @@ int vorbis_encode_init_vbr(vorbis_info *vi, ret|=vorbis_encode_compand_init(vi,base_quality,2,_psy_compand_44, 1., 1., 1.3, 1.6, 2., 2., 2., 2., 2., 2., 2.); - ret|=vorbis_encode_peak_init(vi,base_quality,0,_vp_peakguard, - 0., .5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5.); - ret|=vorbis_encode_peak_init(vi,base_quality,1,_vp_peakguard, - 0., .5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5.); - ret|=vorbis_encode_peak_init(vi,base_quality,2,_vp_peakguard, - 0., .5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5.); + ret|=vorbis_encode_peak_init(vi,base_quality,0,_vp_peakguard); + ret|=vorbis_encode_peak_init(vi,base_quality,1,_vp_peakguard); + ret|=vorbis_encode_peak_init(vi,base_quality,2,_vp_peakguard); - ret|=vorbis_encode_noisebias_init(vi,base_quality,0,_psy_noisebias_other, - 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.); - ret|=vorbis_encode_noisebias_init(vi,base_quality,1,_psy_noisebias_other, - 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.); - ret|=vorbis_encode_noisebias_init(vi,base_quality,2,_psy_noisebias_long, - 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.); + ret|=vorbis_encode_noisebias_init(vi,base_quality,0,_psy_noisebias_other); + ret|=vorbis_encode_noisebias_init(vi,base_quality,1,_psy_noisebias_other); + ret|=vorbis_encode_noisebias_init(vi,base_quality,2,_psy_noisebias_long); ret|=vorbis_encode_ath_init(vi,base_quality,0,ATH_Bark_dB, 0., 0., 0., 0., 0., .5, 1., 1., 1.5, 2., 2.); |