Move dering strength mapping to od_dering()

This patch also makes it easier to tune the mapping later.

Change-Id: I69f49b9dd1fddb306931599a354526abe0232eb8
diff --git a/av1/common/cdef.c b/av1/common/cdef.c
index 6faccdc..ed847ce 100644
--- a/av1/common/cdef.c
+++ b/av1/common/cdef.c
@@ -20,10 +20,6 @@
 #include "av1/common/onyxc_int.h"
 #include "av1/common/reconinter.h"
 
-int dering_level_table[DERING_STRENGTHS] = {
-  0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 17, 20, 24, 28, 33, 39, 46, 54, 63
-};
-
 int sb_all_skip(const AV1_COMMON *const cm, int mi_row, int mi_col) {
   int r, c;
   int maxc, maxr;
@@ -171,12 +167,11 @@
       if (!dering_left) cstart = -OD_FILT_HBORDER;
       nhb = AOMMIN(MAX_MIB_SIZE, cm->mi_cols - MAX_MIB_SIZE * sbc);
       nvb = AOMMIN(MAX_MIB_SIZE, cm->mi_rows - MAX_MIB_SIZE * sbr);
-      level = dering_level_table
-          [cm->cdef_strengths[cm->mi_grid_visible[MAX_MIB_SIZE * sbr *
-                                                      cm->mi_stride +
-                                                  MAX_MIB_SIZE * sbc]
-                                  ->mbmi.cdef_strength] /
-           CLPF_STRENGTHS];
+      level = cm->cdef_strengths[cm->mi_grid_visible[MAX_MIB_SIZE * sbr *
+                                                         cm->mi_stride +
+                                                     MAX_MIB_SIZE * sbc]
+                                     ->mbmi.cdef_strength] /
+              CLPF_STRENGTHS;
       clpf_strength =
           cm->cdef_strengths[cm->mi_grid_visible[MAX_MIB_SIZE * sbr *
                                                      cm->mi_stride +
@@ -184,12 +179,11 @@
                                  ->mbmi.cdef_strength] %
           CLPF_STRENGTHS;
       clpf_strength += clpf_strength == 3;
-      uv_level = dering_level_table
-          [cm->cdef_uv_strengths[cm->mi_grid_visible[MAX_MIB_SIZE * sbr *
-                                                         cm->mi_stride +
-                                                     MAX_MIB_SIZE * sbc]
-                                     ->mbmi.cdef_strength] /
-           CLPF_STRENGTHS];
+      uv_level = cm->cdef_uv_strengths[cm->mi_grid_visible[MAX_MIB_SIZE * sbr *
+                                                               cm->mi_stride +
+                                                           MAX_MIB_SIZE * sbc]
+                                           ->mbmi.cdef_strength] /
+                 CLPF_STRENGTHS;
       uv_clpf_strength =
           cm->cdef_uv_strengths[cm->mi_grid_visible[MAX_MIB_SIZE * sbr *
                                                         cm->mi_stride +
@@ -209,7 +203,6 @@
       curr_row_dering[sbc] = 1;
       for (pli = 0; pli < nplanes; pli++) {
         uint16_t dst[OD_BSIZE_MAX * OD_BSIZE_MAX];
-        int threshold;
         int coffset;
         int rend, cend;
         int clpf_damping = 3 - (pli != AOM_PLANE_Y) + (cm->base_qindex >> 6);
@@ -344,8 +337,7 @@
                     coffset, xd->plane[pli].dst.stride, OD_FILT_VBORDER,
                     (nhb << bsize[pli]));
 
-        threshold = level << coeff_shift;
-        if (threshold == 0 && clpf_strength == 0) continue;
+        if (level == 0 && clpf_strength == 0) continue;
 #if CONFIG_AOM_HIGHBITDEPTH
         if (cm->use_highbitdepth) {
           od_dering((uint8_t *)&CONVERT_TO_SHORTPTR(
@@ -355,8 +347,8 @@
                                       (sbc * MAX_MIB_SIZE << bsize[pli])],
                     xd->plane[pli].dst.stride, dst,
                     &src[OD_FILT_VBORDER * OD_FILT_BSTRIDE + OD_FILT_HBORDER],
-                    dec[pli], dir, NULL, var, pli, dlist, dering_count,
-                    threshold, clpf_strength, clpf_damping, coeff_shift, 0, 1);
+                    dec[pli], dir, NULL, var, pli, dlist, dering_count, level,
+                    clpf_strength, clpf_damping, coeff_shift, 0, 1);
         } else {
 #endif
           od_dering(
@@ -365,7 +357,7 @@
                                       (sbc * MAX_MIB_SIZE << bsize[pli])],
               xd->plane[pli].dst.stride, dst,
               &src[OD_FILT_VBORDER * OD_FILT_BSTRIDE + OD_FILT_HBORDER],
-              dec[pli], dir, NULL, var, pli, dlist, dering_count, threshold,
+              dec[pli], dir, NULL, var, pli, dlist, dering_count, level,
               clpf_strength, clpf_damping, coeff_shift, 0, 0);
 
 #if CONFIG_AOM_HIGHBITDEPTH
diff --git a/av1/common/cdef.h b/av1/common/cdef.h
index 1131b27..5f48ca0 100644
--- a/av1/common/cdef.h
+++ b/av1/common/cdef.h
@@ -27,8 +27,6 @@
 extern "C" {
 #endif
 
-extern int dering_level_table[DERING_STRENGTHS];
-
 int sb_all_skip(const AV1_COMMON *const cm, int mi_row, int mi_col);
 int sb_compute_dering_list(const AV1_COMMON *const cm, int mi_row, int mi_col,
                            dering_list *dlist);
diff --git a/av1/common/od_dering.c b/av1/common/od_dering.c
index 6729676..72da301 100644
--- a/av1/common/od_dering.c
+++ b/av1/common/od_dering.c
@@ -280,13 +280,28 @@
 void od_dering(uint8_t *dst, int dstride, uint16_t *y, uint16_t *in, int xdec,
                int dir[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS], int *dirinit,
                int var[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS], int pli,
-               dering_list *dlist, int dering_count, int threshold,
+               dering_list *dlist, int dering_count, int level,
                int clpf_strength, int clpf_damping, int coeff_shift,
                int skip_dering, int hbd) {
   int bi;
   int bx;
   int by;
   int bsize;
+
+  // TODO(stemidts): We might be good with fewer strengths and different
+  // strengths for chroma.  Perhaps reduce CDEF_STRENGTH_BITS to 5 and
+  // DERING_STRENGTHS to 8 and use the following tables:
+  // static int level_table[DERING_STRENGTHS] = {0, 1, 3, 7, 14, 24, 39, 63};
+  // static int level_table_uv[DERING_STRENGTHS] = {0, 1, 2, 5, 8, 12, 18, 25};
+  // For now, use 21 strengths and the same for luma and chroma.
+  static int level_table[DERING_STRENGTHS] = {
+    0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 17, 20, 24, 28, 33, 39, 46, 54, 63
+  };
+  static int level_table_uv[DERING_STRENGTHS] = {
+    0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 17, 20, 24, 28, 33, 39, 46, 54, 63
+  };
+
+  int threshold = (pli ? level_table_uv : level_table)[level] << coeff_shift;
   od_filter_dering_direction_func filter_dering_direction[OD_DERINGSIZES] = {
     od_filter_dering_direction_4x4, od_filter_dering_direction_8x8
   };
diff --git a/av1/common/od_dering.h b/av1/common/od_dering.h
index 9247785..a8f8afb 100644
--- a/av1/common/od_dering.h
+++ b/av1/common/od_dering.h
@@ -49,7 +49,7 @@
 void od_dering(uint8_t *dst, int dstride, uint16_t *y, uint16_t *in, int xdec,
                int dir[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS], int *dirinit,
                int var[OD_DERING_NBLOCKS][OD_DERING_NBLOCKS], int pli,
-               dering_list *dlist, int dering_count, int threshold,
+               dering_list *dlist, int dering_count, int level,
                int clpf_strength, int clpf_damping, int coeff_shift,
                int skip_dering, int hbd);
 int od_filter_dering_direction_4x4_c(uint16_t *y, int ystride,
diff --git a/av1/encoder/pickcdef.c b/av1/encoder/pickcdef.c
index f2099fd..48d064f 100644
--- a/av1/encoder/pickcdef.c
+++ b/av1/encoder/pickcdef.c
@@ -153,7 +153,6 @@
   int bsize[3];
   int dec[3];
   int pli;
-  int level;
   int dering_count;
   int coeff_shift = AOMMAX(cm->bit_depth - 8, 0);
   uint64_t best_tot_mse = (uint64_t)1 << 63;
@@ -244,8 +243,7 @@
         for (gi = 0; gi < TOTAL_STRENGTHS; gi++) {
           int threshold;
           int clpf_strength;
-          level = dering_level_table[gi / CLPF_STRENGTHS];
-          threshold = level << coeff_shift;
+          threshold = gi / CLPF_STRENGTHS;
           if (pli > 0 && !chroma_dering) threshold = 0;
           /* We avoid filtering the pixels for which some of the pixels to
              average