From: Yaowu Xu Date: Wed, 26 Jan 2011 06:24:22 +0000 (-0800) Subject: cap the best quantizer for 2nd order DC X-Git-Tag: v0.9.6~84^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=999e155f55f07238e9900d4ec25ff4ac311a5f92;p=libvpx cap the best quantizer for 2nd order DC This commit also removes artificial RDMULT cap for low quantizers. The intention is to address some abnormal behavior of mode selections at the low quantizer end, where many macroblocks were coded with SPLITMV with all partitions using same motion vector including (0,0). This change improves the compression quality substantially for high quality encodings in both PSNR and SSIM terms. Overall effect on mid/low rate range is also positive for all metrics, but smaller in magnitude. Change-Id: I864b29c4bd9ff610d2545fa94a19cc7e80c02667 --- diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c index 900785364..77cec7373 100644 --- a/vp8/encoder/onyx_if.c +++ b/vp8/encoder/onyx_if.c @@ -3127,6 +3127,10 @@ static void set_quantizer(VP8_COMP *cpi, int Q) cm->uvdc_delta_q = 0; cm->uvac_delta_q = 0; + if(Q<4) + { + cm->y2dc_delta_q = 4-Q; + } // Set Segment specific quatizers mbd->segment_feature_data[MB_LVL_ALT_Q][0] = cpi->segment_feature_data[MB_LVL_ALT_Q][0]; mbd->segment_feature_data[MB_LVL_ALT_Q][1] = cpi->segment_feature_data[MB_LVL_ALT_Q][1]; diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c index 3b898f1b2..36420aad1 100644 --- a/vp8/encoder/rdopt.c +++ b/vp8/encoder/rdopt.c @@ -243,10 +243,9 @@ void vp8_initialize_rd_consts(VP8_COMP *cpi, int Qvalue) cpi->RDMULT += (cpi->RDMULT * rd_iifactor[cpi->next_iiratio]) >> 4; } - if (cpi->RDMULT < 125) - cpi->RDMULT = 125; - cpi->mb.errorperbit = (cpi->RDMULT / 100); + cpi->mb.errorperbit += (cpi->mb.errorperbit==0); + vp8_set_speed_features(cpi); if (cpi->common.simpler_lpf)