diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c index e960696e1a..efdb438c9b 100644 --- a/libavcodec/dsputil.c +++ b/libavcodec/dsputil.c @@ -1894,10 +1894,11 @@ static int rd8x8_c(/*MpegEncContext*/ void *c, uint8_t *src1, uint8_t *src2, int run++; } i= scantable[last]; - - assert(level); - + level= temp[i] + 64; + + assert(level - 64); + if((level&(~127)) == 0){ bits+= last_length[UNI_AC_ENC_INDEX(run, level)]; }else diff --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c index 4dcc08d596..630d4fe239 100644 --- a/libavcodec/motion_est.c +++ b/libavcodec/motion_est.c @@ -1,7 +1,7 @@ /* * Motion estimation * Copyright (c) 2000,2001 Fabrice Bellard. - * Copyright (c) 2002 Michael Niedermayer + * Copyright (c) 2002-2003 Michael Niedermayer * * * This library is free software; you can redistribute it and/or @@ -313,6 +313,7 @@ static inline int get_penalty_factor(MpegEncContext *s, int type){ case FF_CMP_DCT: case FF_CMP_SATD: case FF_CMP_SSE: + case FF_CMP_PSNR: return s->qscale*8; case FF_CMP_BIT: return 1; @@ -1030,7 +1031,7 @@ void ff_estimate_p_frame_motion(MpegEncContext * s, } #endif }else{ - s->scene_change_score+= 20; + s->scene_change_score+= s->qscale; mb_type|= MB_TYPE_INTRA; mx = 0; my = 0; diff --git a/libavcodec/motion_est_template.c b/libavcodec/motion_est_template.c index d1ca6e7fbd..6711785f61 100644 --- a/libavcodec/motion_est_template.c +++ b/libavcodec/motion_est_template.c @@ -160,7 +160,7 @@ static int RENAME(hpel_motion_search)(MpegEncContext * s, if(s->avctx->me_cmp != s->avctx->me_sub_cmp){ CMP_HPEL(dmin, 0, 0, mx, my, size); - if(mx || my) + if(mx || my || size>0) dmin += (mv_penalty[2*mx - pred_x] + mv_penalty[2*my - pred_y])*penalty_factor; } @@ -290,7 +290,7 @@ static int RENAME(qpel_motion_search)(MpegEncContext * s, if(s->avctx->me_cmp != s->avctx->me_sub_cmp){ CMP_QPEL(dmin, 0, 0, mx, my, size); - if(mx || my) + if(mx || my || size>0) dmin += (mv_penalty[4*mx - pred_x] + mv_penalty[4*my - pred_y])*penalty_factor; } diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 44d88f2f0e..48efd28648 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -2592,7 +2592,7 @@ static void encode_mb(MpegEncContext *s, int motion_x, int motion_y) s->block_last_index[4]= s->block_last_index[5]= 0; s->block[4][0]= - s->block[5][0]= 128; + s->block[5][0]= (1024 + s->c_dc_scale/2)/ s->c_dc_scale; } #ifdef CONFIG_ENCODERS