Index: third_party/libwebp/dec/quant.c |
diff --git a/third_party/libwebp/dec/quant.c b/third_party/libwebp/dec/quant.c |
index aee4fd30280f703fcdf1f0032d311fbcec59fb8e..d54097af0debf21f58305fa5f78a7b29844bd520 100644 |
--- a/third_party/libwebp/dec/quant.c |
+++ b/third_party/libwebp/dec/quant.c |
@@ -1,4 +1,4 @@ |
-// Copyright 2010 Google Inc. |
+// Copyright 2010 Google Inc. All Rights Reserved. |
// |
// This code is licensed under the same terms as WebM: |
// Software License Agreement: http://www.webmproject.org/license/software/ |
@@ -9,13 +9,13 @@ |
// |
// Author: Skal (pascal.massimino@gmail.com) |
-#include "vp8i.h" |
+#include "./vp8i.h" |
#if defined(__cplusplus) || defined(c_plusplus) |
extern "C" { |
#endif |
-static inline int clip(int v, int M) { |
+static WEBP_INLINE int clip(int v, int M) { |
return v < 0 ? 0 : v > M ? M : v; |
} |
@@ -94,8 +94,10 @@ void VP8ParseQuant(VP8Decoder* const dec) { |
m->y1_mat_[1] = kAcTable[clip(q + 0, 127)]; |
m->y2_mat_[0] = kDcTable[clip(q + dqy2_dc, 127)] * 2; |
- // TODO(skal): make it another table? |
- m->y2_mat_[1] = kAcTable[clip(q + dqy2_ac, 127)] * 155 / 100; |
+ // For all x in [0..284], x*155/100 is bitwise equal to (x*101581) >> 16. |
+ // The smallest precision for that is '(x*6349) >> 12' but 16 is a good |
+ // word size. |
+ m->y2_mat_[1] = (kAcTable[clip(q + dqy2_ac, 127)] * 101581) >> 16; |
if (m->y2_mat_[1] < 8) m->y2_mat_[1] = 8; |
m->uv_mat_[0] = kDcTable[clip(q + dquv_dc, 117)]; |