diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2002-10-09 17:18:24 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2002-10-09 17:18:24 +0000 |
commit | 4973397975851f0e811cb532f5914926eb74df88 (patch) | |
tree | d6614f1bbb2b5b26b0bf3d35bf7376cde72ab294 /libavcodec | |
parent | 9c89585ad4ad3917ff3abf196a84a687a34eca14 (diff) | |
download | ffmpeg-4973397975851f0e811cb532f5914926eb74df88.tar.gz |
mpeg1 2pass encoding
Originally committed as revision 1019 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/mpeg12.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index 6ae8d7ce08..cc81d898bf 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -69,6 +69,16 @@ static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred); static UINT16 mv_penalty[MAX_FCODE+1][MAX_MV*2+1]; static UINT8 fcode_tab[MAX_MV*2+1]; +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) { int i; @@ -299,6 +309,9 @@ void mpeg1_encode_mb(MpegEncContext *s, (mb_x == s->mb_width - 1 && mb_y == s->mb_height - 1)))) { s->mb_incr++; s->qscale -= s->dquant; + s->skip_count++; + s->misc_bits++; + s->last_bits++; } else { /* output mb incr */ mb_incr = s->mb_incr; @@ -318,6 +331,8 @@ void mpeg1_encode_mb(MpegEncContext *s, put_bits(&s->pb, 1, 1); /* macroblock_type : macroblock_quant = 0 */ s->qscale -= s->dquant; } + s->misc_bits+= get_bits_diff(s); + s->i_count++; } else { if (s->mb_intra) { if(s->dquant && cbp){ @@ -327,6 +342,8 @@ void mpeg1_encode_mb(MpegEncContext *s, put_bits(&s->pb, 5, 0x03); s->qscale -= s->dquant; } + s->misc_bits+= get_bits_diff(s); + s->i_count++; } else { if (cbp != 0) { if (motion_x == 0 && motion_y == 0) { @@ -336,6 +353,7 @@ void mpeg1_encode_mb(MpegEncContext *s, }else{ put_bits(&s->pb, 2, 1); /* macroblock_pattern only */ } + s->misc_bits+= get_bits_diff(s); put_bits(&s->pb, mbPatTable[cbp - 1][1], mbPatTable[cbp - 1][0]); } else { if(s->dquant){ @@ -344,8 +362,10 @@ void mpeg1_encode_mb(MpegEncContext *s, }else{ put_bits(&s->pb, 1, 1); /* motion + cbp */ } + s->misc_bits+= get_bits_diff(s); mpeg1_encode_motion(s, motion_x - s->last_mv[0][0][0]); mpeg1_encode_motion(s, motion_y - s->last_mv[0][0][1]); + s->mv_bits+= get_bits_diff(s); put_bits(&s->pb, mbPatTable[cbp - 1][1], mbPatTable[cbp - 1][0]); } } else { @@ -353,7 +373,9 @@ void mpeg1_encode_mb(MpegEncContext *s, mpeg1_encode_motion(s, motion_x - s->last_mv[0][0][0]); mpeg1_encode_motion(s, motion_y - s->last_mv[0][0][1]); s->qscale -= s->dquant; + s->mv_bits+= get_bits_diff(s); } + s->f_count++; } } for(i=0;i<6;i++) { @@ -362,6 +384,10 @@ void mpeg1_encode_mb(MpegEncContext *s, } } s->mb_incr = 1; + if(s->mb_intra) + s->i_tex_bits+= get_bits_diff(s); + else + s->p_tex_bits+= get_bits_diff(s); } s->last_mv[0][0][0] = motion_x; s->last_mv[0][0][1] = motion_y; |