summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
authorDeb Mukherjee <debargha@google.com>2013-10-11 13:53:59 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2013-10-11 13:53:59 -0700
commitc222b96bfd5f834ef7075111314a7dfa68b39cb7 (patch)
tree1170eaf5ecd3b56f6f01f3b1be59d0147f0cd930 /vp9
parent1ab7eb1406d63cdeb4de3007fc3bfa0eca1651b5 (diff)
parentd9655e42b84a405a291ad142df748cc7e0364916 (diff)
downloadlibvpx-c222b96bfd5f834ef7075111314a7dfa68b39cb7.tar
libvpx-c222b96bfd5f834ef7075111314a7dfa68b39cb7.tar.gz
libvpx-c222b96bfd5f834ef7075111314a7dfa68b39cb7.tar.bz2
libvpx-c222b96bfd5f834ef7075111314a7dfa68b39cb7.zip
Merge "Change in rddiv parameter to make it a power of 2"
Diffstat (limited to 'vp9')
-rw-r--r--vp9/encoder/vp9_rdopt.c21
-rw-r--r--vp9/encoder/vp9_rdopt.h4
2 files changed, 18 insertions, 7 deletions
diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c
index a1be62623..c85535beb 100644
--- a/vp9/encoder/vp9_rdopt.c
+++ b/vp9/encoder/vp9_rdopt.c
@@ -110,6 +110,7 @@ static int rd_thresh_block_size_factor[BLOCK_SIZES] =
#define RD_THRESH_MAX_FACT 64
#define RD_THRESH_INC 1
#define RD_THRESH_POW 1.25
+#define RD_MULT_EPB_RATIO 64
#define MV_COST_WEIGHT 108
#define MV_COST_WEIGHT_SUB 120
@@ -162,7 +163,17 @@ void vp9_init_me_luts() {
static int compute_rd_mult(int qindex) {
const int q = vp9_dc_quant(qindex, 0);
- return (11 * q * q) >> 2;
+ // TODO(debargha): Adjust the function below
+ return (88 * q * q / 25);
+}
+
+static int compute_rd_thresh_factor(int qindex) {
+ int q;
+ // TODO(debargha): Adjust the function below
+ q = (int)(pow(vp9_dc_quant(qindex, 0) / 4.0, RD_THRESH_POW) * 5.12);
+ if (q < 8)
+ q = 8;
+ return q;
}
void vp9_initialize_me_consts(VP9_COMP *cpi, int qindex) {
@@ -172,9 +183,7 @@ void vp9_initialize_me_consts(VP9_COMP *cpi, int qindex) {
static void set_block_thresholds(VP9_COMP *cpi, int qindex) {
int q, i, bsize;
- q = ((int)pow(vp9_dc_quant(qindex, 0) >> 2, RD_THRESH_POW)) << 2;
- if (q < 8)
- q = 8;
+ q = compute_rd_thresh_factor(qindex);
for (bsize = 0; bsize < BLOCK_SIZES; ++bsize) {
for (i = 0; i < MAX_MODES; ++i) {
@@ -216,7 +225,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->RDDIV = RDDIV_BITS; // in bits (to multiply D by 128)
cpi->RDMULT = compute_rd_mult(qindex);
if (cpi->pass == 2 && (cpi->common.frame_type != KEY_FRAME)) {
if (cpi->twopass.next_iiratio > 31)
@@ -225,7 +234,7 @@ void vp9_initialize_rd_consts(VP9_COMP *cpi, int qindex) {
cpi->RDMULT +=
(cpi->RDMULT * rd_iifactor[cpi->twopass.next_iiratio]) >> 4;
}
- cpi->mb.errorperbit = cpi->RDMULT >> 6;
+ cpi->mb.errorperbit = cpi->RDMULT / RD_MULT_EPB_RATIO;
cpi->mb.errorperbit += (cpi->mb.errorperbit == 0);
vp9_set_speed_features(cpi);
diff --git a/vp9/encoder/vp9_rdopt.h b/vp9/encoder/vp9_rdopt.h
index c86ea2723..aa4068d76 100644
--- a/vp9/encoder/vp9_rdopt.h
+++ b/vp9/encoder/vp9_rdopt.h
@@ -12,8 +12,10 @@
#ifndef VP9_ENCODER_VP9_RDOPT_H_
#define VP9_ENCODER_VP9_RDOPT_H_
+#define RDDIV_BITS 7
+
#define RDCOST(RM, DM, R, D) \
- (((128 + ((int64_t)R) * (RM)) >> 8) + ((int64_t)DM) * (D))
+ (((128 + ((int64_t)R) * (RM)) >> 8) + (D << DM))
#define QIDX_SKIP_THRESH 115
void vp9_initialize_rd_consts(VP9_COMP *cpi, int qindex);