Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
ad4e5dbd
Commit
ad4e5dbd
authored
Mar 23, 2020
by
Alexander Alekhin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
3rdparty: libjpeg-turbo 2.0.2 => 2.0.4
-
https://github.com/libjpeg-turbo/libjpeg-turbo/releases/tag/2.0.4
parent
2d63861c
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
68 additions
and
48 deletions
+68
-48
CMakeLists.txt
3rdparty/libjpeg-turbo/CMakeLists.txt
+2
-2
README.md
3rdparty/libjpeg-turbo/README.md
+36
-26
jchuff.c
3rdparty/libjpeg-turbo/src/jchuff.c
+8
-4
jcmaster.c
3rdparty/libjpeg-turbo/src/jcmaster.c
+1
-1
jcphuff.c
3rdparty/libjpeg-turbo/src/jcphuff.c
+2
-2
jdhuff.c
3rdparty/libjpeg-turbo/src/jdhuff.c
+7
-3
jdmerge.c
3rdparty/libjpeg-turbo/src/jdmerge.c
+0
-2
jdsample.c
3rdparty/libjpeg-turbo/src/jdsample.c
+9
-5
jfdctint.c
3rdparty/libjpeg-turbo/src/jfdctint.c
+1
-1
jidctint.c
3rdparty/libjpeg-turbo/src/jidctint.c
+1
-1
jidctred.c
3rdparty/libjpeg-turbo/src/jidctred.c
+1
-1
No files found.
3rdparty/libjpeg-turbo/CMakeLists.txt
View file @
ad4e5dbd
...
...
@@ -4,9 +4,9 @@ ocv_warnings_disable(CMAKE_C_FLAGS -Wunused-parameter -Wsign-compare -Wshorten-6
set
(
VERSION_MAJOR 2
)
set
(
VERSION_MINOR 0
)
set
(
VERSION_REVISION
2
)
set
(
VERSION_REVISION
4
)
set
(
VERSION
${
VERSION_MAJOR
}
.
${
VERSION_MINOR
}
.
${
VERSION_REVISION
}
)
set
(
LIBJPEG_TURBO_VERSION_NUMBER 200000
2
)
set
(
LIBJPEG_TURBO_VERSION_NUMBER 200000
4
)
string
(
TIMESTAMP BUILD
"opencv-
${
OPENCV_VERSION
}
-libjpeg-turbo"
)
if
(
CMAKE_BUILD_TYPE STREQUAL
"Debug"
)
...
...
3rdparty/libjpeg-turbo/README.md
View file @
ad4e5dbd
Background
==========
libjpeg-turbo is a JPEG image codec that uses SIMD instructions
(MMX, SSE2,
AVX2, NEON, AltiVec) to accelerate baseline JPEG compression and decompression
on x86, x86-64, ARM, and PowerPC systems, as well as progressive JPEG
compression on x86 and x86-64 systems. On such systems, libjpeg-turbo is
generally 2-6x as fast as libjpeg, all else being equal. On other types of
systems, libjpeg-turbo can still outperform libjpeg by a significant amount, by
virtue of its highly-optimized Huffman coding routines. In many cases, the
performance of libjpeg-turbo
rivals that of proprietary high-speed JPEG codecs.
libjpeg-turbo is a JPEG image codec that uses SIMD instructions
to accelerate
baseline JPEG compression and decompression on x86, x86-64, ARM, PowerPC, and
MIPS systems, as well as progressive JPEG compression on x86 and x86-64
systems. On such systems, libjpeg-turbo is generally 2-6x as fast as libjpeg,
all else being equal. On other types of systems, libjpeg-turbo can still
outperform libjpeg by a significant amount, by virtue of its highly-optimized
Huffman coding routines. In many cases, the performance of libjpeg-turbo
rivals that of proprietary high-speed JPEG codecs.
libjpeg-turbo implements both the traditional libjpeg API as well as the less
powerful but more straightforward TurboJPEG API. libjpeg-turbo also features
...
...
@@ -135,25 +135,24 @@ without recompiling. libjpeg-turbo does not claim to support all of the
libjpeg v7+ features, nor to produce identical output to libjpeg v7+ in all
cases (see below.)
By passing an argument of
`--with-jpeg7`
or
`--with-jpeg8`
to
`configure`
, or
an argument of
`-DWITH_JPEG7=1`
or
`-DWITH_JPEG8=1`
to
`cmake`
, you can build a
version of libjpeg-turbo that emulates the libjpeg v7 or v8 ABI, so that
programs that are built against libjpeg v7 or v8 can be run with libjpeg-turbo.
The following section describes which libjpeg v7+ features are supported and
which aren't.
By passing an argument of
`-DWITH_JPEG7=1`
or
`-DWITH_JPEG8=1`
to
`cmake`
, you
can build a version of libjpeg-turbo that emulates the libjpeg v7 or v8 ABI, so
that programs that are built against libjpeg v7 or v8 can be run with
libjpeg-turbo. The following section describes which libjpeg v7+ features are
supported and which aren't.
### Support for libjpeg v7 and v8 Features
#### Fully supported
-
**libjpeg: IDCT scaling extensions in decompressor**
<br>
-
**libjpeg
API
: IDCT scaling extensions in decompressor**
<br>
libjpeg-turbo supports IDCT scaling with scaling factors of 1/8, 1/4, 3/8,
1/2, 5/8, 3/4, 7/8, 9/8, 5/4, 11/8, 3/2, 13/8, 7/4, 15/8, and 2/1 (only 1/4
and 1/2 are SIMD-accelerated.)
-
**libjpeg: Arithmetic coding**
-
**libjpeg
API
: Arithmetic coding**
-
**libjpeg: In-memory source and destination managers**
<br>
-
**libjpeg
API
: In-memory source and destination managers**
<br>
See notes below.
-
**cjpeg: Separate quality settings for luminance and chrominance**
<br>
...
...
@@ -185,14 +184,14 @@ means of quality improvement. The reader is invited to peruse the research at
but it is the general belief of our project that these features have not
demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
-
**libjpeg: DCT scaling in compressor**
<br>
-
**libjpeg
API
: DCT scaling in compressor**
<br>
`cinfo.scale_num`
and
`cinfo.scale_denom`
are silently ignored.
There is no technical reason why DCT scaling could not be supported when
emulating the libjpeg v7+ API/ABI, but without the SmartScale extension (see
below), only scaling factors of 1/2, 8/15, 4/7, 8/13, 2/3, 8/11, 4/5, and
8/9 would be available, which is of limited usefulness.
-
**libjpeg: SmartScale**
<br>
-
**libjpeg
API
: SmartScale**
<br>
`cinfo.block_size`
is silently ignored.
SmartScale is an extension to the JPEG format that allows for DCT block
sizes other than 8x8. Providing support for this new format would be
...
...
@@ -205,7 +204,7 @@ demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
interest in providing this feature would be as a means of supporting
additional DCT scaling factors.
-
**libjpeg: Fancy downsampling in compressor**
<br>
-
**libjpeg
API
: Fancy downsampling in compressor**
<br>
`cinfo.do_fancy_downsampling`
is silently ignored.
This requires the DCT scaling feature, which is not supported.
...
...
@@ -247,15 +246,14 @@ don't, and it allows those functions to be provided in the "official"
libjpeg-turbo binaries.
Those who are concerned about maintaining strict conformance with the libjpeg
v6b or v7 API can pass an argument of
`--without-mem-srcdst`
to
`configure`
or
an argument of
`-DWITH_MEM_SRCDST=0`
to
`cmake`
prior to building
libjpeg-turbo. This will restore the pre-1.3 behavior, in which
v6b or v7 API can pass an argument of
`-DWITH_MEM_SRCDST=0`
to
`cmake`
prior to
building libjpeg-turbo. This will restore the pre-1.3 behavior, in which
`jpeg_mem_src()`
and
`jpeg_mem_dest()`
are only included when emulating the
libjpeg v8 API/ABI.
On Un
*
x systems, including the in-memory source/destination managers changes
the dynamic library version from 62.
1.0 to 62.2
.0 if using libjpeg v6b API/ABI
emulation and from 7.
1.0 to 7.2
.0 if using libjpeg v7 API/ABI emulation.
the dynamic library version from 62.
2.0 to 62.3
.0 if using libjpeg v6b API/ABI
emulation and from 7.
2.0 to 7.3
.0 if using libjpeg v7 API/ABI emulation.
Note that, on most Un
*
x systems, the dynamic linker will not look for a
function in a library until that function is actually used. Thus, if a program
...
...
@@ -331,7 +329,7 @@ in a way that makes the rest of the libjpeg infrastructure happy, so it is
necessary to use the slow Huffman decoder when decompressing a JPEG image that
has restart markers. This can cause the decompression performance to drop by
as much as 20%, but the performance will still be much greater than that of
libjpeg. Many consumer packages, such as Photo
S
hop, use restart markers when
libjpeg. Many consumer packages, such as Photo
s
hop, use restart markers when
generating JPEG images, so images generated by those programs will experience
this issue.
...
...
@@ -344,3 +342,15 @@ quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
function in those cases. This causes performance to drop by as much as 40%.
It is therefore strongly advised that you use the slow integer forward DCT
whenever encoding images with a JPEG quality of 98 or higher.
Memory Debugger Pitfalls
========================
Valgrind and Memory Sanitizer (MSan) can generate false positives
(specifically, incorrect reports of uninitialized memory accesses) when used
with libjpeg-turbo's SIMD extensions. It is generally recommended that the
SIMD extensions be disabled, either by passing an argument of
`-DWITH_SIMD=0`
to
`cmake`
when configuring the build or by setting the environment variable
`JSIMD_FORCENONE`
to
`1`
at run time, when testing libjpeg-turbo with Valgrind,
MSan, or other memory debuggers.
3rdparty/libjpeg-turbo/src/jchuff.c
View file @
ad4e5dbd
...
...
@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1997, Thomas G. Lane.
* libjpeg-turbo Modifications:
* Copyright (C) 2009-2011, 2014-2016, 2018, D. R. Commander.
* Copyright (C) 2009-2011, 2014-2016, 2018
-2019
, D. R. Commander.
* Copyright (C) 2015, Matthieu Darbois.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
...
...
@@ -43,8 +43,8 @@
*/
/* NOTE: Both GCC and Clang define __GNUC__ */
#if defined
__GNUC__ && (defined __arm__ || defined __aarch64__
)
#if !defined
__thumb__ || defined __thumb2__
#if defined
(__GNUC__) && (defined(__arm__) || defined(__aarch64__)
)
#if !defined
(__thumb__) || defined(__thumb2__)
#define USE_CLZ_INTRINSIC
#endif
#endif
...
...
@@ -356,6 +356,8 @@ dump_buffer(working_state *state)
put_buffer = (put_buffer << size) | code; \
}
#if SIZEOF_SIZE_T != 8 && !defined(_WIN64)
#define CHECKBUF15() { \
if (put_bits > 15) { \
EMIT_BYTE() \
...
...
@@ -363,6 +365,8 @@ dump_buffer(working_state *state)
} \
}
#endif
#define CHECKBUF31() { \
if (put_bits > 31) { \
EMIT_BYTE() \
...
...
@@ -428,7 +432,7 @@ dump_buffer(working_state *state)
* scanning order-- 1, 8, 16, etc.), then this will produce an encoded block
* larger than 200 bytes.
*/
#define BUFSIZE (DCTSIZE2 *
4
)
#define BUFSIZE (DCTSIZE2 *
8
)
#define LOAD_BUFFER() { \
if (state->free_in_buffer < BUFSIZE) { \
...
...
3rdparty/libjpeg-turbo/src/jcmaster.c
View file @
ad4e5dbd
...
...
@@ -492,8 +492,8 @@ prepare_for_pass(j_compress_ptr cinfo)
*/
master
->
pass_type
=
output_pass
;
master
->
pass_number
++
;
/*FALLTHROUGH*/
#endif
/*FALLTHROUGH*/
case
output_pass
:
/* Do a data-output pass. */
/* We need not repeat per-scan setup if prior optimization pass did it. */
...
...
3rdparty/libjpeg-turbo/src/jcphuff.c
View file @
ad4e5dbd
...
...
@@ -52,8 +52,8 @@
*/
/* NOTE: Both GCC and Clang define __GNUC__ */
#if defined
__GNUC__ && (defined __arm__ || defined __aarch64__
)
#if !defined
__thumb__ || defined __thumb2__
#if defined
(__GNUC__) && (defined(__arm__) || defined(__aarch64__)
)
#if !defined
(__thumb__) || defined(__thumb2__)
#define USE_CLZ_INTRINSIC
#endif
#endif
...
...
3rdparty/libjpeg-turbo/src/jdhuff.c
View file @
ad4e5dbd
...
...
@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1997, Thomas G. Lane.
* libjpeg-turbo Modifications:
* Copyright (C) 2009-2011, 2016, 2018, D. R. Commander.
* Copyright (C) 2009-2011, 2016, 2018
-2019
, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
...
...
@@ -589,7 +589,11 @@ decode_mcu_slow(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
if
(
entropy
->
dc_needed
[
blkn
])
{
/* Convert DC difference to actual value, update last_dc_val */
int
ci
=
cinfo
->
MCU_membership
[
blkn
];
s
+=
state
.
last_dc_val
[
ci
];
/* This is really just
* s += state.last_dc_val[ci];
* It is written this way in order to shut up UBSan.
*/
s
=
(
int
)((
unsigned
int
)
s
+
(
unsigned
int
)
state
.
last_dc_val
[
ci
]);
state
.
last_dc_val
[
ci
]
=
s
;
if
(
block
)
{
/* Output the DC coefficient (assumes jpeg_natural_order[0] = 0) */
...
...
@@ -684,7 +688,7 @@ decode_mcu_fast(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
if
(
entropy
->
dc_needed
[
blkn
])
{
int
ci
=
cinfo
->
MCU_membership
[
blkn
];
s
+=
state
.
last_dc_val
[
ci
]
;
s
=
(
int
)((
unsigned
int
)
s
+
(
unsigned
int
)
state
.
last_dc_val
[
ci
])
;
state
.
last_dc_val
[
ci
]
=
s
;
if
(
block
)
(
*
block
)[
0
]
=
(
JCOEF
)
s
;
...
...
3rdparty/libjpeg-turbo/src/jdmerge.c
View file @
ad4e5dbd
...
...
@@ -429,8 +429,6 @@ h2v2_merged_upsample(j_decompress_ptr cinfo, JSAMPIMAGE input_buf,
#define PACK_TWO_PIXELS_LE(l, r) ((r << 16) | l)
#define PACK_TWO_PIXELS_BE(l, r) ((l << 16) | r)
#define PACK_NEED_ALIGNMENT(ptr) (((size_t)(ptr)) & 3)
#define WRITE_TWO_PIXELS_LE(addr, pixels) { \
((INT16 *)(addr))[0] = (INT16)(pixels); \
((INT16 *)(addr))[1] = (INT16)((pixels) >> 16); \
...
...
3rdparty/libjpeg-turbo/src/jdsample.c
View file @
ad4e5dbd
...
...
@@ -8,6 +8,7 @@
* Copyright (C) 2010, 2015-2016, D. R. Commander.
* Copyright (C) 2014, MIPS Technologies, Inc., California.
* Copyright (C) 2015, Google, Inc.
* Copyright (C) 2019, Arm Limited.
* For conditions of distribution and use, see the accompanying README.ijg
* file.
*
...
...
@@ -315,9 +316,9 @@ h1v2_fancy_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
JSAMPARRAY
output_data
=
*
output_data_ptr
;
JSAMPROW
inptr0
,
inptr1
,
outptr
;
#if BITS_IN_JSAMPLE == 8
int
thiscolsum
;
int
thiscolsum
,
bias
;
#else
JLONG
thiscolsum
;
JLONG
thiscolsum
,
bias
;
#endif
JDIMENSION
colctr
;
int
inrow
,
outrow
,
v
;
...
...
@@ -327,15 +328,18 @@ h1v2_fancy_upsample(j_decompress_ptr cinfo, jpeg_component_info *compptr,
for
(
v
=
0
;
v
<
2
;
v
++
)
{
/* inptr0 points to nearest input row, inptr1 points to next nearest */
inptr0
=
input_data
[
inrow
];
if
(
v
==
0
)
/* next nearest is row above */
if
(
v
==
0
)
{
/* next nearest is row above */
inptr1
=
input_data
[
inrow
-
1
];
else
/* next nearest is row below */
bias
=
1
;
}
else
{
/* next nearest is row below */
inptr1
=
input_data
[
inrow
+
1
];
bias
=
2
;
}
outptr
=
output_data
[
outrow
++
];
for
(
colctr
=
0
;
colctr
<
compptr
->
downsampled_width
;
colctr
++
)
{
thiscolsum
=
GETJSAMPLE
(
*
inptr0
++
)
*
3
+
GETJSAMPLE
(
*
inptr1
++
);
*
outptr
++
=
(
JSAMPLE
)((
thiscolsum
+
1
)
>>
2
);
*
outptr
++
=
(
JSAMPLE
)((
thiscolsum
+
bias
)
>>
2
);
}
}
inrow
++
;
...
...
3rdparty/libjpeg-turbo/src/jfdctint.c
View file @
ad4e5dbd
/*
* jfdctint.c
*
* This file was part of the Independent JPEG Group's software
.
* This file was part of the Independent JPEG Group's software
:
* Copyright (C) 1991-1996, Thomas G. Lane.
* libjpeg-turbo Modifications:
* Copyright (C) 2015, D. R. Commander.
...
...
3rdparty/libjpeg-turbo/src/jidctint.c
View file @
ad4e5dbd
/*
* jidctint.c
*
* This file was part of the Independent JPEG Group's software
.
* This file was part of the Independent JPEG Group's software
:
* Copyright (C) 1991-1998, Thomas G. Lane.
* Modification developed 2002-2009 by Guido Vollbeding.
* libjpeg-turbo Modifications:
...
...
3rdparty/libjpeg-turbo/src/jidctred.c
View file @
ad4e5dbd
/*
* jidctred.c
*
* This file was part of the Independent JPEG Group's software
.
* This file was part of the Independent JPEG Group's software
:
* Copyright (C) 1994-1998, Thomas G. Lane.
* libjpeg-turbo Modifications:
* Copyright (C) 2015, D. R. Commander.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment