summaryrefslogtreecommitdiff
path: root/vp9/encoder
diff options
context:
space:
mode:
authorJingning Han <jingning@google.com>2018-11-26 09:43:07 -0800
committerJingning Han <jingning@google.com>2018-11-26 14:12:55 -0800
commit8d9b1a7d82f691cc4f0afca6bfaadcc8d818ac26 (patch)
treefd64d21efb072fab154f6e7cd7c5e34f9058bf5d /vp9/encoder
parent314641e29816f7ec8079135291baa6ab3b2d7e83 (diff)
downloadlibvpx-8d9b1a7d82f691cc4f0afca6bfaadcc8d818ac26.tar
libvpx-8d9b1a7d82f691cc4f0afca6bfaadcc8d818ac26.tar.gz
libvpx-8d9b1a7d82f691cc4f0afca6bfaadcc8d818ac26.tar.bz2
libvpx-8d9b1a7d82f691cc4f0afca6bfaadcc8d818ac26.zip
Fix ARF rate allocation for cq mode
In the limited test set, it improves the cq mode compression performance by 1.9% in PSNR and 6% in SSIM as compared to use same quantization parameter for all ARFs. Change-Id: I35c4d7097b5838ab0b92d7f9937520721e3bb84b
Diffstat (limited to 'vp9/encoder')
-rw-r--r--vp9/encoder/vp9_ratectrl.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_ratectrl.c b/vp9/encoder/vp9_ratectrl.c
index 779529b24..d081f1a49 100644
--- a/vp9/encoder/vp9_ratectrl.c
+++ b/vp9/encoder/vp9_ratectrl.c
@@ -1364,6 +1364,16 @@ static int rc_pick_q_and_bounds_two_pass(const VP9_COMP *cpi, int *bottom_index,
// Constrained quality use slightly lower active best.
active_best_quality = active_best_quality * 15 / 16;
+ // Modify best quality for second level arfs. For mode VPX_Q this
+ // becomes the baseline frame q.
+ if (gf_group->rf_level[gf_group_index] == GF_ARF_LOW) {
+ const int layer_depth = gf_group->layer_depth[gf_group_index];
+ // linearly fit the frame q depending on the layer depth index from
+ // the base layer ARF.
+ active_best_quality =
+ ((layer_depth - 1) * q + active_best_quality + layer_depth / 2) /
+ layer_depth;
+ }
} else if (oxcf->rc_mode == VPX_Q) {
if (!cpi->refresh_alt_ref_frame) {
active_best_quality = cq_level;