| 
																	
																	
																		
																	
																	
																 | 
																@@ -195,7 +195,7 @@ static inline double bits2qp(RateControlEntry *rce, double bits){ | 
															
														
														
													
														
															
																 | 
																 | 
																    return rce->qscale * (double)(rce->i_tex_bits + rce->p_tex_bits+1)/ bits; | 
																 | 
																 | 
																    return rce->qscale * (double)(rce->i_tex_bits + rce->p_tex_bits+1)/ bits; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																     | 
																 | 
																 | 
																     | 
															
														
														
													
														
															
																 | 
																 | 
																static void update_rc_buffer(MpegEncContext *s, int frame_size){ | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																int ff_vbv_update(MpegEncContext *s, int frame_size){ | 
															
														
														
													
														
															
																 | 
																 | 
																    RateControlContext *rcc= &s->rc_context; | 
																 | 
																 | 
																    RateControlContext *rcc= &s->rc_context; | 
															
														
														
													
														
															
																 | 
																 | 
																    const double fps= (double)s->avctx->frame_rate / (double)s->avctx->frame_rate_base; | 
																 | 
																 | 
																    const double fps= (double)s->avctx->frame_rate / (double)s->avctx->frame_rate_base; | 
															
														
														
													
														
															
																 | 
																 | 
																    const double buffer_size= s->avctx->rc_buffer_size; | 
																 | 
																 | 
																    const double buffer_size= s->avctx->rc_buffer_size; | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -216,10 +216,19 @@ static void update_rc_buffer(MpegEncContext *s, int frame_size){ | 
															
														
														
													
														
															
																 | 
																 | 
																        rcc->buffer_index += clip(left, min_rate, max_rate); | 
																 | 
																 | 
																        rcc->buffer_index += clip(left, min_rate, max_rate); | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																        if(rcc->buffer_index > s->avctx->rc_buffer_size){ | 
																 | 
																 | 
																        if(rcc->buffer_index > s->avctx->rc_buffer_size){ | 
															
														
														
													
														
															
																 | 
																 | 
																            av_log(s->avctx, AV_LOG_ERROR, "rc buffer overflow\n"); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            rcc->buffer_index= s->avctx->rc_buffer_size; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            int stuffing= ceil((rcc->buffer_index - s->avctx->rc_buffer_size)/8); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																             | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if(stuffing < 4 && s->codec_id == CODEC_ID_MPEG4) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                stuffing=4; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            rcc->buffer_index -= 8*stuffing; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																             | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if(s->avctx->debug & FF_DEBUG_RC) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                av_log(s->avctx, AV_LOG_DEBUG, "stuffing %d bytes\n", stuffing); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            return stuffing; | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																        } | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																/** | 
																 | 
																 | 
																/** | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -619,9 +628,6 @@ float ff_rate_estimate_qscale(MpegEncContext *s) | 
															
														
														
													
														
															
																 | 
																 | 
																        rce->b_code   = s->b_code; | 
																 | 
																 | 
																        rce->b_code   = s->b_code; | 
															
														
														
													
														
															
																 | 
																 | 
																        rce->misc_bits= 1; | 
																 | 
																 | 
																        rce->misc_bits= 1; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																        if(picture_number>0) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            update_rc_buffer(s, s->frame_bits); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        bits= predict_size(&rcc->pred[pict_type], rce->qscale, sqrt(var)); | 
																 | 
																 | 
																        bits= predict_size(&rcc->pred[pict_type], rce->qscale, sqrt(var)); | 
															
														
														
													
														
															
																 | 
																 | 
																        if(pict_type== I_TYPE){ | 
																 | 
																 | 
																        if(pict_type== I_TYPE){ | 
															
														
														
													
														
															
																 | 
																 | 
																            rce->i_count   = s->mb_num; | 
																 | 
																 | 
																            rce->i_count   = s->mb_num; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -814,7 +820,7 @@ static int init_pass2(MpegEncContext *s) | 
															
														
														
													
														
															
																 | 
																 | 
																            rce->new_qscale= modify_qscale(s, rce, blured_qscale[i], i); | 
																 | 
																 | 
																            rce->new_qscale= modify_qscale(s, rce, blured_qscale[i], i); | 
															
														
														
													
														
															
																 | 
																 | 
																            bits= qp2bits(rce, rce->new_qscale) + rce->mv_bits + rce->misc_bits; | 
																 | 
																 | 
																            bits= qp2bits(rce, rce->new_qscale) + rce->mv_bits + rce->misc_bits; | 
															
														
														
													
														
															
																 | 
																 | 
																//printf("%d %f\n", rce->new_bits, blured_qscale[i]); | 
																 | 
																 | 
																//printf("%d %f\n", rce->new_bits, blured_qscale[i]); | 
															
														
														
													
														
															
																 | 
																 | 
																            update_rc_buffer(s, bits); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            bits += 8*ff_vbv_update(s, bits); | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																            rce->expected_bits= expected_bits; | 
																 | 
																 | 
																            rce->expected_bits= expected_bits; | 
															
														
														
													
														
															
																 | 
																 | 
																            expected_bits += bits; | 
																 | 
																 | 
																            expected_bits += bits; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |