From eefe8692917bd4b1bcfafe4772ae81874e49fbc3 Mon Sep 17 00:00:00 2001 From: Jingning Han Date: Fri, 12 Dec 2014 14:33:52 -0800 Subject: [PATCH] Simplify rate-distortion modeling function Use left shift to replace one multiplication. The computation outcome remains identical. Change-Id: I1e1737af0a245de0d2a2bde10f0c171477199fc1 --- vp9/encoder/vp9_pickmode.c | 12 ++++++------ vp9/encoder/vp9_rd.c | 6 +++--- vp9/encoder/vp9_rdopt.c | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index b45032456..d5ab0cc6c 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -249,14 +249,14 @@ static void model_rd_for_sb_y(VP9_COMP *cpi, BLOCK_SIZE bsize, #if CONFIG_VP9_HIGHBITDEPTH if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { - vp9_model_rd_from_var_lapndz(sse - var, 1 << num_pels_log2_lookup[bsize], + vp9_model_rd_from_var_lapndz(sse - var, num_pels_log2_lookup[bsize], dc_quant >> (xd->bd - 5), &rate, &dist); } else { - vp9_model_rd_from_var_lapndz(sse - var, 1 << num_pels_log2_lookup[bsize], + vp9_model_rd_from_var_lapndz(sse - var, num_pels_log2_lookup[bsize], dc_quant >> 3, &rate, &dist); } #else - vp9_model_rd_from_var_lapndz(sse - var, 1 << num_pels_log2_lookup[bsize], + vp9_model_rd_from_var_lapndz(sse - var, num_pels_log2_lookup[bsize], dc_quant >> 3, &rate, &dist); #endif // CONFIG_VP9_HIGHBITDEPTH @@ -265,14 +265,14 @@ static void model_rd_for_sb_y(VP9_COMP *cpi, BLOCK_SIZE bsize, #if CONFIG_VP9_HIGHBITDEPTH if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { - vp9_model_rd_from_var_lapndz(var, 1 << num_pels_log2_lookup[bsize], + vp9_model_rd_from_var_lapndz(var, num_pels_log2_lookup[bsize], ac_quant >> (xd->bd - 5), &rate, &dist); } else { - vp9_model_rd_from_var_lapndz(var, 1 << num_pels_log2_lookup[bsize], + vp9_model_rd_from_var_lapndz(var, num_pels_log2_lookup[bsize], ac_quant >> 3, &rate, &dist); } #else - vp9_model_rd_from_var_lapndz(var, 1 << num_pels_log2_lookup[bsize], + vp9_model_rd_from_var_lapndz(var, num_pels_log2_lookup[bsize], ac_quant >> 3, &rate, &dist); #endif // CONFIG_VP9_HIGHBITDEPTH diff --git a/vp9/encoder/vp9_rd.c b/vp9/encoder/vp9_rd.c index 5b49bfc17..34d49f058 100644 --- a/vp9/encoder/vp9_rd.c +++ b/vp9/encoder/vp9_rd.c @@ -379,7 +379,7 @@ static void model_rd_norm(int xsq_q10, int *r_q10, int *d_q10) { *d_q10 = (dist_tab_q10[xq] * b_q10 + dist_tab_q10[xq + 1] * a_q10) >> 10; } -void vp9_model_rd_from_var_lapndz(unsigned int var, unsigned int n, +void vp9_model_rd_from_var_lapndz(unsigned int var, unsigned int n_log2, unsigned int qstep, int *rate, int64_t *dist) { // This function models the rate and distortion for a Laplacian @@ -395,10 +395,10 @@ void vp9_model_rd_from_var_lapndz(unsigned int var, unsigned int n, int d_q10, r_q10; static const uint32_t MAX_XSQ_Q10 = 245727; const uint64_t xsq_q10_64 = - ((((uint64_t)qstep * qstep * n) << 10) + (var >> 1)) / var; + (((uint64_t)qstep * qstep << (n_log2 + 10)) + (var >> 1)) / var; const int xsq_q10 = (int)MIN(xsq_q10_64, MAX_XSQ_Q10); model_rd_norm(xsq_q10, &r_q10, &d_q10); - *rate = (n * r_q10 + 2) >> 2; + *rate = ((r_q10 << n_log2) + 2) >> 2; *dist = (var * (int64_t)d_q10 + 512) >> 10; } } diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c index c47dccd7f..bc5edc815 100644 --- a/vp9/encoder/vp9_rdopt.c +++ b/vp9/encoder/vp9_rdopt.c @@ -265,15 +265,15 @@ static void model_rd_for_sb(VP9_COMP *cpi, BLOCK_SIZE bsize, } else { #if CONFIG_VP9_HIGHBITDEPTH if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { - vp9_model_rd_from_var_lapndz(sum_sse, 1 << num_pels_log2_lookup[bs], + vp9_model_rd_from_var_lapndz(sum_sse, num_pels_log2_lookup[bs], pd->dequant[1] >> (xd->bd - 5), &rate, &dist); } else { - vp9_model_rd_from_var_lapndz(sum_sse, 1 << num_pels_log2_lookup[bs], + vp9_model_rd_from_var_lapndz(sum_sse, num_pels_log2_lookup[bs], pd->dequant[1] >> 3, &rate, &dist); } #else - vp9_model_rd_from_var_lapndz(sum_sse, 1 << num_pels_log2_lookup[bs], + vp9_model_rd_from_var_lapndz(sum_sse, num_pels_log2_lookup[bs], pd->dequant[1] >> 3, &rate, &dist); #endif // CONFIG_VP9_HIGHBITDEPTH rate_sum += rate;