Log

Author Commit Date CI Message
DRC e8aa5fa9 2016-01-15T13:15:54 Add JSIMD_NOHUFFENC environment variable for ARM Useful in regression/performance testing
DRC ec6941f7 2016-01-15T09:29:11 Complete the ARM64 NEON SIMD implementation This adds 64-bit NEON coverage for all of the algorithms that are covered by the 32-bit NEON implementation, except for h2v1 (4:2:2) fancy upsampling (used when decompressing 4:2:2 JPEG images.) It also adds 64-bit NEON SIMD coverage for: * slow integer forward DCT (compressor) * h2v2 (4:2:0) downsampling (compressor) * h2v1 (4:2:2) downsampling (compressor) which are not covered in the 32-bit implementation. Compression speedups relative to libjpeg-turbo 1.4.2: Apple A7 (iPhone 5S), iOS, 64-bit: 113-150% (reported) 48-core ThunderX (RunAbove ARM Cloud), Linux, 64-bit: 2.1-33% (avg. 15%) Refer to #44 and #49 for discussion This commit also removes the unnecessary if (simd_support & JSIMD_ARM_NEON) statements from the jsimd* algorithm functions. Since the jsimd_can*() functions check for the existence of NEON, the corresponding algorithm functions will never be called if NEON isn't available. Based on: https://github.com/mayeut/libjpeg-turbo/commit/dcd9d84f10fae192c0e3935818dc289bca9c3e29 https://github.com/mayeut/libjpeg-turbo/commit/b0d87b811f37bd560083deea8c6e7d704e5cd944 https://github.com/mayeut/libjpeg-turbo/commit/70cd5c8a493a67f4d54dd2067ae6dedb65d95389 https://github.com/mayeut/libjpeg-turbo/commit/3e58d9a064648503c57ec2650ee79880f749a52b https://github.com/mayeut/libjpeg-turbo/commit/837b19542f53fa81af83e6ba002d559877aaf597 https://github.com/mayeut/libjpeg-turbo/commit/73dc43ccc870c2e10ba893e9764b8e48d6836585 https://github.com/mayeut/libjpeg-turbo/commit/a82b71a261b4c0213f558baf4bc745f1c27356d8 https://github.com/mayeut/libjpeg-turbo/commit/c1b1188c2106d6ea7b76644b6023b57edeb602e1 https://github.com/mayeut/libjpeg-turbo/commit/305c89284e1bb222b34fbc7261f697a0cc452a41 https://github.com/mayeut/libjpeg-turbo/commit/7f443f99950b4d7d442b9b879648eca5273209bd https://github.com/mayeut/libjpeg-turbo/commit/4c2b53b77da5a20e30e2aadaeddb0efbfe24e06d Unified version with fixes: https://github.com/mayeut/libjpeg-turbo/commit/1004a3cd05870612a194b410efeaa1b4da76d246
DRC 499c470b 2016-01-13T03:13:20 ARM32 NEON SIMD implementation of Huffman encoding Full-color compression speedups relative to libjpeg-turbo 1.4.2: 800 MHz ARM Cortex-A9, iOS, 32-bit: 26-44% (avg. 32%) Refer to #42 and #47 for discussion. This commit also removes the unnecessary if (simd_support & JSIMD_ARM_NEON) statements from the jsimd* algorithm functions. Since the jsimd_can*() functions check for the existence of NEON, the corresponding algorithm functions will never be called if NEON isn't available. Removing those if statements improved performance across the board by a couple of percent. Based on: https://github.com/mayeut/libjpeg-turbo/commit/fc023c880ce1d6c908fb78ccc25f5d5fd910ccc5
DRC 9c8cee8c 2016-01-13T13:01:45 tjbench: Further tweaks to -nowrite feature * Do not compute compression error if -nowrite is specified * Adjust formatting of -nowrite usage description
DRC 4e356a92 2016-01-13T12:25:03 BUILDING.md: Restore autotools processing instr. Partially reverts 54014d9c2a41905b7b766057af6728834da64b59. When building from a git sandbox, as opposed to from an official source tarball, it is still necessary to run autoreconf. Closes #48
DRC f3a8684c 2016-01-07T00:19:43 SSE2 SIMD implementation of Huffman encoding Full-color compression speedups relative to libjpeg-turbo 1.4.2: 2.8 GHz Intel Xeon W3530, Linux, 64-bit: 2.2-18% (avg. 9.5%) 2.8 GHz Intel Xeon W3530, Linux, 32-bit: 10-25% (avg. 17%) 2.3 GHz AMD A10-4600M APU, Linux, 64-bit: 4.9-17% (avg. 11%) 2.3 GHz AMD A10-4600M APU, Linux, 32-bit: 8.8-19% (avg. 15%) 3.0 GHz Intel Core i7, OS X, 64-bit: 3.5-16% (avg. 10%) 3.0 GHz Intel Core i7, OS X, 32-bit: 4.8-14% (avg. 11%) 2.6 GHz AMD Athlon 64 X2 5050e: Performance-neutral (give or take a few percent) Full-color compression speedups relative to IPP: 2.8 GHz Intel Xeon W3530, Linux, 64-bit: 4.8-34% (avg. 19%) 2.8 GHz Intel Xeon W3530, Linux, 32-bit: -19%-7.0% (avg. -7.0%) Refer to #42 for discussion. Numerous other approaches were attempted, but this one proved to be the most performant across all platforms. This commit also fixes #3 (works around, really-- the clang-compiled version of jchuff.c still performs 20% worse than its GCC-compiled counterpart, but that code is now bypassed by the new SSE2 Huffman algorithm.) Based on: https://github.com/mayeut/libjpeg-turbo/commit/2cb4d41330e1edc4469f6b97ba73b73abfbeb02f https://github.com/mayeut/libjpeg-turbo/commit/36c94e050d117912adbff9fbcc6fe307df240168
DRC eb59b6e7 2016-01-11T22:27:38 Add -nowrite arg to TJBench to improve consistency Prevents any images from being written to disk, thus making the performance of the benchmark as CPU-bound as possible.
DRC 368cd52d 2016-01-11T22:03:16 Allow JSIMD_FORCENONE=1 env to disable x86-64 SIMD Traditionally, the x86-64 code did not call init_simd() because it had no need to (only SSE2 was supported.) However, having the ability to disable SIMD at run time is a useful testing tool, and all of the other SIMD implementations have this ability.
DRC 2111c5ac 2016-01-06T19:24:55 Merge branch '1.4.x'
DRC 5a3b4fed 2016-01-06T19:17:54 Regression: Allow co-install of 32-bit/64-bit RPMs Fix a regression introduced in 1.4.1 that prevented 32-bit and 64-bit libjpeg-turbo RPMs from being installed simultaneously on recent Red Hat/Fedora distributions. This was due to the addition of the SIZEOF_SIZE_T macro in jconfig.h, which allows the Huffman codec to determine the word size at compile time. Since that macro differs between 32-bit and 64-bit builds, this caused a conflict between the i386 and x86_64 RPMs (any differing files, other than executables, are not allowed when 32-bit and 64-bit RPMs are installed simultaneously.) Since the macro is used only internally, it has been moved into jconfigint.h.
DRC 5f2cbbd0 2016-01-06T14:02:27 Fix iOS ARM64 build broken by removal of .arch The unnecessary .arch directive was removed from the ARM64 SIMD code in d70a5c12fcb72443483456a2cc8dd18a4c238618, thus allowing clang's integrated assembler to assemble the code on Linux systems. However, this broke the detection mechanism in acinclude.m4 that tells the build system whether it needs to use gas-preprocessor.pl. Since one of the primary motivators for using gas-preprocessor.pl with ARM64 builds is the lack of .req/.unreq directives in Apple's implementation of clang, acinclude.m4 now checks whether .req/.unreq can be properly assembled and uses gas-preprocessor.pl if not. Closes #33.
DRC fbe5007f 2015-12-19T14:29:46 Merge branch '1.4.x'
DRC 71e971fb 2015-12-19T14:18:21 Build: Use FILEPATH type for NASM CMake variable This causes cmake-gui to to display the proper file chooser dialog (as opposed to the directory chooser.) Fixes #40
DRC 6fa5ebdc 2015-12-17T10:41:51 cjpeg: Adjust claims RE: image quality settings Quality values > 95 are not useless. They just may not provide as good of a size vs. perceptual quality tradeoff as lower quality values. This also displays the default quality value in the cjpeg usage. Closes #39
DRC d70a5c12 2015-12-14T16:59:43 Remove unnecessary .arch directive in ARM64 code This directive was preventing the code from assembling using the integrated assembler in clang. Fixes #33
DRC aa769feb 2015-10-15T02:25:00 Fix compiler warnings under Visual C++ A few of these are long-standing, but most were exposed when switching from INT32 to JLONG.
DRC d65e768b 2015-10-14T22:26:25 Fix additional issues reported by UB sanitizers Most of these involved overrunning the signed 32-bit JLONG type whenever building libjpeg-turbo with a 32-bit compiler. These issues are not believed to represent actual security threats, but eliminating them makes it easier to detect such threats should they arise in the future.
DRC 1e32fe31 2015-10-14T17:32:39 Replace INT32 with a new internal datatype (JLONG) These days, INT32 is a commonly-defined datatype in system headers. We cannot eliminate the definition of that datatype from jmorecfg.h, since the INT32 typedef has technically been part of the libjpeg API since version 5 (1994.) However, using INT32 internally is risky, because the inclusion of a particular header (Xmd.h, for instance) could change the definition of INT32 from long to int on 64-bit platforms and thus change the internal behavior of libjpeg-turbo in unexpected ways (for instance, failing to correctly set __INT32_IS_ACTUALLY_LONG to match the INT32 typedef-- perhaps as a result of including the wrong version of jpeglib.h-- could cause libjpeg-turbo to produce incorrect results.) The library has always been built in environments in which INT32 is effectively long (on Windows, long is always 32-bit, so effectively it's the same as int), so it makes sense to turn INT32 into an explicitly long datatype. This ensures that libjpeg-turbo will always behave consistently, regardless of the headers included at compile time. Addresses a concern expressed in #26.
DRC 250c8877 2015-10-13T13:37:32 ChangeLog: acknowledge existence of 1.4.2
DRC e42032ba 2015-10-10T10:56:58 README.md: create link for jcstest.c
DRC 17de5183 2015-10-10T10:34:55 Markdown versions of README, LICENSE, BUILDING
DRC 7e3acc0e 2015-10-10T10:25:46 Rename README, LICENSE, BUILDING text files The IJG README file has been renamed to README.ijg, in order to avoid confusion (many people were assuming that that was our project's README file and weren't reading README-turbo.txt) and to lay the groundwork for markdown versions of the libjpeg-turbo README and build instructions.
DRC ac85335c 2015-10-09T20:03:59 Merge branch '1.4.x'
DRC bf04316e 2015-10-09T20:02:31 Comment formatting tweaks
DRC d8da49ef 2015-09-21T13:45:45 Fix 'make dist'
DRC 30ebafda 2015-09-21T13:43:36 1.4.2
DRC 60efb896 2015-09-21T13:13:44 Merge branch '1.4.x'
DRC 8e9cef2e 2015-09-21T12:57:41 Fix various issues reported by the UB sanitizers Most of these involved left shifting a negative number, which is technically undefined (although every modern compiler I'm aware of will implement this by treating the signed integer as a 2's complement unsigned integer-- the LEFT_SHIFT() macro just makes this behavior explicit in order to shut up ubsan.) This also fixes a couple of non-issues in the entropy codecs, whereby the sanitizer reported an out-of-bounds index in the 4th argument of jpeg_make_d_derived_tbl(). In those cases, the index was actually out of bounds (caused by a malformed JPEG image), but jpeg_make_d_derived_tbl() would have caught the error and aborted prior to actually using the invalid address. Here again, the fix was to make our intentions explicit so as to shut up ubsan.
DRC 870b4f28 2015-09-16T23:26:13 Fix ChangeLog numbering biffed by previous merge
DRC b961f0bf 2015-09-16T23:16:38 Merge branch '1.4.x'
James Cowgill 54792ba3 2015-09-16T23:05:46 Fix MIPS DSPr2 4:2:0 upsample bug w/ small images The DSPr2 code was errantly comparing the residual (t9, width & 0xF) with the end pointer (t4, out + width) instead of the width directly (a1). This would give the wrong results with any image whose output width was less than 16. The other small changes (ulw to lw and removal of the nop) are just some easy optimizations around this code. This issue caused a buffer overrun and subsequent segfault on images whose scaled output height was 1 pixel and whose scaled output width was < 16 pixels. Note that the "plain" (non-fancy and non-merged) upsample routine, which was affected by this bug, is normally not used except when decompressing a non-YCbCr JPEG image, but it is also used when decompressing a single-row image (because the other upsampling algorithms require at least two rows.) Closes #16.
Chandler Carruth 498d9bc9 2015-09-15T11:57:03 Fix x86-64 ABI conformance issue in SIMD code (descriptions cribbed by DRC from discussion in #20) In the x86-64 ABI, the high (unused) DWORD of a 32-bit argument's register is undefined, so it was incorrect to use a 64-bit mov instruction to transfer a JDIMENSION argument in the 64-bit SSE2 SIMD functions. The code worked thus far only because the existing compiler optimizers weren't smart enough to do anything else with the register in question, so the upper 32 bits happened to be all zeroes-- for the past 6 years, on every x86-64 compiler previously known to mankind. The bleeding-edge Clang/LLVM compiler has a smarter optimizer, and under certain circumstances, it will attempt to load-combine adjacent 32-bit integers from one of the libjpeg structures into a single 64-bit integer and pass that 64-bit integer as a 32-bit argument to one of the SIMD functions (which is allowed by the ABI, since the upper 32 bits of the 32-bit argument's register are undefined.) This caused the libjpeg-turbo regression tests to crash. Also enhance the documentation of JDIMENSION to explain that its size is significant to the implementation of the SIMD code. Closes #20. Refer also to http://crbug.com/532214.
DRC b4922b42 2015-09-08T19:02:18 Merge branch '1.4.x'
DRC 465a9fe0 2015-09-08T18:59:37 Add file that explains the libjpeg-turbo licenses Previously this information was found in a page on libjpeg-turbo.org, but there was still some confusion, because README-turbo.txt wasn't clear as to which license applied to what.
DRC 00d82c42 2015-08-29T18:15:25 Merge branch '1.4.x'
DRC b5a55e6d 2015-08-29T18:05:43 Fix negative shift with IFAST FDCT and qual=100 With certain images, compressing using quality=100 and the fast integer forward DCT will cause the divisor passed to compute_reciprocal() to be 1. In those cases, the library already disables the SIMD quantization algorithm to avoid 16-bit overflow. However, compute_reciprocal() doesn't properly handle the divisor==1 case, so we need to use special values in that case so that the C quantization algorithm will behave like an identity function.
James Cowgill f62dbccf 2015-08-15T13:30:14 Fix build error when compiling MIPS SIMD w/ -mfpxx When compiled with -mfpxx (which is now the default on Debian), there are some restrictions on the use of odd-numbered FP registers. More details about FPXX can be found here: https://dmz-portal.mips.com/wiki/MIPS_O32_ABI_-_FR0_and_FR1_Interlinking This commit simply changes all uses of FP registers to an even-numbered equivalent like this: f0 -> f0 f1 -> f2 f2 -> f4 ... f8 -> f16 This commit should have no observable effect except that the MIPS assembly will now compile with -mfpxx. Closes #11
DRC b6576319 2015-08-26T20:31:13 Merge branch '1.4.x'
DRC 58ae401e 2015-08-26T20:29:36 Eliminate cppcheck false positive in turbojpeg.c
DRC 333f3cf7 2015-08-15T17:04:58 Fix 'make dist'
DRC 73befdb1 2015-08-14T11:48:05 Merge branch '1.4.x'
Frank Bossen 6709e4a0 2014-12-29T19:42:20 Check range of integer values in PPM text file Add checks to ensure values are within the specified range. Fixes mozilla/mozjpeg#141, closes #8
Frank Bossen 82923eb9 2014-12-29T18:38:36 Check image size when reading targa file Throw an error when image width or height is 0. Fixes mozilla/mozjpeg#140, closes #7.
DRC a3ef34c6 2015-08-13T11:09:05 Fix cjpeg segfault when Windows BMP width/height<0 rdbmp.c used the ambiguous INT32 datatype, which is sometimes typedef'ed to long. Windows bitmap headers use 32-bit signed integers for the width and height, because height can sometimes be negative (this indicates a top-down bitmap.) If biWidth or biHeight was negative and INT32 was a 64-bit long, then biWidth and biHeight were read as a positive integer > INT32_MAX, which failed the test in line 385: if (biWidth <= 0 || biHeight <= 0) ERREXIT(cinfo, JERR_BMP_EMPTY); This commit refactors rdbmp.c so that it uses the datatypes specified by Microsoft for the Windows BMP header. This closes #9 and also provides a better solution for mozilla/mozjpeg#153.
DRC 6fa14b37 2015-08-13T20:06:03 Declare source buffers in TurboJPEG C API as const This reassures the caller that the buffers will not be modified and also allows read-only buffers to be passed to the functions. Partially reverts 3947a19f25fc8186d3812dbcf8e70baea36ef652.
DRC ce4ff407 2015-08-13T18:09:20 Merge branch '1.4.x'
DRC b1682fb7 2015-08-13T18:05:32 Tabs to spaces in turbojpeg.h This was a formatting regression in 1.4.x introduced when the new TurboJPEG functions were added.
DRC b2db23c4 2015-08-13T16:51:08 Merge pull request #10 from pornel/const Declare inbuffer arg in jpeg_mem_src() to be const This reassures the caller that the buffer will not be modified and also allows read-only buffers to be passed to the function.
Kornel Lesiński 7222ec27 2015-01-08T00:53:31 Declare inbuffer const
DRC 8fb37b81 2015-08-13T11:09:05 Fix cjpeg segfault when Windows BMP width/height<0 rdbmp.c used the ambiguous INT32 datatype, which is sometimes typedef'ed to long. Windows bitmap headers use 32-bit signed integers for the width and height, because height can sometimes be negative (this indicates a top-down bitmap.) If biWidth or biHeight was negative and INT32 was a 64-bit long, then biWidth and biHeight were read as a positive integer > INT32_MAX, which failed the test in line 385: if (biWidth <= 0 || biHeight <= 0) ERREXIT(cinfo, JERR_BMP_EMPTY); This commit refactors rdbmp.c so that it uses the datatypes specified by Microsoft for the Windows BMP header. This closes #9 and also provides a better solution for mozilla/mozjpeg#153.
DRC b3b3b29e 2015-08-03T23:59:27 Update x86[-64] assembler recommendations NASM 2.11.08 has a bug that prevents it from properly assembling a macho64 version of libjpeg-turbo (the resulting binary generates corrupt images.) 2.11.09 works properly. YASM also works properly and has been a supported alternative since libjpeg-turbo 1.2.
DRC 7170d9e0 2015-08-03T23:59:12 Update x86[-64] assembler recommendations NASM 2.11.08 has a bug that prevents it from properly assembling a macho64 version of libjpeg-turbo (the resulting binary generates corrupt images.) 2.11.09 works properly. YASM also works properly and has been a supported alternative since libjpeg-turbo 1.2.
DRC 57e20666 2015-08-03T23:58:40 Update x86[-64] assembler recommendations NASM 2.11.08 has a bug that prevents it from properly assembling a macho64 version of libjpeg-turbo (the resulting binary generates corrupt images.) 2.11.09 works properly. YASM also works properly and has been a supported alternative since libjpeg-turbo 1.2.
DRC 939e4660 2015-08-03T23:56:09 Update x86[-64] assembler recommendations NASM 2.11.08 has a bug that prevents it from properly assembling a macho64 version of libjpeg-turbo (the resulting binary generates corrupt images.) 2.11.09 works properly. YASM also works properly and has been a supported alternative since libjpeg-turbo 1.2.
DRC 7c726a45 2015-08-03T13:18:43 Update URL for our custom gas-preprocessor.pl
DRC a61fd321 2015-08-03T13:16:21 Update URL for our custom gas-preprocessor.pl
DRC 944aa8e3 2015-07-21T16:43:39 Fix rare bug: right shift by a negative # of bits Under very rare circumstances, decompressing specific corrupt JPEG images would create a situation whereby GET_BITS(1) was invoked from within HUFF_DECODE_FAST() when bits_left=0. This produced a right shift by a negative number of bits, which is undefined in C.
DRC 2a0b4ac3 2015-07-21T16:43:39 Fix rare bug: right shift by a negative # of bits Under very rare circumstances, decompressing specific corrupt JPEG images would create a situation whereby GET_BITS(1) was invoked from within HUFF_DECODE_FAST() when bits_left=0. This produced a right shift by a negative number of bits, which is undefined in C.
DRC cf0e58de 2015-07-21T16:43:39 Fix rare bug: right shift by a negative # of bits Under very rare circumstances, decompressing specific corrupt JPEG images would create a situation whereby GET_BITS(1) was invoked from within HUFF_DECODE_FAST() when bits_left=0. This produced a right shift by a negative number of bits, which is undefined in C.
MIYASAKA Masaru a2e6a9dd 2006-02-04T00:00:00 IJG R6b with x86SIMD V1.02 Independent JPEG Group's JPEG software release 6b with x86 SIMD extension for IJG JPEG library version 1.02
Thomas G. Lane 489583f5 1996-02-07T00:00:00 The Independent JPEG Group's JPEG software v6a
Thomas G. Lane bc79e068 1995-08-02T00:00:00 The Independent JPEG Group's JPEG software v6
Thomas G. Lane a8b67c4f 1995-03-15T00:00:00 The Independent JPEG Group's JPEG software v5b
Thomas G. Lane 9ba2f5ed 1994-12-07T00:00:00 The Independent JPEG Group's JPEG software v5a
Thomas G. Lane 36a4cccc 1994-09-24T00:00:00 The Independent JPEG Group's JPEG software v5
Thomas G. Lane cc7150e2 1993-02-18T00:00:00 The Independent JPEG Group's JPEG software v4a
Thomas G. Lane 88aeed42 1992-12-10T00:00:00 The Independent JPEG Group's JPEG software v4
Thomas G. Lane 4a6b7303 1992-03-17T00:00:00 The Independent JPEG Group's JPEG software v3
Thomas G. Lane bd543f03 1991-12-13T00:00:00 The Independent JPEG Group's JPEG software v2
Thomas G. Lane 2cbeb8ab 1991-10-07T00:00:00 The Independent JPEG Group's JPEG software v1
Ondřej Surý b6590d67 2015-07-28T09:19:13 Convert the BUILD stamp to AC_ARG_WITH argument, so we can make the build reproducible
DRC 8c4c6d29 2015-07-27T03:50:34 Convert svn:ignore properties to .gitignore
DRC 9a2a42d8 2015-07-27T03:50:34 Convert svn:ignore properties to .gitignore
DRC 22eb6c2b 2015-07-27T03:50:34 Convert svn:ignore properties to .gitignore
DRC 9993410e 2015-07-27T03:50:34 Convert svn:ignore properties to .gitignore
DRC b3b9a213 2015-07-27T03:50:34 Convert svn:ignore properties to .gitignore
DRC 9bbf2b85 2015-07-28T12:56:16 Merge pull request #4 from oerdnj/master Allow BUILD to be specified on the configure command line
Ondřej Surý 45a2369b 2015-07-28T09:19:13 Convert the BUILD stamp to AC_ARG_WITH argument, so we can make the build reproducible
Guido Vollbeding 1e247ac8 1998-03-28T00:00:00 The Independent JPEG Group's JPEG software v6b with arithmetic coding support
Guido Vollbeding 5829cb23 2012-01-15T00:00:00 The Independent JPEG Group's JPEG software v8d
Guido Vollbeding c39ec149 2011-01-16T00:00:00 The Independent JPEG Group's JPEG software v8c
Guido Vollbeding a4ecaacd 2010-05-16T00:00:00 The Independent JPEG Group's JPEG software v8b
Guido Vollbeding f18f81b7 2010-02-28T00:00:00 The Independent JPEG Group's JPEG software v8a
Guido Vollbeding 989630f7 2010-01-10T00:00:00 The Independent JPEG Group's JPEG software v8
Guido Vollbeding 5996a25e 2009-06-27T00:00:00 The Independent JPEG Group's JPEG software v7
Thomas G. Lane 5ead57a3 1998-03-27T00:00:00 The Independent JPEG Group's JPEG software v6b
DRC 99f02896 2015-07-27T03:50:34 Convert svn:ignore properties to .gitignore
DRC 03e755bb 2015-07-21T17:36:18 Further improvements to partial image decoding When using context-based upsampling, use a dummy color conversion routine instead of a dummy row buffer. This improves performance (since the actual color conversion routine no longer has to be called), and it also fixes valgrind errors when decompressing to RGB565. Valgrind previously complained, because using the RGB565 color converter with the dummy row buffer was causing a table lookup with undefined indices.
DRC 74b9f609 2015-07-21T16:43:39 Fix rare bug: right shift by a negative # of bits Under very rare circumstances, decompressing specific corrupt JPEG images would create a situation whereby GET_BITS(1) was invoked from within HUFF_DECODE_FAST() when bits_left=0. This produced a right shift by a negative number of bits, which is undefined in C.
DRC 739edeb8 2015-07-21T09:34:02 Further exception cleanup Use a new checked exception type (TJException) when passing through errors from the underlying C library. This gives the application a choice of catching all exceptions or just those from TurboJPEG. Throw IllegalArgumentException at the JNI level when arguments to the JNI function are incorrect, and when one of the TurboJPEG "utility" functions returns an error (because, per the C API specification, those functions will only return an error if one of their arguments is out of range.) Remove "throws Exception" from the signature of any methods that no longer pass through an error from the TurboJPEG C library. Credit Viktor for the new code Code formatting tweaks
DRC a3deac15 2015-07-14T20:51:53 Fix build whenever IDCT_SCALING_SUPPORTED is undefined git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/branches/1.4.x@1597 632fc199-4ca6-4c93-a231-07263d6284db
DRC 10dc5cfe 2015-07-14T20:51:20 Fix build whenever IDCT_SCALING_SUPPORTED is undefined git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1596 632fc199-4ca6-4c93-a231-07263d6284db
DRC b3817dab 2015-07-14T20:42:52 Throw idiomatic unchecked exceptions from the Java classes and JNI wrapper if there is an unrecoverable error caused by incorrect API usage (such as illegal arguments, etc.), and throw Errors if there is an unrecoverable error at the C level (such as a failed malloc() call.) Change the behavior of the bailif0() macro in the JNI wrapper so that it doesn't throw an exception for an unexpected NULL condition. In fact, in all cases, the underlying JNI API function (such as GetFieldID(), etc.) will throw an Error on its own whenever it returns NULL, so our custom exceptions were never being thrown in that case anyhow. All we need to do is just detect the error and bail out of the C code. This also corrects a couple of formatting issues (semicolons aren't needed at the end of class definitions, and @Override should be specified for the methods we're overriding from super-classes, so the compiler can sanity-check that we're actually overriding a method and not declaring a new one.) git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1595 632fc199-4ca6-4c93-a231-07263d6284db
DRC 1a4778f8 2015-07-07T16:39:03 Allow TJCompressor and TJDecompressor to be used with a try-with-resources statement in Java 7 and later. git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1594 632fc199-4ca6-4c93-a231-07263d6284db
DRC c23e36e8 2015-07-06T16:04:04 Add additional protections against defining INT32 if another header has already defined it (code borrowed from libjpeg v8.) This isn't necessary when using the libjpeg-turbo build system on Windows, because the CMake generated jconfig.h defines INT32 and then defines XMD_H to trick jmorecfg.h into not redefining it. However, some projects build libjpeg-turbo using their own build systems. git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/branches/1.4.x@1593 632fc199-4ca6-4c93-a231-07263d6284db
DRC 65c5ec2f 2015-07-06T16:02:57 Add additional protections against defining INT32 if another header has already defined it (code borrowed from libjpeg v8.) This isn't necessary when using the libjpeg-turbo build system on Windows, because the CMake generated jconfig.h defines INT32 and then defines XMD_H to trick jmorecfg.h into not redefining it. However, some projects build libjpeg-turbo using their own build systems. git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1592 632fc199-4ca6-4c93-a231-07263d6284db
DRC 9cc59722 2015-07-01T16:56:44 Fix a memory leak in jpeg_skip_scanlines() git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1591 632fc199-4ca6-4c93-a231-07263d6284db
DRC 6ed4d9d1 2015-06-27T08:10:34 Increment SO_AGE to reflect the addition of a new interface to the libjpeg API git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1590 632fc199-4ca6-4c93-a231-07263d6284db
DRC 306e1d2d 2015-06-27T08:10:33 Add jpeg_skip_scanlines() to the Windows DLL export list. git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1589 632fc199-4ca6-4c93-a231-07263d6284db
DRC 162c9985 2015-06-27T08:10:32 Fix compiler warnings in jpeg_skip_scanlines() when building under Visual Studio. git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1588 632fc199-4ca6-4c93-a231-07263d6284db