Index: third_party/libwebp/dsp/dec.c |
diff --git a/third_party/libwebp/dsp/dec.c b/third_party/libwebp/dsp/dec.c |
index a78720649b6d6b6265386eb0b1422d4a89b34db7..e92d693362211cf1f6fbc048667c34ed9cb5f768 100644 |
--- a/third_party/libwebp/dsp/dec.c |
+++ b/third_party/libwebp/dsp/dec.c |
@@ -13,6 +13,7 @@ |
#include "./dsp.h" |
#include "../dec/vp8i.h" |
+#include "../utils/utils.h" |
//------------------------------------------------------------------------------ |
@@ -654,6 +655,23 @@ static void HFilter8i(uint8_t* u, uint8_t* v, int stride, |
//------------------------------------------------------------------------------ |
+static void DitherCombine8x8(const uint8_t* dither, uint8_t* dst, |
+ int dst_stride) { |
+ int i, j; |
+ for (j = 0; j < 8; ++j) { |
+ for (i = 0; i < 8; ++i) { |
+ const int delta0 = dither[i] - VP8_DITHER_AMP_CENTER; |
+ const int delta1 = |
+ (delta0 + VP8_DITHER_DESCALE_ROUNDER) >> VP8_DITHER_DESCALE; |
+ dst[i] = clip_8b((int)dst[i] + delta1); |
+ } |
+ dst += dst_stride; |
+ dither += 8; |
+ } |
+} |
+ |
+//------------------------------------------------------------------------------ |
+ |
VP8DecIdct2 VP8Transform; |
VP8DecIdct VP8TransformAC3; |
VP8DecIdct VP8TransformUV; |
@@ -673,11 +691,15 @@ VP8SimpleFilterFunc VP8SimpleHFilter16; |
VP8SimpleFilterFunc VP8SimpleVFilter16i; |
VP8SimpleFilterFunc VP8SimpleHFilter16i; |
+void (*VP8DitherCombine8x8)(const uint8_t* dither, uint8_t* dst, |
+ int dst_stride); |
+ |
extern void VP8DspInitSSE2(void); |
extern void VP8DspInitSSE41(void); |
extern void VP8DspInitNEON(void); |
extern void VP8DspInitMIPS32(void); |
extern void VP8DspInitMIPSdspR2(void); |
+extern void VP8DspInitMSA(void); |
static volatile VP8CPUInfo dec_last_cpuinfo_used = |
(VP8CPUInfo)&dec_last_cpuinfo_used; |
@@ -734,6 +756,8 @@ WEBP_TSAN_IGNORE_FUNCTION void VP8DspInit(void) { |
VP8PredChroma8[5] = DC8uvNoLeft; |
VP8PredChroma8[6] = DC8uvNoTopLeft; |
+ VP8DitherCombine8x8 = DitherCombine8x8; |
+ |
// If defined, use CPUInfo() to overwrite some pointers with faster versions. |
if (VP8GetCPUInfo != NULL) { |
#if defined(WEBP_USE_SSE2) |
@@ -761,6 +785,11 @@ WEBP_TSAN_IGNORE_FUNCTION void VP8DspInit(void) { |
VP8DspInitMIPSdspR2(); |
} |
#endif |
+#if defined(WEBP_USE_MSA) |
+ if (VP8GetCPUInfo(kMSA)) { |
+ VP8DspInitMSA(); |
+ } |
+#endif |
} |
dec_last_cpuinfo_used = VP8GetCPUInfo; |
} |