Fix rd scales for transforms larger than 32x32
Change-Id: I1ddec0cf3513e2bd7568393e5ed5d52c25014ab4
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index f3d0f61..3bf1d7f 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -1752,25 +1752,22 @@
#if CONFIG_HIGHBITDEPTH
const int bd = (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) ? xd->bd : 8;
*out_dist = av1_highbd_block_error2_c(coeff, dqcoeff, ref_coeff,
- buffer_length, &this_sse, bd) >>
- shift;
+ buffer_length, &this_sse, bd);
#else
- *out_dist = av1_block_error2_c(coeff, dqcoeff, ref_coeff, buffer_length,
- &this_sse) >>
- shift;
+ *out_dist =
+ av1_block_error2_c(coeff, dqcoeff, ref_coeff, buffer_length, &this_sse);
#endif // CONFIG_HIGHBITDEPTH
#else // !CONFIG_PVQ
#if CONFIG_HIGHBITDEPTH
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
*out_dist = av1_highbd_block_error(coeff, dqcoeff, buffer_length,
- &this_sse, xd->bd) >>
- shift;
+ &this_sse, xd->bd);
else
#endif
- *out_dist =
- av1_block_error(coeff, dqcoeff, buffer_length, &this_sse) >> shift;
+ *out_dist = av1_block_error(coeff, dqcoeff, buffer_length, &this_sse);
#endif // CONFIG_PVQ
- *out_sse = this_sse >> shift;
+ *out_dist = RIGHT_SIGNED_SHIFT(*out_dist, shift);
+ *out_sse = RIGHT_SIGNED_SHIFT(this_sse, shift);
} else {
const BLOCK_SIZE tx_bsize = txsize_to_bsize[tx_size];
#if !CONFIG_PVQ || CONFIG_DIST_8X8
@@ -1951,11 +1948,11 @@
#if CONFIG_HIGHBITDEPTH
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
tmp_dist =
- av1_highbd_block_error(coeff, dqcoeff, buffer_length, &tmp, xd->bd) >>
- shift;
+ av1_highbd_block_error(coeff, dqcoeff, buffer_length, &tmp, xd->bd);
else
#endif
- tmp_dist = av1_block_error(coeff, dqcoeff, buffer_length, &tmp) >> shift;
+ tmp_dist = av1_block_error(coeff, dqcoeff, buffer_length, &tmp);
+ tmp_dist = RIGHT_SIGNED_SHIFT(tmp_dist, shift);
if (
#if CONFIG_DIST_8X8
@@ -4442,13 +4439,13 @@
#if CONFIG_HIGHBITDEPTH
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
- tmp_dist = av1_highbd_block_error(coeff, dqcoeff, buffer_length, &tmp_sse,
- xd->bd) >>
- shift;
+ tmp_dist =
+ av1_highbd_block_error(coeff, dqcoeff, buffer_length, &tmp_sse, xd->bd);
else
#endif
- tmp_dist =
- av1_block_error(coeff, dqcoeff, buffer_length, &tmp_sse) >> shift;
+ tmp_dist = av1_block_error(coeff, dqcoeff, buffer_length, &tmp_sse);
+
+ tmp_dist = RIGHT_SIGNED_SHIFT(tmp_dist, shift);
#if CONFIG_MRC_TX
if (tx_type == MRC_DCT && !xd->mi[0]->mbmi.valid_mrc_mask) {
@@ -4465,8 +4462,8 @@
a, l, 1);
} else {
rd_stats->rate += rd_stats->zero_rate;
- rd_stats->dist += tmp_sse >> shift;
- rd_stats->sse += tmp_sse >> shift;
+ rd_stats->dist += RIGHT_SIGNED_SHIFT(tmp_sse, shift);
+ rd_stats->sse += RIGHT_SIGNED_SHIFT(tmp_sse, shift);
rd_stats->skip = 1;
rd_stats->invalid_rate = 1;
return;