ref: f4b5076ad38acfc49f35cc294d12072e7537dc3d
parent: 3d7e2677dfc4c4cd9c508e905e0800f449f9c3e5
author: Marco <[email protected]>
date: Fri Apr 29 11:52:45 EDT 2016
vp9: Reduce qp threshold for limiting cyclic refresh on steady blocks. Makes the delta-qp stop little earlier on areas that have been refreshed enough. This helps to reduce some pulsing artifact on noisy flat areas observed in some noisy vc-clips. Threshold changes only take effect for sources where noise level is estimated to be >= medium level. Only affects 1 pass CBR, non-screen content case. Change-Id: Iacf557f6aa8abbcd6782c02ff2e6c14891960850
--- a/vp9/encoder/vp9_aq_cyclicrefresh.c
+++ b/vp9/encoder/vp9_aq_cyclicrefresh.c
@@ -393,13 +393,18 @@
cr->target_num_seg_blocks = 0;
if (cpi->oxcf.content != VP9E_CONTENT_SCREEN) {
consec_zero_mv_thresh = 100;
- if (cpi->noise_estimate.enabled && cpi->noise_estimate.level >= kMedium)
- consec_zero_mv_thresh = 80;
}
qindex_thresh =
cpi->oxcf.content == VP9E_CONTENT_SCREEN
? vp9_get_qindex(&cm->seg, CR_SEGMENT_ID_BOOST2, cm->base_qindex)
: vp9_get_qindex(&cm->seg, CR_SEGMENT_ID_BOOST1, cm->base_qindex);
+ // More aggressive settings for noisy content.
+ if (cpi->noise_estimate.enabled && cpi->noise_estimate.level >= kMedium) {
+ consec_zero_mv_thresh = 80;
+ qindex_thresh =
+ VPXMAX(vp9_get_qindex(&cm->seg, CR_SEGMENT_ID_BOOST1, cm->base_qindex),
+ 7 * cm->base_qindex >> 3);
+ }
do {
int sum_map = 0;
// Get the mi_row/mi_col corresponding to superblock index i.
@@ -463,6 +468,8 @@
cr->percent_refresh = 5;
cr->max_qdelta_perc = 50;
cr->time_for_refresh = 0;
+ cr->motion_thresh = 32;
+ cr->rate_boost_fac = 15;
// Use larger delta-qp (increase rate_ratio_qdelta) for first few (~4)
// periods of the refresh cycle, after a key frame.
// Account for larger interval on base layer for temporal layers.
@@ -472,9 +479,11 @@
cr->rate_ratio_qdelta = 3.0;
} else {
cr->rate_ratio_qdelta = 2.0;
- if (cpi->noise_estimate.enabled && cpi->noise_estimate.level >= kMedium)
- // Reduce the delta-qp if the estimated source noise is above threshold.
- cr->rate_ratio_qdelta = 1.5;
+ if (cpi->noise_estimate.enabled && cpi->noise_estimate.level >= kMedium) {
+ // Reduce the delta-qp if the estimated source noise is above threshold.
+ cr->rate_ratio_qdelta = 1.7;
+ cr->rate_boost_fac = 13;
+ }
}
// Adjust some parameters for low resolutions at low bitrates.
if (cm->width <= 352 &&
@@ -482,9 +491,6 @@
rc->avg_frame_bandwidth < 3400) {
cr->motion_thresh = 4;
cr->rate_boost_fac = 10;
- } else {
- cr->motion_thresh = 32;
- cr->rate_boost_fac = 15;
}
if (cpi->svc.spatial_layer_id > 0) {
cr->motion_thresh = 4;