Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Guillaume Martres
aom-rav1e
Commits
4f569e84
Commit
4f569e84
authored
May 15, 2015
by
paulwilkins
Committed by
Gerrit Code Review
May 15, 2015
Browse files
Merge "Revert "Skip the last frame update for some frame repeats.""
parents
0de534b7
eb8faf1c
Changes
1
Hide whitespace changes
Inline
Side-by-side
vp9/encoder/vp9_encoder.c
View file @
4f569e84
...
...
@@ -3423,32 +3423,6 @@ int setup_interp_filter_search_mask(VP9_COMP *cpi) {
return
mask
;
}
#define EXTREME_UNDERSHOOT_RATIO 10
#define LOW_ABSOLUTE_RATE_PER_MB 2
static
int
frame_repeat_detected
(
VP9_COMP
*
cpi
)
{
RATE_CONTROL
*
const
rc
=
&
cpi
->
rc
;
int
repeat_detected
=
0
;
int
low_rate
=
LOW_ABSOLUTE_RATE_PER_MB
*
cpi
->
common
.
MBs
;
// Detects an "unexpected frame buffer repeat".
// This status is not strictly a frame repeat but is triggered when
// a frame hugely undershoots the expected first pass target and in
// absolute terms the rate is very low. A typical situation where this may
// occurr is if the frame, whilst not matching the previous frame, DOES very
// closely match the contents of one of the other frame buffers. A genuinely
// static scene should not normally trigger this case as the last frame
// will also match and the predicted rate will thus be low.
if
(
!
frame_is_kf_gf_arf
(
cpi
)
&&
!
cpi
->
rc
.
is_src_frame_alt_ref
&&
rc
->
projected_frame_size
)
{
if
((
rc
->
projected_frame_size
<
low_rate
)
&&
((
rc
->
base_frame_target
/
rc
->
projected_frame_size
)
>=
EXTREME_UNDERSHOOT_RATIO
))
{
repeat_detected
=
1
;
}
}
return
repeat_detected
;
}
static
void
encode_frame_to_data_rate
(
VP9_COMP
*
cpi
,
size_t
*
size
,
uint8_t
*
dest
,
...
...
@@ -3592,14 +3566,6 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi,
cm
->
frame_to_show
=
get_frame_new_buffer
(
cm
);
// Test for special case where the frame appears to be a repeat of an earlier
// encoded frame buffer but this was not predicted by the first pass.
// In this case do not update the last frame buffer.
if
((
cpi
->
oxcf
.
pass
==
2
)
&&
(
frame_is_intra_only
(
cm
)
==
0
)
&&
frame_repeat_detected
(
cpi
))
{
cpi
->
refresh_last_frame
=
0
;
}
// Pick the loop filter level for the frame.
loopfilter_frame
(
cpi
,
cm
);
...
...
Write
Preview
Markdown
is supported
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