Optimizations for denoise_and_encode() -avoid unnecessary calculations -code cleanup No coding stats changes are expected. Change-Id: I6d83fd5e11ccba89731a0c953c7ecdee4882ee81
diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c index a2b5f55..326ecc0 100644 --- a/av1/encoder/encode_strategy.c +++ b/av1/encoder/encode_strategy.c
@@ -873,33 +873,27 @@ static int denoise_and_encode(AV1_COMP *const cpi, uint8_t *const dest, EncodeFrameInput *const frame_input, EncodeFrameParams *const frame_params, - EncodeFrameResults *const frame_results, - int *temporal_filtered) { - if (frame_params->frame_type != KEY_FRAME || - !cpi->oxcf.enable_keyframe_filtering) { - if (av1_encode(cpi, dest, frame_input, frame_params, frame_results) != - AOM_CODEC_OK) { - return AOM_CODEC_ERROR; - } - return AOM_CODEC_OK; - } - + EncodeFrameResults *const frame_results) { const AV1EncoderConfig *const oxcf = &cpi->oxcf; AV1_COMMON *const cm = &cpi->common; - const int num_planes = av1_num_planes(cm); - const double y_noise_level = av1_estimate_noise_from_single_plane( - frame_input->source, 0, cm->seq_params.bit_depth); - const int apply_filtering = - !is_stat_generation_stage(cpi) && frame_params->frame_type == KEY_FRAME && + // Decide whether to apply temporal filtering to the source frame. + int apply_filtering = + frame_params->frame_type == KEY_FRAME && + oxcf->enable_keyframe_filtering && !is_stat_generation_stage(cpi) && !frame_params->show_existing_frame && cpi->rc.frames_to_key > TF_NUM_FILTERING_FRAMES_FOR_KEY_FRAME && - y_noise_level > 0 && !is_lossless_requested(oxcf) && - oxcf->arnr_max_frames > 0; + !is_lossless_requested(oxcf) && oxcf->arnr_max_frames > 0; + if (apply_filtering) { + const double y_noise_level = av1_estimate_noise_from_single_plane( + frame_input->source, 0, cm->seq_params.bit_depth); + apply_filtering = y_noise_level > 0; + } + // Save the pointer to the original source image. YV12_BUFFER_CONFIG *source_kf_buffer = frame_input->source; - // Apply filtering to key frame and encode. + // Apply filtering to key frame. if (apply_filtering) { // Initialization for frame motion estimation. MACROBLOCKD *const xd = &cpi->td.mb.e_mbd; @@ -924,22 +918,16 @@ } else { av1_temporal_filter(cpi, -1, NULL); } - aom_extend_frame_borders(&cpi->alt_ref_buffer, num_planes); + aom_extend_frame_borders(&cpi->alt_ref_buffer, av1_num_planes(cm)); // Use the filtered frame for encoding. frame_input->source = &cpi->alt_ref_buffer; // Copy metadata info to alt-ref buffer. aom_remove_metadata_from_frame_buffer(frame_input->source); aom_copy_metadata_to_frame_buffer(frame_input->source, source_kf_buffer->metadata); - *temporal_filtered = 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); - av1_set_speed_features_framesize_independent(cpi, oxcf->speed); - if (cpi->oxcf.enable_tpl_model) { + if (oxcf->enable_tpl_model && oxcf->lag_in_frames > 0 && + frame_params->show_frame) { av1_tpl_setup_stats(cpi, 0, frame_params, frame_input); } } @@ -950,7 +938,7 @@ } // Set frame_input source to true source for psnr calculation. - if (oxcf->arnr_max_frames > 0 && *temporal_filtered) { + if (apply_filtering) { cpi->source = source_kf_buffer; cpi->unscaled_source = source_kf_buffer; } @@ -1279,8 +1267,8 @@ return AOM_CODEC_ERROR; } #else - if (denoise_and_encode(cpi, dest, &frame_input, &frame_params, &frame_results, - &code_arf) != AOM_CODEC_OK) { + if (denoise_and_encode(cpi, dest, &frame_input, &frame_params, + &frame_results) != AOM_CODEC_OK) { return AOM_CODEC_ERROR; } #endif // CONFIG_REALTIME_ONLY