Refactor UV restoration to use same tilesize as Y

Change-Id: I56e741551f74624a84250d7565520db9c5127d1b
diff --git a/av1/encoder/pickrst.c b/av1/encoder/pickrst.c
index 0fa07c8..f8a374e 100644
--- a/av1/encoder/pickrst.c
+++ b/av1/encoder/pickrst.c
@@ -44,6 +44,10 @@
                                     int width, int v_start, int height,
                                     int components_pattern) {
   int64_t filt_err = 0;
+  (void)cm;
+  // Y and UV components cannot be mixed
+  assert(components_pattern == 1 || components_pattern == 2 ||
+         components_pattern == 4 || components_pattern == 6);
 #if CONFIG_AOM_HIGHBITDEPTH
   if (cm->use_highbitdepth) {
     if ((components_pattern >> AOM_PLANE_Y) & 1) {
@@ -51,14 +55,12 @@
           aom_highbd_get_y_sse_part(src, dst, h_start, width, v_start, height);
     }
     if ((components_pattern >> AOM_PLANE_U) & 1) {
-      filt_err += aom_highbd_get_u_sse_part(
-          src, dst, h_start >> cm->subsampling_x, width >> cm->subsampling_x,
-          v_start >> cm->subsampling_y, height >> cm->subsampling_y);
+      filt_err +=
+          aom_highbd_get_u_sse_part(src, dst, h_start, width, v_start, height);
     }
     if ((components_pattern >> AOM_PLANE_V) & 1) {
-      filt_err += aom_highbd_get_v_sse_part(
-          src, dst, h_start >> cm->subsampling_x, width >> cm->subsampling_x,
-          v_start >> cm->subsampling_y, height >> cm->subsampling_y);
+      filt_err +=
+          aom_highbd_get_v_sse_part(src, dst, h_start, width, v_start, height);
     }
     return filt_err;
   }
@@ -67,14 +69,10 @@
     filt_err += aom_get_y_sse_part(src, dst, h_start, width, v_start, height);
   }
   if ((components_pattern >> AOM_PLANE_U) & 1) {
-    filt_err += aom_get_u_sse_part(
-        src, dst, h_start >> cm->subsampling_x, width >> cm->subsampling_x,
-        v_start >> cm->subsampling_y, height >> cm->subsampling_y);
+    filt_err += aom_get_u_sse_part(src, dst, h_start, width, v_start, height);
   }
   if ((components_pattern >> AOM_PLANE_V) & 1) {
-    filt_err += aom_get_u_sse_part(
-        src, dst, h_start >> cm->subsampling_x, width >> cm->subsampling_x,
-        v_start >> cm->subsampling_y, height >> cm->subsampling_y);
+    filt_err += aom_get_v_sse_part(src, dst, h_start, width, v_start, height);
   }
   return filt_err;
 }
@@ -119,16 +117,28 @@
   int64_t filt_err;
   int tile_width, tile_height, nhtiles, nvtiles;
   int h_start, h_end, v_start, v_end;
-  const int ntiles = av1_get_rest_ntiles(cm->width, cm->height, &tile_width,
-                                         &tile_height, &nhtiles, &nvtiles);
+  int ntiles, width, height;
+
+  // Y and UV components cannot be mixed
+  assert(components_pattern == 1 || components_pattern == 2 ||
+         components_pattern == 4 || components_pattern == 6);
+
+  if (components_pattern == 1) {  // Y only
+    width = src->y_crop_width;
+    height = src->y_crop_height;
+  } else {  // Color
+    width = src->uv_crop_width;
+    height = src->uv_crop_height;
+  }
+  ntiles = av1_get_rest_ntiles(width, height, &tile_width, &tile_height,
+                               &nhtiles, &nvtiles);
   (void)ntiles;
 
   av1_loop_restoration_frame(cm->frame_to_show, cm, rsi, components_pattern,
                              partial_frame, dst_frame);
   av1_get_rest_tile_limits(tile_idx, subtile_idx, subtile_bits, nhtiles,
-                           nvtiles, tile_width, tile_height, cm->width,
-                           cm->height, 0, 0, &h_start, &h_end, &v_start,
-                           &v_end);
+                           nvtiles, tile_width, tile_height, width, height, 0,
+                           0, &h_start, &h_end, &v_start, &v_end);
   filt_err = sse_restoration_tile(src, dst_frame, cm, h_start, h_end - h_start,
                                   v_start, v_end - v_start, components_pattern);
 
@@ -951,7 +961,7 @@
   const int dgd_stride = dgd->uv_stride;
   double score;
   int tile_idx, tile_width, tile_height, nhtiles, nvtiles;
-  const int ntiles = av1_get_rest_ntiles(cm->width, cm->height, &tile_width,
+  const int ntiles = av1_get_rest_ntiles(width, height, &tile_width,
                                          &tile_height, &nhtiles, &nvtiles);
 
   assert(width == dgd->uv_crop_width);
@@ -1361,6 +1371,8 @@
          cm->rst_info[0].frame_restoration_type,
          cm->rst_info[1].frame_restoration_type,
          cm->rst_info[2].frame_restoration_type);
+         */
+  /*
   printf("Frame %d/%d frame_restore_type %d : %f %f %f %f %f\n",
          cm->current_video_frame, cm->show_frame,
          cm->rst_info[0].frame_restoration_type, cost_restore[0],