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
e85bff25
Commit
e85bff25
authored
Mar 21, 2014
by
Dmitry Kovalev
Committed by
Gerrit Code Review
Mar 21, 2014
Browse files
Merge "Cleaning up vp9_svc_layercontext.c"
parents
d1087752
2df69fef
Changes
1
Hide whitespace changes
Inline
Side-by-side
vp9/encoder/vp9_svc_layercontext.c
View file @
e85bff25
...
...
@@ -15,13 +15,14 @@
void
vp9_init_layer_context
(
VP9_COMP
*
const
cpi
)
{
const
VP9_CONFIG
*
const
oxcf
=
&
cpi
->
oxcf
;
int
temporal_layer
=
0
;
int
layer
;
cpi
->
svc
.
spatial_layer_id
=
0
;
cpi
->
svc
.
temporal_layer_id
=
0
;
for
(
temporal_layer
=
0
;
temporal_layer
<
cpi
->
svc
.
number_temporal_layers
;
++
temporal_layer
)
{
LAYER_CONTEXT
*
const
lc
=
&
cpi
->
svc
.
layer_context
[
temporal_layer
];
for
(
layer
=
0
;
layer
<
cpi
->
svc
.
number_temporal_layers
;
++
layer
)
{
LAYER_CONTEXT
*
const
lc
=
&
cpi
->
svc
.
layer_context
[
layer
];
RATE_CONTROL
*
const
lrc
=
&
lc
->
rc
;
lrc
->
avg_frame_qindex
[
INTER_FRAME
]
=
q_trans
[
oxcf
->
worst_allowed_q
];
lrc
->
last_q
[
INTER_FRAME
]
=
q_trans
[
oxcf
->
worst_allowed_q
];
lrc
->
ni_av_qi
=
q_trans
[
oxcf
->
worst_allowed_q
];
...
...
@@ -35,11 +36,9 @@ void vp9_init_layer_context(VP9_COMP *const cpi) {
lrc
->
decimation_factor
=
0
;
lrc
->
rate_correction_factor
=
1
.
0
;
lrc
->
key_frame_rate_correction_factor
=
1
.
0
;
lc
->
target_bandwidth
=
oxcf
->
ts_target_bitrate
[
temporal_layer
]
*
1000
;
lrc
->
buffer_level
=
vp9_rescale
((
int
)(
oxcf
->
starting_buffer_level
),
lc
->
target_bandwidth
,
1000
);
lc
->
target_bandwidth
=
oxcf
->
ts_target_bitrate
[
layer
]
*
1000
;
lrc
->
buffer_level
=
vp9_rescale
((
int
)(
oxcf
->
starting_buffer_level
),
lc
->
target_bandwidth
,
1000
);
lrc
->
bits_off_target
=
lrc
->
buffer_level
;
}
}
...
...
@@ -49,14 +48,14 @@ void vp9_update_layer_context_change_config(VP9_COMP *const cpi,
const
int
target_bandwidth
)
{
const
VP9_CONFIG
*
const
oxcf
=
&
cpi
->
oxcf
;
const
RATE_CONTROL
*
const
rc
=
&
cpi
->
rc
;
int
temporal_
layer
=
0
;
int
layer
;
float
bitrate_alloc
=
1
.
0
;
for
(
temporal_layer
=
0
;
temporal_layer
<
cpi
->
svc
.
number_temporal_layers
;
++
temporal_
layer
)
{
LAYER_CONTEXT
*
const
lc
=
&
cpi
->
svc
.
layer_context
[
temporal_
layer
];
for
(
layer
=
0
;
layer
<
cpi
->
svc
.
number_temporal_layers
;
++
layer
)
{
LAYER_CONTEXT
*
const
lc
=
&
cpi
->
svc
.
layer_context
[
layer
];
RATE_CONTROL
*
const
lrc
=
&
lc
->
rc
;
lc
->
target_bandwidth
=
oxcf
->
ts_target_bitrate
[
temporal_
layer
]
*
1000
;
bitrate_alloc
=
(
float
)
lc
->
target_bandwidth
/
(
float
)
target_bandwidth
;
lc
->
target_bandwidth
=
oxcf
->
ts_target_bitrate
[
layer
]
*
1000
;
bitrate_alloc
=
(
float
)
lc
->
target_bandwidth
/
target_bandwidth
;
// Update buffer-related quantities.
lc
->
starting_buffer_level
=
(
int64_t
)(
oxcf
->
starting_buffer_level
*
bitrate_alloc
);
...
...
@@ -67,7 +66,7 @@ void vp9_update_layer_context_change_config(VP9_COMP *const cpi,
lrc
->
bits_off_target
=
MIN
(
lrc
->
bits_off_target
,
lc
->
maximum_buffer_size
);
lrc
->
buffer_level
=
MIN
(
lrc
->
buffer_level
,
lc
->
maximum_buffer_size
);
// Update framerate-related quantities.
lc
->
framerate
=
oxcf
->
framerate
/
oxcf
->
ts_rate_decimator
[
temporal_
layer
];
lc
->
framerate
=
oxcf
->
framerate
/
oxcf
->
ts_rate_decimator
[
layer
];
lrc
->
av_per_frame_bandwidth
=
(
int
)(
lc
->
target_bandwidth
/
lc
->
framerate
);
lrc
->
max_frame_bandwidth
=
rc
->
max_frame_bandwidth
;
// Update qp-related quantities.
...
...
@@ -76,22 +75,27 @@ void vp9_update_layer_context_change_config(VP9_COMP *const cpi,
}
}
static
LAYER_CONTEXT
*
get_temporal_layer_context
(
SVC
*
svc
)
{
return
&
svc
->
layer_context
[
svc
->
temporal_layer_id
];
}
void
vp9_update_layer_framerate
(
VP9_COMP
*
const
cpi
)
{
int
temporal_
layer
=
cpi
->
svc
.
temporal_layer_id
;
const
int
layer
=
cpi
->
svc
.
temporal_layer_id
;
const
VP9_CONFIG
*
const
oxcf
=
&
cpi
->
oxcf
;
LAYER_CONTEXT
*
const
lc
=
&
cpi
->
svc
.
layer_context
[
temporal_layer
]
;
LAYER_CONTEXT
*
const
lc
=
get_temporal_layer_context
(
&
cpi
->
svc
)
;
RATE_CONTROL
*
const
lrc
=
&
lc
->
rc
;
lc
->
framerate
=
oxcf
->
framerate
/
oxcf
->
ts_rate_decimator
[
temporal_layer
];
lc
->
framerate
=
oxcf
->
framerate
/
oxcf
->
ts_rate_decimator
[
layer
];
lrc
->
av_per_frame_bandwidth
=
(
int
)(
lc
->
target_bandwidth
/
lc
->
framerate
);
lrc
->
max_frame_bandwidth
=
cpi
->
rc
.
max_frame_bandwidth
;
// Update the average layer frame size (non-cumulative per-frame-bw).
if
(
temporal_
layer
==
0
)
{
if
(
layer
==
0
)
{
lc
->
avg_frame_size
=
lrc
->
av_per_frame_bandwidth
;
}
else
{
double
prev_layer_framerate
=
oxcf
->
framerate
/
oxcf
->
ts_rate_decimator
[
temporal_
layer
-
1
];
int
prev_layer_target_bandwidth
=
oxcf
->
ts_target_bitrate
[
temporal_
layer
-
1
]
*
1000
;
const
double
prev_layer_framerate
=
oxcf
->
framerate
/
oxcf
->
ts_rate_decimator
[
layer
-
1
];
const
int
prev_layer_target_bandwidth
=
oxcf
->
ts_target_bitrate
[
layer
-
1
]
*
1000
;
lc
->
avg_frame_size
=
(
int
)((
lc
->
target_bandwidth
-
prev_layer_target_bandwidth
)
/
(
lc
->
framerate
-
prev_layer_framerate
));
...
...
@@ -99,10 +103,10 @@ void vp9_update_layer_framerate(VP9_COMP *const cpi) {
}
void
vp9_restore_layer_context
(
VP9_COMP
*
const
cpi
)
{
int
temporal_layer
=
cpi
->
svc
.
temporal_layer_id
;
LAYER_CONTEXT
*
lc
=
&
cpi
->
svc
.
layer_context
[
temporal_layer
]
;
int
frame_
since
_key
=
cpi
->
rc
.
frames_
since
_key
;
int
frame_to_key
=
cpi
->
rc
.
frames_to_key
;
LAYER_CONTEXT
*
const
lc
=
get_temporal_layer_context
(
&
cpi
->
svc
)
;
const
int
old_frame_since_key
=
cpi
->
rc
.
frames_since_key
;
const
int
old_
frame_
to
_key
=
cpi
->
rc
.
frames_
to
_key
;
cpi
->
rc
=
lc
->
rc
;
cpi
->
oxcf
.
target_bandwidth
=
lc
->
target_bandwidth
;
cpi
->
oxcf
.
starting_buffer_level
=
lc
->
starting_buffer_level
;
...
...
@@ -111,17 +115,18 @@ void vp9_restore_layer_context(VP9_COMP *const cpi) {
cpi
->
output_framerate
=
lc
->
framerate
;
// Reset the frames_since_key and frames_to_key counters to their values
// before the layer restore. Keep these defined for the stream (not layer).
cpi
->
rc
.
frames_since_key
=
frame_since_key
;
cpi
->
rc
.
frames_to_key
=
frame_to_key
;
cpi
->
rc
.
frames_since_key
=
old_
frame_since_key
;
cpi
->
rc
.
frames_to_key
=
old_
frame_to_key
;
}
void
vp9_save_layer_context
(
VP9_COMP
*
const
cpi
)
{
int
temporal_layer
=
cpi
->
svc
.
temporal_layer_id
;
LAYER_CONTEXT
*
lc
=
&
cpi
->
svc
.
layer_context
[
temporal_layer
];
const
VP9_CONFIG
*
const
oxcf
=
&
cpi
->
oxcf
;
LAYER_CONTEXT
*
const
lc
=
get_temporal_layer_context
(
&
cpi
->
svc
);
lc
->
rc
=
cpi
->
rc
;
lc
->
target_bandwidth
=
(
int
)
cpi
->
oxcf
.
target_bandwidth
;
lc
->
starting_buffer_level
=
cpi
->
oxcf
.
starting_buffer_level
;
lc
->
optimal_buffer_level
=
cpi
->
oxcf
.
optimal_buffer_level
;
lc
->
maximum_buffer_size
=
cpi
->
oxcf
.
maximum_buffer_size
;
lc
->
target_bandwidth
=
(
int
)
oxcf
->
target_bandwidth
;
lc
->
starting_buffer_level
=
oxcf
->
starting_buffer_level
;
lc
->
optimal_buffer_level
=
oxcf
->
optimal_buffer_level
;
lc
->
maximum_buffer_size
=
oxcf
->
maximum_buffer_size
;
lc
->
framerate
=
cpi
->
output_framerate
;
}
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