Merge "Moving init_rate_control() to vp9_ratectrl.{c, h}."

This commit is contained in:
Dmitry Kovalev 2014-04-08 12:45:49 -07:00 committed by Gerrit Code Review
commit e9fb970af1
4 changed files with 55 additions and 53 deletions

View File

@ -748,57 +748,6 @@ 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;
rc->baseline_gf_interval = DEFAULT_GF_INTERVAL;
rc->frames_since_key = 8; // Sensible default for first frame.
rc->this_key_frame_forced = 0;
rc->next_key_frame_forced = 0;
rc->source_alt_ref_pending = 0;
rc->source_alt_ref_active = 0;
rc->frames_till_gf_update_due = 0;
rc->ni_av_qi = oxcf->worst_allowed_q;
rc->ni_tot_qi = 0;
rc->ni_frames = 0;
rc->tot_q = 0.0;
rc->avg_q = vp9_convert_qindex_to_q(oxcf->worst_allowed_q);
rc->rate_correction_factor = 1.0;
rc->key_frame_rate_correction_factor = 1.0;
rc->gf_rate_correction_factor = 1.0;
}
static void init_config(struct VP9_COMP *cpi, VP9_CONFIG *oxcf) {
VP9_COMMON *const cm = &cpi->common;
int i;
@ -1195,7 +1144,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);
vp9_rc_init(&cpi->oxcf, cpi->pass, &cpi->rc);
init_pick_mode_context(cpi);
cm->current_video_frame = 0;

View File

@ -185,7 +185,7 @@ typedef enum {
AQ_MODE_COUNT // This should always be the last member of the enum
} AQ_MODE;
typedef struct {
typedef struct VP9_CONFIG {
int version; // 4 versions of bitstream defined:
// 0 - best quality/slowest decode,
// 3 - lowest quality/fastest decode

View File

@ -184,6 +184,56 @@ static void update_buffer_level(VP9_COMP *cpi, int encoded_frame_size) {
}
}
void vp9_rc_init(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;
rc->baseline_gf_interval = DEFAULT_GF_INTERVAL;
rc->frames_since_key = 8; // Sensible default for first frame.
rc->this_key_frame_forced = 0;
rc->next_key_frame_forced = 0;
rc->source_alt_ref_pending = 0;
rc->source_alt_ref_active = 0;
rc->frames_till_gf_update_due = 0;
rc->ni_av_qi = oxcf->worst_allowed_q;
rc->ni_tot_qi = 0;
rc->ni_frames = 0;
rc->tot_q = 0.0;
rc->avg_q = vp9_convert_qindex_to_q(oxcf->worst_allowed_q);
rc->rate_correction_factor = 1.0;
rc->key_frame_rate_correction_factor = 1.0;
rc->gf_rate_correction_factor = 1.0;
}
int vp9_rc_drop_frame(VP9_COMP *cpi) {
const VP9_CONFIG *oxcf = &cpi->oxcf;
RATE_CONTROL *const rc = &cpi->rc;

View File

@ -87,6 +87,9 @@ typedef struct {
} RATE_CONTROL;
struct VP9_COMP;
struct VP9_CONFIG;
void vp9_rc_init(const struct VP9_CONFIG *oxcf, int pass, RATE_CONTROL *rc);
double vp9_convert_qindex_to_q(int qindex);