From: Jingning Han Date: Wed, 13 Mar 2019 19:06:39 +0000 (-0700) Subject: Safe guard zero median filter outcome case X-Git-Tag: v1.8.1~195^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e2435ff1f85679d8d67e1f9bb62835fdb948cbeb;p=platform%2Fupstream%2Flibvpx.git Safe guard zero median filter outcome case In case median filter returns 0 value, bypass the Wiener filter stage. This avoids potential divided by 0 case. In the same place use a temp variable to take the Wiener filter output instead of returning to the coeff array. Change-Id: I45f57c515b4062a0aa1f312eda852462cb655d8e --- diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index f3f05d8..fb462c0 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -4793,9 +4793,12 @@ static void set_mb_wiener_variance(VP9_COMP *cpi) { // Wiener filter for (idx = 1; idx < coeff_count; ++idx) { int64_t sqr_coeff = (int64_t)coeff[idx] * coeff[idx]; - coeff[idx] = (int16_t)((sqr_coeff * coeff[idx]) / - (sqr_coeff + (int64_t)median_val * median_val)); - wiener_variance += (int64_t)coeff[idx] * coeff[idx]; + int64_t tmp_coeff = (int64_t)coeff[idx]; + if (median_val) { + tmp_coeff = (sqr_coeff * coeff[idx]) / + (sqr_coeff + (int64_t)median_val * median_val); + } + wiener_variance += tmp_coeff * tmp_coeff; } cpi->mb_wiener_variance[mb_row * cm->mb_cols + mb_col] = wiener_variance / coeff_count;