]> granicus.if.org Git - libvpx/commitdiff
make lf_deltas dependent on filter_lvl
authorYaowu Xu <yaowu@google.com>
Thu, 4 Apr 2013 16:00:53 +0000 (09:00 -0700)
committerYaowu Xu <yaowu@google.com>
Wed, 17 Apr 2013 17:59:48 +0000 (10:59 -0700)
Change-Id: Idb0d11e3ae9afabe667a9f327bf4d3aa84f63649

vp9/common/vp9_entropymode.c
vp9/common/vp9_loopfilter.c

index f4182443a67f83665cb3eec15d288200f8823561..865034913fd0f9f7009fa15fb0d5686d92d62e01 100644 (file)
@@ -671,15 +671,15 @@ static void set_default_lf_deltas(MACROBLOCKD *xd) {
   xd->mode_ref_lf_delta_enabled = 1;
   xd->mode_ref_lf_delta_update = 1;
 
-  xd->ref_lf_deltas[INTRA_FRAME] = 2;
+  xd->ref_lf_deltas[INTRA_FRAME] = 1;
   xd->ref_lf_deltas[LAST_FRAME] = 0;
-  xd->ref_lf_deltas[GOLDEN_FRAME] = -2;
-  xd->ref_lf_deltas[ALTREF_FRAME] = -2;
+  xd->ref_lf_deltas[GOLDEN_FRAME] = -1;
+  xd->ref_lf_deltas[ALTREF_FRAME] = -1;
 
-  xd->mode_lf_deltas[0] = 4;               // I4X4_PRED
-  xd->mode_lf_deltas[1] = -2;              // Zero
-  xd->mode_lf_deltas[2] = 2;               // New mv
-  xd->mode_lf_deltas[3] = 4;               // Split mv
+  xd->mode_lf_deltas[0] = 2;               // I4X4_PRED
+  xd->mode_lf_deltas[1] = -1;              // Zero
+  xd->mode_lf_deltas[2] = 1;               // New mv
+  xd->mode_lf_deltas[3] = 2;               // Split mv
 }
 
 void vp9_setup_past_independence(VP9_COMMON *cm, MACROBLOCKD *xd) {
index a57f766db5c97cd41eca41cd1a9b399a7f1ae0c1..4943e42afd647d543f2050536d931cb22b89ec2b 100644 (file)
@@ -83,9 +83,13 @@ void vp9_loop_filter_init(VP9_COMMON *cm) {
 void vp9_loop_filter_frame_init(VP9_COMMON *cm,
                                 MACROBLOCKD *xd,
                                 int default_filt_lvl) {
-  int seg,  /* segment number */
-      ref,  /* index in ref_lf_deltas */
-      mode; /* index in mode_lf_deltas */
+  int seg,    // segment number
+      ref,    // index in ref_lf_deltas
+      mode;   // index in mode_lf_deltas
+  // n_shift is the a multiplier for lf_deltas
+  // the multiplier is 1 for when filter_lvl is between 0 and 31;
+  // 2 when filter_lvl is between 32 and 63
+  int n_shift = default_filt_lvl >> 5;
 
   loop_filter_info_n *lfi = &cm->lf_info;
 
@@ -128,30 +132,29 @@ void vp9_loop_filter_frame_init(VP9_COMMON *cm,
     ref = INTRA_FRAME;
 
     /* Apply delta for reference frame */
-    lvl_ref += xd->ref_lf_deltas[ref];
+    lvl_ref += xd->ref_lf_deltas[ref] << n_shift;
 
     /* Apply delta for Intra modes */
     mode = 0; /* I4X4_PRED */
     /* Only the split mode I4X4_PRED has a further special case */
-    lvl_mode = clamp(lvl_ref +  xd->mode_lf_deltas[mode], 0, 63);
-
-    lfi->lvl[seg][ref][mode] = lvl_mode;
+    lvl_mode = lvl_ref + (xd->mode_lf_deltas[mode] << n_shift);
+    lfi->lvl[seg][ref][mode] = clamp(lvl_mode, 0, 63);
 
     mode = 1; /* all the rest of Intra modes */
-    lvl_mode = clamp(lvl_ref, 0, 63);
-    lfi->lvl[seg][ref][mode] = lvl_mode;
+    lvl_mode = lvl_ref;
+    lfi->lvl[seg][ref][mode] = clamp(lvl_mode, 0, 63);
 
     /* LAST, GOLDEN, ALT */
     for (ref = 1; ref < MAX_REF_FRAMES; ref++) {
       int lvl_ref = lvl_seg;
 
       /* Apply delta for reference frame */
-      lvl_ref += xd->ref_lf_deltas[ref];
+      lvl_ref += xd->ref_lf_deltas[ref] << n_shift;
 
       /* Apply delta for Inter modes */
       for (mode = 1; mode < 4; mode++) {
-        lvl_mode = clamp(lvl_ref + xd->mode_lf_deltas[mode], 0, 63);
-        lfi->lvl[seg][ref][mode] = lvl_mode;
+        lvl_mode = lvl_ref + (xd->mode_lf_deltas[mode] << n_shift);
+        lfi->lvl[seg][ref][mode] = clamp(lvl_mode, 0, 63);
       }
     }
   }