| Index: third_party/libwebp/dsp/enc.c
|
| diff --git a/third_party/libwebp/dsp/enc.c b/third_party/libwebp/dsp/enc.c
|
| index 068ff141501284aa4005715159b29ea859ffa233..fcc6ec8ea259fb6d76004208ac29b2e778c6516f 100644
|
| --- a/third_party/libwebp/dsp/enc.c
|
| +++ b/third_party/libwebp/dsp/enc.c
|
| @@ -11,14 +11,12 @@
|
| //
|
| // Author: Skal (pascal.massimino@gmail.com)
|
|
|
| +#include <assert.h>
|
| #include <stdlib.h> // for abs()
|
| +
|
| #include "./dsp.h"
|
| #include "../enc/vp8enci.h"
|
|
|
| -#if defined(__cplusplus) || defined(c_plusplus)
|
| -extern "C" {
|
| -#endif
|
| -
|
| static WEBP_INLINE uint8_t clip_8b(int v) {
|
| return (!(v & ~0xff)) ? v : (v < 0) ? 0 : 255;
|
| }
|
| @@ -190,7 +188,7 @@ static void ITransformWHT(const int16_t* in, int16_t* out) {
|
|
|
| static void FTransformWHT(const int16_t* in, int16_t* out) {
|
| // input is 12b signed
|
| - int16_t tmp[16];
|
| + int32_t tmp[16];
|
| int i;
|
| for (i = 0; i < 4; ++i, in += 64) {
|
| const int a0 = (in[0 * 16] + in[2 * 16]); // 13b
|
| @@ -652,6 +650,31 @@ static int QuantizeBlock(int16_t in[16], int16_t out[16],
|
| return (last >= 0);
|
| }
|
|
|
| +static int QuantizeBlockWHT(int16_t in[16], int16_t out[16],
|
| + const VP8Matrix* const mtx) {
|
| + int n, last = -1;
|
| + for (n = 0; n < 16; ++n) {
|
| + const int j = kZigzag[n];
|
| + const int sign = (in[j] < 0);
|
| + const int coeff = sign ? -in[j] : in[j];
|
| + assert(mtx->sharpen_[j] == 0);
|
| + if (coeff > mtx->zthresh_[j]) {
|
| + const int Q = mtx->q_[j];
|
| + const int iQ = mtx->iq_[j];
|
| + const int B = mtx->bias_[j];
|
| + out[n] = QUANTDIV(coeff, iQ, B);
|
| + if (out[n] > MAX_LEVEL) out[n] = MAX_LEVEL;
|
| + if (sign) out[n] = -out[n];
|
| + in[j] = out[n] * Q;
|
| + if (out[n]) last = n;
|
| + } else {
|
| + out[n] = 0;
|
| + in[j] = 0;
|
| + }
|
| + }
|
| + return (last >= 0);
|
| +}
|
| +
|
| //------------------------------------------------------------------------------
|
| // Block copy
|
|
|
| @@ -686,12 +709,11 @@ VP8Metric VP8SSE4x4;
|
| VP8WMetric VP8TDisto4x4;
|
| VP8WMetric VP8TDisto16x16;
|
| VP8QuantizeBlock VP8EncQuantizeBlock;
|
| +VP8QuantizeBlockWHT VP8EncQuantizeBlockWHT;
|
| VP8BlockCopy VP8Copy4x4;
|
|
|
| extern void VP8EncDspInitSSE2(void);
|
| -#if defined(WEBP_USE_NEON)
|
| extern void VP8EncDspInitNEON(void);
|
| -#endif
|
|
|
| void VP8EncDspInit(void) {
|
| InitTables();
|
| @@ -712,6 +734,7 @@ void VP8EncDspInit(void) {
|
| VP8TDisto4x4 = Disto4x4;
|
| VP8TDisto16x16 = Disto16x16;
|
| VP8EncQuantizeBlock = QuantizeBlock;
|
| + VP8EncQuantizeBlockWHT = QuantizeBlockWHT;
|
| VP8Copy4x4 = Copy4x4;
|
|
|
| // If defined, use CPUInfo() to overwrite some pointers with faster versions.
|
| @@ -728,6 +751,3 @@ void VP8EncDspInit(void) {
|
| }
|
| }
|
|
|
| -#if defined(__cplusplus) || defined(c_plusplus)
|
| -} // extern "C"
|
| -#endif
|
|
|