Commit 2b426969 authored by Guillaume Martres's avatar Guillaume Martres
Browse files

Simplify RDMULT and RDDIV derivation

Don't divide RDMULT and RDDIV by 100 when RDMULT > 1000. This was
probably done to avoid overflow when the rd cost was stored in a 32 bits
integer but this is not the case anymore. This change will make it easier
to support multiple quantizers per frame.

derf compression gain at speed 0: 0.037%

Change-Id: Ibeeb9b7cfa1a132a7af41bc90fc07a3bba0857f6
parent 831d72ac
......@@ -186,6 +186,7 @@ void vp9_initialize_rd_consts(VP9_COMP *cpi, int qindex) {
// cpi->common.refresh_alt_ref_frame)
qindex = clamp(qindex, 0, MAXQ);
cpi->RDDIV = 100;
cpi->RDMULT = compute_rd_mult(qindex);
if (cpi->pass == 2 && (cpi->common.frame_type != KEY_FRAME)) {
if (cpi->twopass.next_iiratio > 31)
......@@ -204,29 +205,6 @@ void vp9_initialize_rd_consts(VP9_COMP *cpi, int qindex) {
if (q < 8)
q = 8;
if (cpi->RDMULT > 1000) {
cpi->RDDIV = 1;
cpi->RDMULT /= 100;
for (bsize = 0; bsize < BLOCK_SIZES; ++bsize) {
for (i = 0; i < MAX_MODES; ++i) {
// Threshold here seem unecessarily harsh but fine given actual
// range of values used for cpi->sf.thresh_mult[]
int thresh_max = INT_MAX / (q * rd_thresh_block_size_factor[bsize]);
// *4 relates to the scaling of rd_thresh_block_size_factor[]
if ((int64_t)cpi->sf.thresh_mult[i] < thresh_max) {
cpi->rd_threshes[bsize][i] =
cpi->sf.thresh_mult[i] * q *
rd_thresh_block_size_factor[bsize] / (4 * 100);
} else {
cpi->rd_threshes[bsize][i] = INT_MAX;
}
}
}
} else {
cpi->RDDIV = 100;
for (bsize = 0; bsize < BLOCK_SIZES; ++bsize) {
for (i = 0; i < MAX_MODES; i++) {
// Threshold here seem unecessarily harsh but fine given actual
......@@ -242,7 +220,6 @@ void vp9_initialize_rd_consts(VP9_COMP *cpi, int qindex) {
}
}
}
}
fill_token_costs(cpi->mb.token_costs, cpi->common.fc.coef_probs);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment