Make convolve_round work with warped_motion
Warped_motion doesn't go through inter_predictor() function to
generate prediction where convolve_round is activated.
Therefore, we could avoid doing post rounding when the
warped_motion mode is on.
We use do_post_rounding to indicate whether post rounding is
needed
Change-Id: Ib17a0c0d4e6e5232e9682afa8cfdb9576f5cf4c0
diff --git a/av1/common/convolve.h b/av1/common/convolve.h
index 15a3087..48b476e 100644
--- a/av1/common/convolve.h
+++ b/av1/common/convolve.h
@@ -33,6 +33,7 @@
int round_0;
int round_1;
int plane;
+ int do_post_rounding;
} ConvolveParams;
static INLINE ConvolveParams get_conv_params(int ref, int plane) {
@@ -40,6 +41,7 @@
conv_params.ref = ref;
conv_params.round = CONVOLVE_OPT_ROUND;
conv_params.plane = plane;
+ conv_params.do_post_rounding = 0;
return conv_params;
}
struct AV1Common;
@@ -73,6 +75,7 @@
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 8bb4a9b..8975b17 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -1151,19 +1151,21 @@
}
#if CONFIG_CONVOLVE_ROUND
-// TODO(angiebird): This part needs optimization
+ // TODO(angiebird): This part needs optimization
+ if (conv_params.do_post_rounding) {
#if CONFIG_HIGHBITDEPTH
- if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
- av1_highbd_convolve_rounding(tmp_dst, MAX_SB_SIZE, dst, dst_buf->stride,
- w, h, FILTER_BITS * 2 + is_compound -
- conv_params.round_0 -
- conv_params.round_1,
- xd->bd);
- else
+ if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
+ av1_highbd_convolve_rounding(tmp_dst, MAX_SB_SIZE, dst, dst_buf->stride,
+ w, h, FILTER_BITS * 2 + is_compound -
+ conv_params.round_0 -
+ conv_params.round_1,
+ xd->bd);
+ else
#endif // CONFIG_HIGHBITDEPTH
- av1_convolve_rounding(tmp_dst, MAX_SB_SIZE, dst, dst_buf->stride, w, h,
- FILTER_BITS * 2 + is_compound -
- conv_params.round_0 - conv_params.round_1);
+ av1_convolve_rounding(tmp_dst, MAX_SB_SIZE, dst, dst_buf->stride, w, h,
+ FILTER_BITS * 2 + is_compound -
+ conv_params.round_0 - conv_params.round_1);
+ }
#endif // CONFIG_CONVOLVE_ROUND
}
}
diff --git a/av1/common/reconinter.h b/av1/common/reconinter.h
index 1a6c7b8..8dcea88 100644
--- a/av1/common/reconinter.h
+++ b/av1/common/reconinter.h
@@ -72,6 +72,7 @@
&interp_filter,
#endif // CONFIG_DUAL_FILTER
subpel_x, xs, subpel_y, ys, conv_params);
+ conv_params->do_post_rounding = 1;
#else
assert(0);
#endif // CONFIG_CONVOLVE_ROUND
@@ -136,6 +137,7 @@
&interp_filter,
#endif // CONFIG_DUAL_FILTER
subpel_x, xs, subpel_y, ys, conv_params, bd);
+ conv_params->do_post_rounding = 1;
#else
assert(0);
#endif // CONFIG_CONVOLVE_ROUND