changeset 11094:323491bb995c libavcodec

Merge mv&ref related code for spatial direct MV code. a bit more than 10 cpu cycles faster.
author michael
date Sun, 07 Feb 2010 21:53:55 +0000
parents 788db3371366
children 2aeb7a1d1c7f
files h264_direct.c
diffstat 1 files changed, 11 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/h264_direct.c	Sun Feb 07 21:09:09 2010 +0000
+++ b/h264_direct.c	Sun Feb 07 21:53:55 2010 +0000
@@ -231,31 +231,22 @@
             if(refc == PART_NOT_AVAILABLE)
                 refc = h->ref_cache[list][scan8[0] - 8 - 1];
             ref[list] = FFMIN3((unsigned)refa, (unsigned)refb, (unsigned)refc);
-            if(ref[list] < 0)
+            if(ref[list] >= 0){
+                pred_motion(h, 0, 4, list, ref[list], &mv[list][0], &mv[list][1]);
+            }else{
+                int mask= ~(MB_TYPE_L0 << (2*list));
+                mv[list][0] = mv[list][1] = 0;
                 ref[list] = -1;
+                if(!is_b8x8)
+                    *mb_type &= mask;
+                sub_mb_type &= mask;
+            }
         }
-
         if(ref[0] < 0 && ref[1] < 0){
             ref[0] = ref[1] = 0;
-            mv[0][0] = mv[0][1] =
-            mv[1][0] = mv[1][1] = 0;
-        }else{
-            for(list=0; list<2; list++){
-                if(ref[list] >= 0)
-                    pred_motion(h, 0, 4, list, ref[list], &mv[list][0], &mv[list][1]);
-                else
-                    mv[list][0] = mv[list][1] = 0;
-            }
-        }
-
-        if(ref[1] < 0){
             if(!is_b8x8)
-                *mb_type &= ~MB_TYPE_L1;
-            sub_mb_type &= ~MB_TYPE_L1;
-        }else if(ref[0] < 0){
-            if(!is_b8x8)
-                *mb_type &= ~MB_TYPE_L0;
-            sub_mb_type &= ~MB_TYPE_L0;
+                *mb_type |= MB_TYPE_L0L1;
+            sub_mb_type |= MB_TYPE_L0L1;
         }
 
         if(IS_INTERLACED(*mb_type) != IS_INTERLACED(mb_type_col[0])){