]> granicus.if.org Git - libvpx/commitdiff
Refactor vp10_drl_idx concept
authorJingning Han <jingning@google.com>
Fri, 12 Feb 2016 00:38:13 +0000 (16:38 -0800)
committerJingning Han <jingning@google.com>
Fri, 12 Feb 2016 00:38:13 +0000 (16:38 -0800)
Remove the implicit assumption on offsetting the index by 1.

Change-Id: I6f1d391e067d57b7e45b9287e866014dbc16da71

vp10/common/mvref_common.h
vp10/decoder/decodemv.c
vp10/encoder/bitstream.c
vp10/encoder/encodeframe.c
vp10/encoder/rdopt.c

index 224c5edfae870a8f84d4035fcc220d4992e7d5f5..b02c0dd8879975747cd8dd47cbbc54b8757950bf 100644 (file)
@@ -260,16 +260,16 @@ static INLINE int16_t vp10_mode_context_analyzer(
 
 static INLINE uint8_t vp10_drl_ctx(const CANDIDATE_MV *ref_mv_stack,
                                    int ref_idx) {
-  if (ref_mv_stack[ref_idx + 1].weight > REF_CAT_LEVEL &&
-      ref_mv_stack[ref_idx + 2].weight > REF_CAT_LEVEL)
+  if (ref_mv_stack[ref_idx].weight > REF_CAT_LEVEL &&
+      ref_mv_stack[ref_idx + 1].weight > REF_CAT_LEVEL)
     return 0;
 
-  if (ref_mv_stack[ref_idx + 1].weight > REF_CAT_LEVEL &&
-      ref_mv_stack[ref_idx + 2].weight < REF_CAT_LEVEL)
+  if (ref_mv_stack[ref_idx].weight > REF_CAT_LEVEL &&
+      ref_mv_stack[ref_idx + 1].weight < REF_CAT_LEVEL)
     return 1;
 
-  if (ref_mv_stack[ref_idx + 1].weight < REF_CAT_LEVEL &&
-      ref_mv_stack[ref_idx + 2].weight < REF_CAT_LEVEL)
+  if (ref_mv_stack[ref_idx].weight < REF_CAT_LEVEL &&
+      ref_mv_stack[ref_idx + 1].weight < REF_CAT_LEVEL)
     return 2;
 
   assert(0);
index 78ddf1ae40e27b83ce2f9daf6d78814ac879b7e1..156a269873c887107ff353745eed8142e750592d 100644 (file)
@@ -156,7 +156,7 @@ static void read_drl_idx(const VP10_COMMON *cm,
   mbmi->ref_mv_idx = 0;
 
   if (xd->ref_mv_count[ref_frame_type] > 2) {
-    uint8_t drl0_ctx = vp10_drl_ctx(xd->ref_mv_stack[ref_frame_type], 0);
+    uint8_t drl0_ctx = vp10_drl_ctx(xd->ref_mv_stack[ref_frame_type], 1);
     vpx_prob drl0_prob = cm->fc->drl_prob0[drl0_ctx];
     if (vpx_read(r, drl0_prob)) {
       mbmi->ref_mv_idx = 1;
@@ -164,7 +164,7 @@ static void read_drl_idx(const VP10_COMMON *cm,
         ++xd->counts->drl_mode0[drl0_ctx][1];
       if (xd->ref_mv_count[ref_frame_type] > 3) {
         uint8_t drl1_ctx =
-            vp10_drl_ctx(xd->ref_mv_stack[ref_frame_type], 1);
+            vp10_drl_ctx(xd->ref_mv_stack[ref_frame_type], 2);
         vpx_prob drl1_prob = cm->fc->drl_prob1[drl1_ctx];
         if (vpx_read(r, drl1_prob)) {
           mbmi->ref_mv_idx = 2;
index 73111c849776208cbdceff5af849fbf645ab63f7..1e7d6b4783c1d13e03186fc1d003cbab6c969ebb 100644 (file)
@@ -185,13 +185,13 @@ static void write_drl_idx(const VP10_COMMON *cm,
   uint8_t ref_frame_type = vp10_ref_frame_type(mbmi->ref_frame);
   if (mbmi_ext->ref_mv_count[ref_frame_type] > 2) {
     uint8_t drl0_ctx =
-        vp10_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], 0);
+        vp10_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], 1);
     vpx_prob drl0_prob = cm->fc->drl_prob0[drl0_ctx];
     vpx_write(w, mbmi->ref_mv_idx != 0, drl0_prob);
     if (mbmi_ext->ref_mv_count[ref_frame_type] > 3 &&
         mbmi->ref_mv_idx > 0) {
       uint8_t drl1_ctx =
-          vp10_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], 1);
+          vp10_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], 2);
       vpx_prob drl1_prob = cm->fc->drl_prob1[drl1_ctx];
       vpx_write(w, mbmi->ref_mv_idx != 1, drl1_prob);
     }
index 898b18f5b3d8be8b3dca5374141dfeeda2d0c6f2..c3ef67453c4598fa900f043c33e68199afb1f5b6 100644 (file)
@@ -1827,7 +1827,7 @@ static void update_stats(VP10_COMMON *cm, ThreadData *td
           uint8_t ref_frame_type = vp10_ref_frame_type(mbmi->ref_frame);
           if (mbmi_ext->ref_mv_count[ref_frame_type] > 2) {
             uint8_t drl0_ctx =
-                vp10_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], 0);
+                vp10_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], 1);
             if (mbmi->ref_mv_idx == 0)
               ++counts->drl_mode0[drl0_ctx][0];
             else
@@ -1836,7 +1836,7 @@ static void update_stats(VP10_COMMON *cm, ThreadData *td
             if (mbmi_ext->ref_mv_count[ref_frame_type] > 3 &&
                 mbmi->ref_mv_idx > 0) {
               uint8_t drl1_ctx =
-                  vp10_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], 1);
+                  vp10_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], 2);
               if (mbmi->ref_mv_idx == 1)
                 ++counts->drl_mode1[drl1_ctx][0];
               else
index 9287bdb6c819b669bb7c8e852b4ea8fb7252286e..5a59e2dcf258615932053680ba52bb8945b3db6f 100644 (file)
@@ -6435,7 +6435,7 @@ void vp10_rd_pick_inter_mode_sb(VP10_COMP *cpi,
         int ref_set = VPXMIN(2, mbmi_ext->ref_mv_count[ref_frame_type] - 2);
 
         uint8_t drl0_ctx =
-            vp10_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], 0);
+            vp10_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], 1);
         rate2 += cpi->drl_mode_cost0[drl0_ctx][0];
 
         if (this_rd < INT64_MAX) {
@@ -6500,7 +6500,7 @@ void vp10_rd_pick_inter_mode_sb(VP10_COMP *cpi,
 
           if (mbmi_ext->ref_mv_count[ref_frame_type] > 3) {
             uint8_t drl1_ctx =
-                vp10_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], 1);
+                vp10_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], 2);
             tmp_rate += cpi->drl_mode_cost1[drl1_ctx][ref_idx];
           }