summaryrefslogtreecommitdiff
path: root/vp8/encoder
diff options
context:
space:
mode:
authorPaul Wilkins <paulwilkins@google.com>2010-07-01 01:53:40 -0700
committerCode Review <code-review@webmproject.org>2010-07-01 01:53:40 -0700
commit2e3d8d3263fb5b7ef27ca7b9bb3bf192f029370c (patch)
treecdccedcfa62cb0bd5630c8446f7a8a3c3af63372 /vp8/encoder
parent3e9af0fb68e83cd44bbdd04af343af06e55ceb9b (diff)
parent1ca39bf26dd114f224ce67f1f3f85076cdafaacc (diff)
downloadlibvpx-2e3d8d3263fb5b7ef27ca7b9bb3bf192f029370c.tar
libvpx-2e3d8d3263fb5b7ef27ca7b9bb3bf192f029370c.tar.gz
libvpx-2e3d8d3263fb5b7ef27ca7b9bb3bf192f029370c.tar.bz2
libvpx-2e3d8d3263fb5b7ef27ca7b9bb3bf192f029370c.zip
Merge "Further adjustment of RD behaviour with Q and Zbin."
Diffstat (limited to 'vp8/encoder')
-rw-r--r--vp8/encoder/rdopt.c40
1 files changed, 21 insertions, 19 deletions
diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c
index 70cf122fa..65dbd8d8e 100644
--- a/vp8/encoder/rdopt.c
+++ b/vp8/encoder/rdopt.c
@@ -231,18 +231,29 @@ void vp8_initialize_rd_consts(VP8_COMP *cpi, int Qvalue)
int i;
int *thresh;
int threshmult;
-
- int capped_q = (Qvalue < 160) ? Qvalue : 160;
+ double capped_q = (Qvalue < 160) ? (double)Qvalue : 160.0;
+ double rdconst = 3.00;
vp8_clear_system_state(); //__asm emms;
- cpi->RDMULT = (int)( (0.0001 * (capped_q * capped_q * capped_q * capped_q))
- -(0.015 * (capped_q * capped_q * capped_q))
- +(3.25 * (capped_q * capped_q))
- -(17.5 * capped_q) + 125.0);
+ // Further tests required to see if optimum is different
+ // for key frames, golden frames and arf frames.
+ // if (cpi->common.refresh_golden_frame ||
+ // cpi->common.refresh_alt_ref_frame)
+ cpi->RDMULT = (int)(rdconst * (capped_q * capped_q));
- if (cpi->RDMULT < 125)
- cpi->RDMULT = 125;
+ // Extend rate multiplier along side quantizer zbin increases
+ if (cpi->zbin_over_quant > 0)
+ {
+ double oq_factor;
+ double modq;
+
+ // Experimental code using the same basic equation as used for Q above
+ // The units of cpi->zbin_over_quant are 1/128 of Q bin size
+ oq_factor = 1.0 + ((double)0.0015625 * cpi->zbin_over_quant);
+ modq = (int)((double)capped_q * oq_factor);
+ cpi->RDMULT = (int)(rdconst * (modq * modq));
+ }
if (cpi->pass == 2 && (cpi->common.frame_type != KEY_FRAME))
{
@@ -252,17 +263,8 @@ void vp8_initialize_rd_consts(VP8_COMP *cpi, int Qvalue)
cpi->RDMULT += (cpi->RDMULT * rd_iifactor[cpi->next_iiratio]) >> 4;
}
-
- // Extend rate multiplier along side quantizer zbin increases
- if (cpi->zbin_over_quant > 0)
- {
- double oq_factor = pow(1.006, cpi->zbin_over_quant);
-
- if (oq_factor > (1.0 + ((double)cpi->zbin_over_quant / 64.0)))
- oq_factor = (1.0 + (double)cpi->zbin_over_quant / 64.0);
-
- cpi->RDMULT = (int)(oq_factor * cpi->RDMULT);
- }
+ if (cpi->RDMULT < 125)
+ cpi->RDMULT = 125;
cpi->mb.errorperbit = (cpi->RDMULT / 100);