diff options
author | Monty <xiphmont@xiph.org> | 2001-12-19 07:33:52 +0000 |
---|---|---|
committer | Monty <xiphmont@xiph.org> | 2001-12-19 07:33:52 +0000 |
commit | a06da3587f26a6c068ed87a0d63d59d839399858 (patch) | |
tree | 5d648fa4d6113475db6879b336c9b2193cdae78d /lib/bitrate.c | |
parent | 065bbd52db2372421d9ecdf0704bc12280eec514 (diff) | |
download | libvorbis-git-a06da3587f26a6c068ed87a0d63d59d839399858.tar.gz |
bitrate management is active
svn path=/trunk/vorbis/; revision=2856
Diffstat (limited to 'lib/bitrate.c')
-rw-r--r-- | lib/bitrate.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/lib/bitrate.c b/lib/bitrate.c index 6f19bf0e..0bfc1e48 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.4 2001/12/19 01:08:13 xiphmont Exp $ + last mod: $Id: bitrate.c,v 1.5 2001/12/19 07:33:51 xiphmont Exp $ ********************************************************************/ @@ -283,7 +283,7 @@ int vorbis_bitrate_addblock(vorbis_block *vb){ bm->avg_tail++; if(bm->avg_tail>=bm->queue_size)bm->avg_tail=0; } - + /* update the avg center */ if(bm->avg_centeracc>desired_center){ /* choose the new average floater */ @@ -310,7 +310,7 @@ int vorbis_bitrate_addblock(vorbis_block *vb){ /* apply the average floater to new blocks */ bin=bm->avgfloat*BITTRACK_DIVISOR; /* truncate on purpose */ - fprintf(stderr,"float:%d ",bin); + 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]& @@ -328,14 +328,20 @@ int vorbis_bitrate_addblock(vorbis_block *vb){ /* track noise bias triggers and noise bias */ if(bm->avgfloat<bi->avgfloat_noise_lowtrigger) bm->noisetrigger_request+=1.f; - + else + if(bm->noisetrigger_request>0. && bm->avgnoise>0.) + bm->noisetrigger_request-=.2f; + if(bm->avgfloat>bi->avgfloat_noise_hightrigger) bm->noisetrigger_request-=1.f; - + else + if(bm->noisetrigger_request<0 && bm->avgnoise<0.) + bm->noisetrigger_request+=.2f; + if(bm->noisetrigger_postpone<=0){ if(bm->noisetrigger_request<0.){ bm->avgnoise-=1.f; - if(bm->noisetrigger_request<(signed long)(bm->avg_sampleacc)/2) + if(-bm->noisetrigger_request>(signed long)(bm->avg_sampleacc)/2) bm->avgnoise-=1.f; bm->noisetrigger_postpone=bm->avg_sampleacc/2; } @@ -358,7 +364,7 @@ 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:%ld trigger:%ld\n",bm->avgnoise, + fprintf(stderr,"noise:%f req:%f trigger:%ld\n",bm->avgnoise, bm->noisetrigger_request,bm->noisetrigger_postpone); } @@ -435,7 +441,8 @@ int vorbis_bitrate_addblock(vorbis_block *vb){ int limit=0; fprintf(stderr,"prelimit:%dkbps ",(int)bitrate/1000); - if(bitrate>bi->queue_hardmax || bitrate<bi->queue_hardmin){ + if((bi->queue_hardmax>0 && bitrate>bi->queue_hardmax) || + (bi->queue_hardmin>0 && bitrate<bi->queue_hardmin)){ int newstack; int stackctr; long bitsum=limit_sum(bm,0); |