]> granicus.if.org Git - libvpx/commitdiff
scaled the threshold for 2nd order coefficient reset
authorYaowu Xu <yaowu@google.com>
Thu, 10 Nov 2011 15:40:44 +0000 (07:40 -0800)
committerYaowu Xu <yaowu@google.com>
Thu, 10 Nov 2011 16:31:13 +0000 (08:31 -0800)
extend_qrange introduces a different scaling factor, this commit takes
the scaling difference into account for reset 2nd order coefficients.

Change-Id: Ie58bca9f52698fa759e3f88da2aa4d82630fa91a

vp8/encoder/encodemb.c

index 8818156d49a4a36809f634557405e1312b86433d..0711a1468a9db71ee9b234cc36cd278f29d65b3b 100644 (file)
@@ -615,33 +615,48 @@ static void optimize_b(MACROBLOCK *mb, int ib, int type,
     *a = *l = (d->eob != !type);
 }
 
+#if CONFIG_EXTEND_QRANGE
+    /**************************************************************************
+    our inverse hadamard transform effectively is weighted sum of all 16 inputs
+    with weight either 1 or -1. It has a last stage scaling of (sum+1)>>2. And
+    dc only idct is (dc+16)>>5. So if all the sums are between -65 and 63 the
+    output after inverse wht and idct will be all zero. A sum of absolute value
+    smaller than 65 guarantees all 16 different (+1/-1) weighted sums in wht
+    fall between -65 and +65.
+    **************************************************************************/
+#define SUM_2ND_COEFF_THRESH 65
+#else
+    /**************************************************************************
+    our inverse hadamard transform effectively is weighted sum of all 16 inputs
+    with weight either 1 or -1. It has a last stage scaling of (sum+3)>>3. And
+    dc only idct is (dc+4)>>3. So if all the sums are between -35 and 29, the
+    output after inverse wht and idct will be all zero. A sum of absolute value
+    smaller than 35 guarantees all 16 different (+1/-1) weighted sums in wht
+    fall between -35 and +35.
+    **************************************************************************/
+#define SUM_2ND_COEFF_THRESH 35
+
+#endif
+
 static void check_reset_2nd_coeffs(MACROBLOCKD *x, int type,
                                    ENTROPY_CONTEXT *a, ENTROPY_CONTEXT *l)
 {
     int sum=0;
     int i;
     BLOCKD *bd = &x->block[24];
-
-    if(bd->dequant[0]>=35 && bd->dequant[1]>=35)
+    if(bd->dequant[0]>=SUM_2ND_COEFF_THRESH
+        && bd->dequant[1]>=SUM_2ND_COEFF_THRESH)
         return;
 
     for(i=0;i<bd->eob;i++)
     {
         int coef = bd->dqcoeff[vp8_default_zig_zag1d[i]];
         sum+= (coef>=0)?coef:-coef;
-        if(sum>=35)
+        if(sum>=SUM_2ND_COEFF_THRESH)
             return;
     }
 
-    /**************************************************************************
-    our inverse hadamard transform effectively is weighted sum of all 16 inputs
-    with weight either 1 or -1. It has a last stage scaling of (sum+3)>>3. And
-    dc only idct is (dc+4)>>3. So if all the sums are between -35 and 29, the
-    output after inverse wht and idct will be all zero. A sum of absolute value
-    smaller than 35 guarantees all 16 different (+1/-1) weighted sums in wht
-    fall between -35 and +35.
-    **************************************************************************/
-    if(sum < 35)
+    if(sum < SUM_2ND_COEFF_THRESH)
     {
         for(i=0;i<bd->eob;i++)
         {