Add a wrapper to 8-bit scaled convolve function

This addesses a crash in a situation where the scaled convolve
function is called without a valid dst buffer in the conv_params
structure.

Change-Id: Ia4a0a1213f06447155d6c92aa9efc183d8c4a79c
diff --git a/av1/common/convolve.c b/av1/common/convolve.c
index 4473f99..3e4cf7b 100644
--- a/av1/common/convolve.c
+++ b/av1/common/convolve.c
@@ -916,6 +916,31 @@
   }
 }
 
+static void av1_convolve_2d_scale_wrapper(
+    const uint8_t *src, int src_stride, uint8_t *dst, int dst_stride, int w,
+    int h, InterpFilterParams *filter_params_x,
+    InterpFilterParams *filter_params_y, const int subpel_x_qn,
+    const int x_step_qn, const int subpel_y_qn, const int y_step_qn,
+    ConvolveParams *conv_params) {
+  if (conv_params->is_compound) {
+    assert(conv_params->dst != NULL);
+    av1_convolve_2d_scale(src, src_stride, conv_params->dst,
+                          conv_params->dst_stride, w, h, filter_params_x,
+                          filter_params_y, subpel_x_qn, x_step_qn, subpel_y_qn,
+                          y_step_qn, conv_params);
+  } else {
+    CONV_BUF_TYPE tmp_dst[MAX_SB_SIZE * MAX_SB_SIZE];
+    int tmp_dst_stride = MAX_SB_SIZE;
+    av1_convolve_2d_scale(src, src_stride, tmp_dst, tmp_dst_stride, w, h,
+                          filter_params_x, filter_params_y, subpel_x_qn,
+                          x_step_qn, subpel_y_qn, y_step_qn, conv_params);
+    const int rbits =
+        2 * FILTER_BITS - conv_params->round_0 - conv_params->round_1;
+    av1_convolve_rounding(tmp_dst, tmp_dst_stride, dst, dst_stride, w, h,
+                          rbits);
+  }
+}
+
 void av1_convolve_2d_facade(const uint8_t *src, int src_stride, uint8_t *dst,
                             int dst_stride, int w, int h,
                             InterpFilters interp_filters, const int subpel_x_q4,
@@ -937,10 +962,10 @@
 #endif
 
   if (scaled)
-    av1_convolve_2d_scale(src, src_stride, conv_params->dst,
-                          conv_params->dst_stride, w, h, &filter_params_x,
-                          &filter_params_y, subpel_x_q4, x_step_q4, subpel_y_q4,
-                          y_step_q4, conv_params);
+    av1_convolve_2d_scale_wrapper(src, src_stride, dst, dst_stride, w, h,
+                                  &filter_params_x, &filter_params_y,
+                                  subpel_x_q4, x_step_q4, subpel_y_q4,
+                                  y_step_q4, conv_params);
   else
     sf->convolve[subpel_x_q4 != 0][subpel_y_q4 != 0][conv_params->is_compound](
         src, src_stride, dst, dst_stride, w, h, &filter_params_x,
diff --git a/av1/common/reconinter.h b/av1/common/reconinter.h
index 8cc805d3..839cba8 100644
--- a/av1/common/reconinter.h
+++ b/av1/common/reconinter.h
@@ -58,7 +58,10 @@
       av1_convolve_2d_facade(src, src_stride, dst, dst_stride, w, h,
                              interp_filters, subpel_x, xs, subpel_y, ys, 1,
                              conv_params, sf);
-      conv_params->do_post_rounding = 1;
+      if (conv_params->is_compound)
+        conv_params->do_post_rounding = 1;
+      else
+        conv_params->do_post_rounding = 0;
     } else {
       assert(conv_params->round == CONVOLVE_OPT_ROUND);
       av1_convolve_scale(src, src_stride, dst, dst_stride, w, h, interp_filters,
@@ -129,7 +132,10 @@
       av1_highbd_convolve_2d_facade(src, src_stride, dst, dst_stride, w, h,
                                     interp_filters, subpel_x, xs, subpel_y, ys,
                                     1, conv_params, bd);
-      conv_params->do_post_rounding = 1;
+      if (conv_params->is_compound)
+        conv_params->do_post_rounding = 1;
+      else
+        conv_params->do_post_rounding = 0;
     } else {
       av1_highbd_convolve_scale(src, src_stride, dst, dst_stride, w, h,
                                 interp_filters, subpel_x, xs, subpel_y, ys, avg,