# HG changeset patch # User michael # Date 1166830257 0 # Node ID 9af83350d4fd7bd542dbb4fb5b7a86954142d32b # Parent e2621acf32f1354d01b58d31f06ecd548a7ddf55 test DIRECT{0,0} too if flag mv0 is used slight PSNR/bitrate increase diff -r e2621acf32f1 -r 9af83350d4fd motion_est.c --- a/motion_est.c Fri Dec 22 10:10:13 2006 +0000 +++ b/motion_est.c Fri Dec 22 23:30:57 2006 +0000 @@ -1978,6 +1978,8 @@ } //FIXME something smarter if(dmin>256*256*16) type&= ~CANDIDATE_MB_TYPE_DIRECT; //dont try direct mode if its invalid for this MB + if(s->codec_id == CODEC_ID_MPEG4 && type&CANDIDATE_MB_TYPE_DIRECT && s->flags&CODEC_FLAG_MV0 && *(uint32_t*)s->b_direct_mv_table[xy]) + type |= CANDIDATE_MB_TYPE_DIRECT0; #if 0 if(s->out_format == FMT_MPEG1) type |= CANDIDATE_MB_TYPE_INTRA; diff -r e2621acf32f1 -r 9af83350d4fd motion_est_template.c --- a/motion_est_template.c Fri Dec 22 10:10:13 2006 +0000 +++ b/motion_est_template.c Fri Dec 22 23:30:57 2006 +0000 @@ -1025,7 +1025,7 @@ score_map[0]= dmin; //FIXME precalc first term below? - if((s->pict_type == B_TYPE || s->flags&CODEC_FLAG_MV0) && !(c->flags & FLAG_DIRECT)) + if((s->pict_type == B_TYPE && !(c->flags & FLAG_DIRECT)) || s->flags&CODEC_FLAG_MV0) dmin += (mv_penalty[pred_x] + mv_penalty[pred_y])*penalty_factor; /* first line */