| Index: source/libvpx/vp9/encoder/vp9_rd.c
|
| ===================================================================
|
| --- source/libvpx/vp9/encoder/vp9_rd.c (revision 284462)
|
| +++ source/libvpx/vp9/encoder/vp9_rd.c (working copy)
|
| @@ -92,13 +92,6 @@
|
| }
|
| }
|
|
|
| -static const uint8_t rd_iifactor[32] = {
|
| - 4, 4, 3, 2, 1, 0, 0, 0,
|
| - 0, 0, 0, 0, 0, 0, 0, 0,
|
| - 0, 0, 0, 0, 0, 0, 0, 0,
|
| - 0, 0, 0, 0, 0, 0, 0, 0,
|
| -};
|
| -
|
| // Values are now correlated to quantizer.
|
| static int sad_per_bit16lut[QINDEX_RANGE];
|
| static int sad_per_bit4lut[QINDEX_RANGE];
|
| @@ -116,15 +109,25 @@
|
| }
|
| }
|
|
|
| +static const int rd_boost_factor[16] = {
|
| + 64, 32, 32, 32, 24, 16, 12, 12,
|
| + 8, 8, 4, 4, 2, 2, 1, 0
|
| +};
|
| +static const int rd_frame_type_factor[FRAME_UPDATE_TYPES] = {
|
| +128, 144, 128, 128, 144
|
| +};
|
| +
|
| int vp9_compute_rd_mult(const VP9_COMP *cpi, int qindex) {
|
| const int q = vp9_dc_quant(qindex, 0);
|
| - // TODO(debargha): Adjust the function below.
|
| - int rdmult = 88 * q * q / 25;
|
| + int rdmult = 88 * q * q / 24;
|
| +
|
| if (cpi->pass == 2 && (cpi->common.frame_type != KEY_FRAME)) {
|
| - if (cpi->twopass.next_iiratio > 31)
|
| - rdmult += (rdmult * rd_iifactor[31]) >> 4;
|
| - else
|
| - rdmult += (rdmult * rd_iifactor[cpi->twopass.next_iiratio]) >> 4;
|
| + const GF_GROUP *const gf_group = &cpi->twopass.gf_group;
|
| + const FRAME_UPDATE_TYPE frame_type = gf_group->update_type[gf_group->index];
|
| + const int boost_index = MIN(15, (cpi->rc.gfu_boost / 100));
|
| +
|
| + rdmult = (rdmult * rd_frame_type_factor[frame_type]) >> 7;
|
| + rdmult += ((rdmult * rd_boost_factor[boost_index]) >> 7);
|
| }
|
| return rdmult;
|
| }
|
|
|