diff options
author | Deb Mukherjee <debargha@google.com> | 2014-05-22 13:49:17 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2014-05-22 13:49:17 -0700 |
commit | cebb03c39b5a75cc2fa2a4b2af73bb1063b7ff04 (patch) | |
tree | 451b790cdf808b366dbf910653a7c30425a01b1e /vp9 | |
parent | f738895099351a4d42a0b637934747fd5d9ac74b (diff) | |
parent | 53f1452f5d104155b32ccac0af80ef8a85fe70c5 (diff) | |
download | libvpx-cebb03c39b5a75cc2fa2a4b2af73bb1063b7ff04.tar libvpx-cebb03c39b5a75cc2fa2a4b2af73bb1063b7ff04.tar.gz libvpx-cebb03c39b5a75cc2fa2a4b2af73bb1063b7ff04.tar.bz2 libvpx-cebb03c39b5a75cc2fa2a4b2af73bb1063b7ff04.zip |
Merge "Adjust cq_level in constrained quality mode"
Diffstat (limited to 'vp9')
-rw-r--r-- | vp9/encoder/vp9_ratectrl.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/vp9/encoder/vp9_ratectrl.c b/vp9/encoder/vp9_ratectrl.c index a04622c8c..af889e366 100644 --- a/vp9/encoder/vp9_ratectrl.c +++ b/vp9/encoder/vp9_ratectrl.c @@ -607,13 +607,26 @@ static int rc_pick_q_and_bounds_one_pass_cbr(const VP9_COMP *cpi, return q; } +static int get_active_cq_level(const RATE_CONTROL *rc, + const VP9EncoderConfig *const oxcf) { + static const double cq_adjust_threshold = 0.5; + int active_cq_level = oxcf->cq_level; + if (oxcf->rc_mode == RC_MODE_CONSTRAINED_QUALITY) { + const double x = rc->total_actual_bits / rc->total_target_bits; + if (x < cq_adjust_threshold) { + active_cq_level = active_cq_level * x / cq_adjust_threshold; + } + } + return active_cq_level; +} + static int rc_pick_q_and_bounds_one_pass_vbr(const VP9_COMP *cpi, int *bottom_index, int *top_index) { const VP9_COMMON *const cm = &cpi->common; const RATE_CONTROL *const rc = &cpi->rc; const VP9EncoderConfig *const oxcf = &cpi->oxcf; - const int cq_level = oxcf->cq_level; + const int cq_level = get_active_cq_level(rc, oxcf); int active_best_quality; int active_worst_quality = calc_active_worst_quality_one_pass_vbr(cpi); int q; @@ -791,7 +804,7 @@ static int rc_pick_q_and_bounds_two_pass(const VP9_COMP *cpi, const VP9_COMMON *const cm = &cpi->common; const RATE_CONTROL *const rc = &cpi->rc; const VP9EncoderConfig *const oxcf = &cpi->oxcf; - const int cq_level = oxcf->cq_level; + const int cq_level = get_active_cq_level(rc, oxcf); int active_best_quality; int active_worst_quality = cpi->twopass.active_worst_quality; int q; |