ref: d35541fe292fd8778d7212234a0bce633cda43af
parent: f7e767d8ee584aabc2074e425186b219d564cce3
parent: 597d1f4c03071dc1af6399a68b2373953e8a820a
author: Jerome Jiang <jianj@google.com>
date: Thu May 11 12:38:56 EDT 2017
Merge "vp9: Fix ubsan failure in denoiser."
--- a/vp9/encoder/vp9_denoiser.c
+++ b/vp9/encoder/vp9_denoiser.c
@@ -191,7 +191,9 @@
int increase_denoising, int mi_row, int mi_col, PICK_MODE_CONTEXT *ctx,
int motion_magnitude, int is_skin, int *zeromv_filter, int consec_zeromv,
int num_spatial_layers, int width) {
- int sse_diff = ctx->zeromv_sse - ctx->newmv_sse;
+ const int sse_diff = (ctx->newmv_sse == UINT_MAX)
+ ? 0
+ : ((int)ctx->zeromv_sse - (int)ctx->newmv_sse);
MV_REFERENCE_FRAME frame;
MACROBLOCKD *filter_mbd = &mb->e_mbd;
MODE_INFO *mi = filter_mbd->mi[0];
@@ -217,7 +219,6 @@
// difference in sum-squared-error, use it.
if (frame != INTRA_FRAME &&
(frame != GOLDEN_FRAME || num_spatial_layers == 1) &&
- ctx->newmv_sse != UINT_MAX &&
sse_diff > sse_diff_thresh(bs, increase_denoising, motion_magnitude)) {
mi->ref_frame[0] = ctx->best_reference_frame;
mi->mode = ctx->best_sse_inter_mode;