Commit 4d2a4834 authored by Michael Niedermayer's avatar Michael Niedermayer

msmpeg4 2pass support & some related cleanup

Originally committed as revision 1724 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 1f9aea9b
...@@ -544,9 +544,7 @@ void mpeg4_encode_mb(MpegEncContext * s, ...@@ -544,9 +544,7 @@ void mpeg4_encode_mb(MpegEncContext * s,
} }
if(interleaved_stats){ if(interleaved_stats){
bits= get_bit_count(&s->pb); s->misc_bits+= get_bits_diff(s);
s->misc_bits+= bits - s->last_bits;
s->last_bits=bits;
} }
switch(mb_type) switch(mb_type)
...@@ -589,9 +587,7 @@ void mpeg4_encode_mb(MpegEncContext * s, ...@@ -589,9 +587,7 @@ void mpeg4_encode_mb(MpegEncContext * s,
} }
if(interleaved_stats){ if(interleaved_stats){
bits= get_bit_count(&s->pb); s->mv_bits+= get_bits_diff(s);
s->mv_bits+= bits - s->last_bits;
s->last_bits=bits;
} }
/* encode each block */ /* encode each block */
...@@ -600,9 +596,7 @@ void mpeg4_encode_mb(MpegEncContext * s, ...@@ -600,9 +596,7 @@ void mpeg4_encode_mb(MpegEncContext * s,
} }
if(interleaved_stats){ if(interleaved_stats){
bits= get_bit_count(&s->pb); s->p_tex_bits+= get_bits_diff(s);
s->p_tex_bits+= bits - s->last_bits;
s->last_bits=bits;
} }
}else{ /* s->pict_type==B_TYPE */ }else{ /* s->pict_type==B_TYPE */
if ((cbp | motion_x | motion_y | s->dquant) == 0 && s->mv_type==MV_TYPE_16X16) { if ((cbp | motion_x | motion_y | s->dquant) == 0 && s->mv_type==MV_TYPE_16X16) {
...@@ -673,9 +667,7 @@ void mpeg4_encode_mb(MpegEncContext * s, ...@@ -673,9 +667,7 @@ void mpeg4_encode_mb(MpegEncContext * s,
} }
if(interleaved_stats){ if(interleaved_stats){
bits= get_bit_count(&s->pb); s->misc_bits+= get_bits_diff(s);
s->misc_bits+= bits - s->last_bits;
s->last_bits=bits;
} }
/* motion vectors: 16x16 mode */ /* motion vectors: 16x16 mode */
...@@ -698,9 +690,7 @@ void mpeg4_encode_mb(MpegEncContext * s, ...@@ -698,9 +690,7 @@ void mpeg4_encode_mb(MpegEncContext * s,
} }
if(interleaved_stats){ if(interleaved_stats){
bits= get_bit_count(&s->pb); s->misc_bits+= get_bits_diff(s);
s->misc_bits+= bits - s->last_bits;
s->last_bits=bits;
} }
for(i=0; i<4; i++){ for(i=0; i<4; i++){
...@@ -713,9 +703,7 @@ void mpeg4_encode_mb(MpegEncContext * s, ...@@ -713,9 +703,7 @@ void mpeg4_encode_mb(MpegEncContext * s,
} }
if(interleaved_stats){ if(interleaved_stats){
bits= get_bit_count(&s->pb); s->mv_bits+= get_bits_diff(s);
s->mv_bits+= bits - s->last_bits;
s->last_bits=bits;
} }
/* encode each block */ /* encode each block */
...@@ -724,9 +712,7 @@ void mpeg4_encode_mb(MpegEncContext * s, ...@@ -724,9 +712,7 @@ void mpeg4_encode_mb(MpegEncContext * s,
} }
if(interleaved_stats){ if(interleaved_stats){
bits= get_bit_count(&s->pb); s->p_tex_bits+= get_bits_diff(s);
s->p_tex_bits+= bits - s->last_bits;
s->last_bits=bits;
} }
s->f_count++; s->f_count++;
} }
...@@ -803,9 +789,7 @@ void mpeg4_encode_mb(MpegEncContext * s, ...@@ -803,9 +789,7 @@ void mpeg4_encode_mb(MpegEncContext * s,
} }
if(interleaved_stats){ if(interleaved_stats){
bits= get_bit_count(&s->pb); s->misc_bits+= get_bits_diff(s);
s->misc_bits+= bits - s->last_bits;
s->last_bits=bits;
} }
/* encode each block */ /* encode each block */
...@@ -814,9 +798,7 @@ void mpeg4_encode_mb(MpegEncContext * s, ...@@ -814,9 +798,7 @@ void mpeg4_encode_mb(MpegEncContext * s,
} }
if(interleaved_stats){ if(interleaved_stats){
bits= get_bit_count(&s->pb); s->i_tex_bits+= get_bits_diff(s);
s->i_tex_bits+= bits - s->last_bits;
s->last_bits=bits;
} }
s->i_count++; s->i_count++;
......
...@@ -80,16 +80,6 @@ static uint32_t uni_mpeg1_ac_vlc_bits[64*64*2]; ...@@ -80,16 +80,6 @@ static uint32_t uni_mpeg1_ac_vlc_bits[64*64*2];
static uint8_t uni_mpeg1_ac_vlc_len [64*64*2]; static uint8_t uni_mpeg1_ac_vlc_len [64*64*2];
#endif #endif
static inline int get_bits_diff(MpegEncContext *s){
int bits,ret;
bits= get_bit_count(&s->pb);
ret= bits - s->last_bits;
s->last_bits=bits;
return ret;
}
static void init_2d_vlc_rl(RLTable *rl) static void init_2d_vlc_rl(RLTable *rl)
{ {
int i; int i;
......
...@@ -662,6 +662,14 @@ static inline void ff_update_block_index(MpegEncContext *s){ ...@@ -662,6 +662,14 @@ static inline void ff_update_block_index(MpegEncContext *s){
s->block_index[5]++; s->block_index[5]++;
} }
static inline int get_bits_diff(MpegEncContext *s){
const int bits= get_bit_count(&s->pb);
const int last= s->last_bits;
s->last_bits = bits;
return bits - last;
}
/* motion_est.c */ /* motion_est.c */
void ff_estimate_p_frame_motion(MpegEncContext * s, void ff_estimate_p_frame_motion(MpegEncContext * s,
......
...@@ -549,6 +549,9 @@ void msmpeg4_encode_mb(MpegEncContext * s, ...@@ -549,6 +549,9 @@ void msmpeg4_encode_mb(MpegEncContext * s,
if (s->use_skip_mb_code && (cbp | motion_x | motion_y) == 0) { if (s->use_skip_mb_code && (cbp | motion_x | motion_y) == 0) {
/* skip macroblock */ /* skip macroblock */
put_bits(&s->pb, 1, 1); put_bits(&s->pb, 1, 1);
s->last_bits++;
s->misc_bits++;
return; return;
} }
if (s->use_skip_mb_code) if (s->use_skip_mb_code)
...@@ -565,6 +568,8 @@ void msmpeg4_encode_mb(MpegEncContext * s, ...@@ -565,6 +568,8 @@ void msmpeg4_encode_mb(MpegEncContext * s,
cbpy_tab[coded_cbp>>2][1], cbpy_tab[coded_cbp>>2][1],
cbpy_tab[coded_cbp>>2][0]); cbpy_tab[coded_cbp>>2][0]);
s->misc_bits += get_bits_diff(s);
h263_pred_motion(s, 0, &pred_x, &pred_y); h263_pred_motion(s, 0, &pred_x, &pred_y);
msmpeg4v2_encode_motion(s, motion_x - pred_x); msmpeg4v2_encode_motion(s, motion_x - pred_x);
msmpeg4v2_encode_motion(s, motion_y - pred_y); msmpeg4v2_encode_motion(s, motion_y - pred_y);
...@@ -573,11 +578,20 @@ void msmpeg4_encode_mb(MpegEncContext * s, ...@@ -573,11 +578,20 @@ void msmpeg4_encode_mb(MpegEncContext * s,
table_mb_non_intra[cbp + 64][1], table_mb_non_intra[cbp + 64][1],
table_mb_non_intra[cbp + 64][0]); table_mb_non_intra[cbp + 64][0]);
s->misc_bits += get_bits_diff(s);
/* motion vector */ /* motion vector */
h263_pred_motion(s, 0, &pred_x, &pred_y); h263_pred_motion(s, 0, &pred_x, &pred_y);
msmpeg4_encode_motion(s, motion_x - pred_x, msmpeg4_encode_motion(s, motion_x - pred_x,
motion_y - pred_y); motion_y - pred_y);
} }
s->mv_bits += get_bits_diff(s);
for (i = 0; i < 6; i++) {
msmpeg4_encode_block(s, block[i], i);
}
s->p_tex_bits += get_bits_diff(s);
} else { } else {
/* compute cbp */ /* compute cbp */
cbp = 0; cbp = 0;
...@@ -633,11 +647,13 @@ void msmpeg4_encode_mb(MpegEncContext * s, ...@@ -633,11 +647,13 @@ void msmpeg4_encode_mb(MpegEncContext * s,
put_bits(&s->pb, table_inter_intra[s->h263_aic_dir][1], table_inter_intra[s->h263_aic_dir][0]); put_bits(&s->pb, table_inter_intra[s->h263_aic_dir][1], table_inter_intra[s->h263_aic_dir][0]);
} }
} }
} s->misc_bits += get_bits_diff(s);
for (i = 0; i < 6; i++) { for (i = 0; i < 6; i++) {
msmpeg4_encode_block(s, block[i], i); msmpeg4_encode_block(s, block[i], i);
} }
s->i_tex_bits += get_bits_diff(s);
}
} }
#endif //CONFIG_ENCODERS #endif //CONFIG_ENCODERS
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment