diff options
author | Yaowu Xu <yaowu@google.com> | 2018-11-07 21:55:10 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-11-07 21:55:10 +0000 |
commit | 82ab8e7466094eb70f5e7df5a1cf6884d042780c (patch) | |
tree | 9d4075b24d0498695a08b9a52bcfe3f80e5c4d2b /vp9/encoder | |
parent | 2c241e1192560721c39a7c2f5f045c756d0479a8 (diff) | |
parent | 5c96d3b82b985df06b586296ecac7ee5ba390b3d (diff) | |
download | libvpx-82ab8e7466094eb70f5e7df5a1cf6884d042780c.tar libvpx-82ab8e7466094eb70f5e7df5a1cf6884d042780c.tar.gz libvpx-82ab8e7466094eb70f5e7df5a1cf6884d042780c.tar.bz2 libvpx-82ab8e7466094eb70f5e7df5a1cf6884d042780c.zip |
Merge "Simplify rdmult computation"
Diffstat (limited to 'vp9/encoder')
-rw-r--r-- | vp9/encoder/vp9_encoder.c | 4 | ||||
-rw-r--r-- | vp9/encoder/vp9_rd.c | 23 | ||||
-rw-r--r-- | vp9/encoder/vp9_rd.h | 3 | ||||
-rw-r--r-- | vp9/encoder/vp9_temporal_filter.c | 3 |
4 files changed, 12 insertions, 21 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index 40c7a626e..b0ad5e334 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -6241,9 +6241,7 @@ void mc_flow_dispenser(VP9_COMP *cpi, GF_PICTURE *gf_picture, int frame_idx, xd->cur_buf = this_frame; // Get rd multiplier set up. - rdmult = - (int)vp9_compute_rd_mult_based_on_qindex(cpi, tpl_frame->base_qindex); - if (rdmult < 1) rdmult = 1; + rdmult = vp9_compute_rd_mult_based_on_qindex(cpi, tpl_frame->base_qindex); set_error_per_bit(&cpi->td.mb, rdmult); vp9_initialize_me_consts(cpi, &cpi->td.mb, tpl_frame->base_qindex); diff --git a/vp9/encoder/vp9_rd.c b/vp9/encoder/vp9_rd.c index d6ec96b82..e65cf42d8 100644 --- a/vp9/encoder/vp9_rd.c +++ b/vp9/encoder/vp9_rd.c @@ -173,27 +173,23 @@ static const int rd_boost_factor[16] = { 64, 32, 32, 32, 24, 16, 12, 12, static const int rd_frame_type_factor[FRAME_UPDATE_TYPES] = { 128, 144, 128, 128, 144, 144 }; -int64_t vp9_compute_rd_mult_based_on_qindex(const VP9_COMP *cpi, int qindex) { - const int64_t q = vp9_dc_quant(qindex, 0, cpi->common.bit_depth); +int vp9_compute_rd_mult_based_on_qindex(const VP9_COMP *cpi, int qindex) { + // largest dc_quant is 21387, therefore rdmult should always fit in int32_t + const int q = vp9_dc_quant(qindex, 0, cpi->common.bit_depth); + int rdmult = q * q; + rdmult = rdmult * 3 + (rdmult * 2 / 3); #if CONFIG_VP9_HIGHBITDEPTH - int64_t rdmult = 0; switch (cpi->common.bit_depth) { - case VPX_BITS_8: rdmult = 88 * q * q / 24; break; - case VPX_BITS_10: rdmult = ROUND_POWER_OF_TWO(88 * q * q / 24, 4); break; - default: - assert(cpi->common.bit_depth == VPX_BITS_12); - rdmult = ROUND_POWER_OF_TWO(88 * q * q / 24, 8); - break; + case VPX_BITS_10: rdmult = ROUND_POWER_OF_TWO(rdmult, 4); break; + case VPX_BITS_12: rdmult = ROUND_POWER_OF_TWO(rdmult, 8); break; + default: break; } -#else - int64_t rdmult = 88 * q * q / 24; #endif // CONFIG_VP9_HIGHBITDEPTH - return rdmult; + return rdmult > 0 ? rdmult : 1; } int vp9_compute_rd_mult(const VP9_COMP *cpi, int qindex) { int64_t rdmult = vp9_compute_rd_mult_based_on_qindex(cpi, qindex); - if (cpi->oxcf.pass == 2 && (cpi->common.frame_type != KEY_FRAME)) { const GF_GROUP *const gf_group = &cpi->twopass.gf_group; const FRAME_UPDATE_TYPE frame_type = gf_group->update_type[gf_group->index]; @@ -205,7 +201,6 @@ int vp9_compute_rd_mult(const VP9_COMP *cpi, int qindex) { rdmult = (rdmult * rd_frame_type_factor[frame_type]) >> 7; rdmult += ((rdmult * rd_boost_factor[boost_index]) >> 7); } - if (rdmult < 1) rdmult = 1; return (int)rdmult; } diff --git a/vp9/encoder/vp9_rd.h b/vp9/encoder/vp9_rd.h index a1a98bd91..fa85f2176 100644 --- a/vp9/encoder/vp9_rd.h +++ b/vp9/encoder/vp9_rd.h @@ -134,8 +134,7 @@ struct TileDataEnc; struct VP9_COMP; struct macroblock; -int64_t vp9_compute_rd_mult_based_on_qindex(const struct VP9_COMP *cpi, - int qindex); +int vp9_compute_rd_mult_based_on_qindex(const struct VP9_COMP *cpi, int qindex); int vp9_compute_rd_mult(const struct VP9_COMP *cpi, int qindex); diff --git a/vp9/encoder/vp9_temporal_filter.c b/vp9/encoder/vp9_temporal_filter.c index 5333e4cd4..4c1d8894b 100644 --- a/vp9/encoder/vp9_temporal_filter.c +++ b/vp9/encoder/vp9_temporal_filter.c @@ -952,8 +952,7 @@ void vp9_temporal_filter(VP9_COMP *cpi, int distance) { } // Initialize errorperbit and sabperbit. - rdmult = (int)vp9_compute_rd_mult_based_on_qindex(cpi, ARNR_FILT_QINDEX); - if (rdmult < 1) rdmult = 1; + rdmult = vp9_compute_rd_mult_based_on_qindex(cpi, ARNR_FILT_QINDEX); set_error_per_bit(&cpi->td.mb, rdmult); vp9_initialize_me_consts(cpi, &cpi->td.mb, ARNR_FILT_QINDEX); |