diff options
author | Yaowu Xu <yaowu@google.com> | 2018-12-07 22:53:43 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-12-07 22:53:43 +0000 |
commit | 3338c878a7704ddd32877e0ed0e8ff9e10777dfd (patch) | |
tree | 61e004a1ef5352b5ea03d9d747953cb9b37c45d2 /vp9 | |
parent | a46bb83e0c0d9592a20e000e843f36c117c96f13 (diff) | |
parent | 93488acda641c74bdc0f606cd4086b021e733f84 (diff) | |
download | libvpx-3338c878a7704ddd32877e0ed0e8ff9e10777dfd.tar libvpx-3338c878a7704ddd32877e0ed0e8ff9e10777dfd.tar.gz libvpx-3338c878a7704ddd32877e0ed0e8ff9e10777dfd.tar.bz2 libvpx-3338c878a7704ddd32877e0ed0e8ff9e10777dfd.zip |
Merge "Optimize RDMult"
Diffstat (limited to 'vp9')
-rw-r--r-- | vp9/encoder/vp9_rd.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/vp9/encoder/vp9_rd.c b/vp9/encoder/vp9_rd.c index 18b74f57b..c01e5f81b 100644 --- a/vp9/encoder/vp9_rd.c +++ b/vp9/encoder/vp9_rd.c @@ -176,8 +176,27 @@ static const int rd_frame_type_factor[FRAME_UPDATE_TYPES] = { 128, 144, 128, 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); + uint32_t rdmult = q * q; + + if (cpi->common.frame_type != KEY_FRAME) { + if (qindex < 1) + rdmult = rdmult * 3 + (rdmult * 2 / 3); + else if (qindex < 128) + rdmult = rdmult * 4; + else if (qindex < 190) + rdmult = rdmult * 4 + rdmult / 2; + else + rdmult = rdmult * 3; + } else { + if (qindex < 64) + rdmult = rdmult * 4; + else if (qindex <= 128) + rdmult = rdmult * 3 + rdmult / 2; + else if (qindex < 190) + rdmult = rdmult * 4 + rdmult / 2; + else + rdmult = rdmult * 7 + rdmult / 2; + } #if CONFIG_VP9_HIGHBITDEPTH switch (cpi->common.bit_depth) { case VPX_BITS_10: rdmult = ROUND_POWER_OF_TWO(rdmult, 4); break; |