Index: third_party/libwebp/webp/encode.h |
diff --git a/third_party/libwebp/webp/encode.h b/third_party/libwebp/webp/encode.h |
index 2e37cfabe7180e75d406a2538946d86efcff6bb6..423622bdde5b79e1385a0480c12fdf9172e2f9a6 100644 |
--- a/third_party/libwebp/webp/encode.h |
+++ b/third_party/libwebp/webp/encode.h |
@@ -18,7 +18,18 @@ |
extern "C" { |
#endif |
-#define WEBP_ENCODER_ABI_VERSION 0x0200 // MAJOR(8b) + MINOR(8b) |
+#define WEBP_ENCODER_ABI_VERSION 0x0201 // MAJOR(8b) + MINOR(8b) |
+ |
+#if !(defined(__cplusplus) || defined(c_plusplus)) |
+typedef enum WebPImageHint WebPImageHint; |
+typedef enum WebPEncCSP WebPEncCSP; |
+typedef enum WebPPreset WebPPreset; |
+typedef enum WebPEncodingError WebPEncodingError; |
+#endif |
+typedef struct WebPConfig WebPConfig; |
+typedef struct WebPPicture WebPPicture; // main structure for I/O |
+typedef struct WebPAuxStats WebPAuxStats; |
+typedef struct WebPMemoryWriter WebPMemoryWriter; |
// Return the encoder's version number, packed in hexadecimal using 8bits for |
// each of major/minor/revision. E.g: v2.5.7 is 0x020507. |
@@ -66,15 +77,16 @@ WEBP_EXTERN(size_t) WebPEncodeLosslessBGRA(const uint8_t* bgra, |
// Coding parameters |
// Image characteristics hint for the underlying encoder. |
-typedef enum { |
+enum WebPImageHint { |
WEBP_HINT_DEFAULT = 0, // default preset. |
WEBP_HINT_PICTURE, // digital picture, like portrait, inner shot |
WEBP_HINT_PHOTO, // outdoor photograph, with natural lighting |
WEBP_HINT_GRAPH, // Discrete tone image (graph, map-tile etc). |
WEBP_HINT_LAST |
-} WebPImageHint; |
+}; |
-typedef struct { |
+// Compression parameters. |
+struct WebPConfig { |
int lossless; // Lossless encoding (0=lossy(default), 1=lossless). |
float quality; // between 0 (smallest file) and 100 (biggest) |
int method; // quality/speed trade-off (0=fast, 6=slower-better) |
@@ -109,20 +121,26 @@ typedef struct { |
int partition_limit; // quality degradation allowed to fit the 512k limit |
// on prediction modes coding (0: no degradation, |
// 100: maximum possible degradation). |
- |
- uint32_t pad[8]; // padding for later use |
-} WebPConfig; |
+ int emulate_jpeg_size; // If true, compression parameters will be remapped |
+ // to better match the expected output size from |
+ // JPEG compression. Generally, the output size will |
+ // be similar but the degradation will be lower. |
+ int thread_level; // If non-zero, try and use multi-threaded encoding. |
+ int low_memory; // If set, reduce memory usage (but increase CPU use). |
+ |
+ uint32_t pad[5]; // padding for later use |
+}; |
// Enumerate some predefined settings for WebPConfig, depending on the type |
// of source picture. These presets are used when calling WebPConfigPreset(). |
-typedef enum { |
+enum WebPPreset { |
WEBP_PRESET_DEFAULT = 0, // default preset. |
WEBP_PRESET_PICTURE, // digital picture, like portrait, inner shot |
WEBP_PRESET_PHOTO, // outdoor photograph, with natural lighting |
WEBP_PRESET_DRAWING, // hand or line drawing, with high-contrast details |
WEBP_PRESET_ICON, // small-sized colorful images |
WEBP_PRESET_TEXT // text-like |
-} WebPPreset; |
+}; |
// Internal, version-checked, entry point |
WEBP_EXTERN(int) WebPConfigInitInternal(WebPConfig*, WebPPreset, float, int); |
@@ -152,11 +170,9 @@ WEBP_EXTERN(int) WebPValidateConfig(const WebPConfig* config); |
//------------------------------------------------------------------------------ |
// Input / Output |
- |
-typedef struct WebPPicture WebPPicture; // main structure for I/O |
- |
// Structure for storing auxiliary statistics (mostly for lossy encoding). |
-typedef struct { |
+ |
+struct WebPAuxStats { |
int coded_size; // final size |
float PSNR[5]; // peak-signal-to-noise ratio for Y/U/V/All/Alpha |
@@ -182,7 +198,7 @@ typedef struct { |
int lossless_size; // final lossless size |
uint32_t pad[4]; // padding for later use |
-} WebPAuxStats; |
+}; |
// Signature for output function. Should return true if writing was successful. |
// data/data_size is the segment of data to write, and 'picture' is for |
@@ -192,18 +208,19 @@ typedef int (*WebPWriterFunction)(const uint8_t* data, size_t data_size, |
// WebPMemoryWrite: a special WebPWriterFunction that writes to memory using |
// the following WebPMemoryWriter object (to be set as a custom_ptr). |
-typedef struct { |
+struct WebPMemoryWriter { |
uint8_t* mem; // final buffer (of size 'max_size', larger than 'size'). |
size_t size; // final size |
size_t max_size; // total capacity |
uint32_t pad[1]; // padding for later use |
-} WebPMemoryWriter; |
+}; |
// The following must be called first before any use. |
WEBP_EXTERN(void) WebPMemoryWriterInit(WebPMemoryWriter* writer); |
// The custom writer to be used with WebPMemoryWriter as custom_ptr. Upon |
// completion, writer.mem and writer.size will hold the coded data. |
+// writer.mem must be freed using the call 'free(writer.mem)'. |
WEBP_EXTERN(int) WebPMemoryWrite(const uint8_t* data, size_t data_size, |
const WebPPicture* picture); |
@@ -212,7 +229,8 @@ WEBP_EXTERN(int) WebPMemoryWrite(const uint8_t* data, size_t data_size, |
// everything is OK. |
typedef int (*WebPProgressHook)(int percent, const WebPPicture* picture); |
-typedef enum { |
+// Color spaces. |
+enum WebPEncCSP { |
// chroma sampling |
WEBP_YUV420 = 0, // 4:2:0 |
WEBP_YUV422 = 1, // 4:2:2 |
@@ -225,10 +243,10 @@ typedef enum { |
WEBP_YUV444A = 6, |
WEBP_YUV400A = 7, // grayscale + alpha |
WEBP_CSP_ALPHA_BIT = 4 // bit that is set if alpha is present |
-} WebPEncCSP; |
+}; |
// Encoding error conditions. |
-typedef enum { |
+enum WebPEncodingError { |
VP8_ENC_OK = 0, |
VP8_ENC_ERROR_OUT_OF_MEMORY, // memory error allocating objects |
VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY, // memory error while flushing bits |
@@ -241,7 +259,7 @@ typedef enum { |
VP8_ENC_ERROR_FILE_TOO_BIG, // file is bigger than 4G |
VP8_ENC_ERROR_USER_ABORT, // abort request by user |
VP8_ENC_ERROR_LAST // list terminator. always last. |
-} WebPEncodingError; |
+}; |
// maximum width/height allowed (inclusive), in pixels |
#define WEBP_MAX_DIMENSION 16383 |
@@ -348,13 +366,13 @@ WEBP_EXTERN(void) WebPPictureFree(WebPPicture* picture); |
// Returns false in case of memory allocation error. |
WEBP_EXTERN(int) WebPPictureCopy(const WebPPicture* src, WebPPicture* dst); |
-// Compute PSNR or SSIM distortion between two pictures. |
+// Compute PSNR, SSIM or LSIM distortion metric between two pictures. |
// Result is in dB, stores in result[] in the Y/U/V/Alpha/All order. |
-// Returns false in case of error (pic1 and pic2 don't have same dimension, ...) |
+// Returns false in case of error (src and ref don't have same dimension, ...) |
// Warning: this function is rather CPU-intensive. |
WEBP_EXTERN(int) WebPPictureDistortion( |
- const WebPPicture* pic1, const WebPPicture* pic2, |
- int metric_type, // 0 = PSNR, 1 = SSIM |
+ const WebPPicture* src, const WebPPicture* ref, |
+ int metric_type, // 0 = PSNR, 1 = SSIM, 2 = LSIM |
float result[5]); |
// self-crops a picture to the rectangle defined by top/left/width/height. |