]> granicus.if.org Git - libvpx/commitdiff
Enable context based motion vector entropy coding
authorJingning Han <jingning@google.com>
Tue, 23 Feb 2016 17:25:24 +0000 (09:25 -0800)
committerJingning Han <jingning@google.com>
Wed, 24 Feb 2016 17:02:32 +0000 (09:02 -0800)
This commit enables a context based motion vector entropy coding
conditioned on dynamic reference motion vector list. This (along with
the previous CL) imporves the coding gains due to dynamic motion
vector referencing based entropy coding:
derf   0.1%
hevcmr 0.2%
stdhd  0.7%
hevchr 0.4%

No encoding time change was observed.

Change-Id: I179c723844079195f6952a12582996a3ca9e9914

vp10/common/enums.h
vp10/common/mvref_common.h

index e1f316855094bdf0a6105789b27fff0dc0bcb570..6d7d08c7fb151fc2c084ec429e3eef14bc3388c1 100644 (file)
@@ -227,7 +227,7 @@ typedef enum {
 #define SKIP_CONTEXTS 3
 
 #if CONFIG_REF_MV
-#define NMV_CONTEXTS 2
+#define NMV_CONTEXTS 3
 
 #define NEWMV_MODE_CONTEXTS  7
 #define ZEROMV_MODE_CONTEXTS 2
index b3a8bebe3119775768d8e95eec5dd14f40c1dbe9..bc6d824326cc966e2c3b41c1b3b719a03d8a2f9b 100644 (file)
@@ -236,9 +236,11 @@ static INLINE int vp10_nmv_ctx(const uint8_t ref_mv_count,
   if (ref_mv_stack[0].weight > REF_CAT_LEVEL &&
       ref_mv_count > 0) {
     if (abs(ref_mv_stack[0].this_mv.as_mv.row -
-            ref_mv_stack[0].pred_mv.as_mv.row) < 8 &&
-        abs(ref_mv_stack[0].this_mv.as_mv.col -
-            ref_mv_stack[0].pred_mv.as_mv.col) < 8)
+             ref_mv_stack[0].pred_mv.as_mv.row) <= 4 &&
+         abs(ref_mv_stack[0].this_mv.as_mv.col -
+             ref_mv_stack[0].pred_mv.as_mv.col) <= 4)
+      return 2;
+    else
       return 1;
   }
   return 0;