comparison mpegvideo.c @ 1805:5dd5b2052f5b libavcodec

mpeg4 b frame + adaptive quantization assertion failure fix
author michael
date Sat, 14 Feb 2004 03:49:43 +0000
parents cc0a15943a87
children fc6b38b5dd40
comparison
equal deleted inserted replaced
1804:cc0a15943a87 1805:5dd5b2052f5b
3410 update_qscale(s); 3410 update_qscale(s);
3411 3411
3412 if(!(s->flags&CODEC_FLAG_QP_RD)){ 3412 if(!(s->flags&CODEC_FLAG_QP_RD)){
3413 s->dquant= s->qscale - last_qp; 3413 s->dquant= s->qscale - last_qp;
3414 3414
3415 if(s->out_format==FMT_H263) 3415 if(s->out_format==FMT_H263){
3416 s->dquant= clip(s->dquant, -2, 2); //FIXME RD 3416 s->dquant= clip(s->dquant, -2, 2); //FIXME RD
3417 3417
3418 if(s->codec_id==CODEC_ID_MPEG4){ 3418 if(s->codec_id==CODEC_ID_MPEG4){
3419 if(!s->mb_intra){ 3419 if(!s->mb_intra){
3420 if((s->mv_dir&MV_DIRECT) || s->mv_type==MV_TYPE_8X8) 3420 if(s->pict_type == B_TYPE){
3421 s->dquant=0; 3421 if(s->dquant&1)
3422 s->dquant= (s->dquant/2)*2;
3423 if(s->mv_dir&MV_DIRECT)
3424 s->dquant= 0;
3425 }
3426 if(s->mv_type==MV_TYPE_8X8)
3427 s->dquant=0;
3428 }
3422 } 3429 }
3423 } 3430 }
3424 } 3431 }
3425 ff_set_qscale(s, last_qp + s->dquant); 3432 ff_set_qscale(s, last_qp + s->dquant);
3426 } 3433 }
3967 s->current_picture.mb_var [s->mb_stride * mb_y + mb_x] = varc; 3974 s->current_picture.mb_var [s->mb_stride * mb_y + mb_x] = varc;
3968 s->current_picture.mb_mean[s->mb_stride * mb_y + mb_x] = (sum+128)>>8; 3975 s->current_picture.mb_mean[s->mb_stride * mb_y + mb_x] = (sum+128)>>8;
3969 s->mb_var_sum_temp += varc; 3976 s->mb_var_sum_temp += varc;
3970 } 3977 }
3971 } 3978 }
3979 return 0;
3972 } 3980 }
3973 3981
3974 static void write_slice_end(MpegEncContext *s){ 3982 static void write_slice_end(MpegEncContext *s){
3975 if(s->codec_id==CODEC_ID_MPEG4){ 3983 if(s->codec_id==CODEC_ID_MPEG4){
3976 if(s->partitioned_frame){ 3984 if(s->partitioned_frame){