summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty <xiphmont@xiph.org>2001-11-22 07:54:41 +0000
committerMonty <xiphmont@xiph.org>2001-11-22 07:54:41 +0000
commitaad142326f35f3b7740b7e8c11ed32d6f7897959 (patch)
tree5b8fd9bdc3ab9494944bf5379c66a2d25915c1fe
parent9473cf9fdcbca1a350ade44cb59de687afda5df5 (diff)
downloadlibvorbis-git-aad142326f35f3b7740b7e8c11ed32d6f7897959.tar.gz
ongoing fixes to bitrate management
Monty svn path=/branches/branch_monty_20011009/vorbis/; revision=2398
-rw-r--r--lib/bitrate.c17
-rw-r--r--lib/modes/mode_44c_A.h6
2 files changed, 11 insertions, 12 deletions
diff --git a/lib/bitrate.c b/lib/bitrate.c
index 1fe8f033..82745490 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.1.2.2 2001/11/22 06:21:07 xiphmont Exp $
+ last mod: $Id: bitrate.c,v 1.1.2.3 2001/11/22 07:54:41 xiphmont Exp $
********************************************************************/
@@ -98,7 +98,7 @@ void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bm){
bi->queue_minmax_time)+bm->avg_centerdesired;
if(maxlatency>0){
- long maxpackets=maxlatency/ci->blocksizes[0]+3;
+ long maxpackets=maxlatency/(ci->blocksizes[0]>>1)+3;
long bins=BITTRACK_DIVISOR*ci->passlimit[ci->coupling_passes-1];
bm->queue_size=maxpackets;
@@ -311,7 +311,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,"float:%d ",bin);
while(bm->avg_centeracc>desired_center){
int samples=
samples=ci->blocksizes[bm->queue_actual[bm->avg_center]&
@@ -428,7 +428,7 @@ 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);
+ fprintf(stderr,"prelimit:%dkbps ",(int)bitrate/1000);
if(bitrate>bi->queue_hardmax || bitrate<bi->queue_hardmin){
int newstack;
int stackctr;
@@ -450,6 +450,7 @@ int vorbis_bitrate_addblock(vorbis_block *vb){
bitrate=(double)bitsum/bm->minmax_sampleacc*vi->rate;
if(bitrate>=bi->queue_hardmin)break;
}
+ if(bitrate>bi->queue_hardmax)limit--;
}
/* trace the limit backward, stop when we see a lower limit */
@@ -477,7 +478,7 @@ 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);
+ fprintf(stderr,"limit:%d\n",limit);
/* set up new blank stack entry */
stackctr++;
@@ -552,14 +553,14 @@ int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,ogg_packet *op){
bm->queue_head=0;
}else{
+ long bins=bm->queue_bins;
long bin;
long bytes;
- fprintf(stderr,"in ");
if(bm->next_to_flush==bm->last_to_flush)return(0);
bin=bm->queue_actual[bm->next_to_flush];
- bytes=(bm->queue_binned[bm->queue_bins*bm->next_to_flush+bin]+7)/8;
+ bytes=(BINBITS(bm->next_to_flush,bin)+7)/8;
memcpy(op,bm->queue_packets+bm->next_to_flush,sizeof(*op));
if(bytes<op->bytes)op->bytes=bytes;
@@ -567,8 +568,6 @@ int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,ogg_packet *op){
bm->next_to_flush++;
if(bm->next_to_flush>=bm->queue_size)bm->next_to_flush=0;
- fprintf(stderr,"eof %d %ld\n",op->e_o_s,(long)op->granulepos);
-
}
return(1);
diff --git a/lib/modes/mode_44c_A.h b/lib/modes/mode_44c_A.h
index d270f8be..cad39537 100644
--- a/lib/modes/mode_44c_A.h
+++ b/lib/modes/mode_44c_A.h
@@ -11,7 +11,7 @@
********************************************************************
function: predefined encoding modes; 44kHz stereo ~64kbps true VBR
- last mod: $Id: mode_44c_A.h,v 1.4.2.9 2001/11/22 06:21:11 xiphmont Exp $
+ last mod: $Id: mode_44c_A.h,v 1.4.2.10 2001/11/22 07:54:41 xiphmont Exp $
********************************************************************/
@@ -84,8 +84,8 @@ static bitrate_manager_info _bm_set_44c_A={
/* progressive coding and bitrate controls */
110000,90000, -1,-1,
2.,.5,
- 1., 112000, 140000,
- 124000, 128000,
+ 2., 128000, 128000,
+ 128000, 128000,
4.0, 0., -1., .05,
-.05, .05,