From 63cb1a7ce0cb7b41ec3f5c3ad05202eed00ff22a Mon Sep 17 00:00:00 2001 From: John Koleszar Date: Thu, 19 May 2011 17:16:39 -0400 Subject: cleanup: collect twopass variables This patch collects the twopass specific memebers of VP8_COMP into a dedicated struct. This is a first step towards isolating the two pass rate control and aids readability by decorating these variables with the 'twopass.' namespace. This makes it clear to the reader in what contexts the variable will be valid, and is a hint that a section of code might be a good candidate to move to firstpass.c in later refactoring. There likely will be other rate control modes that need their own specific data as well. This notation is probably overly verbose in firstpass.c, so an alternative would be to access this struct through a pointer like 'rc->' instead of 'cpi->firstpass.' in that file. Feel free to make a review comment to that effect if you prefer. Change-Id: I0ab8254647cb4b493a77c16b5d236d0d4a94ca4d --- vp8/encoder/onyx_if.c | 66 +++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) (limited to 'vp8/encoder/onyx_if.c') diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c index 4533627ce..96392c7cf 100644 --- a/vp8/encoder/onyx_if.c +++ b/vp8/encoder/onyx_if.c @@ -306,11 +306,11 @@ static void dealloc_compressor_data(VP8_COMP *cpi) cpi->mb.pip = 0; #if !(CONFIG_REALTIME_ONLY) - vpx_free(cpi->total_stats); - cpi->total_stats = 0; + vpx_free(cpi->twopass.total_stats); + cpi->twopass.total_stats = 0; - vpx_free(cpi->this_frame_stats); - cpi->this_frame_stats = 0; + vpx_free(cpi->twopass.this_frame_stats); + cpi->twopass.this_frame_stats = 0; #endif } @@ -1344,15 +1344,15 @@ void vp8_alloc_compressor_data(VP8_COMP *cpi) cm->mb_rows * cm->mb_cols)); #if !(CONFIG_REALTIME_ONLY) - vpx_free(cpi->total_stats); + vpx_free(cpi->twopass.total_stats); - cpi->total_stats = vpx_calloc(1, sizeof(FIRSTPASS_STATS)); + cpi->twopass.total_stats = vpx_calloc(1, sizeof(FIRSTPASS_STATS)); - vpx_free(cpi->this_frame_stats); + vpx_free(cpi->twopass.this_frame_stats); - cpi->this_frame_stats = vpx_calloc(1, sizeof(FIRSTPASS_STATS)); + cpi->twopass.this_frame_stats = vpx_calloc(1, sizeof(FIRSTPASS_STATS)); - if(!cpi->total_stats || !cpi->this_frame_stats) + if(!cpi->twopass.total_stats || !cpi->twopass.this_frame_stats) vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR, "Failed to allocate firstpass stats"); #endif @@ -1415,7 +1415,7 @@ void vp8_new_frame_rate(VP8_COMP *cpi, double framerate) cpi->max_gf_interval = 12; // Extended interval for genuinely static scenes - cpi->static_scene_max_gf_interval = cpi->key_frame_frequency >> 1; + cpi->twopass.static_scene_max_gf_interval = cpi->key_frame_frequency >> 1; // Special conditions when altr ref frame enabled in lagged compress mode if (cpi->oxcf.play_alternate && cpi->oxcf.lag_in_frames) @@ -1423,12 +1423,12 @@ void vp8_new_frame_rate(VP8_COMP *cpi, double framerate) if (cpi->max_gf_interval > cpi->oxcf.lag_in_frames - 1) cpi->max_gf_interval = cpi->oxcf.lag_in_frames - 1; - if (cpi->static_scene_max_gf_interval > cpi->oxcf.lag_in_frames - 1) - cpi->static_scene_max_gf_interval = cpi->oxcf.lag_in_frames - 1; + if (cpi->twopass.static_scene_max_gf_interval > cpi->oxcf.lag_in_frames - 1) + cpi->twopass.static_scene_max_gf_interval = cpi->oxcf.lag_in_frames - 1; } - if ( cpi->max_gf_interval > cpi->static_scene_max_gf_interval ) - cpi->max_gf_interval = cpi->static_scene_max_gf_interval; + if ( cpi->max_gf_interval > cpi->twopass.static_scene_max_gf_interval ) + cpi->max_gf_interval = cpi->twopass.static_scene_max_gf_interval; } @@ -1843,7 +1843,7 @@ VP8_PTR vp8_create_compressor(VP8_CONFIG *oxcf) // Set reference frame sign bias for ALTREF frame to 1 (for now) cpi->common.ref_frame_sign_bias[ALTREF_FRAME] = 1; - cpi->gf_decay_rate = 0; + cpi->twopass.gf_decay_rate = 0; cpi->baseline_gf_interval = DEFAULT_GF_INTERVAL; cpi->gold_is_last = 0 ; @@ -1972,7 +1972,7 @@ VP8_PTR vp8_create_compressor(VP8_CONFIG *oxcf) cpi->rate_correction_factor = 1.0; cpi->key_frame_rate_correction_factor = 1.0; cpi->gf_rate_correction_factor = 1.0; - cpi->est_max_qcorrection_factor = 1.0; + cpi->twopass.est_max_qcorrection_factor = 1.0; cpi->mb.mvcost[0] = &cpi->mb.mvcosts[0][mv_max+1]; cpi->mb.mvcost[1] = &cpi->mb.mvcosts[1][mv_max+1]; @@ -2008,8 +2008,8 @@ VP8_PTR vp8_create_compressor(VP8_CONFIG *oxcf) size_t packet_sz = sizeof(FIRSTPASS_STATS); int packets = oxcf->two_pass_stats_in.sz / packet_sz; - cpi->stats_in = oxcf->two_pass_stats_in.buf; - cpi->stats_in_end = (void*)((char *)cpi->stats_in + cpi->twopass.stats_in = oxcf->two_pass_stats_in.buf; + cpi->twopass.stats_in_end = (void*)((char *)cpi->twopass.stats_in + (packets - 1) * packet_sz); vp8_init_second_pass(cpi); } @@ -3224,8 +3224,8 @@ static void encode_frame_to_data_rate { if (cpi->common.refresh_alt_ref_frame) { - cpi->per_frame_bandwidth = cpi->gf_bits; // Per frame bit target for the alt ref frame - cpi->target_bandwidth = cpi->gf_bits * cpi->output_frame_rate; // per second target bitrate + cpi->per_frame_bandwidth = cpi->twopass.gf_bits; // Per frame bit target for the alt ref frame + cpi->target_bandwidth = cpi->twopass.gf_bits * cpi->output_frame_rate; // per second target bitrate } } else @@ -4019,7 +4019,7 @@ static void encode_frame_to_data_rate // Special case code to reduce pulsing when key frames are forced at a // fixed interval. Note the reconstruction error if it is the frame before // the force key frame - if ( cpi->next_key_frame_forced && (cpi->frames_to_key == 0) ) + if ( cpi->next_key_frame_forced && (cpi->twopass.frames_to_key == 0) ) { cpi->ambient_err = vp8_calc_ss_err(cpi->Source, &cm->yv12_fb[cm->new_fb_idx], @@ -4225,17 +4225,17 @@ static void encode_frame_to_data_rate // Update bits left to the kf and gf groups to account for overshoot or undershoot on these frames if (cm->frame_type == KEY_FRAME) { - cpi->kf_group_bits += cpi->this_frame_target - cpi->projected_frame_size; + cpi->twopass.kf_group_bits += cpi->this_frame_target - cpi->projected_frame_size; - if (cpi->kf_group_bits < 0) - cpi->kf_group_bits = 0 ; + if (cpi->twopass.kf_group_bits < 0) + cpi->twopass.kf_group_bits = 0 ; } else if (cm->refresh_golden_frame || cm->refresh_alt_ref_frame) { - cpi->gf_group_bits += cpi->this_frame_target - cpi->projected_frame_size; + cpi->twopass.gf_group_bits += cpi->this_frame_target - cpi->projected_frame_size; - if (cpi->gf_group_bits < 0) - cpi->gf_group_bits = 0 ; + if (cpi->twopass.gf_group_bits < 0) + cpi->twopass.gf_group_bits = 0 ; } if (cm->frame_type != KEY_FRAME) @@ -4282,7 +4282,7 @@ static void encode_frame_to_data_rate //cpi->avg_frame_qindex, cpi->zbin_over_quant, cm->refresh_golden_frame, cm->refresh_alt_ref_frame, cm->frame_type, cpi->gfu_boost, - cpi->est_max_qcorrection_factor, (int)cpi->bits_left, + cpi->twopass.est_max_qcorrection_factor, (int)cpi->bits_left, cpi->total_coded_error_left, (double)cpi->bits_left / cpi->total_coded_error_left, cpi->tot_recode_hits); @@ -4301,7 +4301,7 @@ static void encode_frame_to_data_rate //cpi->avg_frame_qindex, cpi->zbin_over_quant, cm->refresh_golden_frame, cm->refresh_alt_ref_frame, cm->frame_type, cpi->gfu_boost, - cpi->est_max_qcorrection_factor, (int)cpi->bits_left, + cpi->twopass.est_max_qcorrection_factor, (int)cpi->bits_left, cpi->total_coded_error_left, cpi->tot_recode_hits); fclose(f); @@ -4505,13 +4505,13 @@ static void Pass2Encode(VP8_COMP *cpi, unsigned long *size, unsigned char *dest, vp8_second_pass(cpi); encode_frame_to_data_rate(cpi, size, dest, frame_flags); - cpi->bits_left -= 8 * *size; + cpi->twopass.bits_left -= 8 * *size; if (!cpi->common.refresh_alt_ref_frame) { double two_pass_min_rate = (double)(cpi->oxcf.target_bandwidth *cpi->oxcf.two_pass_vbrmin_section / 100); - cpi->bits_left += (long long)(two_pass_min_rate / cpi->oxcf.frame_rate); + cpi->twopass.bits_left += (long long)(two_pass_min_rate / cpi->oxcf.frame_rate); } } #endif @@ -4645,10 +4645,10 @@ int vp8_get_compressed_data(VP8_PTR ptr, unsigned int *frame_flags, unsigned lon *size = 0; #if !(CONFIG_REALTIME_ONLY) - if (flush && cpi->pass == 1 && !cpi->first_pass_done) + if (flush && cpi->pass == 1 && !cpi->twopass.first_pass_done) { vp8_end_first_pass(cpi); /* get last stats packet */ - cpi->first_pass_done = 1; + cpi->twopass.first_pass_done = 1; } #endif -- cgit v1.2.3