diff options
author | Marco <marpan@google.com> | 2016-12-05 12:05:35 -0800 |
---|---|---|
committer | Marco <marpan@google.com> | 2016-12-05 12:42:56 -0800 |
commit | 360ac89885b9e21442f8e5e2f63206da4cc6f605 (patch) | |
tree | 77c0ff52b9ad8f067c9bbc5616d262e4e3f90451 /vp9/encoder/vp9_aq_cyclicrefresh.c | |
parent | a8eee97b43b532c9ee35280bfdf910ab468004a4 (diff) | |
download | libvpx-360ac89885b9e21442f8e5e2f63206da4cc6f605.tar libvpx-360ac89885b9e21442f8e5e2f63206da4cc6f605.tar.gz libvpx-360ac89885b9e21442f8e5e2f63206da4cc6f605.tar.bz2 libvpx-360ac89885b9e21442f8e5e2f63206da4cc6f605.zip |
vp9: Adjust the weight factor for segment rate cost for aq-mode=3.
Use the segment weight factor based on the target (cr->percent_refresh)
if it less than the current estimate (avergae of past usage and target).
Small improvement at low bitrates.
Change-Id: Iba8fd909e203f94458901366d3a991f7ea854d49
Diffstat (limited to 'vp9/encoder/vp9_aq_cyclicrefresh.c')
-rw-r--r-- | vp9/encoder/vp9_aq_cyclicrefresh.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/vp9/encoder/vp9_aq_cyclicrefresh.c b/vp9/encoder/vp9_aq_cyclicrefresh.c index 3149fe407..3dc88b191 100644 --- a/vp9/encoder/vp9_aq_cyclicrefresh.c +++ b/vp9/encoder/vp9_aq_cyclicrefresh.c @@ -128,16 +128,20 @@ int vp9_cyclic_refresh_rc_bits_per_mb(const VP9_COMP *cpi, int i, CYCLIC_REFRESH *const cr = cpi->cyclic_refresh; int bits_per_mb; int num8x8bl = cm->MBs << 2; + // Compute delta-q corresponding to qindex i. + int deltaq = compute_deltaq(cpi, i, cr->rate_ratio_qdelta); // Weight for segment prior to encoding: take the average of the target // number for the frame to be encoded and the actual from the previous frame. + // Use the target if its less. int target_refresh = cr->percent_refresh * cm->mi_rows * cm->mi_cols / 100; + double weight_segment_target = (double)(target_refresh) / num8x8bl; double weight_segment = (double)((target_refresh + cr->actual_num_seg1_blocks + cr->actual_num_seg2_blocks) >> 1) / num8x8bl; - // Compute delta-q corresponding to qindex i. - int deltaq = compute_deltaq(cpi, i, cr->rate_ratio_qdelta); + if (weight_segment_target < 7 * weight_segment / 8) + weight_segment = weight_segment_target; // Take segment weighted average for bits per mb. bits_per_mb = (int)((1.0 - weight_segment) * vp9_rc_bits_per_mb(cm->frame_type, i, |