# HG changeset patch # User michaelni # Date 1023020666 0 # Node ID 295ce90742ff7da96e35b1ca120686a973f4a5e6 # Parent e573f907734d979dee9a4928b11a7d9be2a5d887 b_quant_offset (unfinished, should be 0 for now) diff -r e573f907734d -r 295ce90742ff ratecontrol.c --- a/ratecontrol.c Sun Jun 02 12:23:22 2002 +0000 +++ b/ratecontrol.c Sun Jun 02 12:24:26 2002 +0000 @@ -149,8 +149,8 @@ // printf("%d %d %d\n", picture_number, (int)wanted_bits, (int)s->total_bits); if(s->pict_type==B_TYPE){ - qmin= (int)(qmin*s->b_quant_factor+0.5); - qmax= (int)(qmax*s->b_quant_factor+0.5); + qmin= (int)(qmin*s->b_quant_factor+s->b_quant_offset + 0.5); + qmax= (int)(qmax*s->b_quant_factor+s->b_quant_offset + 0.5); } if(qmin<1) qmin=1; if(qmax>31) qmax=31; @@ -171,12 +171,12 @@ q= 1/((1/long_term_q - 1/short_term_q)*s->qcompress + 1/short_term_q); }else if(s->pict_type==B_TYPE){ - q= (int)(s->last_non_b_qscale*s->b_quant_factor+0.5); + q= (int)(s->last_non_b_qscale*s->b_quant_factor+s->b_quant_offset + 0.5); }else{ //P Frame int i; int diff, best_diff=1000000000; for(i=1; i<=31; i++){ - diff= predict(&s->p_pred, i, s->mc_mb_var) - (double)s->bit_rate/fps; + diff= predict(&s->p_pred, i, s->mc_mb_var_sum) - (double)s->bit_rate/fps; if(diff<0) diff= -diff; if(diffb_quant_factor) / (all_available_bits - all_const_bits); - avg_quantizer[B_TYPE]= avg_quantizer[P_TYPE]*s->b_quant_factor; + avg_quantizer[B_TYPE]= avg_quantizer[P_TYPE]*s->b_quant_factor + s->b_quant_offset; //printf("avg quantizer: %f %f\n", avg_quantizer[P_TYPE], avg_quantizer[B_TYPE]); for(i=0; i<5; i++){ @@ -308,8 +308,8 @@ int qmax= s->qmax; if(pict_type==B_TYPE){ - qmin= (int)(qmin*s->b_quant_factor+0.5); - qmax= (int)(qmax*s->b_quant_factor+0.5); + qmin= (int)(qmin*s->b_quant_factor+s->b_quant_offset + 0.5); + qmax= (int)(qmax*s->b_quant_factor+s->b_quant_offset + 0.5); } if(qmin<1) qmin=1; if(qmax>31) qmax=31; @@ -342,7 +342,7 @@ q= 1/((1/avg_quantizer[pict_type] - 1/short_term_q)*s->qcompress + 1/short_term_q); if (qqmax) q=qmax; -//printf("lq:%f, sq:%f t:%f q:%f\n", avg_quantizer[rce->pict_type], short_term_q, bits_left, q); +printf("lq:%f, sq:%f t:%f q:%f\n", avg_quantizer[rce->pict_type], short_term_q, bits_left, q); rce->new_qscale= q; } @@ -380,8 +380,8 @@ // printf("%d %d %d\n", picture_number, (int)wanted_bits, (int)s->total_bits); if(s->pict_type==B_TYPE){ - qmin= (int)(qmin*s->b_quant_factor+0.5); - qmax= (int)(qmax*s->b_quant_factor+0.5); + qmin= (int)(qmin*s->b_quant_factor+s->b_quant_offset + 0.5); + qmax= (int)(qmax*s->b_quant_factor+s->b_quant_offset + 0.5); } if(qmin<1) qmin=1; if(qmax>31) qmax=31;