msmpeg4 2pass support & some related cleanup
Originally committed as revision 1724 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
1f9aea9b91
commit
4d2a48349d
@ -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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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];
|
|||||||
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){
|
|||||||
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,
|
|||||||
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)
|
||||||
@ -564,7 +567,9 @@ void msmpeg4_encode_mb(MpegEncContext * s,
|
|||||||
put_bits(&s->pb,
|
put_bits(&s->pb,
|
||||||
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,
|
|||||||
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,10 +647,12 @@ 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user