]> granicus.if.org Git - libvpx/commitdiff
cap the best quantizer for 2nd order DC
authorYaowu Xu <yaowu@google.com>
Wed, 26 Jan 2011 06:24:22 +0000 (22:24 -0800)
committerYaowu Xu <yaowu@google.com>
Wed, 26 Jan 2011 06:26:18 +0000 (22:26 -0800)
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

vp8/encoder/onyx_if.c
vp8/encoder/rdopt.c

index 9007853643e6a5c217be1e69b3dc986ae07edb40..77cec737392ba358651de2b4807898c1eb990dcb 100644 (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];
index 3b898f1b273e533242246a3c42bfe589d5e55e6a..36420aad137336232d89d17c32b8458f9700a7a8 100644 (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)