### Merge "scaled the threshold for 2nd order coefficient reset" into experimental

parents 151b7f25 cbcba9e7
 ... @@ -615,33 +615,48 @@ static void optimize_b(MACROBLOCK *mb, int ib, int type, ... @@ -615,33 +615,48 @@ static void optimize_b(MACROBLOCK *mb, int ib, int type, *a = *l = (d->eob != !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, static void check_reset_2nd_coeffs(MACROBLOCKD *x, int type, ENTROPY_CONTEXT *a, ENTROPY_CONTEXT *l) ENTROPY_CONTEXT *a, ENTROPY_CONTEXT *l) { { int sum=0; int sum=0; int i; int i; BLOCKD *bd = &x->block; BLOCKD *bd = &x->block; if(bd->dequant>=SUM_2ND_COEFF_THRESH if(bd->dequant>=35 && bd->dequant>=35) && bd->dequant>=SUM_2ND_COEFF_THRESH) return; return; for(i=0;ieob;i++) for(i=0;ieob;i++) { { int coef = bd->dqcoeff[vp8_default_zig_zag1d[i]]; int coef = bd->dqcoeff[vp8_default_zig_zag1d[i]]; sum+= (coef>=0)?coef:-coef; sum+= (coef>=0)?coef:-coef; if(sum>=35) if(sum>=SUM_2ND_COEFF_THRESH) return; return; } } /************************************************************************** if(sum < SUM_2ND_COEFF_THRESH) 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) { { for(i=0;ieob;i++) for(i=0;ieob;i++) { { ... ...
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!