striped_loop_restoration bug fixes

* The above/below buffers did not fit the extra replication pixels to the right and left
* The wiener filter stripe has to be at least 4 pixel high (because of the
  split into above/mid/below parts)

Change-Id: I360bef114c7ceb439e11b76bd4724af15e051348
diff --git a/av1/common/alloccommon.c b/av1/common/alloccommon.c
index ad994ae..67ad9f1 100644
--- a/av1/common/alloccommon.c
+++ b/av1/common/alloccommon.c
@@ -156,7 +156,7 @@
   for (p = 0; p < MAX_MB_PLANE; ++p) {
     int w = p == 0 ? width : ROUND_POWER_OF_TWO(width, cm->subsampling_x);
     int align_bits = 5;  // align for efficiency
-    int stride = ALIGN_POWER_OF_TWO(w, align_bits);
+    int stride = ALIGN_POWER_OF_TWO(w + 2 * RESTORATION_EXTRA_HORZ, align_bits);
     int num_stripes = (height + 63) / 64;
     // for each processing stripe: 2 lines above, 2 below
     int buf_size = num_stripes * 2 * stride;
@@ -186,6 +186,15 @@
     av1_free_restoration_struct(&cm->rst_info[p]);
   aom_free(cm->rst_tmpbuf);
   cm->rst_tmpbuf = NULL;
+#if CONFIG_STRIPED_LOOP_RESTORATION
+  for (p = 0; p < MAX_MB_PLANE; ++p) {
+    RestorationStripeBoundaries *boundaries = &cm->rst_info[p].boundaries;
+    aom_free(boundaries->stripe_boundary_above);
+    aom_free(boundaries->stripe_boundary_below);
+    boundaries->stripe_boundary_above = NULL;
+    boundaries->stripe_boundary_below = NULL;
+  }
+#endif
 }
 #endif  // CONFIG_LOOP_RESTORATION
 
diff --git a/av1/common/restoration.c b/av1/common/restoration.c
index 79cc200..eb103f3 100644
--- a/av1/common/restoration.c
+++ b/av1/common/restoration.c
@@ -1376,7 +1376,8 @@
     int h = setup_processing_stripe_boundary(&remaining_stripes, rsb,
                                              procunit_height, ss_y, highbd,
                                              data8, stride, rlbs);
-    if (unit_rtype == RESTORE_WIENER) h = ALIGN_POWER_OF_TWO(h, 1);
+    // The wiener filter needs a height>=4 in order to not assert on mid_height
+    if (unit_rtype == RESTORE_WIENER) h = ALIGN_POWER_OF_TWO(h, 2);
 #else
     const int h = AOMMIN(procunit_height, (unit_h - i + 15) & ~15);
 #endif