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
a9dd8a73
Commit
a9dd8a73
authored
Dec 22, 2015
by
Marco Paniconi
Committed by
Gerrit Code Review
Dec 22, 2015
Browse files
Merge "aq-mode=3: Don't reset segment if block is determined to be skin."
parents
cedb1db5
b121a3e7
Changes
3
Hide whitespace changes
Inline
Side-by-side
vp9/encoder/vp9_aq_cyclicrefresh.c
View file @
a9dd8a73
...
...
@@ -191,7 +191,8 @@ void vp9_cyclic_refresh_update_segment(VP9_COMP *const cpi,
BLOCK_SIZE
bsize
,
int64_t
rate
,
int64_t
dist
,
int
skip
)
{
int
skip
,
struct
macroblock_plane
*
const
p
)
{
const
VP9_COMMON
*
const
cm
=
&
cpi
->
common
;
CYCLIC_REFRESH
*
const
cr
=
cpi
->
cyclic_refresh
;
const
int
bw
=
num_8x8_blocks_wide_lookup
[
bsize
];
...
...
@@ -199,12 +200,33 @@ void vp9_cyclic_refresh_update_segment(VP9_COMP *const cpi,
const
int
xmis
=
VPXMIN
(
cm
->
mi_cols
-
mi_col
,
bw
);
const
int
ymis
=
VPXMIN
(
cm
->
mi_rows
-
mi_row
,
bh
);
const
int
block_index
=
mi_row
*
cm
->
mi_cols
+
mi_col
;
const
int
refresh_this_block
=
candidate_refresh_aq
(
cr
,
mbmi
,
rate
,
dist
,
bsize
);
int
refresh_this_block
=
candidate_refresh_aq
(
cr
,
mbmi
,
rate
,
dist
,
bsize
);
// Default is to not update the refresh map.
int
new_map_value
=
cr
->
map
[
block_index
];
int
x
=
0
;
int
y
=
0
;
int
is_skin
=
0
;
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
);
if
(
is_skin
)
refresh_this_block
=
1
;
}
// If this block is labeled for refresh, check if we should reset the
// segment_id.
if
(
cyclic_refresh_segment_id_boosted
(
mbmi
->
segment_id
))
{
...
...
vp9/encoder/vp9_aq_cyclicrefresh.h
View file @
a9dd8a73
...
...
@@ -14,6 +14,8 @@
#include
"vpx/vpx_integer.h"
#include
"vp9/common/vp9_blockd.h"
#include
"vp9/encoder/vp9_block.h"
#include
"vp9/encoder/vp9_skin_detection.h"
#ifdef __cplusplus
extern
"C"
{
...
...
@@ -93,7 +95,8 @@ int vp9_cyclic_refresh_rc_bits_per_mb(const struct VP9_COMP *cpi, int i,
void
vp9_cyclic_refresh_update_segment
(
struct
VP9_COMP
*
const
cpi
,
MB_MODE_INFO
*
const
mbmi
,
int
mi_row
,
int
mi_col
,
BLOCK_SIZE
bsize
,
int64_t
rate
,
int64_t
dist
,
int
skip
);
int64_t
rate
,
int64_t
dist
,
int
skip
,
struct
macroblock_plane
*
const
p
);
void
vp9_cyclic_refresh_update_sb_postencode
(
struct
VP9_COMP
*
const
cpi
,
const
MB_MODE_INFO
*
const
mbmi
,
...
...
vp9/encoder/vp9_encodeframe.c
View file @
a9dd8a73
...
...
@@ -1045,7 +1045,7 @@ static void update_state(VP9_COMP *cpi, ThreadData *td,
if
(
cpi
->
oxcf
.
aq_mode
==
CYCLIC_REFRESH_AQ
)
{
vp9_cyclic_refresh_update_segment
(
cpi
,
&
xd
->
mi
[
0
]
->
mbmi
,
mi_row
,
mi_col
,
bsize
,
ctx
->
rate
,
ctx
->
dist
,
x
->
skip
);
x
->
skip
,
p
);
}
}
...
...
@@ -1705,6 +1705,7 @@ static void update_state_rt(VP9_COMP *cpi, ThreadData *td,
MACROBLOCKD
*
const
xd
=
&
x
->
e_mbd
;
MODE_INFO
*
const
mi
=
xd
->
mi
[
0
];
MB_MODE_INFO
*
const
mbmi
=
&
xd
->
mi
[
0
]
->
mbmi
;
struct
macroblock_plane
*
const
p
=
x
->
plane
;
const
struct
segmentation
*
const
seg
=
&
cm
->
seg
;
const
int
bw
=
num_8x8_blocks_wide_lookup
[
mi
->
mbmi
.
sb_type
];
const
int
bh
=
num_8x8_blocks_high_lookup
[
mi
->
mbmi
.
sb_type
];
...
...
@@ -1725,7 +1726,7 @@ static void update_state_rt(VP9_COMP *cpi, ThreadData *td,
}
else
{
// Setting segmentation map for cyclic_refresh.
vp9_cyclic_refresh_update_segment
(
cpi
,
mbmi
,
mi_row
,
mi_col
,
bsize
,
ctx
->
rate
,
ctx
->
dist
,
x
->
skip
);
ctx
->
rate
,
ctx
->
dist
,
x
->
skip
,
p
);
}
vp9_init_plane_quantizers
(
cpi
,
x
);
}
...
...
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