Update libjpeg-turbo to v2.0.1
In order to apply some performance updates from ARM, we need to update
libjpeg-turbo. These performance updates have yielded a 50% speedup on
some devices.
This CL updates our copy of libjpeg-turbo to v2.0.1 and re-applies our
local patches. This patch also deletes some extra files which were not
being used locally.
Update our local patch that was applied to fix http://crbug.com/398235
(https://codereview.appspot.com/229430043/). The original patch
incorrectly removed "& 0xFF" which limited an array index to within
that array's bounds (effectively reverting
https://github.com/libjpeg-turbo/libjpeg-turbo/commit/fa1d18385d904d530b4aec83ab7757a33397de6e).
Restore the mask, making the array access safe and fixing a graphical
glitch which would otherwise be introduced by this change.
Bug:922430
Change-Id: I3860fdb424deecf7a17818ed09a640e632e71f8d
diff --git a/cdjpeg.h b/cdjpeg.h
index a65310e..9868a0b 100644
--- a/cdjpeg.h
+++ b/cdjpeg.h
@@ -3,8 +3,8 @@
*
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1994-1997, Thomas G. Lane.
- * It was modified by The libjpeg-turbo Project to include only code relevant
- * to libjpeg-turbo.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2017, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
@@ -54,6 +54,14 @@
JDIMENSION rows_supplied);
/* Finish up at the end of the image. */
void (*finish_output) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo);
+ /* Re-calculate buffer dimensions based on output dimensions (for use with
+ partial image decompression.) If this is NULL, then the output format
+ does not support partial image decompression (BMP and RLE, in particular,
+ cannot support partial decompression because they use an inversion buffer
+ to write the image in bottom-up order.) */
+ void (*calc_buffer_dimensions) (j_decompress_ptr cinfo,
+ djpeg_dest_ptr dinfo);
+
/* Target file spec; filled in by djpeg.c after object is created. */
FILE *output_file;
@@ -88,41 +96,42 @@
/* Module selection routines for I/O modules. */
-EXTERN(cjpeg_source_ptr) jinit_read_bmp (j_compress_ptr cinfo);
-EXTERN(djpeg_dest_ptr) jinit_write_bmp (j_decompress_ptr cinfo,
- boolean is_os2);
-EXTERN(cjpeg_source_ptr) jinit_read_gif (j_compress_ptr cinfo);
-EXTERN(djpeg_dest_ptr) jinit_write_gif (j_decompress_ptr cinfo);
-EXTERN(cjpeg_source_ptr) jinit_read_ppm (j_compress_ptr cinfo);
-EXTERN(djpeg_dest_ptr) jinit_write_ppm (j_decompress_ptr cinfo);
-EXTERN(cjpeg_source_ptr) jinit_read_rle (j_compress_ptr cinfo);
-EXTERN(djpeg_dest_ptr) jinit_write_rle (j_decompress_ptr cinfo);
-EXTERN(cjpeg_source_ptr) jinit_read_targa (j_compress_ptr cinfo);
-EXTERN(djpeg_dest_ptr) jinit_write_targa (j_decompress_ptr cinfo);
+EXTERN(cjpeg_source_ptr) jinit_read_bmp(j_compress_ptr cinfo,
+ boolean use_inversion_array);
+EXTERN(djpeg_dest_ptr) jinit_write_bmp(j_decompress_ptr cinfo, boolean is_os2,
+ boolean use_inversion_array);
+EXTERN(cjpeg_source_ptr) jinit_read_gif(j_compress_ptr cinfo);
+EXTERN(djpeg_dest_ptr) jinit_write_gif(j_decompress_ptr cinfo);
+EXTERN(cjpeg_source_ptr) jinit_read_ppm(j_compress_ptr cinfo);
+EXTERN(djpeg_dest_ptr) jinit_write_ppm(j_decompress_ptr cinfo);
+EXTERN(cjpeg_source_ptr) jinit_read_rle(j_compress_ptr cinfo);
+EXTERN(djpeg_dest_ptr) jinit_write_rle(j_decompress_ptr cinfo);
+EXTERN(cjpeg_source_ptr) jinit_read_targa(j_compress_ptr cinfo);
+EXTERN(djpeg_dest_ptr) jinit_write_targa(j_decompress_ptr cinfo);
/* cjpeg support routines (in rdswitch.c) */
-EXTERN(boolean) read_quant_tables (j_compress_ptr cinfo, char *filename,
- boolean force_baseline);
-EXTERN(boolean) read_scan_script (j_compress_ptr cinfo, char *filename);
-EXTERN(boolean) set_quality_ratings (j_compress_ptr cinfo, char *arg,
- boolean force_baseline);
-EXTERN(boolean) set_quant_slots (j_compress_ptr cinfo, char *arg);
-EXTERN(boolean) set_sample_factors (j_compress_ptr cinfo, char *arg);
+EXTERN(boolean) read_quant_tables(j_compress_ptr cinfo, char *filename,
+ boolean force_baseline);
+EXTERN(boolean) read_scan_script(j_compress_ptr cinfo, char *filename);
+EXTERN(boolean) set_quality_ratings(j_compress_ptr cinfo, char *arg,
+ boolean force_baseline);
+EXTERN(boolean) set_quant_slots(j_compress_ptr cinfo, char *arg);
+EXTERN(boolean) set_sample_factors(j_compress_ptr cinfo, char *arg);
/* djpeg support routines (in rdcolmap.c) */
-EXTERN(void) read_color_map (j_decompress_ptr cinfo, FILE *infile);
+EXTERN(void) read_color_map(j_decompress_ptr cinfo, FILE *infile);
/* common support routines (in cdjpeg.c) */
-EXTERN(void) enable_signal_catcher (j_common_ptr cinfo);
-EXTERN(void) start_progress_monitor (j_common_ptr cinfo,
- cd_progress_ptr progress);
-EXTERN(void) end_progress_monitor (j_common_ptr cinfo);
-EXTERN(boolean) keymatch (char *arg, const char *keyword, int minchars);
-EXTERN(FILE *) read_stdin (void);
-EXTERN(FILE *) write_stdout (void);
+EXTERN(void) enable_signal_catcher(j_common_ptr cinfo);
+EXTERN(void) start_progress_monitor(j_common_ptr cinfo,
+ cd_progress_ptr progress);
+EXTERN(void) end_progress_monitor(j_common_ptr cinfo);
+EXTERN(boolean) keymatch(char *arg, const char *keyword, int minchars);
+EXTERN(FILE *) read_stdin(void);
+EXTERN(FILE *) write_stdout(void);
/* miscellaneous useful macros */
@@ -143,3 +152,6 @@
#ifndef EXIT_WARNING
#define EXIT_WARNING 2
#endif
+
+#define IsExtRGB(cs) \
+ (cs == JCS_RGB || (cs >= JCS_EXT_RGB && cs <= JCS_EXT_ARGB))