shithub: libvpx

Download patch

ref: c59d1a4dc7969d926d55b18e895e13076bba81eb
parent: 7e8357d6649d6cfc241975b0eb20d80914b6667a
parent: 77ed4414d6dc4b047cab10aebf156bef5719513b
author: Johann Koenig <johannkoenig@google.com>
date: Tue Aug 15 13:37:59 EDT 2017

Merge changes I1f1edeaa,I89313cac

* changes:
  quantize: silence unsigned overflow warning
  quantize test: quiet overflow warning

--- a/test/vp9_quantize_test.cc
+++ b/test/vp9_quantize_test.cc
@@ -210,9 +210,9 @@
     // Two random entries
     coeff.Set(0);
     coeff.TopLeftPixel()[rnd(count)] =
-        rnd.RandRange(max_value_ * 2) - max_value_;
+        static_cast<int>(rnd.RandRange(max_value_ * 2)) - max_value_;
     coeff.TopLeftPixel()[rnd(count)] =
-        rnd.RandRange(max_value_ * 2) - max_value_;
+        static_cast<int>(rnd.RandRange(max_value_ * 2)) - max_value_;
     GenerateHelperArrays(&rnd, zbin_ptr_, round_ptr_, quant_ptr_,
                          quant_shift_ptr_, dequant_ptr_);
 
--- a/vpx_dsp/quantize.c
+++ b/vpx_dsp/quantize.c
@@ -203,7 +203,9 @@
         const int64_t tmp2 = ((tmp1 * quant_ptr[rc != 0]) >> 16) + tmp1;
         const uint32_t abs_qcoeff =
             (uint32_t)((tmp2 * quant_shift_ptr[rc != 0]) >> 16);
-        qcoeff_ptr[rc] = (tran_low_t)((abs_qcoeff ^ coeff_sign) - coeff_sign);
+        // Restoring the sign triggers unsigned overflow warnings with negative
+        // values because the result of the xor operation is unsigned.
+        qcoeff_ptr[rc] = (tran_low_t)(abs_qcoeff ^ coeff_sign) - coeff_sign;
         dqcoeff_ptr[rc] = qcoeff_ptr[rc] * dequant_ptr[rc != 0];
         if (abs_qcoeff) eob = i;
       }
@@ -310,7 +312,7 @@
       const int64_t tmp2 = ((tmp1 * quant_ptr[rc != 0]) >> 16) + tmp1;
       const uint32_t abs_qcoeff =
           (uint32_t)((tmp2 * quant_shift_ptr[rc != 0]) >> 15);
-      qcoeff_ptr[rc] = (tran_low_t)((abs_qcoeff ^ coeff_sign) - coeff_sign);
+      qcoeff_ptr[rc] = (tran_low_t)(abs_qcoeff ^ coeff_sign) - coeff_sign;
       dqcoeff_ptr[rc] = qcoeff_ptr[rc] * dequant_ptr[rc != 0] / 2;
       if (abs_qcoeff) eob = idx_arr[i];
     }