Create function for checks related to first pass Moved the check for first pass into a inline function is_stat_generation_stage() Change-Id: Ic0d34c7654840ff8f5dfbaf7153fe90af9ac9dd7
diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c index 4b5a68c..5d5c89e 100644 --- a/av1/encoder/encode_strategy.c +++ b/av1/encoder/encode_strategy.c
@@ -104,7 +104,7 @@ } if (cpi->ext_refresh_frame_flags_pending && - (cpi->oxcf.pass == 0 || cpi->oxcf.pass == 2)) { + (!is_stat_generation_stage(cpi))) { frame_params->refresh_last_frame = cpi->ext_refresh_last_frame; frame_params->refresh_golden_frame = cpi->ext_refresh_golden_frame; frame_params->refresh_alt_ref_frame = cpi->ext_refresh_alt_ref_frame; @@ -974,7 +974,7 @@ *temporal_filtered = 1; } - if (oxcf->lag_in_frames > 0 && oxcf->pass != 1 && + if (oxcf->lag_in_frames > 0 && !is_stat_generation_stage(cpi) && frame_params->frame_type == KEY_FRAME && frame_params->show_frame) { av1_configure_buffer_updates(cpi, frame_params, KEY_FRAME, 0); av1_set_frame_size(cpi, cm->width, cm->height); @@ -1124,7 +1124,7 @@ if (oxcf->pass == 0 && oxcf->rc_mode != AOM_Q) cpi->oxcf.gf_max_pyr_height = USE_ALTREF_FOR_ONE_PASS; - if (oxcf->pass == 0 || oxcf->pass == 2) { + if (!is_stat_generation_stage(cpi)) { // If this is a forward keyframe, mark as a show_existing_frame if (cpi->oxcf.fwd_kf_enabled && (gf_group->index == gf_group->size) && gf_group->update_type[1] == ARF_UPDATE && cpi->rc.frames_to_key == 0) { @@ -1208,7 +1208,7 @@ #else if (oxcf->pass == 0 && oxcf->mode == REALTIME && oxcf->lag_in_frames == 0) av1_get_one_pass_rt_params(cpi, &frame_params, *frame_flags); - else if (oxcf->pass != 1) + else if (!is_stat_generation_stage(cpi)) av1_get_second_pass_params(cpi, &frame_params, *frame_flags); #endif FRAME_UPDATE_TYPE frame_update_type = get_frame_update_type(gf_group); @@ -1233,7 +1233,7 @@ // Work out some encoding parameters specific to the pass: if (cpi->oxcf.pass == 0 && cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ) { av1_cyclic_refresh_update_parameters(cpi); - } else if (oxcf->pass == 1) { + } else if (is_stat_generation_stage(cpi)) { cpi->td.mb.e_mbd.lossless[0] = is_lossless_requested(&cpi->oxcf); const int kf_requested = (cm->current_frame.frame_number == 0 || (*frame_flags & FRAMEFLAGS_KEY)); @@ -1253,7 +1253,7 @@ #endif } - if (oxcf->pass == 0 || oxcf->pass == 2) set_ext_overrides(cpi, &frame_params); + if (!is_stat_generation_stage(cpi)) set_ext_overrides(cpi, &frame_params); // Shown keyframes and S frames refresh all reference buffers const int force_refresh_all = @@ -1264,7 +1264,7 @@ av1_configure_buffer_updates(cpi, &frame_params, frame_update_type, force_refresh_all); - if (oxcf->pass == 0 || oxcf->pass == 2) { + if (!is_stat_generation_stage(cpi)) { if (!cpi->ext_refresh_frame_flags_pending) { av1_get_ref_frames(cpi, &cpi->ref_buffer_stack); } else if (cpi->svc.external_ref_frame_config) { @@ -1308,7 +1308,7 @@ cm->min_qmlevel = cpi->oxcf.qm_minlevel; cm->max_qmlevel = cpi->oxcf.qm_maxlevel; #if !CONFIG_REALTIME_ONLY - if (oxcf->lag_in_frames > 0 && oxcf->pass != 1) { + if (oxcf->lag_in_frames > 0 && !is_stat_generation_stage(cpi)) { if (cpi->gf_group.index == 1 && cpi->oxcf.enable_tpl_model) { av1_configure_buffer_updates(cpi, &frame_params, frame_update_type, 0); av1_set_frame_size(cpi, cm->width, cm->height); @@ -1332,9 +1332,10 @@ return AOM_CODEC_ERROR; } #endif // CONFIG_REALTIME_ONLY - if (oxcf->pass != 1) cpi->num_gf_group_show_frames += frame_params.show_frame; + if (!is_stat_generation_stage(cpi)) + cpi->num_gf_group_show_frames += frame_params.show_frame; - if (oxcf->pass == 0 || oxcf->pass == 2) { + if (!is_stat_generation_stage(cpi)) { // First pass doesn't modify reference buffer assignment or produce frame // flags update_frame_flags(cpi, frame_flags); @@ -1347,7 +1348,7 @@ } #if !CONFIG_REALTIME_ONLY - if (oxcf->pass != 1) { + if (!is_stat_generation_stage(cpi)) { #if TXCOEFF_COST_TIMER cm->cum_txcoeff_cost_timer += cm->txcoeff_cost_timer; fprintf(stderr, @@ -1360,7 +1361,7 @@ } #endif // !CONFIG_REALTIME_ONLY - if (oxcf->pass != 1) { + if (!is_stat_generation_stage(cpi)) { update_fb_of_context_type(cpi, &frame_params, cpi->fb_of_context_type); set_additional_frame_flags(cm, frame_flags); update_rc_counts(cpi);
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c index 4a02ea1..aa05d8d 100644 --- a/av1/encoder/encodeframe.c +++ b/av1/encoder/encodeframe.c
@@ -5092,7 +5092,7 @@ cm->allow_intrabc &= (cpi->oxcf.enable_intrabc); - if (cpi->oxcf.pass != 1 && av1_use_hash_me(cpi) && + if (!is_stat_generation_stage(cpi) && av1_use_hash_me(cpi) && !cpi->sf.use_nonrd_pick_mode) { // add to hash table const int pic_width = cpi->source->y_crop_width;
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c index a69c22d..37d14a4 100644 --- a/av1/encoder/encoder.c +++ b/av1/encoder/encoder.c
@@ -2959,7 +2959,7 @@ #endif #if !CONFIG_REALTIME_ONLY - if (oxcf->pass == 1) { + if (is_stat_generation_stage(cpi)) { av1_init_first_pass(cpi); } else if (oxcf->pass == 2) { const size_t packet_sz = sizeof(FIRSTPASS_STATS); @@ -3312,7 +3312,7 @@ if (cm->current_frame.frame_number > 0) { #if CONFIG_ENTROPY_STATS - if (cpi->oxcf.pass != 1) { + if (!is_stat_generation_stage(cpi)) { fprintf(stderr, "Writing counts.stt\n"); FILE *f = fopen("counts.stt", "wb"); fwrite(&aggregate_fc, sizeof(aggregate_fc), 1, f); @@ -3322,7 +3322,7 @@ #if CONFIG_INTERNAL_STATS aom_clear_system_state(); - if (cpi->oxcf.pass != 1) { + if (!is_stat_generation_stage(cpi)) { char headings[512] = { 0 }; char results[512] = { 0 }; FILE *f = fopen("opsnr.stt", "a"); @@ -3393,13 +3393,13 @@ } #endif // CONFIG_INTERNAL_STATS #if CONFIG_SPEED_STATS - if (cpi->oxcf.pass != 1) { + if (!is_stat_generation_stage(cpi)) { fprintf(stdout, "tx_search_count = %d\n", cpi->tx_search_count); } #endif // CONFIG_SPEED_STATS #if CONFIG_COLLECT_PARTITION_STATS == 2 - if (cpi->oxcf.pass != 1) { + if (!is_stat_generation_stage(cpi)) { av1_print_partition_stats(&cpi->partition_stats); } #endif @@ -4229,7 +4229,7 @@ // Choose an arbitrary random number static unsigned int seed = 56789; const AV1EncoderConfig *oxcf = &cpi->oxcf; - if (oxcf->pass == 1) return SCALE_NUMERATOR; + if (is_stat_generation_stage(cpi)) return SCALE_NUMERATOR; uint8_t new_denom = SCALE_NUMERATOR; if (cpi->common.seq_params.reduced_still_picture_hdr) return SCALE_NUMERATOR; @@ -4343,7 +4343,7 @@ // Choose an arbitrary random number static unsigned int seed = 34567; const AV1EncoderConfig *oxcf = &cpi->oxcf; - if (oxcf->pass == 1) return SCALE_NUMERATOR; + if (is_stat_generation_stage(cpi)) return SCALE_NUMERATOR; uint8_t new_denom = SCALE_NUMERATOR; // Make sure that superres mode of the frame is consistent with the @@ -4494,7 +4494,7 @@ rsz.resize_height = cpi->common.height; return rsz; } - if (oxcf->pass == 1) return rsz; + if (is_stat_generation_stage(cpi)) return rsz; if (cpi->resize_pending_width && cpi->resize_pending_height) { rsz.resize_width = cpi->resize_pending_width; rsz.resize_height = cpi->resize_pending_height; @@ -5895,8 +5895,8 @@ } // Work out whether to force_integer_mv this frame - if (oxcf->pass != 1 && cpi->common.allow_screen_content_tools && - !frame_is_intra_only(cm)) { + if (!is_stat_generation_stage(cpi) && + cpi->common.allow_screen_content_tools && !frame_is_intra_only(cm)) { if (cpi->common.seq_params.force_integer_mv == 2) { // Adaptive mode: see what previous frame encoded did if (cpi->unscaled_last_source != NULL) { @@ -5919,7 +5919,7 @@ "Hash-me is leaking memory!"); #endif - if (cpi->oxcf.pass != 1 && cpi->need_to_clear_prev_hash_table) { + if (!is_stat_generation_stage(cpi) && cpi->need_to_clear_prev_hash_table) { av1_hash_table_clear_all(cpi->previous_hash_table); cpi->need_to_clear_prev_hash_table = 0; } @@ -6125,7 +6125,7 @@ // Store encoded frame's hash table for in_integer_mv() next time. // Beware! If we don't update previous_hash_table here we will leak the // items stored in cur_frame's hash_table! - if (oxcf->pass != 1 && av1_use_hash_me(cpi)) { + if (!is_stat_generation_stage(cpi) && av1_use_hash_me(cpi)) { cpi->previous_hash_table = &cm->cur_frame->hash_table; cpi->need_to_clear_prev_hash_table = 1; } @@ -6192,7 +6192,7 @@ (1 << (cm->seq_params.order_hint_info.order_hint_bits_minus_1 + 1)); } - if (cpi->oxcf.pass == 1) { + if (is_stat_generation_stage(cpi)) { #if !CONFIG_REALTIME_ONLY av1_first_pass(cpi, frame_input->ts_duration); #endif @@ -6463,12 +6463,13 @@ cpi->time_compress_data += aom_usec_timer_elapsed(&cmptimer); #endif // CONFIG_INTERNAL_STATS if (cpi->b_calculate_psnr) { - if (cm->show_existing_frame || (oxcf->pass != 1 && cm->show_frame)) { + if (cm->show_existing_frame || + (!is_stat_generation_stage(cpi) && cm->show_frame)) { generate_psnr_packet(cpi); } } - if (cpi->keep_level_stats && oxcf->pass != 1) { + if (cpi->keep_level_stats && !is_stat_generation_stage(cpi)) { // Initialize level info. at the beginning of each sequence. if (cm->current_frame.frame_type == KEY_FRAME && cm->show_frame) { av1_init_level_info(cpi); @@ -6477,12 +6478,12 @@ } #if CONFIG_INTERNAL_STATS - if (oxcf->pass != 1) { + if (!is_stat_generation_stage(cpi)) { compute_internal_stats(cpi, (int)(*size)); } #endif // CONFIG_INTERNAL_STATS #if CONFIG_SPEED_STATS - if (cpi->oxcf.pass != 1 && !cm->show_existing_frame) { + if (!is_stat_generation_stage(cpi) && !cm->show_existing_frame) { cpi->tx_search_count += cpi->td.mb.tx_search_count; cpi->td.mb.tx_search_count = 0; }
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h index dfaf33b..8fd07ce 100644 --- a/av1/encoder/encoder.h +++ b/av1/encoder/encoder.h
@@ -1358,6 +1358,11 @@ return cpi->oxcf.lag_in_frames >= ALT_MIN_LAG && cpi->oxcf.enable_auto_arf; } +// Check if statistics generation stage +static INLINE int is_stat_generation_stage(const AV1_COMP *const cpi) { + return (cpi->oxcf.pass == 1); +} + // TODO(zoeliu): To set up cpi->oxcf.enable_auto_brf static INLINE void set_ref_ptrs(const AV1_COMMON *cm, MACROBLOCKD *xd,
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c index 392189a..27d8b22 100644 --- a/av1/encoder/rd.c +++ b/av1/encoder/rd.c
@@ -618,13 +618,13 @@ cm->allow_high_precision_mv, x); if (frame_is_intra_only(cm) && cm->allow_screen_content_tools && - cpi->oxcf.pass != 1) { + !is_stat_generation_stage(cpi)) { int *dvcost[2] = { &cpi->dv_cost[0][MV_MAX], &cpi->dv_cost[1][MV_MAX] }; av1_build_nmv_cost_table(cpi->dv_joint_cost, dvcost, &cm->fc->ndvc, MV_SUBPEL_NONE); } - if (cpi->oxcf.pass != 1) { + if (!is_stat_generation_stage(cpi)) { for (int i = 0; i < TRANS_TYPES; ++i) // IDENTITY: 1 bit // TRANSLATION: 3 bits
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c index e4df066..90521fd 100644 --- a/av1/encoder/speed_features.c +++ b/av1/encoder/speed_features.c
@@ -992,7 +992,7 @@ // Slow quant, dct and trellis not worthwhile for first pass // so make sure they are always turned off. - if (oxcf->pass == 1) sf->optimize_coefficients = NO_TRELLIS_OPT; + if (is_stat_generation_stage(cpi)) sf->optimize_coefficients = NO_TRELLIS_OPT; // No recode or trellis for 1 pass. if (oxcf->pass == 0) sf->recode_loop = DISALLOW_RECODE;