| 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.
|
|
|