Integrate hbd convolve_round and compound_segment

When convolve_round is turned on, both lbd/hbd use use 32-bit buf
Therefore, they use the same mask/blending functions

Change-Id: Icfc6db818c0a53216108e42161acac07303e6c1c
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c
index 51f4aac..548c370 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -363,14 +363,15 @@
                              const int32_t *src0, int src0_stride,
                              const int32_t *src1, int src1_stride,
                              BLOCK_SIZE sb_type, int h, int w,
-                             ConvolveParams *conv_params) {
-  int round = 2 * FILTER_BITS - conv_params->round_0 - conv_params->round_1;
+                             ConvolveParams *conv_params, int bd) {
+  int round =
+      2 * FILTER_BITS - conv_params->round_0 - conv_params->round_1 + (bd - 8);
   int i, j, m, diff;
   int block_stride = block_size_wide[sb_type];
   for (i = 0; i < h; ++i) {
     for (j = 0; j < w; ++j) {
-      diff = abs(ROUND_POWER_OF_TWO(
-          src0[i * src0_stride + j] - src1[i * src1_stride + j], round));
+      diff = abs(src0[i * src0_stride + j] - src1[i * src1_stride + j]);
+      diff = ROUND_POWER_OF_TWO(diff, round);
       m = clamp(mask_base + (diff / DIFF_FACTOR), 0, AOM_BLEND_A64_MAX_ALPHA);
       mask[i * block_stride + j] =
           which_inverse ? AOM_BLEND_A64_MAX_ALPHA - m : m;
@@ -382,15 +383,15 @@
                                         const int32_t *src0, int src0_stride,
                                         const int32_t *src1, int src1_stride,
                                         BLOCK_SIZE sb_type, int h, int w,
-                                        ConvolveParams *conv_params) {
+                                        ConvolveParams *conv_params, int bd) {
   switch (mask_type) {
     case DIFFWTD_38:
       diffwtd_mask_d32(mask, 0, 38, src0, src0_stride, src1, src1_stride,
-                       sb_type, h, w, conv_params);
+                       sb_type, h, w, conv_params, bd);
       break;
     case DIFFWTD_38_INV:
       diffwtd_mask_d32(mask, 1, 38, src0, src0_stride, src1, src1_stride,
-                       sb_type, h, w, conv_params);
+                       sb_type, h, w, conv_params, bd);
       break;
     default: assert(0);
   }
@@ -816,25 +817,26 @@
                            xs, ys, xd);
 #if CONFIG_COMPOUND_SEGMENT
   if (!plane && comp_data.interinter_compound_type == COMPOUND_SEG) {
-    if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
-      build_compound_seg_mask_highbd(comp_data.seg_mask, comp_data.mask_type,
-                                     dst, dst_stride, tmp_dst, MAX_SB_SIZE,
-                                     mi->mbmi.sb_type, h, w, xd->bd);
-    } else {
 #if CONFIG_CONVOLVE_ROUND
-      if (conv_params->round == CONVOLVE_OPT_NO_ROUND) {
-        build_compound_seg_mask_d32(
-            comp_data.seg_mask, comp_data.mask_type, org_dst, org_dst_stride,
-            tmp_dst2, tmp_dst2_stride, mi->mbmi.sb_type, h, w, conv_params);
-      } else {
+    if (conv_params->round == CONVOLVE_OPT_NO_ROUND) {
+      build_compound_seg_mask_d32(comp_data.seg_mask, comp_data.mask_type,
+                                  org_dst, org_dst_stride, tmp_dst2,
+                                  tmp_dst2_stride, mi->mbmi.sb_type, h, w,
+                                  conv_params, xd->bd);
+    } else {
 #endif  // CONFIG_CONVOLVE_ROUND
+      if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
+        build_compound_seg_mask_highbd(comp_data.seg_mask, comp_data.mask_type,
+                                       dst, dst_stride, tmp_dst, MAX_SB_SIZE,
+                                       mi->mbmi.sb_type, h, w, xd->bd);
+      } else {
         build_compound_seg_mask(comp_data.seg_mask, comp_data.mask_type, dst,
                                 dst_stride, tmp_dst, MAX_SB_SIZE,
                                 mi->mbmi.sb_type, h, w);
-#if CONFIG_CONVOLVE_ROUND
       }
-#endif
+#if CONFIG_CONVOLVE_ROUND
     }
+#endif
   }
 #endif  // CONFIG_COMPOUND_SEGMENT
 
@@ -848,28 +850,35 @@
         dst, dst_stride, dst, dst_stride, tmp_dst, MAX_SB_SIZE, &comp_data,
         mi->mbmi.sb_type, wedge_offset_x, wedge_offset_y, h, w);
 #else
-  if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
-    build_masked_compound_highbd(dst, dst_stride, dst, dst_stride, tmp_dst,
-                                 MAX_SB_SIZE, &comp_data, mi->mbmi.sb_type, h,
-                                 w, xd->bd);
-  } else {
 #if CONFIG_CONVOLVE_ROUND
-    if (conv_params->round == CONVOLVE_OPT_NO_ROUND) {
-      build_masked_compound_no_round(org_dst, org_dst_stride, org_dst,
-                                     org_dst_stride, tmp_dst2, tmp_dst2_stride,
-                                     &comp_data, mi->mbmi.sb_type, h, w);
+  if (conv_params->round == CONVOLVE_OPT_NO_ROUND) {
+    build_masked_compound_no_round(org_dst, org_dst_stride, org_dst,
+                                   org_dst_stride, tmp_dst2, tmp_dst2_stride,
+                                   &comp_data, mi->mbmi.sb_type, h, w);
+    if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
+      av1_highbd_convolve_rounding(
+          org_dst, org_dst_stride, dst, dst_stride, w, h,
+          FILTER_BITS * 2 - conv_params->round_0 - conv_params->round_1,
+          xd->bd);
+    } else {
       av1_convolve_rounding(
           org_dst, org_dst_stride, dst, dst_stride, w, h,
           FILTER_BITS * 2 - conv_params->round_0 - conv_params->round_1);
-      conv_params->do_post_rounding = 0;
-    } else {
+    }
+    conv_params->do_post_rounding = 0;
+  } else {
 #endif  // CONFIG_CONVOLVE_ROUND
+    if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
+      build_masked_compound_highbd(dst, dst_stride, dst, dst_stride, tmp_dst,
+                                   MAX_SB_SIZE, &comp_data, mi->mbmi.sb_type, h,
+                                   w, xd->bd);
+    } else {
       build_masked_compound(dst, dst_stride, dst, dst_stride, tmp_dst,
                             MAX_SB_SIZE, &comp_data, mi->mbmi.sb_type, h, w);
-#if CONFIG_CONVOLVE_ROUND
     }
-#endif  // CONFIG_CONVOLVE_ROUND
+#if CONFIG_CONVOLVE_ROUND
   }
+#endif  // CONFIG_CONVOLVE_ROUND
 #endif  // CONFIG_SUPERTX
 
 #else  // CONFIG_HIGHBITDEPTH
@@ -903,7 +912,7 @@
     if (conv_params->round == CONVOLVE_OPT_NO_ROUND) {
       build_compound_seg_mask_d32(
           comp_data.seg_mask, comp_data.mask_type, org_dst, org_dst_stride,
-          tmp_dst2, tmp_dst2_stride, mi->mbmi.sb_type, h, w, conv_params);
+          tmp_dst2, tmp_dst2_stride, mi->mbmi.sb_type, h, w, conv_params, 8);
     } else {
 #endif  // CONFIG_CONVOLVE_ROUND
       build_compound_seg_mask(comp_data.seg_mask, comp_data.mask_type, dst,
@@ -1376,15 +1385,8 @@
       conv_params.do_average = ref;
 #if CONFIG_EXT_INTER
       if (is_masked_compound_type(mi->mbmi.interinter_compound_type)) {
-#if CONFIG_HIGHBITDEPTH
-        // TODO(angiebird): integrate convolve_round and compound_segment in
-        // highbitdepth mode
-        if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
-          conv_params = get_conv_params(ref, 0, plane);
-        else
-#endif
-          // masked compound type has its own average mechanism
-          conv_params.do_average = 0;
+        // masked compound type has its own average mechanism
+        conv_params.do_average = 0;
       }
 
       if (ref && is_masked_compound_type(mi->mbmi.interinter_compound_type))