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
This commit is contained in:
Yaowu Xu 2011-01-25 22:24:22 -08:00
parent 907e98fbb5
commit 999e155f55
2 changed files with 6 additions and 3 deletions

View File

@ -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];

View File

@ -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)