Skip to content

Update fork to upstream libjpeg-turbo 3.2.0#1

Open
sedghi wants to merge 663 commits into
mainfrom
update/upstream-3.2.0
Open

Update fork to upstream libjpeg-turbo 3.2.0#1
sedghi wants to merge 663 commits into
mainfrom
update/upstream-3.2.0

Conversation

@sedghi

@sedghi sedghi commented Jul 9, 2026

Copy link
Copy Markdown
Member

Advances the cornerstonejs libjpeg-turbo fork from dc4a93f (2.1.4-era, Dec 2022) to upstream 3.2.0 (latest stable, 2026-06-30).

No custom patches to carry — the fork's pin is a plain upstream commit with zero divergence (merge-base with upstream == HEAD) and a direct ancestor of 3.2.0. Clean version advance.

Note: this is a major version jump (2.x -> 3.x), so the codecs-side glue (JPEGDecoder/JPEGEncoder.hpp for both the 8-bit and 12-bit packages) may need adaptation for API changes — validated on the codecs submodule-bump PR. Not built locally.

(NOTE: I can do this only because I solely authored and modified those
files.)

This is mainly to avoid confusion, since jcstest and strtest are meant
only for the libjpeg API library, and LICENSE.md says that the IJG
License applies to "the libjpeg API library and associated programs."
Previous branches of libjpeg-turbo will continue to provide those files
under the 3-clause BSD license.
Following up on ced602a,

- Rename simd/jsimd.h to simd/jsimdint.h to avoid confusion and to be
  somewhat consistent with the header naming conventions of the libjpeg
  API library.

- Eliminate unnecessary #include directives in the SIMD modules.

- Move src/jsimd.h and src/jsimddct.h to simd/.  This makes the code
  easier to understand, since jsimd.h and jsimddct.h define the external
  interfaces for libsimd.  This also ensures that all SIMD-related code
  and zlib-licensed code lives in the same directory.

- In jsimd.h and jsimddct.h, remove references to libjpeg/SIMD
  and jsimdext.inc and replace them with the complete zlib License
  header.  jsimdext.inc only exists in the x86 SIMD extensions, and
  jsimd.h and jsimddct.h never contained any code derived from
  libjpeg/SIMD.

- Guard all inclusions of jsimd.h and jsimddct.h in the libjpeg API
  library source code with #ifdef WITH_SIMD.  This eliminates the need
  for those headers to have knowledge of the macros defined in
  jconfig*.h.

- Fix the generation of jsimdcfg.inc (broken by
  ced602a.)
Due to an oversight when the progressive Huffman encoding SIMD modules
were developed, JSIMD_NOHUFFENC was not extended to those modules.
(+ document the feature)
The libjpeg in-memory destination manager has always re-allocated the
JPEG destination buffer if the specified buffer pointer is NULL or the
specified buffer size is 0.  TurboJPEG's destination manager inherited
that behavior.  Because of fe80ec2,
TurboJPEG's destination manager tries to reuse the most recent
destination buffer if the same buffer pointer is specified.  (The
purpose of that is to enable repeated invocations of tj*Compress*() or
tj*Transform() to automatically grow the destination buffer, as needed,
with no intervention from the calling program.)  However, because of the
inherited code, TurboJPEG's destination manager also reallocated the
destination buffer if the specified buffer size was 0.  Thus, passing a
previously-used JPEG destination buffer pointer to tj*Compress*() or
tj*Transform() while specifying a destination buffer size of 0 confused
the destination manager.  It reallocated the destination buffer to 4096
bytes but reported the old destination buffer size to the libjpeg API.
This caused a buffer overrun if the old destination buffer size was
larger than 4096 bytes.

The documentation for tj*Compress*() is contradictory on this matter.
It states that the JPEG destination buffer size must be specified if the
destination buffer pointer is non-NULL.  However, it also states that,
if the destination buffer is reused, the specified destination buffer
size is ignored.  The documentation for tj*Transform() does not specify
the function's behavior if the destination buffer is reused.  Thus, the
behavior of the API is at best undefined if a calling application
attempts to reuse a destination buffer while specifying a destination
buffer size of 0.  If that ever worked, it only worked in libjpeg-turbo
1.3.x and prior.

This issue was exposed only through API abuse, and calling applications
that abused the API in that manner would not have worked for the last 11
years.  Thus, the issue did not represent a security threat.  This
commit merely hardens the API against such abuse, by modifying
TurboJPEG's destination manager so that it refuses to re-allocate the
JPEG destination buffer if the buffer pointer is reused and the
specified buffer size is 0.  That is consistent with the most permissive
interpretation of the TurboJPEG API documentation.  (The API already
ignored the destination buffer size if the destination buffer pointer
was reused and the specified buffer size was non-zero.  It makes sense
for it to do likewise if the specified buffer size is 0.)  This commit
also modifies TJUnitTest so that it verifies whether the API is hardened
against the aforementioned abuse.
- If TJPARAM_LOSSLESS was set, then tj3EncodeYUV*8() called
  jpeg_enable_lossless() (via setCompDefaults()), which caused the
  underlying libjpeg API to silently disable subsampling and color
  conversion.  This led to three issues:

  1. Attempting to encode RGB pixels produced incorrect YCbCr or
     grayscale components, since color conversion did not occur.  The
     same issue occurred if TJPARAM_COLORSPACE was explicitly set to
     TJCS_RGB.
  2. Attempting to encode RGB pixels into a grayscale plane caused
     tj3EncodeYUVPlanes8() to overflow the caller's destination pointer
     array if the array was not big enough to accommodate three
     pointers.  If called from tj3EncodeYUV8(), tj3EncodeYUVPlanes8()
     did not overflow the caller's destination pointer array, but a
     segfault occurred when it attempted to copy to the Cb and Cr
     pointers, which were NULL.  The same issue occurred if
     TJPARAM_COLORSPACE was explicitly set to anything other than
     TJCS_GRAY.
  3. Attempting to encode RGB pixels into subsampled YUV planes caused
     tj3EncodeYUV*8() to overflow the caller's buffer(s) if the
     buffer(s) were not big enough to accommodate 4:4:4 (non-subsampled)
     YUV planes.  That would have been the case if the caller allocated
     its buffer(s) based on the return value of tj3YUVBufSize() or
     tj3YUVPlaneSize().  The same issue occurs if TJPARAM_SUBSAMP is
     explicitly set to TJSAMP_444.

  tj3EncodeYUV*8() now ignores TJPARAM_LOSSLESS and TJPARAM_COLORSPACE.

- If TJPARAM_LOSSLESS was set, then attempting to compress a grayscale
  plane into a JPEG image caused tj3CompressFromYUVPlanes8() to overflow
  the caller's source pointer array if the array was not big enough to
  accommodate three pointers.  If called from tj3CompressFromYUV8(),
  tj3CompressFromYUVPlanes8() did not overflow the caller's source
  pointer array, but a segfault occurred when it attempted to copy from
  the Cb and Cr pointers, which were NULL.  This was similar to Issue 2
  above.  The same issue occurred if TJPARAM_COLORSPACE was explicitly
  set to anything other than TJCS_GRAY.

  tj3CompressFromYUV*8() now throws an error if TJPARAM_LOSSLESS is set,
  and it now ignores TJPARAM_COLORSPACE.

These issues did not pose a security risk, since security exploits
involve supported workflows that function normally except when supplied
with malformed input data.  It is documented that colorspace conversion,
chrominance subsampling, and compression from planar YUV images are
unavailable when TJPARAM_LOSSLESS is set.  When TJPARAM_LOSSLESS is set,
the library effectively sets TJPARAM_SUBSAMP to TJSAMP_444 and
TJPARAM_COLORSPACE to TJCS_RGB, TJCS_GRAY, or TJCS_CMYK, depending on
the pixel format of the source image.  That behavior is strongly implied
by the documentation of TJPARAM_LOSSLESS, although the documentation
isn't specific about whether TJPARAM_LOSSLESS applies to
tj3EncodeYUV*8().  In any case, setting TJPARAM_LOSSLESS before calling
tj3CompressFromYUV*8() was never a supported or functional workflow, and
setting TJPARAM_LOSSLESS before calling tj3EncodeYUV*8() was never a
functional workflow.  Thus, there should be no applications "in the
wild" that use either workflow.  Such applications would crash every
time they attempted to encode to or compress from a YUV image.  In other
words, setting TJPARAM_LOSSLESS or TJPARAM_COLORSPACE required the
caller to understand the ramifications of the loss of color conversion
and/or subsampling, and failing to do so was essentially API abuse
(albeit subtle API abuse, hence the desire to make the behavior more
intuitive.)

This commit also removes no-op code introduced by
6da0515.  Since setCompDefaults()
returns after calling jpeg_enable_lossless(), modifying the subsampling
level locally had no effect.  The libjpeg API already silently disables
subsampling in jinit_c_master_control() if lossless compression is
enabled, so it was not necessary for setCompDefaults() to handle that.

Fixes libjpeg-turbo#839
- Clarify that YUV encoding performs downsampling as well as color
  conversion.

- Clarify that TJPARAM_LOSSLESS is ignored by tj3CompressFromYUV*8().

- Clarify that tj3CompressFromYUV*8() generates only YCbCr or grayscale
  JPEG images, i.e. that TJPARAM_COLORSPACE has no effect.
This is not a security vulnerability, since applications that pass such
values to the Java API would fail regardless, and such a bug would never
make it into the wild.  By contrast, a security vulnerability arises
from applications that work correctly with most input data sets but
trigger a library failure, such as a buffer overrun, with one or more
specific input data sets.  As with most imaging APIs, the libjpeg-turbo
APIs rely upon the calling application to pass appropriately-sized
buffers and appropriate size/dimension arguments.  The failure to do so
is no more the fault of libjpeg-turbo than calling
'buf = malloc(1); buf[2] = 0;' is the fault of the C library.

Buffer size checking is a bonus feature of the Java API that isn't (and
can't be) provided by the C API, so this commit merely hardens the bonus
feature against API abuse, in keeping with the Java paradigm of throwing
an exception rather than crashing due to a caller-imposed buffer
overrun.
Use stronger language in hopes that people will actually read it before
spamming the security advisory system.  If not, then I may be forced to
disable private vulnerability reporting entirely.
If loading a 2-to-8-bit image, unset srcBuf12 and srcBuf16.  If loading
a 9-to-12-bit image, unset srcBuf8 and srcBuf16.  If loading a
13-to-16-bit image, unset srcBuf8 and srcBuf12.  Otherwise,
TJCompressor.getSourceBuf() will return srcBuf8 or srcBuf12, in order,
if any previous invocation of TJCompressor.loadSourceImage() set them,
irrespective of the buffer that was set by the most recent invocation.

This probably helps with garbage collection as well, since it signals to
the GC that the unused buffers are really unused.
If the data precision of the PBMPLUS file does not match the target data
precision, then the grayscale or RGB samples are rescaled to the target
data precision.  Thus, we need to pass (1 << cinfo->data_precision) - 1
to rgb_to_cmyk() instead of maxval.  This commit also modifies
TJUnitTest so that it validates the correctness of upconversion and
downconversion in the PPM reader.

Fixes libjpeg-turbo#841
This fully reverts c96e93b.

Specifying a full path with install(TARGETS ...) causes the paths in the
CMake package config files to be hard-coded, which effectively makes the
package non-relocatable.  Specifying a full path with other install()
commands breaks the --prefix option to cmake --install.  There is in
fact no sane way to support blank install directories.  Integrators who
wish to install certain files into the main libjpeg-turbo install
directory can set a particular CMAKE_INSTALL_*DIR variable to
"<CMAKE_INSTALL_PREFIX>", with the understanding that doing so will
break relocatability in the same way that
c96e93b did.

This commit also tweaks the RPM spec so that RPMs built from a source
RPM will contain relocatable CMake package config files.
With the advent of AI code analysis tools, I keep getting false positive
reports (three in the past two weeks) about potential integer
overflow/wraparound in the buffer size doubling code in
empty_mem_output_buffer().  Overflow could never actually occur there,
because:

- On 64-bit systems, the maximum theoretical JPEG size is
  65500 * 65500 * cinfo->num_components * sizeof(DCTELEM) bytes, which
  is of course much less than 8 exabytes (SIZE_MAX / 2).
- On 32-bit systems, malloc() will never return a buffer >= 2 GB, so the
  malloc() call will fail before 32-bit integer overflow can occur.

However, because I'm sick of fielding multiple duplicate reports about
this, here's a "fix" for the non-existent problem.
(to prepare for new commits)
This extends 3e8911a to fix similar
issues that occur when attempting to use an Arm64 build of CMake to
generate Visual Studio project files targetting x64 or x86 ("win32" in
CMake parlance) or attempting to use an x86[-64] build of CMake to
generate Visual Studio project files targetting 32-bit Arm.

In a nutshell, CMAKE_SYSTEM_PROCESSOR is set based on the architecture
of the CMake executable, so CMAKE_GENERATOR_PLATFORM should take
precedence over that when generating Visual Studio project files.

Fixes libjpeg-turbo#880
Because of a66398f (libjpeg-turbo
3.1 beta1), md5cmp is now under ${CMAKE_BINARY_DIR}/test rather than
${CMAKE_BINARY_DIR}/md5.  Apparently the indexedcolortest script only
worked because I had leftover cruft from a 3.0.x build in my build
directory.
Range-check all samples before using them as indices for the rescale[]
array.  This guards against a potential buffer overrun if the caller
attempts to write out-of-range samples to the PNG image.

Referring to the definition of a security vulnerability in SECURITY.md,
this bug was in an official, supported release (although it affects only
3.2 beta1, and we do not claim that beta-quality code is
production-ready.)  However, the caller was not well-behaved, i.e. a
caller that abused the API in this manner could never work properly.
(The best it could hope for is a bogus output image or an error.)
Furthermore, the only exposure to the issue in a public API function was
in tj3SaveImage*(), which (unlike tj3LoadImage*()) is not exposed to
arbitrary external input data.  In other words, because tj3SaveImage*()
does not interact with images loaded from files or the network, a caller
could only trigger the issue by abusing the API.
In master_selection(), which is called in the body of
jpeg_start_decompress(), ensure that the calling application has not
erroneously changed the value of cinfo->data_precision from its initial
value set in jpeg_read_header(), unless the application is decompressing
an 8-bit-per-sample lossy JPEG image to a 12-bit-per-sample output
image.  This hardens the libjpeg API against applications that may, when
decompressing a lossless JPEG image, erroneously set the output data
precision to a different value than the JPEG data precision after
calling jpeg_read_header() and before calling jpeg_start_decompress().

Only the lossy code paths deal with differing JPEG and output data
precisions.  Thus, in the context of djpeg, forcing 12-bit output
(enabled by 4d0df37) while attempting
to decompress a lossless JPEG image with more than 12 bits of data
precision per sample could have exposed the buffer overrun in the PNG
writer that was fixed by the previous commit.  In other cases, a bogus
output image was generated.

As with the PNG writer issue, this represented an opportunity for API
hardening rather than a security vulnerability.  Setting the output data
precision to a different value than the JPEG data precision only
produces defined behavior when decompressing an 8-bit-per-sample lossy
JPEG image.  An application that sets the output data precision in any
other case is abusing the API, and the best it could hope for is a bogus
output image or an error.  Regardless, this issue was ancillary to the
PNG writer issue, and once that issue was fixed, the worst case for this
issue was a bogus output image.

Note that the TurboJPEG API does not allow forcing 12-bit-per-sample
output when decompressing lossless JPEG images.  This further supports
the assertion that the PNG writer bug fixed by the previous commit was
not exploitable, since a calling application could not have triggered it
by naively passing the output of a TurboJPEG decompression function into
tj3SaveImage*().
(broken by previous commit)

cinfo->master->jpeg_data_precision will only be set if
jpeg_read_header() reads the SOF marker.  That may not happen if the
caller uses a custom marker processor, as the tj*DecodeYUV*() functions
do.
We don't actually support gamma correction when loading PNG files, so
the in-tree implementation of libspng will never call pow().

+ Add comments to indicate where and why we have disabled code.
jpeg_crop_scanline() doesn't actually work with raw data output.  If
buffered-image mode is disabled and raw data output is enabled, the
function throws JERR_BAD_STATE because the global state is DSTATE_RAW_OK
rather than DSTATE_SCANNING.  However, due to an oversight in
8162edd (libjpeg-turbo 2.1.4), enabling
both buffered-image mode and raw data output allowed the caller to sneak
through the gates.  Thus, executing the following sequence with the same
libjpeg API instance caused a use-after-free issue:

- jpeg_start_decompress(&cinfo)
  * calls j*init_upsampler() to allocate the upsampler (cinfo.upsample)
- jpeg_abort_decompress(&cinfo)
  * frees the upsampler
- cinfo.raw_data_out = TRUE
- cinfo.buffered_image = TRUE
- jpeg_start_decompress(&cinfo)
  * does not call j*init_upsampler(), because cinfo.raw_data_out == TRUE
- jpeg_crop_scanline(&cinfo, &xoffset, &width)
  where xoffset and width would cause any of the component planes to be
  cropped to a width of 1 sample
  * fails to catch that raw data output is enabled, because the global
    state is DSTATE_BUFIMAGE rather than DSTATE_RAW_OK
  * fails to catch that the previous decompression operation was
    aborted, because cinfo->output_scanline is 0 (since
    jpeg*_read_scanlines() was never called)
  * calls j*init_upsampler() with
    cinfo->master->jinit_upsampler_no_alloc == TRUE, which tells
    j*init_upsampler() to reuse the upsampler
  * j*init_upsampler() tries to reuse the upsampler that has already
    been freed.

Any application that did this could never work properly.  (The best it
could hope for is a bogus output image or an error.)  Thus, this
represented an opportunity for API hardening rather than a security
vulnerability.

This commit also modifies the jpeg_crop_scanline() documentation to
clarify that the function doesn't work with raw data output.
(Previously, the documentation was subtle on that point.  It says that
jpeg_crop_scanline() must be called between jpeg_start_decompress() and
jpeg*_read_scanlines(), which implies that it can't be called between
jpeg_start_decompress() and jpeg*_read_raw_data().)
The TurboJPEG API was originally a project-private wrapper for VirtualGL
and TurboVNC that abstracted various high-speed JPEG libraries on
various platforms.  The earliest prototype version in VirtualGL 0.9.x
(so early that it wasn't called "TurboJPEG" yet) didn't allow the pitch
to be specified.  (Instead, a flag specified whether each row should be
padded to the nearest multiple of 4 bytes.)  The TurboJPEG 1.0 API,
which was first implemented in VirtualGL and TurboVNC 1.0.x, introduced
the pitch parameter, documented that it must be > 0, and returned an
error if it was < 0.  TurboJPEG 1.0 also set the pitch to the default
value (width * pixel size) if it was 0, but that behavior was
undocumented until TurboJPEG 1.1.

I vaguely recall that I had originally intended to allow calling
applications to set the pitch to a smaller value than the default.  I
can't remember why, but perhaps it was to enable a perverse form of
cropping years before the partial image decompression feature existed.
Setting the pitch to a smaller value than the default works, but you
have to allocate the buffer to
(pitch * (height - 1) + width * pixel size) samples.  Thus, if we wanted
to support that use case, then the documentation would have to be
modified accordingly.  I am inclined not to support it, because:

- the use case would rarely if ever be tested,
- the documentation implies that it isn't supported, and
- partial image decompression is a much more reasonable way to trim the
  image width.

Thus, this commit hardens the TurboJPEG API to disallow pitch values
greater than 0 but less than the default value.

Fixes libjpeg-turbo#882
(introduced by previous commit)
The flatten and reflect cropping extensions fill the expanded region
with, respectively, the DC coefficient(s) of the nearest block(s) in the
input image and repeated reflections of the input image.  If the input
image is narrower than 1 iMCU and partial iMCUs are trimmed, then none
of the input image blocks will exist in the output image (i.e. there
will be nothing to flatten or reflect.)  In that case, comp_width will
be 0 in do_crop_ext_flat() and do_crop_ext_reflect(), so we need to
throw an error to avoid (respectively) a buffer overrun and an infinite
loop.

Fixes libjpeg-turbo#883
The intermediate PAD(width, mcuw) * PAD(height, mcuh) computation was
performed using signed integer arithmetic and could thus overflow if
PAD(width, mcuw) * PAD(height, mcuh) > INT_MAX.  This was innocuous,
however, because the API requires that the allocated buffer size be
reported to tj3Compress*() or tj3Transform().  The calling program would
presumably pass the (incorrect) return value from tj3JPEGBufSize() to
tj3Alloc() and report the same size to tj3Compress*() or tj3Transform().
Depending on the value of TJPARAM_NOREALLOC,
tj3Compress*()/tj3Transform() would either reallocate the buffer as
needed or fail if the reported buffer size was exceeded.  As long as the
reported buffer size was the same as the allocated buffer size, no
buffer overrun could occur.  Thus, the only issue was a usability issue:
passing large dimensions to tj3JPEGBufSize(), then passing the return
value of tj3JPEGBufSize() to tj3Alloc() and
tj3Compress*()/tj3Transform(), could have caused an error ("Buffer
passed to JPEG library is too small") if TJPARAM_NOREALLOC was set.
- "Linux" = "Un*x" (we see you, *BSD)

- Grammar tweaks

- Clarify our project's AI and pull request policies.
This is a similar fix to abf0f59,
except applied to the bytes per row (stride) of each plane in a planar
YUV image rather than the bytes per row (pitch) of a packed-pixel image.
Specifying a stride less than the plane width has never been a useful or
supported use case.

Fixes libjpeg-turbo#894
This is the same fix from 94d5ff4
applied to the legacy TJBUFSIZE() function in the TurboJPEG 1.0 API.
The PAD(pw, align) computation was performed using signed integer
arithmetic and could thus overflow if pw + align > INT_MAX.  This was
innocuous, however, because:

- The intermediate value always overflowed to a negative integer.
- When the PAD() macro's bitwise AND operator was applied, the negative
  integer changed to the correct positive integer.

In other words, because PAD() is ultimately a bitwise operation rather
than a mathematical operation, this was purely a UBSan warning rather
than an actual issue.

Fixes libjpeg-turbo#896
The PAD(pw0, align) and PAD(pw1, align) computations were performed
using signed integer arithmetic and could thus overflow if pw0 + align >
INT_MAX or pw1 + align > INT_MAX.  This was innocuous, however, because:

- The intermediate values always overflowed to negative integers.
- When the PAD() macro's bitwise AND operator was applied, the negative
  integers changed to the correct positive integers.
- Values large enough to trigger an overflow would have subsequently
  caused a TurboJPEG API error ("Image or row alignment is too large")
  or a libjpeg API error ("Maximum supported image dimension is 65500
  pixels") to be thrown.

In other words, because PAD() is ultimately a bitwise operation rather
than a mathematical operation, these were purely UBSan warnings rather
than actual issues.
As of June 2026, the windows-2025 runner image uses Visual Studio 2026.
@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 698 files, which is 548 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 41f2789d-a65c-447c-822d-5ac235eaa91f

📥 Commits

Reviewing files that changed from the base of the PR and between dc4a93f and c85e6b9.

⛔ Files ignored due to path filters (58)
  • doc/change.log is excluded by !**/*.log
  • doc/html/bdwn.png is excluded by !**/*.png
  • doc/html/doc.png is excluded by !**/*.png
  • doc/html/folderclosed.png is excluded by !**/*.png
  • doc/html/folderopen.png is excluded by !**/*.png
  • doc/html/search/mag_sel.svg is excluded by !**/*.svg
  • doc/html/search/search_l.png is excluded by !**/*.png
  • doc/html/search/search_m.png is excluded by !**/*.png
  • doc/html/search/search_r.png is excluded by !**/*.png
  • doc/turbojpeg/bc_s.png is excluded by !**/*.png
  • doc/turbojpeg/bc_sd.png is excluded by !**/*.png
  • doc/turbojpeg/closed.png is excluded by !**/*.png
  • doc/turbojpeg/doc.svg is excluded by !**/*.svg
  • doc/turbojpeg/docd.svg is excluded by !**/*.svg
  • doc/turbojpeg/doxygen.svg is excluded by !**/*.svg
  • doc/turbojpeg/folderclosed.svg is excluded by !**/*.svg
  • doc/turbojpeg/folderclosedd.svg is excluded by !**/*.svg
  • doc/turbojpeg/folderopen.svg is excluded by !**/*.svg
  • doc/turbojpeg/folderopend.svg is excluded by !**/*.svg
  • doc/turbojpeg/minus.svg is excluded by !**/*.svg
  • doc/turbojpeg/minusd.svg is excluded by !**/*.svg
  • doc/turbojpeg/nav_f.png is excluded by !**/*.png
  • doc/turbojpeg/nav_fd.png is excluded by !**/*.png
  • doc/turbojpeg/nav_g.png is excluded by !**/*.png
  • doc/turbojpeg/nav_h.png is excluded by !**/*.png
  • doc/turbojpeg/nav_hd.png is excluded by !**/*.png
  • doc/turbojpeg/open.png is excluded by !**/*.png
  • doc/turbojpeg/plus.svg is excluded by !**/*.svg
  • doc/turbojpeg/plusd.svg is excluded by !**/*.svg
  • doc/turbojpeg/search/close.svg is excluded by !**/*.svg
  • doc/turbojpeg/search/mag.svg is excluded by !**/*.svg
  • doc/turbojpeg/search/mag_d.svg is excluded by !**/*.svg
  • doc/turbojpeg/search/mag_sel.svg is excluded by !**/*.svg
  • doc/turbojpeg/search/mag_seld.svg is excluded by !**/*.svg
  • doc/turbojpeg/splitbar.png is excluded by !**/*.png
  • doc/turbojpeg/splitbard.png is excluded by !**/*.png
  • doc/turbojpeg/sync_off.png is excluded by !**/*.png
  • doc/turbojpeg/sync_on.png is excluded by !**/*.png
  • doc/turbojpeg/tab_a.png is excluded by !**/*.png
  • doc/turbojpeg/tab_ad.png is excluded by !**/*.png
  • doc/turbojpeg/tab_b.png is excluded by !**/*.png
  • doc/turbojpeg/tab_bd.png is excluded by !**/*.png
  • doc/turbojpeg/tab_h.png is excluded by !**/*.png
  • doc/turbojpeg/tab_hd.png is excluded by !**/*.png
  • doc/turbojpeg/tab_s.png is excluded by !**/*.png
  • doc/turbojpeg/tab_sd.png is excluded by !**/*.png
  • java/doc/resources/background.gif is excluded by !**/*.gif
  • java/doc/resources/tab.gif is excluded by !**/*.gif
  • java/doc/resources/titlebar.gif is excluded by !**/*.gif
  • java/doc/resources/titlebar_end.gif is excluded by !**/*.gif
  • testimages/monkey12.jpg is excluded by !**/*.jpg
  • testimages/monkey16.png is excluded by !**/*.png
  • testimages/nightshot_iso_100.bmp is excluded by !**/*.bmp
  • testimages/shira_bird8.bmp is excluded by !**/*.bmp
  • testimages/testorig.png is excluded by !**/*.png
  • testimages/testorig12.jpg is excluded by !**/*.jpg
  • testimages/vgl_5674_0098.bmp is excluded by !**/*.bmp
  • testimages/vgl_5674_0098.png is excluded by !**/*.png
📒 Files selected for processing (698)
  • .gitattributes
  • .github/CONTRIBUTING.md
  • .github/SECURITY.md
  • .github/pull_request_template.md
  • .github/workflows/build.yml
  • BUILDING.md
  • CMakeLists.txt
  • ChangeLog.md
  • LICENSE.md
  • README.ijg
  • README.md
  • appveyor.yml
  • cmakescripts/BuildPackages.cmake
  • cmakescripts/GNUInstallDirs.cmake
  • cmakescripts/GenerateWrappers.cmake
  • cmakescripts/PackageInfo.cmake
  • cmakescripts/testclean.cmake
  • cmakescripts/tjbenchtest.cmake
  • cmakescripts/tjexampletest.cmake
  • cmyk.h
  • doc/cjpeg.1
  • doc/coderules.txt
  • doc/djpeg.1
  • doc/doxygen-extra.css
  • doc/doxygen.config
  • doc/html/doxygen-extra.css
  • doc/html/doxygen.css
  • doc/html/functions.html
  • doc/html/functions_vars.html
  • doc/html/group___turbo_j_p_e_g.html
  • doc/html/jquery.js
  • doc/html/menu.js
  • doc/html/search/all_0.html
  • doc/html/search/all_1.html
  • doc/html/search/all_1.js
  • doc/html/search/all_2.html
  • doc/html/search/all_2.js
  • doc/html/search/all_3.html
  • doc/html/search/all_4.html
  • doc/html/search/all_4.js
  • doc/html/search/all_5.html
  • doc/html/search/all_5.js
  • doc/html/search/all_6.html
  • doc/html/search/all_6.js
  • doc/html/search/all_7.html
  • doc/html/search/all_7.js
  • doc/html/search/all_8.html
  • doc/html/search/all_8.js
  • doc/html/search/all_9.html
  • doc/html/search/all_9.js
  • doc/html/search/classes_0.html
  • doc/html/search/classes_0.js
  • doc/html/search/enums_0.html
  • doc/html/search/enums_0.js
  • doc/html/search/enumvalues_0.html
  • doc/html/search/enumvalues_0.js
  • doc/html/search/functions_0.html
  • doc/html/search/functions_0.js
  • doc/html/search/groups_0.html
  • doc/html/search/groups_0.js
  • doc/html/search/nomatches.html
  • doc/html/search/typedefs_0.html
  • doc/html/search/typedefs_0.js
  • doc/html/search/variables_0.html
  • doc/html/search/variables_0.js
  • doc/html/search/variables_1.html
  • doc/html/search/variables_1.js
  • doc/html/search/variables_2.html
  • doc/html/search/variables_2.js
  • doc/html/search/variables_3.html
  • doc/html/search/variables_3.js
  • doc/html/search/variables_4.html
  • doc/html/search/variables_4.js
  • doc/html/search/variables_5.html
  • doc/html/search/variables_5.js
  • doc/html/search/variables_6.html
  • doc/html/search/variables_6.js
  • doc/html/search/variables_7.html
  • doc/html/search/variables_7.js
  • doc/html/search/variables_8.html
  • doc/html/search/variables_8.js
  • doc/html/search/variables_9.html
  • doc/html/search/variables_9.js
  • doc/html/tabs.css
  • doc/jpegtran.1
  • doc/libjpeg.txt
  • doc/rdjpgcom.1
  • doc/structure.txt
  • doc/turbojpeg/annotated.html
  • doc/turbojpeg/classes.html
  • doc/turbojpeg/doxygen-extra.css
  • doc/turbojpeg/doxygen.css
  • doc/turbojpeg/dynsections.js
  • doc/turbojpeg/functions.html
  • doc/turbojpeg/functions_vars.html
  • doc/turbojpeg/group___turbo_j_p_e_g.html
  • doc/turbojpeg/index.html
  • doc/turbojpeg/jquery.js
  • doc/turbojpeg/menu.js
  • doc/turbojpeg/menudata.js
  • doc/turbojpeg/search/all_0.js
  • doc/turbojpeg/search/all_1.js
  • doc/turbojpeg/search/all_2.js
  • doc/turbojpeg/search/all_3.js
  • doc/turbojpeg/search/all_4.js
  • doc/turbojpeg/search/all_5.js
  • doc/turbojpeg/search/all_6.js
  • doc/turbojpeg/search/all_7.js
  • doc/turbojpeg/search/all_8.js
  • doc/turbojpeg/search/all_9.js
  • doc/turbojpeg/search/all_a.js
  • doc/turbojpeg/search/all_b.js
  • doc/turbojpeg/search/classes_0.js
  • doc/turbojpeg/search/enums_0.js
  • doc/turbojpeg/search/enumvalues_0.js
  • doc/turbojpeg/search/functions_0.js
  • doc/turbojpeg/search/groups_0.js
  • doc/turbojpeg/search/search.css
  • doc/turbojpeg/search/search.js
  • doc/turbojpeg/search/searchdata.js
  • doc/turbojpeg/search/typedefs_0.js
  • doc/turbojpeg/search/variables_0.js
  • doc/turbojpeg/search/variables_1.js
  • doc/turbojpeg/search/variables_2.js
  • doc/turbojpeg/search/variables_3.js
  • doc/turbojpeg/search/variables_4.js
  • doc/turbojpeg/search/variables_5.js
  • doc/turbojpeg/search/variables_6.js
  • doc/turbojpeg/search/variables_7.js
  • doc/turbojpeg/search/variables_8.js
  • doc/turbojpeg/search/variables_9.js
  • doc/turbojpeg/structtjregion.html
  • doc/turbojpeg/structtjscalingfactor.html
  • doc/turbojpeg/structtjtransform.html
  • doc/turbojpeg/tabs.css
  • doc/turbojpeg/topics.html
  • doc/usage.txt
  • doc/wizard.txt
  • doc/wrjpgcom.1
  • doxygen-extra.css
  • fuzz/CMakeLists.txt
  • fuzz/build.sh
  • fuzz/cjpeg.cc
  • fuzz/compress.cc
  • fuzz/compress12.cc
  • fuzz/compress12_lossless.cc
  • fuzz/compress16_lossless.cc
  • fuzz/compress_lossless.cc
  • fuzz/compress_yuv.cc
  • fuzz/decompress.cc
  • fuzz/decompress_libjpeg.cc
  • fuzz/decompress_yuv.cc
  • fuzz/jpeg.dict
  • fuzz/transform.cc
  • java/CMakeLists.txt
  • java/MANIFEST.MF
  • java/README
  • java/TJBench.java
  • java/TJExample.java
  • java/TJUnitTest.java
  • java/doc/allclasses-frame.html
  • java/doc/allclasses-noframe.html
  • java/doc/constant-values.html
  • java/doc/deprecated-list.html
  • java/doc/help-doc.html
  • java/doc/index-all.html
  • java/doc/index.html
  • java/doc/org/libjpegturbo/turbojpeg/TJ.html
  • java/doc/org/libjpegturbo/turbojpeg/TJCompressor.html
  • java/doc/org/libjpegturbo/turbojpeg/TJCustomFilter.html
  • java/doc/org/libjpegturbo/turbojpeg/TJDecompressor.html
  • java/doc/org/libjpegturbo/turbojpeg/TJException.html
  • java/doc/org/libjpegturbo/turbojpeg/TJScalingFactor.html
  • java/doc/org/libjpegturbo/turbojpeg/TJTransform.html
  • java/doc/org/libjpegturbo/turbojpeg/TJTransformer.html
  • java/doc/org/libjpegturbo/turbojpeg/YUVImage.html
  • java/doc/org/libjpegturbo/turbojpeg/package-frame.html
  • java/doc/org/libjpegturbo/turbojpeg/package-summary.html
  • java/doc/org/libjpegturbo/turbojpeg/package-tree.html
  • java/doc/overview-tree.html
  • java/doc/package-list
  • java/doc/script.js
  • java/doc/serialized-form.html
  • java/doc/stylesheet.css
  • java/org/libjpegturbo/turbojpeg/TJ.java
  • java/org/libjpegturbo/turbojpeg/TJCompressor.java
  • java/org/libjpegturbo/turbojpeg/TJCustomFilter.java
  • java/org/libjpegturbo/turbojpeg/TJDecompressor.java
  • java/org/libjpegturbo/turbojpeg/TJException.java
  • java/org/libjpegturbo/turbojpeg/TJLoader-unix.java.in
  • java/org/libjpegturbo/turbojpeg/TJScalingFactor.java
  • java/org/libjpegturbo/turbojpeg/TJTransform.java
  • java/org/libjpegturbo/turbojpeg/TJTransformer.java
  • java/org/libjpegturbo/turbojpeg/YUVImage.java
  • java/org_libjpegturbo_turbojpeg_TJ.h
  • java/org_libjpegturbo_turbojpeg_TJCompressor.h
  • java/org_libjpegturbo_turbojpeg_TJDecompressor.h
  • java/org_libjpegturbo_turbojpeg_TJTransformer.h
  • jcinit.c
  • jcomapi.c
  • jconfig.h.in
  • jdmaster.c
  • jna/CMakeLists.txt
  • jna/README.md
  • jna/TJ.java
  • jna/TJBench.java
  • jna/TJComp.java
  • jna/TJDecomp.java
  • jna/TJTran.java
  • jna/TJUnitTest.java
  • jsimd.h
  • jsimd_none.c
  • jsimddct.h
  • jversion.h.in
  • md5/CMakeLists.txt
  • release/ReadMe.txt
  • release/deb-control.in
  • release/installer.nsi.in
  • release/makedpkg.in
  • release/makemacpkg.in
  • release/makerpm.in
  • release/rpm.spec.in
  • release/uninstall.in
  • sharedlib/CMakeLists.txt
  • sharedlib/spng/CMakeLists.txt
  • simd/CMakeLists.txt
  • simd/README.md
  • simd/arm/aarch32/jccolext-neon.c
  • simd/arm/aarch32/jchuff-neon.c
  • simd/arm/aarch32/jsimd.c
  • simd/arm/aarch32/jsimd_neon.S
  • simd/arm/aarch32/jsimdcpu.c
  • simd/arm/aarch64/jccolext-neon.c
  • simd/arm/aarch64/jchuff-neon.c
  • simd/arm/aarch64/jsimd.c
  • simd/arm/aarch64/jsimd_neon.S
  • simd/arm/aarch64/jsimdcpu.c
  • simd/arm/align.h
  • simd/arm/jccolor-neon.c
  • simd/arm/jcgray-neon.c
  • simd/arm/jcgryext-neon.c
  • simd/arm/jchuff.h
  • simd/arm/jcphuff-neon.c
  • simd/arm/jcsample-neon.c
  • simd/arm/jdcolext-neon.c
  • simd/arm/jdcolor-neon.c
  • simd/arm/jdmerge-neon.c
  • simd/arm/jdmrgext-neon.c
  • simd/arm/jdsample-neon.c
  • simd/arm/jfdctfst-neon.c
  • simd/arm/jfdctint-neon.c
  • simd/arm/jidctfst-neon.c
  • simd/arm/jidctint-neon.c
  • simd/arm/jidctred-neon.c
  • simd/arm/jquanti-neon.c
  • simd/arm/neon-compat.h.in
  • simd/common/jcsample.h
  • simd/i386/jccolext-avx2.asm
  • simd/i386/jccolext-mmx.asm
  • simd/i386/jccolext-sse2.asm
  • simd/i386/jccolor-avx2.asm
  • simd/i386/jccolor-mmx.asm
  • simd/i386/jccolor-sse2.asm
  • simd/i386/jcgray-avx2.asm
  • simd/i386/jcgray-mmx.asm
  • simd/i386/jcgray-sse2.asm
  • simd/i386/jcgryext-avx2.asm
  • simd/i386/jcgryext-mmx.asm
  • simd/i386/jcgryext-sse2.asm
  • simd/i386/jchuff-sse2.asm
  • simd/i386/jcphuff-sse2.asm
  • simd/i386/jcsample-avx2.asm
  • simd/i386/jcsample-mmx.asm
  • simd/i386/jcsample-sse2.asm
  • simd/i386/jdcolext-avx2.asm
  • simd/i386/jdcolext-mmx.asm
  • simd/i386/jdcolext-sse2.asm
  • simd/i386/jdcolor-avx2.asm
  • simd/i386/jdcolor-mmx.asm
  • simd/i386/jdcolor-sse2.asm
  • simd/i386/jdmerge-avx2.asm
  • simd/i386/jdmerge-mmx.asm
  • simd/i386/jdmerge-sse2.asm
  • simd/i386/jdmrgext-avx2.asm
  • simd/i386/jdmrgext-mmx.asm
  • simd/i386/jdmrgext-sse2.asm
  • simd/i386/jdsample-avx2.asm
  • simd/i386/jdsample-mmx.asm
  • simd/i386/jdsample-sse2.asm
  • simd/i386/jfdctflt-3dn.asm
  • simd/i386/jfdctflt-sse.asm
  • simd/i386/jfdctfst-mmx.asm
  • simd/i386/jfdctfst-sse2.asm
  • simd/i386/jfdctint-avx2.asm
  • simd/i386/jfdctint-mmx.asm
  • simd/i386/jfdctint-sse2.asm
  • simd/i386/jidctflt-3dn.asm
  • simd/i386/jidctflt-sse.asm
  • simd/i386/jidctflt-sse2.asm
  • simd/i386/jidctfst-mmx.asm
  • simd/i386/jidctfst-sse2.asm
  • simd/i386/jidctint-avx2.asm
  • simd/i386/jidctint-mmx.asm
  • simd/i386/jidctint-sse2.asm
  • simd/i386/jidctred-mmx.asm
  • simd/i386/jidctred-sse2.asm
  • simd/i386/jquant-3dn.asm
  • simd/i386/jquant-sse.asm
  • simd/i386/jquantf-3dn.asm
  • simd/i386/jquantf-sse.asm
  • simd/i386/jquantf-sse2.asm
  • simd/i386/jquanti-avx2.asm
  • simd/i386/jquanti-mmx.asm
  • simd/i386/jquanti-sse2.asm
  • simd/i386/jsimd.c
  • simd/i386/jsimdcpu.asm
  • simd/jsimd.c
  • simd/jsimd.h
  • simd/jsimdconst.h
  • simd/jsimddct.h
  • simd/jsimdint.h
  • simd/mips/jsimd.c
  • simd/mips/jsimd_dspr2.S
  • simd/mips/jsimd_dspr2_asm.h
  • simd/mips64/jccolext-mmi.c
  • simd/mips64/jccolor-mmi.c
  • simd/mips64/jcgray-mmi.c
  • simd/mips64/jcgryext-mmi.c
  • simd/mips64/jcsample-mmi.c
  • simd/mips64/jdcolext-mmi.c
  • simd/mips64/jdcolor-mmi.c
  • simd/mips64/jdmerge-mmi.c
  • simd/mips64/jdmrgext-mmi.c
  • simd/mips64/jdsample-mmi.c
  • simd/mips64/jfdctfst-mmi.c
  • simd/mips64/jfdctint-mmi.c
  • simd/mips64/jidctfst-mmi.c
  • simd/mips64/jidctint-mmi.c
  • simd/mips64/jquanti-mmi.c
  • simd/mips64/jsimd.c
  • simd/mips64/jsimd_mmi.h
  • simd/mips64/jsimdcpu.c
  • simd/mips64/loongson-mmintrin.h
  • simd/nasm/jsimdcfg.inc
  • simd/nasm/jsimdcfg.inc.h
  • simd/nasm/jsimdext.inc
  • simd/powerpc/jccolext-altivec.c
  • simd/powerpc/jccolor-altivec.c
  • simd/powerpc/jcgray-altivec.c
  • simd/powerpc/jcgryext-altivec.c
  • simd/powerpc/jcsample-altivec.c
  • simd/powerpc/jcsample.h
  • simd/powerpc/jdcolext-altivec.c
  • simd/powerpc/jdcolor-altivec.c
  • simd/powerpc/jdmerge-altivec.c
  • simd/powerpc/jdmrgext-altivec.c
  • simd/powerpc/jdsample-altivec.c
  • simd/powerpc/jfdctfst-altivec.c
  • simd/powerpc/jfdctint-altivec.c
  • simd/powerpc/jidctfst-altivec.c
  • simd/powerpc/jidctint-altivec.c
  • simd/powerpc/jquanti-altivec.c
  • simd/powerpc/jsimd.c
  • simd/powerpc/jsimd_altivec.h
  • simd/powerpc/jsimdcpu.c
  • simd/riscv64/jccolext-rvv.c
  • simd/riscv64/jccolor-rvv.c
  • simd/riscv64/jcgray-rvv.c
  • simd/riscv64/jcgryext-rvv.c
  • simd/riscv64/jcsample-rvv.c
  • simd/riscv64/jdcolext-rvv.c
  • simd/riscv64/jdcolor-rvv.c
  • simd/riscv64/jdmerge-rvv.c
  • simd/riscv64/jdmrgext-rvv.c
  • simd/riscv64/jdsample-rvv.c
  • simd/riscv64/jfdctfst-rvv.c
  • simd/riscv64/jfdctint-rvv.c
  • simd/riscv64/jidctfst-rvv.c
  • simd/riscv64/jidctint-rvv.c
  • simd/riscv64/jquanti-rvv.c
  • simd/riscv64/jsimd_rvv.h
  • simd/riscv64/jsimdcpu.S
  • simd/riscv64/jsimdcpu.c
  • simd/simdcoverage.c
  • simd/x86_64/jccolext-avx2.asm
  • simd/x86_64/jccolext-sse2.asm
  • simd/x86_64/jccolor-avx2.asm
  • simd/x86_64/jccolor-sse2.asm
  • simd/x86_64/jcgray-avx2.asm
  • simd/x86_64/jcgray-sse2.asm
  • simd/x86_64/jcgryext-avx2.asm
  • simd/x86_64/jcgryext-sse2.asm
  • simd/x86_64/jchuff-sse2.asm
  • simd/x86_64/jcphuff-sse2.asm
  • simd/x86_64/jcsample-avx2.asm
  • simd/x86_64/jcsample-sse2.asm
  • simd/x86_64/jdcolext-avx2.asm
  • simd/x86_64/jdcolext-sse2.asm
  • simd/x86_64/jdcolor-avx2.asm
  • simd/x86_64/jdcolor-sse2.asm
  • simd/x86_64/jdmerge-avx2.asm
  • simd/x86_64/jdmerge-sse2.asm
  • simd/x86_64/jdmrgext-avx2.asm
  • simd/x86_64/jdmrgext-sse2.asm
  • simd/x86_64/jdsample-avx2.asm
  • simd/x86_64/jdsample-sse2.asm
  • simd/x86_64/jfdctflt-sse.asm
  • simd/x86_64/jfdctfst-sse2.asm
  • simd/x86_64/jfdctint-avx2.asm
  • simd/x86_64/jfdctint-sse2.asm
  • simd/x86_64/jidctflt-sse2.asm
  • simd/x86_64/jidctfst-sse2.asm
  • simd/x86_64/jidctint-avx2.asm
  • simd/x86_64/jidctint-sse2.asm
  • simd/x86_64/jidctred-sse2.asm
  • simd/x86_64/jquantf-sse2.asm
  • simd/x86_64/jquanti-avx2.asm
  • simd/x86_64/jquanti-sse2.asm
  • simd/x86_64/jsimd.c
  • simd/x86_64/jsimdcpu.asm
  • src/bmpsizetest.c
  • src/cderror.h
  • src/cdjpeg.c
  • src/cdjpeg.h
  • src/cjpeg.c
  • src/cmyk.h
  • src/djpeg.c
  • src/example.c
  • src/jaricom.c
  • src/jcapimin.c
  • src/jcapistd.c
  • src/jcarith.c
  • src/jccoefct.c
  • src/jccolext.c
  • src/jccolor.c
  • src/jcdctmgr.c
  • src/jcdiffct.c
  • src/jchuff.c
  • src/jchuff.h
  • src/jcicc.c
  • src/jcinit.c
  • src/jclhuff.c
  • src/jclossls.c
  • src/jcmainct.c
  • src/jcmarker.c
  • src/jcmaster.c
  • src/jcmaster.h
  • src/jcomapi.c
  • src/jconfig.h.in
  • src/jconfig.txt
  • src/jconfigint.h.in
  • src/jcparam.c
  • src/jcphuff.c
  • src/jcprepct.c
  • src/jcsample.c
  • src/jcstest.c
  • src/jctrans.c
  • src/jdapimin.c
  • src/jdapistd.c
  • src/jdarith.c
  • src/jdatadst-tj.c
  • src/jdatadst.c
  • src/jdatasrc-tj.c
  • src/jdatasrc.c
  • src/jdcoefct.c
  • src/jdcoefct.h
  • src/jdcol565.c
  • src/jdcolext.c
  • src/jdcolor.c
  • src/jdct.h
  • src/jddctmgr.c
  • src/jddiffct.c
  • src/jdhuff.c
  • src/jdhuff.h
  • src/jdicc.c
  • src/jdinput.c
  • src/jdlhuff.c
  • src/jdlossls.c
  • src/jdmainct.c
  • src/jdmainct.h
  • src/jdmarker.c
  • src/jdmaster.c
  • src/jdmaster.h
  • src/jdmerge.c
  • src/jdmerge.h
  • src/jdmrg565.c
  • src/jdmrgext.c
  • src/jdphuff.c
  • src/jdpostct.c
  • src/jdsample.c
  • src/jdsample.h
  • src/jdtrans.c
  • src/jerror.c
  • src/jerror.h
  • src/jfdctflt.c
  • src/jfdctfst.c
  • src/jfdctint.c
  • src/jidctflt.c
  • src/jidctfst.c
  • src/jidctint.c
  • src/jidctred.c
  • src/jinclude.h
  • src/jlossls.h
  • src/jmemmgr.c
  • src/jmemnobs.c
  • src/jmemsys.h
  • src/jmorecfg.h
  • src/jpeg_nbits.c
  • src/jpeg_nbits.h
  • src/jpegapicomp.h
  • src/jpegint.h
  • src/jpeglib.h
  • src/jpegtran.c
  • src/jquant1.c
  • src/jquant2.c
  • src/jsamplecomp.h
  • src/jstdhuff.c
  • src/jutils.c
  • src/jversion.h.in
  • src/libjpeg.map.in
  • src/md5/CMakeLists.txt
  • src/md5/md5.c
  • src/md5/md5.h
  • src/md5/md5cmp.c
  • src/md5/md5hl.c
  • src/md5/md5sum.c
  • src/rdbmp.c
  • src/rdcolmap.c
  • src/rdgif.c
  • src/rdjpgcom.c
  • src/rdpng.c
  • src/rdppm.c
  • src/rdswitch.c
  • src/rdtarga.c
  • src/spng/CMakeLists.txt
  • src/spng/LICENSE
  • src/spng/libpng-LICENSE.txt
  • src/spng/spng.c
  • src/spng/spng.h
  • src/spng/zlib/LICENSE
  • src/spng/zlib/adler32.c
  • src/spng/zlib/compress.c
  • src/spng/zlib/crc32.c
  • src/spng/zlib/crc32.h
  • src/spng/zlib/deflate.c
  • src/spng/zlib/deflate.h
  • src/spng/zlib/gzguts.h
  • src/spng/zlib/inffast.c
  • src/spng/zlib/inffast.h
  • src/spng/zlib/inffixed.h
  • src/spng/zlib/inflate.c
  • src/spng/zlib/inflate.h
  • src/spng/zlib/inftrees.c
  • src/spng/zlib/inftrees.h
  • src/spng/zlib/trees.c
  • src/spng/zlib/trees.h
  • src/spng/zlib/zconf.h
  • src/spng/zlib/zlib.h
  • src/spng/zlib/zutil.c
  • src/spng/zlib/zutil.h
  • src/strtest.c
  • src/tjbench.c
  • src/tjcomp.c
  • src/tjdecomp.c
  • src/tjtran.c
  • src/tjunittest.c
  • src/tjutil.c
  • src/tjutil.h
  • src/transupp.c
  • src/transupp.h
  • src/turbojpeg-mapfile
  • src/turbojpeg-mp.c
  • src/turbojpeg.c
  • src/turbojpeg.h
  • src/wrapper/jcapistd-12.c
  • src/wrapper/jcapistd-16.c
  • src/wrapper/jcapistd-8.c
  • src/wrapper/jccoefct-12.c
  • src/wrapper/jccoefct-8.c
  • src/wrapper/jccolor-12.c
  • src/wrapper/jccolor-16.c
  • src/wrapper/jccolor-8.c
  • src/wrapper/jcdctmgr-12.c
  • src/wrapper/jcdctmgr-8.c
  • src/wrapper/jcdiffct-12.c
  • src/wrapper/jcdiffct-16.c
  • src/wrapper/jcdiffct-8.c
  • src/wrapper/jclossls-12.c
  • src/wrapper/jclossls-16.c
  • src/wrapper/jclossls-8.c
  • src/wrapper/jcmainct-12.c
  • src/wrapper/jcmainct-16.c
  • src/wrapper/jcmainct-8.c
  • src/wrapper/jcprepct-12.c
  • src/wrapper/jcprepct-16.c
  • src/wrapper/jcprepct-8.c
  • src/wrapper/jcsample-12.c
  • src/wrapper/jcsample-16.c
  • src/wrapper/jcsample-8.c
  • src/wrapper/jdapistd-12.c
  • src/wrapper/jdapistd-16.c
  • src/wrapper/jdapistd-8.c
  • src/wrapper/jdcoefct-12.c
  • src/wrapper/jdcoefct-8.c
  • src/wrapper/jdcolor-12.c
  • src/wrapper/jdcolor-16.c
  • src/wrapper/jdcolor-8.c
  • src/wrapper/jddctmgr-12.c
  • src/wrapper/jddctmgr-8.c
  • src/wrapper/jddiffct-12.c
  • src/wrapper/jddiffct-16.c
  • src/wrapper/jddiffct-8.c
  • src/wrapper/jdlossls-12.c
  • src/wrapper/jdlossls-16.c
  • src/wrapper/jdlossls-8.c
  • src/wrapper/jdmainct-12.c
  • src/wrapper/jdmainct-16.c
  • src/wrapper/jdmainct-8.c
  • src/wrapper/jdmerge-12.c
  • src/wrapper/jdmerge-8.c
  • src/wrapper/jdpostct-12.c
  • src/wrapper/jdpostct-16.c
  • src/wrapper/jdpostct-8.c
  • src/wrapper/jdsample-12.c
  • src/wrapper/jdsample-16.c
  • src/wrapper/jdsample-8.c
  • src/wrapper/jfdctfst-12.c
  • src/wrapper/jfdctfst-8.c
  • src/wrapper/jfdctint-12.c
  • src/wrapper/jfdctint-8.c
  • src/wrapper/jidctflt-12.c
  • src/wrapper/jidctflt-8.c
  • src/wrapper/jidctfst-12.c
  • src/wrapper/jidctfst-8.c
  • src/wrapper/jidctint-12.c
  • src/wrapper/jidctint-8.c
  • src/wrapper/jidctred-12.c
  • src/wrapper/jidctred-8.c
  • src/wrapper/jquant1-12.c
  • src/wrapper/jquant1-8.c
  • src/wrapper/jquant2-12.c
  • src/wrapper/jquant2-8.c
  • src/wrapper/jutils-12.c
  • src/wrapper/jutils-16.c
  • src/wrapper/jutils-8.c
  • src/wrapper/rdcolmap-12.c
  • src/wrapper/rdcolmap-8.c
  • src/wrapper/rdpng-12.c
  • src/wrapper/rdpng-16.c
  • src/wrapper/rdpng-8.c
  • src/wrapper/rdppm-12.c
  • src/wrapper/rdppm-16.c
  • src/wrapper/rdppm-8.c
  • src/wrapper/template.c
  • src/wrapper/wrgif-12.c
  • src/wrapper/wrgif-8.c
  • src/wrapper/wrpng-12.c
  • src/wrapper/wrpng-16.c
  • src/wrapper/wrpng-8.c
  • src/wrapper/wrppm-12.c
  • src/wrapper/wrppm-16.c
  • src/wrapper/wrppm-8.c
  • src/wrbmp.c
  • src/wrgif.c
  • src/wrjpgcom.c
  • src/wrpng.c
  • src/wrppm.c
  • src/wrtarga.c
  • test/croptest.in
  • test/indexedcolortest.in
  • test/tjbenchtest.in
  • test/tjcomptest.in
  • test/tjdecomptest.in
  • test/tjtrantest.in
  • testimages/LICENSE.txt
  • testimages/monkey16.pgm
  • testimages/nightshot_iso_100.txt
  • testimages/test1.icc.txt
  • testimages/test2.icc
  • testimages/test2.icc.txt
  • testimages/test3.icc
  • tjbench.c
  • tjbenchtest.in
  • tjbenchtest.java.in
  • tjexample.c
  • tjexampletest.in
  • tjexampletest.java.in
  • tjunittest.c
  • turbojpeg-jni.c
  • turbojpeg-mapfile.jni
  • turbojpeg.c
  • turbojpeg.h
  • win/jconfig.h.in
  • win/jpeg62-memsrcdst.def
  • win/jpeg62.def
  • win/jpeg7-memsrcdst.def
  • win/jpeg7.def
  • win/jpeg8.def

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch update/upstream-3.2.0

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants