From 0922124cba820921a69d9174adc688b90bdef3e2 Mon Sep 17 00:00:00 2001 From: Monty Date: Wed, 19 Dec 2001 08:10:04 +0000 Subject: [PATCH] eliminate printfs fix bug in management when only a hard minimum rate is specced minor default tuning tweaks svn path=/trunk/vorbis/; revision=2857 --- examples/encoder_example.c | 9 +++++---- include/vorbis/vorbisenc.h | 19 ++++++++++++++++++- lib/bitrate.c | 11 ++--------- lib/modes/psych_44.h | 8 +++++++- lib/vorbisenc.c | 31 +++++++++++++++++++------------ 5 files changed, 51 insertions(+), 27 deletions(-) diff --git a/examples/encoder_example.c b/examples/encoder_example.c index 5380971..4740dc3 100644 --- a/examples/encoder_example.c +++ b/examples/encoder_example.c @@ -11,7 +11,7 @@ ******************************************************************** function: simple example encoder - last mod: $Id: encoder_example.c,v 1.30 2001/12/19 01:08:13 xiphmont Exp $ + last mod: $Id: encoder_example.c,v 1.31 2001/12/19 08:10:02 xiphmont Exp $ ********************************************************************/ @@ -93,14 +93,15 @@ int main(){ /********** Encode setup ************/ /* choose an encoding mode */ - /* (mode 0: 44kHz stereo uncoupled, roughly 128kbps VBR) */ + /* (quality mode .4: 44kHz stereo coupled, roughly 128kbps VBR) */ vorbis_info_init(&vi); - vorbis_encode_init_vbr(&vi,2,44100,.4); + vorbis_encode_init_vbr(&vi,2,44100,.1); + //vorbis_encode_init(&vi,2,44100,70000,64000,-1); /* add a comment */ vorbis_comment_init(&vc); - vorbis_comment_add(&vc,"ENCODER=encoder_example.c"); + vorbis_comment_add_tag(&vc,"ENCODER","encoder_example.c"); /* set up the analysis state and auxiliary encoding storage */ vorbis_analysis_init(&vd,&vi); diff --git a/include/vorbis/vorbisenc.h b/include/vorbis/vorbisenc.h index 7b10682..19b6943 100644 --- a/include/vorbis/vorbisenc.h +++ b/include/vorbis/vorbisenc.h @@ -11,7 +11,7 @@ ******************************************************************** function: vorbis encode-engine setup - last mod: $Id: vorbisenc.h,v 1.6 2001/12/19 02:08:55 jack Exp $ + last mod: $Id: vorbisenc.h,v 1.7 2001/12/19 08:10:03 xiphmont Exp $ ********************************************************************/ @@ -33,6 +33,21 @@ extern int vorbis_encode_init(vorbis_info *vi, long nominal_bitrate, long min_bitrate); +extern int vorbis_encode_setup_managed(vorbis_info *vi, + long channels, + long rate, + + long max_bitrate, + long nominal_bitrate, + long min_bitrate); + +extern int vorbis_encode_setup_vbr(vorbis_info *vi, + long channels, + long rate, + + float /* quality level from 0. (lo) to 1. (hi) */ + ); + extern int vorbis_encode_init_vbr(vorbis_info *vi, long channels, long rate, @@ -40,6 +55,8 @@ extern int vorbis_encode_init_vbr(vorbis_info *vi, float base_quality /* quality level from 0. (lo) to 1. (hi) */ ); +extern int vorbis_encode_setup_init(vorbis_info *vi); + extern int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg); diff --git a/lib/bitrate.c b/lib/bitrate.c index 0bfc1e4..3f67c0c 100644 --- a/lib/bitrate.c +++ b/lib/bitrate.c @@ -11,7 +11,7 @@ ******************************************************************** function: bitrate tracking and management - last mod: $Id: bitrate.c,v 1.5 2001/12/19 07:33:51 xiphmont Exp $ + last mod: $Id: bitrate.c,v 1.6 2001/12/19 08:10:03 xiphmont Exp $ ********************************************************************/ @@ -310,7 +310,6 @@ int vorbis_bitrate_addblock(vorbis_block *vb){ /* apply the average floater to new blocks */ bin=bm->avgfloat*BITTRACK_DIVISOR; /* truncate on purpose */ - fprintf(stderr,"u:%f l:%f float:%d ",upper,lower,bin); while(bm->avg_centeracc>desired_center){ int samples= samples=ci->blocksizes[bm->queue_actual[bm->avg_center]& @@ -364,9 +363,6 @@ int vorbis_bitrate_addblock(vorbis_block *vb){ if(bm->avgnoise>bi->avgfloat_noise_maxval) bm->avgnoise=bi->avgfloat_noise_maxval; } - fprintf(stderr,"noise:%f req:%f trigger:%ld\n",bm->avgnoise, - bm->noisetrigger_request,bm->noisetrigger_postpone); - } }else{ /* if we're not using an average tracker, the 'float' is nailed to @@ -440,7 +436,6 @@ int vorbis_bitrate_addblock(vorbis_block *vb){ double bitrate=(double)bm->minmax_acctotal/bm->minmax_sampleacc*vi->rate; int limit=0; - fprintf(stderr,"prelimit:%dkbps ",(int)bitrate/1000); if((bi->queue_hardmax>0 && bitrate>bi->queue_hardmax) || (bi->queue_hardmin>0 && bitratequeue_hardmin)){ int newstack; @@ -451,7 +446,7 @@ int vorbis_bitrate_addblock(vorbis_block *vb){ /* we're off rate. Iteratively try out new hard floater limits until we find one that brings us inside. Here's where we see the whole point of the limit stacks. */ - if(bitrate>bi->queue_hardmax){ + if(bi->queue_hardmax>0 && bitrate>bi->queue_hardmax){ for(limit=-1;limit>-bins;limit--){ long bitsum=limit_sum(bm,limit); bitrate=(double)bitsum/bm->minmax_sampleacc*vi->rate; @@ -468,7 +463,6 @@ int vorbis_bitrate_addblock(vorbis_block *vb){ bitsum=limit_sum(bm,limit); bitrate=(double)bitsum/bm->minmax_sampleacc*vi->rate; - fprintf(stderr,"postlimit:%dkbps ",(int)bitrate/1000); /* trace the limit backward, stop when we see a lower limit */ newstack=bm->minmax_stackptr-1; @@ -495,7 +489,6 @@ int vorbis_bitrate_addblock(vorbis_block *vb){ stackctr++; bm->minmax_posstack[stackctr]=bm->minmax_posstack[bm->minmax_stackptr]; bm->minmax_limitstack[stackctr]=limit; - fprintf(stderr,"limit:%d\n",limit); /* set up new blank stack entry */ stackctr++; diff --git a/lib/modes/psych_44.h b/lib/modes/psych_44.h index 5c61d8e..21e2c2e 100644 --- a/lib/modes/psych_44.h +++ b/lib/modes/psych_44.h @@ -11,7 +11,7 @@ ******************************************************************** function: key psychoacoustic settings for 44.1/48kHz - last mod: $Id: psych_44.h,v 1.4 2001/12/19 01:10:27 xiphmont Exp $ + last mod: $Id: psych_44.h,v 1.5 2001/12/19 08:10:04 xiphmont Exp $ ********************************************************************/ @@ -639,3 +639,9 @@ static double _psy_stereo_point_kHz_44[2][11]={ static double _psy_lowpass_44[11]={ 15.1,15.8,16.5,17.9,20.5,48.,999.,999.,999.,999.,999. }; + +/* management noise offset */ + +static double _bm_max_noise_offset[11]={ + 1.,2.,3.,3.,4.,4.,4.,4.,4.,4.,4. +}; diff --git a/lib/vorbisenc.c b/lib/vorbisenc.c index 39ebcf0..f2613a1 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.26 2001/12/19 07:33:51 xiphmont Exp $ + last mod: $Id: vorbisenc.c,v 1.27 2001/12/19 08:10:03 xiphmont Exp $ ********************************************************************/ @@ -804,7 +804,7 @@ static double approx_bitrate_to_vbr(int ch,int coupled, bitrate/=ch; - if(bitrate=bitrate)break; if(i==10)return(10.); @@ -953,16 +953,21 @@ int vorbis_encode_setup_managed(vorbis_info *vi, if(hi->stereo_point_dB && hi->stereo_couple_p && channels==2){ hi->stereo_point_dB++; if(hi->stereo_point_dB>3)hi->stereo_point_dB=3; - }else{ - /* else, slug the vbr noise setting */ - int i; - for(i=0;i<4;i++){ - hi->blocktype[i].noise_bias_quality-=.1; - if(hi->blocktype[i].noise_bias_quality<0.) - hi->blocktype[i].noise_bias_quality=0.; - } - } - + } + /* slug the vbr noise setting*/ + hi->blocktype[0].noise_bias_quality-=.1; + if(hi->blocktype[0].noise_bias_quality<0.) + hi->blocktype[0].noise_bias_quality=0.; + hi->blocktype[1].noise_bias_quality-=.1; + if(hi->blocktype[1].noise_bias_quality<0.) + hi->blocktype[1].noise_bias_quality=0.; + hi->blocktype[2].noise_bias_quality-=.05; + if(hi->blocktype[2].noise_bias_quality<0.) + hi->blocktype[2].noise_bias_quality=0.; + hi->blocktype[3].noise_bias_quality-=.05; + if(hi->blocktype[3].noise_bias_quality<0.) + hi->blocktype[3].noise_bias_quality=0.; + /* initialize management. Currently hardcoded for 44, but so is above. */ memcpy(&ci->bi,&_bm_44_default,sizeof(ci->bi)); ci->bi.queue_hardmin=min_bitrate; @@ -976,6 +981,8 @@ int vorbis_encode_setup_managed(vorbis_info *vi, /* just an average tracker; no reason for the window to be as small as 2s. */ ci->bi.queue_avg_time=4.; } + ci->bi.avgfloat_noise_maxval=_bm_max_noise_offset[(int)approx_vbr]; + } return(ret); -- 2.7.4