From 84520829ed508a24e66b05b5202f5fca77443f75 Mon Sep 17 00:00:00 2001 From: Dmitry Kovalev <dkovalev@google.com> Date: Fri, 3 Jan 2014 12:11:36 -0800 Subject: [PATCH] Cleaning up get_prediction_decay_rate() function. Change-Id: Ie8fcee21f41f91f94b4fa02f2a55691dea1734e3 --- vp9/encoder/vp9_firstpass.c | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c index 16cf284731..3df9a1f801 100644 --- a/vp9/encoder/vp9_firstpass.c +++ b/vp9/encoder/vp9_firstpass.c @@ -1163,32 +1163,15 @@ void vp9_end_second_pass(VP9_COMP *cpi) { // the prediction quality is decaying from frame to frame. static double get_prediction_decay_rate(VP9_COMP *cpi, FIRSTPASS_STATS *next_frame) { - double prediction_decay_rate; - double second_ref_decay; - double mb_sr_err_diff; - - // Initial basis is the % mbs inter coded - prediction_decay_rate = next_frame->pcnt_inter; - // Look at the observed drop in prediction quality between the last frame // and the GF buffer (which contains an older frame). - mb_sr_err_diff = (next_frame->sr_coded_error - next_frame->coded_error) / - cpi->common.MBs; - if (mb_sr_err_diff <= 512.0) { - second_ref_decay = 1.0 - (mb_sr_err_diff / 512.0); - second_ref_decay = pow(second_ref_decay, 0.5); - if (second_ref_decay < 0.85) - second_ref_decay = 0.85; - else if (second_ref_decay > 1.0) - second_ref_decay = 1.0; - } else { - second_ref_decay = 0.85; - } - - if (second_ref_decay < prediction_decay_rate) - prediction_decay_rate = second_ref_decay; + const double mb_sr_err_diff = (next_frame->sr_coded_error - + next_frame->coded_error) / cpi->common.MBs; + const double second_ref_decay = mb_sr_err_diff <= 512.0 + ? fclamp(pow(1.0 - (mb_sr_err_diff / 512.0), 0.5), 0.85, 1.0) + : 0.85; - return prediction_decay_rate; + return MIN(second_ref_decay, next_frame->pcnt_inter); } // Function to test for a condition where a complex transition is followed -- GitLab