diff motion_est.c @ 1494:3ee63c12ea30 libavcodec

optionally try to encode each MB with MV=<0,0> and choose the one with better RD
author michaelni
date Thu, 02 Oct 2003 00:24:34 +0000
parents b0f89a7855aa
children 932d306bf1dc
line wrap: on
line diff
--- a/motion_est.c	Wed Oct 01 23:34:46 2003 +0000
+++ b/motion_est.c	Thu Oct 02 00:24:34 2003 +0000
@@ -830,6 +830,7 @@
     int P[10][2];
     int dmin_sum=0, mx4_sum=0, my4_sum=0;
     uint8_t * const mv_penalty= s->me.mv_penalty[s->f_code] + MAX_MV;
+    int same=1;
 
     for(block=0; block<4; block++){
         int mx4, my4;
@@ -928,8 +929,13 @@
             
         s->motion_val[ s->block_index[block] ][0]= mx4;
         s->motion_val[ s->block_index[block] ][1]= my4;
+
+        if(mx4 != mx || my4 != my) same=0;
     }
     
+    if(same)
+        return INT_MAX;
+    
     if(s->dsp.me_sub_cmp[0] != s->dsp.mb_cmp[0]){
         dmin_sum += s->dsp.mb_cmp[0](s, s->new_picture.data[0] + s->mb_x*16 + s->mb_y*16*s->linesize, s->me.scratchpad, s->linesize);
     }
@@ -1098,14 +1104,17 @@
             mb_type|= MB_TYPE_INTER;
             s->me.sub_motion_search(s, &mx, &my, dmin, rel_xmin, rel_ymin, rel_xmax, rel_ymax,
 				   pred_x, pred_y, &s->last_picture, 0, 0, mv_penalty);
+            if(s->flags&CODEC_FLAG_MV0)
+                if(mx || my)
+                    mb_type |= MB_TYPE_SKIPED; //FIXME check difference
         }else{
             mx <<=shift;
             my <<=shift;
         }
         if((s->flags&CODEC_FLAG_4MV)
            && !s->me.skip && varc>50 && vard>10){
-            h263_mv4_search(s, rel_xmin, rel_ymin, rel_xmax, rel_ymax, mx, my, shift);
-            mb_type|=MB_TYPE_INTER4V;
+            if(h263_mv4_search(s, rel_xmin, rel_ymin, rel_xmax, rel_ymax, mx, my, shift) < INT_MAX)
+                mb_type|=MB_TYPE_INTER4V;
 
             set_p_mv_tables(s, mx, my, 0);
         }else