warped motion: fix some UBsan errors. Fixes the following UBSan errors due to left shifting negative values. Change-Id: I578ca3f56417a94ffe83f634171903897117aa6b
diff --git a/av1/common/warped_motion.c b/av1/common/warped_motion.c index a0667e6..539b9e0 100644 --- a/av1/common/warped_motion.c +++ b/av1/common/warped_motion.c
@@ -780,14 +780,14 @@ if (!is_affine_shear_allowed(wm->alpha, wm->beta, wm->gamma, wm->delta)) return 0; - wm->alpha = ROUND_POWER_OF_TWO_SIGNED(wm->alpha, WARP_PARAM_REDUCE_BITS) - << WARP_PARAM_REDUCE_BITS; - wm->beta = ROUND_POWER_OF_TWO_SIGNED(wm->beta, WARP_PARAM_REDUCE_BITS) - << WARP_PARAM_REDUCE_BITS; - wm->gamma = ROUND_POWER_OF_TWO_SIGNED(wm->gamma, WARP_PARAM_REDUCE_BITS) - << WARP_PARAM_REDUCE_BITS; - wm->delta = ROUND_POWER_OF_TWO_SIGNED(wm->delta, WARP_PARAM_REDUCE_BITS) - << WARP_PARAM_REDUCE_BITS; + wm->alpha = ROUND_POWER_OF_TWO_SIGNED(wm->alpha, WARP_PARAM_REDUCE_BITS) * + (1 << WARP_PARAM_REDUCE_BITS); + wm->beta = ROUND_POWER_OF_TWO_SIGNED(wm->beta, WARP_PARAM_REDUCE_BITS) * + (1 << WARP_PARAM_REDUCE_BITS); + wm->gamma = ROUND_POWER_OF_TWO_SIGNED(wm->gamma, WARP_PARAM_REDUCE_BITS) * + (1 << WARP_PARAM_REDUCE_BITS); + wm->delta = ROUND_POWER_OF_TWO_SIGNED(wm->delta, WARP_PARAM_REDUCE_BITS) * + (1 << WARP_PARAM_REDUCE_BITS); return 1; }
diff --git a/av1/common/x86/warp_plane_ssse3.c b/av1/common/x86/warp_plane_ssse3.c index ce3d531..226729e 100644 --- a/av1/common/x86/warp_plane_ssse3.c +++ b/av1/common/x86/warp_plane_ssse3.c
@@ -253,10 +253,10 @@ sx4 += alpha * (-4) + beta * (-4); sy4 += gamma * (-4) + delta * (-4); - sx4 = ROUND_POWER_OF_TWO_SIGNED(sx4, WARP_PARAM_REDUCE_BITS) - << WARP_PARAM_REDUCE_BITS; - sy4 = ROUND_POWER_OF_TWO_SIGNED(sy4, WARP_PARAM_REDUCE_BITS) - << WARP_PARAM_REDUCE_BITS; + sx4 = ROUND_POWER_OF_TWO_SIGNED(sx4, WARP_PARAM_REDUCE_BITS) * + (1 << WARP_PARAM_REDUCE_BITS); + sy4 = ROUND_POWER_OF_TWO_SIGNED(sy4, WARP_PARAM_REDUCE_BITS) * + (1 << WARP_PARAM_REDUCE_BITS); // Horizontal filter for (k = -7; k < AOMMIN(8, p_height - i); ++k) {