Skip to content
GitLab
Menu
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
86fb8130
Commit
86fb8130
authored
Mar 28, 2016
by
Marco Paniconi
Committed by
Gerrit Code Review
Mar 28, 2016
Browse files
Merge "vp8-denoiser: Use the same skin detection for model=1 as in vp9."
parents
ee1bd86d
5f90713b
Changes
1
Hide whitespace changes
Inline
Side-by-side
vp8/encoder/pickinter.c
View file @
86fb8130
...
...
@@ -50,7 +50,8 @@ extern const MB_PREDICTION_MODE vp8_mode_order[MAX_MODES];
static
const
int
skin_mean
[
5
][
2
]
=
{{
7463
,
9614
},
{
6400
,
10240
},
{
7040
,
10240
},
{
8320
,
9280
},
{
6800
,
9614
}};
static
const
int
skin_inv_cov
[
4
]
=
{
4107
,
1663
,
1663
,
2157
};
// q16
static
const
int
skin_threshold
[
2
]
=
{
1570636
,
800000
};
// q18
static
const
int
skin_threshold
[
6
]
=
{
1570636
,
1400000
,
800000
,
800000
,
800000
,
800000
};
// q18
// Evaluates the Mahalanobis distance measure for the input CbCr values.
static
int
evaluate_skin_color_difference
(
int
cb
,
int
cr
,
int
idx
)
{
...
...
@@ -73,7 +74,7 @@ static int evaluate_skin_color_difference(int cb, int cr, int idx) {
}
// Checks if the input yCbCr values corresponds to skin color.
static
int
is_skin_color
(
int
y
,
int
cb
,
int
cr
)
static
int
is_skin_color
(
int
y
,
int
cb
,
int
cr
,
int
consec_zeromv
)
{
if
(
y
<
40
||
y
>
220
)
{
...
...
@@ -88,13 +89,31 @@ static int is_skin_color(int y, int cb, int cr)
else
{
int
i
=
0
;
for
(;
i
<
5
;
i
++
)
{
if
(
evaluate_skin_color_difference
(
cb
,
cr
,
i
)
<
skin_threshold
[
1
])
{
return
1
;
}
}
// No skin if block has been zero motion for long consecutive time.
if
(
consec_zeromv
>
80
)
return
0
;
// Exit on grey.
if
(
cb
==
128
&&
cr
==
128
)
return
0
;
// Exit on very strong cb.
if
(
cb
>
150
&&
cr
<
110
)
return
0
;
for
(;
i
<
5
;
i
++
)
{
int
skin_color_diff
=
evaluate_skin_color_difference
(
cb
,
cr
,
i
);
if
(
skin_color_diff
<
skin_threshold
[
i
+
1
])
{
if
(
y
<
60
&&
skin_color_diff
>
3
*
(
skin_threshold
[
i
+
1
]
>>
2
))
return
0
;
else
if
(
consec_zeromv
>
30
&&
skin_color_diff
>
(
skin_threshold
[
i
+
1
]
>>
1
))
return
0
;
else
return
1
;
}
// Exit if difference is much large than the threshold.
if
(
skin_color_diff
>
(
skin_threshold
[
i
+
1
]
<<
3
))
{
return
0
;
}
}
return
0
;
}
}
...
...
@@ -851,8 +870,10 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
x
->
src
.
v_buffer
[
4
*
x
->
src
.
uv_stride
+
3
]
+
x
->
src
.
v_buffer
[
4
*
x
->
src
.
uv_stride
+
4
])
>>
2
;
x
->
is_skin
=
0
;
if
(
!
cpi
->
oxcf
.
screen_content_mode
)
x
->
is_skin
=
is_skin_color
(
y
,
cb
,
cr
);
if
(
!
cpi
->
oxcf
.
screen_content_mode
)
{
int
block_index
=
mb_row
*
cpi
->
common
.
mb_cols
+
mb_col
;
x
->
is_skin
=
is_skin_color
(
y
,
cb
,
cr
,
cpi
->
consec_zero_last
[
block_index
]);
}
}
#if CONFIG_TEMPORAL_DENOISING
if
(
cpi
->
oxcf
.
noise_sensitivity
)
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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