Remove double rounding in selfguided filter

In av1_selfguided_restoration, the values stored into 'dgd' are
unnecessarily rounded twice. This patch replaces this by a single
rounding operation.

Change-Id: I188d283137b74823f5d5447d441250520d6ee294
diff --git a/av1/common/restoration.c b/av1/common/restoration.c
index a449d8a..6a6b080 100644
--- a/av1/common/restoration.c
+++ b/av1/common/restoration.c
@@ -678,9 +678,8 @@
         3 * A[k] + 2 * A[k + 1] + 2 * A[k + width] + A[k + width + 1];
     const int32_t b =
         3 * B[k] + 2 * B[k + 1] + 2 * B[k + width] + B[k + width + 1];
-    const int32_t v =
-        (((a * dgd[l] + b) << SGRPROJ_RST_BITS) + (1 << nb) / 2) >> nb;
-    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS);
+    const int32_t v = a * dgd[l] + b;
+    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS + nb - SGRPROJ_RST_BITS);
   }
   i = 0;
   j = width - 1;
@@ -692,9 +691,8 @@
         3 * A[k] + 2 * A[k - 1] + 2 * A[k + width] + A[k + width - 1];
     const int32_t b =
         3 * B[k] + 2 * B[k - 1] + 2 * B[k + width] + B[k + width - 1];
-    const int32_t v =
-        (((a * dgd[l] + b) << SGRPROJ_RST_BITS) + (1 << nb) / 2) >> nb;
-    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS);
+    const int32_t v = a * dgd[l] + b;
+    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS + nb - SGRPROJ_RST_BITS);
   }
   i = height - 1;
   j = 0;
@@ -706,9 +704,8 @@
         3 * A[k] + 2 * A[k + 1] + 2 * A[k - width] + A[k - width + 1];
     const int32_t b =
         3 * B[k] + 2 * B[k + 1] + 2 * B[k - width] + B[k - width + 1];
-    const int32_t v =
-        (((a * dgd[l] + b) << SGRPROJ_RST_BITS) + (1 << nb) / 2) >> nb;
-    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS);
+    const int32_t v = a * dgd[l] + b;
+    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS + nb - SGRPROJ_RST_BITS);
   }
   i = height - 1;
   j = width - 1;
@@ -720,9 +717,8 @@
         3 * A[k] + 2 * A[k - 1] + 2 * A[k - width] + A[k - width - 1];
     const int32_t b =
         3 * B[k] + 2 * B[k - 1] + 2 * B[k - width] + B[k - width - 1];
-    const int32_t v =
-        (((a * dgd[l] + b) << SGRPROJ_RST_BITS) + (1 << nb) / 2) >> nb;
-    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS);
+    const int32_t v = a * dgd[l] + b;
+    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS + nb - SGRPROJ_RST_BITS);
   }
   i = 0;
   for (j = 1; j < width - 1; ++j) {
@@ -733,9 +729,8 @@
                       A[k + width - 1] + A[k + width + 1];
     const int32_t b = B[k] + 2 * (B[k - 1] + B[k + 1]) + B[k + width] +
                       B[k + width - 1] + B[k + width + 1];
-    const int32_t v =
-        (((a * dgd[l] + b) << SGRPROJ_RST_BITS) + (1 << nb) / 2) >> nb;
-    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS);
+    const int32_t v = a * dgd[l] + b;
+    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS + nb - SGRPROJ_RST_BITS);
   }
   i = height - 1;
   for (j = 1; j < width - 1; ++j) {
@@ -746,9 +741,8 @@
                       A[k - width - 1] + A[k - width + 1];
     const int32_t b = B[k] + 2 * (B[k - 1] + B[k + 1]) + B[k - width] +
                       B[k - width - 1] + B[k - width + 1];
-    const int32_t v =
-        (((a * dgd[l] + b) << SGRPROJ_RST_BITS) + (1 << nb) / 2) >> nb;
-    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS);
+    const int32_t v = a * dgd[l] + b;
+    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS + nb - SGRPROJ_RST_BITS);
   }
   j = 0;
   for (i = 1; i < height - 1; ++i) {
@@ -759,9 +753,8 @@
                       A[k - width + 1] + A[k + width + 1];
     const int32_t b = B[k] + 2 * (B[k - width] + B[k + width]) + B[k + 1] +
                       B[k - width + 1] + B[k + width + 1];
-    const int32_t v =
-        (((a * dgd[l] + b) << SGRPROJ_RST_BITS) + (1 << nb) / 2) >> nb;
-    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS);
+    const int32_t v = a * dgd[l] + b;
+    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS + nb - SGRPROJ_RST_BITS);
   }
   j = width - 1;
   for (i = 1; i < height - 1; ++i) {
@@ -772,9 +765,8 @@
                       A[k - width - 1] + A[k + width - 1];
     const int32_t b = B[k] + 2 * (B[k - width] + B[k + width]) + B[k - 1] +
                       B[k - width - 1] + B[k + width - 1];
-    const int32_t v =
-        (((a * dgd[l] + b) << SGRPROJ_RST_BITS) + (1 << nb) / 2) >> nb;
-    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS);
+    const int32_t v = a * dgd[l] + b;
+    dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS + nb - SGRPROJ_RST_BITS);
   }
   for (i = 1; i < height - 1; ++i) {
     for (j = 1; j < width - 1; ++j) {
@@ -791,9 +783,8 @@
           (B[k - 1 - width] + B[k - 1 + width] + B[k + 1 - width] +
            B[k + 1 + width]) *
               3;
-      const int32_t v =
-          (((a * dgd[l] + b) << SGRPROJ_RST_BITS) + (1 << nb) / 2) >> nb;
-      dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS);
+      const int32_t v = a * dgd[l] + b;
+      dgd[l] = ROUND_POWER_OF_TWO(v, SGRPROJ_SGR_BITS + nb - SGRPROJ_RST_BITS);
     }
   }
 #else