Add tiled version of UV wiener restoration

Slight improvement in midres and hdres sets of 0.02% and 0.0.9%
respectively.

This is also a better design anyways.

Change-Id: I15b60b8836070a2132641e5b1d8e9f68df426c08
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index ae2c36e..a047a90 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -3088,6 +3088,9 @@
   int i, p;
   const int ntiles =
       av1_get_rest_ntiles(cm->width, cm->height, NULL, NULL, NULL, NULL);
+  const int ntiles_uv = av1_get_rest_ntiles(cm->width >> cm->subsampling_x,
+                                            cm->height >> cm->subsampling_y,
+                                            NULL, NULL, NULL, NULL);
   RestorationInfo *rsi = &cm->rst_info[0];
   if (rsi->frame_restoration_type != RESTORE_NONE) {
     if (rsi->frame_restoration_type == RESTORE_SWITCHABLE) {
@@ -3106,24 +3109,25 @@
       }
     } else if (rsi->frame_restoration_type == RESTORE_WIENER) {
       for (i = 0; i < ntiles; ++i) {
-        aom_write(wb, rsi->wiener_info[i].level != 0, RESTORE_NONE_WIENER_PROB);
-        if (rsi->wiener_info[i].level) {
+        aom_write(wb, rsi->restoration_type[i] != RESTORE_NONE,
+                  RESTORE_NONE_WIENER_PROB);
+        if (rsi->restoration_type[i] != RESTORE_NONE) {
           write_wiener_filter(&rsi->wiener_info[i], wb);
         }
       }
     } else if (rsi->frame_restoration_type == RESTORE_SGRPROJ) {
       for (i = 0; i < ntiles; ++i) {
-        aom_write(wb, rsi->sgrproj_info[i].level != 0,
+        aom_write(wb, rsi->restoration_type[i] != RESTORE_NONE,
                   RESTORE_NONE_SGRPROJ_PROB);
-        if (rsi->sgrproj_info[i].level) {
+        if (rsi->restoration_type[i] != RESTORE_NONE) {
           write_sgrproj_filter(&rsi->sgrproj_info[i], wb);
         }
       }
     } else if (rsi->frame_restoration_type == RESTORE_DOMAINTXFMRF) {
       for (i = 0; i < ntiles; ++i) {
-        aom_write(wb, rsi->domaintxfmrf_info[i].level != 0,
+        aom_write(wb, rsi->restoration_type[i] != RESTORE_NONE,
                   RESTORE_NONE_DOMAINTXFMRF_PROB);
-        if (rsi->domaintxfmrf_info[i].level) {
+        if (rsi->restoration_type[i] != RESTORE_NONE) {
           write_domaintxfmrf_filter(&rsi->domaintxfmrf_info[i], wb);
         }
       }
@@ -3132,7 +3136,14 @@
   for (p = 1; p < MAX_MB_PLANE; ++p) {
     rsi = &cm->rst_info[p];
     if (rsi->frame_restoration_type == RESTORE_WIENER) {
-      write_wiener_filter(&rsi->wiener_info[0], wb);
+      for (i = 0; i < ntiles_uv; ++i) {
+        if (ntiles_uv > 1)
+          aom_write(wb, rsi->restoration_type[i] != RESTORE_NONE,
+                    RESTORE_NONE_WIENER_PROB);
+        if (rsi->restoration_type[i] != RESTORE_NONE) {
+          write_wiener_filter(&rsi->wiener_info[i], wb);
+        }
+      }
     } else if (rsi->frame_restoration_type != RESTORE_NONE) {
       assert(0);
     }