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
e9e726f7
Commit
e9e726f7
authored
Jan 05, 2016
by
Marco Paniconi
Committed by
Gerrit Code Review
Jan 05, 2016
Browse files
Merge "vp9-skin detection: Refactoring."
parents
ef77ce44
a8b7c6aa
Changes
5
Hide whitespace changes
Inline
Side-by-side
vp9/encoder/vp9_aq_cyclicrefresh.c
View file @
e9e726f7
...
...
@@ -209,20 +209,12 @@ void vp9_cyclic_refresh_update_segment(VP9_COMP *const cpi,
if
(
refresh_this_block
==
0
&&
bsize
<=
BLOCK_16X16
&&
cpi
->
oxcf
.
content
!=
VP9E_CONTENT_SCREEN
)
{
// Take center pixel in block to determine is_skin.
const
int
y_width_shift
=
(
4
<<
b_width_log2_lookup
[
bsize
])
>>
1
;
const
int
y_height_shift
=
(
4
<<
b_height_log2_lookup
[
bsize
])
>>
1
;
const
int
uv_width_shift
=
y_width_shift
>>
1
;
const
int
uv_height_shift
=
y_height_shift
>>
1
;
const
int
stride
=
p
[
0
].
src
.
stride
;
const
int
strideuv
=
p
[
1
].
src
.
stride
;
const
uint8_t
ysource
=
p
[
0
].
src
.
buf
[
y_height_shift
*
stride
+
y_width_shift
];
const
uint8_t
usource
=
p
[
1
].
src
.
buf
[
uv_height_shift
*
strideuv
+
uv_width_shift
];
const
uint8_t
vsource
=
p
[
2
].
src
.
buf
[
uv_height_shift
*
strideuv
+
uv_width_shift
];
is_skin
=
vp9_skin_pixel
(
ysource
,
usource
,
vsource
);
is_skin
=
vp9_compute_skin_block
(
p
[
0
].
src
.
buf
,
p
[
1
].
src
.
buf
,
p
[
2
].
src
.
buf
,
p
[
0
].
src
.
stride
,
p
[
1
].
src
.
stride
,
bsize
);
if
(
is_skin
)
refresh_this_block
=
1
;
}
...
...
vp9/encoder/vp9_denoiser.c
View file @
e9e726f7
...
...
@@ -333,20 +333,12 @@ void vp9_denoiser_denoise(VP9_DENOISER *denoiser, MACROBLOCK *mb,
int
is_skin
=
0
;
if
(
bs
<=
BLOCK_16X16
&&
denoiser
->
denoising_level
>=
kDenLow
)
{
// Take center pixel in block to determine is_skin.
const
int
y_width_shift
=
(
4
<<
b_width_log2_lookup
[
bs
])
>>
1
;
const
int
y_height_shift
=
(
4
<<
b_height_log2_lookup
[
bs
])
>>
1
;
const
int
uv_width_shift
=
y_width_shift
>>
1
;
const
int
uv_height_shift
=
y_height_shift
>>
1
;
const
int
stride
=
mb
->
plane
[
0
].
src
.
stride
;
const
int
strideuv
=
mb
->
plane
[
1
].
src
.
stride
;
const
uint8_t
ysource
=
mb
->
plane
[
0
].
src
.
buf
[
y_height_shift
*
stride
+
y_width_shift
];
const
uint8_t
usource
=
mb
->
plane
[
1
].
src
.
buf
[
uv_height_shift
*
strideuv
+
uv_width_shift
];
const
uint8_t
vsource
=
mb
->
plane
[
2
].
src
.
buf
[
uv_height_shift
*
strideuv
+
uv_width_shift
];
is_skin
=
vp9_skin_pixel
(
ysource
,
usource
,
vsource
);
is_skin
=
vp9_compute_skin_block
(
mb
->
plane
[
0
].
src
.
buf
,
mb
->
plane
[
1
].
src
.
buf
,
mb
->
plane
[
2
].
src
.
buf
,
mb
->
plane
[
0
].
src
.
stride
,
mb
->
plane
[
1
].
src
.
stride
,
bs
);
}
mv_col
=
ctx
->
best_sse_mv
.
as_mv
.
col
;
...
...
vp9/encoder/vp9_noise_estimate.c
View file @
e9e726f7
...
...
@@ -145,10 +145,6 @@ void vp9_update_noise_estimate(VP9_COMP *const cpi) {
const
uint8_t
*
src_u
=
cpi
->
Source
->
u_buffer
;
const
uint8_t
*
src_v
=
cpi
->
Source
->
v_buffer
;
const
int
src_uvstride
=
cpi
->
Source
->
uv_stride
;
const
int
y_width_shift
=
(
4
<<
b_width_log2_lookup
[
bsize
])
>>
1
;
const
int
y_height_shift
=
(
4
<<
b_height_log2_lookup
[
bsize
])
>>
1
;
const
int
uv_width_shift
=
y_width_shift
>>
1
;
const
int
uv_height_shift
=
y_height_shift
>>
1
;
int
mi_row
,
mi_col
;
int
num_low_motion
=
0
;
int
frame_low_motion
=
1
;
...
...
@@ -173,13 +169,12 @@ void vp9_update_noise_estimate(VP9_COMP *const cpi) {
// been encoded as zero/low motion x (= thresh_consec_zeromv) frames
// in a row. consec_zero_mv[] defined for 8x8 blocks, so consider all
// 4 sub-blocks for 16x16 block. Also, avoid skin blocks.
const
uint8_t
ysource
=
src_y
[
y_height_shift
*
src_ystride
+
y_width_shift
];
const
uint8_t
usource
=
src_u
[
uv_height_shift
*
src_uvstride
+
uv_width_shift
];
const
uint8_t
vsource
=
src_v
[
uv_height_shift
*
src_uvstride
+
uv_width_shift
];
int
is_skin
=
vp9_skin_pixel
(
ysource
,
usource
,
vsource
);
int
is_skin
=
vp9_compute_skin_block
(
src_y
,
src_u
,
src_v
,
src_ystride
,
src_uvstride
,
bsize
);
if
(
frame_low_motion
&&
cr
->
consec_zero_mv
[
bl_index
]
>
thresh_consec_zeromv
&&
cr
->
consec_zero_mv
[
bl_index1
]
>
thresh_consec_zeromv
&&
...
...
vp9/encoder/vp9_skin_detection.c
View file @
e9e726f7
...
...
@@ -48,6 +48,20 @@ int vp9_skin_pixel(const uint8_t y, const uint8_t cb, const uint8_t cr) {
return
(
evaluate_skin_color_difference
(
cb
,
cr
)
<
skin_threshold
);
}
int
vp9_compute_skin_block
(
const
uint8_t
*
y
,
const
uint8_t
*
u
,
const
uint8_t
*
v
,
int
stride
,
int
strideuv
,
int
bsize
)
{
// Take center pixel in block to determine is_skin.
const
int
y_width_shift
=
(
4
<<
b_width_log2_lookup
[
bsize
])
>>
1
;
const
int
y_height_shift
=
(
4
<<
b_height_log2_lookup
[
bsize
])
>>
1
;
const
int
uv_width_shift
=
y_width_shift
>>
1
;
const
int
uv_height_shift
=
y_height_shift
>>
1
;
const
uint8_t
ysource
=
y
[
y_height_shift
*
stride
+
y_width_shift
];
const
uint8_t
usource
=
u
[
uv_height_shift
*
strideuv
+
uv_width_shift
];
const
uint8_t
vsource
=
v
[
uv_height_shift
*
strideuv
+
uv_width_shift
];
return
vp9_skin_pixel
(
ysource
,
usource
,
vsource
);
}
#ifdef OUTPUT_YUV_SKINMAP
// For viewing skin map on input source.
void
vp9_compute_skin_map
(
VP9_COMP
*
const
cpi
,
FILE
*
yuv_skinmap_file
)
{
...
...
vp9/encoder/vp9_skin_detection.h
View file @
e9e726f7
...
...
@@ -23,6 +23,9 @@ struct VP9_COMP;
int
vp9_skin_pixel
(
const
uint8_t
y
,
const
uint8_t
cb
,
const
uint8_t
cr
);
int
vp9_compute_skin_block
(
const
uint8_t
*
y
,
const
uint8_t
*
u
,
const
uint8_t
*
v
,
int
stride
,
int
strideuv
,
int
bsize
);
#ifdef OUTPUT_YUV_SKINMAP
// For viewing skin map on input source.
void
vp9_compute_skin_map
(
struct
VP9_COMP
*
const
cpi
,
FILE
*
yuv_skinmap_file
);
...
...
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