Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Xiph.Org
aom-rav1e
Commits
6c8fb82c
Commit
6c8fb82c
authored
May 18, 2012
by
Paul Wilkins
Committed by
On2 (Google) Code Review
May 18, 2012
Browse files
Options
Browse Files
Download
Plain Diff
Merge "Further firstpass.c changes." into experimental
parents
a29a4e24
acf3c729
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
38 additions
and
31 deletions
+38
-31
vp8/encoder/firstpass.c
vp8/encoder/firstpass.c
+38
-31
No files found.
vp8/encoder/firstpass.c
View file @
6c8fb82c
...
...
@@ -1297,7 +1297,7 @@ static int detect_transition_to_still(
int
frame_interval
,
int
still_interval
,
double
loop_decay_rate
,
double
decay_
accumulator
)
double
last_
decay_
rate
)
{
BOOL
trans_to_still
=
FALSE
;
...
...
@@ -1306,12 +1306,12 @@ static int detect_transition_to_still(
// instead of a clean scene cut.
if
(
(
frame_interval
>
MIN_GF_INTERVAL
)
&&
(
loop_decay_rate
>=
0
.
999
)
&&
(
decay_
accumulator
<
0
.
9
)
)
(
last_
decay_
rate
<
0
.
9
)
)
{
int
j
;
FIRSTPASS_STATS
*
position
=
cpi
->
twopass
.
stats_in
;
FIRSTPASS_STATS
tmp_next_frame
;
double
decay_ra
te
;
double
zz_in
te
r
;
// Look ahead a few frames to see if static condition
// persists...
...
...
@@ -1320,8 +1320,9 @@ static int detect_transition_to_still(
if
(
EOF
==
input_stats
(
cpi
,
&
tmp_next_frame
))
break
;
decay_rate
=
get_prediction_decay_rate
(
cpi
,
&
tmp_next_frame
);
if
(
decay_rate
<
0
.
999
)
zz_inter
=
(
tmp_next_frame
.
pcnt_inter
-
tmp_next_frame
.
pcnt_motion
);
if
(
zz_inter
<
0
.
999
)
break
;
}
// Reset file position
...
...
@@ -1562,9 +1563,8 @@ static int calc_arf_boost(
*
b_boost
=
boost_score
;
arf_boost
=
(
*
f_boost
+
*
b_boost
);
arf_boost
+=
((
b_frames
+
f_frames
)
*
25
);
//if ( arf_boost < ((b_frames + f_frames) * 10) )
// arf_boost = ((b_frames + f_frames) * 10);
if
(
arf_boost
<
((
b_frames
+
f_frames
)
*
20
)
)
arf_boost
=
((
b_frames
+
f_frames
)
*
20
);
return
arf_boost
;
}
...
...
@@ -1637,13 +1637,14 @@ static void define_gf_group(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
double
mv_ratio_accumulator
=
0
.
0
;
double
decay_accumulator
=
1
.
0
;
double
zero_motion_accumulator
=
1
.
0
;
double
loop_decay_rate
=
1
.
00
;
// Starting decay rate
double
last_loop_decay_rate
=
1
.
00
;
double
this_frame_mv_in_out
=
0
.
0
;
double
mv_in_out_accumulator
=
0
.
0
;
double
abs_mv_in_out_accumulator
=
0
.
0
;
double
mod_err_per_mb_accumulator
=
0
.
0
;
int
max_bits
=
frame_max_bits
(
cpi
);
// Max for a single frame
...
...
@@ -1692,9 +1693,6 @@ static void define_gf_group(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
gf_group_err
+=
mod_frame_err
;
mod_err_per_mb_accumulator
+=
mod_frame_err
/
DOUBLE_DIVIDE_CHECK
((
double
)
cpi
->
common
.
MBs
);
if
(
EOF
==
input_stats
(
cpi
,
&
next_frame
))
break
;
...
...
@@ -1710,30 +1708,33 @@ static void define_gf_group(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
// Cumulative effect of prediction quality decay
if
(
!
flash_detected
)
{
last_loop_decay_rate
=
loop_decay_rate
;
loop_decay_rate
=
get_prediction_decay_rate
(
cpi
,
&
next_frame
);
decay_accumulator
=
decay_accumulator
*
loop_decay_rate
;
decay_accumulator
=
decay_accumulator
<
0
.
1
?
0
.
1
:
decay_accumulator
;
}
boost_score
+=
decay_accumulator
*
calc_frame_boost
(
cpi
,
&
next_frame
,
this_frame_mv_in_out
);
// Break clause to detect very still sections after motion
// For example a staic image after a fade or other transition.
if
(
detect_transition_to_still
(
cpi
,
i
,
5
,
loop_decay_rate
,
decay_accumulator
)
)
{
allow_alt_ref
=
FALSE
;
boost_score
=
old_boost_score
;
break
;
// Monitor for static sections.
zero_motion_accumulator
*=
(
next_frame
.
pcnt_inter
-
next_frame
.
pcnt_motion
);
// Break clause to detect very still sections after motion
// (for example a staic image after a fade or other transition).
if
(
detect_transition_to_still
(
cpi
,
i
,
5
,
loop_decay_rate
,
last_loop_decay_rate
)
)
{
allow_alt_ref
=
FALSE
;
break
;
}
}
// Calculate a boost number for this frame
boost_score
+=
(
decay_accumulator
*
calc_frame_boost
(
cpi
,
&
next_frame
,
this_frame_mv_in_out
)
);
// Break out conditions.
if
(
// Break at cpi->max_gf_interval unless almost totally static
(
i
>=
cpi
->
max_gf_interval
&&
(
decay
_accumulator
<
0
.
995
))
||
(
i
>=
cpi
->
max_gf_interval
&&
(
zero_motion
_accumulator
<
0
.
995
))
||
(
// Dont break out with a very short interval
(
i
>
MIN_GF_INTERVAL
)
&&
...
...
@@ -1848,7 +1849,8 @@ static void define_gf_group(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
cpi
->
twopass
.
modified_error_used
+=
gf_group_err
;
// Assign bits to the arf or gf.
for
(
i
=
0
;
i
<=
(
cpi
->
source_alt_ref_pending
&&
cpi
->
common
.
frame_type
!=
KEY_FRAME
);
i
++
)
{
for
(
i
=
0
;
i
<=
(
cpi
->
source_alt_ref_pending
&&
cpi
->
common
.
frame_type
!=
KEY_FRAME
);
i
++
)
{
int
boost
;
int
allocation_chunks
;
int
Q
=
(
cpi
->
oxcf
.
fixed_q
<
0
)
?
cpi
->
last_q
[
INTER_FRAME
]
:
cpi
->
oxcf
.
fixed_q
;
...
...
@@ -2367,6 +2369,7 @@ static void find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
FIRSTPASS_STATS
*
start_position
;
double
decay_accumulator
=
1
.
0
;
double
zero_motion_accumulator
=
1
.
0
;
double
boost_score
=
0
;
double
old_boost_score
=
0
.
0
;
double
loop_decay_rate
;
...
...
@@ -2568,6 +2571,10 @@ static void find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
if
(
r
>
RMAX
)
r
=
RMAX
;
// Monitor for static sections.
zero_motion_accumulator
*=
(
next_frame
.
pcnt_inter
-
next_frame
.
pcnt_motion
);
// How fast is prediction quality decaying
loop_decay_rate
=
get_prediction_decay_rate
(
cpi
,
&
next_frame
);
...
...
@@ -2652,7 +2659,7 @@ static void find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
// spend almost all of the bits on the key frame.
// cpi->twopass.frames_to_key-1 because key frame itself is taken
// care of by kf_boost.
if
(
decay
_accumulator
>=
0
.
99
)
if
(
zero_motion
_accumulator
>=
0
.
99
)
{
allocation_chunks
=
((
cpi
->
twopass
.
frames_to_key
-
1
)
*
10
)
+
kf_boost
;
...
...
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