| Index: third_party/libwebp/utils/utils.h
|
| diff --git a/third_party/libwebp/utils/utils.h b/third_party/libwebp/utils/utils.h
|
| index 3a5d4e6a7885283295e05325d841a176f825f643..3ab459050aaf0d4a49a38f3a3db53eaddfb70c49 100644
|
| --- a/third_party/libwebp/utils/utils.h
|
| +++ b/third_party/libwebp/utils/utils.h
|
| @@ -62,7 +62,6 @@ WEBP_EXTERN(void) WebPSafeFree(void* const ptr);
|
| #define WEBP_ALIGN_CST 31
|
| #define WEBP_ALIGN(PTR) (((uintptr_t)(PTR) + WEBP_ALIGN_CST) & ~WEBP_ALIGN_CST)
|
|
|
| -#if defined(WEBP_FORCE_ALIGNED)
|
| #include <string.h>
|
| // memcpy() is the safe way of moving potentially unaligned 32b memory.
|
| static WEBP_INLINE uint32_t WebPMemToUint32(const uint8_t* const ptr) {
|
| @@ -73,16 +72,6 @@ static WEBP_INLINE uint32_t WebPMemToUint32(const uint8_t* const ptr) {
|
| static WEBP_INLINE void WebPUint32ToMem(uint8_t* const ptr, uint32_t val) {
|
| memcpy(ptr, &val, sizeof(val));
|
| }
|
| -#else
|
| -static WEBP_UBSAN_IGNORE_UNDEF WEBP_INLINE
|
| -uint32_t WebPMemToUint32(const uint8_t* const ptr) {
|
| - return *(const uint32_t*)ptr;
|
| -}
|
| -static WEBP_UBSAN_IGNORE_UNDEF WEBP_INLINE
|
| -void WebPUint32ToMem(uint8_t* const ptr, uint32_t val) {
|
| - *(uint32_t*)ptr = val;
|
| -}
|
| -#endif
|
|
|
| //------------------------------------------------------------------------------
|
| // Reading/writing data.
|
| @@ -118,6 +107,19 @@ static WEBP_INLINE void PutLE32(uint8_t* const data, uint32_t val) {
|
| PutLE16(data + 2, (int)(val >> 16));
|
| }
|
|
|
| +// Returns 31 ^ clz(n) = log2(n). This is the default C-implementation, either
|
| +// based on table or not. Can be used as fallback if clz() is not available.
|
| +#define WEBP_NEED_LOG_TABLE_8BIT
|
| +extern const uint8_t WebPLogTable8bit[256];
|
| +static WEBP_INLINE int WebPLog2FloorC(uint32_t n) {
|
| + int log = 0;
|
| + while (n >= 256) {
|
| + log += 8;
|
| + n >>= 8;
|
| + }
|
| + return log + WebPLogTable8bit[n];
|
| +}
|
| +
|
| // Returns (int)floor(log2(n)). n must be > 0.
|
| // use GNU builtins where available.
|
| #if defined(__GNUC__) && \
|
| @@ -135,22 +137,8 @@ static WEBP_INLINE int BitsLog2Floor(uint32_t n) {
|
| _BitScanReverse(&first_set_bit, n);
|
| return first_set_bit;
|
| }
|
| -#else
|
| -static WEBP_INLINE int BitsLog2Floor(uint32_t n) {
|
| - int log = 0;
|
| - uint32_t value = n;
|
| - int i;
|
| -
|
| - for (i = 4; i >= 0; --i) {
|
| - const int shift = (1 << i);
|
| - const uint32_t x = value >> shift;
|
| - if (x != 0) {
|
| - value = x;
|
| - log += shift;
|
| - }
|
| - }
|
| - return log;
|
| -}
|
| +#else // default: use the C-version.
|
| +static WEBP_INLINE int BitsLog2Floor(uint32_t n) { return WebPLog2FloorC(n); }
|
| #endif
|
|
|
| //------------------------------------------------------------------------------
|
| @@ -172,12 +160,12 @@ WEBP_EXTERN(void) WebPCopyPixels(const struct WebPPicture* const src,
|
| // Unique colors.
|
|
|
| // Returns count of unique colors in 'pic', assuming pic->use_argb is true.
|
| -// If the unique color count is more than MAX_COLOR_COUNT, returns
|
| -// MAX_COLOR_COUNT+1.
|
| +// If the unique color count is more than MAX_PALETTE_SIZE, returns
|
| +// MAX_PALETTE_SIZE+1.
|
| // If 'palette' is not NULL and number of unique colors is less than or equal to
|
| -// MAX_COLOR_COUNT, also outputs the actual unique colors into 'palette'.
|
| +// MAX_PALETTE_SIZE, also outputs the actual unique colors into 'palette'.
|
| // Note: 'palette' is assumed to be an array already allocated with at least
|
| -// MAX_COLOR_COUNT elements.
|
| +// MAX_PALETTE_SIZE elements.
|
| WEBP_EXTERN(int) WebPGetColorPalette(const struct WebPPicture* const pic,
|
| uint32_t* const palette);
|
|
|
|
|