Consolidate all post_rounding for compound modes
The do_post_rounding flag can now be removed since it is equivalent
to is_compound.
Change-Id: I3a18d853571b7363a87e65601c82d1f345b3dcd2
diff --git a/av1/common/convolve.h b/av1/common/convolve.h
index af0230a..b98974a 100644
--- a/av1/common/convolve.h
+++ b/av1/common/convolve.h
@@ -34,7 +34,6 @@
int round_0;
int round_1;
int plane;
- int do_post_rounding;
int is_compound;
#if CONFIG_JNT_COMP
int use_jnt_comp_avg;
@@ -101,7 +100,6 @@
conv_params.round = CONVOLVE_OPT_ROUND;
conv_params.round_0 = ROUND0_BITS;
conv_params.round_1 = 0;
- conv_params.do_post_rounding = 0;
conv_params.is_compound = 0;
conv_params.dst = NULL;
conv_params.dst_stride = 0;
@@ -146,7 +144,6 @@
conv_params.dst = dst;
conv_params.dst_stride = dst_stride;
conv_params.plane = plane;
- conv_params.do_post_rounding = 0;
return conv_params;
}
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c
index 1ae7e53..87b859a 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -28,6 +28,21 @@
// This function will determine whether or not to create a warped
// prediction.
+
+static INLINE int get_compound_post_rounding_bits(
+ const MB_MODE_INFO *const mbmi, const ConvolveParams *conv_params) {
+ assert(conv_params->is_compound);
+ int round_bits =
+ 2 * FILTER_BITS - conv_params->round_0 - conv_params->round_1;
+ if (is_masked_compound_type(mbmi->interinter_compound_type))
+ return round_bits;
+ round_bits += conv_params->is_compound;
+#if CONFIG_JNT_COMP
+ if (conv_params->use_jnt_comp_avg) round_bits += DIST_PRECISION_BITS - 1;
+#endif // CONFIG_JNT_COMP
+ return round_bits;
+}
+
static INLINE int allow_warp(const MODE_INFO *const mi,
const WarpTypesAllowed *const warp_types,
const WarpedMotionParams *const gm_params,
@@ -96,9 +111,6 @@
inter_predictor(src, src_stride, dst, dst_stride, subpel_x, subpel_y, sf, w,
h, conv_params, interp_filters, xs, ys);
}
- // For compound, do_post_rounding is always 1.
- // For masked compound, this flag will be turned off after the blend stage.
- conv_params->do_post_rounding = conv_params->is_compound;
}
#define NSMOOTHERS 1
@@ -792,16 +804,6 @@
org_dst_stride, tmp_buf32, tmp_buf_stride,
&comp_data, mi->mbmi.sb_type, h, w);
- const int convolve_rounding_bits =
- FILTER_BITS * 2 - conv_params->round_0 - conv_params->round_1;
- if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
- av1_highbd_convolve_rounding(org_dst, org_dst_stride, dst, dst_stride, w,
- h, convolve_rounding_bits, xd->bd);
- else
- av1_convolve_rounding(org_dst, org_dst_stride, dst, dst_stride, w, h,
- convolve_rounding_bits);
-
- conv_params->do_post_rounding = 0;
} else {
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
build_masked_compound_highbd(dst, dst_stride, dst, dst_stride, tmp_dst,
@@ -1102,15 +1104,10 @@
xs, ys, xd);
} // for (ref = 0; ref < 1 + is_compound; ++ref)
- if (conv_params.do_post_rounding) {
- assert(!is_masked_compound_type(mi->mbmi.interinter_compound_type));
+ if (conv_params.is_compound) {
assert(conv_params.dst != NULL);
- int round_bits = FILTER_BITS * 2 + is_compound - conv_params.round_0 -
- conv_params.round_1;
-#if CONFIG_JNT_COMP
- if (conv_params.use_jnt_comp_avg)
- round_bits += DIST_PRECISION_BITS - 1;
-#endif // CONFIG_JNT_COMP
+ int round_bits =
+ get_compound_post_rounding_bits(&mi->mbmi, &conv_params);
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
av1_highbd_convolve_rounding(tmp_dst, tmp_dst_stride, dst,
dst_buf->stride, b4_w, b4_h,
@@ -1244,14 +1241,9 @@
}
// TODO(angiebird): This part needs optimization
- if (conv_params.do_post_rounding) {
- assert(!is_masked_compound_type(mi->mbmi.interinter_compound_type));
+ if (conv_params.is_compound) {
assert(conv_params.dst != NULL);
- int round_bits = FILTER_BITS * 2 + is_compound - conv_params.round_0 -
- conv_params.round_1;
-#if CONFIG_JNT_COMP
- if (conv_params.use_jnt_comp_avg) round_bits += DIST_PRECISION_BITS - 1;
-#endif // CONFIG_JNT_COMP
+ int round_bits = get_compound_post_rounding_bits(&mi->mbmi, &conv_params);
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
av1_highbd_convolve_rounding(tmp_dst, MAX_SB_SIZE, dst, dst_buf->stride,
w, h, round_bits, xd->bd);