Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Xiph.Org
aom-rav1e
Commits
a0ed4e63
Commit
a0ed4e63
authored
Nov 10, 2011
by
Yaowu Xu
Committed by
On2 (Google) Code Review
Nov 10, 2011
Browse files
Merge "scaled the threshold for 2nd order coefficient reset" into experimental
parents
151b7f25
cbcba9e7
Changes
1
Hide whitespace changes
Inline
Side-by-side
vp8/encoder/encodemb.c
View file @
a0ed4e63
...
...
@@ -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
++
)
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment