Merge "Adding init_rate_control() function + cleanup."

This commit is contained in:
Dmitry Kovalev 2014-03-24 14:17:23 -07:00 committed by Gerrit Code Review
commit 65259f2110
2 changed files with 35 additions and 37 deletions

View File

@ -1202,9 +1202,39 @@ static void set_tile_limits(VP9_COMP *cpi) {
cm->log2_tile_rows = cpi->oxcf.tile_rows;
}
static void init_rate_control(const VP9_CONFIG *oxcf, int pass,
RATE_CONTROL *rc) {
if (pass == 0 && oxcf->end_usage == USAGE_STREAM_FROM_SERVER) {
rc->avg_frame_qindex[0] = oxcf->worst_allowed_q;
rc->avg_frame_qindex[1] = oxcf->worst_allowed_q;
rc->avg_frame_qindex[2] = oxcf->worst_allowed_q;
} else {
rc->avg_frame_qindex[0] = (oxcf->worst_allowed_q +
oxcf->best_allowed_q) / 2;
rc->avg_frame_qindex[1] = (oxcf->worst_allowed_q +
oxcf->best_allowed_q) / 2;
rc->avg_frame_qindex[2] = (oxcf->worst_allowed_q +
oxcf->best_allowed_q) / 2;
}
rc->last_q[0] = oxcf->best_allowed_q;
rc->last_q[1] = oxcf->best_allowed_q;
rc->last_q[2] = oxcf->best_allowed_q;
rc->buffer_level = oxcf->starting_buffer_level;
rc->bits_off_target = oxcf->starting_buffer_level;
rc->rolling_target_bits = rc->av_per_frame_bandwidth;
rc->rolling_actual_bits = rc->av_per_frame_bandwidth;
rc->long_rolling_target_bits = rc->av_per_frame_bandwidth;
rc->long_rolling_actual_bits = rc->av_per_frame_bandwidth;
rc->total_actual_bits = 0;
rc->total_target_vs_actual = 0;
}
static void init_config(struct VP9_COMP *cpi, VP9_CONFIG *oxcf) {
VP9_COMMON *const cm = &cpi->common;
RATE_CONTROL *const rc = &cpi->rc;
int i;
cpi->oxcf = *oxcf;
@ -1230,35 +1260,6 @@ static void init_config(struct VP9_COMP *cpi, VP9_CONFIG *oxcf) {
// change includes all joint functionality
vp9_change_config(cpi, oxcf);
// Initialize active best and worst q and average q values.
if (cpi->pass == 0 && cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) {
rc->avg_frame_qindex[0] = cpi->oxcf.worst_allowed_q;
rc->avg_frame_qindex[1] = cpi->oxcf.worst_allowed_q;
rc->avg_frame_qindex[2] = cpi->oxcf.worst_allowed_q;
} else {
rc->avg_frame_qindex[0] = (cpi->oxcf.worst_allowed_q +
cpi->oxcf.best_allowed_q) / 2;
rc->avg_frame_qindex[1] = (cpi->oxcf.worst_allowed_q +
cpi->oxcf.best_allowed_q) / 2;
rc->avg_frame_qindex[2] = (cpi->oxcf.worst_allowed_q +
cpi->oxcf.best_allowed_q) / 2;
}
rc->last_q[0] = cpi->oxcf.best_allowed_q;
rc->last_q[1] = cpi->oxcf.best_allowed_q;
rc->last_q[2] = cpi->oxcf.best_allowed_q;
// Initialise the starting buffer levels
rc->buffer_level = cpi->oxcf.starting_buffer_level;
rc->bits_off_target = cpi->oxcf.starting_buffer_level;
rc->rolling_target_bits = rc->av_per_frame_bandwidth;
rc->rolling_actual_bits = rc->av_per_frame_bandwidth;
rc->long_rolling_target_bits = rc->av_per_frame_bandwidth;
rc->long_rolling_actual_bits = rc->av_per_frame_bandwidth;
rc->total_actual_bits = 0;
rc->total_target_vs_actual = 0;
cpi->static_mb_pct = 0;
cpi->lst_fb_idx = 0;
@ -1272,15 +1273,11 @@ static void init_config(struct VP9_COMP *cpi, VP9_CONFIG *oxcf) {
cpi->fixed_divide[i] = 0x80000 / i;
}
void vp9_change_config(struct VP9_COMP *cpi, VP9_CONFIG *oxcf) {
void vp9_change_config(struct VP9_COMP *cpi, const VP9_CONFIG *oxcf) {
VP9_COMMON *const cm = &cpi->common;
if (!cpi || !oxcf)
return;
if (cm->version != oxcf->version) {
if (cm->version != oxcf->version)
cm->version = oxcf->version;
}
cpi->oxcf = *oxcf;
@ -1631,6 +1628,7 @@ VP9_COMP *vp9_create_compressor(VP9_CONFIG *oxcf) {
cpi->use_svc = 0;
init_config(cpi, oxcf);
init_rate_control(&cpi->oxcf, cpi->pass, &cpi->rc);
init_pick_mode_context(cpi);
cm->current_video_frame = 0;

View File

@ -825,7 +825,7 @@ void vp9_initialize_enc();
struct VP9_COMP *vp9_create_compressor(VP9_CONFIG *oxcf);
void vp9_remove_compressor(VP9_COMP *cpi);
void vp9_change_config(VP9_COMP *cpi, VP9_CONFIG *oxcf);
void vp9_change_config(VP9_COMP *cpi, const VP9_CONFIG *oxcf);
// receive a frames worth of data. caller can assume that a copy of this
// frame is made and not just a copy of the pointer..