Clamp loop filter levels

Clamp in range [-MAX_LOOP_FILTER, MAX_LOOP_FILTER], for experiment LOOPFILTER_LEVELS.

BUG=aomedia:970

Change-Id: Ica52242e969dcea49565f118155de5eef32a4cc4
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index f9ca985..6f127e6 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -1184,17 +1184,21 @@
 #if CONFIG_LOOPFILTER_LEVEL
       if (cm->delta_lf_multi) {
         for (int lf_id = 0; lf_id < FRAME_LF_COUNT; ++lf_id) {
-          mbmi->curr_delta_lf[lf_id] = xd->curr_delta_lf[lf_id] =
+          const int tmp_lvl =
               xd->prev_delta_lf[lf_id] +
               read_delta_lflevel(cm, xd, r, lf_id, mbmi, mi_col, mi_row) *
                   cm->delta_lf_res;
+          mbmi->curr_delta_lf[lf_id] = xd->curr_delta_lf[lf_id] =
+              clamp(tmp_lvl, -MAX_LOOP_FILTER, MAX_LOOP_FILTER);
           xd->prev_delta_lf[lf_id] = xd->curr_delta_lf[lf_id];
         }
       } else {
-        mbmi->current_delta_lf_from_base = xd->current_delta_lf_from_base =
+        const int tmp_lvl =
             xd->prev_delta_lf_from_base +
             read_delta_lflevel(cm, xd, r, -1, mbmi, mi_col, mi_row) *
                 cm->delta_lf_res;
+        mbmi->current_delta_lf_from_base = xd->current_delta_lf_from_base =
+            clamp(tmp_lvl, -MAX_LOOP_FILTER, MAX_LOOP_FILTER);
         xd->prev_delta_lf_from_base = xd->current_delta_lf_from_base;
       }
 #else
@@ -1203,7 +1207,7 @@
           read_delta_lflevel(cm, xd, r, mbmi, mi_col, mi_row) *
               cm->delta_lf_res;
       mbmi->current_delta_lf_from_base = xd->current_delta_lf_from_base =
-          clamp(current_delta_lf_from_base, 0, MAX_LOOP_FILTER);
+          clamp(current_delta_lf_from_base, -MAX_LOOP_FILTER, MAX_LOOP_FILTER);
       xd->prev_delta_lf_from_base = xd->current_delta_lf_from_base;
 #endif  // CONFIG_LOOPFILTER_LEVEL
     }
@@ -2716,17 +2720,21 @@
 #if CONFIG_LOOPFILTER_LEVEL
       if (cm->delta_lf_multi) {
         for (int lf_id = 0; lf_id < FRAME_LF_COUNT; ++lf_id) {
-          mbmi->curr_delta_lf[lf_id] = xd->curr_delta_lf[lf_id] =
+          const int tmp_lvl =
               xd->prev_delta_lf[lf_id] +
               read_delta_lflevel(cm, xd, r, lf_id, mbmi, mi_col, mi_row) *
                   cm->delta_lf_res;
+          mbmi->curr_delta_lf[lf_id] = xd->curr_delta_lf[lf_id] =
+              clamp(tmp_lvl, -MAX_LOOP_FILTER, MAX_LOOP_FILTER);
           xd->prev_delta_lf[lf_id] = xd->curr_delta_lf[lf_id];
         }
       } else {
-        mbmi->current_delta_lf_from_base = xd->current_delta_lf_from_base =
+        const int tmp_lvl =
             xd->prev_delta_lf_from_base +
             read_delta_lflevel(cm, xd, r, -1, mbmi, mi_col, mi_row) *
                 cm->delta_lf_res;
+        mbmi->current_delta_lf_from_base = xd->current_delta_lf_from_base =
+            clamp(tmp_lvl, -MAX_LOOP_FILTER, MAX_LOOP_FILTER);
         xd->prev_delta_lf_from_base = xd->current_delta_lf_from_base;
       }
 #else
@@ -2735,7 +2743,7 @@
           read_delta_lflevel(cm, xd, r, mbmi, mi_col, mi_row) *
               cm->delta_lf_res;
       mbmi->current_delta_lf_from_base = xd->current_delta_lf_from_base =
-          clamp(current_delta_lf_from_base, 0, MAX_LOOP_FILTER);
+          clamp(current_delta_lf_from_base, -MAX_LOOP_FILTER, MAX_LOOP_FILTER);
       xd->prev_delta_lf_from_base = xd->current_delta_lf_from_base;
 #endif  // CONFIG_LOOPFILTER_LEVEL
     }
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 9099737..c8bae01 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -3389,12 +3389,14 @@
         for (j = 0; j < AOMMIN(cm->mib_size, cm->mi_rows - mi_row); j++) {
           for (k = 0; k < AOMMIN(cm->mib_size, cm->mi_cols - mi_col); k++) {
             cm->mi[(mi_row + j) * cm->mi_stride + (mi_col + k)]
-                .mbmi.current_delta_lf_from_base =
-                clamp(current_delta_lf_from_base, 0, MAX_LOOP_FILTER);
+                .mbmi.current_delta_lf_from_base = clamp(
+                current_delta_lf_from_base, -MAX_LOOP_FILTER, MAX_LOOP_FILTER);
 #if CONFIG_LOOPFILTER_LEVEL
             for (int lf_id = 0; lf_id < FRAME_LF_COUNT; ++lf_id) {
               cm->mi[(mi_row + j) * cm->mi_stride + (mi_col + k)]
-                  .mbmi.curr_delta_lf[lf_id] = current_delta_lf_from_base;
+                  .mbmi.curr_delta_lf[lf_id] =
+                  clamp(current_delta_lf_from_base, -MAX_LOOP_FILTER,
+                        MAX_LOOP_FILTER);
             }
 #endif  // CONFIG_LOOPFILTER_LEVEL
           }