From: Yaowu Xu Date: Thu, 10 Nov 2011 15:40:44 +0000 (-0800) Subject: scaled the threshold for 2nd order coefficient reset X-Git-Tag: v1.3.0~1217^2~380^2~162^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cbcba9e7c03e963e0f6ae7c32ebbd5f2540c25af;p=libvpx scaled the threshold for 2nd order coefficient reset extend_qrange introduces a different scaling factor, this commit takes the scaling difference into account for reset 2nd order coefficients. Change-Id: Ie58bca9f52698fa759e3f88da2aa4d82630fa91a --- diff --git a/vp8/encoder/encodemb.c b/vp8/encoder/encodemb.c index 8818156d4..0711a1468 100644 --- a/vp8/encoder/encodemb.c +++ b/vp8/encoder/encodemb.c @@ -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;ieob;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;ieob;i++) {