Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
BC
public
external
libvpx
Commits
02842931
Commit
02842931
authored
Dec 13, 2017
by
Marco Paniconi
Committed by
Gerrit Code Review
Dec 13, 2017
Browse files
Merge "vp9: Reset rc flags on some configuration changes."
parents
e9ad5d2a
a40fa1f9
Changes
5
Hide whitespace changes
Inline
Side-by-side
vp9/encoder/vp9_encoder.c
View file @
02842931
...
...
@@ -1853,6 +1853,8 @@ void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) {
cm
->
mi_rows
*
cm
->
mi_cols
*
sizeof
(
*
cpi
->
consec_zero_mv
));
if
(
cpi
->
oxcf
.
aq_mode
==
CYCLIC_REFRESH_AQ
)
vp9_cyclic_refresh_reset_resize
(
cpi
);
rc
->
rc_1_frame
=
0
;
rc
->
rc_2_frame
=
0
;
}
if
((
cpi
->
svc
.
number_temporal_layers
>
1
&&
cpi
->
oxcf
.
rc_mode
==
VPX_CBR
)
||
...
...
@@ -1863,6 +1865,21 @@ void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) {
(
int
)
cpi
->
oxcf
.
target_bandwidth
);
}
// Check for resetting the rc flags (rc_1_frame, rc_2_frame) if the
// configuration change has a large change in avg_frame_bandwidth.
// For SVC check for resetting based on spatial layer average bandwidth.
if
(
cm
->
current_video_frame
>
0
)
{
if
(
cpi
->
use_svc
)
{
vp9_svc_check_reset_layer_rc_flag
(
cpi
);
}
else
{
if
(
rc
->
avg_frame_bandwidth
>
(
3
*
rc
->
last_avg_frame_bandwidth
>>
1
)
||
rc
->
avg_frame_bandwidth
<
(
rc
->
last_avg_frame_bandwidth
>>
1
))
{
rc
->
rc_1_frame
=
0
;
rc
->
rc_2_frame
=
0
;
}
}
}
cpi
->
alt_ref_source
=
NULL
;
rc
->
is_src_frame_alt_ref
=
0
;
...
...
vp9/encoder/vp9_ratectrl.c
View file @
02842931
...
...
@@ -1488,6 +1488,8 @@ void vp9_rc_postencode_update(VP9_COMP *cpi, uint64_t bytes_used) {
cpi
->
rc
.
last_frame_is_src_altref
=
cpi
->
rc
.
is_src_frame_alt_ref
;
}
if
(
cm
->
frame_type
!=
KEY_FRAME
)
rc
->
reset_high_source_sad
=
0
;
rc
->
last_avg_frame_bandwidth
=
rc
->
avg_frame_bandwidth
;
}
void
vp9_rc_postencode_update_drop_frame
(
VP9_COMP
*
cpi
)
{
...
...
vp9/encoder/vp9_ratectrl.h
View file @
02842931
...
...
@@ -152,6 +152,8 @@ typedef struct {
int
rc_2_frame
;
int
q_1_frame
;
int
q_2_frame
;
// Keep track of the last target average frame bandwidth.
int
last_avg_frame_bandwidth
;
// Auto frame-scaling variables.
FRAME_SCALE_LEVEL
frame_size_selector
;
...
...
vp9/encoder/vp9_svc_layercontext.c
View file @
02842931
...
...
@@ -862,3 +862,26 @@ void vp9_svc_reset_key_frame(VP9_COMP *const cpi) {
vp9_update_temporal_layer_framerate
(
cpi
);
vp9_restore_layer_context
(
cpi
);
}
void
vp9_svc_check_reset_layer_rc_flag
(
VP9_COMP
*
const
cpi
)
{
SVC
*
svc
=
&
cpi
->
svc
;
int
sl
,
tl
;
for
(
sl
=
0
;
sl
<
svc
->
number_spatial_layers
;
++
sl
)
{
// Check for reset based on avg_frame_bandwidth for spatial layer sl.
int
layer
=
LAYER_IDS_TO_IDX
(
sl
,
svc
->
number_temporal_layers
-
1
,
svc
->
number_temporal_layers
);
LAYER_CONTEXT
*
lc
=
&
svc
->
layer_context
[
layer
];
RATE_CONTROL
*
lrc
=
&
lc
->
rc
;
if
(
lrc
->
avg_frame_bandwidth
>
(
3
*
lrc
->
last_avg_frame_bandwidth
>>
1
)
||
lrc
->
avg_frame_bandwidth
<
(
lrc
->
last_avg_frame_bandwidth
>>
1
))
{
// Reset for all temporal layers with spatial layer sl.
for
(
tl
=
0
;
tl
<
svc
->
number_temporal_layers
;
++
tl
)
{
int
layer
=
LAYER_IDS_TO_IDX
(
sl
,
tl
,
svc
->
number_temporal_layers
);
LAYER_CONTEXT
*
lc
=
&
svc
->
layer_context
[
layer
];
RATE_CONTROL
*
lrc
=
&
lc
->
rc
;
lrc
->
rc_1_frame
=
0
;
lrc
->
rc_2_frame
=
0
;
}
}
}
}
vp9/encoder/vp9_svc_layercontext.h
View file @
02842931
...
...
@@ -154,6 +154,8 @@ void vp9_free_svc_cyclic_refresh(struct VP9_COMP *const cpi);
void
vp9_svc_reset_key_frame
(
struct
VP9_COMP
*
const
cpi
);
void
vp9_svc_check_reset_layer_rc_flag
(
struct
VP9_COMP
*
const
cpi
);
#ifdef __cplusplus
}
// extern "C"
#endif
...
...
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