From 222f9b1a9d9df450fe09b9e3ef464279381e28fa Mon Sep 17 00:00:00 2001 From: James Zern Date: Tue, 22 Jul 2014 17:41:55 -0700 Subject: [PATCH 01/16] gif2webp: simplify giflib version checking introduce LOCAL_GIF_PREREQ/VERSION similar to the GCC variants in dsp. Change-Id: I00ba5d523047b3b1c14ade992172e75e69043eb3 --- examples/gif2webp.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/examples/gif2webp.c b/examples/gif2webp.c index 340102b9..47b0c5b7 100644 --- a/examples/gif2webp.c +++ b/examples/gif2webp.c @@ -28,6 +28,16 @@ #include "./example_util.h" #include "./gif2webp_util.h" +// GIFLIB_MAJOR is only defined in libgif >= 4.2.0. +#if defined(GIFLIB_MAJOR) && defined(GIFLIB_MINOR) +# define LOCAL_GIF_VERSION ((GIFLIB_MAJOR << 8) | GIFLIB_MINOR) +# define LOCAL_GIF_PREREQ(maj, min) \ + (LOCAL_GIF_VERSION >= (((maj) << 8) | (min))) +#else +# define LOCAL_GIF_VERSION 0 +# define LOCAL_GIF_PREREQ(maj, min) 0 +#endif + #define GIF_TRANSPARENT_MASK 0x01 #define GIF_DISPOSE_MASK 0x07 #define GIF_DISPOSE_SHIFT 2 @@ -172,11 +182,9 @@ static int GetBackgroundColor(const ColorMapObject* const color_map, } static void DisplayGifError(const GifFileType* const gif, int gif_error) { - // GIFLIB_MAJOR is only defined in libgif >= 4.2.0. // libgif 4.2.0 has retired PrintGifError() and added GifErrorString(). -#if defined(GIFLIB_MAJOR) && defined(GIFLIB_MINOR) && \ - ((GIFLIB_MAJOR == 4 && GIFLIB_MINOR >= 2) || GIFLIB_MAJOR > 4) -#if GIFLIB_MAJOR >= 5 +#if LOCAL_GIF_PREREQ(4,2) +#if LOCAL_GIF_PREREQ(5,0) // Static string actually, hence the const char* cast. const char* error_str = (const char*)GifErrorString( (gif == NULL) ? gif_error : gif->Error); @@ -396,8 +404,7 @@ int main(int argc, const char *argv[]) { } // Start the decoder object -#if defined(GIFLIB_MAJOR) && (GIFLIB_MAJOR >= 5) - // There was an API change in version 5.0.0. +#if LOCAL_GIF_PREREQ(5,0) gif = DGifOpenFileName(in_file, &gif_error); #else gif = DGifOpenFileName(in_file); From b8984f3151664e4d6e2a0740deba9dbfdf8bc5b4 Mon Sep 17 00:00:00 2001 From: James Zern Date: Tue, 22 Jul 2014 17:48:24 -0700 Subject: [PATCH 02/16] gif2webp: fix compile with giflib 5.1.0 DGifCloseFile() added an error code output parameter http://giflib.sourceforge.net/gif_lib.html#compatibility fixes issue #209 original patch by grizzly dot nyo at gmail Change-Id: I5554de2bd70dbfd95fd356424ad5fb800ac94592 --- examples/gif2webp.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/gif2webp.c b/examples/gif2webp.c index 47b0c5b7..71d526e4 100644 --- a/examples/gif2webp.c +++ b/examples/gif2webp.c @@ -690,7 +690,11 @@ int main(int argc, const char *argv[]) { DisplayGifError(gif, gif_error); } if (gif != NULL) { +#if LOCAL_GIF_PREREQ(5,1) + DGifCloseFile(gif, &gif_error); +#else DGifCloseFile(gif); +#endif } return !ok; From 793368e8c697d5038c0eab4f547d1e9a0f883b82 Mon Sep 17 00:00:00 2001 From: James Zern Date: Tue, 22 Jul 2014 20:03:52 -0700 Subject: [PATCH 03/16] restore decode API compatibility protect flip/alpha_dither w/a WEBP_DECODER_ABI_VERSION check Change-Id: I437a5d5f78800f71b7e7e323faa321f946bf9515 --- README | 2 -- examples/dwebp.c | 8 ++++++++ examples/vwebp.c | 4 ++++ man/dwebp.1 | 20 +++++++++++--------- src/dec/buffer.c | 2 ++ src/dec/frame.c | 2 ++ src/dec/idec.c | 6 ++++-- src/dec/webp.c | 2 ++ src/webp/decode.h | 8 +++++++- 9 files changed, 40 insertions(+), 14 deletions(-) diff --git a/README b/README index e9eeb5a5..288dbe6b 100644 --- a/README +++ b/README @@ -270,11 +270,9 @@ Use following options to convert into alternate image formats: -nofilter .... disable in-loop filtering -nodither .... disable dithering -dither .. dithering strength (in 0..100) - -alpha_dither use alpha-plane dithering if needed -mt .......... use multi-threading -crop ... crop output with the given rectangle -scale .......... scale the output (*after* any cropping) - -flip ........ flip the output vertically -alpha ....... only save the alpha plane -incremental . use incremental decoding (useful for tests) -h ....... this help message diff --git a/examples/dwebp.c b/examples/dwebp.c index a37b05ed..a5ed60b0 100644 --- a/examples/dwebp.c +++ b/examples/dwebp.c @@ -557,11 +557,15 @@ static void Help(void) { " -nofilter .... disable in-loop filtering\n" " -nodither .... disable dithering\n" " -dither .. dithering strength (in 0..100)\n" +#if WEBP_DECODER_ABI_VERSION > 0x0203 " -alpha_dither use alpha-plane dithering if needed\n" +#endif " -mt .......... use multi-threading\n" " -crop ... crop output with the given rectangle\n" " -scale .......... scale the output (*after* any cropping)\n" +#if WEBP_DECODER_ABI_VERSION > 0x0203 " -flip ........ flip the output vertically\n" +#endif " -alpha ....... only save the alpha plane\n" " -incremental . use incremental decoding (useful for tests)\n" " -h ....... this help message\n" @@ -624,8 +628,10 @@ int main(int argc, const char *argv[]) { format = YUV; } else if (!strcmp(argv[c], "-mt")) { config.options.use_threads = 1; +#if WEBP_DECODER_ABI_VERSION > 0x0203 } else if (!strcmp(argv[c], "-alpha_dither")) { config.options.alpha_dithering_strength = 100; +#endif } else if (!strcmp(argv[c], "-nodither")) { config.options.dithering_strength = 0; } else if (!strcmp(argv[c], "-dither") && c < argc - 1) { @@ -640,8 +646,10 @@ int main(int argc, const char *argv[]) { config.options.use_scaling = 1; config.options.scaled_width = strtol(argv[++c], NULL, 0); config.options.scaled_height = strtol(argv[++c], NULL, 0); +#if WEBP_DECODER_ABI_VERSION > 0x0203 } else if (!strcmp(argv[c], "-flip")) { config.options.flip = 1; +#endif } else if (!strcmp(argv[c], "-v")) { verbose = 1; #ifndef WEBP_DLL diff --git a/examples/vwebp.c b/examples/vwebp.c index 589f0832..c56ad40e 100644 --- a/examples/vwebp.c +++ b/examples/vwebp.c @@ -400,7 +400,9 @@ int main(int argc, char *argv[]) { return -1; } config->options.dithering_strength = 50; +#if WEBP_DECODER_ABI_VERSION > 0x0203 config->options.alpha_dithering_strength = 100; +#endif kParams.use_color_profile = 1; for (c = 1; c < argc; ++c) { @@ -413,8 +415,10 @@ int main(int argc, char *argv[]) { config->options.no_fancy_upsampling = 1; } else if (!strcmp(argv[c], "-nofilter")) { config->options.bypass_filtering = 1; +#if WEBP_DECODER_ABI_VERSION > 0x0203 } else if (!strcmp(argv[c], "-noalphadither")) { config->options.alpha_dithering_strength = 0; +#endif } else if (!strcmp(argv[c], "-dither") && c + 1 < argc) { config->options.dithering_strength = strtol(argv[++c], NULL, 0); } else if (!strcmp(argv[c], "-info")) { diff --git a/man/dwebp.1 b/man/dwebp.1 index 5741be6a..2393c0f5 100644 --- a/man/dwebp.1 +++ b/man/dwebp.1 @@ -1,5 +1,5 @@ .\" Hey, EMACS: -*- nroff -*- -.TH DWEBP 1 "June 13, 2014" +.TH DWEBP 1 "July 22, 2014" .SH NAME dwebp \- decompress a WebP file to an image file .SH SYNOPSIS @@ -67,11 +67,12 @@ but it will make the decoding faster. Specify a dithering \fBstrength\fP between 0 and 100. Dithering is a post-processing effect applied to chroma components in lossy compression. It helps by smoothing gradients and avoiding banding artifacts. -.TP -.BI \-alpha_dither -If the compressed file contains a transparency plane that was quantized -during compression, this flag will allow dithering the reconstructed plane -in order to generate smoother transparency gradients. +.\" TODO(jzern): restore post-v0.4.1 +.\" .TP +.\" .BI \-alpha_dither +.\" If the compressed file contains a transparency plane that was quantized +.\" during compression, this flag will allow dithering the reconstructed plane +.\" in order to generate smoother transparency gradients. .TP .B \-nodither Disable all dithering (default). @@ -86,9 +87,10 @@ This cropping area must be fully contained within the source rectangle. The top-left corner will be snapped to even coordinates if needed. This option is meant to reduce the memory needed for cropping large images. Note: the cropping is applied \fIbefore\fP any scaling. -.TP -.B \-flip -Flip decoded image vertically (can be useful for OpenGL textures for instance). +.\" TODO(jzern): restore post-v0.4.1 +.\" .TP +.\" .B \-flip +.\" Flip decoded image vertically (can be useful for OpenGL textures for instance). .TP .BI \-scale " width height Rescale the decoded picture to dimension \fBwidth\fP x \fBheight\fP. This diff --git a/src/dec/buffer.c b/src/dec/buffer.c index c6e4eb84..42feac74 100644 --- a/src/dec/buffer.c +++ b/src/dec/buffer.c @@ -195,10 +195,12 @@ VP8StatusCode WebPAllocateDecBuffer(int w, int h, status = AllocateBuffer(out); if (status != VP8_STATUS_OK) return status; +#if WEBP_DECODER_ABI_VERSION > 0x0203 // Use the stride trick if vertical flip is needed. if (options != NULL && options->flip) { status = WebPFlipBuffer(out); } +#endif return status; } diff --git a/src/dec/frame.c b/src/dec/frame.c index efe886b1..f7a0d1d8 100644 --- a/src/dec/frame.c +++ b/src/dec/frame.c @@ -177,6 +177,7 @@ void VP8InitDithering(const WebPDecoderOptions* const options, dec->dither_ = 1; } } +#if WEBP_DECODER_ABI_VERSION > 0x0203 // potentially allow alpha dithering dec->alpha_dithering_ = options->alpha_dithering_strength; if (dec->alpha_dithering_ > 100) { @@ -184,6 +185,7 @@ void VP8InitDithering(const WebPDecoderOptions* const options, } else if (dec->alpha_dithering_ < 0) { dec->alpha_dithering_ = 0; } +#endif } } diff --git a/src/dec/idec.c b/src/dec/idec.c index 6e8d5985..7bab1eab 100644 --- a/src/dec/idec.c +++ b/src/dec/idec.c @@ -240,15 +240,17 @@ static int CheckMemBufferMode(MemBuffer* const mem, MemBufferMode expected) { // To be called last. static VP8StatusCode FinishDecoding(WebPIDecoder* const idec) { +#if WEBP_DECODER_ABI_VERSION > 0x0203 const WebPDecoderOptions* const options = idec->params_.options; WebPDecBuffer* const output = idec->params_.output; idec->state_ = STATE_DONE; if (options != NULL && options->flip) { return WebPFlipBuffer(output); - } else { - return VP8_STATUS_OK; } +#endif + idec->state_ = STATE_DONE; + return VP8_STATUS_OK; } //------------------------------------------------------------------------------ diff --git a/src/dec/webp.c b/src/dec/webp.c index c76a704b..59e21a9d 100644 --- a/src/dec/webp.c +++ b/src/dec/webp.c @@ -521,9 +521,11 @@ static VP8StatusCode DecodeInto(const uint8_t* const data, size_t data_size, WebPFreeDecBuffer(params->output); } +#if WEBP_DECODER_ABI_VERSION > 0x0203 if (params->options != NULL && params->options->flip) { status = WebPFlipBuffer(params->output); } +#endif return status; } diff --git a/src/webp/decode.h b/src/webp/decode.h index e0dd5703..36c27c37 100644 --- a/src/webp/decode.h +++ b/src/webp/decode.h @@ -20,7 +20,7 @@ extern "C" { #endif -#define WEBP_DECODER_ABI_VERSION 0x0205 // MAJOR(8b) + MINOR(8b) +#define WEBP_DECODER_ABI_VERSION 0x0203 // MAJOR(8b) + MINOR(8b) // Note: forward declaring enumerations is not allowed in (strict) C and C++, // the types are left here for reference. @@ -442,13 +442,19 @@ struct WebPDecoderOptions { int scaled_width, scaled_height; // final resolution int use_threads; // if true, use multi-threaded decoding int dithering_strength; // dithering strength (0=Off, 100=full) +#if WEBP_DECODER_ABI_VERSION > 0x0203 int flip; // flip output vertically int alpha_dithering_strength; // alpha dithering strength in [0..100] +#endif // Unused for now: int force_rotation; // forced rotation (to be applied _last_) int no_enhancement; // if true, discard enhancement layer +#if WEBP_DECODER_ABI_VERSION > 0x0203 uint32_t pad[3]; // padding for later use +#else + uint32_t pad[5]; // padding for later use +#endif }; // Main object storing the configuration for advanced decoding. From c2fc52e4ecb7874e6533801a9007860e63f025ce Mon Sep 17 00:00:00 2001 From: James Zern Date: Tue, 22 Jul 2014 20:24:59 -0700 Subject: [PATCH 04/16] restore encode API compatibility protect WebPConfigLosslessPreset/WebPMemoryWriterClear w/a WEBP_ENCODER_ABI_VERSION check Change-Id: If4debc15fee172a3f18079bc2bd29eb8447bc14b --- README | 2 -- examples/cwebp.c | 14 ++++++++++++++ examples/gif2webp_util.c | 15 +++++++++++++++ man/cwebp.1 | 33 +++++++++++++++++---------------- src/enc/config.c | 2 ++ src/enc/vp8enci.h | 4 ++++ src/webp/encode.h | 10 +++++++++- 7 files changed, 61 insertions(+), 19 deletions(-) diff --git a/README b/README index 288dbe6b..42c09091 100644 --- a/README +++ b/README @@ -152,8 +152,6 @@ Options: default, photo, picture, drawing, icon, text -preset must come first, as it overwrites other parameters - -z ............... activates lossless preset with given - level in [0:fast, ..., 9:slowest] -m ............... compression method (0=fast, 6=slowest) -segments ........ number of segments to use (1..4) diff --git a/examples/cwebp.c b/examples/cwebp.c index d789c031..fc3302c3 100644 --- a/examples/cwebp.c +++ b/examples/cwebp.c @@ -573,8 +573,10 @@ static void HelpLong(void) { printf(" default, photo, picture,\n"); printf(" drawing, icon, text\n"); printf(" -preset must come first, as it overwrites other parameters\n"); +#if WEBP_ENCODER_ABI_VERSION > 0x0202 printf(" -z ............... activates lossless preset with given\n" " level in [0:fast, ..., 9:slowest]\n"); +#endif printf("\n"); printf(" -m ............... compression method (0=fast, 6=slowest)\n"); printf(" -segments ........ number of segments to use (1..4)\n"); @@ -676,8 +678,10 @@ int main(int argc, const char *argv[]) { uint32_t background_color = 0xffffffu; int crop = 0, crop_x = 0, crop_y = 0, crop_w = 0, crop_h = 0; int resize_w = 0, resize_h = 0; +#if WEBP_ENCODER_ABI_VERSION > 0x0202 int lossless_preset = 6; int use_lossless_preset = -1; // -1=unset, 0=don't use, 1=use it +#endif int show_progress = 0; int keep_metadata = 0; int metadata_written = 0; @@ -732,13 +736,17 @@ int main(int argc, const char *argv[]) { picture.height = strtol(argv[++c], NULL, 0); } else if (!strcmp(argv[c], "-m") && c < argc - 1) { config.method = strtol(argv[++c], NULL, 0); +#if WEBP_ENCODER_ABI_VERSION > 0x0202 use_lossless_preset = 0; // disable -z option +#endif } else if (!strcmp(argv[c], "-q") && c < argc - 1) { config.quality = (float)strtod(argv[++c], NULL); +#if WEBP_ENCODER_ABI_VERSION > 0x0202 use_lossless_preset = 0; // disable -z option } else if (!strcmp(argv[c], "-z") && c < argc - 1) { lossless_preset = strtol(argv[++c], NULL, 0); if (use_lossless_preset != 0) use_lossless_preset = 1; +#endif } else if (!strcmp(argv[c], "-alpha_q") && c < argc - 1) { config.alpha_quality = strtol(argv[++c], NULL, 0); } else if (!strcmp(argv[c], "-alpha_method") && c < argc - 1) { @@ -919,12 +927,14 @@ int main(int argc, const char *argv[]) { goto Error; } +#if WEBP_ENCODER_ABI_VERSION > 0x0202 if (use_lossless_preset == 1) { if (!WebPConfigLosslessPreset(&config, lossless_preset)) { fprintf(stderr, "Invalid lossless preset (-z %d)\n", lossless_preset); goto Error; } } +#endif // Check for unsupported command line options for lossless mode and log // warning for such options. @@ -1116,7 +1126,11 @@ int main(int argc, const char *argv[]) { return_value = 0; Error: +#if WEBP_ENCODER_ABI_VERSION > 0x0202 WebPMemoryWriterClear(&memory_writer); +#else + free(memory_writer.mem); +#endif free(picture.extra_info); MetadataFree(&metadata); WebPPictureFree(&picture); diff --git a/examples/gif2webp_util.c b/examples/gif2webp_util.c index e2555f5f..697df0b4 100644 --- a/examples/gif2webp_util.c +++ b/examples/gif2webp_util.c @@ -475,10 +475,20 @@ static WebPEncodingError SetFrame(const WebPConfig* const config, // TODO(later): Perhaps a rough SSIM/PSNR produced by the encoder should // also be a criteria, in addition to sizes. if (mem1.size <= mem2.size) { +#if WEBP_ENCODER_ABI_VERSION > 0x0202 WebPMemoryWriterClear(&mem2); +#else + free(mem2.mem); + memset(&mem2, 0, sizeof(mem2)); +#endif GetEncodedData(&mem1, encoded_data); } else { +#if WEBP_ENCODER_ABI_VERSION > 0x0202 WebPMemoryWriterClear(&mem1); +#else + free(mem1.mem); + memset(&mem1, 0, sizeof(mem1)); +#endif GetEncodedData(&mem2, encoded_data); } } else { @@ -487,8 +497,13 @@ static WebPEncodingError SetFrame(const WebPConfig* const config, return error_code; Err: +#if WEBP_ENCODER_ABI_VERSION > 0x0202 WebPMemoryWriterClear(&mem1); WebPMemoryWriterClear(&mem2); +#else + free(mem1.mem); + free(mem2.mem); +#endif return error_code; } diff --git a/man/cwebp.1 b/man/cwebp.1 index f98fbc48..5aaf0fd5 100644 --- a/man/cwebp.1 +++ b/man/cwebp.1 @@ -1,5 +1,5 @@ .\" Hey, EMACS: -*- nroff -*- -.TH CWEBP 1 "April 19, 2014" +.TH CWEBP 1 "July 22, 2014" .SH NAME cwebp \- compress an image file to a WebP file .SH SYNOPSIS @@ -38,21 +38,22 @@ Print the version number (as major.minor.revision) and exit. .BI \-q " float Specify the compression factor for RGB channels between 0 and 100. The default is 75. -.TP -.BI \-z " int -Switch on \fBlossless\fP compression mode with the specified level between 0 -and 9, with level 0 being the fastest, 9 being the slowest. Fast mode -produces larger file size than slower ones. A good default is \-z 6. -This option is actually a shortcut for some predefined settings for quality -and method. If options \-q or \-m are subsequently used, they will invalidate -the effect of this \-z option. -.br -In case of lossy compression (default), a small factor produces a smaller file -with lower quality. Best quality is achieved by using a value of 100. -.br -In case of lossless compression (specified by the \-lossless option), a small -factor enables faster compression speed, but produces a larger file. Maximum -compression is achieved by using a value of 100. +.\" TODO(jzern): restore post-v0.4.1 +.\" .TP +.\" .BI \-z " int +.\" Switch on \fBlossless\fP compression mode with the specified level between 0 +.\" and 9, with level 0 being the fastest, 9 being the slowest. Fast mode +.\" produces larger file size than slower ones. A good default is \-z 6. +.\" This option is actually a shortcut for some predefined settings for quality +.\" and method. If options \-q or \-m are subsequently used, they will invalidate +.\" the effect of this \-z option. +.\" .br +.\" In case of lossy compression (default), a small factor produces a smaller file +.\" with lower quality. Best quality is achieved by using a value of 100. +.\" .br +.\" In case of lossless compression (specified by the \-lossless option), a small +.\" factor enables faster compression speed, but produces a larger file. Maximum +.\" compression is achieved by using a value of 100. .TP .BI \-alpha_q " int Specify the compression factor for alpha compression between 0 and 100. diff --git a/src/enc/config.c b/src/enc/config.c index 6531438f..4b7aa0f8 100644 --- a/src/enc/config.c +++ b/src/enc/config.c @@ -138,6 +138,7 @@ int WebPValidateConfig(const WebPConfig* config) { //------------------------------------------------------------------------------ +#if WEBP_ENCODER_ABI_VERSION > 0x0202 #define MAX_LEVEL 9 // Mapping between -z level and -m / -q parameter settings. @@ -156,5 +157,6 @@ int WebPConfigLosslessPreset(WebPConfig* config, int level) { config->quality = kLosslessPresets[level].quality_; return 1; } +#endif //------------------------------------------------------------------------------ diff --git a/src/enc/vp8enci.h b/src/enc/vp8enci.h index 5848e996..a08b8e3b 100644 --- a/src/enc/vp8enci.h +++ b/src/enc/vp8enci.h @@ -571,6 +571,10 @@ int WebPPictureAllocYUVA(WebPPicture* const picture, int width, int height); //------------------------------------------------------------------------------ +#if WEBP_ENCODER_ABI_VERSION <= 0x0202 +void WebPMemoryWriterClear(WebPMemoryWriter* writer); +#endif + #ifdef __cplusplus } // extern "C" #endif diff --git a/src/webp/encode.h b/src/webp/encode.h index ccd2bd66..dd600568 100644 --- a/src/webp/encode.h +++ b/src/webp/encode.h @@ -20,7 +20,7 @@ extern "C" { #endif -#define WEBP_ENCODER_ABI_VERSION 0x0205 // MAJOR(8b) + MINOR(8b) +#define WEBP_ENCODER_ABI_VERSION 0x0202 // MAJOR(8b) + MINOR(8b) // Note: forward declaring enumerations is not allowed in (strict) C and C++, // the types are left here for reference. @@ -167,6 +167,7 @@ static WEBP_INLINE int WebPConfigPreset(WebPConfig* config, WEBP_ENCODER_ABI_VERSION); } +#if WEBP_ENCODER_ABI_VERSION > 0x0202 // Activate the lossless compression mode with the desired efficiency level // between 0 (fastest, lowest compression) and 9 (slower, best compression). // A good default level is '6', providing a fair tradeoff between compression @@ -174,6 +175,7 @@ static WEBP_INLINE int WebPConfigPreset(WebPConfig* config, // This function will overwrite several fields from config: 'method', 'quality' // and 'lossless'. Returns false in case of parameter error. WEBP_EXTERN(int) WebPConfigLosslessPreset(WebPConfig* config, int level); +#endif // Returns true if 'config' is non-NULL and all configuration parameters are // within their valid ranges. @@ -229,12 +231,18 @@ struct WebPMemoryWriter { // The following must be called first before any use. WEBP_EXTERN(void) WebPMemoryWriterInit(WebPMemoryWriter* writer); +#if WEBP_ENCODER_ABI_VERSION > 0x0202 // The following must be called to deallocate writer->mem memory. The 'writer' // object itself is not deallocated. WEBP_EXTERN(void) WebPMemoryWriterClear(WebPMemoryWriter* writer); +#endif // The custom writer to be used with WebPMemoryWriter as custom_ptr. Upon // completion, writer.mem and writer.size will hold the coded data. +#if WEBP_ENCODER_ABI_VERSION > 0x0202 // writer.mem must be freed by calling WebPMemoryWriterClear. +#else +// writer.mem must be freed by calling 'free(writer.mem)'. +#endif WEBP_EXTERN(int) WebPMemoryWrite(const uint8_t* data, size_t data_size, const WebPPicture* picture); From 8f6f8c5ddee260953af4cfb7e5ffe349d4f27e3e Mon Sep 17 00:00:00 2001 From: skal Date: Wed, 23 Jul 2014 13:59:33 -0700 Subject: [PATCH 05/16] remove the !WEBP_REFERENCE_IMPLEMENTATION tweak in Put8x8uv There's no speed diff, so better remove it altogether Reported in https://code.google.com/p/webp/issues/detail?id=215 Change-Id: I991330de18bec340029d6df5fed0dfb4337e4662 --- src/dsp/dec.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/dsp/dec.c b/src/dsp/dec.c index 927f83a9..65a2a885 100644 --- a/src/dsp/dec.c +++ b/src/dsp/dec.c @@ -417,14 +417,9 @@ static void HE8uv(uint8_t *dst) { // horizontal // helper for chroma-DC predictions static WEBP_INLINE void Put8x8uv(uint8_t value, uint8_t* dst) { int j; -#ifndef WEBP_REFERENCE_IMPLEMENTATION - const uint64_t v = (uint64_t)value * 0x0101010101010101ULL; for (j = 0; j < 8; ++j) { - *(uint64_t*)(dst + j * BPS) = v; + memset(dst + j * BPS, value, 8); } -#else - for (j = 0; j < 8; ++j) memset(dst + j * BPS, value, 8); -#endif } static void DC8uv(uint8_t *dst) { // DC From 862d296cf9b1a7975bc725bc60646077f0ad8fdc Mon Sep 17 00:00:00 2001 From: James Zern Date: Wed, 23 Jul 2014 16:13:56 -0700 Subject: [PATCH 06/16] restore mux API compatibility protect WebPMuxSetCanvasSize w/a WEBP_MUX_ABI_VERSION check Change-Id: I6b01af55ebb4cc4c860d3cbf43be722077896748 --- examples/gif2webp.c | 2 ++ src/mux/muxedit.c | 2 ++ src/webp/mux.h | 4 +++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/examples/gif2webp.c b/examples/gif2webp.c index 71d526e4..e8dcbd3e 100644 --- a/examples/gif2webp.c +++ b/examples/gif2webp.c @@ -449,6 +449,7 @@ int main(int argc, const char *argv[]) { gif->SWidth, gif->SHeight); } } +#if WEBP_MUX_ABI_VERSION > 0x0101 // Set definitive canvas size. err = WebPMuxSetCanvasSize(mux, gif->SWidth, gif->SHeight); if (err != WEBP_MUX_OK) { @@ -456,6 +457,7 @@ int main(int argc, const char *argv[]) { gif->SWidth, gif->SHeight); goto End; } +#endif // Allocate current buffer. frame.width = gif->SWidth; frame.height = gif->SHeight; diff --git a/src/mux/muxedit.c b/src/mux/muxedit.c index 18f7052d..24ca471b 100644 --- a/src/mux/muxedit.c +++ b/src/mux/muxedit.c @@ -362,6 +362,7 @@ WebPMuxError WebPMuxSetAnimationParams(WebPMux* mux, return MuxSet(mux, kChunks[IDX_ANIM].tag, 1, &anim, 1); } +#if WEBP_MUX_ABI_VERSION > 0x0101 WebPMuxError WebPMuxSetCanvasSize(WebPMux* mux, int width, int height) { WebPMuxError err; @@ -387,6 +388,7 @@ WebPMuxError WebPMuxSetCanvasSize(WebPMux* mux, mux->canvas_height_ = height; return WEBP_MUX_OK; } +#endif //------------------------------------------------------------------------------ // Delete API(s). diff --git a/src/webp/mux.h b/src/webp/mux.h index 578d9e02..1ae03b34 100644 --- a/src/webp/mux.h +++ b/src/webp/mux.h @@ -55,7 +55,7 @@ extern "C" { #endif -#define WEBP_MUX_ABI_VERSION 0x0102 // MAJOR(8b) + MINOR(8b) +#define WEBP_MUX_ABI_VERSION 0x0101 // MAJOR(8b) + MINOR(8b) // Note: forward declaring enumerations is not allowed in (strict) C and C++, // the types are left here for reference. @@ -310,6 +310,7 @@ WEBP_EXTERN(WebPMuxError) WebPMuxGetAnimationParams( //------------------------------------------------------------------------------ // Misc Utilities. +#if WEBP_MUX_ABI_VERSION > 0x0101 // Sets the canvas size for the mux object. The width and height can be // specified explicitly or left as zero (0, 0). // * When width and height are specified explicitly, then this frame bound is @@ -327,6 +328,7 @@ WEBP_EXTERN(WebPMuxError) WebPMuxGetAnimationParams( // WEBP_MUX_OK - on success. WEBP_EXTERN(WebPMuxError) WebPMuxSetCanvasSize(WebPMux* mux, int width, int height); +#endif // Gets the canvas size from the mux object. // Note: This method assumes that the VP8X chunk, if present, is up-to-date. From 85213b9bbeea404d45a26721e7689df015b9af35 Mon Sep 17 00:00:00 2001 From: James Zern Date: Wed, 23 Jul 2014 17:15:33 -0700 Subject: [PATCH 07/16] bump version to 0.4.1 libwebp{,decoder} - 0.4.1 libwebp libtool - 5.1.0 libwebpdecoder libtool - 1.1.0 mux/demux - 0.2.1 libtool - 1.1.0 Change-Id: If593a198f802fd68c7dbbdbe0fc2612dbc44e2df --- README | 2 +- README.mux | 2 +- configure.ac | 2 +- src/Makefile.am | 4 ++-- src/dec/vp8i.h | 2 +- src/demux/Makefile.am | 2 +- src/demux/demux.c | 2 +- src/enc/vp8enci.h | 2 +- src/mux/Makefile.am | 2 +- src/mux/muxi.h | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README b/README index 42c09091..85019822 100644 --- a/README +++ b/README @@ -4,7 +4,7 @@ \__\__/\____/\_____/__/ ____ ___ / _/ / \ \ / _ \/ _/ / \_/ / / \ \ __/ \__ - \____/____/\_____/_____/____/v0.4.0 + \____/____/\_____/_____/____/v0.4.1 Description: ============ diff --git a/README.mux b/README.mux index 34619c98..437a751c 100644 --- a/README.mux +++ b/README.mux @@ -1,7 +1,7 @@  __ __ ____ ____ ____ __ __ _ __ __ / \\/ \/ _ \/ _ \/ _ \/ \ \/ \___/_ / _\ \ / __/ _ \ __/ / / (_/ /__ - \__\__/\_____/_____/__/ \__//_/\_____/__/___/v0.2.0 + \__\__/\_____/_____/__/ \__//_/\_____/__/___/v0.2.1 Description: diff --git a/configure.ac b/configure.ac index ffafde0f..d76569eb 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([libwebp], [0.4.0], +AC_INIT([libwebp], [0.4.1], [http://code.google.com/p/webp/issues],, [http://developers.google.com/speed/webp]) AC_CANONICAL_TARGET diff --git a/src/Makefile.am b/src/Makefile.am index 68f003c3..d4bd3caf 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -35,7 +35,7 @@ libwebp_la_LIBADD += utils/libwebputils.la # other than the ones listed on the command line, i.e., after linking, it will # not have unresolved symbols. Some platforms (Windows among them) require all # symbols in shared libraries to be resolved at library creation. -libwebp_la_LDFLAGS = -no-undefined -version-info 5:0:0 +libwebp_la_LDFLAGS = -no-undefined -version-info 5:1:0 libwebpincludedir = $(includedir)/webp pkgconfig_DATA = libwebp.pc @@ -47,7 +47,7 @@ if BUILD_LIBWEBPDECODER libwebpdecoder_la_LIBADD += dsp/libwebpdspdecode.la libwebpdecoder_la_LIBADD += utils/libwebputilsdecode.la - libwebpdecoder_la_LDFLAGS = -no-undefined -version-info 1:0:0 + libwebpdecoder_la_LDFLAGS = -no-undefined -version-info 1:1:0 pkgconfig_DATA += libwebpdecoder.pc endif diff --git a/src/dec/vp8i.h b/src/dec/vp8i.h index d5b67660..7cc1840f 100644 --- a/src/dec/vp8i.h +++ b/src/dec/vp8i.h @@ -31,7 +31,7 @@ extern "C" { // version numbers #define DEC_MAJ_VERSION 0 #define DEC_MIN_VERSION 4 -#define DEC_REV_VERSION 0 +#define DEC_REV_VERSION 1 // intra prediction modes enum { B_DC_PRED = 0, // 4x4 modes diff --git a/src/demux/Makefile.am b/src/demux/Makefile.am index ec7be680..8fdc28ea 100644 --- a/src/demux/Makefile.am +++ b/src/demux/Makefile.am @@ -9,6 +9,6 @@ libwebpdemuxinclude_HEADERS += ../webp/mux_types.h libwebpdemuxinclude_HEADERS += ../webp/types.h libwebpdemux_la_LIBADD = ../libwebp.la -libwebpdemux_la_LDFLAGS = -no-undefined -version-info 1:0:0 +libwebpdemux_la_LDFLAGS = -no-undefined -version-info 1:1:0 libwebpdemuxincludedir = $(includedir)/webp pkgconfig_DATA = libwebpdemux.pc diff --git a/src/demux/demux.c b/src/demux/demux.c index 76441a64..0ab30746 100644 --- a/src/demux/demux.c +++ b/src/demux/demux.c @@ -25,7 +25,7 @@ #define DMUX_MAJ_VERSION 0 #define DMUX_MIN_VERSION 2 -#define DMUX_REV_VERSION 0 +#define DMUX_REV_VERSION 1 typedef struct { size_t start_; // start location of the data diff --git a/src/enc/vp8enci.h b/src/enc/vp8enci.h index a08b8e3b..b5bb87b4 100644 --- a/src/enc/vp8enci.h +++ b/src/enc/vp8enci.h @@ -30,7 +30,7 @@ extern "C" { // version numbers #define ENC_MAJ_VERSION 0 #define ENC_MIN_VERSION 4 -#define ENC_REV_VERSION 0 +#define ENC_REV_VERSION 1 // intra prediction modes enum { B_DC_PRED = 0, // 4x4 modes diff --git a/src/mux/Makefile.am b/src/mux/Makefile.am index 3ca03508..37f96726 100644 --- a/src/mux/Makefile.am +++ b/src/mux/Makefile.am @@ -12,6 +12,6 @@ libwebpmuxinclude_HEADERS += ../webp/mux_types.h libwebpmuxinclude_HEADERS += ../webp/types.h libwebpmux_la_LIBADD = ../libwebp.la -libwebpmux_la_LDFLAGS = -no-undefined -version-info 1:0:0 +libwebpmux_la_LDFLAGS = -no-undefined -version-info 1:1:0 libwebpmuxincludedir = $(includedir)/webp pkgconfig_DATA = libwebpmux.pc diff --git a/src/mux/muxi.h b/src/mux/muxi.h index 6a410232..f38d5131 100644 --- a/src/mux/muxi.h +++ b/src/mux/muxi.h @@ -28,7 +28,7 @@ extern "C" { #define MUX_MAJ_VERSION 0 #define MUX_MIN_VERSION 2 -#define MUX_REV_VERSION 0 +#define MUX_REV_VERSION 1 // Chunk object. typedef struct WebPChunk WebPChunk; From 268d01eb249dd9b904a316ec2ae028291c24226e Mon Sep 17 00:00:00 2001 From: James Zern Date: Wed, 23 Jul 2014 17:21:04 -0700 Subject: [PATCH 08/16] update AUTHORS Change-Id: I1eae9342df7bf4e8e98d5328b2e3eab7cba9fee8 --- .mailmap | 1 + AUTHORS | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.mailmap b/.mailmap index 55b00c69..077dd51b 100644 --- a/.mailmap +++ b/.mailmap @@ -5,3 +5,4 @@ Pascal Massimino Vikas Arora + diff --git a/AUTHORS b/AUTHORS index 331c59f5..f0a85f9b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -7,6 +7,7 @@ Contributors: - Johann (johann dot koenig at duck dot com) - Jovan Zelincevic (jovan dot zelincevic at imgtec dot com) - Jyrki Alakuijala (jyrki at google dot com) +- levytamar82 (tamar dot levy at intel dot com) - Lou Quillio (louquillio at google dot com) - Mans Rullgard (mans at mansr dot com) - Martin Olsson (mnemo at minimum dot se) @@ -16,6 +17,8 @@ Contributors: - Paweł Hajdan, Jr (phajdan dot jr at chromium dot org) - Pierre Joye (pierre dot php at gmail dot com) - Scott LaVarnway (slavarnway at google dot com) +- Scott Talbot (s at chikachow dot org) +- Slobodan Prijic (slobodan dot prijic at imgtec dot com) - Somnath Banerjee (somnath dot banerjee at gmail dot com) - Urvang Joshi (urvang at google dot com) - Vikas Arora (vikasa at google dot com) From e49f693b1f328b5db8bc3eff14b7fd0efbfa8a6c Mon Sep 17 00:00:00 2001 From: James Zern Date: Tue, 22 Jul 2014 20:55:03 -0700 Subject: [PATCH 09/16] update NEWS for the next release Change-Id: If708c6b442816f43522b7e5b292f3cba266d614a --- NEWS | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/NEWS b/NEWS index 55c2c5ed..f3175f0b 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,14 @@ +- 7/24/14: version 0.4.1 + This is a binary compatible release. + * AArch64 (arm64) & MIPS support/optimizations + * NEON assembly additions: + - ~25% faster lossy decode / encode (-m 4) + - ~10% faster lossless decode + - ~5-10% faster lossless encode (-m 3/4) + * dwebp/vwebp can read from stdin + * cwebp/gif2webp can write to stdout + * cwebp can read webp files; useful if storing sources as webp lossless + - 12/19/13: version 0.4.0 * improved gif2webp tool * numerous fixes, compression improvement and speed-up From fb668d78b3d62b63683e68d4b716a8131e1abc72 Mon Sep 17 00:00:00 2001 From: James Zern Date: Wed, 23 Jul 2014 19:52:45 -0700 Subject: [PATCH 10/16] remove -noalphadither option from README/vwebp.1 + vwebp's -help output this is a future option; missed in: 793368e restore decode API compatibility Change-Id: If920df2cf8de57ebad93a6b98830562149396d8d --- README | 1 - examples/vwebp.c | 2 ++ man/vwebp.1 | 11 ++++++----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/README b/README index 85019822..0e171c52 100644 --- a/README +++ b/README @@ -294,7 +294,6 @@ Options are: -nofancy ..... don't use the fancy YUV420 upscaler -nofilter .... disable in-loop filtering -dither dithering strength (0..100), default=50 - -noalphadither disable alpha plane dithering -mt .......... use multi-threading -info ........ print info -h ....... this help message diff --git a/examples/vwebp.c b/examples/vwebp.c index c56ad40e..400fb1e5 100644 --- a/examples/vwebp.c +++ b/examples/vwebp.c @@ -377,7 +377,9 @@ static void Help(void) { " -nofancy ..... don't use the fancy YUV420 upscaler\n" " -nofilter .... disable in-loop filtering\n" " -dither dithering strength (0..100), default=50\n" +#if WEBP_DECODER_ABI_VERSION > 0x0203 " -noalphadither disable alpha plane dithering\n" +#endif " -mt .......... use multi-threading\n" " -info ........ print info\n" " -h ....... this help message\n" diff --git a/man/vwebp.1 b/man/vwebp.1 index a842f6ef..525cecce 100644 --- a/man/vwebp.1 +++ b/man/vwebp.1 @@ -1,5 +1,5 @@ .\" Hey, EMACS: -*- nroff -*- -.TH VWEBP 1 "June 13, 2014" +.TH VWEBP 1 "July 23, 2014" .SH NAME vwebp \- decompress a WebP file and display it in a window .SH SYNOPSIS @@ -33,10 +33,11 @@ Disable in-loop filtering. Specify a dithering \fBstrength\fP between 0 and 100. Dithering is a post-processing effect applied to chroma components in lossy compression. It helps by smoothing gradients and avoiding banding artifacts. Default: 50. -.TP -.BI \-noalphadither -By default, quantized transparency planes are dithered during decompression, -to smooth the gradients. This flag will prevent this dithering. +.\" TODO(jzern): restore post-v0.4.1 +.\" .TP +.\" .BI \-noalphadither +.\" By default, quantized transparency planes are dithered during decompression, +.\" to smooth the gradients. This flag will prevent this dithering. .TP .B \-mt Use multi-threading for decoding, if possible. From 2def1fe6355baf929419dd002ff318fb60bb6278 Mon Sep 17 00:00:00 2001 From: James Zern Date: Wed, 23 Jul 2014 20:02:43 -0700 Subject: [PATCH 11/16] gif2webp: dust up the help message * try to avoid trailing '.' * rationalize capitalization missed in: 0a8b886 dust up the help message Change-Id: I6f80736cc8a2ff4f185f63d463a57d5bbf88a0db --- README | 20 ++++++++++---------- examples/gif2webp.c | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/README b/README index 0e171c52..e4867e88 100644 --- a/README +++ b/README @@ -337,24 +337,24 @@ vwebp. Usage: gif2webp [options] gif_file -o webp_file -options: +Options: -h / -help ............ this help - -lossy ................. Encode image using lossy compression. - -mixed ................. For each frame in the image, pick lossy - or lossless compression heuristically. + -lossy ................. encode image using lossy compression + -mixed ................. for each frame in the image, pick lossy + or lossless compression heuristically -q ............. quality factor (0:small..100:big) -m ............... compression method (0=fast, 6=slowest) - -kmin ............ Min distance between key frames - -kmax ............ Max distance between key frames + -kmin ............ min distance between key frames + -kmax ............ max distance between key frames -f ............... filter strength (0=off..100) -metadata ..... comma separated list of metadata to - copy from the input to the output if present. + copy from the input to the output if present Valid values: all, none, icc, xmp (default) -mt .................... use multi-threading if available - -version ............... print version number and exit. - -v ..................... verbose. - -quiet ................. don't print anything. + -version ............... print version number and exit + -v ..................... verbose + -quiet ................. don't print anything Building: --------- diff --git a/examples/gif2webp.c b/examples/gif2webp.c index e8dcbd3e..395068b9 100644 --- a/examples/gif2webp.c +++ b/examples/gif2webp.c @@ -223,26 +223,26 @@ enum { static void Help(void) { printf("Usage:\n"); printf(" gif2webp [options] gif_file -o webp_file\n"); - printf("options:\n"); + printf("Options:\n"); printf(" -h / -help ............ this help\n"); - printf(" -lossy ................. Encode image using lossy compression.\n"); - printf(" -mixed ................. For each frame in the image, pick lossy\n" - " or lossless compression heuristically.\n"); + printf(" -lossy ................. encode image using lossy compression\n"); + printf(" -mixed ................. for each frame in the image, pick lossy\n" + " or lossless compression heuristically\n"); printf(" -q ............. quality factor (0:small..100:big)\n"); printf(" -m ............... compression method (0=fast, 6=slowest)\n"); - printf(" -kmin ............ Min distance between key frames\n"); - printf(" -kmax ............ Max distance between key frames\n"); + printf(" -kmin ............ min distance between key frames\n"); + printf(" -kmax ............ max distance between key frames\n"); printf(" -f ............... filter strength (0=off..100)\n"); printf(" -metadata ..... comma separated list of metadata to\n"); printf(" "); - printf("copy from the input to the output if present.\n"); + printf("copy from the input to the output if present\n"); printf(" " "Valid values: all, none, icc, xmp (default)\n"); printf(" -mt .................... use multi-threading if available\n"); printf("\n"); - printf(" -version ............... print version number and exit.\n"); - printf(" -v ..................... verbose.\n"); - printf(" -quiet ................. don't print anything.\n"); + printf(" -version ............... print version number and exit\n"); + printf(" -v ..................... verbose\n"); + printf(" -quiet ................. don't print anything\n"); printf("\n"); } From 89a7c83cd45f2d6e292d237e7f95616278e5c9e5 Mon Sep 17 00:00:00 2001 From: James Zern Date: Wed, 23 Jul 2014 23:05:49 -0700 Subject: [PATCH 12/16] update ChangeLog Change-Id: Ie9c2c7fe53321aefa17905c4322ad3373869ebad --- ChangeLog | 380 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 380 insertions(+) diff --git a/ChangeLog b/ChangeLog index 5fa6c3f1..438dad8a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,383 @@ +ffe67ee Merge "update NEWS for the next release" into 0.4.1 +2def1fe gif2webp: dust up the help message +fb668d7 remove -noalphadither option from README/vwebp.1 +e49f693 update NEWS for the next release +cd01358 Merge "update AUTHORS" into 0.4.1 +268d01e update AUTHORS +85213b9 bump version to 0.4.1 +695f80a Merge "restore mux API compatibility" into 0.4.1 +862d296 restore mux API compatibility +8f6f8c5 remove the !WEBP_REFERENCE_IMPLEMENTATION tweak in Put8x8uv +d713a69 Merge changes If4debc15,I437a5d5f into 0.4.1 +c2fc52e restore encode API compatibility +793368e restore decode API compatibility +b8984f3 gif2webp: fix compile with giflib 5.1.0 +222f9b1 gif2webp: simplify giflib version checking +d2cc61b Extend MakeARGB32() to accept Alpha channel. +4595b62 Merge "use explicit size of kErrorMessages[] arrays" +157de01 Merge "Actuate memory stats for PRINT_MEMORY_INFO" +fbda2f4 JPEG decoder: delay conversion to YUV to WebPEncode() call +0b747b1 use explicit size of kErrorMessages[] arrays +3398d81 Actuate memory stats for PRINT_MEMORY_INFO +6f3202b Merge "move WebPPictureInit to picture.c" +6c347bb move WebPPictureInit to picture.c +fb3acf1 fix configure message for multi-thread +40b086f configure: check for _beginthreadex +1549d62 reorder the YUVA->ARGB and ARGB->YUVA functions correctly +c6461bf Merge "extract colorspace code from picture.c into picture_csp.c" +736f2a1 extract colorspace code from picture.c into picture_csp.c +645daa0 Merge "configure: check for -Wformat-security" +abafed8 configure: check for -Wformat-security +fbadb48 split monolithic picture.c into picture_{tools,psnr,rescale}.c +c76f07e dec_neon/TransformAC3: initialize vector w/vcreate +bb4fc05 gif2webp: Allow single-frame animations +46fd44c thread: remove harmless race on status_ in End() +5a1a726 Merge "configure: check for __builtin_bswapXX()" +6781423 configure: check for __builtin_bswapXX() +6450c48 configure: fix iOS builds +6422e68 VP8LFillBitWindow: enable fast path for 32-bit builds +4f7f52b VP8LFillBitWindow: respect WEBP_FORCE_ALIGNED +e458bad endian_inl.h: implement htoleXX with BSwapXX +f2664d1 endian_inl.h: add BSwap16 +6fbf534 Merge "configure: add --enable-aligned" +dc0f479 configure: add --enable-aligned +9cc69e2 Merge "configure: support WIC + OpenGL under mingw64" +257adfb remove experimental YUV444 YUV422 and YUV400 code +10f4257 configure: support WIC + OpenGL under mingw64 +380cca4 configure.ac: add AC_C_BIGENDIAN +ee70a90 endian_inl.h: add BSwap64 +47779d4 endian_inl.h: add BSwap32 +d5104b1 utils: add endian_inl.h +58ab622 Merge "make alpha-detection loop in IsKeyFrame() in good x/y order" +9d56290 make alpha-detection loop in IsKeyFrame() in good x/y order +516971b lossless: Remove unaligned read warning +b8b596f Merge "configure.ac: add an autoconf version prerequisite" +34b02f8 configure.ac: add an autoconf version prerequisite +e59f536 neon: normalize vdup_n_* usage +6ee7160 Merge changes I0da7b3d3,Idad2f278,I4accc305 +abc02f2 Merge "fix (uncompiled) typo" +bc03670 neon: add INIT_VECTOR4 +6c1c632 neon: add INIT_VECTOR3 +dc7687e neon: add INIT_VECTOR2 +4536e7c add WebPMuxSetCanvasSize() to the mux API +824eab1 fix (uncompiled) typo +1f3e5f1 remove unused 'shift' argument and QFIX2 define +8e86705 Merge "VP8LoadNewBytes: use __builtin_bswap32 if available" +1b6a263 Merge "Fix handling of weird GIF with canvas dimension 0x0" +1da3d46 VP8LoadNewBytes: use __builtin_bswap32 if available +1582e40 Fix handling of weird GIF with canvas dimension 0x0 +b8811da Merge "rename interface -> winterface" +db8b8b5 Fix logic in the GIF LOOP-detection parsing +25aaddc rename interface -> winterface +5584d9d make WebPSetWorkerInterface() check its arguments +a9ef7ef Merge "cosmetics: update thread.h comments" +c6af999 Merge "dust up the help message" +0a8b886 dust up the help message +a9cf319 cosmetics: update thread.h comments +27bfeee QuantizeBlock SSE2 Optimization: +2bc0dc3 Merge "webpmux: warn when odd frame offsets are used" +3114ebe Merge changes Id8edd3c1,Id418eb96,Ide05e3be +c072663 webpmux: warn when odd frame offsets are used +c5c6b40 Merge "add alpha dithering for lossy" +d514678 examples/Android.mk: add cwebp +ca0fa7c Android.mk: move dwebp to examples/Android.mk +73d8fca Android.mk: add ENABLE_SHARED flag +6e93317 muxread: fix out of bounds read +8b0f6a4 Makefile.vc: fix CFLAGS assignment w/HAVE_AVX2=1 +bbe32df add alpha dithering for lossy +7902076 Merge "make error-code reporting consistent upon malloc failure" +77bf441 make error-code reporting consistent upon malloc failure +7a93c00 **/Makefile.am: remove unused AM_CPPFLAGS +24e3080 Add an interface abstraction to the WebP worker thread implementation +d6cd635 Merge "fix orig_rect==NULL case" +2bfd1ff fix orig_rect==NULL case +059e21c Merge "configure: move config.h to src/webp/config.h" +f05fe00 properly report back encoding error code in WebPFrameCacheAddFrame() +32b3137 configure: move config.h to src/webp/config.h +90090d9 Merge changes I7c675e51,I84f7d785 +ae7661b makefiles: define WEBP_HAVE_AVX2 when appropriate +69fce2e remove the special casing for res->first in VP8SetResidualCoeffs +6e61a3a configure: test for -msse2 +b9d2efc rename upsampling_mips32.c to yuv_mips32.c +bdfeeba dsp/yuv: move sse2 functions to yuv_sse2.c +46b32e8 Merge "configure: set WEBP_HAVE_AVX2 when available" +88305db Merge "VP8RandomBits2: prevent signed int overflow" +73fee88 VP8RandomBits2: prevent signed int overflow +db4860b enc_sse2: prevent signed int overflow +3fdaf4d Merge "real fix for longjmp warning" +385e334 real fix for longjmp warning +230a055 configure: set WEBP_HAVE_AVX2 when available +a2ac8a4 restore original value_/range_ field order +5e2ee56 Merge "remove libwebpdspdecode dep on libwebpdsp_avx2" +61362db remove libwebpdspdecode dep on libwebpdsp_avx2 +42c447a Merge "lossy bit-reader clean-up:" +479ffd8 Merge "remove unused #include's" +9754d39 Merge "strong filtering speed-up (~2-3% x86, ~1-2% for NEON)" +158aff9 remove unused #include's +09545ee lossy bit-reader clean-up: +ea8b0a1 strong filtering speed-up (~2-3% x86, ~1-2% for NEON) +6679f89 Optimize VP8SetResidualCoeffs. +ac591cf fix for gcc-4.9 warnings about longjmp + local variables +4dfa86b dsp/cpu: NaCl has no support for xgetbv +4c39869 Merge "cwebp: fallback to native webp decode in WIC builds" +33aa497 Merge "cwebp: add some missing newlines in longhelp output" +c9b340a fix missing WebPInitAlphaProcessing call for premultiplied colorspace output +57897ba Merge "lossless_neon: use vcreate_*() where appropriate" +6aa4777 Merge "(enc|dec)_neon: use vcreate_*() where appropriate" +0d346e4 Always reinit VP8TransformWHT instead of hard-coding +7d039fc cwebp: fallback to native webp decode in WIC builds +d471f42 cwebp: add some missing newlines in longhelp output +bf0e003 lossless_neon: use vcreate_*() where appropriate +9251c2f (enc|dec)_neon: use vcreate_*() where appropriate +399b916 lossy decoding: correct alpha-rescaling for YUVA format +78c12ed Merge "Makefile.vc: add rudimentary avx2 support" +dc5b122 try to remove the spurious warning for static analysis +ddfefd6 Makefile.vc: add rudimentary avx2 support +a891164 Merge "simplify VP8LInitBitReader()" +fdbcd44 simplify VP8LInitBitReader() +7c00428 makefile.unix: add rudimentary avx2 support +515e35c Merge "add stub dsp/enc_avx2.c" +a05dc14 SSE2: yuv->rgb speed-up for point-sampling +178e9a6 add stub dsp/enc_avx2.c +1b99c09 Merge "configure: add a test for -mavx2" +fe72807 configure: add a test for -mavx2 +e46a247 cpu: fix check for __cpuidex availability +176fda2 fix the bit-writer for lossless in 32bit mode +541784c dsp.h: add a check for AVX2 / define WEBP_USE_AVX2 +bdb151e dsp/cpu: add AVX2 detection +ab9f2f8 Merge "revamp the point-sampling functions by processing a full plane" +a2f8b28 revamp the point-sampling functions by processing a full plane +ef07602 use decoder's DSP functions for autofilter +2b5cb32 Merge "dsp/cpu: add AVX detection" +df08e67 dsp/cpu: add AVX detection +e2f405c Merge "clean-up and slight speed-up in-loop filtering SSE2" +f60957b clean-up and slight speed-up in-loop filtering SSE2 +9fc3ae4 .gitattributes: treat .ppm as binary +3da924b Merge "dsp/WEBP_USE_NEON: test for __aarch64__" +c716449 Android.mk: always include *_neon.c in the build +a577b23 dsp/WEBP_USE_NEON: test for __aarch64__ +54bfffc move RemapBitReader() from idec.c to bit_reader code +34168ec Merge "remove all unused layer code" +f1e7717 remove all unused layer code +b0757db Code cleanup for VP8LGetHistoImageSymbols. +5fe628d make the token page size be variable instead of fixed 8192 +f948d08 memory debug: allow setting pre-defined malloc failure points +ca3d746 use block-based allocation for backward refs storage, and free-lists +1ba61b0 enable NEON intrinsics in aarch64 builds +b9d2bb6 dsp/neon.h: coalesce intrinsics-related defines +b5c7525 iosbuild: add support for iOSv7/aarch64 +9383afd Reduce number of memory allocations while decoding lossless. +888e63e Merge "dsp/lossless: prevent signed int overflow in left shift ops" +8137f3e Merge "instrument memory allocation routines for debugging" +2aa1873 instrument memory allocation routines for debugging +d3bcf72 Don't allocate VP8LHashChain, but treat like automatic object +bd6b861 dsp/lossless: prevent signed int overflow in left shift ops +b7f19b8 Merge "dec/vp8l: prevent signed int overflow in left shift ops" +29059d5 Merge "remove some uint64_t casts and use." +e69a1df dec/vp8l: prevent signed int overflow in left shift ops +cf5eb8a remove some uint64_t casts and use. +38e2db3 MIPS: MIPS32r1: Added optimization for HistogramAdd. +e0609ad dwebp: fix exit code on webp load failure +bbd358a Merge "example_util.h: avoid forward declaring enums" +8955da2 example_util.h: avoid forward declaring enums +6d6865f Added SSE2 variants for Average2/3/4 +b3a616b make HistogramAdd() a pointer in dsp +c8bbb63 dec_neon: relocate some inline-asm defines +4e393bb dec_neon: enable intrinsics-only functions +ba99a92 dec_neon: use positive tests for USE_INTRINSICS +69058ff Merge "example_util: add ExUtilDecodeWebPIncremental" +a7828e8 dec_neon: make WORK_AROUND_GCC conditional on version +3f3d717 Merge "enc_neon: enable intrinsics-only functions" +de3cb6c Merge "move LOCAL_GCC_VERSION def to dsp.h" +1b2fe14 example_util: add ExUtilDecodeWebPIncremental +ca49e7a Merge "enc_neon: move Transpose4x4 to dsp/neon.h" +ad900ab Merge "fix warning about size_t -> int conversion" +4825b43 fix warning about size_t -> int conversion +42b35e0 enc_neon: enable intrinsics-only functions +f937e01 move LOCAL_GCC_VERSION def to dsp.h +5e1a17e enc_neon: move Transpose4x4 to dsp/neon.h +c7b92a5 dec_neon: (WORK_AROUND_GCC) delete unused Load4x8 +8e5f90b Merge "make ExUtilLoadWebP() accept NULL bitstream param." +05d4c1b Merge "cwebp: add webpdec" +ddeb6ac cwebp: add webpdec +35d7d09 Merge "Reduce memory footprint for encoding WebP lossless." +0b89610 Reduce memory footprint for encoding WebP lossless. +f0b65c9 make ExUtilLoadWebP() accept NULL bitstream param. +9c0a60c Merge "dwebp: move webp decoding to example_util" +1d62acf MIPS: MIPS32r1: Added optimization for HuffmanCost functions. +4a0e739 dwebp: move webp decoding to example_util +c022046 Merge "Bugfix: Incremental decode of lossy-alpha" +8c7cd72 Bugfix: Incremental decode of lossy-alpha +7955152 MIPS: fix error with number of registers. +b1dabe3 Merge "Move the HuffmanCost() function to dsp lib" +75b1200 Move the HuffmanCost() function to dsp lib +2772b8b MIPS: fix assembler error revealed by clang's debug build +6653b60 enc_mips32: fix unused symbol warning in debug +8dec120 enc_mips32: disable ITransform(One) in debug builds +98519dd enc_neon: convert Disto4x4 to intrinsics +fe9317c cosmetics: +953b074 enc_neon: cosmetics +a9fc697 Merge "WIP: extract the float-calculation of HuffmanCost from loop" +3f84b52 Merge "replace some mult-long (vmull_u8) with mult-long-accumulate (vmlal_u8)" +4ae0533 MIPS: MIPS32r1: Added optimizations for ExtraCost functions. +b30a04c WIP: extract the float-calculation of HuffmanCost from loop +a8fe8ce Merge "NEON intrinsics version of CollectHistogram" +95203d2 NEON intrinsics version of CollectHistogram +7ca2e74 replace some mult-long (vmull_u8) with mult-long-accumulate (vmlal_u8) +41c6efb fix lossless_neon.c +8ff96a0 NEON intrinsics version of FTransform +0214f4a Merge "MIPS: MIPS32r1: Added optimizations for FastLog2" +baabf1e MIPS: MIPS32r1: Added optimizations for FastLog2 +3d49871 NEON functions for lossless coding +3fe0291 MIPS: MIPS32r1: Added optimizations for SSE functions. +c503b48 Merge "fix the gcc-4.6.0 bug by implementing alternative method" +abe6f48 fix the gcc-4.6.0 bug by implementing alternative method +5598bde enc_mips32.c: fix file mode +2b1b4d5 MIPS: MIPS32r1: Add optimization for GetResidualCost +f0a1f3c Merge "MIPS: MIPS32r1: Added optimization for FTransform" +7231f61 MIPS: MIPS32r1: Added optimization for FTransform +869eaf6 ~30% encoding speedup: use NEON for QuantizeBlock() +f758af6 enc_neon: convert FTransformWHT to intrinsics +7dad095 MIPS: MIPS32r1: Added optimization for Disto4x4 (TTransform) +2298d5f MIPS: MIPS32r1: Added optimization for QuantizeBlock +e88150c Merge "MIPS: MIPS32r1: Add optimization for ITransform" +de693f2 lossless_neon: disable VP8LConvert* functions +4143332 NEON intrinsics for encoding +0ca2914 MIPS: MIPS32r1: Add optimization for ITransform +71bca5e dec_neon: use vst_lane instead of vget_lane +bf06105 Intrinsics NEON version of TransformOne +19c6f1b Merge "dec_neon: use vld?_lane instead of vset?_lane" +7a94c0c upsampling_neon: drop NEON suffix from local functions +d14669c upsampling_sse2: drop SSE2 suffix from local functions +2ca42a4 enc_sse2: drop SSE2 suffix from local functions +d038e61 dec_sse2: drop SSE2 suffix from local functions +fa52d75 dec_neon: use vld?_lane instead of vset?_lane +c520e77 cosmetic: fix long line +4b0f2da Merge "add intrinsics NEON code for chroma strong-filtering" +e351ec0 add intrinsics NEON code for chroma strong-filtering +aaf734b Merge "Add SSE2 version of forward cross-color transform" +c90a902 Add SSE2 version of forward cross-color transform +bc374ff Use histogram_bits to initalize transform_bits. +2132992 Merge "Add strong filtering intrinsics (inner and outer edges)" +5fbff3a Add strong filtering intrinsics (inner and outer edges) +d4813f0 Add SSE2 function for Inverse Cross-color Transform +2602956 dec_neon: add strong loopfilter intrinsics +cca7d7e Merge "add intrinsics version of SimpleHFilter16NEON()" +1a05dfa windows: fix dll builds +d6c50d8 Merge "add some colorspace conversion functions in NEON" +4fd7c82 SSE2 variants of Subtract-Green: Rectify loop condition +97e5fac add some colorspace conversion functions in NEON +b9a7a45 add intrinsics version of SimpleHFilter16NEON() +daccbf4 add light filtering NEON intrinsics +af44460 fix typo in STORE_WHT +6af6b8e Tune HistogramCombineBin for large images. +af93bdd use WebPSafe[CM]alloc/WebPSafeFree instead of [cm]alloc/free +51f406a lossless_sse2: relocate VP8LDspInitSSE2 proto +0f4f721 separate SSE2 lossless functions into its own file +514fc25 VP8LConvertFromBGRA: use conversion function pointers +6d2f352 dsp/dec: TransformDCUV: use VP8TransformDC +defc8e1 Merge "fix out-of-bound read during alpha-plane decoding" +fbed364 Merge "dsp: reuse wht transform from dec in encoder" +d846708 Merge "Add SSE2 version of ARGB -> BGR/RGB/... conversion functions" +207d03b fix out-of-bound read during alpha-plane decoding +d1b33ad 2-5% faster trellis with clang/MacOS (and ~2-3% on ARM) +369c26d Add SSE2 version of ARGB -> BGR/RGB/... conversion functions +df230f2 dsp: reuse wht transform from dec in encoder +80e218d Android.mk: fix build with APP_ABI=armeabi-v7a-hard +59daf08 Merge "cosmetics:" +5362200 cosmetics: +3e7f34a AssignSegments: quiet array-bounds warning +3c2ebf5 Merge "UpdateHistogramCost: avoid implicit double->float" +cf821c8 UpdateHistogramCost: avoid implicit double->float +312e638 Extend the search space for GetBestGreenRedToBlue +1c58526 Fix few nits +fef2270 Optimize and re-structure VP8LGetHistoImageSymbols +068b14a Optimize lossless decoding. +5f0cfa8 Do a binary search to get the optimum cache bits. +24ca367 Merge "allow 'cwebp -o -' to emit output to stdout" +e12f874 allow 'cwebp -o -' to emit output to stdout +2bcad89 allow some more stdin/stout I/O +84ed4b3 fix cwebp.1 typos after patch #69199 +65b99f1 add a -z option to cwebp, and WebPConfigLosslessPreset() function +3017661 4-5% faster trellis by removing some unneeded calculations. +687a58e histogram.c: reindent after b33e8a0 +06d456f Merge "~3-4% faster lossless encoding" +c60de26 ~3-4% faster lossless encoding +42eb06f Merge "few cosmetics after patch #69079" +82af826 few cosmetics after patch #69079 +b33e8a0 Refactor code for HistogramCombine. +ca1bfff Merge "5-10% encoding speedup with faster trellis (-m 6)" +5aeeb08 5-10% encoding speedup with faster trellis (-m 6) +82ae1bf cosmetics: normalize VP8GetCPUInfo checks +e3dd924 Merge "Refactor GetBestPredictorForTile for future tuning." +206cc1b Refactor GetBestPredictorForTile for future tuning. +3cb8406 Merge "speed-up trellis quant (~5-10% overall speed-up)" +b66f222 Merge "lossy encoding: ~3% speed-up" +4287d0d speed-up trellis quant (~5-10% overall speed-up) +390c8b3 lossy encoding: ~3% speed-up +9a463c4 Merge "dec_neon: convert TransformWHT to intrinsics" +e8605e9 Merge "dec_neon: add ConvertU8ToS16" +4aa3e41 MIPS: MIPS32r1: rescaler bugfix +c16cd99 Speed up lossless encoder. +9d6b5ff dec_neon: convert TransformWHT to intrinsics +2ff0aae dec_neon: add ConvertU8ToS16 +77a8f91 fix compilation with USE_YUVj flag +4acbec1 Merge changes I3b240ffb,Ia9370283,Ia2d28728 +2719bb7 dec_neon: TransformAC3: work on packed vectors +b7b60ca dec_neon: add SaturateAndStore4x4 +b7685d7 Rescale: let ImportRow / ExportRow be pointer-to-function +e02f16e dec_neon.c: convert TransformDC to intrinsics +9cba963 add missing file +8992ddb use static clipping tables +0235d5e 1-2% faster quantization in SSE2 +b2fbc36 fix VC12-x64 warning +6e37cb9 Merge "cosmetics: backward_references.c: reindent after a7d2ee3" +a42ea97 cosmetics: backward_references.c: reindent after a7d2ee3 +6c32744 Merge "fix missing __BIG_ENDIAN__ definition on some platform" +a8b6aad fix missing __BIG_ENDIAN__ definition on some platform +fde2904 Increase initial buffer size for VP8L Bit Writer. +a7d2ee3 Optimize cache estimate logic. +7fb6095 Merge "dec_neon.c: add TransformAC3" +bf182e8 VP8LBitWriter: use a bit-accumulator +3f40b4a Merge "MIPS: MIPS32r1: clang macro warning resolved" +1684f4e WebP Decoder: Mark some truncated bitstreams as invalid +acbedac MIPS: MIPS32r1: clang macro warning resolved +228e487 dec_neon.c: add TransformAC3 +393f89b Android.mk: avoid gcc-specific flags with clang +32aeaf1 revamp VP8LColorSpaceTransform() a bit +0c7cc4c Merge "Don't dereference NULL, ensure HashChain fully initialized" +391316f Don't dereference NULL, ensure HashChain fully initialized +926ff40 WEBP_SWAP_16BIT_CSP: remove code dup +1d1cd3b Fix decode bug for rgbA_4444/RGBA_4444 color-modes. +939e70e update AUTHORS file +8934a62 cosmetics: *_mips32.c +dd438c9 MIPS: MIPS32r1: Optimization of some simple point-sampling functions. PATCH [6/6] +5352091 Added support for calling sampling functions via pointers. +d16c697 MIPS: MIPS32r1: Optimization of filter functions. PATCH [5/6] +04336fc MIPS: MIPS32r1: Optimization of function TransformOne. PATCH [4/6] +92d8fc7 MIPS: MIPS32r1: Optimization of function WebPRescalerImportRow. PATCH [3/6] +bbc23ff parse one row of intra modes altogether +a2f608f Merge "MIPS: MIPS32r1: Optimization of function WebPRescalerExportRow. [2/6]" +8823085 MIPS: MIPS32r1: Optimization of function WebPRescalerExportRow. [2/6] +c5a5b02 decode mt+incremental: fix segfault in debug builds +9882b2f always use fast-analysis for all methods. +000adac Merge "autoconf: update ax_pthread.m4" +2d2fc37 update .gitignore +5bf4255 Merge "Make it possible to avoid automagic dependencies" +c1cb193 disable NEON for arm64 platform +73a304e Make it possible to avoid automagic dependencies +4d493f8 MIPS: MIPS32r1: Decoder bit reader function optimized. PATCH [1/6] +c741183 make WebPCleanupTransparentArea work with argb picture +5da1855 add a decoding option to flip image vertically +00c3c4e Merge "add man/vwebp.1" +2c6bb42 add man/vwebp.1 +ea59a8e Merge "Merge tag 'v0.4.0'" +7574bed fix comments related to array sizes +0b5a90f dwebp.1: fix option formatting +effcb0f Merge tag 'v0.4.0' +7c76255 autoconf: update ax_pthread.m4 +fff2a11 make -short work with -print_ssim, -print_psnr, etc. +68e7901 update ChangeLog (tag: v0.4.0-rc1, tag: v0.4.0, origin/0.4.0, 0.4.0) 256e433 update NEWS description with new general features 2962534 Merge "gif2webp: don't use C99 %zu" into 0.4.0 3b9f9dd gif2webp: don't use C99 %zu From dbc3da66d30c0154c5223f7bbc3471474534f31d Mon Sep 17 00:00:00 2001 From: James Zern Date: Wed, 23 Jul 2014 23:41:47 -0700 Subject: [PATCH 13/16] makefile.unix: add vwebp.1 to the dist target Change-Id: Icf8b3853a9b175688c3b92d6f498ed44c58ca462 --- makefile.unix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makefile.unix b/makefile.unix index 9b71a267..023b5217 100644 --- a/makefile.unix +++ b/makefile.unix @@ -306,7 +306,7 @@ dist: all $(INSTALL) -m644 src/demux/libwebpdemux.a $(DESTDIR)/lib $(INSTALL) -m644 src/mux/libwebpmux.a $(DESTDIR)/lib umask 022; \ - for m in man/[cd]webp.1 man/gif2webp.1 man/webpmux.1; do \ + for m in man/[cdv]webp.1 man/gif2webp.1 man/webpmux.1; do \ basenam=$$(basename $$m .1); \ $(GROFF) -t -e -man -T utf8 $$m \ | $(COL) -bx >$(DESTDIR)/doc/$${basenam}.txt; \ From 8d34ea3e36ac288feeb826c6f73e419876fa8033 Mon Sep 17 00:00:00 2001 From: James Zern Date: Thu, 24 Jul 2014 11:54:02 -0700 Subject: [PATCH 14/16] update ChangeLog Change-Id: I5346984d2adff27b64304c154d720456549a9f24 --- ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index 438dad8a..fbde1e5d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,5 @@ +dbc3da6 makefile.unix: add vwebp.1 to the dist target +89a7c83 update ChangeLog ffe67ee Merge "update NEWS for the next release" into 0.4.1 2def1fe gif2webp: dust up the help message fb668d7 remove -noalphadither option from README/vwebp.1 From f59c0b4bded4f26de4a1928038e6f03df204b2ca Mon Sep 17 00:00:00 2001 From: James Zern Date: Sat, 26 Jul 2014 20:40:51 -0700 Subject: [PATCH 15/16] iosbuild.sh: specify optimization flags explicitly set '-O3 -DNDEBUG'. setting CFLAGS on the command line overrides the default, resulting in -O0. Change-Id: I213979f646b1444b1d8e0eb0bb58e9b2c3cc4dd3 --- iosbuild.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iosbuild.sh b/iosbuild.sh index 0094fded..306f955f 100755 --- a/iosbuild.sh +++ b/iosbuild.sh @@ -72,7 +72,7 @@ for PLATFORM in ${PLATFORMS}; do mkdir -p "${ROOTDIR}" SDKROOT="${PLATFORMSROOT}/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDK}.sdk/" - CFLAGS="-arch ${ARCH2:-${ARCH}} -pipe -isysroot ${SDKROOT}" + CFLAGS="-arch ${ARCH2:-${ARCH}} -pipe -isysroot ${SDKROOT} -O3 -DNDEBUG" LDFLAGS="-arch ${ARCH2:-${ARCH}} -pipe -isysroot ${SDKROOT}" if [[ -z "${XCODE}" ]]; then From 8af2771813632e2007988c8df6ad7e68b28ad121 Mon Sep 17 00:00:00 2001 From: James Zern Date: Mon, 28 Jul 2014 17:22:32 -0700 Subject: [PATCH 16/16] update ChangeLog Change-Id: I3b930aa6cb72d17f41e52d645de1d9b2f3a0238b --- ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index fbde1e5d..d77943a7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,5 @@ +f59c0b4 iosbuild.sh: specify optimization flags +8d34ea3 update ChangeLog (tag: v0.4.1-rc1) dbc3da6 makefile.unix: add vwebp.1 to the dist target 89a7c83 update ChangeLog ffe67ee Merge "update NEWS for the next release" into 0.4.1