Index: third_party/libwebp/dsp/dsp.h |
diff --git a/third_party/libwebp/dsp/dsp.h b/third_party/libwebp/dsp/dsp.h |
index aa6fd3dd150eaba4905b8275dcfeb7df9106cf4f..24d0c188c43ca06daa015c202f707f8b39d9dd7d 100644 |
--- a/third_party/libwebp/dsp/dsp.h |
+++ b/third_party/libwebp/dsp/dsp.h |
@@ -1,4 +1,4 @@ |
-// Copyright 2011 Google Inc. |
+// Copyright 2011 Google Inc. All Rights Reserved. |
// |
// This code is licensed under the same terms as WebM: |
// Software License Agreement: http://www.webmproject.org/license/software/ |
@@ -21,6 +21,22 @@ extern "C" { |
//------------------------------------------------------------------------------ |
// CPU detection |
+#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) |
+#define WEBP_MSC_SSE2 // Visual C++ SSE2 targets |
+#endif |
+ |
+#if defined(__SSE2__) || defined(WEBP_MSC_SSE2) |
+#define WEBP_USE_SSE2 |
+#endif |
+ |
+#if defined(__ANDROID__) && defined(__ARM_ARCH_7A__) |
+#define WEBP_ANDROID_NEON // Android targets that might support NEON |
+#endif |
+ |
+#if defined(__ARM_NEON__) || defined(WEBP_ANDROID_NEON) |
+#define WEBP_USE_NEON |
+#endif |
+ |
typedef enum { |
kSSE2, |
kSSE3, |
@@ -63,8 +79,6 @@ extern VP8WMetric VP8TDisto4x4, VP8TDisto16x16; |
typedef void (*VP8BlockCopy)(const uint8_t* src, uint8_t* dst); |
extern VP8BlockCopy VP8Copy4x4; |
-extern VP8BlockCopy VP8Copy8x8; |
-extern VP8BlockCopy VP8Copy16x16; |
// Quantization |
struct VP8Matrix; // forward declaration |
typedef int (*VP8QuantizeBlock)(int16_t in[16], int16_t out[16], |
@@ -95,9 +109,9 @@ extern void (*VP8TransformWHT)(const int16_t* in, int16_t* out); |
// *dst is the destination block, with stride BPS. Boundary samples are |
// assumed accessible when needed. |
typedef void (*VP8PredFunc)(uint8_t* dst); |
-extern VP8PredFunc VP8PredLuma16[/* NUM_B_DC_MODES */]; |
-extern VP8PredFunc VP8PredChroma8[/* NUM_B_DC_MODES */]; |
-extern VP8PredFunc VP8PredLuma4[/* NUM_BMODES */]; |
+extern const VP8PredFunc VP8PredLuma16[/* NUM_B_DC_MODES */]; |
+extern const VP8PredFunc VP8PredChroma8[/* NUM_B_DC_MODES */]; |
+extern const VP8PredFunc VP8PredLuma4[/* NUM_BMODES */]; |
// simple filter (only for luma) |
typedef void (*VP8SimpleFilterFunc)(uint8_t* p, int stride, int thresh); |
@@ -124,24 +138,23 @@ extern VP8ChromaFilterFunc VP8VFilter8i; // filtering u and v altogether |
extern VP8ChromaFilterFunc VP8HFilter8i; |
// must be called before anything using the above |
-extern void VP8DspInit(void); |
+void VP8DspInit(void); |
//------------------------------------------------------------------------------ |
// WebP I/O |
#define FANCY_UPSAMPLING // undefined to remove fancy upsampling support |
-#ifdef FANCY_UPSAMPLING |
typedef void (*WebPUpsampleLinePairFunc)( |
const uint8_t* top_y, const uint8_t* bottom_y, |
const uint8_t* top_u, const uint8_t* top_v, |
const uint8_t* cur_u, const uint8_t* cur_v, |
uint8_t* top_dst, uint8_t* bottom_dst, int len); |
+#ifdef FANCY_UPSAMPLING |
// Fancy upsampling functions to convert YUV to RGB(A) modes |
extern WebPUpsampleLinePairFunc WebPUpsamplers[/* MODE_LAST */]; |
-extern WebPUpsampleLinePairFunc WebPUpsamplersKeepAlpha[/* MODE_LAST */]; |
// Initializes SSE2 version of the fancy upsamplers. |
void WebPInitUpsamplersSSE2(void); |
@@ -156,6 +169,11 @@ typedef void (*WebPSampleLinePairFunc)( |
extern const WebPSampleLinePairFunc WebPSamplers[/* MODE_LAST */]; |
+// General function for converting two lines of ARGB or RGBA. |
+// 'alpha_is_last' should be true if 0xff000000 is stored in memory as |
+// as 0x00, 0x00, 0x00, 0xff (little endian). |
+WebPUpsampleLinePairFunc WebPGetLinePairConverter(int alpha_is_last); |
+ |
// YUV444->RGB converters |
typedef void (*WebPYUV444Converter)(const uint8_t* y, |
const uint8_t* u, const uint8_t* v, |
@@ -167,6 +185,23 @@ extern const WebPYUV444Converter WebPYUV444Converters[/* MODE_LAST */]; |
void WebPInitUpsamplers(void); |
//------------------------------------------------------------------------------ |
+// Pre-multiply planes with alpha values |
+ |
+// Apply alpha pre-multiply on an rgba, bgra or argb plane of size w * h. |
+// alpha_first should be 0 for argb, 1 for rgba or bgra (where alpha is last). |
+extern void (*WebPApplyAlphaMultiply)( |
+ uint8_t* rgba, int alpha_first, int w, int h, int stride); |
+ |
+// Same, buf specifically for RGBA4444 format |
+extern void (*WebPApplyAlphaMultiply4444)( |
+ uint8_t* rgba4444, int w, int h, int stride); |
+ |
+// To be called first before using the above. |
+void WebPInitPremultiply(void); |
+ |
+void WebPInitPremultiplySSE2(void); // should not be called directly. |
+ |
+//------------------------------------------------------------------------------ |
#if defined(__cplusplus) || defined(c_plusplus) |
} // extern "C" |