Commit a0ed4e63 authored by Yaowu Xu's avatar Yaowu Xu Committed by On2 (Google) Code Review
Browse files

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[24]; BLOCKD *bd = &x->block[24];
if(bd->dequant[0]>=SUM_2ND_COEFF_THRESH
if(bd->dequant[0]>=35 && bd->dequant[1]>=35) && bd->dequant[1]>=SUM_2ND_COEFF_THRESH)
return; return;
for(i=0;i<bd->eob;i++) for(i=0;i<bd->eob;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;i<bd->eob;i++) for(i=0;i<bd->eob;i++)
{ {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment