From: paulwilkins Date: Wed, 15 Feb 2017 16:41:38 +0000 (+0000) Subject: Change to prediction decay calculation. X-Git-Tag: v1.7.0~690^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a63adac6040345003f806fba0e778092c06ffdff;p=libvpx Change to prediction decay calculation. This change subtracts out low complexity intra regions that are also low error in the inter domain, in the calculation of the frame prediction decay. The rationale here his that low complexity regions (such as sky) do not imply high prediction decay in the same way as high error intra or neutral blocks. The effect of this is small in most clips but in a few clips it can be > 10%. (E.g. In to tree) Change-Id: If67ac23d17fca14285cad2defa464c61c9ea861c --- diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c index f95081c98..3f722090f 100644 --- a/vp9/encoder/vp9_firstpass.c +++ b/vp9/encoder/vp9_firstpass.c @@ -1275,7 +1275,11 @@ void vp9_first_pass_encode_tile_mb_row(VP9_COMP *cpi, ThreadData *td, int scaled_low_intra_thresh = scale_sse_threshold(cm, LOW_I_THRESH); if (this_intra_error < scaled_low_intra_thresh) { fp_acc_data->frame_noise_energy += fp_estimate_block_noise(x, bsize); - fp_acc_data->intra_count_low += 1.0; + if (motion_error < scaled_low_intra_thresh) { + fp_acc_data->intra_count_low += 1.0; + } else { + fp_acc_data->intra_count_high += 1.0; + } } else { fp_acc_data->frame_noise_energy += (int64_t)SECTION_NOISE_DEF; fp_acc_data->intra_count_high += 1.0; @@ -1731,7 +1735,8 @@ static double get_sr_decay_rate(const VP9_COMP *cpi, if (((frame->coded_error / num_mbs) > LOW_CODED_ERR_PER_MB) && ((frame->intra_error / DOUBLE_DIVIDE_CHECK(frame->coded_error)) < (double)NCOUNT_FRAME_II_THRESH)) { - modified_pct_inter = frame->pcnt_inter - frame->pcnt_neutral; + modified_pct_inter = + frame->pcnt_inter + frame->pcnt_intra_low - frame->pcnt_neutral; } modified_pcnt_intra = 100 * (1.0 - modified_pct_inter);