Compare commits
161 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e0bbbf7e6 | ||
|
|
49df783743 | ||
|
|
04e0a0293a | ||
|
|
bb9e147872 | ||
|
|
1d29c5f97b | ||
|
|
67bee8683d | ||
|
|
65d4a46d3b | ||
|
|
c6eedebc6a | ||
|
|
0c83e5af00 | ||
|
|
d8522a7587 | ||
|
|
01fdcc391a | ||
|
|
9ce1a21ea7 | ||
|
|
0bb37a5d5f | ||
|
|
4c17a453d1 | ||
|
|
ba923a8529 | ||
|
|
4578953843 | ||
|
|
d7a642b571 | ||
|
|
00400a0a58 | ||
|
|
441308cffa | ||
|
|
4b357abb6d | ||
|
|
94f7ac929a | ||
|
|
7175e51792 | ||
|
|
764e1e23aa | ||
|
|
0ddff3b059 | ||
|
|
7eced19feb | ||
|
|
08769b32f6 | ||
|
|
f32640e8cb | ||
|
|
6cd1ec4b09 | ||
|
|
7ed0aebdba | ||
|
|
5e96c9bfe0 | ||
|
|
5a84a0e1b3 | ||
|
|
fde862ba1d | ||
|
|
292fb8425e | ||
|
|
0bf58f2145 | ||
|
|
a35de7cc08 | ||
|
|
a2a2cd60e5 | ||
|
|
189ee81b58 | ||
|
|
0f7ff719a1 | ||
|
|
bdfcb74d50 | ||
|
|
5039d734d5 | ||
|
|
98ca1c35d7 | ||
|
|
2e22eb6ea2 | ||
|
|
6da61db278 | ||
|
|
dc4645d422 | ||
|
|
736fb06278 | ||
|
|
ab70623eb2 | ||
|
|
b87136c2c7 | ||
|
|
eff4f956fe | ||
|
|
e2394fc58a | ||
|
|
cb2036fd11 | ||
|
|
7c39e3a766 | ||
|
|
1f4cc446fe | ||
|
|
b87a0b4687 | ||
|
|
00c2cf3632 | ||
|
|
0f43551e08 | ||
|
|
c5052c7701 | ||
|
|
211d1e7463 | ||
|
|
5815699bff | ||
|
|
f29ffd3eed | ||
|
|
2f12d7a486 | ||
|
|
6f96153c67 | ||
|
|
e54d31affe | ||
|
|
6b638a6d58 | ||
|
|
d211effa01 | ||
|
|
dad4d2e76c | ||
|
|
d5e964c980 | ||
|
|
c168d9641c | ||
|
|
6a32d04d23 | ||
|
|
28701317d2 | ||
|
|
d7ca17b73d | ||
|
|
ac51438b66 | ||
|
|
966d8b77ef | ||
|
|
c137f0f1cf | ||
|
|
f37e4daf94 | ||
|
|
251db636f8 | ||
|
|
a9d39ce09d | ||
|
|
e0634b15c3 | ||
|
|
8cbf8939bb | ||
|
|
f73a27ca5b | ||
|
|
b5f2e450ac | ||
|
|
b24a7228ed | ||
|
|
6d6e37df18 | ||
|
|
cf763c0cd8 | ||
|
|
03badeab66 | ||
|
|
84f7122ba6 | ||
|
|
a73e870ad0 | ||
|
|
0bfb78051d | ||
|
|
2dcd4b5353 | ||
|
|
152e4c5ee4 | ||
|
|
75cf49798d | ||
|
|
5e3bb3e9c8 | ||
|
|
de924b8587 | ||
|
|
bc2e66cb43 | ||
|
|
d9d1d67d7c | ||
|
|
fac3bea8da | ||
|
|
61e1341f11 | ||
|
|
29d8f253f8 | ||
|
|
8fd7221dc1 | ||
|
|
a394bf752a | ||
|
|
0a0f8d14e2 | ||
|
|
2186809a45 | ||
|
|
e0419b530b | ||
|
|
3367f407fe | ||
|
|
73d74c132b | ||
|
|
ea505e777a | ||
|
|
ea7bb7b651 | ||
|
|
98eecb8605 | ||
|
|
13c318da4f | ||
|
|
14e8225391 | ||
|
|
575317bb54 | ||
|
|
df0babcfc2 | ||
|
|
66fe68b0b2 | ||
|
|
b2fc846e44 | ||
|
|
dc31f0bc41 | ||
|
|
f659f43f93 | ||
|
|
e93d94b9ad | ||
|
|
4ef9c9549b | ||
|
|
ea3396a945 | ||
|
|
9ba64bbbcf | ||
|
|
afc06929e0 | ||
|
|
6dd6b3a74c | ||
|
|
8ad24924ea | ||
|
|
fd407776ba | ||
|
|
f52682e277 | ||
|
|
21cc62bccb | ||
|
|
c2f89f131d | ||
|
|
6bc5938482 | ||
|
|
ffe4fc182f | ||
|
|
0586d41d1b | ||
|
|
09e4575789 | ||
|
|
086c9ab549 | ||
|
|
0989088530 | ||
|
|
ed839d5905 | ||
|
|
c052646b34 | ||
|
|
99bebdd0aa | ||
|
|
02cd567fb9 | ||
|
|
bbaf4c94cd | ||
|
|
166c5ec0b9 | ||
|
|
1fbae8467f | ||
|
|
1256fbade9 | ||
|
|
3d40ad5f6e | ||
|
|
00b327b8f8 | ||
|
|
bdbcd14057 | ||
|
|
c8fb758bc2 | ||
|
|
be12e1dec5 | ||
|
|
cf775bf789 | ||
|
|
cb6157be7a | ||
|
|
0af8d67bd5 | ||
|
|
7ccb00701f | ||
|
|
4a2cdc26be | ||
|
|
3a5e362bd3 | ||
|
|
66a69f04c6 | ||
|
|
7ab0364a37 | ||
|
|
fb6c27e4e2 | ||
|
|
ab2df6ea1b | ||
|
|
33eca7e4f2 | ||
|
|
313a09b4b7 | ||
|
|
27fb3fc589 | ||
|
|
8660bcba72 | ||
|
|
bf0bdac1d3 | ||
|
|
ed5430ce9a |
237
BUILDING.txt
237
BUILDING.txt
@@ -1,5 +1,5 @@
|
|||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
** Building on Unix Platforms (including Cygwin)
|
** Building on Un*x Platforms (including Cygwin and OS X)
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
|
|
||||||
@@ -10,6 +10,9 @@ Build Requirements
|
|||||||
-- autoconf 2.56 or later
|
-- autoconf 2.56 or later
|
||||||
-- automake 1.7 or later
|
-- automake 1.7 or later
|
||||||
-- libtool 1.4 or later
|
-- libtool 1.4 or later
|
||||||
|
* If using Xcode 4.3 or later on OS X, autoconf and automake are no longer
|
||||||
|
provided. The easiest way to obtain them is from MacPorts
|
||||||
|
(http://www.macports.org/).
|
||||||
|
|
||||||
-- NASM (if building x86 or x86-64 SIMD extensions)
|
-- NASM (if building x86 or x86-64 SIMD extensions)
|
||||||
* 0.98, or 2.01 or later is required for a 32-bit build
|
* 0.98, or 2.01 or later is required for a 32-bit build
|
||||||
@@ -33,8 +36,20 @@ Build Requirements
|
|||||||
NOTE: the NASM build will fail if texinfo is not installed.
|
NOTE: the NASM build will fail if texinfo is not installed.
|
||||||
|
|
||||||
-- GCC v4.1 or later recommended for best performance
|
-- GCC v4.1 or later recommended for best performance
|
||||||
|
* Beginning with Xcode 4, Apple stopped distributing GCC and switched to
|
||||||
|
the LLVM compiler. Xcode v4.0 through v4.6 provides a GCC front end
|
||||||
|
called LLVM-GCC. Unfortunately, as of this writing, neither LLVM-GCC nor
|
||||||
|
the LLVM (clang) compiler produces optimal performance with libjpeg-turbo.
|
||||||
|
Building libjpeg-turbo with LLVM-GCC v4.2 results in a 10% performance
|
||||||
|
degradation when compressing using 64-bit code, relative to building
|
||||||
|
libjpeg-turbo with GCC v4.2. Building libjpeg-turbo with LLVM (clang)
|
||||||
|
results in a 20% performance degradation when compressing using 64-bit
|
||||||
|
code, relative to building libjpeg-turbo with GCC v4.2. If you are
|
||||||
|
running Snow Leopard or earlier, it is suggested that you continue to use
|
||||||
|
Xcode v3.2.6, which provides GCC v4.2. If you are using Lion or later, it
|
||||||
|
is suggested that you install Apple GCC v4.2 through MacPorts.
|
||||||
|
|
||||||
-- If building the TurboJPEG/OSS Java wrapper, JDK or OpenJDK 1.5 or later is
|
-- If building the TurboJPEG Java wrapper, JDK or OpenJDK 1.5 or later is
|
||||||
required. Some systems, such as OS X 10.4, Solaris 10 and later, and Red
|
required. Some systems, such as OS X 10.4, Solaris 10 and later, and Red
|
||||||
Hat Enterprise Linux 5 and later, have this pre-installed. On OS X 10.5 and
|
Hat Enterprise Linux 5 and later, have this pre-installed. On OS X 10.5 and
|
||||||
later, it will be necessary to install the Java Developer Package, which can
|
later, it will be necessary to install the Java Developer Package, which can
|
||||||
@@ -61,9 +76,9 @@ directory. For in-tree builds, these directories are the same.
|
|||||||
Building libjpeg-turbo
|
Building libjpeg-turbo
|
||||||
======================
|
======================
|
||||||
|
|
||||||
The following procedure will build libjpeg-turbo on Linux, FreeBSD, 32-bit
|
The following procedure will build libjpeg-turbo on Linux, FreeBSD, Cygwin, and
|
||||||
OS X, Cygwin, and Solaris/x86 systems (on Solaris, this generates a 32-bit
|
Solaris/x86 systems (on Solaris, this generates a 32-bit library. See below
|
||||||
library. See below for 64-bit build instructions.)
|
for 64-bit build instructions.)
|
||||||
|
|
||||||
cd {source_directory}
|
cd {source_directory}
|
||||||
autoreconf -fiv
|
autoreconf -fiv
|
||||||
@@ -71,40 +86,44 @@ library. See below for 64-bit build instructions.)
|
|||||||
sh {source_directory}/configure [additional configure flags]
|
sh {source_directory}/configure [additional configure flags]
|
||||||
make
|
make
|
||||||
|
|
||||||
NOTE: Running autoreconf in the source directory is only necessary if building
|
NOTE: Running autoreconf in the source directory is usually only necessary if
|
||||||
libjpeg-turbo from the SVN repository.
|
building libjpeg-turbo from the SVN repository.
|
||||||
|
|
||||||
This will generate the following files under .libs/
|
This will generate the following files under .libs/
|
||||||
|
|
||||||
libjpeg.a
|
libjpeg.a
|
||||||
Static link library for libjpeg-turbo
|
Static link library for the libjpeg API
|
||||||
|
|
||||||
libjpeg.so.{version} (Linux, Solaris)
|
libjpeg.so.{version} (Linux, Unix)
|
||||||
libjpeg.{version}.dylib (OS X)
|
libjpeg.{version}.dylib (OS X)
|
||||||
cygjpeg-{version}.dll (Cygwin)
|
cygjpeg-{version}.dll (Cygwin)
|
||||||
Shared library for libjpeg-turbo
|
Shared library for the libjpeg API
|
||||||
|
|
||||||
libjpeg.so (Linux, Solaris)
|
By default, {version} is 62.1.0, 7.1.0, or 8.0.2, depending on whether
|
||||||
|
libjpeg v6b (default), v7, or v8 emulation is enabled. If using Cygwin,
|
||||||
|
{version} is 62, 7, or 8.
|
||||||
|
|
||||||
|
libjpeg.so (Linux, Unix)
|
||||||
libjpeg.dylib (OS X)
|
libjpeg.dylib (OS X)
|
||||||
|
Development symlink for the libjpeg API
|
||||||
|
|
||||||
libjpeg.dll.a (Cygwin)
|
libjpeg.dll.a (Cygwin)
|
||||||
Development stub for libjpeg-turbo shared library
|
Import library for the libjpeg API
|
||||||
|
|
||||||
libturbojpeg.a
|
libturbojpeg.a
|
||||||
Static link library for TurboJPEG/OSS
|
Static link library for the TurboJPEG API
|
||||||
|
|
||||||
libturbojpeg.so (Linux, Solaris)
|
libturbojpeg.so.0.0.0 (Linux, Unix)
|
||||||
|
libturbojpeg.0.0.0.dylib (OS X)
|
||||||
|
cygturbojpeg-0.dll (Cygwin)
|
||||||
|
Shared library for the TurboJPEG API
|
||||||
|
|
||||||
|
libturbojpeg.so (Linux, Unix)
|
||||||
libturbojpeg.dylib (OS X)
|
libturbojpeg.dylib (OS X)
|
||||||
Shared library and development stub for TurboJPEG/OSS
|
Development symlink for the TurboJPEG API
|
||||||
|
|
||||||
cygturbojpeg.dll (Cygwin)
|
|
||||||
Shared library for TurboJPEG/OSS
|
|
||||||
|
|
||||||
libturbojpeg.dll.a (Cygwin)
|
libturbojpeg.dll.a (Cygwin)
|
||||||
Development stub for TurboJPEG/OSS shared library
|
Import library for the TurboJPEG API
|
||||||
|
|
||||||
{version} is 62.0.0, 7.0.0, or 8.0.2, depending on whether libjpeg v6b
|
|
||||||
(default), v7, or v8 emulation is enabled. If using Cygwin, {version} is
|
|
||||||
62, 7, or 8.
|
|
||||||
|
|
||||||
|
|
||||||
libjpeg v7 or v8 API/ABI Emulation
|
libjpeg v7 or v8 API/ABI Emulation
|
||||||
@@ -117,6 +136,16 @@ API/ABI-compatible with libjpeg v8. See README-turbo.txt for more information
|
|||||||
on libjpeg v7 and v8 emulation.
|
on libjpeg v7 and v8 emulation.
|
||||||
|
|
||||||
|
|
||||||
|
In-Memory Source/Destination Managers
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
When using libjpeg v6b or v7 API/ABI emulation, add --without-mem-srcdst to the
|
||||||
|
configure command line to build a version of libjpeg-turbo that lacks the
|
||||||
|
jpeg_mem_src() and jpeg_mem_dest() functions. These functions were not part of
|
||||||
|
the original libjpeg v6b and v7 APIs, so removing them ensures strict
|
||||||
|
conformance with those APIs. See README-turbo.txt for more information.
|
||||||
|
|
||||||
|
|
||||||
Arithmetic Coding Support
|
Arithmetic Coding Support
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
@@ -129,13 +158,12 @@ add --without-arith-enc or --without-arith-dec to the configure command line to
|
|||||||
disable encoding or decoding (respectively.)
|
disable encoding or decoding (respectively.)
|
||||||
|
|
||||||
|
|
||||||
TurboJPEG/OSS Java Wrapper
|
TurboJPEG Java Wrapper
|
||||||
--------------------------
|
----------------------
|
||||||
Add --with-java to the configure command line to incorporate an optional Java
|
Add --with-java to the configure command line to incorporate an optional Java
|
||||||
Native Interface wrapper into the TurboJPEG/OSS dynamic library and build the
|
Native Interface wrapper into the TurboJPEG shared library and build the Java
|
||||||
Java front-end classes to support it. This allows the TurboJPEG/OSS dynamic
|
front-end classes to support it. This allows the TurboJPEG shared library to
|
||||||
library to be used directly from Java applications. See java/README for more
|
be used directly from Java applications. See java/README for more details.
|
||||||
details.
|
|
||||||
|
|
||||||
You can set the JAVAC, JAR, and JAVA configure variables to specify
|
You can set the JAVAC, JAR, and JAVA configure variables to specify
|
||||||
alternate commands for javac, jar, and java (respectively.) You can also
|
alternate commands for javac, jar, and java (respectively.) You can also
|
||||||
@@ -161,13 +189,14 @@ For example,
|
|||||||
will install the header files in /usr/local/include and the library files in
|
will install the header files in /usr/local/include and the library files in
|
||||||
/usr/local/lib64. If 'prefix' and 'libdir' are not specified, then the default
|
/usr/local/lib64. If 'prefix' and 'libdir' are not specified, then the default
|
||||||
is to install the header files in /opt/libjpeg-turbo/include and the library
|
is to install the header files in /opt/libjpeg-turbo/include and the library
|
||||||
files in /opt/libjpeg-turbo/lib.
|
files in /opt/libjpeg-turbo/lib32 (32-bit) or /opt/libjpeg-turbo/lib64
|
||||||
|
(64-bit.)
|
||||||
|
|
||||||
NOTE: You can specify a prefix of /usr and a libdir of, for instance,
|
NOTE: You can specify a prefix of /usr and a libdir of, for instance,
|
||||||
/usr/lib64 to overwrite the system's version of libjpeg. If you do this,
|
/usr/lib64 to overwrite the system's version of libjpeg. If you do this,
|
||||||
however, then be sure to BACK UP YOUR SYSTEM'S INSTALLATION OF LIBJPEG before
|
however, then be sure to BACK UP YOUR SYSTEM'S INSTALLATION OF LIBJPEG before
|
||||||
overwriting it. It is recommended that you instead install libjpeg-turbo into
|
overwriting it. It is recommended that you instead install libjpeg-turbo into
|
||||||
a non-system directory and manipulate the LD_LIBRARY_PATH or create sym links
|
a non-system directory and manipulate the LD_LIBRARY_PATH or create symlinks
|
||||||
to force applications to use libjpeg-turbo instead of libjpeg. See
|
to force applications to use libjpeg-turbo instead of libjpeg. See
|
||||||
README-turbo.txt for more information.
|
README-turbo.txt for more information.
|
||||||
|
|
||||||
@@ -177,8 +206,8 @@ Build Recipes
|
|||||||
=============
|
=============
|
||||||
|
|
||||||
|
|
||||||
32-bit Library Build on 64-bit Linux
|
32-bit Build on 64-bit Linux
|
||||||
------------------------------------
|
----------------------------
|
||||||
|
|
||||||
Add
|
Add
|
||||||
|
|
||||||
@@ -187,8 +216,8 @@ Add
|
|||||||
to the configure command line.
|
to the configure command line.
|
||||||
|
|
||||||
|
|
||||||
64-bit Library Build on 64-bit OS X
|
64-bit Build on 64-bit OS X
|
||||||
-----------------------------------
|
---------------------------
|
||||||
|
|
||||||
Add
|
Add
|
||||||
|
|
||||||
@@ -198,8 +227,8 @@ to the configure command line. NASM 2.07 or later from MacPorts must be
|
|||||||
installed.
|
installed.
|
||||||
|
|
||||||
|
|
||||||
32-bit Library Build on 64-bit OS X
|
32-bit Build on 64-bit OS X
|
||||||
-----------------------------------
|
---------------------------
|
||||||
|
|
||||||
Add
|
Add
|
||||||
|
|
||||||
@@ -208,8 +237,8 @@ Add
|
|||||||
to the configure command line.
|
to the configure command line.
|
||||||
|
|
||||||
|
|
||||||
64-bit Backward-Compatible Library Build on 64-bit OS X
|
64-bit Backward-Compatible Build on 64-bit OS X
|
||||||
-------------------------------------------------------
|
-----------------------------------------------
|
||||||
|
|
||||||
Add
|
Add
|
||||||
|
|
||||||
@@ -223,8 +252,8 @@ to the configure command line. The OS X 10.4 SDK, and NASM 2.07 or later from
|
|||||||
MacPorts, must be installed.
|
MacPorts, must be installed.
|
||||||
|
|
||||||
|
|
||||||
32-bit Backward-Compatible Library Build on OS X
|
32-bit Backward-Compatible Build on OS X
|
||||||
------------------------------------------------
|
----------------------------------------
|
||||||
|
|
||||||
Add
|
Add
|
||||||
|
|
||||||
@@ -247,8 +276,8 @@ Add
|
|||||||
to the configure command line.
|
to the configure command line.
|
||||||
|
|
||||||
|
|
||||||
32-bit Library Build on 64-bit FreeBSD
|
32-bit Build on 64-bit FreeBSD
|
||||||
--------------------------------------
|
------------------------------
|
||||||
|
|
||||||
Add
|
Add
|
||||||
|
|
||||||
@@ -309,16 +338,27 @@ Additional build requirements:
|
|||||||
|
|
||||||
Set the following shell variables for simplicity:
|
Set the following shell variables for simplicity:
|
||||||
|
|
||||||
|
Xcode 3.2.x / iOS 4.3 SDK:
|
||||||
IOS_PLATFORMDIR="/Developer/Platforms/iPhoneOS.platform"
|
IOS_PLATFORMDIR="/Developer/Platforms/iPhoneOS.platform"
|
||||||
IOS_SYSROOT="$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS4.3.sdk"
|
IOS_SYSROOT="$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS4.3.sdk"
|
||||||
IOS_GCC="$IOS_PLATFORMDIR/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2"
|
IOS_GCC="$IOS_PLATFORMDIR/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2"
|
||||||
|
|
||||||
|
Xcode 4.5.x / iOS 6.0 SDK:
|
||||||
|
IOS_PLATFORMDIR="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform"
|
||||||
|
IOS_SYSROOT="$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS6.0.sdk"
|
||||||
|
IOS_GCC="$IOS_PLATFORMDIR/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2"
|
||||||
|
|
||||||
ARM v6 only (up to and including iPhone 3G):
|
ARM v6 only (up to and including iPhone 3G):
|
||||||
|
[NOTE: Requires Xcode 4.4.x or earlier]
|
||||||
IOS_CFLAGS="-march=armv6 -mcpu=arm1176jzf-s -mfpu=vfp"
|
IOS_CFLAGS="-march=armv6 -mcpu=arm1176jzf-s -mfpu=vfp"
|
||||||
|
|
||||||
ARM v7 only (iPhone 3GS and newer, iPad):
|
ARM v7 only (iPhone 3GS-4S, iPad 1st-3rd Generation):
|
||||||
IOS_CFLAGS="-march=armv7 -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon"
|
IOS_CFLAGS="-march=armv7 -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon"
|
||||||
|
|
||||||
|
ARM v7s only (iPhone 5, iPad 4th Generation):
|
||||||
|
[NOTE: Requires Xcode 4.5 or later]
|
||||||
|
IOS_CFLAGS="-march=armv7s -mcpu=swift -mtune=swift -mfpu=neon"
|
||||||
|
|
||||||
Follow the procedure under "Building libjpeg-turbo" above, adding
|
Follow the procedure under "Building libjpeg-turbo" above, adding
|
||||||
|
|
||||||
--host arm-apple-darwin10 --enable-static --disable-shared \
|
--host arm-apple-darwin10 --enable-static --disable-shared \
|
||||||
@@ -328,8 +368,14 @@ Follow the procedure under "Building libjpeg-turbo" above, adding
|
|||||||
|
|
||||||
to the configure command line.
|
to the configure command line.
|
||||||
|
|
||||||
Once built, lipo can be used to combine the ARM v6 and v7 variants into a
|
Once built, lipo can be used to combine the ARM v6, v7, and/or v7s variants
|
||||||
universal library.
|
into a universal library.
|
||||||
|
|
||||||
|
NOTE: If you are building libjpeg-turbo from the "official" project tarball,
|
||||||
|
then it is highly likely that you will need to run 'autoreconf -fiv' in the
|
||||||
|
source tree prior to building ARM v7 or v7s iOS binaries using the techniques
|
||||||
|
described above. Otherwise, you may get a libtool error such as "unable to
|
||||||
|
infer tagged configuration."
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
@@ -373,8 +419,8 @@ Build Requirements
|
|||||||
-- NASM (http://www.nasm.us/) 0.98 or later (NASM 2.05 or later is required for
|
-- NASM (http://www.nasm.us/) 0.98 or later (NASM 2.05 or later is required for
|
||||||
a 64-bit build)
|
a 64-bit build)
|
||||||
|
|
||||||
-- If building the TurboJPEG/OSS Java wrapper, JDK 1.5 or later is required.
|
-- If building the TurboJPEG Java wrapper, JDK 1.5 or later is required. This
|
||||||
This can be downloaded from http://www.java.com.
|
can be downloaded from http://www.java.com.
|
||||||
|
|
||||||
|
|
||||||
==================
|
==================
|
||||||
@@ -409,17 +455,17 @@ on which version of cl.exe is in the PATH.
|
|||||||
The following files will be generated under {build_directory}:
|
The following files will be generated under {build_directory}:
|
||||||
|
|
||||||
jpeg-static.lib
|
jpeg-static.lib
|
||||||
Static link library for libjpeg-turbo
|
Static link library for the libjpeg API
|
||||||
sharedlib/jpeg{version}.dll
|
sharedlib/jpeg{version}.dll
|
||||||
DLL for libjpeg-turbo
|
DLL for the libjpeg API
|
||||||
sharedlib/jpeg.lib
|
sharedlib/jpeg.lib
|
||||||
Import library for libjpeg-turbo DLL
|
Import library for the libjpeg API
|
||||||
turbojpeg-static.lib
|
turbojpeg-static.lib
|
||||||
Static link library for TurboJPEG/OSS
|
Static link library for the TurboJPEG API
|
||||||
turbojpeg.dll
|
turbojpeg.dll
|
||||||
DLL for TurboJPEG/OSS
|
DLL for the TurboJPEG API
|
||||||
turbojpeg.lib
|
turbojpeg.lib
|
||||||
Import library for TurboJPEG/OSS DLL
|
Import library for the TurboJPEG API
|
||||||
|
|
||||||
{version} is 62, 7, or 8, depending on whether libjpeg v6b (default), v7, or
|
{version} is 62, 7, or 8, depending on whether libjpeg v6b (default), v7, or
|
||||||
v8 emulation is enabled.
|
v8 emulation is enabled.
|
||||||
@@ -442,17 +488,17 @@ build of libjpeg-turbo.
|
|||||||
This will generate the following files under {build_directory}:
|
This will generate the following files under {build_directory}:
|
||||||
|
|
||||||
{configuration}/jpeg-static.lib
|
{configuration}/jpeg-static.lib
|
||||||
Static link library for libjpeg-turbo
|
Static link library for the libjpeg API
|
||||||
sharedlib/{configuration}/jpeg{version}.dll
|
sharedlib/{configuration}/jpeg{version}.dll
|
||||||
DLL for libjpeg-turbo
|
DLL for the libjpeg API
|
||||||
sharedlib/{configuration}/jpeg.lib
|
sharedlib/{configuration}/jpeg.lib
|
||||||
Import library for libjpeg-turbo DLL
|
Import library for the libjpeg API
|
||||||
{configuration}/turbojpeg-static.lib
|
{configuration}/turbojpeg-static.lib
|
||||||
Static link library for TurboJPEG/OSS
|
Static link library for the TurboJPEG API
|
||||||
{configuration}/turbojpeg.dll
|
{configuration}/turbojpeg.dll
|
||||||
DLL for TurboJPEG/OSS
|
DLL for the TurboJPEG API
|
||||||
{configuration}/turbojpeg.lib
|
{configuration}/turbojpeg.lib
|
||||||
Import library for TurboJPEG/OSS DLL
|
Import library for the TurboJPEG API
|
||||||
|
|
||||||
{configuration} is Debug, Release, RelWithDebInfo, or MinSizeRel, depending on
|
{configuration} is Debug, Release, RelWithDebInfo, or MinSizeRel, depending on
|
||||||
the configuration you built in the IDE, and {version} is 62, 7, or 8,
|
the configuration you built in the IDE, and {version} is 62, 7, or 8,
|
||||||
@@ -469,17 +515,17 @@ MinGW
|
|||||||
This will generate the following files under {build_directory}
|
This will generate the following files under {build_directory}
|
||||||
|
|
||||||
libjpeg.a
|
libjpeg.a
|
||||||
Static link library for libjpeg-turbo
|
Static link library for the libjpeg API
|
||||||
sharedlib/libjpeg-{version}.dll
|
sharedlib/libjpeg-{version}.dll
|
||||||
DLL for libjpeg-turbo
|
DLL for the libjpeg API
|
||||||
sharedlib/libjpeg.dll.a
|
sharedlib/libjpeg.dll.a
|
||||||
Import library for libjpeg-turbo DLL
|
Import library for the libjpeg API
|
||||||
libturbojpeg.a
|
libturbojpeg.a
|
||||||
Static link library for TurboJPEG/OSS
|
Static link library for the TurboJPEG API
|
||||||
libturbojpeg.dll
|
libturbojpeg.dll
|
||||||
DLL for TurboJPEG/OSS
|
DLL for the TurboJPEG API
|
||||||
libturbojpeg.dll.a
|
libturbojpeg.dll.a
|
||||||
Import library for TurboJPEG/OSS DLL
|
Import library for the TurboJPEG API
|
||||||
|
|
||||||
{version} is 62, 7, or 8, depending on whether libjpeg v6b (default), v7, or
|
{version} is 62, 7, or 8, depending on whether libjpeg v6b (default), v7, or
|
||||||
v8 emulation is enabled.
|
v8 emulation is enabled.
|
||||||
@@ -503,6 +549,16 @@ API/ABI-compatible with libjpeg v8. See README-turbo.txt for more information
|
|||||||
on libjpeg v7 and v8 emulation.
|
on libjpeg v7 and v8 emulation.
|
||||||
|
|
||||||
|
|
||||||
|
In-Memory Source/Destination Managers
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
When using libjpeg v6b or v7 API/ABI emulation, add -DWITH_MEM_SRCDST=0 to the
|
||||||
|
CMake command line to build a version of libjpeg-turbo that lacks the
|
||||||
|
jpeg_mem_src() and jpeg_mem_dest() functions. These functions were not part of
|
||||||
|
the original libjpeg v6b and v7 APIs, so removing them ensures strict
|
||||||
|
conformance with those APIs. See README-turbo.txt for more information.
|
||||||
|
|
||||||
|
|
||||||
Arithmetic Coding Support
|
Arithmetic Coding Support
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
@@ -515,13 +571,12 @@ add "-DWITH_ARITH_ENC=0" or "-DWITH_ARITH_DEC=0" to the cmake command line to
|
|||||||
disable encoding or decoding (respectively.)
|
disable encoding or decoding (respectively.)
|
||||||
|
|
||||||
|
|
||||||
TurboJPEG/OSS Java Wrapper
|
TurboJPEG Java Wrapper
|
||||||
--------------------------
|
----------------------
|
||||||
Add "-DWITH_JAVA=1" to the cmake command line to incorporate an optional Java
|
Add "-DWITH_JAVA=1" to the cmake command line to incorporate an optional Java
|
||||||
Native Interface wrapper into the TurboJPEG/OSS dynamic library and build the
|
Native Interface wrapper into the TurboJPEG shared library and build the Java
|
||||||
Java front-end classes to support it. This allows the TurboJPEG/OSS dynamic
|
front-end classes to support it. This allows the TurboJPEG shared library to
|
||||||
library to be used directly from Java applications. See java/README for more
|
be used directly from Java applications. See java/README for more details.
|
||||||
details.
|
|
||||||
|
|
||||||
If you are using CMake 2.8, you can set the Java_JAVAC_EXECUTABLE,
|
If you are using CMake 2.8, you can set the Java_JAVAC_EXECUTABLE,
|
||||||
Java_JAVA_EXECUTABLE, and Java_JAR_EXECUTABLE CMake variables to specify
|
Java_JAVA_EXECUTABLE, and Java_JAR_EXECUTABLE CMake variables to specify
|
||||||
@@ -622,8 +677,8 @@ MinGW Build on Linux
|
|||||||
The following commands can be used to create various types of release packages:
|
The following commands can be used to create various types of release packages:
|
||||||
|
|
||||||
|
|
||||||
Unix
|
Unix/Linux
|
||||||
----
|
----------
|
||||||
|
|
||||||
make rpm
|
make rpm
|
||||||
|
|
||||||
@@ -642,6 +697,9 @@ make dmg
|
|||||||
|
|
||||||
Create Macintosh package/disk image. This requires the PackageMaker
|
Create Macintosh package/disk image. This requires the PackageMaker
|
||||||
application, which must be installed in /Developer/Applications/Utilities.
|
application, which must be installed in /Developer/Applications/Utilities.
|
||||||
|
Note that PackageMaker is not included in recent releases of Xcode, but it
|
||||||
|
can be obtained by downloading the "Auxiliary Tools for Xcode" package from
|
||||||
|
http://developer.apple.com/downloads.
|
||||||
|
|
||||||
make udmg [BUILDDIR32={32-bit build directory}]
|
make udmg [BUILDDIR32={32-bit build directory}]
|
||||||
|
|
||||||
@@ -656,35 +714,24 @@ make udmg [BUILDDIR32={32-bit build directory}]
|
|||||||
make iosdmg [BUILDDIR32={32-bit build directory}] \
|
make iosdmg [BUILDDIR32={32-bit build directory}] \
|
||||||
[BUILDDIRARMV6={ARM v6 build directory}] \
|
[BUILDDIRARMV6={ARM v6 build directory}] \
|
||||||
[BUILDDIRARMV7={ARM v7 build directory}] \
|
[BUILDDIRARMV7={ARM v7 build directory}] \
|
||||||
|
[BUILDDIRARMV7S={ARM v7s build directory}]
|
||||||
|
|
||||||
On OS X systems, this creates a Macintosh package and disk image in which the
|
On OS X systems, this creates a Macintosh package and disk image in which the
|
||||||
libjpeg-turbo static libraries contain ARM architectures necessary to build
|
libjpeg-turbo static libraries contain ARM architectures necessary to build
|
||||||
iOS applications. If building on an x86-64 system, the binaries will also
|
iOS applications. If building on an x86-64 system, the binaries will also
|
||||||
contain the i386 architecture, as with 'make udmg' above. You should first
|
contain the i386 architecture, as with 'make udmg' above. You should first
|
||||||
configure ARM v6 and ARM v7 out-of-tree builds of libjpeg-turbo (see
|
configure ARM v6, ARM v7, and/or ARM v7s out-of-tree builds of libjpeg-turbo
|
||||||
"Building libjpeg-turbo for iOS" above.) If you are building an x86-64
|
(see "Building libjpeg-turbo for iOS" above.) If you are building an x86-64
|
||||||
version of libjpeg-turbo, you should configure a 32-bit out-of-tree build as
|
version of libjpeg-turbo, you should configure a 32-bit out-of-tree build as
|
||||||
well. Next, build libjpeg-turbo as you would normally, using an out-of-tree
|
well. Next, build libjpeg-turbo as you would normally, using an out-of-tree
|
||||||
build. When it is built, run 'make iosdmg' from the build directory. The
|
build. When it is built, run 'make iosdmg' from the build directory. The
|
||||||
build system will look for the ARM v6 build under {source_directory}/iosarmv6
|
build system will look for the ARM v6 build under {source_directory}/iosarmv6
|
||||||
by default, the ARM v7 build under {source_directory}/iosarmv7 by default,
|
by default, the ARM v7 build under {source_directory}/iosarmv7 by default,
|
||||||
and (if applicable) the 32-bit build under {source_directory}/osxx86 by
|
the ARM v7s build under {source_directory}/iosarmv7s by default, and (if
|
||||||
default, but you can override this by setting the BUILDDIR32, BUILDDIRARMV6,
|
applicable) the 32-bit build under {source_directory}/osxx86 by default, but
|
||||||
and/or BUILDDIRARMV7 variables on the make command line as shown above.
|
you can override this by setting the BUILDDIR32, BUILDDIRARMV6,
|
||||||
|
BUILDDIRARMV7, and/or BUILDDIRARMV7S variables on the make command line as
|
||||||
make sunpkg
|
shown above.
|
||||||
|
|
||||||
Build a Solaris package. This requires pkgmk, pkgtrans, and bzip2.
|
|
||||||
|
|
||||||
make csunpkg [BUILDDIR32={32-bit build directory}]
|
|
||||||
|
|
||||||
On 64-bit Solaris systems, this creates a combined package that contains
|
|
||||||
both 32-bit and 64-bit libraries. You should first configure a 32-bit
|
|
||||||
out-of-tree build of libjpeg-turbo, then configure a 64-bit out-of-tree
|
|
||||||
build, then run 'make csunpkg' from the 64-bit build directory. The build
|
|
||||||
system will look for the 32-bit build under {source_directory}/solx86 by
|
|
||||||
default, but you can override this by setting the BUILDDIR32 variable on the
|
|
||||||
make command line as shown above.
|
|
||||||
|
|
||||||
make cygwinpkg
|
make cygwinpkg
|
||||||
|
|
||||||
@@ -733,11 +780,11 @@ Invoking 'make testclean' or 'nmake testclean' (if using NMake) or building
|
|||||||
the 'testclean' target (if using the Visual Studio IDE) will clean up the
|
the 'testclean' target (if using the Visual Studio IDE) will clean up the
|
||||||
output images generated by 'make test'.
|
output images generated by 'make test'.
|
||||||
|
|
||||||
On Unix/Linux platforms, more extensive tests of the TurboJPEG/OSS C and Java
|
On Unix/Linux platforms, more extensive tests of the TurboJPEG C and Java
|
||||||
wrappers can be run by invoking 'make tjtest'. These extended TurboJPEG tests
|
wrappers can be run by invoking 'make tjtest'. These extended TurboJPEG tests
|
||||||
essentially iterate through all of the available features of the TurboJPEG APIs
|
essentially iterate through all of the available features of the TurboJPEG APIs
|
||||||
that are not covered by the TurboJPEG unit tests (this includes the lossless
|
that are not covered by the TurboJPEG unit tests (this includes the lossless
|
||||||
transform options) and compare the images generated by each feature to images
|
transform options) and compare the images generated by each feature to images
|
||||||
generated using the equivalent feature in the libjpeg API. The extended
|
generated using the equivalent feature in the libjpeg API. The extended
|
||||||
TurboJPEG tests are meant to test for regressions in the TurboJPEG wrappers,
|
TurboJPEG tests are meant to test for regressions in the TurboJPEG wrappers,
|
||||||
not in the underlying libjpeg-turbo library.
|
not in the underlying libjpeg API library.
|
||||||
|
|||||||
205
CMakeLists.txt
205
CMakeLists.txt
@@ -5,15 +5,21 @@
|
|||||||
cmake_minimum_required(VERSION 2.6)
|
cmake_minimum_required(VERSION 2.6)
|
||||||
|
|
||||||
project(libjpeg-turbo C)
|
project(libjpeg-turbo C)
|
||||||
set(VERSION 1.2.1)
|
set(VERSION 1.3.0)
|
||||||
|
|
||||||
if(MINGW OR CYGWIN)
|
if(MINGW OR CYGWIN)
|
||||||
execute_process(COMMAND "date" "+%Y%m%d" OUTPUT_VARIABLE BUILD)
|
execute_process(COMMAND "date" "+%Y%m%d" OUTPUT_VARIABLE BUILD)
|
||||||
string(REGEX REPLACE "\n" "" BUILD ${BUILD})
|
string(REGEX REPLACE "\n" "" BUILD ${BUILD})
|
||||||
elseif(WIN32)
|
elseif(WIN32)
|
||||||
execute_process(COMMAND "${CMAKE_SOURCE_DIR}/cmakescripts/getdate.bat"
|
execute_process(COMMAND "wmic.exe" "os" "get" "LocalDateTime" OUTPUT_VARIABLE
|
||||||
OUTPUT_VARIABLE BUILD)
|
BUILD)
|
||||||
string(REGEX REPLACE "\n" "" BUILD ${BUILD})
|
string(REGEX REPLACE "[^0-9]" "" BUILD "${BUILD}")
|
||||||
|
if (BUILD STREQUAL "")
|
||||||
|
execute_process(COMMAND "cmd.exe" "/C" "DATE" "/T" OUTPUT_VARIABLE BUILD)
|
||||||
|
string(REGEX REPLACE ".*[ ]([0-9]*)[/.]([0-9]*)[/.]([0-9]*).*" "\\3\\2\\1" BUILD "${BUILD}")
|
||||||
|
else()
|
||||||
|
string(SUBSTRING "${BUILD}" 0 8 BUILD)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Platform not supported by this build system. Use autotools instead.")
|
message(FATAL_ERROR "Platform not supported by this build system. Use autotools instead.")
|
||||||
endif()
|
endif()
|
||||||
@@ -39,7 +45,8 @@ option(WITH_ARITH_ENC "Include arithmetic encoding support" TRUE)
|
|||||||
option(WITH_ARITH_DEC "Include arithmetic decoding support" TRUE)
|
option(WITH_ARITH_DEC "Include arithmetic decoding support" TRUE)
|
||||||
option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b)" FALSE)
|
option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b)" FALSE)
|
||||||
option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b)" FALSE)
|
option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b)" FALSE)
|
||||||
option(WITH_JAVA "Build Java wrapper for the TurboJPEG/OSS library" FALSE)
|
option(WITH_MEM_SRCDST "Include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI" TRUE)
|
||||||
|
option(WITH_JAVA "Build Java wrapper for the TurboJPEG library" FALSE)
|
||||||
|
|
||||||
if(WITH_ARITH_ENC)
|
if(WITH_ARITH_ENC)
|
||||||
set(C_ARITH_CODING_SUPPORTED 1)
|
set(C_ARITH_CODING_SUPPORTED 1)
|
||||||
@@ -56,14 +63,19 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_JAVA)
|
if(WITH_JAVA)
|
||||||
message(STATUS "TurboJPEG/OSS Java wrapper enabled")
|
message(STATUS "TurboJPEG Java wrapper enabled")
|
||||||
else()
|
else()
|
||||||
message(STATUS "TurboJPEG/OSS Java wrapper disabled")
|
message(STATUS "TurboJPEG Java wrapper disabled")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(SO_AGE 0)
|
||||||
|
if(WITH_MEM_SRCDST)
|
||||||
|
set(SO_AGE 1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(JPEG_LIB_VERSION 62)
|
set(JPEG_LIB_VERSION 62)
|
||||||
set(DLL_VERSION ${JPEG_LIB_VERSION})
|
set(DLL_VERSION ${JPEG_LIB_VERSION})
|
||||||
set(FULLVERSION ${DLL_VERSION}.0.0)
|
set(FULLVERSION ${DLL_VERSION}.${SO_AGE}.0)
|
||||||
if(WITH_JPEG8)
|
if(WITH_JPEG8)
|
||||||
set(JPEG_LIB_VERSION 80)
|
set(JPEG_LIB_VERSION 80)
|
||||||
set(DLL_VERSION 8)
|
set(DLL_VERSION 8)
|
||||||
@@ -72,10 +84,17 @@ if(WITH_JPEG8)
|
|||||||
elseif(WITH_JPEG7)
|
elseif(WITH_JPEG7)
|
||||||
set(JPEG_LIB_VERSION 70)
|
set(JPEG_LIB_VERSION 70)
|
||||||
set(DLL_VERSION 7)
|
set(DLL_VERSION 7)
|
||||||
set(FULLVERSION ${DLL_VERSION}.0.0)
|
set(FULLVERSION ${DLL_VERSION}.${SO_AGE}.0)
|
||||||
message(STATUS "Emulating libjpeg v7 API/ABI")
|
message(STATUS "Emulating libjpeg v7 API/ABI")
|
||||||
endif(WITH_JPEG8)
|
endif(WITH_JPEG8)
|
||||||
|
|
||||||
|
if(WITH_MEM_SRCDST)
|
||||||
|
set(MEM_SRCDST_SUPPORTED 1)
|
||||||
|
message(STATUS "In-memory source/destination managers enabled")
|
||||||
|
else()
|
||||||
|
message(STATUS "In-memory source/destination managers disabled")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
# Use the static C library for all build types
|
# Use the static C library for all build types
|
||||||
foreach(var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
foreach(var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
||||||
@@ -103,6 +122,22 @@ else()
|
|||||||
message(STATUS "32-bit build")
|
message(STATUS "32-bit build")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||||
|
if(MSVC)
|
||||||
|
set(CMAKE_INSTALL_PREFIX_DEFAULT ${CMAKE_PROJECT_NAME})
|
||||||
|
else()
|
||||||
|
set(CMAKE_INSTALL_PREFIX_DEFAULT ${CMAKE_PROJECT_NAME}-gcc)
|
||||||
|
endif()
|
||||||
|
if(64BIT)
|
||||||
|
set(CMAKE_INSTALL_PREFIX_DEFAULT ${CMAKE_INSTALL_PREFIX_DEFAULT}64)
|
||||||
|
endif()
|
||||||
|
set(CMAKE_INSTALL_PREFIX "c:/${CMAKE_INSTALL_PREFIX_DEFAULT}" CACHE PATH
|
||||||
|
"Directory into which to install libjpeg-turbo (default: c:/${CMAKE_INSTALL_PREFIX_DEFAULT})"
|
||||||
|
FORCE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "Install directory = ${CMAKE_INSTALL_PREFIX}")
|
||||||
|
|
||||||
configure_file(win/jconfig.h.in jconfig.h)
|
configure_file(win/jconfig.h.in jconfig.h)
|
||||||
configure_file(win/config.h.in config.h)
|
configure_file(win/config.h.in config.h)
|
||||||
|
|
||||||
@@ -243,6 +278,39 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
|
set(MD5_JPEG_INT 9a68f56bc76e466aa7e52f415d0f4a5f)
|
||||||
|
set(MD5_JPEG_FAST 0e1502e7fa421835e376a314fac2a39f)
|
||||||
|
set(MD5_JPEG_FAST_100 7bf72a8e741d64eecb960c97323af77c)
|
||||||
|
set(MD5_JPEG_FLOAT d1623885ffafcd40c684af09e3d65cd5)
|
||||||
|
set(MD5_JPEG_FLOAT_NOSIMD fb4884c35f8273f498cb32879de5c455)
|
||||||
|
set(MD5_JPEG_INT_GRAY 72b51f894b8f4a10b3ee3066770aa38d)
|
||||||
|
set(MD5_PPM_INT d1ed0d11f076b842525271647716aeb8)
|
||||||
|
set(MD5_PPM_FAST 048298a2d2410261c0533cb97bcfef23)
|
||||||
|
set(MD5_PPM_FLOAT 7f5b446ee36b2630e06785b8d42af15f)
|
||||||
|
set(MD5_PPM_FLOAT_NOSIMD 64072f1dbdc5b3a187777788604971a5)
|
||||||
|
set(MD5_PPM_INT_2_1 9f9de8c0612f8d06869b960b05abf9c9)
|
||||||
|
set(MD5_PPM_INT_15_8 b6875bc070720b899566cc06459b63b7)
|
||||||
|
set(MD5_PPM_INT_7_4 06a177eae05f164fac57f7a2c346ee87)
|
||||||
|
set(MD5_PPM_INT_13_8 bc3452573c8152f6ae552939ee19f82f)
|
||||||
|
set(MD5_PPM_INT_3_2 f5a8b88a8a7f96016f04d259cf82ed67)
|
||||||
|
set(MD5_PPM_INT_11_8 d8cc73c0aaacd4556569b59437ba00a5)
|
||||||
|
set(MD5_PPM_INT_5_4 32775dd9ad2ab90f4c5b219b53e0c86c)
|
||||||
|
set(MD5_PPM_INT_9_8 d25e61bc7eac0002f5b393aa223747b6)
|
||||||
|
set(MD5_PPM_INT_7_8 ddb564b7c74a09494016d6cd7502a946)
|
||||||
|
set(MD5_PPM_INT_3_4 8ed8e68808c3fbc4ea764fc9d2968646)
|
||||||
|
set(MD5_PPM_INT_5_8 a3363274999da2366a024efae6d16c9b)
|
||||||
|
set(MD5_PPM_INT_1_2 e692a315cea26b988c8e8b29a5dbcd81)
|
||||||
|
set(MD5_PPM_INT_3_8 79eca9175652ced755155c90e785a996)
|
||||||
|
set(MD5_PPM_INT_1_4 79cd778f8bf1a117690052cacdd54eca)
|
||||||
|
set(MD5_PPM_INT_1_8 391b3d4aca640c8567d6f8745eb2142f)
|
||||||
|
set(MD5_PPM_FAST_1_2 f30bcf6d32ccd44cbdd9aeaacbd9454f)
|
||||||
|
set(MD5_BMP_256 4980185e3776e89bd931736e1cddeee6)
|
||||||
|
set(MD5_JPEG_ARI e986fb0a637a8d833d96e8a6d6d84ea1)
|
||||||
|
set(MD5_PPM_ARI 72b59a99bcf1de24c5b27d151bde2437)
|
||||||
|
set(MD5_JPEG_PROG 1c4afddc05c0a43489ee54438a482d92)
|
||||||
|
set(MD5_JPEG_CROP b4197f377e621c4e9b1d20471432610d)
|
||||||
|
|
||||||
if(WITH_JAVA)
|
if(WITH_JAVA)
|
||||||
add_test(TJUnitTest ${JAVA_RUNTIME} -cp java/${OBJDIR}turbojpeg.jar -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR} TJUnitTest)
|
add_test(TJUnitTest ${JAVA_RUNTIME} -cp java/${OBJDIR}turbojpeg.jar -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR} TJUnitTest)
|
||||||
add_test(TJUnitTest-yuv ${JAVA_RUNTIME} -cp java/${OBJDIR}turbojpeg.jar -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR} TJUnitTest -yuv)
|
add_test(TJUnitTest-yuv ${JAVA_RUNTIME} -cp java/${OBJDIR}turbojpeg.jar -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR} TJUnitTest -yuv)
|
||||||
@@ -253,121 +321,111 @@ add_test(tjunittest tjunittest)
|
|||||||
add_test(tjunittest-alloc tjunittest -alloc)
|
add_test(tjunittest-alloc tjunittest -alloc)
|
||||||
add_test(tjunittest-yuv tjunittest -yuv)
|
add_test(tjunittest-yuv tjunittest -yuv)
|
||||||
add_test(cjpeg-int sharedlib/cjpeg -dct int -outfile testoutint.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-int sharedlib/cjpeg -dct int -outfile testoutint.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
add_test(cjpeg-int-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg testoutint.jpg)
|
add_test(cjpeg-int-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT} -DFILE=testoutint.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(cjpeg-fast sharedlib/cjpeg -dct fast -opt -outfile testoutfst.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-fast sharedlib/cjpeg -dct fast -opt -outfile testoutfst.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
add_test(cjpeg-fast-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst.jpg testoutfst.jpg)
|
add_test(cjpeg-fast-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FAST} -DFILE=testoutfst.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(cjpeg-fast-100 sharedlib/cjpeg -dct fast -quality 100 -opt -outfile testoutfst100.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-fast-100 sharedlib/cjpeg -dct fast -quality 100 -opt -outfile testoutfst100.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
add_test(cjpeg-fast-100-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst100.jpg testoutfst100.jpg)
|
add_test(cjpeg-fast-100-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FAST_100} -DFILE=testoutfst100.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(cjpeg-float sharedlib/cjpeg -dct float -outfile testoutflt.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-float sharedlib/cjpeg -dct float -outfile testoutflt.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
if(WITH_SIMD)
|
if(WITH_SIMD)
|
||||||
add_test(cjpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgflt.jpg testoutflt.jpg)
|
add_test(cjpeg-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FLOAT} -DFILE=testoutflt.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
else()
|
else()
|
||||||
add_test(cjpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgflt-nosimd.jpg testoutflt.jpg)
|
add_test(cjpeg-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FLOAT_NOSIMD} -DFILE=testoutflt.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
endif()
|
endif()
|
||||||
add_test(cjpeg-int-gray sharedlib/cjpeg -dct int -grayscale -outfile testoutgray.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-int-gray sharedlib/cjpeg -dct int -grayscale -outfile testoutgray.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
add_test(cjpeg-int-gray-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimggray.jpg testoutgray.jpg)
|
add_test(cjpeg-int-gray-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT_GRAY} -DFILE=testoutgray.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(djpeg-int sharedlib/djpeg -dct int -fast -ppm -outfile testoutint.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
add_test(djpeg-int sharedlib/djpeg -dct int -fast -ppm -outfile testoutint.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
add_test(djpeg-int-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.ppm testoutint.ppm)
|
add_test(djpeg-int-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_INT} -DFILE=testoutint.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(djpeg-fast sharedlib/djpeg -dct fast -ppm -outfile testoutfst.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
add_test(djpeg-fast sharedlib/djpeg -dct fast -ppm -outfile testoutfst.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
add_test(djpeg-fast-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst.ppm testoutfst.ppm)
|
add_test(djpeg-fast-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FAST} -DFILE=testoutfst.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(djpeg-float sharedlib/djpeg -dct float -ppm -outfile testoutflt.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
add_test(djpeg-float sharedlib/djpeg -dct float -ppm -outfile testoutflt.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
if(WITH_SIMD)
|
if(WITH_SIMD)
|
||||||
add_test(djpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgflt.ppm testoutflt.ppm)
|
add_test(djpeg-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FLOAT} -DFILE=testoutflt.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
else()
|
else()
|
||||||
add_test(djpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm testoutflt.ppm)
|
add_test(djpeg-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FLOAT_NOSIMD} -DFILE=testoutflt.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
endif()
|
endif()
|
||||||
add_test(djpeg-int-1_2 sharedlib/djpeg -dct int -scale 1/2 -ppm -outfile testoutint1_2.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
foreach(scale 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8)
|
||||||
add_test(djpeg-int-1_2-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint1_2.ppm testoutint1_2.ppm)
|
string(REGEX REPLACE "_" "/" scalearg ${scale})
|
||||||
|
add_test(djpeg-int-${scale} sharedlib/djpeg -dct int -nosmooth -scale ${scalearg} -ppm -outfile testoutint${scale}.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
|
add_test(djpeg-int-${scale}-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_INT_${scale}} -DFILE=testoutint${scale}.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
|
endforeach()
|
||||||
add_test(djpeg-fast-1_2 sharedlib/djpeg -dct fast -scale 1/2 -ppm -outfile testoutfst1_2.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
add_test(djpeg-fast-1_2 sharedlib/djpeg -dct fast -scale 1/2 -ppm -outfile testoutfst1_2.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
add_test(djpeg-fast-1_2-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst1_2.ppm testoutfst1_2.ppm)
|
add_test(djpeg-fast-1_2-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FAST_1_2} -DFILE=testoutfst1_2.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(djpeg-int-1_4 sharedlib/djpeg -dct int -scale 1/4 -ppm -outfile testoutint1_4.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
|
||||||
add_test(djpeg-int-1_4-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint1_4.ppm testoutint1_4.ppm)
|
|
||||||
add_test(djpeg-fast-1_4 sharedlib/djpeg -dct fast -scale 1/4 -ppm -outfile testoutfst1_4.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
|
||||||
add_test(djpeg-fast-1_4-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst1_4.ppm testoutfst1_4.ppm)
|
|
||||||
add_test(djpeg-int-1_8 sharedlib/djpeg -dct int -scale 1/8 -ppm -outfile testoutint1_8.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
|
||||||
add_test(djpeg-int-1_8-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint1_8.ppm testoutint1_8.ppm)
|
|
||||||
add_test(djpeg-fast-1_8 sharedlib/djpeg -dct fast -scale 1/8 -ppm -outfile testoutfst1_8.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
|
||||||
add_test(djpeg-fast-1_8-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst1_8.ppm testoutfst1_8.ppm)
|
|
||||||
add_test(djpeg-256 sharedlib/djpeg -dct int -bmp -colors 256 -outfile testout.bmp ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
add_test(djpeg-256 sharedlib/djpeg -dct int -bmp -colors 256 -outfile testout.bmp ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
add_test(djpeg-256-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimg.bmp testout.bmp)
|
add_test(djpeg-256-cmp ${CMAKE_COMMAND} -DMD5=${MD5_BMP_256} -DFILE=testout.bmp -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(cjpeg-prog sharedlib/cjpeg -dct int -progressive -outfile testoutp.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-prog sharedlib/cjpeg -dct int -progressive -outfile testoutp.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
add_test(cjpeg-prog-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgp.jpg testoutp.jpg)
|
add_test(cjpeg-prog-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_PROG} -DFILE=testoutp.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(jpegtran-prog sharedlib/jpegtran -outfile testoutt.jpg testoutp.jpg)
|
add_test(jpegtran-prog sharedlib/jpegtran -outfile testoutt.jpg testoutp.jpg)
|
||||||
add_test(jpegtran-prog-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg testoutt.jpg)
|
add_test(jpegtran-prog-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT} -DFILE=testoutt.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
if(WITH_ARITH_ENC)
|
if(WITH_ARITH_ENC)
|
||||||
add_test(cjpeg-ari sharedlib/cjpeg -dct int -arithmetic -outfile testoutari.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-ari sharedlib/cjpeg -dct int -arithmetic -outfile testoutari.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
add_test(cjpeg-ari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg testoutari.jpg)
|
add_test(cjpeg-ari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_ARI} -DFILE=testoutari.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake )
|
||||||
add_test(jpegtran-toari sharedlib/jpegtran -arithmetic -outfile testouta.jpg ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg)
|
add_test(jpegtran-toari sharedlib/jpegtran -arithmetic -outfile testouta.jpg ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg)
|
||||||
add_test(jpegtran-toari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg testouta.jpg)
|
add_test(jpegtran-toari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_ARI} -DFILE=testouta.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
endif()
|
endif()
|
||||||
if(WITH_ARITH_DEC)
|
if(WITH_ARITH_DEC)
|
||||||
add_test(djpeg-ari sharedlib/djpeg -dct int -fast -ppm -outfile testoutari.ppm ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg)
|
add_test(djpeg-ari sharedlib/djpeg -dct int -fast -ppm -outfile testoutari.ppm ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg)
|
||||||
add_test(djpeg-ari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgari.ppm testoutari.ppm)
|
add_test(djpeg-ari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_ARI} -DFILE=testoutari.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(jpegtran-fromari sharedlib/jpegtran -outfile testouta.jpg ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg)
|
add_test(jpegtran-fromari sharedlib/jpegtran -outfile testouta.jpg ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg)
|
||||||
add_test(jpegtran-fromari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg testouta.jpg)
|
add_test(jpegtran-fromari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT} -DFILE=testouta.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
endif()
|
endif()
|
||||||
add_test(jpegtran-crop sharedlib/jpegtran -crop 120x90+20+50 -transpose -perfect -outfile testoutcrop.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
add_test(jpegtran-crop sharedlib/jpegtran -crop 120x90+20+50 -transpose -perfect -outfile testoutcrop.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
add_test(jpegtran-crop-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgcrop.jpg testoutcrop.jpg)
|
add_test(jpegtran-crop-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_CROP} -DFILE=testoutcrop.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
|
|
||||||
add_test(tjunittest-static tjunittest-static)
|
add_test(tjunittest-static tjunittest-static)
|
||||||
add_test(tjunittest-static-alloc tjunittest-static -alloc)
|
add_test(tjunittest-static-alloc tjunittest-static -alloc)
|
||||||
add_test(tjunittest-static-yuv tjunittest-static -yuv)
|
add_test(tjunittest-static-yuv tjunittest-static -yuv)
|
||||||
add_test(cjpeg-static-int cjpeg-static -dct int -outfile testoutint.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-static-int cjpeg-static -dct int -outfile testoutint.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
add_test(cjpeg-static-int-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg testoutint.jpg)
|
add_test(cjpeg-static-int-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT} -DFILE=testoutint.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(cjpeg-static-fast cjpeg-static -dct fast -opt -outfile testoutfst.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-static-fast cjpeg-static -dct fast -opt -outfile testoutfst.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
add_test(cjpeg-static-fast-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst.jpg testoutfst.jpg)
|
add_test(cjpeg-static-fast-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FAST} -DFILE=testoutfst.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(cjpeg-static-fast-100 cjpeg-static -dct fast -quality 100 -opt -outfile testoutfst100.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-static-fast-100 cjpeg-static -dct fast -quality 100 -opt -outfile testoutfst100.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
add_test(cjpeg-static-fast-100-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst100.jpg testoutfst100.jpg)
|
add_test(cjpeg-static-fast-100-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FAST_100} -DFILE=testoutfst100.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(cjpeg-static-float cjpeg-static -dct float -outfile testoutflt.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-static-float cjpeg-static -dct float -outfile testoutflt.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
if(WITH_SIMD)
|
if(WITH_SIMD)
|
||||||
add_test(cjpeg-static-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgflt.jpg testoutflt.jpg)
|
add_test(cjpeg-static-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FLOAT} -DFILE=testoutflt.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
else()
|
else()
|
||||||
add_test(cjpeg-static-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgflt-nosimd.jpg testoutflt.jpg)
|
add_test(cjpeg-static-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_FLOAT_NOSIMD} -DFILE=testoutflt.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
endif()
|
endif()
|
||||||
add_test(cjpeg-static-int-gray cjpeg-static -dct int -grayscale -outfile testoutgray.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-static-int-gray cjpeg-static -dct int -grayscale -outfile testoutgray.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
add_test(cjpeg-static-int-gray-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimggray.jpg testoutgray.jpg)
|
add_test(cjpeg-static-int-gray-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT_GRAY} -DFILE=testoutgray.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(djpeg-static-int djpeg-static -dct int -fast -ppm -outfile testoutint.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
add_test(djpeg-static-int djpeg-static -dct int -fast -ppm -outfile testoutint.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
add_test(djpeg-static-int-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.ppm testoutint.ppm)
|
add_test(djpeg-static-int-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_INT} -DFILE=testoutint.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(djpeg-static-fast djpeg-static -dct fast -ppm -outfile testoutfst.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
add_test(djpeg-static-fast djpeg-static -dct fast -ppm -outfile testoutfst.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
add_test(djpeg-static-fast-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst.ppm testoutfst.ppm)
|
add_test(djpeg-static-fast-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FAST} -DFILE=testoutfst.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(djpeg-static-float djpeg-static -dct float -ppm -outfile testoutflt.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
add_test(djpeg-static-float djpeg-static -dct float -ppm -outfile testoutflt.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
if(WITH_SIMD)
|
if(WITH_SIMD)
|
||||||
add_test(djpeg-static-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgflt.ppm testoutflt.ppm)
|
add_test(djpeg-static-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FLOAT} -DFILE=testoutflt.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
else()
|
else()
|
||||||
add_test(djpeg-static-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm testoutflt.ppm)
|
add_test(djpeg-static-float-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FLOAT_NOSIMD} -DFILE=testoutflt.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
endif()
|
endif()
|
||||||
add_test(djpeg-static-int-1_2 djpeg-static -dct int -scale 1/2 -ppm -outfile testoutint1_2.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
foreach(scale 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8)
|
||||||
add_test(djpeg-static-int-1_2-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint1_2.ppm testoutint1_2.ppm)
|
string(REGEX REPLACE "_" "/" scalearg ${scale})
|
||||||
|
add_test(djpeg-static-int-${scale} djpeg-static -dct int -nosmooth -scale ${scalearg} -ppm -outfile testoutint${scale}.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
|
add_test(djpeg-static-int-${scale}-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_INT_${scale}} -DFILE=testoutint${scale}.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
|
endforeach()
|
||||||
add_test(djpeg-static-fast-1_2 djpeg-static -dct fast -scale 1/2 -ppm -outfile testoutfst1_2.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
add_test(djpeg-static-fast-1_2 djpeg-static -dct fast -scale 1/2 -ppm -outfile testoutfst1_2.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
add_test(djpeg-static-fast-1_2-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst1_2.ppm testoutfst1_2.ppm)
|
add_test(djpeg-static-fast-1_2-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_FAST_1_2} -DFILE=testoutfst1_2.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(djpeg-static-int-1_4 djpeg-static -dct int -scale 1/4 -ppm -outfile testoutint1_4.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
|
||||||
add_test(djpeg-static-int-1_4-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint1_4.ppm testoutint1_4.ppm)
|
|
||||||
add_test(djpeg-static-fast-1_4 djpeg-static -dct fast -scale 1/4 -ppm -outfile testoutfst1_4.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
|
||||||
add_test(djpeg-static-fast-1_4-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst1_4.ppm testoutfst1_4.ppm)
|
|
||||||
add_test(djpeg-static-int-1_8 djpeg-static -dct int -scale 1/8 -ppm -outfile testoutint1_8.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
|
||||||
add_test(djpeg-static-int-1_8-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint1_8.ppm testoutint1_8.ppm)
|
|
||||||
add_test(djpeg-static-fast-1_8 djpeg-static -dct fast -scale 1/8 -ppm -outfile testoutfst1_8.ppm ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
|
||||||
add_test(djpeg-static-fast-1_8-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgfst1_8.ppm testoutfst1_8.ppm)
|
|
||||||
add_test(djpeg-static-256 djpeg-static -dct int -bmp -colors 256 -outfile testout.bmp ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
add_test(djpeg-static-256 djpeg-static -dct int -bmp -colors 256 -outfile testout.bmp ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
add_test(djpeg-static-256-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimg.bmp testout.bmp)
|
add_test(djpeg-static-256-cmp ${CMAKE_COMMAND} -DMD5=${MD5_BMP_256} -DFILE=testout.bmp -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(cjpeg-static-prog cjpeg-static -dct int -progressive -outfile testoutp.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-static-prog cjpeg-static -dct int -progressive -outfile testoutp.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
add_test(cjpeg-static-prog-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgp.jpg testoutp.jpg)
|
add_test(cjpeg-static-prog-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_PROG} -DFILE=testoutp.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(jpegtran-static-prog jpegtran-static -outfile testoutt.jpg testoutp.jpg)
|
add_test(jpegtran-static-prog jpegtran-static -outfile testoutt.jpg testoutp.jpg)
|
||||||
add_test(jpegtran-static-prog-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg testoutt.jpg)
|
add_test(jpegtran-static-prog-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT} -DFILE=testoutt.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
if(WITH_ARITH_ENC)
|
if(WITH_ARITH_ENC)
|
||||||
add_test(cjpeg-static-ari cjpeg-static -dct int -arithmetic -outfile testoutari.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
add_test(cjpeg-static-ari cjpeg-static -dct int -arithmetic -outfile testoutari.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.ppm)
|
||||||
add_test(cjpeg-static-ari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg testoutari.jpg)
|
add_test(cjpeg-static-ari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_ARI} -DFILE=testoutari.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake )
|
||||||
add_test(jpegtran-static-toari jpegtran-static -arithmetic -outfile testouta.jpg ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg)
|
add_test(jpegtran-static-toari jpegtran-static -arithmetic -outfile testouta.jpg ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg)
|
||||||
add_test(jpegtran-static-toari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg testouta.jpg)
|
add_test(jpegtran-static-toari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_ARI} -DFILE=testouta.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
endif()
|
endif()
|
||||||
if(WITH_ARITH_DEC)
|
if(WITH_ARITH_DEC)
|
||||||
add_test(djpeg-static-ari djpeg-static -dct int -fast -ppm -outfile testoutari.ppm ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg)
|
add_test(djpeg-static-ari djpeg-static -dct int -fast -ppm -outfile testoutari.ppm ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg)
|
||||||
add_test(djpeg-static-ari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgari.ppm testoutari.ppm)
|
add_test(djpeg-static-ari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_PPM_ARI} -DFILE=testoutari.ppm -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
add_test(jpegtran-static-fromari jpegtran-static -outfile testouta.jpg ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg)
|
add_test(jpegtran-static-fromari jpegtran-static -outfile testouta.jpg ${CMAKE_SOURCE_DIR}/testimages/testimgari.jpg)
|
||||||
add_test(jpegtran-static-fromari-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgint.jpg testouta.jpg)
|
add_test(jpegtran-static-fromari-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_INT} -DFILE=testouta.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
endif()
|
endif()
|
||||||
add_test(jpegtran-static-crop jpegtran-static -crop 120x90+20+50 -transpose -perfect -outfile testoutcrop.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
add_test(jpegtran-static-crop jpegtran-static -crop 120x90+20+50 -transpose -perfect -outfile testoutcrop.jpg ${CMAKE_SOURCE_DIR}/testimages/testorig.jpg)
|
||||||
add_test(jpegtran-static-crop-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimages/testimgcrop.jpg testoutcrop.jpg)
|
add_test(jpegtran-static-crop-cmp ${CMAKE_COMMAND} -DMD5=${MD5_JPEG_CROP} -DFILE=testoutcrop.jpg -P ${CMAKE_SOURCE_DIR}/cmakescripts/md5cmp.cmake)
|
||||||
|
|
||||||
add_custom_target(testclean COMMAND ${CMAKE_COMMAND} -P
|
add_custom_target(testclean COMMAND ${CMAKE_COMMAND} -P
|
||||||
${CMAKE_SOURCE_DIR}/cmakescripts/testclean.cmake)
|
${CMAKE_SOURCE_DIR}/cmakescripts/testclean.cmake)
|
||||||
@@ -380,18 +438,18 @@ add_custom_target(testclean COMMAND ${CMAKE_COMMAND} -P
|
|||||||
if(MSVC)
|
if(MSVC)
|
||||||
set(INST_PLATFORM "Visual C++")
|
set(INST_PLATFORM "Visual C++")
|
||||||
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-vc)
|
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-vc)
|
||||||
set(INST_DIR ${CMAKE_PROJECT_NAME})
|
set(INST_REG_NAME ${CMAKE_PROJECT_NAME})
|
||||||
elseif(MINGW)
|
elseif(MINGW)
|
||||||
set(INST_PLATFORM GCC)
|
set(INST_PLATFORM GCC)
|
||||||
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-gcc)
|
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-gcc)
|
||||||
set(INST_DIR ${CMAKE_PROJECT_NAME}-gcc)
|
set(INST_REG_NAME ${CMAKE_PROJECT_NAME}-gcc)
|
||||||
set(INST_DEFS -DGCC)
|
set(INST_DEFS -DGCC)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(64BIT)
|
if(64BIT)
|
||||||
set(INST_PLATFORM "${INST_PLATFORM} 64-bit")
|
set(INST_PLATFORM "${INST_PLATFORM} 64-bit")
|
||||||
set(INST_NAME ${INST_NAME}64)
|
set(INST_NAME ${INST_NAME}64)
|
||||||
set(INST_DIR ${INST_DIR}64)
|
set(INST_REG_NAME ${INST_DIR}64)
|
||||||
set(INST_DEFS ${INST_DEFS} -DWIN64)
|
set(INST_DEFS ${INST_DEFS} -DWIN64)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -405,12 +463,17 @@ else()
|
|||||||
set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=")
|
set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
STRING(REGEX REPLACE "/" "\\\\" INST_DIR ${CMAKE_INSTALL_PREFIX})
|
||||||
|
|
||||||
configure_file(release/libjpeg-turbo.nsi.in libjpeg-turbo.nsi @ONLY)
|
configure_file(release/libjpeg-turbo.nsi.in libjpeg-turbo.nsi @ONLY)
|
||||||
|
|
||||||
|
if(WITH_JAVA)
|
||||||
|
set(JAVA_DEPEND java)
|
||||||
|
endif()
|
||||||
add_custom_target(installer
|
add_custom_target(installer
|
||||||
makensis -nocd ${INST_DEFS} libjpeg-turbo.nsi
|
makensis -nocd ${INST_DEFS} libjpeg-turbo.nsi
|
||||||
DEPENDS jpeg jpeg-static turbojpeg turbojpeg-static rdjpgcom wrjpgcom
|
DEPENDS jpeg jpeg-static turbojpeg turbojpeg-static rdjpgcom wrjpgcom
|
||||||
cjpeg djpeg jpegtran tjbench
|
cjpeg djpeg jpegtran tjbench ${JAVA_DEPEND}
|
||||||
SOURCES libjpeg-turbo.nsi)
|
SOURCES libjpeg-turbo.nsi)
|
||||||
|
|
||||||
install(TARGETS jpeg-static turbojpeg turbojpeg-static rdjpgcom wrjpgcom tjbench
|
install(TARGETS jpeg-static turbojpeg turbojpeg-static rdjpgcom wrjpgcom tjbench
|
||||||
|
|||||||
118
ChangeLog.txt
118
ChangeLog.txt
@@ -1,3 +1,101 @@
|
|||||||
|
1.3.0
|
||||||
|
=====
|
||||||
|
|
||||||
|
[1] 'make test' now works properly on FreeBSD, and it no longer requires the
|
||||||
|
md5sum executable to be present on other Un*x platforms.
|
||||||
|
|
||||||
|
[2] Overhauled the packaging system:
|
||||||
|
-- To avoid conflict with vendor-supplied libjpeg-turbo packages, the
|
||||||
|
official RPMs and DEBs for libjpeg-turbo have been renamed to
|
||||||
|
"libjpeg-turbo-official".
|
||||||
|
-- The TurboJPEG libraries are now located under /opt/libjpeg-turbo in the
|
||||||
|
official Linux and Mac packages, to avoid conflict with vendor-supplied
|
||||||
|
packages and also to streamline the packaging system.
|
||||||
|
-- Release packages are now created with the directory structure defined
|
||||||
|
by the configure variables "prefix", "bindir", "libdir", etc. (Un*x) or by the
|
||||||
|
CMAKE_INSTALL_PREFIX variable (Windows.) The exception is that the docs are
|
||||||
|
always located under the system default documentation directory on Un*x and Mac
|
||||||
|
systems, and on Windows, the TurboJPEG DLL is always located in the Windows
|
||||||
|
system directory.
|
||||||
|
-- To avoid confusion, official libjpeg-turbo packages on Linux/Unix platforms
|
||||||
|
(except for Mac) will always install the 32-bit libraries in
|
||||||
|
/opt/libjpeg-turbo/lib32 and the 64-bit libraries in /opt/libjpeg-turbo/lib64.
|
||||||
|
-- Fixed an issue whereby, in some cases, the libjpeg-turbo executables on Un*x
|
||||||
|
systems were not properly linking with the shared libraries installed by the
|
||||||
|
same package.
|
||||||
|
-- Fixed an issue whereby building the "installer" target on Windows when
|
||||||
|
WITH_JAVA=1 would fail if the TurboJPEG JAR had not been previously built.
|
||||||
|
-- Building the "install" target on Windows now installs files into the same
|
||||||
|
places that the installer does.
|
||||||
|
|
||||||
|
[3] Fixed a Huffman encoder bug that prevented I/O suspension from working
|
||||||
|
properly.
|
||||||
|
|
||||||
|
|
||||||
|
1.2.90 (1.3 beta1)
|
||||||
|
==================
|
||||||
|
|
||||||
|
[1] Added support for additional scaling factors (3/8, 5/8, 3/4, 7/8, 9/8, 5/4,
|
||||||
|
11/8, 3/2, 13/8, 7/4, 15/8, and 2) when decompressing. Note that the IDCT will
|
||||||
|
not be SIMD-accelerated when using any of these new scaling factors.
|
||||||
|
|
||||||
|
[2] The TurboJPEG dynamic library is now versioned. It was not strictly
|
||||||
|
necessary to do so, because TurboJPEG uses versioned symbols, and if a function
|
||||||
|
changes in an ABI-incompatible way, that function is renamed and a legacy
|
||||||
|
function is provided to maintain backward compatibility. However, certain
|
||||||
|
Linux distro maintainers have a policy against accepting any library that isn't
|
||||||
|
versioned.
|
||||||
|
|
||||||
|
[3] Extended the TurboJPEG Java API so that it can be used to compress a JPEG
|
||||||
|
image from and decompress a JPEG image to an arbitrary position in a large
|
||||||
|
image buffer.
|
||||||
|
|
||||||
|
[4] The tjDecompressToYUV() function now supports the TJFLAG_FASTDCT flag.
|
||||||
|
|
||||||
|
[5] The 32-bit supplementary package for amd64 Debian systems now provides
|
||||||
|
symlinks in /usr/lib/i386-linux-gnu for the TurboJPEG libraries in /usr/lib32.
|
||||||
|
This allows those libraries to be used on MultiArch-compatible systems (such as
|
||||||
|
Ubuntu 11 and later) without setting the linker path.
|
||||||
|
|
||||||
|
[6] The TurboJPEG Java wrapper should now find the JNI library on Mac systems
|
||||||
|
without having to pass -Djava.library.path=/usr/lib to java.
|
||||||
|
|
||||||
|
[7] TJBench has been ported to Java to provide a convenient way of validating
|
||||||
|
the performance of the TurboJPEG Java API. It can be run with
|
||||||
|
'java -cp turbojpeg.jar TJBench'.
|
||||||
|
|
||||||
|
[8] cjpeg can now be used to generate JPEG files with the RGB colorspace
|
||||||
|
(feature ported from jpeg-8d.)
|
||||||
|
|
||||||
|
[9] The width and height in the -crop argument passed to jpegtran can now be
|
||||||
|
suffixed with "f" to indicate that, when the upper left corner of the cropping
|
||||||
|
region is automatically moved to the nearest iMCU boundary, the bottom right
|
||||||
|
corner should be moved by the same amount. In other words, this feature causes
|
||||||
|
jpegtran to strictly honor the specified width/height rather than the specified
|
||||||
|
bottom right corner (feature ported from jpeg-8d.)
|
||||||
|
|
||||||
|
[10] JPEG files using the RGB colorspace can now be decompressed into grayscale
|
||||||
|
images (feature ported from jpeg-8d.)
|
||||||
|
|
||||||
|
[11] Fixed a regression caused by 1.2.1[7] whereby the build would fail with
|
||||||
|
multiple "Mismatch in operand sizes" errors when attempting to build the x86
|
||||||
|
SIMD code with NASM 0.98.
|
||||||
|
|
||||||
|
[12] The in-memory source/destination managers (jpeg_mem_src() and
|
||||||
|
jpeg_mem_dest()) are now included by default when building libjpeg-turbo with
|
||||||
|
libjpeg v6b or v7 emulation, so that programs can take advantage of these
|
||||||
|
functions without requiring the use of the backward-incompatible libjpeg v8
|
||||||
|
ABI. The "age number" of the libjpeg-turbo library on Un*x systems has been
|
||||||
|
incremented by 1 to reflect this. You can disable this feature with a
|
||||||
|
configure/CMake switch in order to retain strict API/ABI compatibility with the
|
||||||
|
libjpeg v6b or v7 API/ABI (or with previous versions of libjpeg-turbo.) See
|
||||||
|
README-turbo.txt for more details.
|
||||||
|
|
||||||
|
[13] Added ARM v7s architecture to libjpeg.a and libturbojpeg.a in the official
|
||||||
|
libjpeg-turbo binary package for OS X, so that those libraries can be used to
|
||||||
|
build applications that leverage the faster CPUs in the iPhone 5 and iPad 4.
|
||||||
|
|
||||||
|
|
||||||
1.2.1
|
1.2.1
|
||||||
=====
|
=====
|
||||||
|
|
||||||
@@ -77,8 +175,8 @@ are in violation of the spec, other JPEG implementations handle them
|
|||||||
correctly.
|
correctly.
|
||||||
|
|
||||||
[7] Added ARM v6 and ARM v7 architectures to libjpeg.a and libturbojpeg.a in
|
[7] Added ARM v6 and ARM v7 architectures to libjpeg.a and libturbojpeg.a in
|
||||||
the official OS X distribution package, so that those libraries can be used to
|
the official libjpeg-turbo binary package for OS X, so that those libraries can
|
||||||
build both OS X and iOS applications.
|
be used to build both OS X and iOS applications.
|
||||||
|
|
||||||
|
|
||||||
1.1.90 (1.2 beta1)
|
1.1.90 (1.2 beta1)
|
||||||
@@ -124,7 +222,7 @@ NEON instructions.
|
|||||||
TurboJPEG 1.2 API uses pixel formats to define the size and component order of
|
TurboJPEG 1.2 API uses pixel formats to define the size and component order of
|
||||||
the uncompressed source/destination images, and it includes a more efficient
|
the uncompressed source/destination images, and it includes a more efficient
|
||||||
version of TJBUFSIZE() that computes a worst-case JPEG size based on the level
|
version of TJBUFSIZE() that computes a worst-case JPEG size based on the level
|
||||||
of chrominance subsampling. The refactored implementation of TurboJPEG/OSS
|
of chrominance subsampling. The refactored implementation of the TurboJPEG API
|
||||||
now uses the libjpeg memory source and destination managers, which allows the
|
now uses the libjpeg memory source and destination managers, which allows the
|
||||||
TurboJPEG compressor to grow the JPEG buffer as necessary.
|
TurboJPEG compressor to grow the JPEG buffer as necessary.
|
||||||
|
|
||||||
@@ -200,12 +298,12 @@ and libjpeg-turbo should now produce identical output to libjpeg v6b in all
|
|||||||
cases.
|
cases.
|
||||||
|
|
||||||
[2] Despite the above, the fast integer forward DCT still degrades somewhat for
|
[2] Despite the above, the fast integer forward DCT still degrades somewhat for
|
||||||
JPEG qualities greater than 95, so TurboJPEG/OSS will now automatically use the
|
JPEG qualities greater than 95, so the TurboJPEG wrapper will now automatically
|
||||||
slow integer forward DCT when generating JPEG images of quality 96 or greater.
|
use the slow integer forward DCT when generating JPEG images of quality 96 or
|
||||||
This reduces compression performance by as much as 15% for these high-quality
|
greater. This reduces compression performance by as much as 15% for these
|
||||||
images but is necessary to ensure that the images are perceptually lossless.
|
high-quality images but is necessary to ensure that the images are perceptually
|
||||||
It also ensures that the library can avoid the performance pitfall created by
|
lossless. It also ensures that the library can avoid the performance pitfall
|
||||||
[1].
|
created by [1].
|
||||||
|
|
||||||
[3] Ported jpgtest.cxx to pure C to avoid the need for a C++ compiler.
|
[3] Ported jpgtest.cxx to pure C to avoid the need for a C++ compiler.
|
||||||
|
|
||||||
@@ -278,7 +376,7 @@ INCOMPLETE_TYPES_BROKEN macro should be defined.
|
|||||||
[1] 2983700: Further FreeBSD build tweaks (no longer necessary to specify
|
[1] 2983700: Further FreeBSD build tweaks (no longer necessary to specify
|
||||||
--host when configuring on a 64-bit system)
|
--host when configuring on a 64-bit system)
|
||||||
|
|
||||||
[2] Created sym. links in the Unix/Linux packages so that the TurboJPEG
|
[2] Created symlinks in the Unix/Linux packages so that the TurboJPEG
|
||||||
include file can always be found in /opt/libjpeg-turbo/include, the 32-bit
|
include file can always be found in /opt/libjpeg-turbo/include, the 32-bit
|
||||||
static libraries can always be found in /opt/libjpeg-turbo/lib32, and the
|
static libraries can always be found in /opt/libjpeg-turbo/lib32, and the
|
||||||
64-bit static libraries can always be found in /opt/libjpeg-turbo/lib64.
|
64-bit static libraries can always be found in /opt/libjpeg-turbo/lib64.
|
||||||
|
|||||||
263
Makefile.am
263
Makefile.am
@@ -1,9 +1,16 @@
|
|||||||
lib_LTLIBRARIES = libjpeg.la libturbojpeg.la
|
lib_LTLIBRARIES = libjpeg.la
|
||||||
libjpeg_la_LDFLAGS = -version-info ${SO_MAJOR_VERSION}:${SO_MINOR_VERSION} -no-undefined
|
libjpeg_la_LDFLAGS = -version-info ${LIBTOOL_CURRENT}:${SO_MINOR_VERSION}:${SO_AGE} -no-undefined
|
||||||
libturbojpeg_la_LDFLAGS = -avoid-version -no-undefined
|
include_HEADERS = jerror.h jmorecfg.h jpeglib.h
|
||||||
include_HEADERS = jerror.h jmorecfg.h jpeglib.h turbojpeg.h
|
|
||||||
|
if WITH_TURBOJPEG
|
||||||
|
lib_LTLIBRARIES += libturbojpeg.la
|
||||||
|
libturbojpeg_la_LDFLAGS = -version-info 0:0 -no-undefined
|
||||||
|
include_HEADERS += turbojpeg.h
|
||||||
|
endif
|
||||||
|
|
||||||
nodist_include_HEADERS = jconfig.h
|
nodist_include_HEADERS = jconfig.h
|
||||||
|
|
||||||
|
|
||||||
HDRS = jchuff.h jdct.h jdhuff.h jerror.h jinclude.h jmemsys.h jmorecfg.h \
|
HDRS = jchuff.h jdct.h jdhuff.h jerror.h jinclude.h jmemsys.h jmorecfg.h \
|
||||||
jpegint.h jpeglib.h jversion.h jsimd.h jsimddct.h jpegcomp.h
|
jpegint.h jpeglib.h jversion.h jsimd.h jsimddct.h jpegcomp.h
|
||||||
|
|
||||||
@@ -17,28 +24,26 @@ libjpeg_la_SOURCES = $(HDRS) jcapimin.c jcapistd.c jccoefct.c jccolor.c \
|
|||||||
jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c
|
jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c
|
||||||
|
|
||||||
if WITH_ARITH
|
if WITH_ARITH
|
||||||
|
|
||||||
libjpeg_la_SOURCES += jaricom.c
|
libjpeg_la_SOURCES += jaricom.c
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if WITH_ARITH_ENC
|
if WITH_ARITH_ENC
|
||||||
|
|
||||||
libjpeg_la_SOURCES += jcarith.c
|
libjpeg_la_SOURCES += jcarith.c
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if WITH_ARITH_DEC
|
if WITH_ARITH_DEC
|
||||||
|
|
||||||
libjpeg_la_SOURCES += jdarith.c
|
libjpeg_la_SOURCES += jdarith.c
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
SUBDIRS = java
|
||||||
|
|
||||||
|
|
||||||
|
if WITH_TURBOJPEG
|
||||||
|
|
||||||
libturbojpeg_la_SOURCES = $(libjpeg_la_SOURCES) turbojpeg.c turbojpeg.h \
|
libturbojpeg_la_SOURCES = $(libjpeg_la_SOURCES) turbojpeg.c turbojpeg.h \
|
||||||
transupp.c transupp.h jdatadst-tj.c jdatasrc-tj.c
|
transupp.c transupp.h jdatadst-tj.c jdatasrc-tj.c
|
||||||
|
|
||||||
SUBDIRS = java
|
|
||||||
|
|
||||||
if WITH_JAVA
|
if WITH_JAVA
|
||||||
|
|
||||||
libturbojpeg_la_SOURCES += turbojpeg-jni.c
|
libturbojpeg_la_SOURCES += turbojpeg-jni.c
|
||||||
@@ -54,12 +59,17 @@ endif
|
|||||||
libturbojpeg_la_SOURCES += $(TJMAPFILE)
|
libturbojpeg_la_SOURCES += $(TJMAPFILE)
|
||||||
|
|
||||||
if VERSION_SCRIPT
|
if VERSION_SCRIPT
|
||||||
|
|
||||||
libturbojpeg_la_LDFLAGS += $(VERSION_SCRIPT_FLAG)$(srcdir)/$(TJMAPFILE)
|
libturbojpeg_la_LDFLAGS += $(VERSION_SCRIPT_FLAG)$(srcdir)/$(TJMAPFILE)
|
||||||
libjpeg_la_LDFLAGS += $(VERSION_SCRIPT_FLAG)libjpeg.map
|
endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
if VERSION_SCRIPT
|
||||||
|
libjpeg_la_LDFLAGS += $(VERSION_SCRIPT_FLAG)libjpeg.map
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
if WITH_SIMD
|
if WITH_SIMD
|
||||||
|
|
||||||
SUBDIRS += simd
|
SUBDIRS += simd
|
||||||
@@ -72,8 +82,16 @@ libjpeg_la_SOURCES += jsimd_none.c
|
|||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
bin_PROGRAMS = cjpeg djpeg jpegtran rdjpgcom wrjpgcom tjbench
|
|
||||||
noinst_PROGRAMS = tjunittest jcstest
|
bin_PROGRAMS = cjpeg djpeg jpegtran rdjpgcom wrjpgcom
|
||||||
|
noinst_PROGRAMS = jcstest
|
||||||
|
|
||||||
|
|
||||||
|
if WITH_TURBOJPEG
|
||||||
|
|
||||||
|
bin_PROGRAMS += tjbench
|
||||||
|
|
||||||
|
noinst_PROGRAMS += tjunittest
|
||||||
|
|
||||||
tjbench_SOURCES = tjbench.c bmp.h bmp.c tjutil.h tjutil.c rdbmp.c rdppm.c \
|
tjbench_SOURCES = tjbench.c bmp.h bmp.c tjutil.h tjutil.c rdbmp.c rdppm.c \
|
||||||
wrbmp.c wrppm.c
|
wrbmp.c wrppm.c
|
||||||
@@ -86,6 +104,9 @@ tjunittest_SOURCES = tjunittest.c tjutil.h tjutil.c
|
|||||||
|
|
||||||
tjunittest_LDADD = libturbojpeg.la
|
tjunittest_LDADD = libturbojpeg.la
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
cjpeg_SOURCES = cdjpeg.h cderror.h cdjpeg.c cjpeg.c rdbmp.c rdgif.c \
|
cjpeg_SOURCES = cdjpeg.h cderror.h cdjpeg.c cjpeg.c rdbmp.c rdgif.c \
|
||||||
rdppm.c rdswitch.c rdtarga.c
|
rdppm.c rdswitch.c rdtarga.c
|
||||||
|
|
||||||
@@ -120,8 +141,8 @@ jcstest_LDADD = libjpeg.la
|
|||||||
|
|
||||||
dist_man1_MANS = cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1
|
dist_man1_MANS = cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1
|
||||||
|
|
||||||
DOCS= install.txt coderules.txt filelist.txt jconfig.txt change.log \
|
DOCS= coderules.txt jconfig.txt change.log rdrle.c wrrle.c BUILDING.txt \
|
||||||
rdrle.c wrrle.c BUILDING.txt ChangeLog.txt
|
ChangeLog.txt
|
||||||
|
|
||||||
docdir = $(datadir)/doc
|
docdir = $(datadir)/doc
|
||||||
dist_doc_DATA = README README-turbo.txt libjpeg.txt structure.txt usage.txt \
|
dist_doc_DATA = README README-turbo.txt libjpeg.txt structure.txt usage.txt \
|
||||||
@@ -139,7 +160,42 @@ dist-hook:
|
|||||||
rm -rf `find $(distdir) -name .svn`
|
rm -rf `find $(distdir) -name .svn`
|
||||||
|
|
||||||
|
|
||||||
|
SUBDIRS += md5
|
||||||
|
|
||||||
|
MD5_JPEG_INT = 9a68f56bc76e466aa7e52f415d0f4a5f
|
||||||
|
MD5_JPEG_FAST = 0e1502e7fa421835e376a314fac2a39f
|
||||||
|
MD5_JPEG_FAST_100 = 7bf72a8e741d64eecb960c97323af77c
|
||||||
|
MD5_JPEG_FLOAT = d1623885ffafcd40c684af09e3d65cd5
|
||||||
|
MD5_JPEG_FLOAT_NOSIMD = fb4884c35f8273f498cb32879de5c455
|
||||||
|
MD5_JPEG_INT_GRAY = 72b51f894b8f4a10b3ee3066770aa38d
|
||||||
|
MD5_PPM_INT = d1ed0d11f076b842525271647716aeb8
|
||||||
|
MD5_PPM_FAST = 048298a2d2410261c0533cb97bcfef23
|
||||||
|
MD5_PPM_FLOAT = 7f5b446ee36b2630e06785b8d42af15f
|
||||||
|
MD5_PPM_FLOAT_NOSIMD = 64072f1dbdc5b3a187777788604971a5
|
||||||
|
MD5_PPM_INT_2_1 = 9f9de8c0612f8d06869b960b05abf9c9
|
||||||
|
MD5_PPM_INT_15_8 = b6875bc070720b899566cc06459b63b7
|
||||||
|
MD5_PPM_INT_7_4 = 06a177eae05f164fac57f7a2c346ee87
|
||||||
|
MD5_PPM_INT_13_8 = bc3452573c8152f6ae552939ee19f82f
|
||||||
|
MD5_PPM_INT_3_2 = f5a8b88a8a7f96016f04d259cf82ed67
|
||||||
|
MD5_PPM_INT_11_8 = d8cc73c0aaacd4556569b59437ba00a5
|
||||||
|
MD5_PPM_INT_5_4 = 32775dd9ad2ab90f4c5b219b53e0c86c
|
||||||
|
MD5_PPM_INT_9_8 = d25e61bc7eac0002f5b393aa223747b6
|
||||||
|
MD5_PPM_INT_7_8 = ddb564b7c74a09494016d6cd7502a946
|
||||||
|
MD5_PPM_INT_3_4 = 8ed8e68808c3fbc4ea764fc9d2968646
|
||||||
|
MD5_PPM_INT_5_8 = a3363274999da2366a024efae6d16c9b
|
||||||
|
MD5_PPM_INT_1_2 = e692a315cea26b988c8e8b29a5dbcd81
|
||||||
|
MD5_PPM_INT_3_8 = 79eca9175652ced755155c90e785a996
|
||||||
|
MD5_PPM_INT_1_4 = 79cd778f8bf1a117690052cacdd54eca
|
||||||
|
MD5_PPM_INT_1_8 = 391b3d4aca640c8567d6f8745eb2142f
|
||||||
|
MD5_PPM_FAST_1_2 = f30bcf6d32ccd44cbdd9aeaacbd9454f
|
||||||
|
MD5_BMP_256 = 4980185e3776e89bd931736e1cddeee6
|
||||||
|
MD5_JPEG_ARI = e986fb0a637a8d833d96e8a6d6d84ea1
|
||||||
|
MD5_PPM_ARI = 72b59a99bcf1de24c5b27d151bde2437
|
||||||
|
MD5_JPEG_PROG = 1c4afddc05c0a43489ee54438a482d92
|
||||||
|
MD5_JPEG_CROP = b4197f377e621c4e9b1d20471432610d
|
||||||
|
|
||||||
test: testclean all
|
test: testclean all
|
||||||
|
if WITH_TURBOJPEG
|
||||||
if WITH_JAVA
|
if WITH_JAVA
|
||||||
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest
|
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest
|
||||||
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -bi
|
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -bi
|
||||||
@@ -149,62 +205,83 @@ endif
|
|||||||
./tjunittest
|
./tjunittest
|
||||||
./tjunittest -alloc
|
./tjunittest -alloc
|
||||||
./tjunittest -yuv
|
./tjunittest -yuv
|
||||||
|
endif
|
||||||
./cjpeg -dct int -outfile testoutint.jpg $(srcdir)/testimages/testorig.ppm
|
./cjpeg -dct int -outfile testoutint.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
cmp $(srcdir)/testimages/testimgint.jpg testoutint.jpg
|
md5/md5cmp $(MD5_JPEG_INT) testoutint.jpg
|
||||||
./cjpeg -dct fast -opt -outfile testoutfst.jpg $(srcdir)/testimages/testorig.ppm
|
./cjpeg -dct fast -opt -outfile testoutfst.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
cmp $(srcdir)/testimages/testimgfst.jpg testoutfst.jpg
|
md5/md5cmp $(MD5_JPEG_FAST) testoutfst.jpg
|
||||||
./cjpeg -dct fast -quality 100 -opt -outfile testoutfst100.jpg $(srcdir)/testimages/testorig.ppm
|
./cjpeg -dct fast -quality 100 -opt -outfile testoutfst100.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
cmp $(srcdir)/testimages/testimgfst100.jpg testoutfst100.jpg
|
md5/md5cmp $(MD5_JPEG_FAST_100) testoutfst100.jpg
|
||||||
./cjpeg -dct float -outfile testoutflt.jpg $(srcdir)/testimages/testorig.ppm
|
./cjpeg -dct float -outfile testoutflt.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
if WITH_SSE_FLOAT_DCT
|
if WITH_SSE_FLOAT_DCT
|
||||||
cmp $(srcdir)/testimages/testimgflt.jpg testoutflt.jpg
|
md5/md5cmp $(MD5_JPEG_FLOAT) testoutflt.jpg
|
||||||
else
|
else
|
||||||
cmp $(srcdir)/testimages/testimgflt-nosimd.jpg testoutflt.jpg
|
md5/md5cmp $(MD5_JPEG_FLOAT_NOSIMD) testoutflt.jpg
|
||||||
endif
|
endif
|
||||||
./cjpeg -dct int -grayscale -outfile testoutgray.jpg $(srcdir)/testimages/testorig.ppm
|
./cjpeg -dct int -grayscale -outfile testoutgray.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
cmp $(srcdir)/testimages/testimggray.jpg testoutgray.jpg
|
md5/md5cmp $(MD5_JPEG_INT_GRAY) testoutgray.jpg
|
||||||
./djpeg -dct int -fast -ppm -outfile testoutint.ppm $(srcdir)/testimages/testorig.jpg
|
./djpeg -dct int -fast -ppm -outfile testoutint.ppm $(srcdir)/testimages/testorig.jpg
|
||||||
cmp $(srcdir)/testimages/testimgint.ppm testoutint.ppm
|
md5/md5cmp $(MD5_PPM_INT) testoutint.ppm
|
||||||
./djpeg -dct fast -ppm -outfile testoutfst.ppm $(srcdir)/testimages/testorig.jpg
|
./djpeg -dct fast -ppm -outfile testoutfst.ppm $(srcdir)/testimages/testorig.jpg
|
||||||
cmp $(srcdir)/testimages/testimgfst.ppm testoutfst.ppm
|
md5/md5cmp $(MD5_PPM_FAST) testoutfst.ppm
|
||||||
./djpeg -dct float -ppm -outfile testoutflt.ppm $(srcdir)/testimages/testorig.jpg
|
./djpeg -dct float -ppm -outfile testoutflt.ppm $(srcdir)/testimages/testorig.jpg
|
||||||
if WITH_SSE_FLOAT_DCT
|
if WITH_SSE_FLOAT_DCT
|
||||||
cmp $(srcdir)/testimages/testimgflt.ppm testoutflt.ppm
|
md5/md5cmp $(MD5_PPM_FLOAT) testoutflt.ppm
|
||||||
else
|
else
|
||||||
cmp $(srcdir)/testimages/testorig.ppm testoutflt.ppm
|
md5/md5cmp $(MD5_PPM_FLOAT_NOSIMD) testoutflt.ppm
|
||||||
endif
|
endif
|
||||||
./djpeg -dct int -scale 1/2 -ppm -outfile testoutint1_2.ppm $(srcdir)/testimages/testorig.jpg
|
./djpeg -dct int -nosmooth -scale 2/1 -ppm -outfile testoutint2_1.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
cmp $(srcdir)/testimages/testimgint1_2.ppm testoutint1_2.ppm
|
md5/md5cmp $(MD5_PPM_INT_2_1) testoutint2_1.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 15/8 -ppm -outfile testoutint15_8.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_15_8) testoutint15_8.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 7/4 -ppm -outfile testoutint7_4.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_7_4) testoutint7_4.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 13/8 -ppm -outfile testoutint13_8.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_13_8) testoutint13_8.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 3/2 -ppm -outfile testoutint3_2.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_3_2) testoutint3_2.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 11/8 -ppm -outfile testoutint11_8.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_11_8) testoutint11_8.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 5/4 -ppm -outfile testoutint5_4.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_5_4) testoutint5_4.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 9/8 -ppm -outfile testoutint9_8.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_9_8) testoutint9_8.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 7/8 -ppm -outfile testoutint7_8.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_7_8) testoutint7_8.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 3/4 -ppm -outfile testoutint3_4.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_3_4) testoutint3_4.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 5/8 -ppm -outfile testoutint5_8.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_5_8) testoutint5_8.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 1/2 -ppm -outfile testoutint1_2.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_1_2) testoutint1_2.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 3/8 -ppm -outfile testoutint3_8.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_3_8) testoutint3_8.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 1/4 -ppm -outfile testoutint1_4.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_1_4) testoutint1_4.ppm;
|
||||||
|
./djpeg -dct int -nosmooth -scale 1/8 -ppm -outfile testoutint1_8.ppm $(srcdir)/testimages/testorig.jpg;
|
||||||
|
md5/md5cmp $(MD5_PPM_INT_1_8) testoutint1_8.ppm;
|
||||||
./djpeg -dct fast -scale 1/2 -ppm -outfile testoutfst1_2.ppm $(srcdir)/testimages/testorig.jpg
|
./djpeg -dct fast -scale 1/2 -ppm -outfile testoutfst1_2.ppm $(srcdir)/testimages/testorig.jpg
|
||||||
cmp $(srcdir)/testimages/testimgfst1_2.ppm testoutfst1_2.ppm
|
md5/md5cmp $(MD5_PPM_FAST_1_2) testoutfst1_2.ppm
|
||||||
./djpeg -dct int -scale 1/4 -ppm -outfile testoutint1_4.ppm $(srcdir)/testimages/testorig.jpg
|
|
||||||
cmp $(srcdir)/testimages/testimgint1_4.ppm testoutint1_4.ppm
|
|
||||||
./djpeg -dct fast -scale 1/4 -ppm -outfile testoutfst1_4.ppm $(srcdir)/testimages/testorig.jpg
|
|
||||||
cmp $(srcdir)/testimages/testimgfst1_4.ppm testoutfst1_4.ppm
|
|
||||||
./djpeg -dct int -scale 1/8 -ppm -outfile testoutint1_8.ppm $(srcdir)/testimages/testorig.jpg
|
|
||||||
cmp $(srcdir)/testimages/testimgint1_8.ppm testoutint1_8.ppm
|
|
||||||
./djpeg -dct fast -scale 1/8 -ppm -outfile testoutfst1_8.ppm $(srcdir)/testimages/testorig.jpg
|
|
||||||
cmp $(srcdir)/testimages/testimgfst1_8.ppm testoutfst1_8.ppm
|
|
||||||
./djpeg -dct int -bmp -colors 256 -outfile testout.bmp $(srcdir)/testimages/testorig.jpg
|
./djpeg -dct int -bmp -colors 256 -outfile testout.bmp $(srcdir)/testimages/testorig.jpg
|
||||||
cmp $(srcdir)/testimages/testimg.bmp testout.bmp
|
md5/md5cmp $(MD5_BMP_256) testout.bmp
|
||||||
if WITH_ARITH_ENC
|
if WITH_ARITH_ENC
|
||||||
./cjpeg -dct int -arithmetic -outfile testoutari.jpg $(srcdir)/testimages/testorig.ppm
|
./cjpeg -dct int -arithmetic -outfile testoutari.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
cmp $(srcdir)/testimages/testimgari.jpg testoutari.jpg
|
md5/md5cmp $(MD5_JPEG_ARI) testoutari.jpg
|
||||||
./jpegtran -arithmetic -outfile testouta.jpg $(srcdir)/testimages/testimgint.jpg
|
./jpegtran -arithmetic -outfile testouta.jpg $(srcdir)/testimages/testimgint.jpg
|
||||||
cmp $(srcdir)/testimages/testimgari.jpg testouta.jpg
|
md5/md5cmp $(MD5_JPEG_ARI) testouta.jpg
|
||||||
endif
|
endif
|
||||||
if WITH_ARITH_DEC
|
if WITH_ARITH_DEC
|
||||||
./djpeg -dct int -fast -ppm -outfile testoutari.ppm $(srcdir)/testimages/testimgari.jpg
|
./djpeg -dct int -fast -ppm -outfile testoutari.ppm $(srcdir)/testimages/testimgari.jpg
|
||||||
cmp $(srcdir)/testimages/testimgari.ppm testoutari.ppm
|
md5/md5cmp $(MD5_PPM_ARI) testoutari.ppm
|
||||||
./jpegtran -outfile testouta.jpg $(srcdir)/testimages/testimgari.jpg
|
./jpegtran -outfile testouta.jpg $(srcdir)/testimages/testimgari.jpg
|
||||||
cmp $(srcdir)/testimages/testimgint.jpg testouta.jpg
|
md5/md5cmp $(MD5_JPEG_INT) testouta.jpg
|
||||||
endif
|
endif
|
||||||
./cjpeg -dct int -progressive -outfile testoutp.jpg $(srcdir)/testimages/testorig.ppm
|
./cjpeg -dct int -progressive -outfile testoutp.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
cmp $(srcdir)/testimages/testimgp.jpg testoutp.jpg
|
md5/md5cmp $(MD5_JPEG_PROG) testoutp.jpg
|
||||||
./jpegtran -outfile testoutt.jpg testoutp.jpg
|
./jpegtran -outfile testoutt.jpg testoutp.jpg
|
||||||
cmp $(srcdir)/testimages/testimgint.jpg testoutt.jpg
|
md5/md5cmp $(MD5_JPEG_INT) testoutt.jpg
|
||||||
./jpegtran -crop 120x90+20+50 -transpose -perfect -outfile testoutcrop.jpg $(srcdir)/testimages/testorig.jpg
|
./jpegtran -crop 120x90+20+50 -transpose -perfect -outfile testoutcrop.jpg $(srcdir)/testimages/testorig.jpg
|
||||||
cmp $(srcdir)/testimages/testimgcrop.jpg testoutcrop.jpg
|
md5/md5cmp $(MD5_JPEG_CROP) testoutcrop.jpg
|
||||||
|
|
||||||
|
|
||||||
testclean:
|
testclean:
|
||||||
@@ -239,93 +316,87 @@ testclean:
|
|||||||
tjtest:
|
tjtest:
|
||||||
sh ./tjbenchtest
|
sh ./tjbenchtest
|
||||||
if WITH_JAVA
|
if WITH_JAVA
|
||||||
sh ./tjexampletest
|
sh ./tjbenchtest.java
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
if X86_64
|
pkgscripts/libjpeg-turbo.spec: pkgscripts/libjpeg-turbo.spec.tmpl
|
||||||
|
cat pkgscripts/libjpeg-turbo.spec.tmpl | sed s@%{__prefix}@$(prefix)@g | \
|
||||||
|
sed s@%{__bindir}@$(bindir)@g | sed s@%{__datadir}@$(datadir)@g | \
|
||||||
|
sed s@%{__docdir}@$(docdir)@g | sed s@%{__includedir}@$(includedir)@g | \
|
||||||
|
sed s@%{__libdir}@$(libdir)@g | sed s@%{__mandir}@$(mandir)@g \
|
||||||
|
> pkgscripts/libjpeg-turbo.spec
|
||||||
|
|
||||||
install-exec-hook:
|
rpm: all pkgscripts/libjpeg-turbo.spec
|
||||||
__PREFIX=`echo ${prefix} | sed -e 's@\/*$$@@'`; \
|
|
||||||
if [ "$$__PREFIX" = "/opt/libjpeg-turbo" ]; then \
|
|
||||||
cd $(DESTDIR)/${prefix}; \
|
|
||||||
if [ -d lib -a ! -d lib64 -a ! -h lib64 ]; then \
|
|
||||||
$(LN_S) lib lib64; \
|
|
||||||
fi \
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
install-exec-hook:
|
|
||||||
__PREFIX=`echo ${prefix} | sed -e 's@\/*$$@@'`; \
|
|
||||||
if [ "$$__PREFIX" = "/opt/libjpeg-turbo" ]; then \
|
|
||||||
cd $(DESTDIR)/${prefix}; \
|
|
||||||
if [ -d lib -a ! -d lib32 -a ! -h lib32 ]; then \
|
|
||||||
$(LN_S) lib lib32; \
|
|
||||||
fi \
|
|
||||||
fi
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
rpm: all
|
|
||||||
TMPDIR=`mktemp -d /tmp/${PACKAGE_NAME}-build.XXXXXX`; \
|
TMPDIR=`mktemp -d /tmp/${PACKAGE_NAME}-build.XXXXXX`; \
|
||||||
mkdir -p $$TMPDIR/RPMS; \
|
mkdir -p $$TMPDIR/RPMS; \
|
||||||
ln -fs `pwd` $$TMPDIR/BUILD; \
|
ln -fs `pwd` $$TMPDIR/BUILD; \
|
||||||
rm -f ${PACKAGE_NAME}-${VERSION}.${RPMARCH}.rpm; \
|
rm -f ${PKGNAME}-${VERSION}.${RPMARCH}.rpm; \
|
||||||
rpmbuild -bb --define "_blddir $$TMPDIR/buildroot" \
|
rpmbuild -bb --define "_blddir $$TMPDIR/buildroot" \
|
||||||
--define "_topdir $$TMPDIR" \
|
--define "_topdir $$TMPDIR" \
|
||||||
--target ${RPMARCH} pkgscripts/libjpeg-turbo.spec; \
|
--target ${RPMARCH} pkgscripts/libjpeg-turbo.spec; \
|
||||||
cp $$TMPDIR/RPMS/${RPMARCH}/${PACKAGE_NAME}-${VERSION}-${BUILD}.${RPMARCH}.rpm \
|
cp $$TMPDIR/RPMS/${RPMARCH}/${PKGNAME}-${VERSION}-${BUILD}.${RPMARCH}.rpm \
|
||||||
${PACKAGE_NAME}-${VERSION}.${RPMARCH}.rpm; \
|
${PKGNAME}-${VERSION}.${RPMARCH}.rpm; \
|
||||||
rm -rf $$TMPDIR
|
rm -rf $$TMPDIR
|
||||||
|
|
||||||
srpm: dist-gzip
|
srpm: dist-gzip pkgscripts/libjpeg-turbo.spec
|
||||||
TMPDIR=`mktemp -d /tmp/${PACKAGE_NAME}-build.XXXXXX`; \
|
TMPDIR=`mktemp -d /tmp/${PACKAGE_NAME}-build.XXXXXX`; \
|
||||||
mkdir -p $$TMPDIR/RPMS; \
|
mkdir -p $$TMPDIR/RPMS; \
|
||||||
mkdir -p $$TMPDIR/SRPMS; \
|
mkdir -p $$TMPDIR/SRPMS; \
|
||||||
mkdir -p $$TMPDIR/BUILD; \
|
mkdir -p $$TMPDIR/BUILD; \
|
||||||
mkdir -p $$TMPDIR/SOURCES; \
|
mkdir -p $$TMPDIR/SOURCES; \
|
||||||
mkdir -p $$TMPDIR/SPECS; \
|
mkdir -p $$TMPDIR/SPECS; \
|
||||||
rm -f ${PACKAGE_NAME}-${VERSION}.src.rpm; \
|
rm -f ${PKGNAME}-${VERSION}.src.rpm; \
|
||||||
cp ${PACKAGE_NAME}-${VERSION}.tar.gz $$TMPDIR/SOURCES; \
|
cp ${PACKAGE_NAME}-${VERSION}.tar.gz $$TMPDIR/SOURCES; \
|
||||||
cat pkgscripts/libjpeg-turbo.spec | sed s/%{_blddir}/%{_tmppath}/g \
|
cat pkgscripts/libjpeg-turbo.spec | sed s/%{_blddir}/%{_tmppath}/g \
|
||||||
| sed s/#--\>//g \
|
| sed s/#--\>//g \
|
||||||
> $$TMPDIR/SPECS/libjpeg-turbo.spec; \
|
> $$TMPDIR/SPECS/libjpeg-turbo.spec; \
|
||||||
rpmbuild -bs --define "_topdir $$TMPDIR" $$TMPDIR/SPECS/libjpeg-turbo.spec; \
|
rpmbuild -bs --define "_topdir $$TMPDIR" $$TMPDIR/SPECS/libjpeg-turbo.spec; \
|
||||||
cp $$TMPDIR/SRPMS/${PACKAGE_NAME}-${VERSION}-${BUILD}.src.rpm \
|
cp $$TMPDIR/SRPMS/${PKGNAME}-${VERSION}-${BUILD}.src.rpm \
|
||||||
${PACKAGE_NAME}-${VERSION}.src.rpm; \
|
${PKGNAME}-${VERSION}.src.rpm; \
|
||||||
rm -rf $$TMPDIR
|
rm -rf $$TMPDIR
|
||||||
|
|
||||||
deb: all
|
pkgscripts/makedpkg: pkgscripts/makedpkg.tmpl
|
||||||
|
cat pkgscripts/makedpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
|
||||||
|
sed s@%{__docdir}@$(docdir)@g | sed s@%{__libdir}@$(libdir)@g \
|
||||||
|
> pkgscripts/makedpkg
|
||||||
|
|
||||||
|
deb: all pkgscripts/makedpkg
|
||||||
sh pkgscripts/makedpkg
|
sh pkgscripts/makedpkg
|
||||||
|
|
||||||
|
pkgscripts/uninstall: pkgscripts/uninstall.tmpl
|
||||||
|
cat pkgscripts/uninstall.tmpl | sed s@%{__prefix}@$(prefix)@g | \
|
||||||
|
sed s@%{__bindir}@$(bindir)@g | sed s@%{__datadir}@$(datadir)@g | \
|
||||||
|
sed s@%{__includedir}@$(includedir)@g | sed s@%{__libdir}@$(libdir)@g | \
|
||||||
|
sed s@%{__mandir}@$(mandir)@g > pkgscripts/uninstall
|
||||||
|
|
||||||
|
pkgscripts/makemacpkg: pkgscripts/makemacpkg.tmpl
|
||||||
|
cat pkgscripts/makemacpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
|
||||||
|
sed s@%{__bindir}@$(bindir)@g | sed s@%{__docdir}@$(docdir)@g | \
|
||||||
|
sed s@%{__libdir}@$(libdir)@g > pkgscripts/makemacpkg
|
||||||
|
|
||||||
if X86_64
|
if X86_64
|
||||||
|
|
||||||
udmg: all
|
udmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
||||||
sh pkgscripts/makemacpkg -build32 ${BUILDDIR32}
|
sh pkgscripts/makemacpkg -build32 ${BUILDDIR32}
|
||||||
|
|
||||||
iosdmg: all
|
iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
||||||
sh pkgscripts/makemacpkg -build32 ${BUILDDIR32} -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7}
|
sh pkgscripts/makemacpkg -build32 ${BUILDDIR32} -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
iosdmg: all
|
iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
||||||
sh pkgscripts/makemacpkg -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7}
|
sh pkgscripts/makemacpkg -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S}
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
dmg: all
|
dmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
||||||
sh pkgscripts/makemacpkg
|
sh pkgscripts/makemacpkg
|
||||||
|
|
||||||
if X86_64
|
pkgscripts/makecygwinpkg: pkgscripts/makecygwinpkg.tmpl
|
||||||
|
cat pkgscripts/makecygwinpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
|
||||||
|
sed s@%{__docdir}@$(docdir)@g | sed s@%{__libdir}@$(libdir)@g \
|
||||||
|
> pkgscripts/makecygwinpkg
|
||||||
|
|
||||||
csunpkg: all
|
cygwinpkg: all pkgscripts/makecygwinpkg
|
||||||
sh pkgscripts/makesunpkg combined ${BUILDDIR32}
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
sunpkg: all
|
|
||||||
sh pkgscripts/makesunpkg
|
|
||||||
|
|
||||||
cygwinpkg: all
|
|
||||||
sh pkgscripts/makecygwinpkg
|
sh pkgscripts/makecygwinpkg
|
||||||
|
|||||||
36
README
36
README
@@ -1,8 +1,8 @@
|
|||||||
libjpeg-turbo note: This file contains portions of the libjpeg v6b and v8
|
libjpeg-turbo note: This file has been modified by The libjpeg-turbo Project
|
||||||
README files, with additional wordsmithing by The libjpeg-turbo Project.
|
to include only information relevant to libjpeg-turbo, to wordsmith certain
|
||||||
It is included only for reference, as some parts of it may not apply to
|
sections, and to remove impolitic language that existed in the libjpeg v8
|
||||||
libjpeg-turbo. Please see README-turbo.txt for information specific to
|
README. It is included only for reference. Please see README-turbo.txt for
|
||||||
libjpeg-turbo.
|
information specific to libjpeg-turbo.
|
||||||
|
|
||||||
|
|
||||||
The Independent JPEG Group's JPEG software
|
The Independent JPEG Group's JPEG software
|
||||||
@@ -17,7 +17,8 @@ Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson,
|
|||||||
Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers,
|
Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers,
|
||||||
and other members of the Independent JPEG Group.
|
and other members of the Independent JPEG Group.
|
||||||
|
|
||||||
IJG is not affiliated with the official ISO JPEG standards committee.
|
IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee
|
||||||
|
(also known as JPEG, together with ITU-T SG16).
|
||||||
|
|
||||||
|
|
||||||
DOCUMENTATION ROADMAP
|
DOCUMENTATION ROADMAP
|
||||||
@@ -45,7 +46,6 @@ Programmer and internal documentation:
|
|||||||
libjpeg.txt How to use the JPEG library in your own programs.
|
libjpeg.txt How to use the JPEG library in your own programs.
|
||||||
example.c Sample code for calling the JPEG library.
|
example.c Sample code for calling the JPEG library.
|
||||||
structure.txt Overview of the JPEG library's internal structure.
|
structure.txt Overview of the JPEG library's internal structure.
|
||||||
filelist.txt Road map of IJG files.
|
|
||||||
coderules.txt Coding style rules --- please read if you contribute code.
|
coderules.txt Coding style rules --- please read if you contribute code.
|
||||||
|
|
||||||
Please read at least the files install.txt and usage.txt. Some information
|
Please read at least the files install.txt and usage.txt. Some information
|
||||||
@@ -129,7 +129,7 @@ with respect to this software, its quality, accuracy, merchantability, or
|
|||||||
fitness for a particular purpose. This software is provided "AS IS", and you,
|
fitness for a particular purpose. This software is provided "AS IS", and you,
|
||||||
its user, assume the entire risk as to its quality and accuracy.
|
its user, assume the entire risk as to its quality and accuracy.
|
||||||
|
|
||||||
This software is copyright (C) 1991-2010, Thomas G. Lane, Guido Vollbeding.
|
This software is copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding.
|
||||||
All Rights Reserved except as specified below.
|
All Rights Reserved except as specified below.
|
||||||
|
|
||||||
Permission is hereby granted to use, copy, modify, and distribute this
|
Permission is hereby granted to use, copy, modify, and distribute this
|
||||||
@@ -160,15 +160,6 @@ commercial products, provided that all warranty or liability claims are
|
|||||||
assumed by the product vendor.
|
assumed by the product vendor.
|
||||||
|
|
||||||
|
|
||||||
ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
|
|
||||||
sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
|
|
||||||
ansi2knr.c is NOT covered by the above copyright and conditions, but instead
|
|
||||||
by the usual distribution terms of the Free Software Foundation; principally,
|
|
||||||
that you must include source code if you redistribute it. (See the file
|
|
||||||
ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part
|
|
||||||
of any program generated from the IJG code, this does not limit you more than
|
|
||||||
the foregoing paragraphs do.
|
|
||||||
|
|
||||||
The Unix configuration script "configure" was produced with GNU Autoconf.
|
The Unix configuration script "configure" was produced with GNU Autoconf.
|
||||||
It is copyright by the Free Software Foundation but is freely distributable.
|
It is copyright by the Free Software Foundation but is freely distributable.
|
||||||
The same holds for its supporting scripts (config.guess, config.sub,
|
The same holds for its supporting scripts (config.guess, config.sub,
|
||||||
@@ -274,11 +265,12 @@ with body
|
|||||||
FILE FORMAT WARS
|
FILE FORMAT WARS
|
||||||
================
|
================
|
||||||
|
|
||||||
The ISO JPEG standards committee actually promotes different formats like
|
The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together
|
||||||
"JPEG 2000" or "JPEG XR", which are incompatible with original DCT-based
|
with ITU-T SG16) currently promotes different formats containing the name
|
||||||
JPEG. IJG therefore does not support these formats (see REFERENCES). Indeed,
|
"JPEG" which are incompatible with original DCT-based JPEG. IJG therefore does
|
||||||
one of the original reasons for developing this free software was to help
|
not support these formats (see REFERENCES). Indeed, one of the original
|
||||||
force convergence on common, interoperable format standards for JPEG files.
|
reasons for developing this free software was to help force convergence on
|
||||||
|
common, interoperable format standards for JPEG files.
|
||||||
Don't use an incompatible file format!
|
Don't use an incompatible file format!
|
||||||
(In any case, our decoder will remain capable of reading existing JPEG
|
(In any case, our decoder will remain capable of reading existing JPEG
|
||||||
image files indefinitely.)
|
image files indefinitely.)
|
||||||
|
|||||||
330
README-turbo.txt
330
README-turbo.txt
@@ -2,24 +2,26 @@
|
|||||||
** Background
|
** Background
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
libjpeg-turbo is a derivative of libjpeg that uses SIMD instructions (MMX,
|
libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2,
|
||||||
SSE2, NEON) to accelerate baseline JPEG compression and decompression on x86,
|
NEON) to accelerate baseline JPEG compression and decompression on x86, x86-64,
|
||||||
x86-64, and ARM systems. On such systems, libjpeg-turbo is generally 2-4x as
|
and ARM systems. On such systems, libjpeg-turbo is generally 2-4x as fast as
|
||||||
fast as the unmodified version of libjpeg, all else being equal.
|
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 was originally based on libjpeg/SIMD by Miyasaka Masaru, but
|
libjpeg-turbo implements both the traditional libjpeg API as well as the less
|
||||||
the TigerVNC and VirtualGL projects made numerous enhancements to the codec in
|
powerful but more straightforward TurboJPEG API. libjpeg-turbo also features
|
||||||
2009, including improved support for Mac OS X, 64-bit support, support for
|
colorspace extensions that allow it to compress from/decompress to 32-bit and
|
||||||
32-bit and big-endian pixel formats (RGBX, XBGR, etc.), accelerated Huffman
|
big-endian pixel buffers (RGBX, XBGR, etc.), as well as a full-featured Java
|
||||||
encoding/decoding, and various bug fixes. The goal was to produce a fully
|
interface.
|
||||||
open-source codec that could replace the partially closed-source TurboJPEG/IPP
|
|
||||||
codec used by VirtualGL and TurboVNC. libjpeg-turbo generally achieves 80-120%
|
|
||||||
of the performance of TurboJPEG/IPP. It is faster in some areas but slower in
|
|
||||||
others.
|
|
||||||
|
|
||||||
In early 2010, libjpeg-turbo spun off into its own independent project, with
|
libjpeg-turbo was originally based on libjpeg/SIMD, an MMX-accelerated
|
||||||
the goal of making high-speed JPEG compression/decompression technology
|
derivative of libjpeg v6b developed by Miyasaka Masaru. The TigerVNC and
|
||||||
available to a broader range of users and developers.
|
VirtualGL projects made numerous enhancements to the codec in 2009, and in
|
||||||
|
early 2010, libjpeg-turbo spun off into an independent project, with the goal
|
||||||
|
of making high-speed JPEG compression/decompression technology available to a
|
||||||
|
broader range of users and developers.
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
@@ -27,7 +29,7 @@ available to a broader range of users and developers.
|
|||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
Most of libjpeg-turbo inherits the non-restrictive, BSD-style license used by
|
Most of libjpeg-turbo inherits the non-restrictive, BSD-style license used by
|
||||||
libjpeg (see README.) The TurboJPEG/OSS wrapper (both C and Java versions) and
|
libjpeg (see README.) The TurboJPEG wrapper (both C and Java versions) and
|
||||||
associated test programs bear a similar license, which is reproduced below:
|
associated test programs bear a similar license, which is reproduced below:
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
@@ -71,16 +73,32 @@ JPEG images:
|
|||||||
|
|
||||||
libjpeg API: This is the de facto industry-standard API for compressing and
|
libjpeg API: This is the de facto industry-standard API for compressing and
|
||||||
decompressing JPEG images. It is more difficult to use than the TurboJPEG
|
decompressing JPEG images. It is more difficult to use than the TurboJPEG
|
||||||
API but also more powerful. libjpeg-turbo is both API/ABI-compatible and
|
API but also more powerful. The libjpeg API implementation in libjpeg-turbo
|
||||||
mathematically compatible with libjpeg v6b. It can also optionally be
|
is both API/ABI-compatible and mathematically compatible with libjpeg v6b.
|
||||||
configured to be API/ABI-compatible with libjpeg v7 and v8 (see below.)
|
It can also optionally be configured to be API/ABI-compatible with libjpeg v7
|
||||||
|
and v8 (see below.)
|
||||||
|
|
||||||
|
There is no significant performance advantage to either API when both are used
|
||||||
|
to perform similar operations.
|
||||||
|
|
||||||
|
======================
|
||||||
|
Installation Directory
|
||||||
|
======================
|
||||||
|
|
||||||
|
This document assumes that libjpeg-turbo will be installed in the default
|
||||||
|
directory (/opt/libjpeg-turbo on Un*x and Mac systems and
|
||||||
|
c:\libjpeg-turbo[-gcc][64] on Windows systems. If your installation of
|
||||||
|
libjpeg-turbo resides in a different directory, then adjust the instructions
|
||||||
|
accordingly.
|
||||||
|
|
||||||
=============================
|
=============================
|
||||||
Replacing libjpeg at Run Time
|
Replacing libjpeg at Run Time
|
||||||
=============================
|
=============================
|
||||||
|
|
||||||
If a Unix application is dynamically linked with libjpeg, then you can replace
|
Un*x
|
||||||
|
----
|
||||||
|
|
||||||
|
If a Un*x application is dynamically linked with libjpeg, then you can replace
|
||||||
libjpeg with libjpeg-turbo at run time by manipulating LD_LIBRARY_PATH.
|
libjpeg with libjpeg-turbo at run time by manipulating LD_LIBRARY_PATH.
|
||||||
For instance:
|
For instance:
|
||||||
|
|
||||||
@@ -97,67 +115,51 @@ For instance:
|
|||||||
user 0m0.029s
|
user 0m0.029s
|
||||||
sys 0m0.010s
|
sys 0m0.010s
|
||||||
|
|
||||||
NOTE: {lib} can be lib, lib32, lib64, or lib/64, depending on the O/S and
|
({lib} = lib32 or lib64, depending on whether you wish to use the 32-bit or the
|
||||||
architecture.
|
64-bit version of libjpeg-turbo.)
|
||||||
|
|
||||||
System administrators can also replace the libjpeg sym links in /usr/{lib} with
|
System administrators can also replace the libjpeg symlinks in /usr/lib* with
|
||||||
links to the libjpeg-turbo dynamic library located in /opt/libjpeg-turbo/{lib}.
|
links to the libjpeg-turbo dynamic library located in /opt/libjpeg-turbo/{lib}.
|
||||||
This will effectively accelerate every application that uses the libjpeg
|
This will effectively accelerate every application that uses the libjpeg
|
||||||
dynamic library on the system.
|
dynamic library on the system.
|
||||||
|
|
||||||
The libjpeg-turbo SDK for Visual C++ installs the libjpeg-turbo DLL
|
Windows
|
||||||
(jpeg62.dll, jpeg7.dll, or jpeg8.dll, depending on whether it was built with
|
-------
|
||||||
libjpeg v6b, v7, or v8 emulation) into c:\libjpeg-turbo[64]\bin, and the PATH
|
|
||||||
environment variable can be modified such that this directory is searched
|
|
||||||
before any others that might contain a libjpeg DLL. However, if a libjpeg
|
|
||||||
DLL exists in an application's install directory, then Windows will load this
|
|
||||||
DLL first whenever the application is launched. Thus, if an application ships
|
|
||||||
with jpeg62.dll, jpeg7.dll, or jpeg8.dll, then back up the application's
|
|
||||||
version of this DLL and copy c:\libjpeg-turbo[64]\bin\jpeg*.dll into the
|
|
||||||
application's install directory to accelerate it.
|
|
||||||
|
|
||||||
The version of the libjpeg-turbo DLL distributed in the libjpeg-turbo SDK for
|
If a Windows application is dynamically linked with libjpeg, then you can
|
||||||
Visual C++ requires the Visual C++ 2008 C run-time DLL (msvcr90.dll).
|
replace libjpeg with libjpeg-turbo at run time by backing up the application's
|
||||||
|
copy of jpeg62.dll, jpeg7.dll, or jpeg8.dll (assuming the application has its
|
||||||
|
own local copy of this library) and copying the corresponding DLL from
|
||||||
|
libjpeg-turbo into the application's install directory. The official
|
||||||
|
libjpeg-turbo binary packages only provide jpeg62.dll. If the application uses
|
||||||
|
jpeg7.dll or jpeg8.dll instead, then it will be necessary to build
|
||||||
|
libjpeg-turbo from source (see "libjpeg v7 and v8 API/ABI Emulation" below.)
|
||||||
|
|
||||||
|
The following information is specific to the official libjpeg-turbo binary
|
||||||
|
packages for Visual C++:
|
||||||
|
|
||||||
|
-- jpeg62.dll requires the Visual C++ 2008 C run-time DLL (msvcr90.dll).
|
||||||
msvcr90.dll ships with more recent versions of Windows, but users of older
|
msvcr90.dll ships with more recent versions of Windows, but users of older
|
||||||
Windows releases can obtain it from the Visual C++ 2008 Redistributable
|
Windows releases can obtain it from the Visual C++ 2008 Redistributable
|
||||||
Package, which is available as a free download from Microsoft's web site.
|
Package, which is available as a free download from Microsoft's web site.
|
||||||
|
|
||||||
NOTE: Features of libjpeg that require passing a C run-time structure, such
|
-- Features of the libjpeg API that require passing a C run-time structure,
|
||||||
as a file handle, from an application to libjpeg will probably not work with
|
such as a file handle, from an application to the library will probably not
|
||||||
the version of the libjpeg-turbo DLL distributed in the libjpeg-turbo SDK for
|
work with jpeg62.dll, unless the application is also built to use the Visual
|
||||||
Visual C++, unless the application is also built to use the Visual C++ 2008 C
|
C++ 2008 C run-time DLL. In particular, this affects jpeg_stdio_dest() and
|
||||||
run-time DLL. In particular, this affects jpeg_stdio_dest() and
|
|
||||||
jpeg_stdio_src().
|
jpeg_stdio_src().
|
||||||
|
|
||||||
|
Mac
|
||||||
|
---
|
||||||
|
|
||||||
Mac applications typically embed their own copies of the libjpeg dylib inside
|
Mac applications typically embed their own copies of the libjpeg dylib inside
|
||||||
the (hidden) application bundle, so it is not possible to globally replace
|
the (hidden) application bundle, so it is not possible to globally replace
|
||||||
libjpeg on OS X systems. If an application uses a shared library version of
|
libjpeg on OS X systems. Replacing the application's version of the libjpeg
|
||||||
libjpeg, then it may be possible to replace the application's version of it.
|
dylib would generally involve copying libjpeg.*.dylib from libjpeg-turbo into
|
||||||
This would generally involve copying libjpeg.*.dylib from libjpeg-turbo into
|
|
||||||
the appropriate place in the application bundle and using install_name_tool to
|
the appropriate place in the application bundle and using install_name_tool to
|
||||||
repoint the dylib to the new directory. This requires an advanced knowledge of
|
repoint the libjpeg-turbo dylib to its new directory. This requires an
|
||||||
OS X and would not survive an upgrade or a re-install of the application.
|
advanced knowledge of OS X and would not survive an upgrade or a re-install of
|
||||||
Thus, it is not recommended for most users.
|
the application. Thus, it is not recommended for most users.
|
||||||
|
|
||||||
=======================
|
|
||||||
Replacing TurboJPEG/IPP
|
|
||||||
=======================
|
|
||||||
|
|
||||||
libjpeg-turbo is a drop-in replacement for the TurboJPEG/IPP SDK used by
|
|
||||||
VirtualGL 2.1.x and TurboVNC 0.6 (and prior.) libjpeg-turbo contains a wrapper
|
|
||||||
library (TurboJPEG/OSS) that emulates the TurboJPEG API using libjpeg-turbo
|
|
||||||
instead of the closed-source Intel Performance Primitives. You can replace the
|
|
||||||
TurboJPEG/IPP package on Linux systems with the libjpeg-turbo package in order
|
|
||||||
to make existing releases of VirtualGL 2.1.x and TurboVNC 0.x use the new codec
|
|
||||||
at run time. Note that the 64-bit libjpeg-turbo packages contain only 64-bit
|
|
||||||
binaries, whereas the TurboJPEG/IPP 64-bit packages contained both 64-bit and
|
|
||||||
32-bit binaries. Thus, to replace a TurboJPEG/IPP 64-bit package, install
|
|
||||||
both the 64-bit and 32-bit versions of libjpeg-turbo.
|
|
||||||
|
|
||||||
You can also build the VirtualGL 2.1.x and TurboVNC 0.6 source code with
|
|
||||||
the libjpeg-turbo SDK instead of TurboJPEG/IPP. It should work identically.
|
|
||||||
libjpeg-turbo also includes static library versions of TurboJPEG/OSS, which
|
|
||||||
are used to build VirtualGL 2.2 and TurboVNC 1.0 and later.
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
Using libjpeg-turbo in Your Own Programs
|
Using libjpeg-turbo in Your Own Programs
|
||||||
@@ -165,8 +167,8 @@ Using libjpeg-turbo in Your Own Programs
|
|||||||
|
|
||||||
For the most part, libjpeg-turbo should work identically to libjpeg, so in
|
For the most part, libjpeg-turbo should work identically to libjpeg, so in
|
||||||
most cases, an application can be built against libjpeg and then run against
|
most cases, an application can be built against libjpeg and then run against
|
||||||
libjpeg-turbo. On Unix systems (including Cygwin), you can build against
|
libjpeg-turbo. On Un*x systems and Cygwin, you can build against libjpeg-turbo
|
||||||
libjpeg-turbo instead of libjpeg by setting
|
instead of libjpeg by setting
|
||||||
|
|
||||||
CPATH=/opt/libjpeg-turbo/include
|
CPATH=/opt/libjpeg-turbo/include
|
||||||
and
|
and
|
||||||
@@ -183,20 +185,20 @@ If using MinGW, then set
|
|||||||
|
|
||||||
Building against libjpeg-turbo is useful, for instance, if you want to build an
|
Building against libjpeg-turbo is useful, for instance, if you want to build an
|
||||||
application that leverages the libjpeg-turbo colorspace extensions (see below.)
|
application that leverages the libjpeg-turbo colorspace extensions (see below.)
|
||||||
On Linux and Solaris systems, you would still need to manipulate
|
On Un*x systems, you would still need to manipulate LD_LIBRARY_PATH or create
|
||||||
LD_LIBRARY_PATH or create appropriate sym links to use libjpeg-turbo at run
|
appropriate symlinks to use libjpeg-turbo at run time. On such systems, you
|
||||||
time. On such systems, you can pass -R /opt/libjpeg-turbo/{lib} to the linker
|
can pass -R /opt/libjpeg-turbo/{lib} to the linker to force the use of
|
||||||
to force the use of libjpeg-turbo at run time rather than libjpeg (also useful
|
libjpeg-turbo at run time rather than libjpeg (also useful if you want to
|
||||||
if you want to leverage the colorspace extensions), or you can link against the
|
leverage the colorspace extensions), or you can link against the libjpeg-turbo
|
||||||
libjpeg-turbo static library.
|
static library.
|
||||||
|
|
||||||
To force a Linux, Solaris, or MinGW application to link against the static
|
To force a Un*x or MinGW application to link against the static version of
|
||||||
version of libjpeg-turbo, you can use the following linker options:
|
libjpeg-turbo, you can use the following linker options:
|
||||||
|
|
||||||
-Wl,-Bstatic -ljpeg -Wl,-Bdynamic
|
-Wl,-Bstatic -ljpeg -Wl,-Bdynamic
|
||||||
|
|
||||||
On OS X, simply add /opt/libjpeg-turbo/lib/libjpeg.a to the linker command
|
On OS X, simply add /opt/libjpeg-turbo/lib/libjpeg.a to the linker command
|
||||||
line (this also works on Linux and Solaris.)
|
line.
|
||||||
|
|
||||||
To build Visual C++ applications using libjpeg-turbo, add
|
To build Visual C++ applications using libjpeg-turbo, add
|
||||||
c:\libjpeg-turbo[64]\include to the system or user INCLUDE environment
|
c:\libjpeg-turbo[64]\include to the system or user INCLUDE environment
|
||||||
@@ -234,8 +236,10 @@ time with:
|
|||||||
|
|
||||||
#ifdef JCS_EXTENSIONS
|
#ifdef JCS_EXTENSIONS
|
||||||
|
|
||||||
At run time, attempting to use these extensions with a version of libjpeg
|
At run time, attempting to use these extensions with a libjpeg implementation
|
||||||
that doesn't support them will result in a "Bogus input colorspace" error.
|
that does not support them will result in a "Bogus input colorspace" error.
|
||||||
|
Applications can trap this error in order to test whether run-time support is
|
||||||
|
available for the colorspace extensions.
|
||||||
|
|
||||||
When using the RGBX, BGRX, XBGR, and XRGB colorspaces during decompression, the
|
When using the RGBX, BGRX, XBGR, and XRGB colorspaces during decompression, the
|
||||||
X byte is undefined, and in order to ensure the best performance, libjpeg-turbo
|
X byte is undefined, and in order to ensure the best performance, libjpeg-turbo
|
||||||
@@ -252,34 +256,47 @@ extensions at compile time with:
|
|||||||
jcstest.c, located in the libjpeg-turbo source tree, demonstrates how to check
|
jcstest.c, located in the libjpeg-turbo source tree, demonstrates how to check
|
||||||
for the existence of the colorspace extensions at compile time and run time.
|
for the existence of the colorspace extensions at compile time and run time.
|
||||||
|
|
||||||
=================================
|
===================================
|
||||||
libjpeg v7 and v8 API/ABI support
|
libjpeg v7 and v8 API/ABI Emulation
|
||||||
=================================
|
===================================
|
||||||
|
|
||||||
With libjpeg v7 and v8, new features were added that necessitated extending the
|
With libjpeg v7 and v8, new features were added that necessitated extending the
|
||||||
compression and decompression structures. Unfortunately, due to the exposed
|
compression and decompression structures. Unfortunately, due to the exposed
|
||||||
nature of those structures, extending them also necessitated breaking backward
|
nature of those structures, extending them also necessitated breaking backward
|
||||||
ABI compatibility with previous libjpeg releases. Thus, programs that are
|
ABI compatibility with previous libjpeg releases. Thus, programs that were
|
||||||
built to use libjpeg v7 or v8 did not work with libjpeg-turbo, since it is
|
built to use libjpeg v7 or v8 did not work with libjpeg-turbo, since it is
|
||||||
based on the libjpeg v6b code base. Although libjpeg v7 and v8 are still not
|
based on the libjpeg v6b code base. Although libjpeg v7 and v8 are still not
|
||||||
as widely used as v6b, enough programs (including a few Linux distros) have
|
as widely used as v6b, enough programs (including a few Linux distros) made
|
||||||
made the switch that it was desirable to provide support for the libjpeg v7/v8
|
the switch that there was a demand to emulate the libjpeg v7 and v8 ABIs
|
||||||
API/ABI in libjpeg-turbo. Although libjpeg-turbo can now be configured as a
|
in libjpeg-turbo. It should be noted, however, that this feature was added
|
||||||
drop-in replacement for libjpeg v7 or v8, it should be noted that not all of
|
primarily so that applications that had already been compiled to use libjpeg
|
||||||
the features in libjpeg v7 and v8 are supported (see below.)
|
v7+ could take advantage of accelerated baseline JPEG encoding/decoding
|
||||||
|
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
|
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
|
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 API/ABI, so that programs
|
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
|
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
|
following section describes which libjpeg v7+ features are supported and which
|
||||||
aren't.
|
aren't.
|
||||||
|
|
||||||
libjpeg v7 and v8 Features:
|
Support for libjpeg v7 and v8 Features:
|
||||||
---------------------------
|
---------------------------------------
|
||||||
|
|
||||||
Fully supported:
|
Fully supported:
|
||||||
|
|
||||||
|
-- libjpeg: IDCT scaling extensions in decompressor
|
||||||
|
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: In-memory source and destination managers
|
||||||
|
See notes below.
|
||||||
|
|
||||||
-- cjpeg: Separate quality settings for luminance and chrominance
|
-- cjpeg: Separate quality settings for luminance and chrominance
|
||||||
Note that the libpjeg v7+ API was extended to accommodate this feature only
|
Note that the libpjeg v7+ API was extended to accommodate this feature only
|
||||||
for convenience purposes. It has always been possible to implement this
|
for convenience purposes. It has always been possible to implement this
|
||||||
@@ -287,38 +304,47 @@ Fully supported:
|
|||||||
|
|
||||||
-- cjpeg: 32-bit BMP support
|
-- cjpeg: 32-bit BMP support
|
||||||
|
|
||||||
|
-- cjpeg: -rgb option
|
||||||
|
|
||||||
-- jpegtran: lossless cropping
|
-- jpegtran: lossless cropping
|
||||||
|
|
||||||
-- jpegtran: -perfect option
|
-- jpegtran: -perfect option
|
||||||
|
|
||||||
|
-- jpegtran: forcing width/height when performing lossless crop
|
||||||
|
|
||||||
-- rdjpgcom: -raw option
|
-- rdjpgcom: -raw option
|
||||||
|
|
||||||
-- rdjpgcom: locale awareness
|
-- rdjpgcom: locale awareness
|
||||||
|
|
||||||
|
|
||||||
Fully supported when using libjpeg v7/v8 emulation:
|
|
||||||
|
|
||||||
-- libjpeg: In-memory source and destination managers
|
|
||||||
|
|
||||||
|
|
||||||
Not supported:
|
Not supported:
|
||||||
|
|
||||||
|
NOTE: As of this writing, extensive research has been conducted into the
|
||||||
|
usefulness of DCT scaling as a means of data reduction and SmartScale as a
|
||||||
|
means of quality improvement. The reader is invited to peruse the research at
|
||||||
|
http://www.libjpeg-turbo.org/About/SmartScale and draw his/her own conclusions,
|
||||||
|
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
|
-- libjpeg: DCT scaling in compressor
|
||||||
cinfo.scale_num and cinfo.scale_denom are silently ignored.
|
cinfo.scale_num and cinfo.scale_denom are silently ignored.
|
||||||
There is no technical reason why DCT scaling cannot be supported, but
|
There is no technical reason why DCT scaling could not be supported when
|
||||||
without the SmartScale extension (see below), it would only be able to
|
emulating the libjpeg v7+ API/ABI, but without the SmartScale extension (see
|
||||||
down-scale using ratios of 1/2, 8/15, 4/7, 8/13, 2/3, 8/11, 4/5, and 8/9,
|
below), only scaling factors of 1/2, 8/15, 4/7, 8/13, 2/3, 8/11, 4/5, and
|
||||||
which is of limited usefulness.
|
8/9 would be available, which is of limited usefulness.
|
||||||
|
|
||||||
-- libjpeg: SmartScale
|
-- libjpeg: SmartScale
|
||||||
cinfo.block_size is silently ignored.
|
cinfo.block_size is silently ignored.
|
||||||
SmartScale is an extension to the JPEG format that allows for DCT block
|
SmartScale is an extension to the JPEG format that allows for DCT block
|
||||||
sizes other than 8x8. It would be difficult to support this feature while
|
sizes other than 8x8. Providing support for this new format would be
|
||||||
retaining backward compatibility with libjpeg v6b.
|
feasible (particularly without full acceleration.) However, until/unless
|
||||||
|
the format becomes either an official industry standard or, at minimum, an
|
||||||
-- libjpeg: IDCT scaling extensions in decompressor
|
accepted solution in the community, we are hesitant to implement it, as
|
||||||
libjpeg-turbo still supports IDCT scaling with scaling factors of 1/2, 1/4,
|
there is no sense of whether or how it might change in the future. It is
|
||||||
and 1/8 (same as libjpeg v6b.)
|
our belief that SmartScale has not demonstrated sufficient usefulness as a
|
||||||
|
lossless format nor as a means of quality enhancement, and thus, our primary
|
||||||
|
interest in providing this feature would be as a means of supporting
|
||||||
|
additional DCT scaling factors.
|
||||||
|
|
||||||
-- libjpeg: Fancy downsampling in compressor
|
-- libjpeg: Fancy downsampling in compressor
|
||||||
cinfo.do_fancy_downsampling is silently ignored.
|
cinfo.do_fancy_downsampling is silently ignored.
|
||||||
@@ -331,9 +357,97 @@ Not supported:
|
|||||||
-- Lossless RGB JPEG files
|
-- Lossless RGB JPEG files
|
||||||
This requires the SmartScale feature, which is not supported.
|
This requires the SmartScale feature, which is not supported.
|
||||||
|
|
||||||
|
What About libjpeg v9?
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
libjpeg v9 introduced yet another field to the JPEG compression structure
|
||||||
|
(color_transform), thus making the ABI backward incompatible with that of
|
||||||
|
libjpeg v8. This new field was introduced solely for the purpose of supporting
|
||||||
|
lossless SmartScale encoding. Further, there was actually no reason to extend
|
||||||
|
the API in this manner, as the color transform could have just as easily been
|
||||||
|
activated by way of a new JPEG colorspace constant, thus preserving backward
|
||||||
|
ABI compatibility.
|
||||||
|
|
||||||
|
Our research (see link above) has shown that lossless SmartScale does not
|
||||||
|
generally accomplish anything that can't already be accomplished better with
|
||||||
|
existing, standard lossless formats. Thus, at this time, it is our belief that
|
||||||
|
there is not sufficient technical justification for software to upgrade from
|
||||||
|
libjpeg v8 to libjpeg v9, and therefore, not sufficient technical justification
|
||||||
|
for us to emulate the libjpeg v9 ABI.
|
||||||
|
|
||||||
|
=====================================
|
||||||
|
In-Memory Source/Destination Managers
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
By default, libjpeg-turbo 1.3 and later includes the jpeg_mem_src() and
|
||||||
|
jpeg_mem_dest() functions, even when not emulating the libjpeg v8 API/ABI.
|
||||||
|
Previously, it was necessary to build libjpeg-turbo from source with libjpeg v8
|
||||||
|
API/ABI emulation in order to use the in-memory source/destination managers,
|
||||||
|
but several projects requested that those functions be included when emulating
|
||||||
|
the libjpeg v6b API/ABI as well. This allows the use of those functions by
|
||||||
|
programs that need them without breaking ABI compatibility for programs that
|
||||||
|
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 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.0.0 to 62.1.0 if using libjpeg v6b API/ABI
|
||||||
|
emulation and from 7.0.0 to 7.1.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
|
||||||
|
is built against libjpeg-turbo 1.3+ and uses jpeg_mem_src() or jpeg_mem_dest(),
|
||||||
|
that program will not fail if run against an older version of libjpeg-turbo or
|
||||||
|
against libjpeg v7- until the program actually tries to call jpeg_mem_src() or
|
||||||
|
jpeg_mem_dest(). Such is not the case on Windows. If a program is built
|
||||||
|
against the libjpeg-turbo 1.3+ DLL and uses jpeg_mem_src() or jpeg_mem_dest(),
|
||||||
|
then it must use the libjpeg-turbo 1.3+ DLL at run time.
|
||||||
|
|
||||||
|
Both cjpeg and djpeg have been extended to allow testing the in-memory
|
||||||
|
source/destination manager functions. See their respective man pages for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
** Performance pitfalls
|
** Mathematical Compatibility
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
|
For the most part, libjpeg-turbo should produce identical output to libjpeg
|
||||||
|
v6b. The one exception to this is when using the floating point DCT/IDCT, in
|
||||||
|
which case the outputs of libjpeg v6b and libjpeg-turbo are not guaranteed to
|
||||||
|
be identical (the accuracy of the floating point DCT/IDCT is constant when
|
||||||
|
using libjpeg-turbo's SIMD extensions, but otherwise, it can depend heavily on
|
||||||
|
the compiler and compiler settings.)
|
||||||
|
|
||||||
|
While libjpeg-turbo does emulate the libjpeg v8 API/ABI, under the hood, it is
|
||||||
|
still using the same algorithms as libjpeg v6b, so there are several specific
|
||||||
|
cases in which libjpeg-turbo cannot be expected to produce the same output as
|
||||||
|
libjpeg v8:
|
||||||
|
|
||||||
|
-- When decompressing using scaling factors of 1/2 and 1/4, because libjpeg v8
|
||||||
|
implements those scaling algorithms a bit differently than libjpeg v6b does,
|
||||||
|
and libjpeg-turbo's SIMD extensions are based on the libjpeg v6b behavior.
|
||||||
|
|
||||||
|
-- When using chrominance subsampling, because libjpeg v8 implements this
|
||||||
|
with its DCT/IDCT scaling algorithms rather than with a separate
|
||||||
|
downsampling/upsampling algorithm.
|
||||||
|
|
||||||
|
-- When using the floating point IDCT, for the reasons stated above and also
|
||||||
|
because the floating point IDCT algorithm was modified in libjpeg v8a to
|
||||||
|
improve accuracy.
|
||||||
|
|
||||||
|
-- When decompressing using a scaling factor > 1 and merged (AKA "non-fancy" or
|
||||||
|
"non-smooth") chrominance upsampling, because libjpeg v8 does not support
|
||||||
|
merged upsampling with scaling factors > 1.
|
||||||
|
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
** Performance Pitfalls
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
===============
|
===============
|
||||||
|
|||||||
18
change.log
18
change.log
@@ -1,6 +1,21 @@
|
|||||||
|
NOTE: This file was modified by The libjpeg-turbo Project to include only
|
||||||
|
information relevant to libjpeg-turbo.
|
||||||
|
|
||||||
CHANGE LOG for Independent JPEG Group's JPEG software
|
CHANGE LOG for Independent JPEG Group's JPEG software
|
||||||
|
|
||||||
|
|
||||||
|
Version 8d 15-Jan-2012
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Add cjpeg -rgb option to create RGB JPEG files.
|
||||||
|
Using this switch suppresses the conversion from RGB
|
||||||
|
colorspace input to the default YCbCr JPEG colorspace.
|
||||||
|
Thank to Michael Koch for the initial suggestion.
|
||||||
|
|
||||||
|
Add option to disable the region adjustment in the transupp crop code.
|
||||||
|
Thank to Jeffrey Friedl for the suggestion.
|
||||||
|
|
||||||
|
|
||||||
Version 8b 16-May-2010
|
Version 8b 16-May-2010
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
@@ -31,6 +46,9 @@ Thank to Roberto Boni from Italy for the suggestion.
|
|||||||
Version 7 27-Jun-2009
|
Version 7 27-Jun-2009
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
New scaled DCTs implemented.
|
||||||
|
djpeg now supports scalings N/8 with all N from 1 to 16.
|
||||||
|
|
||||||
cjpeg -quality option has been extended for support of separate quality
|
cjpeg -quality option has been extended for support of separate quality
|
||||||
settings for luminance and chrominance (or in general, for every provided
|
settings for luminance and chrominance (or in general, for every provided
|
||||||
quantization table slot).
|
quantization table slot).
|
||||||
|
|||||||
16
cjpeg.1
16
cjpeg.1
@@ -1,4 +1,4 @@
|
|||||||
.TH CJPEG 1 "31 January 2012"
|
.TH CJPEG 1 "18 January 2013"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
cjpeg \- compress an image file to a JPEG file
|
cjpeg \- compress an image file to a JPEG file
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -49,6 +49,11 @@ By saying
|
|||||||
.BR \-grayscale ,
|
.BR \-grayscale ,
|
||||||
you'll get a smaller JPEG file that takes less time to process.
|
you'll get a smaller JPEG file that takes less time to process.
|
||||||
.TP
|
.TP
|
||||||
|
.B \-rgb
|
||||||
|
Create RGB JPEG file.
|
||||||
|
Using this switch suppresses the conversion from RGB
|
||||||
|
colorspace input to the default YCbCr JPEG colorspace.
|
||||||
|
.TP
|
||||||
.B \-optimize
|
.B \-optimize
|
||||||
Perform optimization of entropy encoding parameters. Without this, default
|
Perform optimization of entropy encoding parameters. Without this, default
|
||||||
encoding parameters are used.
|
encoding parameters are used.
|
||||||
@@ -190,6 +195,11 @@ selects 4000000 bytes. If more space is needed, temporary files will be used.
|
|||||||
.BI \-outfile " name"
|
.BI \-outfile " name"
|
||||||
Send output image to the named file, not to standard output.
|
Send output image to the named file, not to standard output.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-memdst
|
||||||
|
Compress to memory instead of a file. This feature was implemented mainly as a
|
||||||
|
way of testing the in-memory destination manager (jpeg_mem_dest()), but it is
|
||||||
|
also useful for benchmarking, since it reduces the I/O overhead.
|
||||||
|
.TP
|
||||||
.B \-verbose
|
.B \-verbose
|
||||||
Enable debug printout. More
|
Enable debug printout. More
|
||||||
.BR \-v 's
|
.BR \-v 's
|
||||||
@@ -308,6 +318,10 @@ Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
|
|||||||
Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44.
|
Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44.
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Independent JPEG Group
|
Independent JPEG Group
|
||||||
|
.PP
|
||||||
|
This file was modified by The libjpeg-turbo Project to include only information
|
||||||
|
relevant to libjpeg-turbo, to wordsmith certain sections, and to describe
|
||||||
|
features not present in libjpeg.
|
||||||
.SH BUGS
|
.SH BUGS
|
||||||
Support for GIF input files was removed in cjpeg v6b due to concerns over
|
Support for GIF input files was removed in cjpeg v6b due to concerns over
|
||||||
the Unisys LZW patent. Although this patent expired in 2006, cjpeg still
|
the Unisys LZW patent. Although this patent expired in 2006, cjpeg still
|
||||||
|
|||||||
56
cjpeg.c
56
cjpeg.c
@@ -1,10 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* cjpeg.c
|
* cjpeg.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1998, Thomas G. Lane.
|
* Copyright (C) 1991-1998, Thomas G. Lane.
|
||||||
* Modified 2003-2008 by Guido Vollbeding.
|
* Modified 2003-2011 by Guido Vollbeding.
|
||||||
* Copyright (C) 2010, D. R. Commander.
|
* Modifications:
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* Copyright (C) 2010, 2013, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains a command-line user interface for the JPEG compressor.
|
* This file contains a command-line user interface for the JPEG compressor.
|
||||||
@@ -138,6 +139,7 @@ select_file_type (j_compress_ptr cinfo, FILE * infile)
|
|||||||
|
|
||||||
static const char * progname; /* program name for error messages */
|
static const char * progname; /* program name for error messages */
|
||||||
static char * outfilename; /* for -outfile switch */
|
static char * outfilename; /* for -outfile switch */
|
||||||
|
boolean memdst; /* for -memdst switch */
|
||||||
|
|
||||||
|
|
||||||
LOCAL(void)
|
LOCAL(void)
|
||||||
@@ -154,6 +156,7 @@ usage (void)
|
|||||||
fprintf(stderr, "Switches (names may be abbreviated):\n");
|
fprintf(stderr, "Switches (names may be abbreviated):\n");
|
||||||
fprintf(stderr, " -quality N[,...] Compression quality (0..100; 5-95 is useful range)\n");
|
fprintf(stderr, " -quality N[,...] Compression quality (0..100; 5-95 is useful range)\n");
|
||||||
fprintf(stderr, " -grayscale Create monochrome JPEG file\n");
|
fprintf(stderr, " -grayscale Create monochrome JPEG file\n");
|
||||||
|
fprintf(stderr, " -rgb Create RGB JPEG file\n");
|
||||||
#ifdef ENTROPY_OPT_SUPPORTED
|
#ifdef ENTROPY_OPT_SUPPORTED
|
||||||
fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression)\n");
|
fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression)\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -185,6 +188,9 @@ usage (void)
|
|||||||
#endif
|
#endif
|
||||||
fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n");
|
fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n");
|
||||||
fprintf(stderr, " -outfile name Specify name for output file\n");
|
fprintf(stderr, " -outfile name Specify name for output file\n");
|
||||||
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
|
fprintf(stderr, " -memdst Compress to memory instead of file (useful for benchmarking)\n");
|
||||||
|
#endif
|
||||||
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
||||||
fprintf(stderr, "Switches for wizards:\n");
|
fprintf(stderr, "Switches for wizards:\n");
|
||||||
fprintf(stderr, " -baseline Force baseline quantization tables\n");
|
fprintf(stderr, " -baseline Force baseline quantization tables\n");
|
||||||
@@ -226,6 +232,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
simple_progressive = FALSE;
|
simple_progressive = FALSE;
|
||||||
is_targa = FALSE;
|
is_targa = FALSE;
|
||||||
outfilename = NULL;
|
outfilename = NULL;
|
||||||
|
memdst = FALSE;
|
||||||
cinfo->err->trace_level = 0;
|
cinfo->err->trace_level = 0;
|
||||||
|
|
||||||
/* Scan command line options, adjust parameters */
|
/* Scan command line options, adjust parameters */
|
||||||
@@ -278,7 +285,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
fprintf(stderr, "%s version %s (build %s)\n",
|
fprintf(stderr, "%s version %s (build %s)\n",
|
||||||
PACKAGE_NAME, VERSION, BUILD);
|
PACKAGE_NAME, VERSION, BUILD);
|
||||||
fprintf(stderr, "%s\n\n", JCOPYRIGHT);
|
fprintf(stderr, "%s\n\n", JCOPYRIGHT);
|
||||||
fprintf(stderr, "Emulating The Independent JPEG Group's libjpeg, version %s\n\n",
|
fprintf(stderr, "Emulating The Independent JPEG Group's software, version %s\n\n",
|
||||||
JVERSION);
|
JVERSION);
|
||||||
printed_version = TRUE;
|
printed_version = TRUE;
|
||||||
}
|
}
|
||||||
@@ -288,6 +295,10 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
/* Force a monochrome JPEG file to be generated. */
|
/* Force a monochrome JPEG file to be generated. */
|
||||||
jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
|
jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "rgb", 3)) {
|
||||||
|
/* Force an RGB JPEG file to be generated. */
|
||||||
|
jpeg_set_colorspace(cinfo, JCS_RGB);
|
||||||
|
|
||||||
} else if (keymatch(arg, "maxmemory", 3)) {
|
} else if (keymatch(arg, "maxmemory", 3)) {
|
||||||
/* Maximum memory in Kb (or Mb with 'm'). */
|
/* Maximum memory in Kb (or Mb with 'm'). */
|
||||||
long lval;
|
long lval;
|
||||||
@@ -306,7 +317,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
#ifdef ENTROPY_OPT_SUPPORTED
|
#ifdef ENTROPY_OPT_SUPPORTED
|
||||||
cinfo->optimize_coding = TRUE;
|
cinfo->optimize_coding = TRUE;
|
||||||
#else
|
#else
|
||||||
fprintf(stderr, "%s: sorry, entropy optimization was not compiled\n",
|
fprintf(stderr, "%s: sorry, entropy optimization was not compiled in\n",
|
||||||
progname);
|
progname);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
#endif
|
#endif
|
||||||
@@ -323,7 +334,17 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
simple_progressive = TRUE;
|
simple_progressive = TRUE;
|
||||||
/* We must postpone execution until num_components is known. */
|
/* We must postpone execution until num_components is known. */
|
||||||
#else
|
#else
|
||||||
fprintf(stderr, "%s: sorry, progressive output was not compiled\n",
|
fprintf(stderr, "%s: sorry, progressive output was not compiled in\n",
|
||||||
|
progname);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "memdst", 2)) {
|
||||||
|
/* Use in-memory destination manager */
|
||||||
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
|
memdst = TRUE;
|
||||||
|
#else
|
||||||
|
fprintf(stderr, "%s: sorry, in-memory destination manager was not compiled in\n",
|
||||||
progname);
|
progname);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
#endif
|
#endif
|
||||||
@@ -388,7 +409,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
scansarg = argv[argn];
|
scansarg = argv[argn];
|
||||||
/* We must postpone reading the file in case -progressive appears. */
|
/* We must postpone reading the file in case -progressive appears. */
|
||||||
#else
|
#else
|
||||||
fprintf(stderr, "%s: sorry, multi-scan output was not compiled\n",
|
fprintf(stderr, "%s: sorry, multi-scan output was not compiled in\n",
|
||||||
progname);
|
progname);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
#endif
|
#endif
|
||||||
@@ -467,7 +488,9 @@ main (int argc, char **argv)
|
|||||||
int file_index;
|
int file_index;
|
||||||
cjpeg_source_ptr src_mgr;
|
cjpeg_source_ptr src_mgr;
|
||||||
FILE * input_file;
|
FILE * input_file;
|
||||||
FILE * output_file;
|
FILE * output_file = NULL;
|
||||||
|
unsigned char *outbuffer = NULL;
|
||||||
|
unsigned long outsize = 0;
|
||||||
JDIMENSION num_scanlines;
|
JDIMENSION num_scanlines;
|
||||||
|
|
||||||
/* On Mac, fetch a command line. */
|
/* On Mac, fetch a command line. */
|
||||||
@@ -510,6 +533,7 @@ main (int argc, char **argv)
|
|||||||
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
||||||
|
|
||||||
#ifdef TWO_FILE_COMMANDLINE
|
#ifdef TWO_FILE_COMMANDLINE
|
||||||
|
if (!memdst) {
|
||||||
/* Must have either -outfile switch or explicit output file name */
|
/* Must have either -outfile switch or explicit output file name */
|
||||||
if (outfilename == NULL) {
|
if (outfilename == NULL) {
|
||||||
if (file_index != argc-2) {
|
if (file_index != argc-2) {
|
||||||
@@ -525,6 +549,7 @@ main (int argc, char **argv)
|
|||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
/* Unix style: expect zero or one file name */
|
/* Unix style: expect zero or one file name */
|
||||||
if (file_index < argc-1) {
|
if (file_index < argc-1) {
|
||||||
@@ -550,7 +575,7 @@ main (int argc, char **argv)
|
|||||||
fprintf(stderr, "%s: can't open %s\n", progname, outfilename);
|
fprintf(stderr, "%s: can't open %s\n", progname, outfilename);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
} else {
|
} else if (!memdst) {
|
||||||
/* default output file is stdout */
|
/* default output file is stdout */
|
||||||
output_file = write_stdout();
|
output_file = write_stdout();
|
||||||
}
|
}
|
||||||
@@ -573,6 +598,11 @@ main (int argc, char **argv)
|
|||||||
file_index = parse_switches(&cinfo, argc, argv, 0, TRUE);
|
file_index = parse_switches(&cinfo, argc, argv, 0, TRUE);
|
||||||
|
|
||||||
/* Specify data destination for compression */
|
/* Specify data destination for compression */
|
||||||
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
|
if (memdst)
|
||||||
|
jpeg_mem_dest(&cinfo, &outbuffer, &outsize);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
jpeg_stdio_dest(&cinfo, output_file);
|
jpeg_stdio_dest(&cinfo, output_file);
|
||||||
|
|
||||||
/* Start compressor */
|
/* Start compressor */
|
||||||
@@ -592,13 +622,19 @@ main (int argc, char **argv)
|
|||||||
/* Close files, if we opened them */
|
/* Close files, if we opened them */
|
||||||
if (input_file != stdin)
|
if (input_file != stdin)
|
||||||
fclose(input_file);
|
fclose(input_file);
|
||||||
if (output_file != stdout)
|
if (output_file != stdout && output_file != NULL)
|
||||||
fclose(output_file);
|
fclose(output_file);
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
#ifdef PROGRESS_REPORT
|
||||||
end_progress_monitor((j_common_ptr) &cinfo);
|
end_progress_monitor((j_common_ptr) &cinfo);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (memdst) {
|
||||||
|
fprintf(stderr, "Compressed size: %lu bytes\n", outsize);
|
||||||
|
if (outbuffer != NULL)
|
||||||
|
free(outbuffer);
|
||||||
|
}
|
||||||
|
|
||||||
/* All done. */
|
/* All done. */
|
||||||
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
||||||
return 0; /* suppress no-return-value warnings */
|
return 0; /* suppress no-return-value warnings */
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
@echo off
|
|
||||||
for /f "tokens=1-4 eol=/ DELIMS=/ " %%i in ('date /t') do set BUILD=%%l%%j%%k
|
|
||||||
echo %BUILD%
|
|
||||||
15
cmakescripts/md5cmp.cmake
Normal file
15
cmakescripts/md5cmp.cmake
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
if(NOT MD5)
|
||||||
|
message(FATAL_ERROR "MD5 not specified")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT FILE)
|
||||||
|
message(FATAL_ERROR "FILE not specified")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(MD5 ${FILE} MD5FILE)
|
||||||
|
|
||||||
|
if(NOT MD5 STREQUAL MD5FILE)
|
||||||
|
message(FATAL_ERROR "MD5 of ${FILE} should be ${MD5}, not ${MD5FILE}.")
|
||||||
|
else()
|
||||||
|
message(STATUS "${MD5}: OK")
|
||||||
|
endif()
|
||||||
195
configure.ac
195
configure.ac
@@ -2,7 +2,7 @@
|
|||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_PREREQ([2.56])
|
AC_PREREQ([2.56])
|
||||||
AC_INIT([libjpeg-turbo], [1.2.1])
|
AC_INIT([libjpeg-turbo], [1.3.0])
|
||||||
BUILD=`date +%Y%m%d`
|
BUILD=`date +%Y%m%d`
|
||||||
|
|
||||||
AM_INIT_AUTOMAKE([-Wall foreign dist-bzip2])
|
AM_INIT_AUTOMAKE([-Wall foreign dist-bzip2])
|
||||||
@@ -21,12 +21,59 @@ AC_PROG_INSTALL
|
|||||||
AC_PROG_LIBTOOL
|
AC_PROG_LIBTOOL
|
||||||
AC_PROG_LN_S
|
AC_PROG_LN_S
|
||||||
|
|
||||||
|
# When the prefix is /opt/libjpeg-turbo, we assume that an "official" binary is
|
||||||
|
# being created, and thus we install things into specific locations.
|
||||||
|
|
||||||
|
old_prefix=${prefix}
|
||||||
|
if test "x$prefix" = "xNONE" -a "x$ac_default_prefix" != "x"; then
|
||||||
|
prefix=$ac_default_prefix
|
||||||
|
fi
|
||||||
|
DATADIR=`eval echo ${datadir}`
|
||||||
|
DATADIR=`eval echo $DATADIR`
|
||||||
|
if test "$DATADIR" = "/opt/libjpeg-turbo/share"; then
|
||||||
|
datadir='${prefix}'
|
||||||
|
fi
|
||||||
|
DATADIR=`eval echo ${datarootdir}`
|
||||||
|
DATADIR=`eval echo $DATADIR`
|
||||||
|
if test "$DATADIR" = "/opt/libjpeg-turbo/share"; then
|
||||||
|
datarootdir='${prefix}'
|
||||||
|
fi
|
||||||
|
|
||||||
|
old_exec_prefix=${exec_prefix}
|
||||||
|
if test "x$exec_prefix" = "xNONE"; then
|
||||||
|
exec_prefix=${prefix}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${libdir}" = 'x${exec_prefix}/lib' -o "x${libdir}" = 'x${prefix}/lib'; then
|
||||||
|
LIBDIR=`eval echo ${libdir}`
|
||||||
|
LIBDIR=`eval echo $LIBDIR`
|
||||||
|
if test "$LIBDIR" = "/opt/libjpeg-turbo/lib"; then
|
||||||
|
case $host_os in
|
||||||
|
darwin*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case "$host_cpu" in
|
||||||
|
x86_64 | amd64)
|
||||||
|
libdir='${exec_prefix}/lib64'
|
||||||
|
;;
|
||||||
|
i*86 | x86 | ia32)
|
||||||
|
libdir='${exec_prefix}/lib32'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
exec_prefix=${old_exec_prefix}
|
||||||
|
prefix=${old_prefix}
|
||||||
|
|
||||||
# Check whether compiler supports pointers to undefined structures
|
# Check whether compiler supports pointers to undefined structures
|
||||||
AC_MSG_CHECKING(whether compiler supports pointers to undefined structures)
|
AC_MSG_CHECKING(whether compiler supports pointers to undefined structures)
|
||||||
AC_TRY_COMPILE([ typedef struct undefined_structure * undef_struct_ptr; ], ,
|
AC_TRY_COMPILE([ typedef struct undefined_structure * undef_struct_ptr; ], ,
|
||||||
AC_MSG_RESULT(yes),
|
AC_MSG_RESULT(yes),
|
||||||
[AC_MSG_RESULT(no)
|
[AC_MSG_RESULT(no)
|
||||||
AC_DEFINE([INCOMPLETE_TYPES_BROKEN],[1],[Compiler does not support pointers to undefined structures.])])
|
AC_DEFINE([INCOMPLETE_TYPES_BROKEN], [1],
|
||||||
|
[Compiler does not support pointers to undefined structures.])])
|
||||||
|
|
||||||
if test "x${GCC}" = "xyes"; then
|
if test "x${GCC}" = "xyes"; then
|
||||||
if test "x${SAVED_CFLAGS}" = "x"; then
|
if test "x${SAVED_CFLAGS}" = "x"; then
|
||||||
@@ -49,7 +96,8 @@ fi
|
|||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
|
AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
|
||||||
AC_CHECK_HEADER([sys/types.h], AC_DEFINE([NEED_SYS_TYPES_H], 1, [Define if you have sys/types.h]))
|
AC_CHECK_HEADER([sys/types.h],
|
||||||
|
AC_DEFINE([NEED_SYS_TYPES_H], 1, [Define if you have sys/types.h]))
|
||||||
|
|
||||||
# Checks for typedefs, structures, and compiler characteristics.
|
# Checks for typedefs, structures, and compiler characteristics.
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
@@ -92,7 +140,8 @@ AC_TRY_LINK(
|
|||||||
int possibly_dupli_function () { return 1; }], [ ],
|
int possibly_dupli_function () { return 1; }], [ ],
|
||||||
[AC_MSG_RESULT(ok)],
|
[AC_MSG_RESULT(ok)],
|
||||||
[AC_MSG_RESULT(short)
|
[AC_MSG_RESULT(short)
|
||||||
AC_DEFINE([NEED_SHORT_EXTERNAL_NAMES], 1, [Define if you need short function names])])
|
AC_DEFINE([NEED_SHORT_EXTERNAL_NAMES], 1,
|
||||||
|
[Define if you need short function names])])
|
||||||
|
|
||||||
# Checks for library functions.
|
# Checks for library functions.
|
||||||
AC_CHECK_FUNCS([memset memcpy], [],
|
AC_CHECK_FUNCS([memset memcpy], [],
|
||||||
@@ -103,9 +152,11 @@ AC_MSG_CHECKING([libjpeg API version])
|
|||||||
AC_ARG_VAR(JPEG_LIB_VERSION, [libjpeg API version (62, 70, or 80)])
|
AC_ARG_VAR(JPEG_LIB_VERSION, [libjpeg API version (62, 70, or 80)])
|
||||||
if test "x$JPEG_LIB_VERSION" = "x"; then
|
if test "x$JPEG_LIB_VERSION" = "x"; then
|
||||||
AC_ARG_WITH([jpeg7],
|
AC_ARG_WITH([jpeg7],
|
||||||
AC_HELP_STRING([--with-jpeg7], [Emulate libjpeg v7 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b.)]))
|
AC_HELP_STRING([--with-jpeg7],
|
||||||
|
[Emulate libjpeg v7 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b.)]))
|
||||||
AC_ARG_WITH([jpeg8],
|
AC_ARG_WITH([jpeg8],
|
||||||
AC_HELP_STRING([--with-jpeg8], [Emulate libjpeg v8 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b.)]))
|
AC_HELP_STRING([--with-jpeg8],
|
||||||
|
[Emulate libjpeg v8 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b.)]))
|
||||||
if test "x${with_jpeg8}" = "xyes"; then
|
if test "x${with_jpeg8}" = "xyes"; then
|
||||||
JPEG_LIB_VERSION=80
|
JPEG_LIB_VERSION=80
|
||||||
else
|
else
|
||||||
@@ -119,11 +170,13 @@ fi
|
|||||||
JPEG_LIB_VERSION_DECIMAL=`expr $JPEG_LIB_VERSION / 10`.`expr $JPEG_LIB_VERSION % 10`
|
JPEG_LIB_VERSION_DECIMAL=`expr $JPEG_LIB_VERSION / 10`.`expr $JPEG_LIB_VERSION % 10`
|
||||||
AC_SUBST(JPEG_LIB_VERSION_DECIMAL)
|
AC_SUBST(JPEG_LIB_VERSION_DECIMAL)
|
||||||
AC_MSG_RESULT([$JPEG_LIB_VERSION_DECIMAL])
|
AC_MSG_RESULT([$JPEG_LIB_VERSION_DECIMAL])
|
||||||
AC_DEFINE_UNQUOTED(JPEG_LIB_VERSION, [$JPEG_LIB_VERSION], [libjpeg API version])
|
AC_DEFINE_UNQUOTED(JPEG_LIB_VERSION, [$JPEG_LIB_VERSION],
|
||||||
|
[libjpeg API version])
|
||||||
|
|
||||||
AC_MSG_CHECKING([libjpeg shared library version])
|
AC_ARG_VAR(SO_MAJOR_VERSION,
|
||||||
AC_ARG_VAR(SO_MAJOR_VERSION, [Major version of the libjpeg-turbo shared library (default is determined by the API version)])
|
[Major version of the libjpeg-turbo shared library (default is determined by the API version)])
|
||||||
AC_ARG_VAR(SO_MINOR_VERSION, [Minor version of the libjpeg-turbo shared library (default is determined by the API version)])
|
AC_ARG_VAR(SO_MINOR_VERSION,
|
||||||
|
[Minor version of the libjpeg-turbo shared library (default is determined by the API version)])
|
||||||
if test "x$SO_MAJOR_VERSION" = "x"; then
|
if test "x$SO_MAJOR_VERSION" = "x"; then
|
||||||
case "$JPEG_LIB_VERSION" in
|
case "$JPEG_LIB_VERSION" in
|
||||||
62) SO_MAJOR_VERSION=$JPEG_LIB_VERSION ;;
|
62) SO_MAJOR_VERSION=$JPEG_LIB_VERSION ;;
|
||||||
@@ -136,9 +189,37 @@ if test "x$SO_MINOR_VERSION" = "x"; then
|
|||||||
*) SO_MINOR_VERSION=0 ;;
|
*) SO_MINOR_VERSION=0 ;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
AC_MSG_RESULT([$SO_MAJOR_VERSION:$SO_MINOR_VERSION])
|
|
||||||
|
RPM_CONFIG_ARGS=
|
||||||
|
|
||||||
|
# Memory source/destination managers
|
||||||
|
SO_AGE=0
|
||||||
|
MEM_SRCDST_FUNCTIONS=
|
||||||
|
if test "x${with_jpeg8}" != "xyes"; then
|
||||||
|
AC_MSG_CHECKING([whether to include in-memory source/destination managers])
|
||||||
|
AC_ARG_WITH([mem-srcdst],
|
||||||
|
AC_HELP_STRING([--without-mem-srcdst],
|
||||||
|
[Do not include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI]))
|
||||||
|
if test "x$with_mem_srcdst" != "xno"; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE([MEM_SRCDST_SUPPORTED], [1],
|
||||||
|
[Support in-memory source/destination managers])
|
||||||
|
SO_AGE=1
|
||||||
|
MEM_SRCDST_FUNCTIONS="global: jpeg_mem_dest; jpeg_mem_src;";
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-mem-srcdst"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([libjpeg shared library version])
|
||||||
|
AC_MSG_RESULT([$SO_MAJOR_VERSION.$SO_AGE.$SO_MINOR_VERSION])
|
||||||
|
LIBTOOL_CURRENT=`expr $SO_MAJOR_VERSION + $SO_AGE`
|
||||||
|
AC_SUBST(LIBTOOL_CURRENT)
|
||||||
AC_SUBST(SO_MAJOR_VERSION)
|
AC_SUBST(SO_MAJOR_VERSION)
|
||||||
AC_SUBST(SO_MINOR_VERSION)
|
AC_SUBST(SO_MINOR_VERSION)
|
||||||
|
AC_SUBST(SO_AGE)
|
||||||
|
AC_SUBST(MEM_SRCDST_FUNCTIONS)
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED(LIBJPEG_TURBO_VERSION, [$VERSION], [libjpeg-turbo version])
|
AC_DEFINE_UNQUOTED(LIBJPEG_TURBO_VERSION, [$VERSION], [libjpeg-turbo version])
|
||||||
|
|
||||||
@@ -157,11 +238,15 @@ VERS_1 {
|
|||||||
};
|
};
|
||||||
EOF
|
EOF
|
||||||
AC_LINK_IFELSE(AC_LANG_PROGRAM([], []),
|
AC_LINK_IFELSE(AC_LANG_PROGRAM([], []),
|
||||||
[VERSION_SCRIPT_FLAG=-Wl,--version-script,; AC_MSG_RESULT([yes (GNU style)])], [])
|
[VERSION_SCRIPT_FLAG=-Wl,--version-script,;
|
||||||
|
AC_MSG_RESULT([yes (GNU style)])],
|
||||||
|
[])
|
||||||
if test "x$VERSION_SCRIPT_FLAG" = "x"; then
|
if test "x$VERSION_SCRIPT_FLAG" = "x"; then
|
||||||
LDFLAGS="$SAVED_LDFLAGS -Wl,-M,conftest.map"
|
LDFLAGS="$SAVED_LDFLAGS -Wl,-M,conftest.map"
|
||||||
AC_LINK_IFELSE(AC_LANG_PROGRAM([], []),
|
AC_LINK_IFELSE(AC_LANG_PROGRAM([], []),
|
||||||
[VERSION_SCRIPT_FLAG=-Wl,-M,; AC_MSG_RESULT([yes (Sun style)])], [])
|
[VERSION_SCRIPT_FLAG=-Wl,-M,;
|
||||||
|
AC_MSG_RESULT([yes (Sun style)])],
|
||||||
|
[])
|
||||||
fi
|
fi
|
||||||
if test "x$VERSION_SCRIPT_FLAG" = "x"; then
|
if test "x$VERSION_SCRIPT_FLAG" = "x"; then
|
||||||
VERSION_SCRIPT=no
|
VERSION_SCRIPT=no
|
||||||
@@ -189,11 +274,14 @@ int bar() { return foo();], ljt_cv_inline="inline"))))
|
|||||||
AC_MSG_RESULT($ljt_cv_inline)
|
AC_MSG_RESULT($ljt_cv_inline)
|
||||||
AC_DEFINE_UNQUOTED([INLINE],[$ljt_cv_inline],[How to obtain function inlining.])
|
AC_DEFINE_UNQUOTED([INLINE],[$ljt_cv_inline],[How to obtain function inlining.])
|
||||||
|
|
||||||
|
# Arithmetic coding support
|
||||||
AC_MSG_CHECKING([whether to include arithmetic encoding support])
|
AC_MSG_CHECKING([whether to include arithmetic encoding support])
|
||||||
AC_ARG_WITH([arith-enc],
|
AC_ARG_WITH([arith-enc],
|
||||||
AC_HELP_STRING([--without-arith-enc], [Omit arithmetic encoding support]))
|
AC_HELP_STRING([--without-arith-enc],
|
||||||
|
[Do not include arithmetic encoding support]))
|
||||||
if test "x$with_arith_enc" = "xno"; then
|
if test "x$with_arith_enc" = "xno"; then
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-enc"
|
||||||
else
|
else
|
||||||
AC_DEFINE([C_ARITH_CODING_SUPPORTED], [1], [Support arithmetic encoding])
|
AC_DEFINE([C_ARITH_CODING_SUPPORTED], [1], [Support arithmetic encoding])
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
@@ -202,17 +290,33 @@ AM_CONDITIONAL([WITH_ARITH_ENC], [test "x$with_arith_enc" != "xno"])
|
|||||||
|
|
||||||
AC_MSG_CHECKING([whether to include arithmetic decoding support])
|
AC_MSG_CHECKING([whether to include arithmetic decoding support])
|
||||||
AC_ARG_WITH([arith-dec],
|
AC_ARG_WITH([arith-dec],
|
||||||
AC_HELP_STRING([--without-arith-dec], [Omit arithmetic decoding support]))
|
AC_HELP_STRING([--without-arith-dec],
|
||||||
|
[Do not include arithmetic decoding support]))
|
||||||
if test "x$with_arith_dec" = "xno"; then
|
if test "x$with_arith_dec" = "xno"; then
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-dec"
|
||||||
else
|
else
|
||||||
AC_DEFINE([D_ARITH_CODING_SUPPORTED], [1], [Support arithmetic decoding])
|
AC_DEFINE([D_ARITH_CODING_SUPPORTED], [1], [Support arithmetic decoding])
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
fi
|
fi
|
||||||
AM_CONDITIONAL([WITH_ARITH_DEC], [test "x$with_arith_dec" != "xno"])
|
AM_CONDITIONAL([WITH_ARITH_DEC], [test "x$with_arith_dec" != "xno"])
|
||||||
|
|
||||||
AM_CONDITIONAL([WITH_ARITH], [test "x$with_arith_dec" != "xno" -o "x$with_arith_enc" != "xno"])
|
AM_CONDITIONAL([WITH_ARITH],
|
||||||
|
[test "x$with_arith_dec" != "xno" -o "x$with_arith_enc" != "xno"])
|
||||||
|
|
||||||
|
# TurboJPEG support
|
||||||
|
AC_MSG_CHECKING([whether to build TurboJPEG C wrapper])
|
||||||
|
AC_ARG_WITH([turbojpeg],
|
||||||
|
AC_HELP_STRING([--without-turbojpeg],
|
||||||
|
[Do not include the TurboJPEG wrapper library and associated test programs]))
|
||||||
|
if test "x$with_turbojpeg" = "xno"; then
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-turbojpeg"
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Java support
|
||||||
AC_ARG_VAR(JAVAC, [Java compiler command (default: javac)])
|
AC_ARG_VAR(JAVAC, [Java compiler command (default: javac)])
|
||||||
if test "x$JAVAC" = "x"; then
|
if test "x$JAVAC" = "x"; then
|
||||||
JAVAC=javac
|
JAVAC=javac
|
||||||
@@ -230,13 +334,16 @@ if test "x$JAVA" = "x"; then
|
|||||||
JAVA=java
|
JAVA=java
|
||||||
fi
|
fi
|
||||||
AC_SUBST(JAVA)
|
AC_SUBST(JAVA)
|
||||||
AC_ARG_VAR(JNI_CFLAGS, [C compiler flags needed to include jni.h (default: -I/System/Library/Frameworks/JavaVM.framework/Headers on OS X, '-I/usr/java/include -I/usr/java/include/solaris' on Solaris, and '-I/usr/java/default/include -I/usr/java/default/include/linux' on Linux)])
|
AC_ARG_VAR(JNI_CFLAGS,
|
||||||
|
[C compiler flags needed to include jni.h (default: -I/System/Library/Frameworks/JavaVM.framework/Headers on OS X, '-I/usr/java/include -I/usr/java/include/solaris' on Solaris, and '-I/usr/java/default/include -I/usr/java/default/include/linux' on Linux)])
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to build TurboJPEG/OSS Java wrapper])
|
AC_MSG_CHECKING([whether to build TurboJPEG Java wrapper])
|
||||||
AC_ARG_WITH([java],
|
AC_ARG_WITH([java],
|
||||||
AC_HELP_STRING([--with-java],[Build Java wrapper for the TurboJPEG/OSS library]))
|
AC_HELP_STRING([--with-java], [Build Java wrapper for the TurboJPEG library]))
|
||||||
|
if test "x$with_turbojpeg" = "xno"; then
|
||||||
|
with_java=no
|
||||||
|
fi
|
||||||
|
|
||||||
RPM_CONFIG_ARGS=
|
|
||||||
WITH_JAVA=0
|
WITH_JAVA=0
|
||||||
if test "x$with_java" = "xyes"; then
|
if test "x$with_java" = "xyes"; then
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
@@ -263,9 +370,9 @@ if test "x$with_java" = "xyes"; then
|
|||||||
CPPFLAGS=${SAVE_CPPFLAGS}
|
CPPFLAGS=${SAVE_CPPFLAGS}
|
||||||
AC_SUBST(JNI_CFLAGS)
|
AC_SUBST(JNI_CFLAGS)
|
||||||
|
|
||||||
RPM_CONFIG_ARGS=--with-java
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --with-java"
|
||||||
JAVA_RPM_CONTENTS_1='%dir /opt/%{name}/classes'
|
JAVA_RPM_CONTENTS_1='%dir %{_datadir}/classes'
|
||||||
JAVA_RPM_CONTENTS_2=/opt/%{name}/classes/turbojpeg.jar
|
JAVA_RPM_CONTENTS_2=%{_datadir}/classes/turbojpeg.jar
|
||||||
WITH_JAVA=1
|
WITH_JAVA=1
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -274,11 +381,11 @@ AM_CONDITIONAL([WITH_JAVA], [test "x$with_java" = "xyes"])
|
|||||||
AC_SUBST(WITH_JAVA)
|
AC_SUBST(WITH_JAVA)
|
||||||
AC_SUBST(JAVA_RPM_CONTENTS_1)
|
AC_SUBST(JAVA_RPM_CONTENTS_1)
|
||||||
AC_SUBST(JAVA_RPM_CONTENTS_2)
|
AC_SUBST(JAVA_RPM_CONTENTS_2)
|
||||||
AC_SUBST(RPM_CONFIG_ARGS)
|
|
||||||
|
|
||||||
# optionally force using gas-preprocessor.pl for compatibility testing
|
# optionally force using gas-preprocessor.pl for compatibility testing
|
||||||
AC_ARG_WITH([gas-preprocessor],
|
AC_ARG_WITH([gas-preprocessor],
|
||||||
AC_HELP_STRING([--with-gas-preprocessor],[Force using gas-preprocessor.pl on ARM.]))
|
AC_HELP_STRING([--with-gas-preprocessor],
|
||||||
|
[Force using gas-preprocessor.pl on ARM.]))
|
||||||
if test "x${with_gas_preprocessor}" = "xyes"; then
|
if test "x${with_gas_preprocessor}" = "xyes"; then
|
||||||
case $host_os in
|
case $host_os in
|
||||||
darwin*)
|
darwin*)
|
||||||
@@ -293,7 +400,7 @@ fi
|
|||||||
|
|
||||||
# SIMD is optional
|
# SIMD is optional
|
||||||
AC_ARG_WITH([simd],
|
AC_ARG_WITH([simd],
|
||||||
AC_HELP_STRING([--without-simd],[Omit SIMD extensions.]))
|
AC_HELP_STRING([--without-simd], [Do not include SIMD extensions]))
|
||||||
if test "x${with_simd}" != "xno"; then
|
if test "x${with_simd}" != "xno"; then
|
||||||
# Check if we're on a supported CPU
|
# Check if we're on a supported CPU
|
||||||
AC_MSG_CHECKING([if we have SIMD optimisations for cpu type])
|
AC_MSG_CHECKING([if we have SIMD optimisations for cpu type])
|
||||||
@@ -328,6 +435,8 @@ if test "x${with_simd}" != "xno"; then
|
|||||||
if test "x${with_simd}" != "xno"; then
|
if test "x${with_simd}" != "xno"; then
|
||||||
AC_DEFINE([WITH_SIMD], [1], [Use accelerated SIMD routines.])
|
AC_DEFINE([WITH_SIMD], [1], [Use accelerated SIMD routines.])
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-simd"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AM_CONDITIONAL([WITH_SIMD], [test "x$with_simd" != "xno"])
|
AM_CONDITIONAL([WITH_SIMD], [test "x$with_simd" != "xno"])
|
||||||
@@ -336,6 +445,13 @@ AM_CONDITIONAL([SIMD_I386], [test "x$simd_arch" = "xi386"])
|
|||||||
AM_CONDITIONAL([SIMD_X86_64], [test "x$simd_arch" = "xx86_64"])
|
AM_CONDITIONAL([SIMD_X86_64], [test "x$simd_arch" = "xx86_64"])
|
||||||
AM_CONDITIONAL([SIMD_ARM], [test "x$simd_arch" = "xarm"])
|
AM_CONDITIONAL([SIMD_ARM], [test "x$simd_arch" = "xarm"])
|
||||||
AM_CONDITIONAL([X86_64], [test "x$host_cpu" = "xx86_64" -o "x$host_cpu" = "xamd64"])
|
AM_CONDITIONAL([X86_64], [test "x$host_cpu" = "xx86_64" -o "x$host_cpu" = "xamd64"])
|
||||||
|
AM_CONDITIONAL([WITH_TURBOJPEG], [test "x$with_turbojpeg" != "xno"])
|
||||||
|
|
||||||
|
AC_ARG_VAR(PKGNAME, [distribution package name (default: libjpeg-turbo)])
|
||||||
|
if test "x$PKGNAME" = "x"; then
|
||||||
|
PKGNAME=$PACKAGE_NAME
|
||||||
|
fi
|
||||||
|
AC_SUBST(PKGNAME)
|
||||||
|
|
||||||
case "$host_cpu" in
|
case "$host_cpu" in
|
||||||
x86_64)
|
x86_64)
|
||||||
@@ -349,6 +465,7 @@ case "$host_cpu" in
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
AC_SUBST(RPMARCH)
|
AC_SUBST(RPMARCH)
|
||||||
|
AC_SUBST(RPM_CONFIG_ARGS)
|
||||||
AC_SUBST(DEBARCH)
|
AC_SUBST(DEBARCH)
|
||||||
AC_SUBST(BUILD)
|
AC_SUBST(BUILD)
|
||||||
AC_DEFINE_UNQUOTED([BUILD], "$BUILD", [Build number])
|
AC_DEFINE_UNQUOTED([BUILD], "$BUILD", [Build number])
|
||||||
@@ -359,18 +476,22 @@ AC_DEFINE_UNQUOTED([BUILD], "$BUILD", [Build number])
|
|||||||
# jconfig.h is a minimal version that allows this package to be built
|
# jconfig.h is a minimal version that allows this package to be built
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_HEADERS([jconfig.h])
|
AC_CONFIG_HEADERS([jconfig.h])
|
||||||
AC_CONFIG_FILES([pkgscripts/libjpeg-turbo.spec:release/libjpeg-turbo.spec.in])
|
AC_CONFIG_FILES([pkgscripts/libjpeg-turbo.spec.tmpl:release/libjpeg-turbo.spec.in])
|
||||||
AC_CONFIG_FILES([pkgscripts/makecygwinpkg:release/makecygwinpkg.in])
|
AC_CONFIG_FILES([pkgscripts/makecygwinpkg.tmpl:release/makecygwinpkg.in])
|
||||||
AC_CONFIG_FILES([pkgscripts/makedpkg:release/makedpkg.in])
|
AC_CONFIG_FILES([pkgscripts/makedpkg.tmpl:release/makedpkg.in])
|
||||||
AC_CONFIG_FILES([pkgscripts/makemacpkg:release/makemacpkg.in])
|
AC_CONFIG_FILES([pkgscripts/makemacpkg.tmpl:release/makemacpkg.in])
|
||||||
AC_CONFIG_FILES([pkgscripts/Description.plist:release/Description.plist.in])
|
AC_CONFIG_FILES([pkgscripts/Description.plist:release/Description.plist.in])
|
||||||
AC_CONFIG_FILES([pkgscripts/Info.plist:release/Info.plist.in])
|
AC_CONFIG_FILES([pkgscripts/Info.plist:release/Info.plist.in])
|
||||||
AC_CONFIG_FILES([pkgscripts/uninstall:release/uninstall.in])
|
AC_CONFIG_FILES([pkgscripts/uninstall.tmpl:release/uninstall.in])
|
||||||
AC_CONFIG_FILES([pkgscripts/makesunpkg:release/makesunpkg.in])
|
if test "x$with_turbojpeg" != "xno"; then
|
||||||
AC_CONFIG_FILES([pkgscripts/pkginfo:release/pkginfo.in])
|
AC_CONFIG_FILES([tjbenchtest])
|
||||||
AC_CONFIG_FILES([tjbenchtest])
|
fi
|
||||||
AC_CONFIG_FILES([tjexampletest])
|
if test "x$with_java" = "xyes"; then
|
||||||
|
AC_CONFIG_FILES([tjbenchtest.java])
|
||||||
|
AC_CONFIG_FILES([tjexampletest])
|
||||||
|
fi
|
||||||
AC_CONFIG_FILES([libjpeg.map])
|
AC_CONFIG_FILES([libjpeg.map])
|
||||||
AC_CONFIG_FILES([Makefile simd/Makefile])
|
AC_CONFIG_FILES([Makefile simd/Makefile])
|
||||||
AC_CONFIG_FILES([java/Makefile])
|
AC_CONFIG_FILES([java/Makefile])
|
||||||
|
AC_CONFIG_FILES([md5/Makefile])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|||||||
15
djpeg.1
15
djpeg.1
@@ -1,4 +1,4 @@
|
|||||||
.TH DJPEG 1 "11 October 2010"
|
.TH DJPEG 1 "18 January 2013"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
djpeg \- decompress a JPEG file to an image file
|
djpeg \- decompress a JPEG file to an image file
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -62,8 +62,9 @@ runs noticeably faster in this mode.
|
|||||||
.TP
|
.TP
|
||||||
.BI \-scale " M/N"
|
.BI \-scale " M/N"
|
||||||
Scale the output image by a factor M/N. Currently the scale factor must be
|
Scale the output image by a factor M/N. Currently the scale factor must be
|
||||||
1/1, 1/2, 1/4, or 1/8. Scaling is handy if the image is larger than your
|
M/8, where M is an integer between 1 and 16 inclusive, or any reduced fraction
|
||||||
screen; also,
|
thereof (such as 1/2, 3/4, etc.) Scaling is handy if the image is larger than
|
||||||
|
your screen; also,
|
||||||
.B djpeg
|
.B djpeg
|
||||||
runs much faster when scaling down the output.
|
runs much faster when scaling down the output.
|
||||||
.TP
|
.TP
|
||||||
@@ -172,6 +173,10 @@ selects 4000000 bytes. If more space is needed, temporary files will be used.
|
|||||||
.BI \-outfile " name"
|
.BI \-outfile " name"
|
||||||
Send output image to the named file, not to standard output.
|
Send output image to the named file, not to standard output.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-memsrc
|
||||||
|
Load input file into memory before decompressing. This feature was implemented
|
||||||
|
mainly as a way of testing the in-memory source manager (jpeg_mem_src().)
|
||||||
|
.TP
|
||||||
.B \-verbose
|
.B \-verbose
|
||||||
Enable debug printout. More
|
Enable debug printout. More
|
||||||
.BR \-v 's
|
.BR \-v 's
|
||||||
@@ -242,6 +247,10 @@ Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
|
|||||||
Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44.
|
Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44.
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Independent JPEG Group
|
Independent JPEG Group
|
||||||
|
.PP
|
||||||
|
This file was modified by The libjpeg-turbo Project to include only information
|
||||||
|
relevant to libjpeg-turbo, to wordsmith certain sections, and to describe
|
||||||
|
features not present in libjpeg.
|
||||||
.SH BUGS
|
.SH BUGS
|
||||||
To avoid the Unisys LZW patent,
|
To avoid the Unisys LZW patent,
|
||||||
.B djpeg
|
.B djpeg
|
||||||
|
|||||||
52
djpeg.c
52
djpeg.c
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* djpeg.c
|
* djpeg.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
* Copyright (C) 2010-2011, D. R. Commander.
|
* Modifications:
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* Copyright (C) 2010-2011, 2013, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains a command-line user interface for the JPEG decompressor.
|
* This file contains a command-line user interface for the JPEG decompressor.
|
||||||
@@ -86,6 +87,8 @@ static IMAGE_FORMATS requested_fmt;
|
|||||||
|
|
||||||
static const char * progname; /* program name for error messages */
|
static const char * progname; /* program name for error messages */
|
||||||
static char * outfilename; /* for -outfile switch */
|
static char * outfilename; /* for -outfile switch */
|
||||||
|
boolean memsrc; /* for -memsrc switch */
|
||||||
|
#define INPUT_BUF_SIZE 4096
|
||||||
|
|
||||||
|
|
||||||
LOCAL(void)
|
LOCAL(void)
|
||||||
@@ -156,6 +159,10 @@ usage (void)
|
|||||||
#endif
|
#endif
|
||||||
fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n");
|
fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n");
|
||||||
fprintf(stderr, " -outfile name Specify name for output file\n");
|
fprintf(stderr, " -outfile name Specify name for output file\n");
|
||||||
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
|
fprintf(stderr, " -memsrc Load input file into memory before decompressing\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@@ -179,6 +186,7 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
/* Set up default JPEG parameters. */
|
/* Set up default JPEG parameters. */
|
||||||
requested_fmt = DEFAULT_FMT; /* set default output file format */
|
requested_fmt = DEFAULT_FMT; /* set default output file format */
|
||||||
outfilename = NULL;
|
outfilename = NULL;
|
||||||
|
memsrc = FALSE;
|
||||||
cinfo->err->trace_level = 0;
|
cinfo->err->trace_level = 0;
|
||||||
|
|
||||||
/* Scan command line options, adjust parameters */
|
/* Scan command line options, adjust parameters */
|
||||||
@@ -246,7 +254,7 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
fprintf(stderr, "%s version %s (build %s)\n",
|
fprintf(stderr, "%s version %s (build %s)\n",
|
||||||
PACKAGE_NAME, VERSION, BUILD);
|
PACKAGE_NAME, VERSION, BUILD);
|
||||||
fprintf(stderr, "%s\n\n", JCOPYRIGHT);
|
fprintf(stderr, "%s\n\n", JCOPYRIGHT);
|
||||||
fprintf(stderr, "Emulating The Independent JPEG Group's libjpeg, version %s\n\n",
|
fprintf(stderr, "Emulating The Independent JPEG Group's software, version %s\n\n",
|
||||||
JVERSION);
|
JVERSION);
|
||||||
printed_version = TRUE;
|
printed_version = TRUE;
|
||||||
}
|
}
|
||||||
@@ -324,6 +332,16 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
usage();
|
usage();
|
||||||
outfilename = argv[argn]; /* save it away for later use */
|
outfilename = argv[argn]; /* save it away for later use */
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "memsrc", 2)) {
|
||||||
|
/* Use in-memory source manager */
|
||||||
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
|
memsrc = TRUE;
|
||||||
|
#else
|
||||||
|
fprintf(stderr, "%s: sorry, in-memory source manager was not compiled in\n",
|
||||||
|
progname);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
#endif
|
||||||
|
|
||||||
} else if (keymatch(arg, "pnm", 1) || keymatch(arg, "ppm", 1)) {
|
} else if (keymatch(arg, "pnm", 1) || keymatch(arg, "ppm", 1)) {
|
||||||
/* PPM/PGM output format. */
|
/* PPM/PGM output format. */
|
||||||
requested_fmt = FMT_PPM;
|
requested_fmt = FMT_PPM;
|
||||||
@@ -442,6 +460,8 @@ main (int argc, char **argv)
|
|||||||
djpeg_dest_ptr dest_mgr = NULL;
|
djpeg_dest_ptr dest_mgr = NULL;
|
||||||
FILE * input_file;
|
FILE * input_file;
|
||||||
FILE * output_file;
|
FILE * output_file;
|
||||||
|
unsigned char *inbuffer = NULL;
|
||||||
|
unsigned long insize = 0;
|
||||||
JDIMENSION num_scanlines;
|
JDIMENSION num_scanlines;
|
||||||
|
|
||||||
/* On Mac, fetch a command line. */
|
/* On Mac, fetch a command line. */
|
||||||
@@ -536,6 +556,29 @@ main (int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Specify data source for decompression */
|
/* Specify data source for decompression */
|
||||||
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
|
if (memsrc) {
|
||||||
|
size_t nbytes;
|
||||||
|
do {
|
||||||
|
inbuffer = (unsigned char *)realloc(inbuffer, insize + INPUT_BUF_SIZE);
|
||||||
|
if (inbuffer == NULL) {
|
||||||
|
fprintf(stderr, "%s: memory allocation failure\n", progname);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
nbytes = JFREAD(input_file, &inbuffer[insize], INPUT_BUF_SIZE);
|
||||||
|
if (nbytes < 0) {
|
||||||
|
if (file_index < argc)
|
||||||
|
fprintf(stderr, "%s: can't read from %s\n", progname,
|
||||||
|
argv[file_index]);
|
||||||
|
else
|
||||||
|
fprintf(stderr, "%s: can't read from stdin\n", progname);
|
||||||
|
}
|
||||||
|
insize += (unsigned long)nbytes;
|
||||||
|
} while (nbytes == INPUT_BUF_SIZE);
|
||||||
|
fprintf(stderr, "Compressed size: %lu bytes\n", insize);
|
||||||
|
jpeg_mem_src(&cinfo, inbuffer, insize);
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
jpeg_stdio_src(&cinfo, input_file);
|
jpeg_stdio_src(&cinfo, input_file);
|
||||||
|
|
||||||
/* Read file header, set default decompression parameters */
|
/* Read file header, set default decompression parameters */
|
||||||
@@ -620,6 +663,9 @@ main (int argc, char **argv)
|
|||||||
end_progress_monitor((j_common_ptr) &cinfo);
|
end_progress_monitor((j_common_ptr) &cinfo);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (memsrc && inbuffer != NULL)
|
||||||
|
free(inbuffer);
|
||||||
|
|
||||||
/* All done. */
|
/* All done. */
|
||||||
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
||||||
return 0; /* suppress no-return-value warnings */
|
return 0; /* suppress no-return-value warnings */
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by 
|
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<a href="http://www.doxygen.org/index.html">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by 
|
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<a href="http://www.doxygen.org/index.html">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by 
|
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<a href="http://www.doxygen.org/index.html">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by 
|
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<a href="http://www.doxygen.org/index.html">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ Defines</h2></td></tr>
|
|||||||
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaf9d49066633404da4386d70820295dd2">TJFLAG_FORCESSE3</a></td></tr>
|
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaf9d49066633404da4386d70820295dd2">TJFLAG_FORCESSE3</a></td></tr>
|
||||||
<tr><td class="mdescLeft"> </td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE3 code (if the underlying codec supports it.) <a href="#gaf9d49066633404da4386d70820295dd2"></a><br/></td></tr>
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE3 code (if the underlying codec supports it.) <a href="#gaf9d49066633404da4386d70820295dd2"></a><br/></td></tr>
|
||||||
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga4ee4506c81177a06f77e2504a22efd2d">TJFLAG_FASTUPSAMPLE</a></td></tr>
|
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga4ee4506c81177a06f77e2504a22efd2d">TJFLAG_FASTUPSAMPLE</a></td></tr>
|
||||||
<tr><td class="mdescLeft"> </td><td class="mdescRight">When decompressing, use the fastest chrominance upsampling algorithm available in the underlying codec. <a href="#ga4ee4506c81177a06f77e2504a22efd2d"></a><br/></td></tr>
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">When decompressing an image that was compressed using chrominance subsampling, use the fastest chrominance upsampling algorithm available in the underlying codec. <a href="#ga4ee4506c81177a06f77e2504a22efd2d"></a><br/></td></tr>
|
||||||
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963">TJFLAG_NOREALLOC</a></td></tr>
|
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963">TJFLAG_NOREALLOC</a></td></tr>
|
||||||
<tr><td class="mdescLeft"> </td><td class="mdescRight">Disable buffer (re)allocation. <a href="#ga8808d403c68b62aaa58a4c1e58e98963"></a><br/></td></tr>
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">Disable buffer (re)allocation. <a href="#ga8808d403c68b62aaa58a4c1e58e98963"></a><br/></td></tr>
|
||||||
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaabce235db80d3f698b27f36cbd453da2">TJFLAG_FASTDCT</a></td></tr>
|
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaabce235db80d3f698b27f36cbd453da2">TJFLAG_FASTDCT</a></td></tr>
|
||||||
@@ -98,7 +98,7 @@ Defines</h2></td></tr>
|
|||||||
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gacb233cfd722d66d1ccbf48a7de81f0e0">TJFLAG_ACCURATEDCT</a></td></tr>
|
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gacb233cfd722d66d1ccbf48a7de81f0e0">TJFLAG_ACCURATEDCT</a></td></tr>
|
||||||
<tr><td class="mdescLeft"> </td><td class="mdescRight">Use the most accurate DCT/IDCT algorithm available in the underlying codec. <a href="#gacb233cfd722d66d1ccbf48a7de81f0e0"></a><br/></td></tr>
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">Use the most accurate DCT/IDCT algorithm available in the underlying codec. <a href="#gacb233cfd722d66d1ccbf48a7de81f0e0"></a><br/></td></tr>
|
||||||
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga0f6dbd18adf38b7d46ac547f0f4d562c">TJ_NUMXOP</a></td></tr>
|
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga0f6dbd18adf38b7d46ac547f0f4d562c">TJ_NUMXOP</a></td></tr>
|
||||||
<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of transform operations. <a href="#ga0f6dbd18adf38b7d46ac547f0f4d562c"></a><br/></td></tr>
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">The number of transform operations. <a href="#ga0f6dbd18adf38b7d46ac547f0f4d562c"></a><br/></td></tr>
|
||||||
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00">TJXOPT_PERFECT</a></td></tr>
|
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00">TJXOPT_PERFECT</a></td></tr>
|
||||||
<tr><td class="mdescLeft"> </td><td class="mdescRight">This option will cause <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> to return an error if the transform is not perfect. <a href="#ga50e03cb5ed115330e212417429600b00"></a><br/></td></tr>
|
<tr><td class="mdescLeft"> </td><td class="mdescRight">This option will cause <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a> to return an error if the transform is not perfect. <a href="#ga50e03cb5ed115330e212417429600b00"></a><br/></td></tr>
|
||||||
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga319826b7eb1583c0595bbe7b95428709">TJXOPT_TRIM</a></td></tr>
|
<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga319826b7eb1583c0595bbe7b95428709">TJXOPT_TRIM</a></td></tr>
|
||||||
@@ -255,7 +255,7 @@ Variables</h2></td></tr>
|
|||||||
</div>
|
</div>
|
||||||
<div class="memdoc">
|
<div class="memdoc">
|
||||||
|
|
||||||
<p>Number of transform operations. </p>
|
<p>The number of transform operations. </p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -317,7 +317,7 @@ Variables</h2></td></tr>
|
|||||||
</div>
|
</div>
|
||||||
<div class="memdoc">
|
<div class="memdoc">
|
||||||
|
|
||||||
<p>When decompressing, use the fastest chrominance upsampling algorithm available in the underlying codec. </p>
|
<p>When decompressing an image that was compressed using chrominance subsampling, use the fastest chrominance upsampling algorithm available in the underlying codec. </p>
|
||||||
<p>The default is to use smooth upsampling, which creates a smooth transition between neighboring chrominance components in order to reduce upsampling artifacts in the decompressed image. </p>
|
<p>The default is to use smooth upsampling, which creates a smooth transition between neighboring chrominance components in order to reduce upsampling artifacts in the decompressed image. </p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -631,7 +631,7 @@ Variables</h2></td></tr>
|
|||||||
<div class="memdoc">
|
<div class="memdoc">
|
||||||
|
|
||||||
<p>Chrominance subsampling options. </p>
|
<p>Chrominance subsampling options. </p>
|
||||||
<p>When an image is converted from the RGB to the YCbCr colorspace as part of the JPEG compression process, some of the Cb and Cr (chrominance) components can be discarded or averaged together to produce a smaller image with little perceptible loss of image clarity (the human eye is more sensitive to small changes in brightness than small changes in color.) This is called "chrominance subsampling". </p>
|
<p>When an image is converted from the RGB to the YUV colorspace as part of the JPEG compression process, some of the U and V (chrominance) components can be discarded or averaged together to produce a smaller image with little perceptible loss of image clarity (the human eye is more sensitive to small changes in brightness than small changes in color.) This is called "chrominance subsampling". </p>
|
||||||
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
|
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
|
||||||
<tr><td valign="top"><em><a class="anchor" id="gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3"></a><!-- doxytag: member="TJSAMP_444" ref="gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3" args="" -->TJSAMP_444</em> </td><td>
|
<tr><td valign="top"><em><a class="anchor" id="gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3"></a><!-- doxytag: member="TJSAMP_444" ref="gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3" args="" -->TJSAMP_444</em> </td><td>
|
||||||
<p>4:4:4 chrominance subsampling (no chrominance subsampling). </p>
|
<p>4:4:4 chrominance subsampling (no chrominance subsampling). </p>
|
||||||
@@ -768,7 +768,7 @@ Variables</h2></td></tr>
|
|||||||
<div class="memdoc">
|
<div class="memdoc">
|
||||||
|
|
||||||
<p>The maximum size of the buffer (in bytes) required to hold a JPEG image with the given parameters. </p>
|
<p>The maximum size of the buffer (in bytes) required to hold a JPEG image with the given parameters. </p>
|
||||||
<p>The number of bytes returned by this function is larger than the size of the uncompressed source image. The reason for this is that the JPEG format uses 16-bit coefficients, and it is thus possible for a very high-quality JPEG image with very high frequency content to expand rather than compress when converted to the JPEG format. Such images represent a very rare corner case, but since there is no way to predict the size of a JPEG image prior to compression, the corner case has to be handled.</p>
|
<p>The number of bytes returned by this function is larger than the size of the uncompressed source image. The reason for this is that the JPEG format uses 16-bit coefficients, and it is thus possible for a very high-quality JPEG image with very high-frequency content to expand rather than compress when converted to the JPEG format. Such images represent a very rare corner case, but since there is no way to predict the size of a JPEG image prior to compression, the corner case has to be handled.</p>
|
||||||
<dl><dt><b>Parameters:</b></dt><dd>
|
<dl><dt><b>Parameters:</b></dt><dd>
|
||||||
<table class="params">
|
<table class="params">
|
||||||
<tr><td class="paramname">width</td><td>width of the image (in pixels) </td></tr>
|
<tr><td class="paramname">width</td><td>width of the image (in pixels) </td></tr>
|
||||||
@@ -1003,10 +1003,10 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
|
|||||||
<tr><td class="paramname">handle</td><td>a handle to a TurboJPEG decompressor or transformer instance </td></tr>
|
<tr><td class="paramname">handle</td><td>a handle to a TurboJPEG decompressor or transformer instance </td></tr>
|
||||||
<tr><td class="paramname">jpegBuf</td><td>pointer to a buffer containing the JPEG image to decompress </td></tr>
|
<tr><td class="paramname">jpegBuf</td><td>pointer to a buffer containing the JPEG image to decompress </td></tr>
|
||||||
<tr><td class="paramname">jpegSize</td><td>size of the JPEG image (in bytes) </td></tr>
|
<tr><td class="paramname">jpegSize</td><td>size of the JPEG image (in bytes) </td></tr>
|
||||||
<tr><td class="paramname">dstBuf</td><td>pointer to an image buffer that will receive the decompressed image. This buffer should normally be <code>pitch * scaledHeight</code> bytes in size, where <code>scaledHeight</code> can be determined by calling <a class="el" href="group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df" title="Compute the scaled value of dimension using the given scaling factor.">TJSCALED()</a> with the JPEG image height and one of the scaling factors returned by <a class="el" href="group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8" title="Returns a list of fractional scaling factors that the JPEG decompressor in this implementation of Tur...">tjGetScalingFactors()</a>. The dstBuf pointer may also be used to decompress into a specific region of a larger buffer. </td></tr>
|
<tr><td class="paramname">dstBuf</td><td>pointer to an image buffer that will receive the decompressed image. This buffer should normally be <code>pitch * scaledHeight</code> bytes in size, where <code>scaledHeight</code> can be determined by calling <a class="el" href="group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df" title="Compute the scaled value of dimension using the given scaling factor.">TJSCALED()</a> with the JPEG image height and one of the scaling factors returned by <a class="el" href="group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8" title="Returns a list of fractional scaling factors that the JPEG decompressor in this implementation of Tur...">tjGetScalingFactors()</a>. The <code>dstBuf</code> pointer may also be used to decompress into a specific region of a larger buffer. </td></tr>
|
||||||
<tr><td class="paramname">width</td><td>desired width (in pixels) of the destination image. If this is smaller than the width of the JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG decompressor to generate the largest possible image that will fit within the desired width. If width is set to 0, then only the height will be considered when determining the scaled image size. </td></tr>
|
<tr><td class="paramname">width</td><td>desired width (in pixels) of the destination image. If this is different than the width of the JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG decompressor to generate the largest possible image that will fit within the desired width. If <code>width</code> is set to 0, then only the height will be considered when determining the scaled image size. </td></tr>
|
||||||
<tr><td class="paramname">pitch</td><td>bytes per line of the destination image. Normally, this is <code>scaledWidth * <a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c" title="Pixel size (in bytes) for a given pixel format.">tjPixelSize</a>[pixelFormat]</code> if the decompressed image is unpadded, else <code><a class="el" href="group___turbo_j_p_e_g.html#ga0aba955473315e405295d978f0c16511" title="Pad the given width to the nearest 32-bit boundary.">TJPAD</a>(scaledWidth * <a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c" title="Pixel size (in bytes) for a given pixel format.">tjPixelSize</a>[pixelFormat])</code> if each line of the decompressed image is padded to the nearest 32-bit boundary, as is the case for Windows bitmaps. (NOTE: <code>scaledWidth</code> can be determined by calling <a class="el" href="group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df" title="Compute the scaled value of dimension using the given scaling factor.">TJSCALED()</a> with the JPEG image width and one of the scaling factors returned by <a class="el" href="group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8" title="Returns a list of fractional scaling factors that the JPEG decompressor in this implementation of Tur...">tjGetScalingFactors()</a>.) You can also be clever and use the pitch parameter to skip lines, etc. Setting this parameter to 0 is the equivalent of setting it to <code>scaledWidth * <a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c" title="Pixel size (in bytes) for a given pixel format.">tjPixelSize</a>[pixelFormat]</code>. </td></tr>
|
<tr><td class="paramname">pitch</td><td>bytes per line of the destination image. Normally, this is <code>scaledWidth * <a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c" title="Pixel size (in bytes) for a given pixel format.">tjPixelSize</a>[pixelFormat]</code> if the decompressed image is unpadded, else <code><a class="el" href="group___turbo_j_p_e_g.html#ga0aba955473315e405295d978f0c16511" title="Pad the given width to the nearest 32-bit boundary.">TJPAD</a>(scaledWidth * <a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c" title="Pixel size (in bytes) for a given pixel format.">tjPixelSize</a>[pixelFormat])</code> if each line of the decompressed image is padded to the nearest 32-bit boundary, as is the case for Windows bitmaps. (NOTE: <code>scaledWidth</code> can be determined by calling <a class="el" href="group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df" title="Compute the scaled value of dimension using the given scaling factor.">TJSCALED()</a> with the JPEG image width and one of the scaling factors returned by <a class="el" href="group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8" title="Returns a list of fractional scaling factors that the JPEG decompressor in this implementation of Tur...">tjGetScalingFactors()</a>.) You can also be clever and use the pitch parameter to skip lines, etc. Setting this parameter to 0 is the equivalent of setting it to <code>scaledWidth * <a class="el" href="group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c" title="Pixel size (in bytes) for a given pixel format.">tjPixelSize</a>[pixelFormat]</code>. </td></tr>
|
||||||
<tr><td class="paramname">height</td><td>desired height (in pixels) of the destination image. If this is smaller than the height of the JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG decompressor to generate the largest possible image that will fit within the desired height. If height is set to 0, then only the width will be considered when determining the scaled image size. </td></tr>
|
<tr><td class="paramname">height</td><td>desired height (in pixels) of the destination image. If this is different than the height of the JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG decompressor to generate the largest possible image that will fit within the desired height. If <code>height</code> is set to 0, then only the width will be considered when determining the scaled image size. </td></tr>
|
||||||
<tr><td class="paramname">pixelFormat</td><td>pixel format of the destination image (see <a class="el" href="group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a">Pixel formats</a>.) </td></tr>
|
<tr><td class="paramname">pixelFormat</td><td>pixel format of the destination image (see <a class="el" href="group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a">Pixel formats</a>.) </td></tr>
|
||||||
<tr><td class="paramname">flags</td><td>the bitwise OR of one or more of the <a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">flags</a>.</td></tr>
|
<tr><td class="paramname">flags</td><td>the bitwise OR of one or more of the <a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">flags</a>.</td></tr>
|
||||||
</table>
|
</table>
|
||||||
@@ -1125,13 +1125,13 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
|
|||||||
<div class="memdoc">
|
<div class="memdoc">
|
||||||
|
|
||||||
<p>Decompress a JPEG image to a YUV planar image. </p>
|
<p>Decompress a JPEG image to a YUV planar image. </p>
|
||||||
<p>This function performs JPEG decompression but leaves out the color conversion step, so a planar YUV image is generated instead of an RGB image. The padding of the planes in this image is the same as the images generated by <a class="el" href="group___turbo_j_p_e_g.html#ga0fa4e7b1943687c6a0c0304529c55d35" title="Encode an RGB or grayscale image into a YUV planar image.">tjEncodeYUV2()</a>. Note that, if the width or height of the image is not an even multiple of the MCU block size (see <a class="el" href="group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c" title="MCU block width (in pixels) for a given level of chrominance subsampling.">tjMCUWidth</a> and <a class="el" href="group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf" title="MCU block height (in pixels) for a given level of chrominance subsampling.">tjMCUHeight</a>), then an intermediate buffer copy will be performed within TurboJPEG.</p>
|
<p>This function performs JPEG decompression but leaves out the color conversion step, so a planar YUV image is generated instead of an RGB image. The padding of the planes in this image is the same as in the images generated by <a class="el" href="group___turbo_j_p_e_g.html#ga0fa4e7b1943687c6a0c0304529c55d35" title="Encode an RGB or grayscale image into a YUV planar image.">tjEncodeYUV2()</a>. Note that, if the width or height of the image is not an even multiple of the MCU block size (see <a class="el" href="group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c" title="MCU block width (in pixels) for a given level of chrominance subsampling.">tjMCUWidth</a> and <a class="el" href="group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf" title="MCU block height (in pixels) for a given level of chrominance subsampling.">tjMCUHeight</a>), then an intermediate buffer copy will be performed within TurboJPEG.</p>
|
||||||
<dl><dt><b>Parameters:</b></dt><dd>
|
<dl><dt><b>Parameters:</b></dt><dd>
|
||||||
<table class="params">
|
<table class="params">
|
||||||
<tr><td class="paramname">handle</td><td>a handle to a TurboJPEG decompressor or transformer instance </td></tr>
|
<tr><td class="paramname">handle</td><td>a handle to a TurboJPEG decompressor or transformer instance </td></tr>
|
||||||
<tr><td class="paramname">jpegBuf</td><td>pointer to a buffer containing the JPEG image to decompress </td></tr>
|
<tr><td class="paramname">jpegBuf</td><td>pointer to a buffer containing the JPEG image to decompress </td></tr>
|
||||||
<tr><td class="paramname">jpegSize</td><td>size of the JPEG image (in bytes) </td></tr>
|
<tr><td class="paramname">jpegSize</td><td>size of the JPEG image (in bytes) </td></tr>
|
||||||
<tr><td class="paramname">dstBuf</td><td>pointer to an image buffer that will receive the YUV image. Use <a class="el" href="group___turbo_j_p_e_g.html#ga9d0cb06fd5052d21b6f2b382db8b219c" title="The size of the buffer (in bytes) required to hold a YUV planar image with the given parameters...">tjBufSizeYUV</a> to determine the appropriate size for this buffer based on the image width, height, and level of subsampling. </td></tr>
|
<tr><td class="paramname">dstBuf</td><td>pointer to an image buffer that will receive the YUV image. Use <a class="el" href="group___turbo_j_p_e_g.html#ga9d0cb06fd5052d21b6f2b382db8b219c" title="The size of the buffer (in bytes) required to hold a YUV planar image with the given parameters...">tjBufSizeYUV()</a> to determine the appropriate size for this buffer based on the image width, height, and level of subsampling. </td></tr>
|
||||||
<tr><td class="paramname">flags</td><td>the bitwise OR of one or more of the <a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">flags</a>.</td></tr>
|
<tr><td class="paramname">flags</td><td>the bitwise OR of one or more of the <a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">flags</a>.</td></tr>
|
||||||
</table>
|
</table>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -1234,7 +1234,7 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
|
|||||||
<div class="memdoc">
|
<div class="memdoc">
|
||||||
|
|
||||||
<p>Encode an RGB or grayscale image into a YUV planar image. </p>
|
<p>Encode an RGB or grayscale image into a YUV planar image. </p>
|
||||||
<p>This function uses the accelerated color conversion routines in TurboJPEG's underlying codec to produce a planar YUV image that is suitable for X Video. Specifically, if the chrominance components are subsampled along the horizontal dimension, then the width of the luminance plane is padded to 2 in the output image (same goes for the height of the luminance plane, if the chrominance components are subsampled along the vertical dimension.) Also, each line of each plane in the output image is padded to 4 bytes. Although this will work with any subsampling option, it is really only useful in combination with TJ_420, which produces an image compatible with the I420 (AKA "YUV420P") format.</p>
|
<p>This function uses the accelerated color conversion routines in TurboJPEG's underlying codec to produce a planar YUV image that is suitable for X Video. Specifically, if the chrominance components are subsampled along the horizontal dimension, then the width of the luminance plane is padded to the nearest multiple of 2 in the output image (same goes for the height of the luminance plane, if the chrominance components are subsampled along the vertical dimension.) Also, each line of each plane in the output image is padded to 4 bytes. Although this will work with any subsampling option, it is really only useful in combination with TJ_420, which produces an image compatible with the I420 (AKA "YUV420P") format.</p>
|
||||||
<dl><dt><b>Parameters:</b></dt><dd>
|
<dl><dt><b>Parameters:</b></dt><dd>
|
||||||
<table class="params">
|
<table class="params">
|
||||||
<tr><td class="paramname">handle</td><td>a handle to a TurboJPEG compressor or transformer instance </td></tr>
|
<tr><td class="paramname">handle</td><td>a handle to a TurboJPEG compressor or transformer instance </td></tr>
|
||||||
@@ -1448,7 +1448,7 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
|
|||||||
<div class="memdoc">
|
<div class="memdoc">
|
||||||
|
|
||||||
<p>Losslessly transform a JPEG image into another JPEG image. </p>
|
<p>Losslessly transform a JPEG image into another JPEG image. </p>
|
||||||
<p>Lossless transforms work by moving the raw coefficients from one JPEG image structure to another without altering the values of the coefficients. While this is typically faster than decompressing the image, transforming it, and re-compressing it, lossless transforms are not free. Each lossless transform requires reading and Huffman decoding all of the coefficients in the source image, regardless of the size of the destination image. Thus, this function provides a means of generating multiple transformed images from the same source or of applying multiple transformations simultaneously, in order to eliminate the need to read the source coefficients multiple times.</p>
|
<p>Lossless transforms work by moving the raw coefficients from one JPEG image structure to another without altering the values of the coefficients. While this is typically faster than decompressing the image, transforming it, and re-compressing it, lossless transforms are not free. Each lossless transform requires reading and performing Huffman decoding on all of the coefficients in the source image, regardless of the size of the destination image. Thus, this function provides a means of generating multiple transformed images from the same source or applying multiple transformations simultaneously, in order to eliminate the need to read the source coefficients multiple times.</p>
|
||||||
<dl><dt><b>Parameters:</b></dt><dd>
|
<dl><dt><b>Parameters:</b></dt><dd>
|
||||||
<table class="params">
|
<table class="params">
|
||||||
<tr><td class="paramname">handle</td><td>a handle to a TurboJPEG transformer instance </td></tr>
|
<tr><td class="paramname">handle</td><td>a handle to a TurboJPEG transformer instance </td></tr>
|
||||||
@@ -1458,11 +1458,11 @@ If you choose option 1, <code>*jpegSize</code> should be set to the size of your
|
|||||||
<tr><td class="paramname">dstBufs</td><td>pointer to an array of n image buffers. <code>dstBufs[i]</code> will receive a JPEG image that has been transformed using the parameters in <code>transforms[i]</code>. TurboJPEG has the ability to reallocate the JPEG buffer to accommodate the size of the JPEG image. Thus, you can choose to:<ol type="1">
|
<tr><td class="paramname">dstBufs</td><td>pointer to an array of n image buffers. <code>dstBufs[i]</code> will receive a JPEG image that has been transformed using the parameters in <code>transforms[i]</code>. TurboJPEG has the ability to reallocate the JPEG buffer to accommodate the size of the JPEG image. Thus, you can choose to:<ol type="1">
|
||||||
<li>pre-allocate the JPEG buffer with an arbitrary size using <a class="el" href="group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff" title="Allocate an image buffer for use with TurboJPEG.">tjAlloc()</a> and let TurboJPEG grow the buffer as needed,</li>
|
<li>pre-allocate the JPEG buffer with an arbitrary size using <a class="el" href="group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff" title="Allocate an image buffer for use with TurboJPEG.">tjAlloc()</a> and let TurboJPEG grow the buffer as needed,</li>
|
||||||
<li>set <code>dstBufs[i]</code> to NULL to tell TurboJPEG to allocate the buffer for you, or</li>
|
<li>set <code>dstBufs[i]</code> to NULL to tell TurboJPEG to allocate the buffer for you, or</li>
|
||||||
<li>pre-allocate the buffer to a "worst case" size determined by calling <a class="el" href="group___turbo_j_p_e_g.html#gaccc5bca7f12fcdcc302e6e1c6d4b311b" title="The maximum size of the buffer (in bytes) required to hold a JPEG image with the given parameters...">tjBufSize()</a> with the cropped width and height. This should ensure that the buffer never has to be re-allocated (setting <a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963" title="Disable buffer (re)allocation.">TJFLAG_NOREALLOC</a> guarantees this.)</li>
|
<li>pre-allocate the buffer to a "worst case" size determined by calling <a class="el" href="group___turbo_j_p_e_g.html#gaccc5bca7f12fcdcc302e6e1c6d4b311b" title="The maximum size of the buffer (in bytes) required to hold a JPEG image with the given parameters...">tjBufSize()</a> with the transformed or cropped width and height. This should ensure that the buffer never has to be re-allocated (setting <a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963" title="Disable buffer (re)allocation.">TJFLAG_NOREALLOC</a> guarantees this.)</li>
|
||||||
</ol>
|
</ol>
|
||||||
If you choose option 1, <code>dstSizes[i]</code> should be set to the size of your pre-allocated buffer. In any case, unless you have set <a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963" title="Disable buffer (re)allocation.">TJFLAG_NOREALLOC</a>, you should always check <code>dstBufs[i]</code> upon return from this function, as it may have changed. </td></tr>
|
If you choose option 1, <code>dstSizes[i]</code> should be set to the size of your pre-allocated buffer. In any case, unless you have set <a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963" title="Disable buffer (re)allocation.">TJFLAG_NOREALLOC</a>, you should always check <code>dstBufs[i]</code> upon return from this function, as it may have changed. </td></tr>
|
||||||
<tr><td class="paramname">dstSizes</td><td>pointer to an array of n unsigned long variables that will receive the actual sizes (in bytes) of each transformed JPEG image. If <code>dstBufs[i]</code> points to a pre-allocated buffer, then <code>dstSizes[i]</code> should be set to the size of the buffer. Upon return, <code>dstSizes[i]</code> will contain the size of the JPEG image (in bytes.) </td></tr>
|
<tr><td class="paramname">dstSizes</td><td>pointer to an array of n unsigned long variables that will receive the actual sizes (in bytes) of each transformed JPEG image. If <code>dstBufs[i]</code> points to a pre-allocated buffer, then <code>dstSizes[i]</code> should be set to the size of the buffer. Upon return, <code>dstSizes[i]</code> will contain the size of the JPEG image (in bytes.) </td></tr>
|
||||||
<tr><td class="paramname">transforms</td><td>pointer to an array of n tjtransform structures, each of which specifies the transform parameters and/or cropping region for the corresponding transformed output image. </td></tr>
|
<tr><td class="paramname">transforms</td><td>pointer to an array of n <a class="el" href="structtjtransform.html" title="Lossless transform.">tjtransform</a> structures, each of which specifies the transform parameters and/or cropping region for the corresponding transformed output image. </td></tr>
|
||||||
<tr><td class="paramname">flags</td><td>the bitwise OR of one or more of the <a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">flags</a>.</td></tr>
|
<tr><td class="paramname">flags</td><td>the bitwise OR of one or more of the <a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">flags</a>.</td></tr>
|
||||||
</table>
|
</table>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -1594,7 +1594,7 @@ If you choose option 1, <code>dstSizes[i]</code> should be set to the size of yo
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by 
|
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<a href="http://www.doxygen.org/index.html">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by 
|
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<a href="http://www.doxygen.org/index.html">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by 
|
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<a href="http://www.doxygen.org/index.html">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ Data Fields</h2></td></tr>
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by 
|
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<a href="http://www.doxygen.org/index.html">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ Data Fields</h2></td></tr>
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by 
|
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<a href="http://www.doxygen.org/index.html">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -103,8 +103,8 @@ Data Fields</h2></td></tr>
|
|||||||
<tr><td class="paramname">coeffs</td><td>pointer to an array of transformed DCT coefficients. (NOTE: this pointer is not guaranteed to be valid once the callback returns, so applications wishing to hand off the DCT coefficients to another function or library should make a copy of them within the body of the callback.) </td></tr>
|
<tr><td class="paramname">coeffs</td><td>pointer to an array of transformed DCT coefficients. (NOTE: this pointer is not guaranteed to be valid once the callback returns, so applications wishing to hand off the DCT coefficients to another function or library should make a copy of them within the body of the callback.) </td></tr>
|
||||||
<tr><td class="paramname">arrayRegion</td><td><a class="el" href="structtjregion.html" title="Cropping region.">tjregion</a> structure containing the width and height of the array pointed to by <code>coeffs</code> as well as its offset relative to the component plane. TurboJPEG implementations may choose to split each component plane into multiple DCT coefficient arrays and call the callback function once for each array. </td></tr>
|
<tr><td class="paramname">arrayRegion</td><td><a class="el" href="structtjregion.html" title="Cropping region.">tjregion</a> structure containing the width and height of the array pointed to by <code>coeffs</code> as well as its offset relative to the component plane. TurboJPEG implementations may choose to split each component plane into multiple DCT coefficient arrays and call the callback function once for each array. </td></tr>
|
||||||
<tr><td class="paramname">planeRegion</td><td><a class="el" href="structtjregion.html" title="Cropping region.">tjregion</a> structure containing the width and height of the component plane to which <code>coeffs</code> belongs </td></tr>
|
<tr><td class="paramname">planeRegion</td><td><a class="el" href="structtjregion.html" title="Cropping region.">tjregion</a> structure containing the width and height of the component plane to which <code>coeffs</code> belongs </td></tr>
|
||||||
<tr><td class="paramname">componentID</td><td>ID number of the component plane to which <code>coeffs</code> belongs (Y, Cb, and Cr have, respectively, ID's of 0, 1, and 2 in typical JPEG images.) </td></tr>
|
<tr><td class="paramname">componentID</td><td>ID number of the component plane to which <code>coeffs</code> belongs (Y, U, and V have, respectively, ID's of 0, 1, and 2 in typical JPEG images.) </td></tr>
|
||||||
<tr><td class="paramname">transformID</td><td>ID number of the transformed image to which <code>coeffs</code> belongs. This is the same as the index of the transform in the transforms array that was passed to <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a>. </td></tr>
|
<tr><td class="paramname">transformID</td><td>ID number of the transformed image to which <code>coeffs</code> belongs. This is the same as the index of the transform in the <code>transforms</code> array that was passed to <a class="el" href="group___turbo_j_p_e_g.html#gae403193ceb4aafb7e0f56ab587b48616" title="Losslessly transform a JPEG image into another JPEG image.">tjTransform()</a>. </td></tr>
|
||||||
<tr><td class="paramname">transform</td><td>a pointer to a <a class="el" href="structtjtransform.html" title="Lossless transform.">tjtransform</a> structure that specifies the parameters and/or cropping region for this transform</td></tr>
|
<tr><td class="paramname">transform</td><td>a pointer to a <a class="el" href="structtjtransform.html" title="Lossless transform.">tjtransform</a> structure that specifies the parameters and/or cropping region for this transform</td></tr>
|
||||||
</table>
|
</table>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -191,7 +191,7 @@ Data Fields</h2></td></tr>
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:14:55 for TurboJPEG by 
|
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<a href="http://www.doxygen.org/index.html">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
214
filelist.txt
214
filelist.txt
@@ -1,214 +0,0 @@
|
|||||||
IJG JPEG LIBRARY: FILE LIST
|
|
||||||
|
|
||||||
Copyright (C) 1994-2010, Thomas G. Lane, Guido Vollbeding, D. R. Commander.
|
|
||||||
This file is part of the Independent JPEG Group's software.
|
|
||||||
For conditions of distribution and use, see the accompanying README file.
|
|
||||||
|
|
||||||
|
|
||||||
Here is a road map to the files in the IJG JPEG distribution. The
|
|
||||||
distribution includes the JPEG library proper, plus two application
|
|
||||||
programs ("cjpeg" and "djpeg") which use the library to convert JPEG
|
|
||||||
files to and from some other popular image formats. A third application
|
|
||||||
"jpegtran" uses the library to do lossless conversion between different
|
|
||||||
variants of JPEG. There are also two stand-alone applications,
|
|
||||||
"rdjpgcom" and "wrjpgcom".
|
|
||||||
|
|
||||||
|
|
||||||
THE JPEG LIBRARY
|
|
||||||
================
|
|
||||||
|
|
||||||
Include files:
|
|
||||||
|
|
||||||
jpeglib.h JPEG library's exported data and function declarations.
|
|
||||||
jconfig.h Configuration declarations. Note: this file is not present
|
|
||||||
in the distribution; it is generated during installation.
|
|
||||||
jmorecfg.h Additional configuration declarations; need not be changed
|
|
||||||
for a standard installation.
|
|
||||||
jerror.h Declares JPEG library's error and trace message codes.
|
|
||||||
jinclude.h Central include file used by all IJG .c files to reference
|
|
||||||
system include files.
|
|
||||||
jpegint.h JPEG library's internal data structures.
|
|
||||||
jchuff.h Private declarations for Huffman encoder modules.
|
|
||||||
jdhuff.h Private declarations for Huffman decoder modules.
|
|
||||||
jdct.h Private declarations for forward & reverse DCT subsystems.
|
|
||||||
jmemsys.h Private declarations for memory management subsystem.
|
|
||||||
jversion.h Version information.
|
|
||||||
|
|
||||||
Applications using the library should include jpeglib.h (which in turn
|
|
||||||
includes jconfig.h and jmorecfg.h). Optionally, jerror.h may be included
|
|
||||||
if the application needs to reference individual JPEG error codes. The
|
|
||||||
other include files are intended for internal use and would not normally
|
|
||||||
be included by an application program. (cjpeg/djpeg/etc do use jinclude.h,
|
|
||||||
since its function is to improve portability of the whole IJG distribution.
|
|
||||||
Most other applications will directly include the system include files they
|
|
||||||
want, and hence won't need jinclude.h.)
|
|
||||||
|
|
||||||
|
|
||||||
C source code files:
|
|
||||||
|
|
||||||
These files contain most of the functions intended to be called directly by
|
|
||||||
an application program:
|
|
||||||
|
|
||||||
jcapimin.c Application program interface: core routines for compression.
|
|
||||||
jcapistd.c Application program interface: standard compression.
|
|
||||||
jdapimin.c Application program interface: core routines for decompression.
|
|
||||||
jdapistd.c Application program interface: standard decompression.
|
|
||||||
jcomapi.c Application program interface routines common to compression
|
|
||||||
and decompression.
|
|
||||||
jcparam.c Compression parameter setting helper routines.
|
|
||||||
jctrans.c API and library routines for transcoding compression.
|
|
||||||
jdtrans.c API and library routines for transcoding decompression.
|
|
||||||
|
|
||||||
Compression side of the library:
|
|
||||||
|
|
||||||
jcinit.c Initialization: determines which other modules to use.
|
|
||||||
jcmaster.c Master control: setup and inter-pass sequencing logic.
|
|
||||||
jcmainct.c Main buffer controller (preprocessor => JPEG compressor).
|
|
||||||
jcprepct.c Preprocessor buffer controller.
|
|
||||||
jccoefct.c Buffer controller for DCT coefficient buffer.
|
|
||||||
jccolor.c Color space conversion.
|
|
||||||
jcsample.c Downsampling.
|
|
||||||
jcdctmgr.c DCT manager (DCT implementation selection & control).
|
|
||||||
jfdctint.c Forward DCT using slow-but-accurate integer method.
|
|
||||||
jfdctfst.c Forward DCT using faster, less accurate integer method.
|
|
||||||
jfdctflt.c Forward DCT using floating-point arithmetic.
|
|
||||||
jchuff.c Huffman entropy coding for sequential JPEG.
|
|
||||||
jcphuff.c Huffman entropy coding for progressive JPEG.
|
|
||||||
jcarith.c Arithmetic entropy coding.
|
|
||||||
jcmarker.c JPEG marker writing.
|
|
||||||
jdatadst.c Data destination managers for memory and stdio output.
|
|
||||||
|
|
||||||
Decompression side of the library:
|
|
||||||
|
|
||||||
jdmaster.c Master control: determines which other modules to use.
|
|
||||||
jdinput.c Input controller: controls input processing modules.
|
|
||||||
jdmainct.c Main buffer controller (JPEG decompressor => postprocessor).
|
|
||||||
jdcoefct.c Buffer controller for DCT coefficient buffer.
|
|
||||||
jdpostct.c Postprocessor buffer controller.
|
|
||||||
jdmarker.c JPEG marker reading.
|
|
||||||
jdhuff.c Huffman entropy decoding for sequential JPEG.
|
|
||||||
jdphuff.c Huffman entropy decoding for progressive JPEG.
|
|
||||||
jdarith.c Arithmetic entropy decoding.
|
|
||||||
jddctmgr.c IDCT manager (IDCT implementation selection & control).
|
|
||||||
jidctint.c Inverse DCT using slow-but-accurate integer method.
|
|
||||||
jidctfst.c Inverse DCT using faster, less accurate integer method.
|
|
||||||
jidctflt.c Inverse DCT using floating-point arithmetic.
|
|
||||||
jidctred.c Inverse DCTs with reduced-size outputs.
|
|
||||||
jdsample.c Upsampling.
|
|
||||||
jdcolor.c Color space conversion.
|
|
||||||
jdmerge.c Merged upsampling/color conversion (faster, lower quality).
|
|
||||||
jquant1.c One-pass color quantization using a fixed-spacing colormap.
|
|
||||||
jquant2.c Two-pass color quantization using a custom-generated colormap.
|
|
||||||
Also handles one-pass quantization to an externally given map.
|
|
||||||
jdatasrc.c Data source managers for memory and stdio input.
|
|
||||||
|
|
||||||
Support files for both compression and decompression:
|
|
||||||
|
|
||||||
jaricom.c Tables for common use in arithmetic entropy encoding and
|
|
||||||
decoding routines.
|
|
||||||
jerror.c Standard error handling routines (application replaceable).
|
|
||||||
jmemmgr.c System-independent (more or less) memory management code.
|
|
||||||
jutils.c Miscellaneous utility routines.
|
|
||||||
|
|
||||||
jmemmgr.c relies on a system-dependent memory management module. The IJG
|
|
||||||
distribution includes the following implementations of the system-dependent
|
|
||||||
module:
|
|
||||||
|
|
||||||
jmemnobs.c "No backing store": assumes adequate virtual memory exists.
|
|
||||||
jmemansi.c Makes temporary files with ANSI-standard routine tmpfile().
|
|
||||||
jmemname.c Makes temporary files with program-generated file names.
|
|
||||||
jmemdos.c Custom implementation for MS-DOS (16-bit environment only):
|
|
||||||
can use extended and expanded memory as well as temp files.
|
|
||||||
jmemmac.c Custom implementation for Apple Macintosh.
|
|
||||||
|
|
||||||
Exactly one of the system-dependent modules should be configured into an
|
|
||||||
installed JPEG library (see install.txt for hints about which one to use).
|
|
||||||
On unusual systems you may find it worthwhile to make a special
|
|
||||||
system-dependent memory manager.
|
|
||||||
|
|
||||||
|
|
||||||
Non-C source code files:
|
|
||||||
|
|
||||||
jmemdosa.asm 80x86 assembly code support for jmemdos.c; used only in
|
|
||||||
MS-DOS-specific configurations of the JPEG library.
|
|
||||||
|
|
||||||
|
|
||||||
CJPEG/DJPEG/JPEGTRAN
|
|
||||||
====================
|
|
||||||
|
|
||||||
Include files:
|
|
||||||
|
|
||||||
cdjpeg.h Declarations shared by cjpeg/djpeg/jpegtran modules.
|
|
||||||
cderror.h Additional error and trace message codes for cjpeg et al.
|
|
||||||
transupp.h Declarations for jpegtran support routines in transupp.c.
|
|
||||||
|
|
||||||
C source code files:
|
|
||||||
|
|
||||||
cjpeg.c Main program for cjpeg.
|
|
||||||
djpeg.c Main program for djpeg.
|
|
||||||
jpegtran.c Main program for jpegtran.
|
|
||||||
cdjpeg.c Utility routines used by all three programs.
|
|
||||||
rdcolmap.c Code to read a colormap file for djpeg's "-map" switch.
|
|
||||||
rdswitch.c Code to process some of cjpeg's more complex switches.
|
|
||||||
Also used by jpegtran.
|
|
||||||
transupp.c Support code for jpegtran: lossless image manipulations.
|
|
||||||
|
|
||||||
Image file reader modules for cjpeg:
|
|
||||||
|
|
||||||
rdbmp.c BMP file input.
|
|
||||||
rdgif.c GIF file input (now just a stub).
|
|
||||||
rdppm.c PPM/PGM file input.
|
|
||||||
rdrle.c Utah RLE file input.
|
|
||||||
rdtarga.c Targa file input.
|
|
||||||
|
|
||||||
Image file writer modules for djpeg:
|
|
||||||
|
|
||||||
wrbmp.c BMP file output.
|
|
||||||
wrgif.c GIF file output (a mere shadow of its former self).
|
|
||||||
wrppm.c PPM/PGM file output.
|
|
||||||
wrrle.c Utah RLE file output.
|
|
||||||
wrtarga.c Targa file output.
|
|
||||||
|
|
||||||
|
|
||||||
RDJPGCOM/WRJPGCOM
|
|
||||||
=================
|
|
||||||
|
|
||||||
C source code files:
|
|
||||||
|
|
||||||
rdjpgcom.c Stand-alone rdjpgcom application.
|
|
||||||
wrjpgcom.c Stand-alone wrjpgcom application.
|
|
||||||
|
|
||||||
These programs do not depend on the IJG library. They do use
|
|
||||||
jconfig.h and jinclude.h, only to improve portability.
|
|
||||||
|
|
||||||
|
|
||||||
ADDITIONAL FILES
|
|
||||||
================
|
|
||||||
|
|
||||||
Documentation (see README for a guide to the documentation files):
|
|
||||||
|
|
||||||
README Master documentation file.
|
|
||||||
*.txt Other documentation files.
|
|
||||||
*.1 Documentation in Unix man page format.
|
|
||||||
change.log Version-to-version change highlights.
|
|
||||||
example.c Sample code for calling JPEG library.
|
|
||||||
|
|
||||||
Configuration/installation files and programs (see install.txt for more info):
|
|
||||||
|
|
||||||
configure Unix shell script to perform automatic configuration.
|
|
||||||
configure.ac Source file for use with Autoconf to generate configure.
|
|
||||||
ltmain.sh Support scripts for configure (from GNU libtool).
|
|
||||||
config.guess
|
|
||||||
config.sub
|
|
||||||
depcomp
|
|
||||||
missing
|
|
||||||
install-sh Install shell script for those Unix systems lacking one.
|
|
||||||
Makefile.in Makefile input for configure.
|
|
||||||
Makefile.am Source file for use with Automake to generate Makefile.in.
|
|
||||||
jconfig.txt Template for making jconfig.h by hand.
|
|
||||||
aclocal.m4 M4 macro definitions for use with Autoconf.
|
|
||||||
|
|
||||||
Test files (see install.txt for test procedure):
|
|
||||||
|
|
||||||
test*.* Source and comparison files for confidence test.
|
|
||||||
These are binary image files, NOT text files.
|
|
||||||
1096
install.txt
1096
install.txt
File diff suppressed because it is too large
Load Diff
@@ -9,7 +9,8 @@ set(JAVA_CLASSNAMES org/libjpegturbo/turbojpeg/TJ
|
|||||||
org/libjpegturbo/turbojpeg/TJTransform
|
org/libjpegturbo/turbojpeg/TJTransform
|
||||||
org/libjpegturbo/turbojpeg/TJTransformer
|
org/libjpegturbo/turbojpeg/TJTransformer
|
||||||
TJUnitTest
|
TJUnitTest
|
||||||
TJExample)
|
TJExample
|
||||||
|
TJBench)
|
||||||
|
|
||||||
if(MSVC_IDE)
|
if(MSVC_IDE)
|
||||||
set(OBJDIR "${CMAKE_CURRENT_BINARY_DIR}/$(OutDir)")
|
set(OBJDIR "${CMAKE_CURRENT_BINARY_DIR}/$(OutDir)")
|
||||||
|
|||||||
@@ -1,15 +1,21 @@
|
|||||||
JAVAROOT = .
|
JAVAROOT = .
|
||||||
|
|
||||||
|
org/libjpegturbo/turbojpeg/TJLoader.java: $(srcdir)/org/libjpegturbo/turbojpeg/TJLoader.java.tmpl
|
||||||
|
mkdir -p org/libjpegturbo/turbojpeg; \
|
||||||
|
cat $(srcdir)/org/libjpegturbo/turbojpeg/TJLoader.java.tmpl | \
|
||||||
|
sed s@%{__libdir}@$(libdir)@g > org/libjpegturbo/turbojpeg/TJLoader.java
|
||||||
|
|
||||||
|
|
||||||
JAVASOURCES = org/libjpegturbo/turbojpeg/TJ.java \
|
JAVASOURCES = org/libjpegturbo/turbojpeg/TJ.java \
|
||||||
org/libjpegturbo/turbojpeg/TJCompressor.java \
|
org/libjpegturbo/turbojpeg/TJCompressor.java \
|
||||||
org/libjpegturbo/turbojpeg/TJCustomFilter.java \
|
org/libjpegturbo/turbojpeg/TJCustomFilter.java \
|
||||||
org/libjpegturbo/turbojpeg/TJDecompressor.java \
|
org/libjpegturbo/turbojpeg/TJDecompressor.java \
|
||||||
org/libjpegturbo/turbojpeg/TJLoader.java \
|
|
||||||
org/libjpegturbo/turbojpeg/TJScalingFactor.java \
|
org/libjpegturbo/turbojpeg/TJScalingFactor.java \
|
||||||
org/libjpegturbo/turbojpeg/TJTransform.java \
|
org/libjpegturbo/turbojpeg/TJTransform.java \
|
||||||
org/libjpegturbo/turbojpeg/TJTransformer.java \
|
org/libjpegturbo/turbojpeg/TJTransformer.java \
|
||||||
TJExample.java \
|
TJExample.java \
|
||||||
TJUnitTest.java
|
TJUnitTest.java \
|
||||||
|
TJBench.java
|
||||||
|
|
||||||
JNIHEADERS = org_libjpegturbo_turbojpeg_TJ.h \
|
JNIHEADERS = org_libjpegturbo_turbojpeg_TJ.h \
|
||||||
org_libjpegturbo_turbojpeg_TJCompressor.h \
|
org_libjpegturbo_turbojpeg_TJCompressor.h \
|
||||||
@@ -18,7 +24,7 @@ JNIHEADERS = org_libjpegturbo_turbojpeg_TJ.h \
|
|||||||
|
|
||||||
if WITH_JAVA
|
if WITH_JAVA
|
||||||
|
|
||||||
dist_noinst_JAVA = ${JAVASOURCES}
|
nodist_noinst_JAVA = ${JAVASOURCES} org/libjpegturbo/turbojpeg/TJLoader.java
|
||||||
|
|
||||||
JAVA_CLASSES = org/libjpegturbo/turbojpeg/TJ.class \
|
JAVA_CLASSES = org/libjpegturbo/turbojpeg/TJ.class \
|
||||||
org/libjpegturbo/turbojpeg/TJCompressor.class \
|
org/libjpegturbo/turbojpeg/TJCompressor.class \
|
||||||
@@ -29,7 +35,8 @@ JAVA_CLASSES = org/libjpegturbo/turbojpeg/TJ.class \
|
|||||||
org/libjpegturbo/turbojpeg/TJTransform.class \
|
org/libjpegturbo/turbojpeg/TJTransform.class \
|
||||||
org/libjpegturbo/turbojpeg/TJTransformer.class \
|
org/libjpegturbo/turbojpeg/TJTransformer.class \
|
||||||
TJExample.class \
|
TJExample.class \
|
||||||
TJUnitTest.class
|
TJUnitTest.class \
|
||||||
|
TJBench.class
|
||||||
|
|
||||||
all: all-am turbojpeg.jar
|
all: all-am turbojpeg.jar
|
||||||
|
|
||||||
@@ -40,12 +47,12 @@ clean-local:
|
|||||||
rm -f turbojpeg.jar
|
rm -f turbojpeg.jar
|
||||||
|
|
||||||
install-exec-local: turbojpeg.jar
|
install-exec-local: turbojpeg.jar
|
||||||
mkdir -p $(DESTDIR)/$(prefix)/classes
|
mkdir -p $(DESTDIR)/$(datadir)/classes
|
||||||
$(INSTALL) -m 644 turbojpeg.jar $(DESTDIR)/$(prefix)/classes/
|
$(INSTALL) -m 644 turbojpeg.jar $(DESTDIR)/$(datadir)/classes/
|
||||||
|
|
||||||
uninstall-local:
|
uninstall-local:
|
||||||
rm -f $(DESTDIR)/$(prefix)/classes/turbojpeg.jar
|
rm -f $(DESTDIR)/$(datadir)/classes/turbojpeg.jar
|
||||||
if [ -d $(DESTDIR)/$(prefix)/classes ]; then rmdir $(DESTDIR)/$(prefix)/classes; fi
|
if [ -d $(DESTDIR)/$(datadir)/classes ]; then rmdir $(DESTDIR)/$(datadir)/classes; fi
|
||||||
|
|
||||||
headers: all
|
headers: all
|
||||||
javah -d ${srcdir} org.libjpegturbo.turbojpeg.TJ; \
|
javah -d ${srcdir} org.libjpegturbo.turbojpeg.TJ; \
|
||||||
@@ -60,4 +67,5 @@ docs: all
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
EXTRA_DIST = MANIFEST.MF ${JAVASOURCES} ${JNIHEADERS} doc CMakeLists.txt \
|
EXTRA_DIST = MANIFEST.MF ${JAVASOURCES} ${JNIHEADERS} doc CMakeLists.txt \
|
||||||
|
org/libjpegturbo/turbojpeg/TJLoader.java.tmpl \
|
||||||
org/libjpegturbo/turbojpeg/TJLoader.java.in
|
org/libjpegturbo/turbojpeg/TJLoader.java.in
|
||||||
|
|||||||
63
java/README
63
java/README
@@ -1,25 +1,25 @@
|
|||||||
TurboJPEG/OSS Java Wrapper
|
TurboJPEG Java Wrapper
|
||||||
==========================
|
======================
|
||||||
|
|
||||||
TurboJPEG/OSS can optionally be built with a Java Native Interface wrapper,
|
The TurboJPEG shared library can optionally be built with a Java Native
|
||||||
which allows the TurboJPEG/OSS dynamic library to be loaded and used directly
|
Interface wrapper, which allows the library to be loaded and used directly from
|
||||||
from Java applications. The Java front end for this is defined in several
|
Java applications. The Java front end for this is defined in several classes
|
||||||
classes located under org/libjpegturbo/turbojpeg. The source code for these
|
located under org/libjpegturbo/turbojpeg. The source code for these Java
|
||||||
Java classes is licensed under a BSD-style license, so the files can be
|
classes is licensed under a BSD-style license, so the files can be incorporated
|
||||||
incorporated directly into both open source and proprietary projects without
|
directly into both open source and proprietary projects without restriction. A
|
||||||
restriction. A Java archive (JAR) file containing these classes is also
|
Java archive (JAR) file containing these classes is also shipped with the
|
||||||
shipped with the "official" distribution packages of libjpeg-turbo.
|
"official" distribution packages of libjpeg-turbo.
|
||||||
|
|
||||||
TJExample.java, which should also be located in the same directory as this
|
TJExample.java, which should also be located in the same directory as this
|
||||||
README file, demonstrates how to use the TurboJPEG/OSS Java front end to
|
README file, demonstrates how to use the TurboJPEG Java API to compress and
|
||||||
compress and decompress JPEG images in memory.
|
decompress JPEG images in memory.
|
||||||
|
|
||||||
|
|
||||||
Performance Pitfalls
|
Performance Pitfalls
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
The TurboJPEG Java front end defines several convenience methods that can
|
The TurboJPEG Java API defines several convenience methods that can allocate
|
||||||
allocate image buffers or instantiate classes to hold the result of compress,
|
image buffers or instantiate classes to hold the result of compress,
|
||||||
decompress, or transform operations. However, if you use these methods, then
|
decompress, or transform operations. However, if you use these methods, then
|
||||||
be mindful of the amount of new data you are creating on the heap. It may be
|
be mindful of the amount of new data you are creating on the heap. It may be
|
||||||
necessary to manually invoke the garbage collector to prevent heap exhaustion
|
necessary to manually invoke the garbage collector to prevent heap exhaustion
|
||||||
@@ -27,29 +27,26 @@ or to prevent performance degradation. Background garbage collection can kill
|
|||||||
performance, particularly in a multi-threaded environment (Java pauses all
|
performance, particularly in a multi-threaded environment (Java pauses all
|
||||||
threads when the GC runs.)
|
threads when the GC runs.)
|
||||||
|
|
||||||
The Java front end always gives you the option of pre-allocating your own
|
The TurboJPEG Java API always gives you the option of pre-allocating your own
|
||||||
source and destination buffers, which allows you to re-use these buffers for
|
source and destination buffers, which allows you to re-use those buffers for
|
||||||
compressing/decompressing multiple images. If the image sequence you are
|
compressing/decompressing multiple images. If the image sequence you are
|
||||||
compressing or decompressing consists of images of the same size, then
|
compressing or decompressing consists of images of the same size, then
|
||||||
pre-allocating the buffers is recommended.
|
pre-allocating the buffers is recommended.
|
||||||
|
|
||||||
|
|
||||||
Note for OS X users
|
Installation Directory
|
||||||
-------------------
|
|
||||||
|
|
||||||
/usr/lib, the directory under which libturbojpeg.dylib is installed on Mac
|
|
||||||
systems, is not part of the normal Java library path. Thus, when running a
|
|
||||||
Java application that uses TurboJPEG/OSS on Mac systems, you will need to pass
|
|
||||||
an argument of -Djava.library.path=/usr/lib to java.
|
|
||||||
|
|
||||||
|
|
||||||
Note for Solaris users
|
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
/opt/libjpeg-turbo/lib, the directory under which libturbojpeg.so is installed
|
The TurboJPEG Java Wrapper will look for the TurboJPEG JNI library
|
||||||
on Solaris systems, is not part of the normal Java library path. Thus, when
|
(libturbojpeg.so, libturbojpeg.jnilib, or turbojpeg.dll) in the system library
|
||||||
running a Java application that uses TurboJPEG/OSS on Solaris systems, you will
|
paths or in any paths specified in LD_LIBRARY_PATH (Un*x), DYLD_LIBRARY_PATH
|
||||||
need to pass an argument of -Djava.library.path=/opt/libjpeg-turbo/lib to java.
|
(Mac), or PATH (Windows.) Failing this, on Un*x and Mac systems, the wrapper
|
||||||
If using a 64-bit data model, then instead pass an argument of
|
will look for the JNI library under the library directory configured when
|
||||||
-Djava.library.path=/opt/libjpeg-turbo/lib/amd64 to use the 64-bit version of
|
libjpeg-turbo was built. If that library directory is
|
||||||
libturbojpeg.so.
|
/opt/libjpeg-turbo/lib32, then /opt/libjpeg-turbo/lib64 is also searched, and
|
||||||
|
vice versa.
|
||||||
|
|
||||||
|
If you installed the JNI library into another directory, then you will need
|
||||||
|
to pass an argument of -Djava.library.path={path_to_JNI_library} to java, or
|
||||||
|
manipulate LD_LIBRARY_PATH, DYLD_LIBRARY_PATH, or PATH to include the directory
|
||||||
|
containing the JNI library.
|
||||||
|
|||||||
853
java/TJBench.java
Normal file
853
java/TJBench.java
Normal file
@@ -0,0 +1,853 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C)2009-2012 D. R. Commander. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of the libjpeg-turbo Project nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.awt.image.*;
|
||||||
|
import javax.imageio.*;
|
||||||
|
import java.util.*;
|
||||||
|
import org.libjpegturbo.turbojpeg.*;
|
||||||
|
|
||||||
|
class TJBench {
|
||||||
|
|
||||||
|
static final int YUVENCODE = 1;
|
||||||
|
static final int YUVDECODE = 2;
|
||||||
|
|
||||||
|
static int flags = 0, yuv = 0, quiet = 0, pf = TJ.PF_BGR;
|
||||||
|
static boolean decompOnly, doTile;
|
||||||
|
|
||||||
|
static final String[] pixFormatStr = {
|
||||||
|
"RGB", "BGR", "RGBX", "BGRX", "XBGR", "XRGB", "GRAY"
|
||||||
|
};
|
||||||
|
|
||||||
|
static final String[] subNameLong = {
|
||||||
|
"4:4:4", "4:2:2", "4:2:0", "GRAY", "4:4:0"
|
||||||
|
};
|
||||||
|
|
||||||
|
static final String[] subName = {
|
||||||
|
"444", "422", "420", "GRAY", "440"
|
||||||
|
};
|
||||||
|
|
||||||
|
static TJScalingFactor sf;
|
||||||
|
static int xformOp = TJTransform.OP_NONE, xformOpt = 0;
|
||||||
|
static double benchTime = 5.0;
|
||||||
|
|
||||||
|
|
||||||
|
static final double getTime() {
|
||||||
|
return (double)System.nanoTime() / 1.0e9;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static String sigFig(double val, int figs) {
|
||||||
|
String format;
|
||||||
|
int digitsAfterDecimal = figs - (int)Math.ceil(Math.log10(Math.abs(val)));
|
||||||
|
if (digitsAfterDecimal < 1)
|
||||||
|
format = new String("%.0f");
|
||||||
|
else
|
||||||
|
format = new String("%." + digitsAfterDecimal + "f");
|
||||||
|
return String.format(format, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static byte[] loadImage(String fileName, int[] w, int[] h, int pixelFormat)
|
||||||
|
throws Exception {
|
||||||
|
BufferedImage img = ImageIO.read(new File(fileName));
|
||||||
|
if (img == null)
|
||||||
|
throw new Exception("Could not read " + fileName);
|
||||||
|
w[0] = img.getWidth();
|
||||||
|
h[0] = img.getHeight();
|
||||||
|
int[] rgb = img.getRGB(0, 0, w[0], h[0], null, 0, w[0]);
|
||||||
|
int ps = TJ.getPixelSize(pixelFormat);
|
||||||
|
int rindex = TJ.getRedOffset(pixelFormat);
|
||||||
|
int gindex = TJ.getGreenOffset(pixelFormat);
|
||||||
|
int bindex = TJ.getBlueOffset(pixelFormat);
|
||||||
|
byte[] dstBuf = new byte[w[0] * h[0] * ps];
|
||||||
|
int pixels = w[0] * h[0], dstPtr = 0, rgbPtr = 0;
|
||||||
|
while (pixels-- > 0) {
|
||||||
|
dstBuf[dstPtr + rindex] = (byte)((rgb[rgbPtr] >> 16) & 0xff);
|
||||||
|
dstBuf[dstPtr + gindex] = (byte)((rgb[rgbPtr] >> 8) & 0xff);
|
||||||
|
dstBuf[dstPtr + bindex] = (byte)(rgb[rgbPtr] & 0xff);
|
||||||
|
dstPtr += ps;
|
||||||
|
rgbPtr++;
|
||||||
|
}
|
||||||
|
return dstBuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void saveImage(String fileName, byte[] srcBuf, int w, int h,
|
||||||
|
int pixelFormat) throws Exception {
|
||||||
|
BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
|
||||||
|
int pixels = w * h, srcPtr = 0;
|
||||||
|
int ps = TJ.getPixelSize(pixelFormat);
|
||||||
|
int rindex = TJ.getRedOffset(pixelFormat);
|
||||||
|
int gindex = TJ.getGreenOffset(pixelFormat);
|
||||||
|
int bindex = TJ.getBlueOffset(pixelFormat);
|
||||||
|
for (int y = 0; y < h; y++) {
|
||||||
|
for (int x = 0; x < w; x++, srcPtr += ps) {
|
||||||
|
int pixel = (srcBuf[srcPtr + rindex] & 0xff) << 16 |
|
||||||
|
(srcBuf[srcPtr + gindex] & 0xff) << 8 |
|
||||||
|
(srcBuf[srcPtr + bindex] & 0xff);
|
||||||
|
img.setRGB(x, y, pixel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImageIO.write(img, "bmp", new File(fileName));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Decompression test */
|
||||||
|
static void decompTest(byte[] srcBuf, byte[][] jpegBuf, int[] jpegSize,
|
||||||
|
byte[] dstBuf, int w, int h, int subsamp,
|
||||||
|
int jpegQual, String fileName, int tilew, int tileh)
|
||||||
|
throws Exception {
|
||||||
|
String qualStr = new String(""), sizeStr, tempStr;
|
||||||
|
TJDecompressor tjd;
|
||||||
|
double start, elapsed;
|
||||||
|
int ps = TJ.getPixelSize(pf), i;
|
||||||
|
int yuvSize = TJ.bufSizeYUV(w, h, subsamp), bufsize;
|
||||||
|
int scaledw = (yuv == YUVDECODE) ? w : sf.getScaled(w);
|
||||||
|
int scaledh = (yuv == YUVDECODE) ? h : sf.getScaled(h);
|
||||||
|
int pitch = scaledw * ps;
|
||||||
|
|
||||||
|
if (jpegQual > 0)
|
||||||
|
qualStr = new String("_Q" + jpegQual);
|
||||||
|
|
||||||
|
tjd = new TJDecompressor();
|
||||||
|
|
||||||
|
int bufSize = (yuv == YUVDECODE ? yuvSize : pitch * scaledh);
|
||||||
|
if (dstBuf == null)
|
||||||
|
dstBuf = new byte[bufSize];
|
||||||
|
|
||||||
|
/* Set the destination buffer to gray so we know whether the decompressor
|
||||||
|
attempted to write to it */
|
||||||
|
Arrays.fill(dstBuf, (byte)127);
|
||||||
|
|
||||||
|
/* Execute once to preload cache */
|
||||||
|
tjd.setJPEGImage(jpegBuf[0], jpegSize[0]);
|
||||||
|
if (yuv == YUVDECODE)
|
||||||
|
tjd.decompressToYUV(dstBuf, flags);
|
||||||
|
else
|
||||||
|
tjd.decompress(dstBuf, scaledw, pitch, scaledh, pf, flags);
|
||||||
|
|
||||||
|
/* Benchmark */
|
||||||
|
for (i = 0, start = getTime(); (elapsed = getTime() - start) < benchTime;
|
||||||
|
i++) {
|
||||||
|
int tile = 0;
|
||||||
|
if (yuv == YUVDECODE)
|
||||||
|
tjd.decompressToYUV(dstBuf, flags);
|
||||||
|
else {
|
||||||
|
for (int y = 0; y < h; y += tileh) {
|
||||||
|
for (int x = 0; x < w; x += tilew, tile++) {
|
||||||
|
int width = doTile ? Math.min(tilew, w - x) : scaledw;
|
||||||
|
int height = doTile ? Math.min(tileh, h - y) : scaledh;
|
||||||
|
tjd.setJPEGImage(jpegBuf[tile], jpegSize[tile]);
|
||||||
|
tjd.decompress(dstBuf, x, y, width, pitch, height, pf, flags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tjd = null;
|
||||||
|
System.gc();
|
||||||
|
|
||||||
|
if (quiet != 0)
|
||||||
|
System.out.println(
|
||||||
|
sigFig((double)(w * h) / 1000000. * (double)i / elapsed, 4));
|
||||||
|
else {
|
||||||
|
System.out.format("D--> Frame rate: %f fps\n",
|
||||||
|
(double)i / elapsed);
|
||||||
|
System.out.format(" Dest. throughput: %f Megapixels/sec\n",
|
||||||
|
(double)(w * h) / 1000000. * (double)i / elapsed);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (yuv == YUVDECODE) {
|
||||||
|
tempStr = fileName + "_" + subName[subsamp] + qualStr + ".yuv";
|
||||||
|
FileOutputStream fos = new FileOutputStream(tempStr);
|
||||||
|
fos.write(dstBuf, 0, yuvSize);
|
||||||
|
fos.close();
|
||||||
|
} else {
|
||||||
|
if (sf.getNum() != 1 || sf.getDenom() != 1)
|
||||||
|
sizeStr = new String(sf.getNum() + "_" + sf.getDenom());
|
||||||
|
else if (tilew != w || tileh != h)
|
||||||
|
sizeStr = new String(tilew + "x" + tileh);
|
||||||
|
else
|
||||||
|
sizeStr = new String("full");
|
||||||
|
if (decompOnly)
|
||||||
|
tempStr = new String(fileName + "_" + sizeStr + ".bmp");
|
||||||
|
else
|
||||||
|
tempStr = new String(fileName + "_" + subName[subsamp] + qualStr +
|
||||||
|
"_" + sizeStr + ".bmp");
|
||||||
|
saveImage(tempStr, dstBuf, scaledw, scaledh, pf);
|
||||||
|
int ndx = tempStr.indexOf('.');
|
||||||
|
tempStr = new String(tempStr.substring(0, ndx) + "-err.bmp");
|
||||||
|
if (srcBuf != null && sf.getNum() == 1 && sf.getDenom() == 1) {
|
||||||
|
if (quiet == 0)
|
||||||
|
System.out.println("Compression error written to " + tempStr + ".");
|
||||||
|
if (subsamp == TJ.SAMP_GRAY) {
|
||||||
|
for (int y = 0, index = 0; y < h; y++, index += pitch) {
|
||||||
|
for (int x = 0, index2 = index; x < w; x++, index2 += ps) {
|
||||||
|
int rindex = index2 + TJ.getRedOffset(pf);
|
||||||
|
int gindex = index2 + TJ.getGreenOffset(pf);
|
||||||
|
int bindex = index2 + TJ.getBlueOffset(pf);
|
||||||
|
int lum = (int)((double)(srcBuf[rindex] & 0xff) * 0.299 +
|
||||||
|
(double)(srcBuf[gindex] & 0xff) * 0.587 +
|
||||||
|
(double)(srcBuf[bindex] & 0xff) * 0.114 + 0.5);
|
||||||
|
if (lum > 255) lum = 255;
|
||||||
|
if (lum < 0) lum = 0;
|
||||||
|
dstBuf[rindex] = (byte)Math.abs((dstBuf[rindex] & 0xff) - lum);
|
||||||
|
dstBuf[gindex] = (byte)Math.abs((dstBuf[gindex] & 0xff) - lum);
|
||||||
|
dstBuf[bindex] = (byte)Math.abs((dstBuf[bindex] & 0xff) - lum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int y = 0; y < h; y++)
|
||||||
|
for (int x = 0; x < w * ps; x++)
|
||||||
|
dstBuf[pitch * y + x] =
|
||||||
|
(byte)Math.abs((dstBuf[pitch * y + x] & 0xff) -
|
||||||
|
(srcBuf[pitch * y + x] & 0xff));
|
||||||
|
}
|
||||||
|
saveImage(tempStr, dstBuf, w, h, pf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void doTestYUV(byte[] srcBuf, int w, int h, int subsamp,
|
||||||
|
String fileName) throws Exception {
|
||||||
|
TJCompressor tjc;
|
||||||
|
byte[] dstBuf;
|
||||||
|
double start, elapsed;
|
||||||
|
int ps = TJ.getPixelSize(pf), i;
|
||||||
|
int yuvSize = 0;
|
||||||
|
|
||||||
|
yuvSize = TJ.bufSizeYUV(w, h, subsamp);
|
||||||
|
dstBuf = new byte[yuvSize];
|
||||||
|
|
||||||
|
if (quiet == 0)
|
||||||
|
System.out.format(">>>>> %s (%s) <--> YUV %s <<<<<\n",
|
||||||
|
pixFormatStr[pf],
|
||||||
|
(flags & TJ.FLAG_BOTTOMUP) != 0 ? "Bottom-up" : "Top-down",
|
||||||
|
subNameLong[subsamp]);
|
||||||
|
|
||||||
|
if (quiet == 1)
|
||||||
|
System.out.format("%s\t%s\t%s\tN/A\t", pixFormatStr[pf],
|
||||||
|
(flags & TJ.FLAG_BOTTOMUP) != 0 ? "BU" : "TD",
|
||||||
|
subNameLong[subsamp]);
|
||||||
|
|
||||||
|
tjc = new TJCompressor(srcBuf, w, 0, h, pf);
|
||||||
|
tjc.setSubsamp(subsamp);
|
||||||
|
|
||||||
|
/* Execute once to preload cache */
|
||||||
|
tjc.encodeYUV(dstBuf, flags);
|
||||||
|
|
||||||
|
/* Benchmark */
|
||||||
|
for (i = 0, start = getTime();
|
||||||
|
(elapsed = getTime() - start) < benchTime; i++)
|
||||||
|
tjc.encodeYUV(dstBuf, flags);
|
||||||
|
|
||||||
|
if (quiet == 1)
|
||||||
|
System.out.format("%-4d %-4d\t", w, h);
|
||||||
|
if (quiet != 0) {
|
||||||
|
System.out.format("%s%c%s%c",
|
||||||
|
sigFig((double)(w * h) / 1000000. * (double) i / elapsed, 4),
|
||||||
|
quiet == 2 ? '\n' : '\t',
|
||||||
|
sigFig((double)(w * h * ps) / (double)yuvSize, 4),
|
||||||
|
quiet == 2 ? '\n' : '\t');
|
||||||
|
} else {
|
||||||
|
System.out.format("\n%s size: %d x %d\n", "Image", w, h);
|
||||||
|
System.out.format("C--> Frame rate: %f fps\n",
|
||||||
|
(double)i / elapsed);
|
||||||
|
System.out.format(" Output image size: %d bytes\n", yuvSize);
|
||||||
|
System.out.format(" Compression ratio: %f:1\n",
|
||||||
|
(double)(w * h * ps) / (double)yuvSize);
|
||||||
|
System.out.format(" Source throughput: %f Megapixels/sec\n",
|
||||||
|
(double)(w * h) / 1000000. * (double)i / elapsed);
|
||||||
|
System.out.format(" Output bit stream: %f Megabits/sec\n",
|
||||||
|
(double)yuvSize * 8. / 1000000. * (double)i / elapsed);
|
||||||
|
}
|
||||||
|
String tempStr = fileName + "_" + subName[subsamp] + ".yuv";
|
||||||
|
FileOutputStream fos = new FileOutputStream(tempStr);
|
||||||
|
fos.write(dstBuf, 0, yuvSize);
|
||||||
|
fos.close();
|
||||||
|
if (quiet == 0)
|
||||||
|
System.out.println("Reference image written to " + tempStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void doTest(byte[] srcBuf, int w, int h, int subsamp, int jpegQual,
|
||||||
|
String fileName) throws Exception {
|
||||||
|
TJCompressor tjc;
|
||||||
|
byte[] tmpBuf;
|
||||||
|
byte[][] jpegBuf;
|
||||||
|
int[] jpegSize;
|
||||||
|
double start, elapsed;
|
||||||
|
int totalJpegSize = 0, tilew, tileh, i;
|
||||||
|
int ps = TJ.getPixelSize(pf), ntilesw = 1, ntilesh = 1, pitch = w * ps;
|
||||||
|
|
||||||
|
if (yuv == YUVENCODE) {
|
||||||
|
doTestYUV(srcBuf, w, h, subsamp, fileName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpBuf = new byte[pitch * h];
|
||||||
|
|
||||||
|
if (quiet == 0)
|
||||||
|
System.out.format(">>>>> %s (%s) <--> JPEG %s Q%d <<<<<\n",
|
||||||
|
pixFormatStr[pf],
|
||||||
|
(flags & TJ.FLAG_BOTTOMUP) != 0 ? "Bottom-up" : "Top-down",
|
||||||
|
subNameLong[subsamp], jpegQual);
|
||||||
|
|
||||||
|
tjc = new TJCompressor();
|
||||||
|
|
||||||
|
for (tilew = doTile ? 8 : w, tileh = doTile ? 8 : h; ;
|
||||||
|
tilew *= 2, tileh *= 2) {
|
||||||
|
if (tilew > w)
|
||||||
|
tilew = w;
|
||||||
|
if (tileh > h)
|
||||||
|
tileh = h;
|
||||||
|
ntilesw = (w + tilew - 1) / tilew;
|
||||||
|
ntilesh = (h + tileh - 1) / tileh;
|
||||||
|
|
||||||
|
jpegBuf = new byte[ntilesw * ntilesh][TJ.bufSize(tilew, tileh, subsamp)];
|
||||||
|
jpegSize = new int[ntilesw * ntilesh];
|
||||||
|
|
||||||
|
/* Compression test */
|
||||||
|
if (quiet == 1)
|
||||||
|
System.out.format("%s\t%s\t%s\t%d\t", pixFormatStr[pf],
|
||||||
|
(flags & TJ.FLAG_BOTTOMUP) != 0 ? "BU" : "TD",
|
||||||
|
subNameLong[subsamp], jpegQual);
|
||||||
|
for (i = 0; i < h; i++)
|
||||||
|
System.arraycopy(srcBuf, w * ps * i, tmpBuf, pitch * i, w * ps);
|
||||||
|
tjc.setSourceImage(srcBuf, tilew, pitch, tileh, pf);
|
||||||
|
tjc.setJPEGQuality(jpegQual);
|
||||||
|
tjc.setSubsamp(subsamp);
|
||||||
|
|
||||||
|
/* Execute once to preload cache */
|
||||||
|
tjc.compress(jpegBuf[0], flags);
|
||||||
|
|
||||||
|
/* Benchmark */
|
||||||
|
for (i = 0, start = getTime();
|
||||||
|
(elapsed = getTime() - start) < benchTime; i++) {
|
||||||
|
int tile = 0;
|
||||||
|
totalJpegSize = 0;
|
||||||
|
for (int y = 0; y < h; y += tileh) {
|
||||||
|
for (int x = 0; x < w; x += tilew, tile++) {
|
||||||
|
int width = Math.min(tilew, w - x);
|
||||||
|
int height = Math.min(tileh, h - y);
|
||||||
|
tjc.setSourceImage(srcBuf, x, y, width, pitch, height, pf);
|
||||||
|
tjc.compress(jpegBuf[tile], flags);
|
||||||
|
jpegSize[tile] = tjc.getCompressedSize();
|
||||||
|
totalJpegSize += jpegSize[tile];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quiet == 1)
|
||||||
|
System.out.format("%-4d %-4d\t", tilew, tileh);
|
||||||
|
if (quiet != 0) {
|
||||||
|
System.out.format("%s%c%s%c",
|
||||||
|
sigFig((double)(w * h) / 1000000. * (double) i / elapsed, 4),
|
||||||
|
quiet == 2 ? '\n' : '\t',
|
||||||
|
sigFig((double)(w * h * ps) / (double)totalJpegSize, 4),
|
||||||
|
quiet == 2 ? '\n' : '\t');
|
||||||
|
} else {
|
||||||
|
System.out.format("\n%s size: %d x %d\n", doTile ? "Tile" : "Image",
|
||||||
|
tilew, tileh);
|
||||||
|
System.out.format("C--> Frame rate: %f fps\n",
|
||||||
|
(double)i / elapsed);
|
||||||
|
System.out.format(" Output image size: %d bytes\n",
|
||||||
|
totalJpegSize);
|
||||||
|
System.out.format(" Compression ratio: %f:1\n",
|
||||||
|
(double)(w * h * ps) / (double)totalJpegSize);
|
||||||
|
System.out.format(" Source throughput: %f Megapixels/sec\n",
|
||||||
|
(double)(w * h) / 1000000. * (double)i / elapsed);
|
||||||
|
System.out.format(" Output bit stream: %f Megabits/sec\n",
|
||||||
|
(double)totalJpegSize * 8. / 1000000. * (double)i / elapsed);
|
||||||
|
}
|
||||||
|
if (tilew == w && tileh == h) {
|
||||||
|
String tempStr = fileName + "_" + subName[subsamp] + "_" + "Q" +
|
||||||
|
jpegQual + ".jpg";
|
||||||
|
FileOutputStream fos = new FileOutputStream(tempStr);
|
||||||
|
fos.write(jpegBuf[0], 0, jpegSize[0]);
|
||||||
|
fos.close();
|
||||||
|
if (quiet == 0)
|
||||||
|
System.out.println("Reference image written to " + tempStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Decompression test */
|
||||||
|
decompTest(srcBuf, jpegBuf, jpegSize, tmpBuf, w, h, subsamp, jpegQual,
|
||||||
|
fileName, tilew, tileh);
|
||||||
|
|
||||||
|
for (i = 0; i < ntilesw * ntilesh; i++)
|
||||||
|
jpegBuf[i] = null;
|
||||||
|
jpegBuf = null; jpegSize = null;
|
||||||
|
System.gc();
|
||||||
|
|
||||||
|
if (tilew == w && tileh == h) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void doDecompTest(String fileName) throws Exception {
|
||||||
|
TJTransformer tjt;
|
||||||
|
byte[][] jpegBuf;
|
||||||
|
byte[] srcBuf;
|
||||||
|
int[] jpegSize;
|
||||||
|
int totalJpegSize;
|
||||||
|
int w = 0, h = 0, subsamp = -1, _w, _h, _tilew, _tileh,
|
||||||
|
_ntilesw, _ntilesh, _subsamp, x, y;
|
||||||
|
int ntilesw = 1, ntilesh = 1;
|
||||||
|
double start, elapsed;
|
||||||
|
int ps = TJ.getPixelSize(pf), tile;
|
||||||
|
|
||||||
|
FileInputStream fis = new FileInputStream(fileName);
|
||||||
|
int srcSize = (int)fis.getChannel().size();
|
||||||
|
srcBuf = new byte[srcSize];
|
||||||
|
fis.read(srcBuf, 0, srcSize);
|
||||||
|
fis.close();
|
||||||
|
|
||||||
|
int index = fileName.indexOf('.');
|
||||||
|
if (index >= 0)
|
||||||
|
fileName = new String(fileName.substring(0, index));
|
||||||
|
|
||||||
|
tjt = new TJTransformer();
|
||||||
|
|
||||||
|
tjt.setJPEGImage(srcBuf, srcSize);
|
||||||
|
w = tjt.getWidth();
|
||||||
|
h = tjt.getHeight();
|
||||||
|
subsamp = tjt.getSubsamp();
|
||||||
|
|
||||||
|
if (quiet == 1) {
|
||||||
|
System.out.println("All performance values in Mpixels/sec\n");
|
||||||
|
System.out.format("Bitmap\tBitmap\tJPEG\t%s %s \tXform\tComp\tDecomp\n",
|
||||||
|
(doTile ? "Tile " : "Image"),
|
||||||
|
(doTile ? "Tile " : "Image"));
|
||||||
|
System.out.println("Format\tOrder\tSubsamp\tWidth Height\tPerf \tRatio\tPerf\n");
|
||||||
|
} else if (quiet == 0) {
|
||||||
|
System.out.format(">>>>> JPEG %s --> %s (%s) <<<<<",
|
||||||
|
subNameLong[subsamp], pixFormatStr[pf],
|
||||||
|
(flags & TJ.FLAG_BOTTOMUP) != 0 ? "Bottom-up" : "Top-down");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int tilew = doTile ? 16 : w, tileh = doTile ? 16 : h; ;
|
||||||
|
tilew *= 2, tileh *= 2) {
|
||||||
|
if (tilew > w)
|
||||||
|
tilew = w;
|
||||||
|
if (tileh > h)
|
||||||
|
tileh = h;
|
||||||
|
ntilesw = (w + tilew - 1) / tilew;
|
||||||
|
ntilesh = (h + tileh - 1) / tileh;
|
||||||
|
|
||||||
|
_w = w; _h = h; _tilew = tilew; _tileh = tileh;
|
||||||
|
if (quiet == 0) {
|
||||||
|
System.out.format("\n%s size: %d x %d", (doTile ? "Tile" : "Image"),
|
||||||
|
_tilew, _tileh);
|
||||||
|
if (sf.getNum() != 1 || sf.getDenom() != 1)
|
||||||
|
System.out.format(" --> %d x %d", sf.getScaled(_w),
|
||||||
|
sf.getScaled(_h));
|
||||||
|
System.out.println("");
|
||||||
|
} else if (quiet == 1) {
|
||||||
|
System.out.format("%s\t%s\t%s\t", pixFormatStr[pf],
|
||||||
|
(flags & TJ.FLAG_BOTTOMUP) != 0 ? "BU" : "TD",
|
||||||
|
subNameLong[subsamp]);
|
||||||
|
System.out.format("%-4d %-4d\t", tilew, tileh);
|
||||||
|
}
|
||||||
|
|
||||||
|
_subsamp = subsamp;
|
||||||
|
if (doTile || xformOp != TJTransform.OP_NONE || xformOpt != 0) {
|
||||||
|
if (xformOp == TJTransform.OP_TRANSPOSE ||
|
||||||
|
xformOp == TJTransform.OP_TRANSVERSE ||
|
||||||
|
xformOp == TJTransform.OP_ROT90 ||
|
||||||
|
xformOp == TJTransform.OP_ROT270) {
|
||||||
|
_w = h; _h = w; _tilew = tileh; _tileh = tilew;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((xformOpt & TJTransform.OPT_GRAY) != 0)
|
||||||
|
_subsamp = TJ.SAMP_GRAY;
|
||||||
|
if (xformOp == TJTransform.OP_HFLIP ||
|
||||||
|
xformOp == TJTransform.OP_ROT180)
|
||||||
|
_w = _w - (_w % TJ.getMCUWidth(_subsamp));
|
||||||
|
if (xformOp == TJTransform.OP_VFLIP ||
|
||||||
|
xformOp == TJTransform.OP_ROT180)
|
||||||
|
_h = _h - (_h % TJ.getMCUHeight(_subsamp));
|
||||||
|
if (xformOp == TJTransform.OP_TRANSVERSE ||
|
||||||
|
xformOp == TJTransform.OP_ROT90)
|
||||||
|
_w = _w - (_w % TJ.getMCUHeight(_subsamp));
|
||||||
|
if (xformOp == TJTransform.OP_TRANSVERSE ||
|
||||||
|
xformOp == TJTransform.OP_ROT270)
|
||||||
|
_h = _h - (_h % TJ.getMCUWidth(_subsamp));
|
||||||
|
_ntilesw = (_w + _tilew - 1) / _tilew;
|
||||||
|
_ntilesh = (_h + _tileh - 1) / _tileh;
|
||||||
|
|
||||||
|
TJTransform[] t = new TJTransform[_ntilesw * _ntilesh];
|
||||||
|
jpegBuf = new byte[_ntilesw * _ntilesh][TJ.bufSize(_tilew, _tileh, subsamp)];
|
||||||
|
|
||||||
|
for (y = 0, tile = 0; y < _h; y += _tileh) {
|
||||||
|
for (x = 0; x < _w; x += _tilew, tile++) {
|
||||||
|
t[tile] = new TJTransform();
|
||||||
|
t[tile].width = Math.min(_tilew, _w - x);
|
||||||
|
t[tile].height = Math.min(_tileh, _h - y);
|
||||||
|
t[tile].x = x;
|
||||||
|
t[tile].y = y;
|
||||||
|
t[tile].op = xformOp;
|
||||||
|
t[tile].options = xformOpt | TJTransform.OPT_TRIM;
|
||||||
|
if ((t[tile].options & TJTransform.OPT_NOOUTPUT) != 0 &&
|
||||||
|
jpegBuf[tile] != null)
|
||||||
|
jpegBuf[tile] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
start = getTime();
|
||||||
|
tjt.transform(jpegBuf, t, flags);
|
||||||
|
jpegSize = tjt.getTransformedSizes();
|
||||||
|
elapsed = getTime() - start;
|
||||||
|
|
||||||
|
t = null;
|
||||||
|
|
||||||
|
for (tile = 0, totalJpegSize = 0; tile < _ntilesw * _ntilesh; tile++)
|
||||||
|
totalJpegSize += jpegSize[tile];
|
||||||
|
|
||||||
|
if (quiet != 0) {
|
||||||
|
System.out.format("%s%c%s%c",
|
||||||
|
sigFig((double)(w * h) / 1000000. / elapsed, 4),
|
||||||
|
quiet == 2 ? '\n' : '\t',
|
||||||
|
sigFig((double)(w * h * ps) / (double)totalJpegSize, 4),
|
||||||
|
quiet == 2 ? '\n' : '\t');
|
||||||
|
} else if (quiet == 0) {
|
||||||
|
System.out.format("X--> Frame rate: %f fps\n",
|
||||||
|
1.0 / elapsed);
|
||||||
|
System.out.format(" Output image size: %lu bytes\n",
|
||||||
|
totalJpegSize);
|
||||||
|
System.out.format(" Compression ratio: %f:1\n",
|
||||||
|
(double)(w * h * ps) / (double)totalJpegSize);
|
||||||
|
System.out.format(" Source throughput: %f Megapixels/sec\n",
|
||||||
|
(double)(w * h) / 1000000. / elapsed);
|
||||||
|
System.out.format(" Output bit stream: %f Megabits/sec\n",
|
||||||
|
(double)totalJpegSize * 8. / 1000000. / elapsed);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (quiet == 1)
|
||||||
|
System.out.print("N/A\tN/A\t");
|
||||||
|
jpegBuf = new byte[1][TJ.bufSize(_tilew, _tileh, subsamp)];
|
||||||
|
jpegSize = new int[1];
|
||||||
|
jpegSize[0] = srcSize;
|
||||||
|
System.arraycopy(srcBuf, 0, jpegBuf[0], 0, srcSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (w == tilew)
|
||||||
|
_tilew = _w;
|
||||||
|
if (h == tileh)
|
||||||
|
_tileh = _h;
|
||||||
|
if ((xformOpt & TJTransform.OPT_NOOUTPUT) == 0)
|
||||||
|
decompTest(null, jpegBuf, jpegSize, null, _w, _h, _subsamp, 0,
|
||||||
|
fileName, _tilew, _tileh);
|
||||||
|
else if (quiet == 1)
|
||||||
|
System.out.println("N/A");
|
||||||
|
|
||||||
|
jpegBuf = null;
|
||||||
|
jpegSize = null;
|
||||||
|
|
||||||
|
if (tilew == w && tileh == h) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void usage() throws Exception {
|
||||||
|
int i;
|
||||||
|
TJScalingFactor[] scalingFactors = TJ.getScalingFactors();
|
||||||
|
int nsf = scalingFactors.length;
|
||||||
|
String className = new TJBench().getClass().getName();
|
||||||
|
|
||||||
|
System.out.println("\nUSAGE: java " + className);
|
||||||
|
System.out.println(" <Inputfile (BMP)> <Quality> [options]\n");
|
||||||
|
System.out.println(" java " + className);
|
||||||
|
System.out.println(" <Inputfile (JPG)> [options]\n");
|
||||||
|
System.out.println("Options:\n");
|
||||||
|
System.out.println("-alloc = Dynamically allocate JPEG image buffers");
|
||||||
|
System.out.println("-bottomup = Test bottom-up compression/decompression");
|
||||||
|
System.out.println("-tile = Test performance of the codec when the image is encoded as separate");
|
||||||
|
System.out.println(" tiles of varying sizes.");
|
||||||
|
System.out.println("-forcemmx, -forcesse, -forcesse2, -forcesse3 =");
|
||||||
|
System.out.println(" Force MMX, SSE, SSE2, or SSE3 code paths in the underlying codec");
|
||||||
|
System.out.println("-rgb, -bgr, -rgbx, -bgrx, -xbgr, -xrgb =");
|
||||||
|
System.out.println(" Test the specified color conversion path in the codec (default: BGR)");
|
||||||
|
System.out.println("-fastupsample = Use the fastest chrominance upsampling algorithm available in");
|
||||||
|
System.out.println(" the underlying codec");
|
||||||
|
System.out.println("-fastdct = Use the fastest DCT/IDCT algorithms available in the underlying");
|
||||||
|
System.out.println(" codec");
|
||||||
|
System.out.println("-accuratedct = Use the most accurate DCT/IDCT algorithms available in the");
|
||||||
|
System.out.println(" underlying codec");
|
||||||
|
System.out.println("-quiet = Output results in tabular rather than verbose format");
|
||||||
|
System.out.println("-yuvencode = Encode RGB input as planar YUV rather than compressing as JPEG");
|
||||||
|
System.out.println("-yuvdecode = Decode JPEG image to planar YUV rather than RGB");
|
||||||
|
System.out.println("-scale M/N = scale down the width/height of the decompressed JPEG image by a");
|
||||||
|
System.out.print (" factor of M/N (M/N = ");
|
||||||
|
for (i = 0; i < nsf; i++) {
|
||||||
|
System.out.format("%d/%d", scalingFactors[i].getNum(),
|
||||||
|
scalingFactors[i].getDenom());
|
||||||
|
if (nsf == 2 && i != nsf - 1)
|
||||||
|
System.out.print(" or ");
|
||||||
|
else if (nsf > 2) {
|
||||||
|
if (i != nsf - 1)
|
||||||
|
System.out.print(", ");
|
||||||
|
if (i == nsf - 2)
|
||||||
|
System.out.print("or ");
|
||||||
|
}
|
||||||
|
if (i % 8 == 0 && i != 0)
|
||||||
|
System.out.print("\n ");
|
||||||
|
}
|
||||||
|
System.out.println(")");
|
||||||
|
System.out.println("-hflip, -vflip, -transpose, -transverse, -rot90, -rot180, -rot270 =");
|
||||||
|
System.out.println(" Perform the corresponding lossless transform prior to");
|
||||||
|
System.out.println(" decompression (these options are mutually exclusive)");
|
||||||
|
System.out.println("-grayscale = Perform lossless grayscale conversion prior to decompression");
|
||||||
|
System.out.println(" test (can be combined with the other transforms above)");
|
||||||
|
System.out.println("-benchTime <t> = Run each benchmark for at least <t> seconds (default = 5.0)\n");
|
||||||
|
System.out.println("NOTE: If the quality is specified as a range (e.g. 90-100), a separate");
|
||||||
|
System.out.println("test will be performed for all quality values in the range.\n");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] argv) {
|
||||||
|
byte[] srcBuf = null; int w = 0, h = 0;
|
||||||
|
int minQual = -1, maxQual = -1;
|
||||||
|
int minArg = 1; int retval = 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
if (argv.length < minArg)
|
||||||
|
usage();
|
||||||
|
|
||||||
|
String tempStr = argv[0].toLowerCase();
|
||||||
|
if (tempStr.endsWith(".jpg") || tempStr.endsWith(".jpeg"))
|
||||||
|
decompOnly = true;
|
||||||
|
|
||||||
|
System.out.println("");
|
||||||
|
|
||||||
|
if (argv.length > minArg) {
|
||||||
|
for (int i = minArg; i < argv.length; i++) {
|
||||||
|
if (argv[i].equalsIgnoreCase("-yuvencode")) {
|
||||||
|
System.out.println("Testing YUV planar encoding\n");
|
||||||
|
yuv = YUVENCODE; maxQual = minQual = 100;
|
||||||
|
}
|
||||||
|
if (argv[i].equalsIgnoreCase("-yuvdecode")) {
|
||||||
|
System.out.println("Testing YUV planar decoding\n");
|
||||||
|
yuv = YUVDECODE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!decompOnly && yuv != YUVENCODE) {
|
||||||
|
minArg = 2;
|
||||||
|
if (argv.length < minArg)
|
||||||
|
usage();
|
||||||
|
try {
|
||||||
|
minQual = Integer.parseInt(argv[1]);
|
||||||
|
} catch (NumberFormatException e) {}
|
||||||
|
if (minQual < 1 || minQual > 100)
|
||||||
|
throw new Exception("Quality must be between 1 and 100.");
|
||||||
|
int dashIndex = argv[1].indexOf('-');
|
||||||
|
if (dashIndex > 0 && argv[1].length() > dashIndex + 1) {
|
||||||
|
try {
|
||||||
|
maxQual = Integer.parseInt(argv[1].substring(dashIndex + 1));
|
||||||
|
} catch (NumberFormatException e) {}
|
||||||
|
}
|
||||||
|
if (maxQual < 1 || maxQual > 100)
|
||||||
|
maxQual = minQual;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv.length > minArg) {
|
||||||
|
for (int i = minArg; i < argv.length; i++) {
|
||||||
|
if (argv[i].equalsIgnoreCase("-tile")) {
|
||||||
|
doTile = true; xformOpt |= TJTransform.OPT_CROP;
|
||||||
|
}
|
||||||
|
if (argv[i].equalsIgnoreCase("-forcesse3")) {
|
||||||
|
System.out.println("Forcing SSE3 code\n");
|
||||||
|
flags |= TJ.FLAG_FORCESSE3;
|
||||||
|
}
|
||||||
|
if (argv[i].equalsIgnoreCase("-forcesse2")) {
|
||||||
|
System.out.println("Forcing SSE2 code\n");
|
||||||
|
flags |= TJ.FLAG_FORCESSE2;
|
||||||
|
}
|
||||||
|
if (argv[i].equalsIgnoreCase("-forcesse")) {
|
||||||
|
System.out.println("Forcing SSE code\n");
|
||||||
|
flags |= TJ.FLAG_FORCESSE;
|
||||||
|
}
|
||||||
|
if (argv[i].equalsIgnoreCase("-forcemmx")) {
|
||||||
|
System.out.println("Forcing MMX code\n");
|
||||||
|
flags |= TJ.FLAG_FORCEMMX;
|
||||||
|
}
|
||||||
|
if (argv[i].equalsIgnoreCase("-fastupsample")) {
|
||||||
|
System.out.println("Using fast upsampling code\n");
|
||||||
|
flags |= TJ.FLAG_FASTUPSAMPLE;
|
||||||
|
}
|
||||||
|
if (argv[i].equalsIgnoreCase("-fastdct")) {
|
||||||
|
System.out.println("Using fastest DCT/IDCT algorithm\n");
|
||||||
|
flags |= TJ.FLAG_FASTDCT;
|
||||||
|
}
|
||||||
|
if (argv[i].equalsIgnoreCase("-accuratedct")) {
|
||||||
|
System.out.println("Using most accurate DCT/IDCT algorithm\n");
|
||||||
|
flags |= TJ.FLAG_ACCURATEDCT;
|
||||||
|
}
|
||||||
|
if (argv[i].equalsIgnoreCase("-rgb"))
|
||||||
|
pf = TJ.PF_RGB;
|
||||||
|
if (argv[i].equalsIgnoreCase("-rgbx"))
|
||||||
|
pf = TJ.PF_RGBX;
|
||||||
|
if (argv[i].equalsIgnoreCase("-bgr"))
|
||||||
|
pf = TJ.PF_BGR;
|
||||||
|
if (argv[i].equalsIgnoreCase("-bgrx"))
|
||||||
|
pf = TJ.PF_BGRX;
|
||||||
|
if (argv[i].equalsIgnoreCase("-xbgr"))
|
||||||
|
pf = TJ.PF_XBGR;
|
||||||
|
if (argv[i].equalsIgnoreCase("-xrgb"))
|
||||||
|
pf = TJ.PF_XRGB;
|
||||||
|
if (argv[i].equalsIgnoreCase("-bottomup"))
|
||||||
|
flags |= TJ.FLAG_BOTTOMUP;
|
||||||
|
if (argv[i].equalsIgnoreCase("-quiet"))
|
||||||
|
quiet = 1;
|
||||||
|
if (argv[i].equalsIgnoreCase("-qq"))
|
||||||
|
quiet = 2;
|
||||||
|
if (argv[i].equalsIgnoreCase("-scale") && i < argv.length - 1) {
|
||||||
|
int temp1 = 0, temp2 = 0;
|
||||||
|
boolean match = false, scanned = true;
|
||||||
|
Scanner scanner = new Scanner(argv[++i]).useDelimiter("/");
|
||||||
|
try {
|
||||||
|
temp1 = scanner.nextInt();
|
||||||
|
temp2 = scanner.nextInt();
|
||||||
|
} catch(Exception e) {}
|
||||||
|
if (temp2 <= 0) temp2 = 1;
|
||||||
|
if (temp1 > 0) {
|
||||||
|
TJScalingFactor[] scalingFactors = TJ.getScalingFactors();
|
||||||
|
for (int j = 0; j < scalingFactors.length; j++) {
|
||||||
|
if ((double)temp1 / (double)temp2 ==
|
||||||
|
(double)scalingFactors[j].getNum() /
|
||||||
|
(double)scalingFactors[j].getDenom()) {
|
||||||
|
sf = scalingFactors[j];
|
||||||
|
match = true; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!match) usage();
|
||||||
|
} else
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
if (argv[i].equalsIgnoreCase("-hflip"))
|
||||||
|
xformOp = TJTransform.OP_HFLIP;
|
||||||
|
if (argv[i].equalsIgnoreCase("-vflip"))
|
||||||
|
xformOp = TJTransform.OP_VFLIP;
|
||||||
|
if (argv[i].equalsIgnoreCase("-transpose"))
|
||||||
|
xformOp = TJTransform.OP_TRANSPOSE;
|
||||||
|
if (argv[i].equalsIgnoreCase("-transverse"))
|
||||||
|
xformOp = TJTransform.OP_TRANSVERSE;
|
||||||
|
if (argv[i].equalsIgnoreCase("-rot90"))
|
||||||
|
xformOp = TJTransform.OP_ROT90;
|
||||||
|
if (argv[i].equalsIgnoreCase("-rot180"))
|
||||||
|
xformOp = TJTransform.OP_ROT180;
|
||||||
|
if (argv[i].equalsIgnoreCase("-rot270"))
|
||||||
|
xformOp = TJTransform.OP_ROT270;
|
||||||
|
if (argv[i].equalsIgnoreCase("-grayscale"))
|
||||||
|
xformOpt |= TJTransform.OPT_GRAY;
|
||||||
|
if (argv[i].equalsIgnoreCase("-nooutput"))
|
||||||
|
xformOpt |= TJTransform.OPT_NOOUTPUT;
|
||||||
|
if (argv[i].equalsIgnoreCase("-benchtime") && i < argv.length - 1) {
|
||||||
|
double temp = -1;
|
||||||
|
try {
|
||||||
|
temp = Double.parseDouble(argv[++i]);
|
||||||
|
} catch (NumberFormatException e) {}
|
||||||
|
if (temp > 0.0)
|
||||||
|
benchTime = temp;
|
||||||
|
else
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
if (argv[i].equalsIgnoreCase("-?"))
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sf == null)
|
||||||
|
sf = new TJScalingFactor(1, 1);
|
||||||
|
|
||||||
|
if ((sf.getNum() != 1 || sf.getDenom() != 1) && doTile) {
|
||||||
|
System.out.println("Disabling tiled compression/decompression tests, because those tests do not");
|
||||||
|
System.out.println("work when scaled decompression is enabled.");
|
||||||
|
doTile = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (yuv != 0 && doTile) {
|
||||||
|
System.out.println("Disabling tiled compression/decompression tests, because those tests do not");
|
||||||
|
System.out.println("work when YUV encoding or decoding is enabled.\n");
|
||||||
|
doTile = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!decompOnly) {
|
||||||
|
int[] width = new int[1], height = new int[1];
|
||||||
|
srcBuf = loadImage(argv[0], width, height, pf);
|
||||||
|
w = width[0]; h = height[0];
|
||||||
|
int index = -1;
|
||||||
|
if ((index = argv[0].indexOf('.')) >= 0)
|
||||||
|
argv[0] = argv[0].substring(0, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quiet == 1 && !decompOnly) {
|
||||||
|
System.out.println("All performance values in Mpixels/sec\n");
|
||||||
|
System.out.format("Bitmap\tBitmap\tJPEG\tJPEG\t%s %s \tComp\tComp\tDecomp\n",
|
||||||
|
(doTile ? "Tile " : "Image"), (doTile ? "Tile " : "Image"));
|
||||||
|
System.out.println("Format\tOrder\tSubsamp\tQual\tWidth Height\tPerf \tRatio\tPerf\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (decompOnly) {
|
||||||
|
doDecompTest(argv[0]);
|
||||||
|
System.out.println("");
|
||||||
|
System.exit(retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.gc();
|
||||||
|
for (int i = maxQual; i >= minQual; i--)
|
||||||
|
doTest(srcBuf, w, h, TJ.SAMP_GRAY, i, argv[0]);
|
||||||
|
System.out.println("");
|
||||||
|
System.gc();
|
||||||
|
for (int i = maxQual; i >= minQual; i--)
|
||||||
|
doTest(srcBuf, w, h, TJ.SAMP_420, i, argv[0]);
|
||||||
|
System.out.println("");
|
||||||
|
System.gc();
|
||||||
|
for (int i = maxQual; i >= minQual; i--)
|
||||||
|
doTest(srcBuf, w, h, TJ.SAMP_422, i, argv[0]);
|
||||||
|
System.out.println("");
|
||||||
|
System.gc();
|
||||||
|
for (int i = maxQual; i >= minQual; i--)
|
||||||
|
doTest(srcBuf, w, h, TJ.SAMP_444, i, argv[0]);
|
||||||
|
System.out.println("");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("ERROR: " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
retval = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
System.exit(retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -51,12 +51,15 @@ public class TJExample implements TJCustomFilter {
|
|||||||
System.out.println("Options:\n");
|
System.out.println("Options:\n");
|
||||||
System.out.println("-scale M/N = if the input image is a JPEG file, scale the width/height of the");
|
System.out.println("-scale M/N = if the input image is a JPEG file, scale the width/height of the");
|
||||||
System.out.print(" output image by a factor of M/N (M/N = ");
|
System.out.print(" output image by a factor of M/N (M/N = ");
|
||||||
for(int i = 0; i < sf.length; i++) {
|
for (int i = 0; i < sf.length; i++) {
|
||||||
System.out.print(sf[i].getNum() + "/" + sf[i].getDenom());
|
System.out.print(sf[i].getNum() + "/" + sf[i].getDenom());
|
||||||
if(sf.length == 2 && i != sf.length - 1) System.out.print(" or ");
|
if (sf.length == 2 && i != sf.length - 1)
|
||||||
else if(sf.length > 2) {
|
System.out.print(" or ");
|
||||||
if(i != sf.length - 1) System.out.print(", ");
|
else if (sf.length > 2) {
|
||||||
if(i == sf.length - 2) System.out.print("or ");
|
if (i != sf.length - 1)
|
||||||
|
System.out.print(", ");
|
||||||
|
if (i == sf.length - 2)
|
||||||
|
System.out.print("or ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
System.out.println(")\n");
|
System.out.println(")\n");
|
||||||
@@ -90,13 +93,14 @@ public class TJExample implements TJCustomFilter {
|
|||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final static String sampName[] = {
|
private static final String[] sampName = {
|
||||||
"4:4:4", "4:2:2", "4:2:0", "Grayscale", "4:4:0"
|
"4:4:4", "4:2:2", "4:2:0", "Grayscale", "4:4:0"
|
||||||
};
|
};
|
||||||
|
|
||||||
public static void main(String argv[]) {
|
public static void main(String[] argv) {
|
||||||
|
|
||||||
BufferedImage img = null; byte[] bmpBuf = null;
|
BufferedImage img = null;
|
||||||
|
byte[] bmpBuf = null;
|
||||||
TJTransform xform = new TJTransform();
|
TJTransform xform = new TJTransform();
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
|
|
||||||
@@ -104,7 +108,7 @@ public class TJExample implements TJCustomFilter {
|
|||||||
|
|
||||||
sf = TJ.getScalingFactors();
|
sf = TJ.getScalingFactors();
|
||||||
|
|
||||||
if(argv.length < 2) {
|
if (argv.length < 2) {
|
||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,119 +117,134 @@ public class TJExample implements TJCustomFilter {
|
|||||||
int outSubsamp = -1, outQual = 95;
|
int outSubsamp = -1, outQual = 95;
|
||||||
boolean display = false;
|
boolean display = false;
|
||||||
|
|
||||||
if(argv.length > 1) {
|
if (argv.length > 1) {
|
||||||
for(int i = 1; i < argv.length; i++) {
|
for (int i = 1; i < argv.length; i++) {
|
||||||
if(argv[i].length() < 2) continue;
|
if (argv[i].length() < 2)
|
||||||
if(argv[i].length() > 2
|
continue;
|
||||||
&& argv[i].substring(0, 3).equalsIgnoreCase("-sc")) {
|
if (argv[i].length() > 2 &&
|
||||||
|
argv[i].substring(0, 3).equalsIgnoreCase("-sc")) {
|
||||||
int match = 0;
|
int match = 0;
|
||||||
if(i < argv.length - 1) {
|
if (i < argv.length - 1) {
|
||||||
String[] scaleArg = argv[++i].split("/");
|
String[] scaleArg = argv[++i].split("/");
|
||||||
if(scaleArg.length == 2) {
|
if (scaleArg.length == 2) {
|
||||||
TJScalingFactor tempsf =
|
TJScalingFactor tempsf =
|
||||||
new TJScalingFactor(Integer.parseInt(scaleArg[0]),
|
new TJScalingFactor(Integer.parseInt(scaleArg[0]),
|
||||||
Integer.parseInt(scaleArg[1]));
|
Integer.parseInt(scaleArg[1]));
|
||||||
for(int j = 0; j < sf.length; j++) {
|
for (int j = 0; j < sf.length; j++) {
|
||||||
if(tempsf.equals(sf[j])) {
|
if (tempsf.equals(sf[j])) {
|
||||||
scaleFactor = sf[j];
|
scaleFactor = sf[j];
|
||||||
match = 1; break;
|
match = 1;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(match != 1) usage();
|
if (match != 1) usage();
|
||||||
}
|
}
|
||||||
if(argv[i].equalsIgnoreCase("-h") || argv[i].equalsIgnoreCase("-?"))
|
if (argv[i].equalsIgnoreCase("-h") || argv[i].equalsIgnoreCase("-?"))
|
||||||
usage();
|
usage();
|
||||||
if(argv[i].length() > 2
|
if (argv[i].length() > 2 &&
|
||||||
&& argv[i].substring(0, 3).equalsIgnoreCase("-sa")) {
|
argv[i].substring(0, 3).equalsIgnoreCase("-sa")) {
|
||||||
if(i < argv.length - 1) {
|
if (i < argv.length - 1) {
|
||||||
i++;
|
i++;
|
||||||
if(argv[i].substring(0, 1).equalsIgnoreCase("g"))
|
if (argv[i].substring(0, 1).equalsIgnoreCase("g"))
|
||||||
outSubsamp = TJ.SAMP_GRAY;
|
outSubsamp = TJ.SAMP_GRAY;
|
||||||
else if(argv[i].equals("444")) outSubsamp = TJ.SAMP_444;
|
else if (argv[i].equals("444"))
|
||||||
else if(argv[i].equals("422")) outSubsamp = TJ.SAMP_422;
|
outSubsamp = TJ.SAMP_444;
|
||||||
else if(argv[i].equals("420")) outSubsamp = TJ.SAMP_420;
|
else if (argv[i].equals("422"))
|
||||||
else usage();
|
outSubsamp = TJ.SAMP_422;
|
||||||
|
else if (argv[i].equals("420"))
|
||||||
|
outSubsamp = TJ.SAMP_420;
|
||||||
|
else
|
||||||
|
usage();
|
||||||
|
} else
|
||||||
|
usage();
|
||||||
}
|
}
|
||||||
else usage();
|
if (argv[i].substring(0, 2).equalsIgnoreCase("-q")) {
|
||||||
}
|
if (i < argv.length - 1) {
|
||||||
if(argv[i].substring(0, 2).equalsIgnoreCase("-q")) {
|
|
||||||
if(i < argv.length - 1) {
|
|
||||||
int qual = Integer.parseInt(argv[++i]);
|
int qual = Integer.parseInt(argv[++i]);
|
||||||
if(qual >= 1 && qual <= 100) outQual = qual;
|
if (qual >= 1 && qual <= 100)
|
||||||
else usage();
|
outQual = qual;
|
||||||
|
else
|
||||||
|
usage();
|
||||||
|
} else
|
||||||
|
usage();
|
||||||
}
|
}
|
||||||
else usage();
|
if (argv[i].substring(0, 2).equalsIgnoreCase("-g"))
|
||||||
}
|
|
||||||
if(argv[i].substring(0, 2).equalsIgnoreCase("-g"))
|
|
||||||
xform.options |= TJTransform.OPT_GRAY;
|
xform.options |= TJTransform.OPT_GRAY;
|
||||||
if(argv[i].equalsIgnoreCase("-hflip"))
|
if (argv[i].equalsIgnoreCase("-hflip"))
|
||||||
xform.op = TJTransform.OP_HFLIP;
|
xform.op = TJTransform.OP_HFLIP;
|
||||||
if(argv[i].equalsIgnoreCase("-vflip"))
|
if (argv[i].equalsIgnoreCase("-vflip"))
|
||||||
xform.op = TJTransform.OP_VFLIP;
|
xform.op = TJTransform.OP_VFLIP;
|
||||||
if(argv[i].equalsIgnoreCase("-transpose"))
|
if (argv[i].equalsIgnoreCase("-transpose"))
|
||||||
xform.op = TJTransform.OP_TRANSPOSE;
|
xform.op = TJTransform.OP_TRANSPOSE;
|
||||||
if(argv[i].equalsIgnoreCase("-transverse"))
|
if (argv[i].equalsIgnoreCase("-transverse"))
|
||||||
xform.op = TJTransform.OP_TRANSVERSE;
|
xform.op = TJTransform.OP_TRANSVERSE;
|
||||||
if(argv[i].equalsIgnoreCase("-rot90"))
|
if (argv[i].equalsIgnoreCase("-rot90"))
|
||||||
xform.op = TJTransform.OP_ROT90;
|
xform.op = TJTransform.OP_ROT90;
|
||||||
if(argv[i].equalsIgnoreCase("-rot180"))
|
if (argv[i].equalsIgnoreCase("-rot180"))
|
||||||
xform.op = TJTransform.OP_ROT180;
|
xform.op = TJTransform.OP_ROT180;
|
||||||
if(argv[i].equalsIgnoreCase("-rot270"))
|
if (argv[i].equalsIgnoreCase("-rot270"))
|
||||||
xform.op = TJTransform.OP_ROT270;
|
xform.op = TJTransform.OP_ROT270;
|
||||||
if(argv[i].equalsIgnoreCase("-custom"))
|
if (argv[i].equalsIgnoreCase("-custom"))
|
||||||
xform.cf = new TJExample();
|
xform.cf = new TJExample();
|
||||||
else if(argv[i].length() > 2
|
else if (argv[i].length() > 2 &&
|
||||||
&& argv[i].substring(0, 2).equalsIgnoreCase("-c")) {
|
argv[i].substring(0, 2).equalsIgnoreCase("-c")) {
|
||||||
if(i >= argv.length - 1) usage();
|
if (i >= argv.length - 1)
|
||||||
|
usage();
|
||||||
String[] cropArg = argv[++i].split(",");
|
String[] cropArg = argv[++i].split(",");
|
||||||
if(cropArg.length != 3) usage();
|
if (cropArg.length != 3)
|
||||||
|
usage();
|
||||||
String[] dimArg = cropArg[2].split("[xX]");
|
String[] dimArg = cropArg[2].split("[xX]");
|
||||||
if(dimArg.length != 2) usage();
|
if (dimArg.length != 2)
|
||||||
|
usage();
|
||||||
int tempx = Integer.parseInt(cropArg[0]);
|
int tempx = Integer.parseInt(cropArg[0]);
|
||||||
int tempy = Integer.parseInt(cropArg[1]);
|
int tempy = Integer.parseInt(cropArg[1]);
|
||||||
int tempw = Integer.parseInt(dimArg[0]);
|
int tempw = Integer.parseInt(dimArg[0]);
|
||||||
int temph = Integer.parseInt(dimArg[1]);
|
int temph = Integer.parseInt(dimArg[1]);
|
||||||
if(tempx < 0 || tempy < 0 || tempw < 0 || temph < 0) usage();
|
if (tempx < 0 || tempy < 0 || tempw < 0 || temph < 0)
|
||||||
xform.x = tempx; xform.y = tempy;
|
usage();
|
||||||
xform.width = tempw; xform.height = temph;
|
xform.x = tempx;
|
||||||
|
xform.y = tempy;
|
||||||
|
xform.width = tempw;
|
||||||
|
xform.height = temph;
|
||||||
xform.options |= TJTransform.OPT_CROP;
|
xform.options |= TJTransform.OPT_CROP;
|
||||||
}
|
}
|
||||||
if(argv[i].substring(0, 2).equalsIgnoreCase("-d"))
|
if (argv[i].substring(0, 2).equalsIgnoreCase("-d"))
|
||||||
display = true;
|
display = true;
|
||||||
if(argv[i].equalsIgnoreCase("-fastupsample")) {
|
if (argv[i].equalsIgnoreCase("-fastupsample")) {
|
||||||
System.out.println("Using fast upsampling code");
|
System.out.println("Using fast upsampling code");
|
||||||
flags |= TJ.FLAG_FASTUPSAMPLE;
|
flags |= TJ.FLAG_FASTUPSAMPLE;
|
||||||
}
|
}
|
||||||
if(argv[i].equalsIgnoreCase("-fastdct")) {
|
if (argv[i].equalsIgnoreCase("-fastdct")) {
|
||||||
System.out.println("Using fastest DCT/IDCT algorithm");
|
System.out.println("Using fastest DCT/IDCT algorithm");
|
||||||
flags |= TJ.FLAG_FASTDCT;
|
flags |= TJ.FLAG_FASTDCT;
|
||||||
}
|
}
|
||||||
if(argv[i].equalsIgnoreCase("-accuratedct")) {
|
if (argv[i].equalsIgnoreCase("-accuratedct")) {
|
||||||
System.out.println("Using most accurate DCT/IDCT algorithm");
|
System.out.println("Using most accurate DCT/IDCT algorithm");
|
||||||
flags |= TJ.FLAG_ACCURATEDCT;
|
flags |= TJ.FLAG_ACCURATEDCT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String[] inFileTokens = argv[0].split("\\.");
|
String[] inFileTokens = argv[0].split("\\.");
|
||||||
if(inFileTokens.length > 1)
|
if (inFileTokens.length > 1)
|
||||||
inFormat = inFileTokens[inFileTokens.length - 1];
|
inFormat = inFileTokens[inFileTokens.length - 1];
|
||||||
String[] outFileTokens;
|
String[] outFileTokens;
|
||||||
if(display) outFormat = "bmp";
|
if (display)
|
||||||
|
outFormat = "bmp";
|
||||||
else {
|
else {
|
||||||
outFileTokens = argv[1].split("\\.");
|
outFileTokens = argv[1].split("\\.");
|
||||||
if(outFileTokens.length > 1)
|
if (outFileTokens.length > 1)
|
||||||
outFormat = outFileTokens[outFileTokens.length - 1];
|
outFormat = outFileTokens[outFileTokens.length - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
File file = new File(argv[0]);
|
File file = new File(argv[0]);
|
||||||
int width, height;
|
int width, height;
|
||||||
|
|
||||||
if(inFormat.equalsIgnoreCase("jpg")) {
|
if (inFormat.equalsIgnoreCase("jpg")) {
|
||||||
FileInputStream fis = new FileInputStream(file);
|
FileInputStream fis = new FileInputStream(file);
|
||||||
int inputSize = fis.available();
|
int inputSize = fis.available();
|
||||||
if(inputSize < 1) {
|
if (inputSize < 1) {
|
||||||
System.out.println("Input file contains no data");
|
System.out.println("Input file contains no data");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
@@ -234,27 +253,28 @@ public class TJExample implements TJCustomFilter {
|
|||||||
fis.close();
|
fis.close();
|
||||||
|
|
||||||
TJDecompressor tjd;
|
TJDecompressor tjd;
|
||||||
if(xform.op != TJTransform.OP_NONE || xform.options != 0
|
if (xform.op != TJTransform.OP_NONE || xform.options != 0 ||
|
||||||
|| xform.cf != null) {
|
xform.cf != null) {
|
||||||
TJTransformer tjt = new TJTransformer(inputBuf);
|
TJTransformer tjt = new TJTransformer(inputBuf);
|
||||||
TJTransform t[] = new TJTransform[1];
|
TJTransform[] t = new TJTransform[1];
|
||||||
t[0] = xform;
|
t[0] = xform;
|
||||||
t[0].options |= TJTransform.OPT_TRIM;
|
t[0].options |= TJTransform.OPT_TRIM;
|
||||||
TJDecompressor[] tjdx = tjt.transform(t, 0);
|
TJDecompressor[] tjdx = tjt.transform(t, 0);
|
||||||
tjd = tjdx[0];
|
tjd = tjdx[0];
|
||||||
}
|
} else
|
||||||
else tjd = new TJDecompressor(inputBuf);
|
tjd = new TJDecompressor(inputBuf);
|
||||||
|
|
||||||
width = tjd.getWidth();
|
width = tjd.getWidth();
|
||||||
height = tjd.getHeight();
|
height = tjd.getHeight();
|
||||||
int inSubsamp = tjd.getSubsamp();
|
int inSubsamp = tjd.getSubsamp();
|
||||||
System.out.println("Source Image: " + width + " x " + height
|
System.out.println("Source Image: " + width + " x " + height +
|
||||||
+ " pixels, " + sampName[inSubsamp] + " subsampling");
|
" pixels, " + sampName[inSubsamp] + " subsampling");
|
||||||
if(outSubsamp < 0) outSubsamp = inSubsamp;
|
if (outSubsamp < 0)
|
||||||
|
outSubsamp = inSubsamp;
|
||||||
|
|
||||||
if(outFormat.equalsIgnoreCase("jpg")
|
if (outFormat.equalsIgnoreCase("jpg") &&
|
||||||
&& (xform.op != TJTransform.OP_NONE || xform.options != 0)
|
(xform.op != TJTransform.OP_NONE || xform.options != 0) &&
|
||||||
&& scaleFactor.isOne()) {
|
scaleFactor.isOne()) {
|
||||||
file = new File(argv[1]);
|
file = new File(argv[1]);
|
||||||
FileOutputStream fos = new FileOutputStream(file);
|
FileOutputStream fos = new FileOutputStream(file);
|
||||||
fos.write(tjd.getJPEGBuf(), 0, tjd.getJPEGSize());
|
fos.write(tjd.getJPEGBuf(), 0, tjd.getJPEGSize());
|
||||||
@@ -265,43 +285,45 @@ public class TJExample implements TJCustomFilter {
|
|||||||
width = scaleFactor.getScaled(width);
|
width = scaleFactor.getScaled(width);
|
||||||
height = scaleFactor.getScaled(height);
|
height = scaleFactor.getScaled(height);
|
||||||
|
|
||||||
if(!outFormat.equalsIgnoreCase("jpg"))
|
if (!outFormat.equalsIgnoreCase("jpg"))
|
||||||
img = tjd.decompress(width, height, BufferedImage.TYPE_INT_RGB,
|
img = tjd.decompress(width, height, BufferedImage.TYPE_INT_RGB,
|
||||||
flags);
|
flags);
|
||||||
else bmpBuf = tjd.decompress(width, 0, height, TJ.PF_BGRX, flags);
|
else
|
||||||
|
bmpBuf = tjd.decompress(width, 0, height, TJ.PF_BGRX, flags);
|
||||||
tjd.close();
|
tjd.close();
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
img = ImageIO.read(file);
|
img = ImageIO.read(file);
|
||||||
|
if (img == null)
|
||||||
|
throw new Exception("Input image type not supported.");
|
||||||
width = img.getWidth();
|
width = img.getWidth();
|
||||||
height = img.getHeight();
|
height = img.getHeight();
|
||||||
if(outSubsamp < 0) {
|
if (outSubsamp < 0) {
|
||||||
if(img.getType() == BufferedImage.TYPE_BYTE_GRAY)
|
if (img.getType() == BufferedImage.TYPE_BYTE_GRAY)
|
||||||
outSubsamp = TJ.SAMP_GRAY;
|
outSubsamp = TJ.SAMP_GRAY;
|
||||||
else outSubsamp = TJ.SAMP_444;
|
else
|
||||||
|
outSubsamp = TJ.SAMP_444;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
System.gc();
|
System.gc();
|
||||||
if(!display)
|
if (!display)
|
||||||
System.out.print("Dest. Image (" + outFormat + "): " + width + " x "
|
System.out.print("Dest. Image (" + outFormat + "): " + width + " x " +
|
||||||
+ height + " pixels");
|
height + " pixels");
|
||||||
|
|
||||||
if(display) {
|
if (display) {
|
||||||
ImageIcon icon = new ImageIcon(img);
|
ImageIcon icon = new ImageIcon(img);
|
||||||
JLabel label = new JLabel(icon, JLabel.CENTER);
|
JLabel label = new JLabel(icon, JLabel.CENTER);
|
||||||
JOptionPane.showMessageDialog(null, label, "Output Image",
|
JOptionPane.showMessageDialog(null, label, "Output Image",
|
||||||
JOptionPane.PLAIN_MESSAGE);
|
JOptionPane.PLAIN_MESSAGE);
|
||||||
}
|
} else if (outFormat.equalsIgnoreCase("jpg")) {
|
||||||
else if(outFormat.equalsIgnoreCase("jpg")) {
|
System.out.println(", " + sampName[outSubsamp] +
|
||||||
System.out.println(", " + sampName[outSubsamp]
|
" subsampling, quality = " + outQual);
|
||||||
+ " subsampling, quality = " + outQual);
|
|
||||||
TJCompressor tjc = new TJCompressor();
|
TJCompressor tjc = new TJCompressor();
|
||||||
int jpegSize;
|
int jpegSize;
|
||||||
byte[] jpegBuf;
|
byte[] jpegBuf;
|
||||||
|
|
||||||
tjc.setSubsamp(outSubsamp);
|
tjc.setSubsamp(outSubsamp);
|
||||||
tjc.setJPEGQuality(outQual);
|
tjc.setJPEGQuality(outQual);
|
||||||
if(img != null)
|
if (img != null)
|
||||||
jpegBuf = tjc.compress(img, flags);
|
jpegBuf = tjc.compress(img, flags);
|
||||||
else {
|
else {
|
||||||
tjc.setSourceImage(bmpBuf, width, 0, height, TJ.PF_BGRX);
|
tjc.setSourceImage(bmpBuf, width, 0, height, TJ.PF_BGRX);
|
||||||
@@ -314,27 +336,26 @@ public class TJExample implements TJCustomFilter {
|
|||||||
FileOutputStream fos = new FileOutputStream(file);
|
FileOutputStream fos = new FileOutputStream(file);
|
||||||
fos.write(jpegBuf, 0, jpegSize);
|
fos.write(jpegBuf, 0, jpegSize);
|
||||||
fos.close();
|
fos.close();
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
System.out.print("\n");
|
System.out.print("\n");
|
||||||
file = new File(argv[1]);
|
file = new File(argv[1]);
|
||||||
ImageIO.write(img, outFormat, file);
|
ImageIO.write(img, outFormat, file);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} catch(Exception e) {
|
||||||
catch(Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void customFilter(ShortBuffer coeffBuffer, Rectangle bufferRegion,
|
public void customFilter(ShortBuffer coeffBuffer, Rectangle bufferRegion,
|
||||||
Rectangle planeRegion, int componentIndex, int transformIndex,
|
Rectangle planeRegion, int componentIndex,
|
||||||
TJTransform transform) throws Exception {
|
int transformIndex, TJTransform transform)
|
||||||
for(int i=0; i<bufferRegion.width*bufferRegion.height; i++) {
|
throws Exception {
|
||||||
|
for (int i = 0; i < bufferRegion.width * bufferRegion.height; i++) {
|
||||||
coeffBuffer.put(i, (short)(-coeffBuffer.get(i)));
|
coeffBuffer.put(i, (short)(-coeffBuffer.get(i)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static TJScalingFactor sf [] = null;
|
static TJScalingFactor[] sf = null;
|
||||||
};
|
};
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
All Classes
|
All Classes
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
All Classes
|
All Classes
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
Constant Field Values
|
Constant Field Values
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
Deprecated List
|
Deprecated List
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
@@ -83,8 +83,30 @@ function windowTitle()
|
|||||||
</CENTER>
|
</CENTER>
|
||||||
<HR SIZE="4" NOSHADE>
|
<HR SIZE="4" NOSHADE>
|
||||||
<B>Contents</B><UL>
|
<B>Contents</B><UL>
|
||||||
|
<LI><A HREF="#method">Deprecated Methods</A>
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
|
<A NAME="method"><!-- --></A>
|
||||||
|
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
|
||||||
|
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
|
||||||
|
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
|
||||||
|
<B>Deprecated Methods</B></FONT></TH>
|
||||||
|
</TR>
|
||||||
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
||||||
|
<TD><A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)">org.libjpegturbo.turbojpeg.TJDecompressor.decompress(byte[], int, int, int, int, int)</A>
|
||||||
|
<BR>
|
||||||
|
<I>Use
|
||||||
|
<A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>TJDecompressor.decompress(byte[], int, int, int, int, int, int, int)</CODE></A> instead.</I> </TD>
|
||||||
|
</TR>
|
||||||
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
||||||
|
<TD><A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)">org.libjpegturbo.turbojpeg.TJCompressor.setSourceImage(byte[], int, int, int, int)</A>
|
||||||
|
<BR>
|
||||||
|
<I>Use
|
||||||
|
<A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>TJCompressor.setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> instead.</I> </TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
|
||||||
|
<P>
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:35 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
API Help
|
API Help
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
Index
|
Index
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="./stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="./stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
@@ -83,8 +83,7 @@ function windowTitle()
|
|||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><B>bufSize(int, int, int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><B>bufSize(int, int, int)</B></A> -
|
||||||
Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
|
Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
|
||||||
<DD>Returns the maximum size of the buffer (in bytes) required to hold a JPEG
|
<DD>Returns the maximum size of the buffer (in bytes) required to hold a JPEG
|
||||||
image with the given width and height, and level of chrominance
|
image with the given width, height, and level of chrominance subsampling.
|
||||||
subsampling.
|
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#bufSizeYUV(int, int, int)"><B>bufSizeYUV(int, int, int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#bufSizeYUV(int, int, int)"><B>bufSizeYUV(int, int, int)</B></A> -
|
||||||
Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
|
Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
|
||||||
<DD>Returns the size of the buffer (in bytes) required to hold a YUV planar
|
<DD>Returns the size of the buffer (in bytes) required to hold a YUV planar
|
||||||
@@ -129,14 +128,22 @@ Method in interface org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbo
|
|||||||
<A NAME="_D_"><!-- --></A><H2>
|
<A NAME="_D_"><!-- --></A><H2>
|
||||||
<B>D</B></H2>
|
<B>D</B></H2>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><B>decompress(byte[], int, int, int, int, int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><B>decompress(byte[], int, int, int, int, int, int, int)</B></A> -
|
||||||
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
|
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
|
||||||
<DD>Decompress the JPEG source image associated with this decompressor
|
<DD>Decompress the JPEG source image associated with this decompressor
|
||||||
instance and output a decompressed image to the given destination buffer.
|
instance and output a decompressed image to the given destination buffer.
|
||||||
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><B>decompress(byte[], int, int, int, int, int)</B></A> -
|
||||||
|
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
|
||||||
|
<DD><B>Deprecated.</B> <I>Use
|
||||||
|
<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>TJDecompressor.decompress(byte[], int, int, int, int, int, int, int)</CODE></A> instead.</I>
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int, int)"><B>decompress(int, int, int, int, int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int, int)"><B>decompress(int, int, int, int, int)</B></A> -
|
||||||
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
|
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
|
||||||
<DD>Decompress the JPEG source image associated with this decompressor
|
<DD>Decompress the JPEG source image associated with this decompressor
|
||||||
instance and return a buffer containing the decompressed image.
|
instance and return a buffer containing the decompressed image.
|
||||||
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int[], int, int, int, int, int, int, int)"><B>decompress(int[], int, int, int, int, int, int, int)</B></A> -
|
||||||
|
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
|
||||||
|
<DD>Decompress the JPEG source image associated with this decompressor
|
||||||
|
instance and output a decompressed image to the given destination buffer.
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(java.awt.image.BufferedImage, int)"><B>decompress(BufferedImage, int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(java.awt.image.BufferedImage, int)"><B>decompress(BufferedImage, int)</B></A> -
|
||||||
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
|
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
|
||||||
<DD>Decompress the JPEG source image associated with this decompressor
|
<DD>Decompress the JPEG source image associated with this decompressor
|
||||||
@@ -204,8 +211,9 @@ Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/
|
|||||||
<DD>Use the fastest DCT/IDCT algorithm available in the underlying codec.
|
<DD>Use the fastest DCT/IDCT algorithm available in the underlying codec.
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_FASTUPSAMPLE"><B>FLAG_FASTUPSAMPLE</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_FASTUPSAMPLE"><B>FLAG_FASTUPSAMPLE</B></A> -
|
||||||
Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
|
Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
|
||||||
<DD>When decompressing, use the fastest chrominance upsampling algorithm
|
<DD>When decompressing an image that was compressed using chrominance
|
||||||
available in the underlying codec.
|
subsampling, use the fastest chrominance upsampling algorithm available in
|
||||||
|
the underlying codec.
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_FORCEMMX"><B>FLAG_FORCEMMX</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_FORCEMMX"><B>FLAG_FORCEMMX</B></A> -
|
||||||
Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
|
Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
|
||||||
<DD>Turn off CPU auto-detection and force TurboJPEG to use MMX code
|
<DD>Turn off CPU auto-detection and force TurboJPEG to use MMX code
|
||||||
@@ -266,7 +274,7 @@ Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg
|
|||||||
<DD>Returns numerator
|
<DD>Returns numerator
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#getPixelSize(int)"><B>getPixelSize(int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#getPixelSize(int)"><B>getPixelSize(int)</B></A> -
|
||||||
Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
|
Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
|
||||||
<DD>Returns the pixel size (in bytes) of the given pixel format.
|
<DD>Returns the pixel size (in bytes) for the given pixel format.
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#getRedOffset(int)"><B>getRedOffset(int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#getRedOffset(int)"><B>getRedOffset(int)</B></A> -
|
||||||
Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
|
Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
|
||||||
<DD>For the given pixel format, returns the number of bytes that the red
|
<DD>For the given pixel format, returns the number of bytes that the red
|
||||||
@@ -276,12 +284,12 @@ Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg
|
|||||||
<DD>Returns the scaled value of <code>dimension</code>.
|
<DD>Returns the scaled value of <code>dimension</code>.
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><B>getScaledHeight(int, int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><B>getScaledHeight(int, int)</B></A> -
|
||||||
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
|
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
|
||||||
<DD>Returns the height of the largest scaled down image that the TurboJPEG
|
<DD>Returns the height of the largest scaled-down image that the TurboJPEG
|
||||||
decompressor can generate without exceeding the desired image width and
|
decompressor can generate without exceeding the desired image width and
|
||||||
height.
|
height.
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)"><B>getScaledWidth(int, int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)"><B>getScaledWidth(int, int)</B></A> -
|
||||||
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
|
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
|
||||||
<DD>Returns the width of the largest scaled down image that the TurboJPEG
|
<DD>Returns the width of the largest scaled-down image that the TurboJPEG
|
||||||
decompressor can generate without exceeding the desired image width and
|
decompressor can generate without exceeding the desired image width and
|
||||||
height.
|
height.
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><B>getScalingFactors()</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><B>getScalingFactors()</B></A> -
|
||||||
@@ -471,9 +479,13 @@ Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg
|
|||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setJPEGQuality(int)"><B>setJPEGQuality(int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setJPEGQuality(int)"><B>setJPEGQuality(int)</B></A> -
|
||||||
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
|
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
|
||||||
<DD>Set the JPEG image quality level for subsequent compress operations.
|
<DD>Set the JPEG image quality level for subsequent compress operations.
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><B>setSourceImage(byte[], int, int, int, int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><B>setSourceImage(byte[], int, int, int, int, int, int)</B></A> -
|
||||||
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
|
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
|
||||||
<DD>Associate an uncompressed source image with this compressor instance.
|
<DD>Associate an uncompressed source image with this compressor instance.
|
||||||
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><B>setSourceImage(byte[], int, int, int, int)</B></A> -
|
||||||
|
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
|
||||||
|
<DD><B>Deprecated.</B> <I>Use
|
||||||
|
<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>TJCompressor.setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> instead.</I>
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSubsamp(int)"><B>setSubsamp(int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSubsamp(int)"><B>setSubsamp(int)</B></A> -
|
||||||
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
|
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
|
||||||
<DD>Set the level of chrominance subsampling for subsequent compress/encode
|
<DD>Set the level of chrominance subsampling for subsequent compress/encode
|
||||||
@@ -491,6 +503,11 @@ Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/tur
|
|||||||
<DD>Create a TurboJPEG compressor instance.
|
<DD>Create a TurboJPEG compressor instance.
|
||||||
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int)"><B>TJCompressor(byte[], int, int, int, int)</B></A> -
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int)"><B>TJCompressor(byte[], int, int, int, int)</B></A> -
|
||||||
Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
|
Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
|
||||||
|
<DD>Create a TurboJPEG compressor instance and associate the uncompressed
|
||||||
|
source image stored in <code>srcImage</code> with the newly-created
|
||||||
|
instance.
|
||||||
|
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int, int, int)"><B>TJCompressor(byte[], int, int, int, int, int, int)</B></A> -
|
||||||
|
Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
|
||||||
<DD>Create a TurboJPEG compressor instance and associate the uncompressed
|
<DD>Create a TurboJPEG compressor instance and associate the uncompressed
|
||||||
source image stored in <code>srcImage</code> with the newly-created
|
source image stored in <code>srcImage</code> with the newly-created
|
||||||
instance.
|
instance.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc on Fri Jun 29 14:29:14 CDT 2012-->
|
<!-- Generated by javadoc on Fri Apr 26 20:05:34 CDT 2013-->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
Generated Documentation (Untitled)
|
Generated Documentation (Untitled)
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:33 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
TJ
|
TJ
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
@@ -146,8 +146,9 @@ TurboJPEG utility class (cannot be instantiated)
|
|||||||
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_FASTUPSAMPLE">FLAG_FASTUPSAMPLE</A></B></CODE>
|
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_FASTUPSAMPLE">FLAG_FASTUPSAMPLE</A></B></CODE>
|
||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
When decompressing, use the fastest chrominance upsampling algorithm
|
When decompressing an image that was compressed using chrominance
|
||||||
available in the underlying codec.</TD>
|
subsampling, use the fastest chrominance upsampling algorithm available in
|
||||||
|
the underlying codec.</TD>
|
||||||
</TR>
|
</TR>
|
||||||
<TR BGCOLOR="white" CLASS="TableRowColor">
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
||||||
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
||||||
@@ -364,8 +365,7 @@ TurboJPEG utility class (cannot be instantiated)
|
|||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
Returns the maximum size of the buffer (in bytes) required to hold a JPEG
|
Returns the maximum size of the buffer (in bytes) required to hold a JPEG
|
||||||
image with the given width and height, and level of chrominance
|
image with the given width, height, and level of chrominance subsampling.</TD>
|
||||||
subsampling.</TD>
|
|
||||||
</TR>
|
</TR>
|
||||||
<TR BGCOLOR="white" CLASS="TableRowColor">
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
||||||
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
||||||
@@ -420,7 +420,7 @@ TurboJPEG utility class (cannot be instantiated)
|
|||||||
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getPixelSize(int)">getPixelSize</A></B>(int pixelFormat)</CODE>
|
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getPixelSize(int)">getPixelSize</A></B>(int pixelFormat)</CODE>
|
||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
Returns the pixel size (in bytes) of the given pixel format.</TD>
|
Returns the pixel size (in bytes) for the given pixel format.</TD>
|
||||||
</TR>
|
</TR>
|
||||||
<TR BGCOLOR="white" CLASS="TableRowColor">
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
||||||
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
||||||
@@ -779,11 +779,11 @@ FLAG_FASTUPSAMPLE</H3>
|
|||||||
<PRE>
|
<PRE>
|
||||||
public static final int <B>FLAG_FASTUPSAMPLE</B></PRE>
|
public static final int <B>FLAG_FASTUPSAMPLE</B></PRE>
|
||||||
<DL>
|
<DL>
|
||||||
<DD>When decompressing, use the fastest chrominance upsampling algorithm
|
<DD>When decompressing an image that was compressed using chrominance
|
||||||
available in the underlying codec. The default is to use smooth
|
subsampling, use the fastest chrominance upsampling algorithm available in
|
||||||
upsampling, which creates a smooth transition between neighboring
|
the underlying codec. The default is to use smooth upsampling, which
|
||||||
chrominance components in order to reduce upsampling artifacts in the
|
creates a smooth transition between neighboring chrominance components in
|
||||||
decompressed image.
|
order to reduce upsampling artifacts in the decompressed image.
|
||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.FLAG_FASTUPSAMPLE">Constant Field Values</A></DL>
|
<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.FLAG_FASTUPSAMPLE">Constant Field Values</A></DL>
|
||||||
@@ -896,11 +896,11 @@ getPixelSize</H3>
|
|||||||
public static int <B>getPixelSize</B>(int pixelFormat)
|
public static int <B>getPixelSize</B>(int pixelFormat)
|
||||||
throws java.lang.Exception</PRE>
|
throws java.lang.Exception</PRE>
|
||||||
<DL>
|
<DL>
|
||||||
<DD>Returns the pixel size (in bytes) of the given pixel format.
|
<DD>Returns the pixel size (in bytes) for the given pixel format.
|
||||||
<P>
|
<P>
|
||||||
<DD><DL>
|
<DD><DL>
|
||||||
<DT><B>Parameters:</B><DD><CODE>pixelFormat</CODE> - the pixel format (one of <code>PF_*</code>)
|
<DT><B>Parameters:</B><DD><CODE>pixelFormat</CODE> - the pixel format (one of <code>PF_*</code>)
|
||||||
<DT><B>Returns:</B><DD>the pixel size (in bytes) of the given pixel format
|
<DT><B>Returns:</B><DD>the pixel size (in bytes) for the given pixel format
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
<DD><CODE>java.lang.Exception</CODE></DL>
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
</DD>
|
</DD>
|
||||||
@@ -979,15 +979,13 @@ public static int <B>bufSize</B>(int width,
|
|||||||
throws java.lang.Exception</PRE>
|
throws java.lang.Exception</PRE>
|
||||||
<DL>
|
<DL>
|
||||||
<DD>Returns the maximum size of the buffer (in bytes) required to hold a JPEG
|
<DD>Returns the maximum size of the buffer (in bytes) required to hold a JPEG
|
||||||
image with the given width and height, and level of chrominance
|
image with the given width, height, and level of chrominance subsampling.
|
||||||
subsampling.
|
|
||||||
<P>
|
<P>
|
||||||
<DD><DL>
|
<DD><DL>
|
||||||
<DT><B>Parameters:</B><DD><CODE>width</CODE> - the width (in pixels) of the JPEG image<DD><CODE>height</CODE> - the height (in pixels) of the JPEG image<DD><CODE>jpegSubsamp</CODE> - the level of chrominance subsampling to be used when
|
<DT><B>Parameters:</B><DD><CODE>width</CODE> - the width (in pixels) of the JPEG image<DD><CODE>height</CODE> - the height (in pixels) of the JPEG image<DD><CODE>jpegSubsamp</CODE> - the level of chrominance subsampling to be used when
|
||||||
generating the JPEG image (one of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.SAMP_*</CODE></A>)
|
generating the JPEG image (one of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.SAMP_*</CODE></A>)
|
||||||
<DT><B>Returns:</B><DD>the maximum size of the buffer (in bytes) required to hold a JPEG
|
<DT><B>Returns:</B><DD>the maximum size of the buffer (in bytes) required to hold a JPEG
|
||||||
image with the given width and height, and level of chrominance
|
image with the given width, height, and level of chrominance subsampling
|
||||||
subsampling
|
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
<DD><CODE>java.lang.Exception</CODE></DL>
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
</DD>
|
</DD>
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
TJCompressor
|
TJCompressor
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
@@ -128,6 +128,20 @@ TurboJPEG compressor
|
|||||||
int height,
|
int height,
|
||||||
int pixelFormat)</CODE>
|
int pixelFormat)</CODE>
|
||||||
|
|
||||||
|
<BR>
|
||||||
|
Create a TurboJPEG compressor instance and associate the uncompressed
|
||||||
|
source image stored in <code>srcImage</code> with the newly-created
|
||||||
|
instance.</TD>
|
||||||
|
</TR>
|
||||||
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
||||||
|
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int, int, int)">TJCompressor</A></B>(byte[] srcImage,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int pitch,
|
||||||
|
int height,
|
||||||
|
int pixelFormat)</CODE>
|
||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
Create a TurboJPEG compressor instance and associate the uncompressed
|
Create a TurboJPEG compressor instance and associate the uncompressed
|
||||||
source image stored in <code>srcImage</code> with the newly-created
|
source image stored in <code>srcImage</code> with the newly-created
|
||||||
@@ -265,6 +279,21 @@ TurboJPEG compressor
|
|||||||
int height,
|
int height,
|
||||||
int pixelFormat)</CODE>
|
int pixelFormat)</CODE>
|
||||||
|
|
||||||
|
<BR>
|
||||||
|
<B>Deprecated.</B> <I>Use
|
||||||
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> instead.</I></TD>
|
||||||
|
</TR>
|
||||||
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
||||||
|
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
||||||
|
<CODE> void</CODE></FONT></TD>
|
||||||
|
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)">setSourceImage</A></B>(byte[] srcImage,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int pitch,
|
||||||
|
int height,
|
||||||
|
int pixelFormat)</CODE>
|
||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
Associate an uncompressed source image with this compressor instance.</TD>
|
Associate an uncompressed source image with this compressor instance.</TD>
|
||||||
</TR>
|
</TR>
|
||||||
@@ -330,7 +359,32 @@ public <B>TJCompressor</B>(byte[] srcImage,
|
|||||||
instance.
|
instance.
|
||||||
<P>
|
<P>
|
||||||
<DL>
|
<DL>
|
||||||
<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int)</CODE></A> for description<DD><CODE>width</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int)</CODE></A> for description<DD><CODE>pitch</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int)</CODE></A> for description<DD><CODE>height</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int)</CODE></A> for description<DD><CODE>pixelFormat</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int)</CODE></A> for description
|
<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>width</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>pitch</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>height</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>pixelFormat</CODE> - pixel format of the source image (one of
|
||||||
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)
|
||||||
|
<DT><B>Throws:</B>
|
||||||
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
|
</DL>
|
||||||
|
<HR>
|
||||||
|
|
||||||
|
<A NAME="TJCompressor(byte[], int, int, int, int, int, int)"><!-- --></A><H3>
|
||||||
|
TJCompressor</H3>
|
||||||
|
<PRE>
|
||||||
|
public <B>TJCompressor</B>(byte[] srcImage,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int pitch,
|
||||||
|
int height,
|
||||||
|
int pixelFormat)
|
||||||
|
throws java.lang.Exception</PRE>
|
||||||
|
<DL>
|
||||||
|
<DD>Create a TurboJPEG compressor instance and associate the uncompressed
|
||||||
|
source image stored in <code>srcImage</code> with the newly-created
|
||||||
|
instance.
|
||||||
|
<P>
|
||||||
|
<DL>
|
||||||
|
<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>x</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>y</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>width</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>pitch</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>height</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>pixelFormat</CODE> - pixel format of the source image (one of
|
||||||
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
<DD><CODE>java.lang.Exception</CODE></DL>
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
</DL>
|
</DL>
|
||||||
@@ -345,10 +399,12 @@ public <B>TJCompressor</B>(byte[] srcImage,
|
|||||||
</TR>
|
</TR>
|
||||||
</TABLE>
|
</TABLE>
|
||||||
|
|
||||||
<A NAME="setSourceImage(byte[], int, int, int, int)"><!-- --></A><H3>
|
<A NAME="setSourceImage(byte[], int, int, int, int, int, int)"><!-- --></A><H3>
|
||||||
setSourceImage</H3>
|
setSourceImage</H3>
|
||||||
<PRE>
|
<PRE>
|
||||||
public void <B>setSourceImage</B>(byte[] srcImage,
|
public void <B>setSourceImage</B>(byte[] srcImage,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
int width,
|
int width,
|
||||||
int pitch,
|
int pitch,
|
||||||
int height,
|
int height,
|
||||||
@@ -359,14 +415,18 @@ public void <B>setSourceImage</B>(byte[] srcImage,
|
|||||||
<P>
|
<P>
|
||||||
<DD><DL>
|
<DD><DL>
|
||||||
<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - image buffer containing RGB or grayscale pixels to be
|
<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - image buffer containing RGB or grayscale pixels to be
|
||||||
compressed<DD><CODE>width</CODE> - width (in pixels) of the source image<DD><CODE>pitch</CODE> - bytes per line of the source image. Normally, this should be
|
compressed<DD><CODE>x</CODE> - x offset (in pixels) of the region from which the JPEG image
|
||||||
|
should be compressed, relative to the start of <code>srcImage</code>.<DD><CODE>y</CODE> - y offset (in pixels) of the region from which the JPEG image
|
||||||
|
should be compressed, relative to the start of <code>srcImage</code>.<DD><CODE>width</CODE> - width (in pixels) of the region in the source image from
|
||||||
|
which the JPEG image should be compressed.<DD><CODE>pitch</CODE> - bytes per line of the source image. Normally, this should be
|
||||||
<code>width * TJ.pixelSize(pixelFormat)</code> if the source image is
|
<code>width * TJ.pixelSize(pixelFormat)</code> if the source image is
|
||||||
unpadded, but you can use this parameter to, for instance, specify that
|
unpadded, but you can use this parameter to, for instance, specify that
|
||||||
the scanlines in the source image are padded to 4-byte boundaries, as is
|
the scanlines in the source image are padded to a 4-byte boundary or to
|
||||||
the case for Windows bitmaps. You can also be clever and use this
|
compress a JPEG image from a region of a larger source image. You can
|
||||||
parameter to skip lines, etc. Setting this parameter to 0 is the
|
also be clever and use this parameter to skip lines, etc. Setting this
|
||||||
equivalent of setting it to <code>width *
|
parameter to 0 is the equivalent of setting it to <code>width *
|
||||||
TJ.pixelSize(pixelFormat)</code>.<DD><CODE>height</CODE> - height (in pixels) of the source image<DD><CODE>pixelFormat</CODE> - pixel format of the source image (one of
|
TJ.pixelSize(pixelFormat)</code>.<DD><CODE>height</CODE> - height (in pixels) of the region in the source image from
|
||||||
|
which the JPEG image should be compressed.<DD><CODE>pixelFormat</CODE> - pixel format of the source image (one of
|
||||||
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
<DD><CODE>java.lang.Exception</CODE></DL>
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
@@ -374,6 +434,27 @@ public void <B>setSourceImage</B>(byte[] srcImage,
|
|||||||
</DL>
|
</DL>
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
|
<A NAME="setSourceImage(byte[], int, int, int, int)"><!-- --></A><H3>
|
||||||
|
setSourceImage</H3>
|
||||||
|
<PRE>
|
||||||
|
public void <B>setSourceImage</B>(byte[] srcImage,
|
||||||
|
int width,
|
||||||
|
int pitch,
|
||||||
|
int height,
|
||||||
|
int pixelFormat)
|
||||||
|
throws java.lang.Exception</PRE>
|
||||||
|
<DL>
|
||||||
|
<DD><B>Deprecated.</B> <I>Use
|
||||||
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> instead.</I>
|
||||||
|
<P>
|
||||||
|
<DD><DL>
|
||||||
|
|
||||||
|
<DT><B>Throws:</B>
|
||||||
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
|
</DD>
|
||||||
|
</DL>
|
||||||
|
<HR>
|
||||||
|
|
||||||
<A NAME="setSubsamp(int)"><!-- --></A><H3>
|
<A NAME="setSubsamp(int)"><!-- --></A><H3>
|
||||||
setSubsamp</H3>
|
setSubsamp</H3>
|
||||||
<PRE>
|
<PRE>
|
||||||
@@ -422,7 +503,7 @@ public void <B>compress</B>(byte[] dstBuf,
|
|||||||
<DD><DL>
|
<DD><DL>
|
||||||
<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the JPEG image. Use
|
<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the JPEG image. Use
|
||||||
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><CODE>TJ.bufSize(int, int, int)</CODE></A> to determine the maximum size for this buffer based on
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><CODE>TJ.bufSize(int, int, int)</CODE></A> to determine the maximum size for this buffer based on
|
||||||
the image width and height.<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
the image width, height, and level of chrominance subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
<DD><CODE>java.lang.Exception</CODE></DL>
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
</DD>
|
</DD>
|
||||||
@@ -463,7 +544,7 @@ public void <B>compress</B>(java.awt.image.BufferedImage srcImage,
|
|||||||
<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - a <code>BufferedImage</code> instance containing RGB or
|
<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - a <code>BufferedImage</code> instance containing RGB or
|
||||||
grayscale pixels to be compressed<DD><CODE>dstBuf</CODE> - buffer that will receive the JPEG image. Use
|
grayscale pixels to be compressed<DD><CODE>dstBuf</CODE> - buffer that will receive the JPEG image. Use
|
||||||
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><CODE>TJ.bufSize(int, int, int)</CODE></A> to determine the maximum size for this buffer based on
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><CODE>TJ.bufSize(int, int, int)</CODE></A> to determine the maximum size for this buffer based on
|
||||||
the image width and height.<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
the image width, height, and level of chrominance subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
<DD><CODE>java.lang.Exception</CODE></DL>
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
</DD>
|
</DD>
|
||||||
@@ -504,13 +585,13 @@ public void <B>encodeYUV</B>(byte[] dstBuf,
|
|||||||
TurboJPEG's underlying codec to produce a planar YUV image that is
|
TurboJPEG's underlying codec to produce a planar YUV image that is
|
||||||
suitable for direct video display. Specifically, if the chrominance
|
suitable for direct video display. Specifically, if the chrominance
|
||||||
components are subsampled along the horizontal dimension, then the width
|
components are subsampled along the horizontal dimension, then the width
|
||||||
of the luminance plane is padded to 2 in the output image (same goes for
|
of the luminance plane is padded to the nearest multiple of 2 in the
|
||||||
the height of the luminance plane, if the chrominance components are
|
output image (same goes for the height of the luminance plane, if the
|
||||||
subsampled along the vertical dimension.) Also, each line of each plane
|
chrominance components are subsampled along the vertical dimension.)
|
||||||
in the output image is padded to 4 bytes. Although this will work with
|
Also, each line of each plane in the output image is padded to 4 bytes.
|
||||||
any subsampling option, it is really only useful in combination with
|
Although this will work with any subsampling option, it is really only
|
||||||
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#SAMP_420"><CODE>TJ.SAMP_420</CODE></A>, which produces an image compatible with the I420 (AKA
|
useful in combination with <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#SAMP_420"><CODE>TJ.SAMP_420</CODE></A>, which produces an image
|
||||||
"YUV420P") format.
|
compatible with the I420 (AKA "YUV420P") format.
|
||||||
<P>
|
<P>
|
||||||
<DD><DL>
|
<DD><DL>
|
||||||
<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the YUV planar image. Use
|
<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the YUV planar image. Use
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
TJCustomFilter
|
TJCustomFilter
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
@@ -167,10 +167,10 @@ void <B>customFilter</B>(java.nio.ShortBuffer coeffBuffer,
|
|||||||
into multiple DCT coefficient buffers and call the callback function once
|
into multiple DCT coefficient buffers and call the callback function once
|
||||||
for each buffer.<DD><CODE>planeRegion</CODE> - rectangle containing the width and height of the
|
for each buffer.<DD><CODE>planeRegion</CODE> - rectangle containing the width and height of the
|
||||||
component plane to which <code>coeffBuffer</code> belongs<DD><CODE>componentID</CODE> - ID number of the component plane to which
|
component plane to which <code>coeffBuffer</code> belongs<DD><CODE>componentID</CODE> - ID number of the component plane to which
|
||||||
<code>coeffBuffer</code>belongs (Y, Cb, and Cr have, respectively, ID's of
|
<code>coeffBuffer</code> belongs (Y, U, and V have, respectively, ID's of
|
||||||
0, 1, and 2 in typical JPEG images.)<DD><CODE>transformID</CODE> - ID number of the transformed image to which
|
0, 1, and 2 in typical JPEG images.)<DD><CODE>transformID</CODE> - ID number of the transformed image to which
|
||||||
<code>coeffBuffer</code> belongs. This is the same as the index of the
|
<code>coeffBuffer</code> belongs. This is the same as the index of the
|
||||||
transform in the transforms array that was passed to <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><CODE>TJTransformer.transform()</CODE></A>.<DD><CODE>transform</CODE> - a <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJTransform</CODE></A> instance that specifies the
|
transform in the <code>transforms</code> array that was passed to <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><CODE>TJTransformer.transform()</CODE></A>.<DD><CODE>transform</CODE> - a <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJTransform</CODE></A> instance that specifies the
|
||||||
parameters and/or cropping region for this transform
|
parameters and/or cropping region for this transform
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
<DD><CODE>java.lang.Exception</CODE></DL>
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
TJDecompressor
|
TJDecompressor
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
@@ -236,6 +236,38 @@ TurboJPEG decompressor
|
|||||||
int pixelFormat,
|
int pixelFormat,
|
||||||
int flags)</CODE>
|
int flags)</CODE>
|
||||||
|
|
||||||
|
<BR>
|
||||||
|
<B>Deprecated.</B> <I>Use
|
||||||
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A> instead.</I></TD>
|
||||||
|
</TR>
|
||||||
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
||||||
|
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
||||||
|
<CODE> void</CODE></FONT></TD>
|
||||||
|
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)">decompress</A></B>(byte[] dstBuf,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int desiredWidth,
|
||||||
|
int pitch,
|
||||||
|
int desiredHeight,
|
||||||
|
int pixelFormat,
|
||||||
|
int flags)</CODE>
|
||||||
|
|
||||||
|
<BR>
|
||||||
|
Decompress the JPEG source image associated with this decompressor
|
||||||
|
instance and output a decompressed image to the given destination buffer.</TD>
|
||||||
|
</TR>
|
||||||
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
||||||
|
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
||||||
|
<CODE> void</CODE></FONT></TD>
|
||||||
|
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int[], int, int, int, int, int, int, int)">decompress</A></B>(int[] dstBuf,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int desiredWidth,
|
||||||
|
int stride,
|
||||||
|
int desiredHeight,
|
||||||
|
int pixelFormat,
|
||||||
|
int flags)</CODE>
|
||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
Decompress the JPEG source image associated with this decompressor
|
Decompress the JPEG source image associated with this decompressor
|
||||||
instance and output a decompressed image to the given destination buffer.</TD>
|
instance and output a decompressed image to the given destination buffer.</TD>
|
||||||
@@ -326,7 +358,7 @@ TurboJPEG decompressor
|
|||||||
int desiredHeight)</CODE>
|
int desiredHeight)</CODE>
|
||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
Returns the height of the largest scaled down image that the TurboJPEG
|
Returns the height of the largest scaled-down image that the TurboJPEG
|
||||||
decompressor can generate without exceeding the desired image width and
|
decompressor can generate without exceeding the desired image width and
|
||||||
height.</TD>
|
height.</TD>
|
||||||
</TR>
|
</TR>
|
||||||
@@ -337,7 +369,7 @@ TurboJPEG decompressor
|
|||||||
int desiredHeight)</CODE>
|
int desiredHeight)</CODE>
|
||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
Returns the width of the largest scaled down image that the TurboJPEG
|
Returns the width of the largest scaled-down image that the TurboJPEG
|
||||||
decompressor can generate without exceeding the desired image width and
|
decompressor can generate without exceeding the desired image width and
|
||||||
height.</TD>
|
height.</TD>
|
||||||
</TR>
|
</TR>
|
||||||
@@ -639,7 +671,7 @@ public int <B>getScaledWidth</B>(int desiredWidth,
|
|||||||
int desiredHeight)
|
int desiredHeight)
|
||||||
throws java.lang.Exception</PRE>
|
throws java.lang.Exception</PRE>
|
||||||
<DL>
|
<DL>
|
||||||
<DD>Returns the width of the largest scaled down image that the TurboJPEG
|
<DD>Returns the width of the largest scaled-down image that the TurboJPEG
|
||||||
decompressor can generate without exceeding the desired image width and
|
decompressor can generate without exceeding the desired image width and
|
||||||
height.
|
height.
|
||||||
<P>
|
<P>
|
||||||
@@ -651,7 +683,7 @@ public int <B>getScaledWidth</B>(int desiredWidth,
|
|||||||
Setting this to 0 is the same as setting it to the height of the JPEG
|
Setting this to 0 is the same as setting it to the height of the JPEG
|
||||||
image (in other words, the height will not be considered when determining
|
image (in other words, the height will not be considered when determining
|
||||||
the scaled image size.)
|
the scaled image size.)
|
||||||
<DT><B>Returns:</B><DD>the width of the largest scaled down image that the TurboJPEG
|
<DT><B>Returns:</B><DD>the width of the largest scaled-down image that the TurboJPEG
|
||||||
decompressor can generate without exceeding the desired image width and
|
decompressor can generate without exceeding the desired image width and
|
||||||
height
|
height
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
@@ -667,7 +699,7 @@ public int <B>getScaledHeight</B>(int desiredWidth,
|
|||||||
int desiredHeight)
|
int desiredHeight)
|
||||||
throws java.lang.Exception</PRE>
|
throws java.lang.Exception</PRE>
|
||||||
<DL>
|
<DL>
|
||||||
<DD>Returns the height of the largest scaled down image that the TurboJPEG
|
<DD>Returns the height of the largest scaled-down image that the TurboJPEG
|
||||||
decompressor can generate without exceeding the desired image width and
|
decompressor can generate without exceeding the desired image width and
|
||||||
height.
|
height.
|
||||||
<P>
|
<P>
|
||||||
@@ -679,7 +711,7 @@ public int <B>getScaledHeight</B>(int desiredWidth,
|
|||||||
Setting this to 0 is the same as setting it to the height of the JPEG
|
Setting this to 0 is the same as setting it to the height of the JPEG
|
||||||
image (in other words, the height will not be considered when determining
|
image (in other words, the height will not be considered when determining
|
||||||
the scaled image size.)
|
the scaled image size.)
|
||||||
<DT><B>Returns:</B><DD>the height of the largest scaled down image that the TurboJPEG
|
<DT><B>Returns:</B><DD>the height of the largest scaled-down image that the TurboJPEG
|
||||||
decompressor can generate without exceeding the desired image width and
|
decompressor can generate without exceeding the desired image width and
|
||||||
height
|
height
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
@@ -688,6 +720,62 @@ public int <B>getScaledHeight</B>(int desiredWidth,
|
|||||||
</DL>
|
</DL>
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
|
<A NAME="decompress(byte[], int, int, int, int, int, int, int)"><!-- --></A><H3>
|
||||||
|
decompress</H3>
|
||||||
|
<PRE>
|
||||||
|
public void <B>decompress</B>(byte[] dstBuf,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int desiredWidth,
|
||||||
|
int pitch,
|
||||||
|
int desiredHeight,
|
||||||
|
int pixelFormat,
|
||||||
|
int flags)
|
||||||
|
throws java.lang.Exception</PRE>
|
||||||
|
<DL>
|
||||||
|
<DD>Decompress the JPEG source image associated with this decompressor
|
||||||
|
instance and output a decompressed image to the given destination buffer.
|
||||||
|
<P>
|
||||||
|
<DD><DL>
|
||||||
|
<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the decompressed image. This
|
||||||
|
buffer should normally be <code>pitch * scaledHeight</code> bytes in size,
|
||||||
|
where <code>scaledHeight</code> can be determined by calling <code>
|
||||||
|
scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegHeight)
|
||||||
|
</code> with one of the scaling factors returned from <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><CODE>TJ.getScalingFactors()</CODE></A> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><CODE>getScaledHeight(int, int)</CODE></A>. However,
|
||||||
|
the buffer may also be larger than the dimensions of the JPEG image, in
|
||||||
|
which case the <code>x</code>, <code>y</code>, and <code>pitch</code>
|
||||||
|
parameters can be used to specify the region into which the JPEG image
|
||||||
|
should be decompressed.<DD><CODE>x</CODE> - x offset (in pixels) of the region into which the JPEG image
|
||||||
|
should be decompressed, relative to the start of <code>dstBuf</code>.<DD><CODE>y</CODE> - y offset (in pixels) of the region into which the JPEG image
|
||||||
|
should be decompressed, relative to the start of <code>dstBuf</code>.<DD><CODE>desiredWidth</CODE> - desired width (in pixels) of the decompressed image
|
||||||
|
(or image region.) If the desired image dimensions are different than the
|
||||||
|
dimensions of the JPEG image being decompressed, then TurboJPEG will use
|
||||||
|
scaling in the JPEG decompressor to generate the largest possible image
|
||||||
|
that will fit within the desired dimensions. Setting this to 0 is the
|
||||||
|
same as setting it to the width of the JPEG image (in other words, the
|
||||||
|
width will not be considered when determining the scaled image size.)<DD><CODE>pitch</CODE> - bytes per line of the destination image. Normally, this
|
||||||
|
should be set to <code>scaledWidth * TJ.pixelSize(pixelFormat)</code> if
|
||||||
|
the decompressed image is unpadded, but you can use this to, for instance,
|
||||||
|
pad each line of the decompressed image to a 4-byte boundary or to
|
||||||
|
decompress the JPEG image into a region of a larger image. NOTE:
|
||||||
|
<code>scaledWidth</code> can be determined by calling <code>
|
||||||
|
scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegWidth)
|
||||||
|
</code> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)"><CODE>getScaledWidth(int, int)</CODE></A>. Setting this parameter to
|
||||||
|
0 is the equivalent of setting it to <code>scaledWidth *
|
||||||
|
TJ.pixelSize(pixelFormat)</code>.<DD><CODE>desiredHeight</CODE> - desired height (in pixels) of the decompressed image
|
||||||
|
(or image region.) If the desired image dimensions are different than the
|
||||||
|
dimensions of the JPEG image being decompressed, then TurboJPEG will use
|
||||||
|
scaling in the JPEG decompressor to generate the largest possible image
|
||||||
|
that will fit within the desired dimensions. Setting this to 0 is the
|
||||||
|
same as setting it to the height of the JPEG image (in other words, the
|
||||||
|
height will not be considered when determining the scaled image size.)<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
|
||||||
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
||||||
|
<DT><B>Throws:</B>
|
||||||
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
|
</DD>
|
||||||
|
</DL>
|
||||||
|
<HR>
|
||||||
|
|
||||||
<A NAME="decompress(byte[], int, int, int, int, int)"><!-- --></A><H3>
|
<A NAME="decompress(byte[], int, int, int, int, int)"><!-- --></A><H3>
|
||||||
decompress</H3>
|
decompress</H3>
|
||||||
<PRE>
|
<PRE>
|
||||||
@@ -699,36 +787,11 @@ public void <B>decompress</B>(byte[] dstBuf,
|
|||||||
int flags)
|
int flags)
|
||||||
throws java.lang.Exception</PRE>
|
throws java.lang.Exception</PRE>
|
||||||
<DL>
|
<DL>
|
||||||
<DD>Decompress the JPEG source image associated with this decompressor
|
<DD><B>Deprecated.</B> <I>Use
|
||||||
instance and output a decompressed image to the given destination buffer.
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A> instead.</I>
|
||||||
<P>
|
<P>
|
||||||
<DD><DL>
|
<DD><DL>
|
||||||
<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the decompressed image. This
|
|
||||||
buffer should normally be <code>pitch * scaledHeight</code> bytes in size,
|
|
||||||
where <code>scaledHeight</code> can be determined by calling <code>
|
|
||||||
scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegHeight)
|
|
||||||
</code> with one of the scaling factors returned from <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><CODE>TJ.getScalingFactors()</CODE></A> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><CODE>getScaledHeight(int, int)</CODE></A>.<DD><CODE>desiredWidth</CODE> - desired width (in pixels) of the decompressed image.
|
|
||||||
If the desired image dimensions are smaller than the dimensions of the
|
|
||||||
JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG
|
|
||||||
decompressor to generate the largest possible image that will fit within
|
|
||||||
the desired dimensions. Setting this to 0 is the same as setting it to
|
|
||||||
the width of the JPEG image (in other words, the width will not be
|
|
||||||
considered when determining the scaled image size.)<DD><CODE>pitch</CODE> - bytes per line of the destination image. Normally, this
|
|
||||||
should be set to <code>scaledWidth * TJ.pixelSize(pixelFormat)</code> if
|
|
||||||
the decompressed image is unpadded, but you can use this to, for instance,
|
|
||||||
pad each line of the decompressed image to a 4-byte boundary. NOTE:
|
|
||||||
<code>scaledWidth</code> can be determined by calling <code>
|
|
||||||
scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegWidth)
|
|
||||||
</code> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)"><CODE>getScaledWidth(int, int)</CODE></A>. Setting this parameter to
|
|
||||||
0 is the equivalent of setting it to <code>scaledWidth *
|
|
||||||
TJ.pixelSize(pixelFormat)</code>.<DD><CODE>desiredHeight</CODE> - desired height (in pixels) of the decompressed image.
|
|
||||||
If the desired image dimensions are smaller than the dimensions of the
|
|
||||||
JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG
|
|
||||||
decompressor to generate the largest possible image that will fit within
|
|
||||||
the desired dimensions. Setting this to 0 is the same as setting it to
|
|
||||||
the height of the JPEG image (in other words, the height will not be
|
|
||||||
considered when determining the scaled image size.)<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
|
|
||||||
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
<DD><CODE>java.lang.Exception</CODE></DL>
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
</DD>
|
</DD>
|
||||||
@@ -750,9 +813,12 @@ public byte[] <B>decompress</B>(int desiredWidth,
|
|||||||
<P>
|
<P>
|
||||||
<DD><DL>
|
<DD><DL>
|
||||||
<DT><B>Parameters:</B><DD><CODE>desiredWidth</CODE> - see
|
<DT><B>Parameters:</B><DD><CODE>desiredWidth</CODE> - see
|
||||||
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int)</CODE></A> for description<DD><CODE>pitch</CODE> - see
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A>
|
||||||
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int)</CODE></A> for description<DD><CODE>desiredHeight</CODE> - see
|
for description<DD><CODE>pitch</CODE> - see
|
||||||
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int)</CODE></A> for description<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A>
|
||||||
|
for description<DD><CODE>desiredHeight</CODE> - see
|
||||||
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A>
|
||||||
|
for description<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
|
||||||
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
||||||
<DT><B>Returns:</B><DD>a buffer containing the decompressed image
|
<DT><B>Returns:</B><DD>a buffer containing the decompressed image
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
@@ -772,11 +838,11 @@ public void <B>decompressToYUV</B>(byte[] dstBuf,
|
|||||||
instance and output a YUV planar image to the given destination buffer.
|
instance and output a YUV planar image to the given destination buffer.
|
||||||
This method performs JPEG decompression but leaves out the color
|
This method performs JPEG decompression but leaves out the color
|
||||||
conversion step, so a planar YUV image is generated instead of an RGB
|
conversion step, so a planar YUV image is generated instead of an RGB
|
||||||
image. The padding of the planes in this image is the same as the images
|
image. The padding of the planes in this image is the same as in the
|
||||||
generated by <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(byte[], int)"><CODE>TJCompressor.encodeYUV(byte[], int)</CODE></A>. Note that, if
|
images generated by <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(byte[], int)"><CODE>TJCompressor.encodeYUV(byte[], int)</CODE></A>. Note
|
||||||
the width or height of the image is not an even multiple of the MCU block
|
that, if the width or height of the image is not an even multiple of the
|
||||||
size (see <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUWidth(int)"><CODE>TJ.getMCUWidth(int)</CODE></A> and <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUHeight(int)"><CODE>TJ.getMCUHeight(int)</CODE></A>), then an
|
MCU block size (see <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUWidth(int)"><CODE>TJ.getMCUWidth(int)</CODE></A> and <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUHeight(int)"><CODE>TJ.getMCUHeight(int)</CODE></A>),
|
||||||
intermediate buffer copy will be performed within TurboJPEG.
|
then an intermediate buffer copy will be performed within TurboJPEG.
|
||||||
<P>
|
<P>
|
||||||
<DD><DL>
|
<DD><DL>
|
||||||
<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the YUV planar image. Use
|
<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the YUV planar image. Use
|
||||||
@@ -806,6 +872,59 @@ public byte[] <B>decompressToYUV</B>(int flags)
|
|||||||
</DL>
|
</DL>
|
||||||
<HR>
|
<HR>
|
||||||
|
|
||||||
|
<A NAME="decompress(int[], int, int, int, int, int, int, int)"><!-- --></A><H3>
|
||||||
|
decompress</H3>
|
||||||
|
<PRE>
|
||||||
|
public void <B>decompress</B>(int[] dstBuf,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int desiredWidth,
|
||||||
|
int stride,
|
||||||
|
int desiredHeight,
|
||||||
|
int pixelFormat,
|
||||||
|
int flags)
|
||||||
|
throws java.lang.Exception</PRE>
|
||||||
|
<DL>
|
||||||
|
<DD>Decompress the JPEG source image associated with this decompressor
|
||||||
|
instance and output a decompressed image to the given destination buffer.
|
||||||
|
<P>
|
||||||
|
<DD><DL>
|
||||||
|
<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the decompressed image. This
|
||||||
|
buffer should normally be <code>stride * scaledHeight</code> pixels in
|
||||||
|
size, where <code>scaledHeight</code> can be determined by calling <code>
|
||||||
|
scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegHeight)
|
||||||
|
</code> with one of the scaling factors returned from <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><CODE>TJ.getScalingFactors()</CODE></A> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><CODE>getScaledHeight(int, int)</CODE></A>. However,
|
||||||
|
the buffer may also be larger than the dimensions of the JPEG image, in
|
||||||
|
which case the <code>x</code>, <code>y</code>, and <code>stride</code>
|
||||||
|
parameters can be used to specify the region into which the JPEG image
|
||||||
|
should be decompressed.<DD><CODE>x</CODE> - x offset (in pixels) of the region into which the JPEG image
|
||||||
|
should be decompressed, relative to the start of <code>dstBuf</code>.<DD><CODE>y</CODE> - y offset (in pixels) of the region into which the JPEG image
|
||||||
|
should be decompressed, relative to the start of <code>dstBuf</code>.<DD><CODE>desiredWidth</CODE> - desired width (in pixels) of the decompressed image
|
||||||
|
(or image region.) If the desired image dimensions are different than the
|
||||||
|
dimensions of the JPEG image being decompressed, then TurboJPEG will use
|
||||||
|
scaling in the JPEG decompressor to generate the largest possible image
|
||||||
|
that will fit within the desired dimensions. Setting this to 0 is the
|
||||||
|
same as setting it to the width of the JPEG image (in other words, the
|
||||||
|
width will not be considered when determining the scaled image size.)<DD><CODE>stride</CODE> - pixels per line of the destination image. Normally, this
|
||||||
|
should be set to <code>scaledWidth</code>, but you can use this to, for
|
||||||
|
instance, decompress the JPEG image into a region of a larger image.
|
||||||
|
NOTE: <code>scaledWidth</code> can be determined by calling <code>
|
||||||
|
scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegWidth)
|
||||||
|
</code> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)"><CODE>getScaledWidth(int, int)</CODE></A>. Setting this parameter to
|
||||||
|
0 is the equivalent of setting it to <code>scaledWidth</code>.<DD><CODE>desiredHeight</CODE> - desired height (in pixels) of the decompressed image
|
||||||
|
(or image region.) If the desired image dimensions are different than the
|
||||||
|
dimensions of the JPEG image being decompressed, then TurboJPEG will use
|
||||||
|
scaling in the JPEG decompressor to generate the largest possible image
|
||||||
|
that will fit within the desired dimensions. Setting this to 0 is the
|
||||||
|
same as setting it to the height of the JPEG image (in other words, the
|
||||||
|
height will not be considered when determining the scaled image size.)<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
|
||||||
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
||||||
|
<DT><B>Throws:</B>
|
||||||
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
|
</DD>
|
||||||
|
</DL>
|
||||||
|
<HR>
|
||||||
|
|
||||||
<A NAME="decompress(java.awt.image.BufferedImage, int)"><!-- --></A><H3>
|
<A NAME="decompress(java.awt.image.BufferedImage, int)"><!-- --></A><H3>
|
||||||
decompress</H3>
|
decompress</H3>
|
||||||
<PRE>
|
<PRE>
|
||||||
@@ -841,8 +960,10 @@ public java.awt.image.BufferedImage <B>decompress</B>(int desiredWidth,
|
|||||||
<P>
|
<P>
|
||||||
<DD><DL>
|
<DD><DL>
|
||||||
<DT><B>Parameters:</B><DD><CODE>desiredWidth</CODE> - see
|
<DT><B>Parameters:</B><DD><CODE>desiredWidth</CODE> - see
|
||||||
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int)</CODE></A> for description<DD><CODE>desiredHeight</CODE> - see
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A> for
|
||||||
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int)</CODE></A> for description<DD><CODE>bufferedImageType</CODE> - the image type of the newly-created
|
description<DD><CODE>desiredHeight</CODE> - see
|
||||||
|
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A> for
|
||||||
|
description<DD><CODE>bufferedImageType</CODE> - the image type of the newly-created
|
||||||
<code>BufferedImage</code> instance (for instance,
|
<code>BufferedImage</code> instance (for instance,
|
||||||
<code>BufferedImage.TYPE_INT_RGB</code>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
<code>BufferedImage.TYPE_INT_RGB</code>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
||||||
<DT><B>Returns:</B><DD>a <code>BufferedImage</code> instance containing the
|
<DT><B>Returns:</B><DD>a <code>BufferedImage</code> instance containing the
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
TJScalingFactor
|
TJScalingFactor
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
TJTransform
|
TJTransform
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
@@ -676,8 +676,10 @@ public <B>TJTransform</B>(int x,
|
|||||||
<DT><B>Parameters:</B><DD><CODE>x</CODE> - the left boundary of the cropping region. This must be evenly
|
<DT><B>Parameters:</B><DD><CODE>x</CODE> - the left boundary of the cropping region. This must be evenly
|
||||||
divisible by the MCU block width (see <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUWidth(int)"><CODE>TJ.getMCUWidth(int)</CODE></A>)<DD><CODE>y</CODE> - the upper boundary of the cropping region. This must be evenly
|
divisible by the MCU block width (see <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUWidth(int)"><CODE>TJ.getMCUWidth(int)</CODE></A>)<DD><CODE>y</CODE> - the upper boundary of the cropping region. This must be evenly
|
||||||
divisible by the MCU block height (see <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUHeight(int)"><CODE>TJ.getMCUHeight(int)</CODE></A>)<DD><CODE>w</CODE> - the width of the cropping region. Setting this to 0 is the
|
divisible by the MCU block height (see <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUHeight(int)"><CODE>TJ.getMCUHeight(int)</CODE></A>)<DD><CODE>w</CODE> - the width of the cropping region. Setting this to 0 is the
|
||||||
equivalent of setting it to the width of the source JPEG image - x.<DD><CODE>h</CODE> - the height of the cropping region. Setting this to 0 is the
|
equivalent of setting it to (width of the source JPEG image -
|
||||||
equivalent of setting it to the height of the source JPEG image - y.<DD><CODE>op</CODE> - one of the transform operations (<code>OP_*</code>)<DD><CODE>options</CODE> - the bitwise OR of one or more of the transform options
|
<code>x</code>).<DD><CODE>h</CODE> - the height of the cropping region. Setting this to 0 is the
|
||||||
|
equivalent of setting it to (height of the source JPEG image -
|
||||||
|
<code>y</code>).<DD><CODE>op</CODE> - one of the transform operations (<code>OP_*</code>)<DD><CODE>options</CODE> - the bitwise OR of one or more of the transform options
|
||||||
(<code>OPT_*</code>)<DD><CODE>cf</CODE> - an instance of an object that implements the <A HREF="../../../org/libjpegturbo/turbojpeg/TJCustomFilter.html" title="interface in org.libjpegturbo.turbojpeg"><CODE>TJCustomFilter</CODE></A> interface, or null if no custom filter is needed
|
(<code>OPT_*</code>)<DD><CODE>cf</CODE> - an instance of an object that implements the <A HREF="../../../org/libjpegturbo/turbojpeg/TJCustomFilter.html" title="interface in org.libjpegturbo.turbojpeg"><CODE>TJCustomFilter</CODE></A> interface, or null if no custom filter is needed
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
<DD><CODE>java.lang.Exception</CODE></DL>
|
<DD><CODE>java.lang.Exception</CODE></DL>
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
TJTransformer
|
TJTransformer
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
@@ -205,7 +205,7 @@ TurboJPEG lossless transformer
|
|||||||
<TH ALIGN="left"><B>Methods inherited from class org.libjpegturbo.turbojpeg.<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A></B></TH>
|
<TH ALIGN="left"><B>Methods inherited from class org.libjpegturbo.turbojpeg.<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A></B></TH>
|
||||||
</TR>
|
</TR>
|
||||||
<TR BGCOLOR="white" CLASS="TableRowColor">
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
||||||
<TD><CODE><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#close()">close</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(java.awt.image.BufferedImage, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#finalize()">finalize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getHeight()">getHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGBuf()">getJPEGBuf</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGSize()">getJPEGSize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)">getScaledHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)">getScaledWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSubsamp()">getSubsamp</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getWidth()">getWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#setJPEGImage(byte[], int)">setJPEGImage</A></CODE></TD>
|
<TD><CODE><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#close()">close</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(java.awt.image.BufferedImage, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int[], int, int, int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#finalize()">finalize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getHeight()">getHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGBuf()">getJPEGBuf</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGSize()">getJPEGSize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)">getScaledHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)">getScaledWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSubsamp()">getSubsamp</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getWidth()">getWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#setJPEGImage(byte[], int)">setJPEGImage</A></CODE></TD>
|
||||||
</TR>
|
</TR>
|
||||||
</TABLE>
|
</TABLE>
|
||||||
<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
|
<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
|
||||||
@@ -303,18 +303,19 @@ public void <B>transform</B>(byte[][] dstBufs,
|
|||||||
JPEG image structure to another without altering the values of the
|
JPEG image structure to another without altering the values of the
|
||||||
coefficients. While this is typically faster than decompressing the
|
coefficients. While this is typically faster than decompressing the
|
||||||
image, transforming it, and re-compressing it, lossless transforms are not
|
image, transforming it, and re-compressing it, lossless transforms are not
|
||||||
free. Each lossless transform requires reading and Huffman decoding all
|
free. Each lossless transform requires reading and performing Huffman
|
||||||
of the coefficients in the source image, regardless of the size of the
|
decoding on all of the coefficients in the source image, regardless of the
|
||||||
destination image. Thus, this method provides a means of generating
|
size of the destination image. Thus, this method provides a means of
|
||||||
multiple transformed images from the same source or of applying multiple
|
generating multiple transformed images from the same source or of applying
|
||||||
transformations simultaneously, in order to eliminate the need to read the
|
multiple transformations simultaneously, in order to eliminate the need to
|
||||||
source coefficients multiple times.
|
read the source coefficients multiple times.
|
||||||
<P>
|
<P>
|
||||||
<DD><DL>
|
<DD><DL>
|
||||||
<DT><B>Parameters:</B><DD><CODE>dstBufs</CODE> - an array of image buffers. <code>dstbufs[i]</code> will
|
<DT><B>Parameters:</B><DD><CODE>dstBufs</CODE> - an array of image buffers. <code>dstbufs[i]</code> will
|
||||||
receive a JPEG image that has been transformed using the parameters in
|
receive a JPEG image that has been transformed using the parameters in
|
||||||
<code>transforms[i]</code>. Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><CODE>TJ.bufSize(int, int, int)</CODE></A> to determine the
|
<code>transforms[i]</code>. Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><CODE>TJ.bufSize(int, int, int)</CODE></A> to determine the
|
||||||
maximum size for each buffer based on the cropped width and height.<DD><CODE>transforms</CODE> - an array of <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJTransform</CODE></A> instances, each of
|
maximum size for each buffer based on the transformed or cropped width and
|
||||||
|
height.<DD><CODE>transforms</CODE> - an array of <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJTransform</CODE></A> instances, each of
|
||||||
which specifies the transform parameters and/or cropping region for the
|
which specifies the transform parameters and/or cropping region for the
|
||||||
corresponding transformed output image<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
corresponding transformed output image<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
|
||||||
<DT><B>Throws:</B>
|
<DT><B>Throws:</B>
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
org.libjpegturbo.turbojpeg
|
org.libjpegturbo.turbojpeg
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
org.libjpegturbo.turbojpeg
|
org.libjpegturbo.turbojpeg
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:13 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
org.libjpegturbo.turbojpeg Class Hierarchy
|
org.libjpegturbo.turbojpeg Class Hierarchy
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
Class Hierarchy
|
Class Hierarchy
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<!--NewPage-->
|
<!--NewPage-->
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 14:29:14 CDT 2012 -->
|
<!-- Generated by javadoc (build 1.6.0_43) on Fri Apr 26 20:05:34 CDT 2013 -->
|
||||||
<TITLE>
|
<TITLE>
|
||||||
Serialized Form
|
Serialized Form
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META NAME="date" CONTENT="2012-06-29">
|
<META NAME="date" CONTENT="2013-04-26">
|
||||||
|
|
||||||
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C)2011-2012 D. R. Commander. All Rights Reserved.
|
* Copyright (C)2011-2013 D. R. Commander. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@@ -31,38 +31,38 @@ package org.libjpegturbo.turbojpeg;
|
|||||||
/**
|
/**
|
||||||
* TurboJPEG utility class (cannot be instantiated)
|
* TurboJPEG utility class (cannot be instantiated)
|
||||||
*/
|
*/
|
||||||
final public class TJ {
|
public final class TJ {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The number of chrominance subsampling options
|
* The number of chrominance subsampling options
|
||||||
*/
|
*/
|
||||||
final public static int NUMSAMP = 5;
|
public static final int NUMSAMP = 5;
|
||||||
/**
|
/**
|
||||||
* 4:4:4 chrominance subsampling (no chrominance subsampling). The JPEG
|
* 4:4:4 chrominance subsampling (no chrominance subsampling). The JPEG
|
||||||
* or YUV image will contain one chrominance component for every pixel in the
|
* or YUV image will contain one chrominance component for every pixel in the
|
||||||
* source image.
|
* source image.
|
||||||
*/
|
*/
|
||||||
final public static int SAMP_444 = 0;
|
public static final int SAMP_444 = 0;
|
||||||
/**
|
/**
|
||||||
* 4:2:2 chrominance subsampling. The JPEG or YUV image will contain one
|
* 4:2:2 chrominance subsampling. The JPEG or YUV image will contain one
|
||||||
* chrominance component for every 2x1 block of pixels in the source image.
|
* chrominance component for every 2x1 block of pixels in the source image.
|
||||||
*/
|
*/
|
||||||
final public static int SAMP_422 = 1;
|
public static final int SAMP_422 = 1;
|
||||||
/**
|
/**
|
||||||
* 4:2:0 chrominance subsampling. The JPEG or YUV image will contain one
|
* 4:2:0 chrominance subsampling. The JPEG or YUV image will contain one
|
||||||
* chrominance component for every 2x2 block of pixels in the source image.
|
* chrominance component for every 2x2 block of pixels in the source image.
|
||||||
*/
|
*/
|
||||||
final public static int SAMP_420 = 2;
|
public static final int SAMP_420 = 2;
|
||||||
/**
|
/**
|
||||||
* Grayscale. The JPEG or YUV image will contain no chrominance components.
|
* Grayscale. The JPEG or YUV image will contain no chrominance components.
|
||||||
*/
|
*/
|
||||||
final public static int SAMP_GRAY = 3;
|
public static final int SAMP_GRAY = 3;
|
||||||
/**
|
/**
|
||||||
* 4:4:0 chrominance subsampling. The JPEG or YUV image will contain one
|
* 4:4:0 chrominance subsampling. The JPEG or YUV image will contain one
|
||||||
* chrominance component for every 1x2 block of pixels in the source image.
|
* chrominance component for every 1x2 block of pixels in the source image.
|
||||||
*/
|
*/
|
||||||
final public static int SAMP_440 = 4;
|
public static final int SAMP_440 = 4;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -75,12 +75,12 @@ final public class TJ {
|
|||||||
* @return the MCU block width for the given level of chrominance subsampling
|
* @return the MCU block width for the given level of chrominance subsampling
|
||||||
*/
|
*/
|
||||||
public static int getMCUWidth(int subsamp) throws Exception {
|
public static int getMCUWidth(int subsamp) throws Exception {
|
||||||
if(subsamp < 0 || subsamp >= NUMSAMP)
|
if (subsamp < 0 || subsamp >= NUMSAMP)
|
||||||
throw new Exception("Invalid subsampling type");
|
throw new Exception("Invalid subsampling type");
|
||||||
return mcuWidth[subsamp];
|
return mcuWidth[subsamp];
|
||||||
}
|
}
|
||||||
|
|
||||||
final private static int mcuWidth[] = {
|
private static final int[] mcuWidth = {
|
||||||
8, 16, 16, 8, 8
|
8, 16, 16, 8, 8
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -96,12 +96,12 @@ final public class TJ {
|
|||||||
* subsampling
|
* subsampling
|
||||||
*/
|
*/
|
||||||
public static int getMCUHeight(int subsamp) throws Exception {
|
public static int getMCUHeight(int subsamp) throws Exception {
|
||||||
if(subsamp < 0 || subsamp >= NUMSAMP)
|
if (subsamp < 0 || subsamp >= NUMSAMP)
|
||||||
throw new Exception("Invalid subsampling type");
|
throw new Exception("Invalid subsampling type");
|
||||||
return mcuHeight[subsamp];
|
return mcuHeight[subsamp];
|
||||||
}
|
}
|
||||||
|
|
||||||
final private static int mcuHeight[] = {
|
private static final int[] mcuHeight = {
|
||||||
8, 8, 16, 8, 16
|
8, 8, 16, 8, 16
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -109,92 +109,92 @@ final public class TJ {
|
|||||||
/**
|
/**
|
||||||
* The number of pixel formats
|
* The number of pixel formats
|
||||||
*/
|
*/
|
||||||
final public static int NUMPF = 11;
|
public static final int NUMPF = 11;
|
||||||
/**
|
/**
|
||||||
* RGB pixel format. The red, green, and blue components in the image are
|
* RGB pixel format. The red, green, and blue components in the image are
|
||||||
* stored in 3-byte pixels in the order R, G, B from lowest to highest byte
|
* stored in 3-byte pixels in the order R, G, B from lowest to highest byte
|
||||||
* address within each pixel.
|
* address within each pixel.
|
||||||
*/
|
*/
|
||||||
final public static int PF_RGB = 0;
|
public static final int PF_RGB = 0;
|
||||||
/**
|
/**
|
||||||
* BGR pixel format. The red, green, and blue components in the image are
|
* BGR pixel format. The red, green, and blue components in the image are
|
||||||
* stored in 3-byte pixels in the order B, G, R from lowest to highest byte
|
* stored in 3-byte pixels in the order B, G, R from lowest to highest byte
|
||||||
* address within each pixel.
|
* address within each pixel.
|
||||||
*/
|
*/
|
||||||
final public static int PF_BGR = 1;
|
public static final int PF_BGR = 1;
|
||||||
/**
|
/**
|
||||||
* RGBX pixel format. The red, green, and blue components in the image are
|
* RGBX pixel format. The red, green, and blue components in the image are
|
||||||
* stored in 4-byte pixels in the order R, G, B from lowest to highest byte
|
* stored in 4-byte pixels in the order R, G, B from lowest to highest byte
|
||||||
* address within each pixel. The X component is ignored when compressing
|
* address within each pixel. The X component is ignored when compressing
|
||||||
* and undefined when decompressing.
|
* and undefined when decompressing.
|
||||||
*/
|
*/
|
||||||
final public static int PF_RGBX = 2;
|
public static final int PF_RGBX = 2;
|
||||||
/**
|
/**
|
||||||
* BGRX pixel format. The red, green, and blue components in the image are
|
* BGRX pixel format. The red, green, and blue components in the image are
|
||||||
* stored in 4-byte pixels in the order B, G, R from lowest to highest byte
|
* stored in 4-byte pixels in the order B, G, R from lowest to highest byte
|
||||||
* address within each pixel. The X component is ignored when compressing
|
* address within each pixel. The X component is ignored when compressing
|
||||||
* and undefined when decompressing.
|
* and undefined when decompressing.
|
||||||
*/
|
*/
|
||||||
final public static int PF_BGRX = 3;
|
public static final int PF_BGRX = 3;
|
||||||
/**
|
/**
|
||||||
* XBGR pixel format. The red, green, and blue components in the image are
|
* XBGR pixel format. The red, green, and blue components in the image are
|
||||||
* stored in 4-byte pixels in the order R, G, B from highest to lowest byte
|
* stored in 4-byte pixels in the order R, G, B from highest to lowest byte
|
||||||
* address within each pixel. The X component is ignored when compressing
|
* address within each pixel. The X component is ignored when compressing
|
||||||
* and undefined when decompressing.
|
* and undefined when decompressing.
|
||||||
*/
|
*/
|
||||||
final public static int PF_XBGR = 4;
|
public static final int PF_XBGR = 4;
|
||||||
/**
|
/**
|
||||||
* XRGB pixel format. The red, green, and blue components in the image are
|
* XRGB pixel format. The red, green, and blue components in the image are
|
||||||
* stored in 4-byte pixels in the order B, G, R from highest to lowest byte
|
* stored in 4-byte pixels in the order B, G, R from highest to lowest byte
|
||||||
* address within each pixel. The X component is ignored when compressing
|
* address within each pixel. The X component is ignored when compressing
|
||||||
* and undefined when decompressing.
|
* and undefined when decompressing.
|
||||||
*/
|
*/
|
||||||
final public static int PF_XRGB = 5;
|
public static final int PF_XRGB = 5;
|
||||||
/**
|
/**
|
||||||
* Grayscale pixel format. Each 1-byte pixel represents a luminance
|
* Grayscale pixel format. Each 1-byte pixel represents a luminance
|
||||||
* (brightness) level from 0 to 255.
|
* (brightness) level from 0 to 255.
|
||||||
*/
|
*/
|
||||||
final public static int PF_GRAY = 6;
|
public static final int PF_GRAY = 6;
|
||||||
/**
|
/**
|
||||||
* RGBA pixel format. This is the same as {@link #PF_RGBX}, except that when
|
* RGBA pixel format. This is the same as {@link #PF_RGBX}, except that when
|
||||||
* decompressing, the X byte is guaranteed to be 0xFF, which can be
|
* decompressing, the X byte is guaranteed to be 0xFF, which can be
|
||||||
* interpreted as an opaque alpha channel.
|
* interpreted as an opaque alpha channel.
|
||||||
*/
|
*/
|
||||||
final public static int PF_RGBA = 7;
|
public static final int PF_RGBA = 7;
|
||||||
/**
|
/**
|
||||||
* BGRA pixel format. This is the same as {@link #PF_BGRX}, except that when
|
* BGRA pixel format. This is the same as {@link #PF_BGRX}, except that when
|
||||||
* decompressing, the X byte is guaranteed to be 0xFF, which can be
|
* decompressing, the X byte is guaranteed to be 0xFF, which can be
|
||||||
* interpreted as an opaque alpha channel.
|
* interpreted as an opaque alpha channel.
|
||||||
*/
|
*/
|
||||||
final public static int PF_BGRA = 8;
|
public static final int PF_BGRA = 8;
|
||||||
/**
|
/**
|
||||||
* ABGR pixel format. This is the same as {@link #PF_XBGR}, except that when
|
* ABGR pixel format. This is the same as {@link #PF_XBGR}, except that when
|
||||||
* decompressing, the X byte is guaranteed to be 0xFF, which can be
|
* decompressing, the X byte is guaranteed to be 0xFF, which can be
|
||||||
* interpreted as an opaque alpha channel.
|
* interpreted as an opaque alpha channel.
|
||||||
*/
|
*/
|
||||||
final public static int PF_ABGR = 9;
|
public static final int PF_ABGR = 9;
|
||||||
/**
|
/**
|
||||||
* ARGB pixel format. This is the same as {@link #PF_XRGB}, except that when
|
* ARGB pixel format. This is the same as {@link #PF_XRGB}, except that when
|
||||||
* decompressing, the X byte is guaranteed to be 0xFF, which can be
|
* decompressing, the X byte is guaranteed to be 0xFF, which can be
|
||||||
* interpreted as an opaque alpha channel.
|
* interpreted as an opaque alpha channel.
|
||||||
*/
|
*/
|
||||||
final public static int PF_ARGB = 10;
|
public static final int PF_ARGB = 10;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the pixel size (in bytes) of the given pixel format.
|
* Returns the pixel size (in bytes) for the given pixel format.
|
||||||
*
|
*
|
||||||
* @param pixelFormat the pixel format (one of <code>PF_*</code>)
|
* @param pixelFormat the pixel format (one of <code>PF_*</code>)
|
||||||
*
|
*
|
||||||
* @return the pixel size (in bytes) of the given pixel format
|
* @return the pixel size (in bytes) for the given pixel format
|
||||||
*/
|
*/
|
||||||
public static int getPixelSize(int pixelFormat) throws Exception {
|
public static int getPixelSize(int pixelFormat) throws Exception {
|
||||||
if(pixelFormat < 0 || pixelFormat >= NUMPF)
|
if (pixelFormat < 0 || pixelFormat >= NUMPF)
|
||||||
throw new Exception("Invalid pixel format");
|
throw new Exception("Invalid pixel format");
|
||||||
return pixelSize[pixelFormat];
|
return pixelSize[pixelFormat];
|
||||||
}
|
}
|
||||||
|
|
||||||
final private static int pixelSize[] = {
|
private static final int[] pixelSize = {
|
||||||
3, 3, 4, 4, 4, 4, 1, 4, 4, 4, 4
|
3, 3, 4, 4, 4, 4, 1, 4, 4, 4, 4
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -211,12 +211,12 @@ final public class TJ {
|
|||||||
* @return the red offset for the given pixel format
|
* @return the red offset for the given pixel format
|
||||||
*/
|
*/
|
||||||
public static int getRedOffset(int pixelFormat) throws Exception {
|
public static int getRedOffset(int pixelFormat) throws Exception {
|
||||||
if(pixelFormat < 0 || pixelFormat >= NUMPF)
|
if (pixelFormat < 0 || pixelFormat >= NUMPF)
|
||||||
throw new Exception("Invalid pixel format");
|
throw new Exception("Invalid pixel format");
|
||||||
return redOffset[pixelFormat];
|
return redOffset[pixelFormat];
|
||||||
}
|
}
|
||||||
|
|
||||||
final private static int redOffset[] = {
|
private static final int[] redOffset = {
|
||||||
0, 2, 0, 2, 3, 1, 0, 0, 2, 3, 1
|
0, 2, 0, 2, 3, 1, 0, 0, 2, 3, 1
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -233,12 +233,12 @@ final public class TJ {
|
|||||||
* @return the green offset for the given pixel format
|
* @return the green offset for the given pixel format
|
||||||
*/
|
*/
|
||||||
public static int getGreenOffset(int pixelFormat) throws Exception {
|
public static int getGreenOffset(int pixelFormat) throws Exception {
|
||||||
if(pixelFormat < 0 || pixelFormat >= NUMPF)
|
if (pixelFormat < 0 || pixelFormat >= NUMPF)
|
||||||
throw new Exception("Invalid pixel format");
|
throw new Exception("Invalid pixel format");
|
||||||
return greenOffset[pixelFormat];
|
return greenOffset[pixelFormat];
|
||||||
}
|
}
|
||||||
|
|
||||||
final private static int greenOffset[] = {
|
private static final int[] greenOffset = {
|
||||||
1, 1, 1, 1, 2, 2, 0, 1, 1, 2, 2
|
1, 1, 1, 1, 2, 2, 0, 1, 1, 2, 2
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -255,12 +255,12 @@ final public class TJ {
|
|||||||
* @return the blue offset for the given pixel format
|
* @return the blue offset for the given pixel format
|
||||||
*/
|
*/
|
||||||
public static int getBlueOffset(int pixelFormat) throws Exception {
|
public static int getBlueOffset(int pixelFormat) throws Exception {
|
||||||
if(pixelFormat < 0 || pixelFormat >= NUMPF)
|
if (pixelFormat < 0 || pixelFormat >= NUMPF)
|
||||||
throw new Exception("Invalid pixel format");
|
throw new Exception("Invalid pixel format");
|
||||||
return blueOffset[pixelFormat];
|
return blueOffset[pixelFormat];
|
||||||
}
|
}
|
||||||
|
|
||||||
final private static int blueOffset[] = {
|
private static final int[] blueOffset = {
|
||||||
2, 0, 2, 0, 1, 3, 0, 2, 0, 1, 3
|
2, 0, 2, 0, 1, 3, 0, 2, 0, 1, 3
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -269,35 +269,35 @@ final public class TJ {
|
|||||||
* The uncompressed source/destination image is stored in bottom-up (Windows,
|
* The uncompressed source/destination image is stored in bottom-up (Windows,
|
||||||
* OpenGL) order, not top-down (X11) order.
|
* OpenGL) order, not top-down (X11) order.
|
||||||
*/
|
*/
|
||||||
final public static int FLAG_BOTTOMUP = 2;
|
public static final int FLAG_BOTTOMUP = 2;
|
||||||
/**
|
/**
|
||||||
* Turn off CPU auto-detection and force TurboJPEG to use MMX code
|
* Turn off CPU auto-detection and force TurboJPEG to use MMX code
|
||||||
* (if the underlying codec supports it.)
|
* (if the underlying codec supports it.)
|
||||||
*/
|
*/
|
||||||
final public static int FLAG_FORCEMMX = 8;
|
public static final int FLAG_FORCEMMX = 8;
|
||||||
/**
|
/**
|
||||||
* Turn off CPU auto-detection and force TurboJPEG to use SSE code
|
* Turn off CPU auto-detection and force TurboJPEG to use SSE code
|
||||||
* (if the underlying codec supports it.)
|
* (if the underlying codec supports it.)
|
||||||
*/
|
*/
|
||||||
final public static int FLAG_FORCESSE = 16;
|
public static final int FLAG_FORCESSE = 16;
|
||||||
/**
|
/**
|
||||||
* Turn off CPU auto-detection and force TurboJPEG to use SSE2 code
|
* Turn off CPU auto-detection and force TurboJPEG to use SSE2 code
|
||||||
* (if the underlying codec supports it.)
|
* (if the underlying codec supports it.)
|
||||||
*/
|
*/
|
||||||
final public static int FLAG_FORCESSE2 = 32;
|
public static final int FLAG_FORCESSE2 = 32;
|
||||||
/**
|
/**
|
||||||
* Turn off CPU auto-detection and force TurboJPEG to use SSE3 code
|
* Turn off CPU auto-detection and force TurboJPEG to use SSE3 code
|
||||||
* (if the underlying codec supports it.)
|
* (if the underlying codec supports it.)
|
||||||
*/
|
*/
|
||||||
final public static int FLAG_FORCESSE3 = 128;
|
public static final int FLAG_FORCESSE3 = 128;
|
||||||
/**
|
/**
|
||||||
* When decompressing, use the fastest chrominance upsampling algorithm
|
* When decompressing an image that was compressed using chrominance
|
||||||
* available in the underlying codec. The default is to use smooth
|
* subsampling, use the fastest chrominance upsampling algorithm available in
|
||||||
* upsampling, which creates a smooth transition between neighboring
|
* the underlying codec. The default is to use smooth upsampling, which
|
||||||
* chrominance components in order to reduce upsampling artifacts in the
|
* creates a smooth transition between neighboring chrominance components in
|
||||||
* decompressed image.
|
* order to reduce upsampling artifacts in the decompressed image.
|
||||||
*/
|
*/
|
||||||
final public static int FLAG_FASTUPSAMPLE = 256;
|
public static final int FLAG_FASTUPSAMPLE = 256;
|
||||||
/**
|
/**
|
||||||
* Use the fastest DCT/IDCT algorithm available in the underlying codec. The
|
* Use the fastest DCT/IDCT algorithm available in the underlying codec. The
|
||||||
* default if this flag is not specified is implementation-specific. The
|
* default if this flag is not specified is implementation-specific. The
|
||||||
@@ -306,7 +306,7 @@ final public class TJ {
|
|||||||
* effect on accuracy, but it uses the accurate algorithm when decompressing,
|
* effect on accuracy, but it uses the accurate algorithm when decompressing,
|
||||||
* because this has been shown to have a larger effect.
|
* because this has been shown to have a larger effect.
|
||||||
*/
|
*/
|
||||||
final public static int FLAG_FASTDCT = 2048;
|
public static final int FLAG_FASTDCT = 2048;
|
||||||
/**
|
/**
|
||||||
* Use the most accurate DCT/IDCT algorithm available in the underlying
|
* Use the most accurate DCT/IDCT algorithm available in the underlying
|
||||||
* codec. The default if this flag is not specified is
|
* codec. The default if this flag is not specified is
|
||||||
@@ -316,13 +316,12 @@ final public class TJ {
|
|||||||
* accurate algorithm when decompressing, because this has been shown to have
|
* accurate algorithm when decompressing, because this has been shown to have
|
||||||
* a larger effect.
|
* a larger effect.
|
||||||
*/
|
*/
|
||||||
final public static int FLAG_ACCURATEDCT = 4096;
|
public static final int FLAG_ACCURATEDCT = 4096;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the maximum size of the buffer (in bytes) required to hold a JPEG
|
* Returns the maximum size of the buffer (in bytes) required to hold a JPEG
|
||||||
* image with the given width and height, and level of chrominance
|
* image with the given width, height, and level of chrominance subsampling.
|
||||||
* subsampling.
|
|
||||||
*
|
*
|
||||||
* @param width the width (in pixels) of the JPEG image
|
* @param width the width (in pixels) of the JPEG image
|
||||||
*
|
*
|
||||||
@@ -332,10 +331,9 @@ final public class TJ {
|
|||||||
* generating the JPEG image (one of {@link TJ TJ.SAMP_*})
|
* generating the JPEG image (one of {@link TJ TJ.SAMP_*})
|
||||||
*
|
*
|
||||||
* @return the maximum size of the buffer (in bytes) required to hold a JPEG
|
* @return the maximum size of the buffer (in bytes) required to hold a JPEG
|
||||||
* image with the given width and height, and level of chrominance
|
* image with the given width, height, and level of chrominance subsampling
|
||||||
* subsampling
|
|
||||||
*/
|
*/
|
||||||
public native static int bufSize(int width, int height, int jpegSubsamp)
|
public static native int bufSize(int width, int height, int jpegSubsamp)
|
||||||
throws Exception;
|
throws Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -352,8 +350,7 @@ final public class TJ {
|
|||||||
* @return the size of the buffer (in bytes) required to hold a YUV planar
|
* @return the size of the buffer (in bytes) required to hold a YUV planar
|
||||||
* image with the given width, height, and level of chrominance subsampling
|
* image with the given width, height, and level of chrominance subsampling
|
||||||
*/
|
*/
|
||||||
public native static int bufSizeYUV(int width, int height,
|
public static native int bufSizeYUV(int width, int height, int subsamp)
|
||||||
int subsamp)
|
|
||||||
throws Exception;
|
throws Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -363,7 +360,7 @@ final public class TJ {
|
|||||||
* @return a list of fractional scaling factors that the JPEG decompressor in
|
* @return a list of fractional scaling factors that the JPEG decompressor in
|
||||||
* this implementation of TurboJPEG supports
|
* this implementation of TurboJPEG supports
|
||||||
*/
|
*/
|
||||||
public native static TJScalingFactor[] getScalingFactors()
|
public static native TJScalingFactor[] getScalingFactors()
|
||||||
throws Exception;
|
throws Exception;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C)2011 D. R. Commander. All Rights Reserved.
|
* Copyright (C)2011-2013 D. R. Commander. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@@ -36,7 +36,7 @@ import java.nio.*;
|
|||||||
*/
|
*/
|
||||||
public class TJCompressor {
|
public class TJCompressor {
|
||||||
|
|
||||||
private final static String NO_ASSOC_ERROR =
|
private static final String NO_ASSOC_ERROR =
|
||||||
"No source image is associated with this instance";
|
"No source image is associated with this instance";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -59,49 +59,99 @@ public class TJCompressor {
|
|||||||
*
|
*
|
||||||
* @param height see {@link #setSourceImage} for description
|
* @param height see {@link #setSourceImage} for description
|
||||||
*
|
*
|
||||||
* @param pixelFormat see {@link #setSourceImage} for description
|
* @param pixelFormat pixel format of the source image (one of
|
||||||
|
* {@link TJ TJ.PF_*})
|
||||||
*/
|
*/
|
||||||
public TJCompressor(byte[] srcImage, int width, int pitch, int height,
|
public TJCompressor(byte[] srcImage, int width, int pitch, int height,
|
||||||
int pixelFormat) throws Exception {
|
int pixelFormat) throws Exception {
|
||||||
setSourceImage(srcImage, width, pitch, height, pixelFormat);
|
setSourceImage(srcImage, width, pitch, height, pixelFormat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a TurboJPEG compressor instance and associate the uncompressed
|
||||||
|
* source image stored in <code>srcImage</code> with the newly-created
|
||||||
|
* instance.
|
||||||
|
*
|
||||||
|
* @param srcImage see {@link #setSourceImage} for description
|
||||||
|
*
|
||||||
|
* @param x see {@link #setSourceImage} for description
|
||||||
|
*
|
||||||
|
* @param y see {@link #setSourceImage} for description
|
||||||
|
*
|
||||||
|
* @param width see {@link #setSourceImage} for description
|
||||||
|
*
|
||||||
|
* @param pitch see {@link #setSourceImage} for description
|
||||||
|
*
|
||||||
|
* @param height see {@link #setSourceImage} for description
|
||||||
|
*
|
||||||
|
* @param pixelFormat pixel format of the source image (one of
|
||||||
|
* {@link TJ TJ.PF_*})
|
||||||
|
*/
|
||||||
|
public TJCompressor(byte[] srcImage, int x, int y, int width, int pitch,
|
||||||
|
int height, int pixelFormat) throws Exception {
|
||||||
|
setSourceImage(srcImage, x, y, width, pitch, height, pixelFormat);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Associate an uncompressed source image with this compressor instance.
|
* Associate an uncompressed source image with this compressor instance.
|
||||||
*
|
*
|
||||||
* @param srcImage image buffer containing RGB or grayscale pixels to be
|
* @param srcImage image buffer containing RGB or grayscale pixels to be
|
||||||
* compressed
|
* compressed
|
||||||
*
|
*
|
||||||
* @param width width (in pixels) of the source image
|
* @param x x offset (in pixels) of the region from which the JPEG image
|
||||||
|
* should be compressed, relative to the start of <code>srcImage</code>.
|
||||||
|
*
|
||||||
|
* @param y y offset (in pixels) of the region from which the JPEG image
|
||||||
|
* should be compressed, relative to the start of <code>srcImage</code>.
|
||||||
|
*
|
||||||
|
* @param width width (in pixels) of the region in the source image from
|
||||||
|
* which the JPEG image should be compressed.
|
||||||
*
|
*
|
||||||
* @param pitch bytes per line of the source image. Normally, this should be
|
* @param pitch bytes per line of the source image. Normally, this should be
|
||||||
* <code>width * TJ.pixelSize(pixelFormat)</code> if the source image is
|
* <code>width * TJ.pixelSize(pixelFormat)</code> if the source image is
|
||||||
* unpadded, but you can use this parameter to, for instance, specify that
|
* unpadded, but you can use this parameter to, for instance, specify that
|
||||||
* the scanlines in the source image are padded to 4-byte boundaries, as is
|
* the scanlines in the source image are padded to a 4-byte boundary or to
|
||||||
* the case for Windows bitmaps. You can also be clever and use this
|
* compress a JPEG image from a region of a larger source image. You can
|
||||||
* parameter to skip lines, etc. Setting this parameter to 0 is the
|
* also be clever and use this parameter to skip lines, etc. Setting this
|
||||||
* equivalent of setting it to <code>width *
|
* parameter to 0 is the equivalent of setting it to <code>width *
|
||||||
* TJ.pixelSize(pixelFormat)</code>.
|
* TJ.pixelSize(pixelFormat)</code>.
|
||||||
*
|
*
|
||||||
* @param height height (in pixels) of the source image
|
* @param height height (in pixels) of the region in the source image from
|
||||||
|
* which the JPEG image should be compressed.
|
||||||
*
|
*
|
||||||
* @param pixelFormat pixel format of the source image (one of
|
* @param pixelFormat pixel format of the source image (one of
|
||||||
* {@link TJ TJ.PF_*})
|
* {@link TJ TJ.PF_*})
|
||||||
*/
|
*/
|
||||||
public void setSourceImage(byte[] srcImage, int width, int pitch,
|
public void setSourceImage(byte[] srcImage, int x, int y, int width,
|
||||||
int height, int pixelFormat) throws Exception {
|
int pitch, int height, int pixelFormat)
|
||||||
if(handle == 0) init();
|
throws Exception {
|
||||||
if(srcImage == null || width < 1 || height < 1 || pitch < 0
|
if (handle == 0) init();
|
||||||
|| pixelFormat < 0 || pixelFormat >= TJ.NUMPF)
|
if (srcImage == null || x < 0 || y < 0 || width < 1 || height < 1 ||
|
||||||
|
pitch < 0 || pixelFormat < 0 || pixelFormat >= TJ.NUMPF)
|
||||||
throw new Exception("Invalid argument in setSourceImage()");
|
throw new Exception("Invalid argument in setSourceImage()");
|
||||||
srcBuf = srcImage;
|
srcBuf = srcImage;
|
||||||
srcWidth = width;
|
srcWidth = width;
|
||||||
if(pitch == 0) srcPitch = width * TJ.getPixelSize(pixelFormat);
|
if (pitch == 0)
|
||||||
else srcPitch = pitch;
|
srcPitch = width * TJ.getPixelSize(pixelFormat);
|
||||||
|
else
|
||||||
|
srcPitch = pitch;
|
||||||
srcHeight = height;
|
srcHeight = height;
|
||||||
srcPixelFormat = pixelFormat;
|
srcPixelFormat = pixelFormat;
|
||||||
|
srcX = x;
|
||||||
|
srcY = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use
|
||||||
|
* {@link #setSourceImage(byte[], int, int, int, int, int, int)} instead.
|
||||||
|
*/
|
||||||
|
public void setSourceImage(byte[] srcImage, int width, int pitch,
|
||||||
|
int height, int pixelFormat) throws Exception {
|
||||||
|
setSourceImage(srcImage, 0, 0, width, pitch, height, pixelFormat);
|
||||||
|
srcX = srcY = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the level of chrominance subsampling for subsequent compress/encode
|
* Set the level of chrominance subsampling for subsequent compress/encode
|
||||||
* operations.
|
* operations.
|
||||||
@@ -110,7 +160,7 @@ public class TJCompressor {
|
|||||||
* {@link TJ TJ.SAMP_*})
|
* {@link TJ TJ.SAMP_*})
|
||||||
*/
|
*/
|
||||||
public void setSubsamp(int newSubsamp) throws Exception {
|
public void setSubsamp(int newSubsamp) throws Exception {
|
||||||
if(newSubsamp < 0 || newSubsamp >= TJ.NUMSAMP)
|
if (newSubsamp < 0 || newSubsamp >= TJ.NUMSAMP)
|
||||||
throw new Exception("Invalid argument in setSubsamp()");
|
throw new Exception("Invalid argument in setSubsamp()");
|
||||||
subsamp = newSubsamp;
|
subsamp = newSubsamp;
|
||||||
}
|
}
|
||||||
@@ -122,7 +172,7 @@ public class TJCompressor {
|
|||||||
* 100 = best)
|
* 100 = best)
|
||||||
*/
|
*/
|
||||||
public void setJPEGQuality(int quality) throws Exception {
|
public void setJPEGQuality(int quality) throws Exception {
|
||||||
if(quality < 1 || quality > 100)
|
if (quality < 1 || quality > 100)
|
||||||
throw new Exception("Invalid argument in setJPEGQuality()");
|
throw new Exception("Invalid argument in setJPEGQuality()");
|
||||||
jpegQuality = quality;
|
jpegQuality = quality;
|
||||||
}
|
}
|
||||||
@@ -133,18 +183,27 @@ public class TJCompressor {
|
|||||||
*
|
*
|
||||||
* @param dstBuf buffer that will receive the JPEG image. Use
|
* @param dstBuf buffer that will receive the JPEG image. Use
|
||||||
* {@link TJ#bufSize} to determine the maximum size for this buffer based on
|
* {@link TJ#bufSize} to determine the maximum size for this buffer based on
|
||||||
* the image width and height.
|
* the image width, height, and level of chrominance subsampling.
|
||||||
*
|
*
|
||||||
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
||||||
*/
|
*/
|
||||||
public void compress(byte[] dstBuf, int flags) throws Exception {
|
public void compress(byte[] dstBuf, int flags) throws Exception {
|
||||||
if(dstBuf == null || flags < 0)
|
if (dstBuf == null || flags < 0)
|
||||||
throw new Exception("Invalid argument in compress()");
|
throw new Exception("Invalid argument in compress()");
|
||||||
if(srcBuf == null) throw new Exception(NO_ASSOC_ERROR);
|
if (srcBuf == null)
|
||||||
if(jpegQuality < 0) throw new Exception("JPEG Quality not set");
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
if(subsamp < 0) throw new Exception("Subsampling level not set");
|
if (jpegQuality < 0)
|
||||||
compressedSize = compress(srcBuf, srcWidth, srcPitch,
|
throw new Exception("JPEG Quality not set");
|
||||||
srcHeight, srcPixelFormat, dstBuf, subsamp, jpegQuality, flags);
|
if (subsamp < 0)
|
||||||
|
throw new Exception("Subsampling level not set");
|
||||||
|
if (srcX >= 0 && srcY >= 0)
|
||||||
|
compressedSize = compress(srcBuf, srcX, srcY, srcWidth, srcPitch,
|
||||||
|
srcHeight, srcPixelFormat, dstBuf, subsamp,
|
||||||
|
jpegQuality, flags);
|
||||||
|
else
|
||||||
|
compressedSize = compress(srcBuf, srcWidth, srcPitch, srcHeight,
|
||||||
|
srcPixelFormat, dstBuf, subsamp, jpegQuality,
|
||||||
|
flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -158,7 +217,7 @@ public class TJCompressor {
|
|||||||
* #getCompressedSize} to obtain the size of the JPEG image.
|
* #getCompressedSize} to obtain the size of the JPEG image.
|
||||||
*/
|
*/
|
||||||
public byte[] compress(int flags) throws Exception {
|
public byte[] compress(int flags) throws Exception {
|
||||||
if(srcWidth < 1 || srcHeight < 1)
|
if (srcWidth < 1 || srcHeight < 1)
|
||||||
throw new Exception(NO_ASSOC_ERROR);
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
byte[] buf = new byte[TJ.bufSize(srcWidth, srcHeight, subsamp)];
|
byte[] buf = new byte[TJ.bufSize(srcWidth, srcHeight, subsamp)];
|
||||||
compress(buf, flags);
|
compress(buf, flags);
|
||||||
@@ -174,18 +233,19 @@ public class TJCompressor {
|
|||||||
*
|
*
|
||||||
* @param dstBuf buffer that will receive the JPEG image. Use
|
* @param dstBuf buffer that will receive the JPEG image. Use
|
||||||
* {@link TJ#bufSize} to determine the maximum size for this buffer based on
|
* {@link TJ#bufSize} to determine the maximum size for this buffer based on
|
||||||
* the image width and height.
|
* the image width, height, and level of chrominance subsampling.
|
||||||
*
|
*
|
||||||
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
||||||
*/
|
*/
|
||||||
public void compress(BufferedImage srcImage, byte[] dstBuf, int flags)
|
public void compress(BufferedImage srcImage, byte[] dstBuf, int flags)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
if(srcImage == null || dstBuf == null || flags < 0)
|
if (srcImage == null || dstBuf == null || flags < 0)
|
||||||
throw new Exception("Invalid argument in compress()");
|
throw new Exception("Invalid argument in compress()");
|
||||||
int width = srcImage.getWidth();
|
int width = srcImage.getWidth();
|
||||||
int height = srcImage.getHeight();
|
int height = srcImage.getHeight();
|
||||||
int pixelFormat; boolean intPixels = false;
|
int pixelFormat;
|
||||||
if(byteOrder == null)
|
boolean intPixels = false;
|
||||||
|
if (byteOrder == null)
|
||||||
byteOrder = ByteOrder.nativeOrder();
|
byteOrder = ByteOrder.nativeOrder();
|
||||||
switch(srcImage.getType()) {
|
switch(srcImage.getType()) {
|
||||||
case BufferedImage.TYPE_3BYTE_BGR:
|
case BufferedImage.TYPE_3BYTE_BGR:
|
||||||
@@ -196,7 +256,7 @@ public class TJCompressor {
|
|||||||
case BufferedImage.TYPE_BYTE_GRAY:
|
case BufferedImage.TYPE_BYTE_GRAY:
|
||||||
pixelFormat = TJ.PF_GRAY; break;
|
pixelFormat = TJ.PF_GRAY; break;
|
||||||
case BufferedImage.TYPE_INT_BGR:
|
case BufferedImage.TYPE_INT_BGR:
|
||||||
if(byteOrder == ByteOrder.BIG_ENDIAN)
|
if (byteOrder == ByteOrder.BIG_ENDIAN)
|
||||||
pixelFormat = TJ.PF_XBGR;
|
pixelFormat = TJ.PF_XBGR;
|
||||||
else
|
else
|
||||||
pixelFormat = TJ.PF_RGBX;
|
pixelFormat = TJ.PF_RGBX;
|
||||||
@@ -204,7 +264,7 @@ public class TJCompressor {
|
|||||||
case BufferedImage.TYPE_INT_RGB:
|
case BufferedImage.TYPE_INT_RGB:
|
||||||
case BufferedImage.TYPE_INT_ARGB:
|
case BufferedImage.TYPE_INT_ARGB:
|
||||||
case BufferedImage.TYPE_INT_ARGB_PRE:
|
case BufferedImage.TYPE_INT_ARGB_PRE:
|
||||||
if(byteOrder == ByteOrder.BIG_ENDIAN)
|
if (byteOrder == ByteOrder.BIG_ENDIAN)
|
||||||
pixelFormat = TJ.PF_XRGB;
|
pixelFormat = TJ.PF_XRGB;
|
||||||
else
|
else
|
||||||
pixelFormat = TJ.PF_BGRX;
|
pixelFormat = TJ.PF_BGRX;
|
||||||
@@ -213,28 +273,39 @@ public class TJCompressor {
|
|||||||
throw new Exception("Unsupported BufferedImage format");
|
throw new Exception("Unsupported BufferedImage format");
|
||||||
}
|
}
|
||||||
WritableRaster wr = srcImage.getRaster();
|
WritableRaster wr = srcImage.getRaster();
|
||||||
if(jpegQuality < 0) throw new Exception("JPEG Quality not set");
|
if (jpegQuality < 0)
|
||||||
if(subsamp < 0) throw new Exception("Subsampling level not set");
|
throw new Exception("JPEG Quality not set");
|
||||||
if(intPixels) {
|
if (subsamp < 0)
|
||||||
|
throw new Exception("Subsampling level not set");
|
||||||
|
if (intPixels) {
|
||||||
SinglePixelPackedSampleModel sm =
|
SinglePixelPackedSampleModel sm =
|
||||||
(SinglePixelPackedSampleModel)srcImage.getSampleModel();
|
(SinglePixelPackedSampleModel)srcImage.getSampleModel();
|
||||||
int pitch = sm.getScanlineStride();
|
int stride = sm.getScanlineStride();
|
||||||
DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
|
DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
|
||||||
int[] buf = db.getData();
|
int[] buf = db.getData();
|
||||||
compressedSize = compress(buf, width, pitch, height, pixelFormat, dstBuf,
|
if (srcX >= 0 && srcY >= 0)
|
||||||
subsamp, jpegQuality, flags);
|
compressedSize = compress(buf, srcX, srcY, width, stride, height,
|
||||||
}
|
pixelFormat, dstBuf, subsamp, jpegQuality,
|
||||||
else {
|
flags);
|
||||||
|
else
|
||||||
|
compressedSize = compress(buf, width, stride, height, pixelFormat,
|
||||||
|
dstBuf, subsamp, jpegQuality, flags);
|
||||||
|
} else {
|
||||||
ComponentSampleModel sm =
|
ComponentSampleModel sm =
|
||||||
(ComponentSampleModel)srcImage.getSampleModel();
|
(ComponentSampleModel)srcImage.getSampleModel();
|
||||||
int pixelSize = sm.getPixelStride();
|
int pixelSize = sm.getPixelStride();
|
||||||
if(pixelSize != TJ.getPixelSize(pixelFormat))
|
if (pixelSize != TJ.getPixelSize(pixelFormat))
|
||||||
throw new Exception("Inconsistency between pixel format and pixel size in BufferedImage");
|
throw new Exception("Inconsistency between pixel format and pixel size in BufferedImage");
|
||||||
int pitch = sm.getScanlineStride();
|
int pitch = sm.getScanlineStride();
|
||||||
DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
|
DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
|
||||||
byte[] buf = db.getData();
|
byte[] buf = db.getData();
|
||||||
compressedSize = compress(buf, width, pitch, height, pixelFormat, dstBuf,
|
if (srcX >= 0 && srcY >= 0)
|
||||||
subsamp, jpegQuality, flags);
|
compressedSize = compress(buf, srcX, srcY, width, pitch, height,
|
||||||
|
pixelFormat, dstBuf, subsamp, jpegQuality,
|
||||||
|
flags);
|
||||||
|
else
|
||||||
|
compressedSize = compress(buf, width, pitch, height, pixelFormat,
|
||||||
|
dstBuf, subsamp, jpegQuality, flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -266,13 +337,13 @@ public class TJCompressor {
|
|||||||
* TurboJPEG's underlying codec to produce a planar YUV image that is
|
* TurboJPEG's underlying codec to produce a planar YUV image that is
|
||||||
* suitable for direct video display. Specifically, if the chrominance
|
* suitable for direct video display. Specifically, if the chrominance
|
||||||
* components are subsampled along the horizontal dimension, then the width
|
* components are subsampled along the horizontal dimension, then the width
|
||||||
* of the luminance plane is padded to 2 in the output image (same goes for
|
* of the luminance plane is padded to the nearest multiple of 2 in the
|
||||||
* the height of the luminance plane, if the chrominance components are
|
* output image (same goes for the height of the luminance plane, if the
|
||||||
* subsampled along the vertical dimension.) Also, each line of each plane
|
* chrominance components are subsampled along the vertical dimension.)
|
||||||
* in the output image is padded to 4 bytes. Although this will work with
|
* Also, each line of each plane in the output image is padded to 4 bytes.
|
||||||
* any subsampling option, it is really only useful in combination with
|
* Although this will work with any subsampling option, it is really only
|
||||||
* {@link TJ#SAMP_420}, which produces an image compatible with the I420 (AKA
|
* useful in combination with {@link TJ#SAMP_420}, which produces an image
|
||||||
* "YUV420P") format.
|
* compatible with the I420 (AKA "YUV420P") format.
|
||||||
*
|
*
|
||||||
* @param dstBuf buffer that will receive the YUV planar image. Use
|
* @param dstBuf buffer that will receive the YUV planar image. Use
|
||||||
* {@link TJ#bufSizeYUV} to determine the appropriate size for this buffer
|
* {@link TJ#bufSizeYUV} to determine the appropriate size for this buffer
|
||||||
@@ -281,10 +352,12 @@ public class TJCompressor {
|
|||||||
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
||||||
*/
|
*/
|
||||||
public void encodeYUV(byte[] dstBuf, int flags) throws Exception {
|
public void encodeYUV(byte[] dstBuf, int flags) throws Exception {
|
||||||
if(dstBuf == null || flags < 0)
|
if (dstBuf == null || flags < 0)
|
||||||
throw new Exception("Invalid argument in compress()");
|
throw new Exception("Invalid argument in compress()");
|
||||||
if(srcBuf == null) throw new Exception(NO_ASSOC_ERROR);
|
if (srcBuf == null)
|
||||||
if(subsamp < 0) throw new Exception("Subsampling level not set");
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
|
if (subsamp < 0)
|
||||||
|
throw new Exception("Subsampling level not set");
|
||||||
encodeYUV(srcBuf, srcWidth, srcPitch, srcHeight,
|
encodeYUV(srcBuf, srcWidth, srcPitch, srcHeight,
|
||||||
srcPixelFormat, dstBuf, subsamp, flags);
|
srcPixelFormat, dstBuf, subsamp, flags);
|
||||||
compressedSize = TJ.bufSizeYUV(srcWidth, srcHeight, subsamp);
|
compressedSize = TJ.bufSizeYUV(srcWidth, srcHeight, subsamp);
|
||||||
@@ -300,9 +373,10 @@ public class TJCompressor {
|
|||||||
* @return a buffer containing a YUV planar image
|
* @return a buffer containing a YUV planar image
|
||||||
*/
|
*/
|
||||||
public byte[] encodeYUV(int flags) throws Exception {
|
public byte[] encodeYUV(int flags) throws Exception {
|
||||||
if(srcWidth < 1 || srcHeight < 1)
|
if (srcWidth < 1 || srcHeight < 1)
|
||||||
throw new Exception(NO_ASSOC_ERROR);
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
if(subsamp < 0) throw new Exception("Subsampling level not set");
|
if (subsamp < 0)
|
||||||
|
throw new Exception("Subsampling level not set");
|
||||||
byte[] buf = new byte[TJ.bufSizeYUV(srcWidth, srcHeight, subsamp)];
|
byte[] buf = new byte[TJ.bufSizeYUV(srcWidth, srcHeight, subsamp)];
|
||||||
encodeYUV(buf, flags);
|
encodeYUV(buf, flags);
|
||||||
return buf;
|
return buf;
|
||||||
@@ -324,12 +398,12 @@ public class TJCompressor {
|
|||||||
*/
|
*/
|
||||||
public void encodeYUV(BufferedImage srcImage, byte[] dstBuf, int flags)
|
public void encodeYUV(BufferedImage srcImage, byte[] dstBuf, int flags)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
if(srcImage == null || dstBuf == null || flags < 0)
|
if (srcImage == null || dstBuf == null || flags < 0)
|
||||||
throw new Exception("Invalid argument in encodeYUV()");
|
throw new Exception("Invalid argument in encodeYUV()");
|
||||||
int width = srcImage.getWidth();
|
int width = srcImage.getWidth();
|
||||||
int height = srcImage.getHeight();
|
int height = srcImage.getHeight();
|
||||||
int pixelFormat; boolean intPixels = false;
|
int pixelFormat; boolean intPixels = false;
|
||||||
if(byteOrder == null)
|
if (byteOrder == null)
|
||||||
byteOrder = ByteOrder.nativeOrder();
|
byteOrder = ByteOrder.nativeOrder();
|
||||||
switch(srcImage.getType()) {
|
switch(srcImage.getType()) {
|
||||||
case BufferedImage.TYPE_3BYTE_BGR:
|
case BufferedImage.TYPE_3BYTE_BGR:
|
||||||
@@ -340,7 +414,7 @@ public class TJCompressor {
|
|||||||
case BufferedImage.TYPE_BYTE_GRAY:
|
case BufferedImage.TYPE_BYTE_GRAY:
|
||||||
pixelFormat = TJ.PF_GRAY; break;
|
pixelFormat = TJ.PF_GRAY; break;
|
||||||
case BufferedImage.TYPE_INT_BGR:
|
case BufferedImage.TYPE_INT_BGR:
|
||||||
if(byteOrder == ByteOrder.BIG_ENDIAN)
|
if (byteOrder == ByteOrder.BIG_ENDIAN)
|
||||||
pixelFormat = TJ.PF_XBGR;
|
pixelFormat = TJ.PF_XBGR;
|
||||||
else
|
else
|
||||||
pixelFormat = TJ.PF_RGBX;
|
pixelFormat = TJ.PF_RGBX;
|
||||||
@@ -348,7 +422,7 @@ public class TJCompressor {
|
|||||||
case BufferedImage.TYPE_INT_RGB:
|
case BufferedImage.TYPE_INT_RGB:
|
||||||
case BufferedImage.TYPE_INT_ARGB:
|
case BufferedImage.TYPE_INT_ARGB:
|
||||||
case BufferedImage.TYPE_INT_ARGB_PRE:
|
case BufferedImage.TYPE_INT_ARGB_PRE:
|
||||||
if(byteOrder == ByteOrder.BIG_ENDIAN)
|
if (byteOrder == ByteOrder.BIG_ENDIAN)
|
||||||
pixelFormat = TJ.PF_XRGB;
|
pixelFormat = TJ.PF_XRGB;
|
||||||
else
|
else
|
||||||
pixelFormat = TJ.PF_BGRX;
|
pixelFormat = TJ.PF_BGRX;
|
||||||
@@ -357,21 +431,20 @@ public class TJCompressor {
|
|||||||
throw new Exception("Unsupported BufferedImage format");
|
throw new Exception("Unsupported BufferedImage format");
|
||||||
}
|
}
|
||||||
WritableRaster wr = srcImage.getRaster();
|
WritableRaster wr = srcImage.getRaster();
|
||||||
if(subsamp < 0) throw new Exception("Subsampling level not set");
|
if (subsamp < 0) throw new Exception("Subsampling level not set");
|
||||||
if(intPixels) {
|
if (intPixels) {
|
||||||
SinglePixelPackedSampleModel sm =
|
SinglePixelPackedSampleModel sm =
|
||||||
(SinglePixelPackedSampleModel)srcImage.getSampleModel();
|
(SinglePixelPackedSampleModel)srcImage.getSampleModel();
|
||||||
int pitch = sm.getScanlineStride();
|
int stride = sm.getScanlineStride();
|
||||||
DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
|
DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
|
||||||
int[] buf = db.getData();
|
int[] buf = db.getData();
|
||||||
encodeYUV(buf, width, pitch, height, pixelFormat, dstBuf, subsamp,
|
encodeYUV(buf, width, stride, height, pixelFormat, dstBuf, subsamp,
|
||||||
flags);
|
flags);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
ComponentSampleModel sm =
|
ComponentSampleModel sm =
|
||||||
(ComponentSampleModel)srcImage.getSampleModel();
|
(ComponentSampleModel)srcImage.getSampleModel();
|
||||||
int pixelSize = sm.getPixelStride();
|
int pixelSize = sm.getPixelStride();
|
||||||
if(pixelSize != TJ.getPixelSize(pixelFormat))
|
if (pixelSize != TJ.getPixelSize(pixelFormat))
|
||||||
throw new Exception("Inconsistency between pixel format and pixel size in BufferedImage");
|
throw new Exception("Inconsistency between pixel format and pixel size in BufferedImage");
|
||||||
int pitch = sm.getScanlineStride();
|
int pitch = sm.getScanlineStride();
|
||||||
DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
|
DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
|
||||||
@@ -394,9 +467,9 @@ public class TJCompressor {
|
|||||||
*
|
*
|
||||||
* @return a buffer containing a YUV planar image
|
* @return a buffer containing a YUV planar image
|
||||||
*/
|
*/
|
||||||
public byte[] encodeYUV(BufferedImage srcImage, int flags)
|
public byte[] encodeYUV(BufferedImage srcImage, int flags) throws Exception {
|
||||||
throws Exception {
|
if (subsamp < 0)
|
||||||
if(subsamp < 0) throw new Exception("Subsampling level not set");
|
throw new Exception("Subsampling level not set");
|
||||||
int width = srcImage.getWidth();
|
int width = srcImage.getWidth();
|
||||||
int height = srcImage.getHeight();
|
int height = srcImage.getHeight();
|
||||||
byte[] buf = new byte[TJ.bufSizeYUV(width, height, subsamp)];
|
byte[] buf = new byte[TJ.bufSizeYUV(width, height, subsamp)];
|
||||||
@@ -425,9 +498,8 @@ public class TJCompressor {
|
|||||||
protected void finalize() throws Throwable {
|
protected void finalize() throws Throwable {
|
||||||
try {
|
try {
|
||||||
close();
|
close();
|
||||||
}
|
} catch(Exception e) {
|
||||||
catch(Exception e) {}
|
} finally {
|
||||||
finally {
|
|
||||||
super.finalize();
|
super.finalize();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -438,19 +510,27 @@ public class TJCompressor {
|
|||||||
|
|
||||||
// JPEG size in bytes is returned
|
// JPEG size in bytes is returned
|
||||||
private native int compress(byte[] srcBuf, int width, int pitch,
|
private native int compress(byte[] srcBuf, int width, int pitch,
|
||||||
int height, int pixelFormat, byte[] dstbuf, int jpegSubsamp, int jpegQual,
|
int height, int pixelFormat, byte[] dstBuf, int jpegSubsamp, int jpegQual,
|
||||||
int flags) throws Exception;
|
int flags) throws Exception; // deprecated
|
||||||
|
|
||||||
private native int compress(int[] srcBuf, int width, int pitch,
|
private native int compress(byte[] srcBuf, int x, int y, int width,
|
||||||
int height, int pixelFormat, byte[] dstbuf, int jpegSubsamp, int jpegQual,
|
int pitch, int height, int pixelFormat, byte[] dstBuf, int jpegSubsamp,
|
||||||
int flags) throws Exception;
|
int jpegQual, int flags) throws Exception;
|
||||||
|
|
||||||
|
private native int compress(int[] srcBuf, int width, int stride,
|
||||||
|
int height, int pixelFormat, byte[] dstBuf, int jpegSubsamp, int jpegQual,
|
||||||
|
int flags) throws Exception; // deprecated
|
||||||
|
|
||||||
|
private native int compress(int[] srcBuf, int x, int y, int width,
|
||||||
|
int stride, int height, int pixelFormat, byte[] dstBuf, int jpegSubsamp,
|
||||||
|
int jpegQual, int flags) throws Exception;
|
||||||
|
|
||||||
private native void encodeYUV(byte[] srcBuf, int width, int pitch,
|
private native void encodeYUV(byte[] srcBuf, int width, int pitch,
|
||||||
int height, int pixelFormat, byte[] dstbuf, int subsamp, int flags)
|
int height, int pixelFormat, byte[] dstBuf, int subsamp, int flags)
|
||||||
throws Exception;
|
throws Exception;
|
||||||
|
|
||||||
private native void encodeYUV(int[] srcBuf, int width, int pitch,
|
private native void encodeYUV(int[] srcBuf, int width, int stride,
|
||||||
int height, int pixelFormat, byte[] dstbuf, int subsamp, int flags)
|
int height, int pixelFormat, byte[] dstBuf, int subsamp, int flags)
|
||||||
throws Exception;
|
throws Exception;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@@ -461,6 +541,8 @@ public class TJCompressor {
|
|||||||
private byte[] srcBuf = null;
|
private byte[] srcBuf = null;
|
||||||
private int srcWidth = 0;
|
private int srcWidth = 0;
|
||||||
private int srcHeight = 0;
|
private int srcHeight = 0;
|
||||||
|
private int srcX = -1;
|
||||||
|
private int srcY = -1;
|
||||||
private int srcPitch = 0;
|
private int srcPitch = 0;
|
||||||
private int srcPixelFormat = -1;
|
private int srcPixelFormat = -1;
|
||||||
private int subsamp = -1;
|
private int subsamp = -1;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C)2011 D. R. Commander. All Rights Reserved.
|
* Copyright (C)2011, 2013 D. R. Commander. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@@ -58,18 +58,18 @@ public interface TJCustomFilter {
|
|||||||
* component plane to which <code>coeffBuffer</code> belongs
|
* component plane to which <code>coeffBuffer</code> belongs
|
||||||
*
|
*
|
||||||
* @param componentID ID number of the component plane to which
|
* @param componentID ID number of the component plane to which
|
||||||
* <code>coeffBuffer</code>belongs (Y, Cb, and Cr have, respectively, ID's of
|
* <code>coeffBuffer</code> belongs (Y, U, and V have, respectively, ID's of
|
||||||
* 0, 1, and 2 in typical JPEG images.)
|
* 0, 1, and 2 in typical JPEG images.)
|
||||||
*
|
*
|
||||||
* @param transformID ID number of the transformed image to which
|
* @param transformID ID number of the transformed image to which
|
||||||
* <code>coeffBuffer</code> belongs. This is the same as the index of the
|
* <code>coeffBuffer</code> belongs. This is the same as the index of the
|
||||||
* transform in the transforms array that was passed to {@link
|
* transform in the <code>transforms</code> array that was passed to {@link
|
||||||
* TJTransformer#transform TJTransformer.transform()}.
|
* TJTransformer#transform TJTransformer.transform()}.
|
||||||
*
|
*
|
||||||
* @param transform a {@link TJTransform} instance that specifies the
|
* @param transform a {@link TJTransform} instance that specifies the
|
||||||
* parameters and/or cropping region for this transform
|
* parameters and/or cropping region for this transform
|
||||||
*/
|
*/
|
||||||
public void customFilter(ShortBuffer coeffBuffer, Rectangle bufferRegion,
|
void customFilter(ShortBuffer coeffBuffer, Rectangle bufferRegion,
|
||||||
Rectangle planeRegion, int componentID, int transformID,
|
Rectangle planeRegion, int componentID, int transformID,
|
||||||
TJTransform transform)
|
TJTransform transform)
|
||||||
throws Exception;
|
throws Exception;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C)2011 D. R. Commander. All Rights Reserved.
|
* Copyright (C)2011-2013 D. R. Commander. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@@ -36,7 +36,7 @@ import java.nio.*;
|
|||||||
*/
|
*/
|
||||||
public class TJDecompressor {
|
public class TJDecompressor {
|
||||||
|
|
||||||
private final static String NO_ASSOC_ERROR =
|
private static final String NO_ASSOC_ERROR =
|
||||||
"No JPEG image is associated with this instance";
|
"No JPEG image is associated with this instance";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -82,7 +82,7 @@ public class TJDecompressor {
|
|||||||
* @param imageSize size of the JPEG image (in bytes)
|
* @param imageSize size of the JPEG image (in bytes)
|
||||||
*/
|
*/
|
||||||
public void setJPEGImage(byte[] jpegImage, int imageSize) throws Exception {
|
public void setJPEGImage(byte[] jpegImage, int imageSize) throws Exception {
|
||||||
if(jpegImage == null || imageSize < 1)
|
if (jpegImage == null || imageSize < 1)
|
||||||
throw new Exception("Invalid argument in setJPEGImage()");
|
throw new Exception("Invalid argument in setJPEGImage()");
|
||||||
jpegBuf = jpegImage;
|
jpegBuf = jpegImage;
|
||||||
jpegBufSize = imageSize;
|
jpegBufSize = imageSize;
|
||||||
@@ -97,7 +97,8 @@ public class TJDecompressor {
|
|||||||
* instance
|
* instance
|
||||||
*/
|
*/
|
||||||
public int getWidth() throws Exception {
|
public int getWidth() throws Exception {
|
||||||
if(jpegWidth < 1) throw new Exception(NO_ASSOC_ERROR);
|
if (jpegWidth < 1)
|
||||||
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
return jpegWidth;
|
return jpegWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,7 +110,8 @@ public class TJDecompressor {
|
|||||||
* instance
|
* instance
|
||||||
*/
|
*/
|
||||||
public int getHeight() throws Exception {
|
public int getHeight() throws Exception {
|
||||||
if(jpegHeight < 1) throw new Exception(NO_ASSOC_ERROR);
|
if (jpegHeight < 1)
|
||||||
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
return jpegHeight;
|
return jpegHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,8 +123,9 @@ public class TJDecompressor {
|
|||||||
* associated with this decompressor instance
|
* associated with this decompressor instance
|
||||||
*/
|
*/
|
||||||
public int getSubsamp() throws Exception {
|
public int getSubsamp() throws Exception {
|
||||||
if(jpegSubsamp < 0) throw new Exception(NO_ASSOC_ERROR);
|
if (jpegSubsamp < 0)
|
||||||
if(jpegSubsamp >= TJ.NUMSAMP)
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
|
if (jpegSubsamp >= TJ.NUMSAMP)
|
||||||
throw new Exception("JPEG header information is invalid");
|
throw new Exception("JPEG header information is invalid");
|
||||||
return jpegSubsamp;
|
return jpegSubsamp;
|
||||||
}
|
}
|
||||||
@@ -133,7 +136,8 @@ public class TJDecompressor {
|
|||||||
* @return the JPEG image buffer associated with this decompressor instance
|
* @return the JPEG image buffer associated with this decompressor instance
|
||||||
*/
|
*/
|
||||||
public byte[] getJPEGBuf() throws Exception {
|
public byte[] getJPEGBuf() throws Exception {
|
||||||
if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
|
if (jpegBuf == null)
|
||||||
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
return jpegBuf;
|
return jpegBuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,13 +149,14 @@ public class TJDecompressor {
|
|||||||
* decompressor instance
|
* decompressor instance
|
||||||
*/
|
*/
|
||||||
public int getJPEGSize() throws Exception {
|
public int getJPEGSize() throws Exception {
|
||||||
if(jpegBufSize < 1) throw new Exception(NO_ASSOC_ERROR);
|
if (jpegBufSize < 1)
|
||||||
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
return jpegBufSize;
|
return jpegBufSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the width of the largest scaled down image that the TurboJPEG
|
* Returns the width of the largest scaled-down image that the TurboJPEG
|
||||||
* decompressor can generate without exceeding the desired image width and
|
* decompressor can generate without exceeding the desired image width and
|
||||||
* height.
|
* height.
|
||||||
*
|
*
|
||||||
@@ -165,33 +170,35 @@ public class TJDecompressor {
|
|||||||
* image (in other words, the height will not be considered when determining
|
* image (in other words, the height will not be considered when determining
|
||||||
* the scaled image size.)
|
* the scaled image size.)
|
||||||
*
|
*
|
||||||
* @return the width of the largest scaled down image that the TurboJPEG
|
* @return the width of the largest scaled-down image that the TurboJPEG
|
||||||
* decompressor can generate without exceeding the desired image width and
|
* decompressor can generate without exceeding the desired image width and
|
||||||
* height
|
* height
|
||||||
*/
|
*/
|
||||||
public int getScaledWidth(int desiredWidth, int desiredHeight)
|
public int getScaledWidth(int desiredWidth, int desiredHeight)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
if(jpegWidth < 1 || jpegHeight < 1)
|
if (jpegWidth < 1 || jpegHeight < 1)
|
||||||
throw new Exception(NO_ASSOC_ERROR);
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
if(desiredWidth < 0 || desiredHeight < 0)
|
if (desiredWidth < 0 || desiredHeight < 0)
|
||||||
throw new Exception("Invalid argument in getScaledWidth()");
|
throw new Exception("Invalid argument in getScaledWidth()");
|
||||||
TJScalingFactor sf[] = TJ.getScalingFactors();
|
TJScalingFactor[] sf = TJ.getScalingFactors();
|
||||||
if(desiredWidth == 0) desiredWidth = jpegWidth;
|
if (desiredWidth == 0)
|
||||||
if(desiredHeight == 0) desiredHeight = jpegHeight;
|
desiredWidth = jpegWidth;
|
||||||
|
if (desiredHeight == 0)
|
||||||
|
desiredHeight = jpegHeight;
|
||||||
int scaledWidth = jpegWidth, scaledHeight = jpegHeight;
|
int scaledWidth = jpegWidth, scaledHeight = jpegHeight;
|
||||||
for(int i = 0; i < sf.length; i++) {
|
for (int i = 0; i < sf.length; i++) {
|
||||||
scaledWidth = sf[i].getScaled(jpegWidth);
|
scaledWidth = sf[i].getScaled(jpegWidth);
|
||||||
scaledHeight = sf[i].getScaled(jpegHeight);
|
scaledHeight = sf[i].getScaled(jpegHeight);
|
||||||
if(scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
|
if (scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(scaledWidth > desiredWidth || scaledHeight > desiredHeight)
|
if (scaledWidth > desiredWidth || scaledHeight > desiredHeight)
|
||||||
throw new Exception("Could not scale down to desired image dimensions");
|
throw new Exception("Could not scale down to desired image dimensions");
|
||||||
return scaledWidth;
|
return scaledWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the height of the largest scaled down image that the TurboJPEG
|
* Returns the height of the largest scaled-down image that the TurboJPEG
|
||||||
* decompressor can generate without exceeding the desired image width and
|
* decompressor can generate without exceeding the desired image width and
|
||||||
* height.
|
* height.
|
||||||
*
|
*
|
||||||
@@ -205,27 +212,29 @@ public class TJDecompressor {
|
|||||||
* image (in other words, the height will not be considered when determining
|
* image (in other words, the height will not be considered when determining
|
||||||
* the scaled image size.)
|
* the scaled image size.)
|
||||||
*
|
*
|
||||||
* @return the height of the largest scaled down image that the TurboJPEG
|
* @return the height of the largest scaled-down image that the TurboJPEG
|
||||||
* decompressor can generate without exceeding the desired image width and
|
* decompressor can generate without exceeding the desired image width and
|
||||||
* height
|
* height
|
||||||
*/
|
*/
|
||||||
public int getScaledHeight(int desiredWidth, int desiredHeight)
|
public int getScaledHeight(int desiredWidth, int desiredHeight)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
if(jpegWidth < 1 || jpegHeight < 1)
|
if (jpegWidth < 1 || jpegHeight < 1)
|
||||||
throw new Exception(NO_ASSOC_ERROR);
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
if(desiredWidth < 0 || desiredHeight < 0)
|
if (desiredWidth < 0 || desiredHeight < 0)
|
||||||
throw new Exception("Invalid argument in getScaledHeight()");
|
throw new Exception("Invalid argument in getScaledHeight()");
|
||||||
TJScalingFactor sf[] = TJ.getScalingFactors();
|
TJScalingFactor[] sf = TJ.getScalingFactors();
|
||||||
if(desiredWidth == 0) desiredWidth = jpegWidth;
|
if (desiredWidth == 0)
|
||||||
if(desiredHeight == 0) desiredHeight = jpegHeight;
|
desiredWidth = jpegWidth;
|
||||||
|
if (desiredHeight == 0)
|
||||||
|
desiredHeight = jpegHeight;
|
||||||
int scaledWidth = jpegWidth, scaledHeight = jpegHeight;
|
int scaledWidth = jpegWidth, scaledHeight = jpegHeight;
|
||||||
for(int i = 0; i < sf.length; i++) {
|
for (int i = 0; i < sf.length; i++) {
|
||||||
scaledWidth = sf[i].getScaled(jpegWidth);
|
scaledWidth = sf[i].getScaled(jpegWidth);
|
||||||
scaledHeight = sf[i].getScaled(jpegHeight);
|
scaledHeight = sf[i].getScaled(jpegHeight);
|
||||||
if(scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
|
if (scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(scaledWidth > desiredWidth || scaledHeight > desiredHeight)
|
if (scaledWidth > desiredWidth || scaledHeight > desiredHeight)
|
||||||
throw new Exception("Could not scale down to desired image dimensions");
|
throw new Exception("Could not scale down to desired image dimensions");
|
||||||
return scaledHeight;
|
return scaledHeight;
|
||||||
}
|
}
|
||||||
@@ -239,61 +248,93 @@ public class TJDecompressor {
|
|||||||
* where <code>scaledHeight</code> can be determined by calling <code>
|
* where <code>scaledHeight</code> can be determined by calling <code>
|
||||||
* scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegHeight)
|
* scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegHeight)
|
||||||
* </code> with one of the scaling factors returned from {@link
|
* </code> with one of the scaling factors returned from {@link
|
||||||
* TJ#getScalingFactors} or by calling {@link #getScaledHeight}.
|
* TJ#getScalingFactors} or by calling {@link #getScaledHeight}. However,
|
||||||
|
* the buffer may also be larger than the dimensions of the JPEG image, in
|
||||||
|
* which case the <code>x</code>, <code>y</code>, and <code>pitch</code>
|
||||||
|
* parameters can be used to specify the region into which the JPEG image
|
||||||
|
* should be decompressed.
|
||||||
*
|
*
|
||||||
* @param desiredWidth desired width (in pixels) of the decompressed image.
|
* @param x x offset (in pixels) of the region into which the JPEG image
|
||||||
* If the desired image dimensions are smaller than the dimensions of the
|
* should be decompressed, relative to the start of <code>dstBuf</code>.
|
||||||
* JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG
|
*
|
||||||
* decompressor to generate the largest possible image that will fit within
|
* @param y y offset (in pixels) of the region into which the JPEG image
|
||||||
* the desired dimensions. Setting this to 0 is the same as setting it to
|
* should be decompressed, relative to the start of <code>dstBuf</code>.
|
||||||
* the width of the JPEG image (in other words, the width will not be
|
*
|
||||||
* considered when determining the scaled image size.)
|
* @param desiredWidth desired width (in pixels) of the decompressed image
|
||||||
|
* (or image region.) If the desired image dimensions are different than the
|
||||||
|
* dimensions of the JPEG image being decompressed, then TurboJPEG will use
|
||||||
|
* scaling in the JPEG decompressor to generate the largest possible image
|
||||||
|
* that will fit within the desired dimensions. Setting this to 0 is the
|
||||||
|
* same as setting it to the width of the JPEG image (in other words, the
|
||||||
|
* width will not be considered when determining the scaled image size.)
|
||||||
*
|
*
|
||||||
* @param pitch bytes per line of the destination image. Normally, this
|
* @param pitch bytes per line of the destination image. Normally, this
|
||||||
* should be set to <code>scaledWidth * TJ.pixelSize(pixelFormat)</code> if
|
* should be set to <code>scaledWidth * TJ.pixelSize(pixelFormat)</code> if
|
||||||
* the decompressed image is unpadded, but you can use this to, for instance,
|
* the decompressed image is unpadded, but you can use this to, for instance,
|
||||||
* pad each line of the decompressed image to a 4-byte boundary. NOTE:
|
* pad each line of the decompressed image to a 4-byte boundary or to
|
||||||
|
* decompress the JPEG image into a region of a larger image. NOTE:
|
||||||
* <code>scaledWidth</code> can be determined by calling <code>
|
* <code>scaledWidth</code> can be determined by calling <code>
|
||||||
* scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegWidth)
|
* scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegWidth)
|
||||||
* </code> or by calling {@link #getScaledWidth}. Setting this parameter to
|
* </code> or by calling {@link #getScaledWidth}. Setting this parameter to
|
||||||
* 0 is the equivalent of setting it to <code>scaledWidth *
|
* 0 is the equivalent of setting it to <code>scaledWidth *
|
||||||
* TJ.pixelSize(pixelFormat)</code>.
|
* TJ.pixelSize(pixelFormat)</code>.
|
||||||
*
|
*
|
||||||
* @param desiredHeight desired height (in pixels) of the decompressed image.
|
* @param desiredHeight desired height (in pixels) of the decompressed image
|
||||||
* If the desired image dimensions are smaller than the dimensions of the
|
* (or image region.) If the desired image dimensions are different than the
|
||||||
* JPEG image being decompressed, then TurboJPEG will use scaling in the JPEG
|
* dimensions of the JPEG image being decompressed, then TurboJPEG will use
|
||||||
* decompressor to generate the largest possible image that will fit within
|
* scaling in the JPEG decompressor to generate the largest possible image
|
||||||
* the desired dimensions. Setting this to 0 is the same as setting it to
|
* that will fit within the desired dimensions. Setting this to 0 is the
|
||||||
* the height of the JPEG image (in other words, the height will not be
|
* same as setting it to the height of the JPEG image (in other words, the
|
||||||
* considered when determining the scaled image size.)
|
* height will not be considered when determining the scaled image size.)
|
||||||
*
|
*
|
||||||
* @param pixelFormat pixel format of the decompressed image (one of
|
* @param pixelFormat pixel format of the decompressed image (one of
|
||||||
* {@link TJ TJ.PF_*})
|
* {@link TJ TJ.PF_*})
|
||||||
*
|
*
|
||||||
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
||||||
*/
|
*/
|
||||||
public void decompress(byte[] dstBuf, int desiredWidth, int pitch,
|
public void decompress(byte[] dstBuf, int x, int y, int desiredWidth,
|
||||||
int desiredHeight, int pixelFormat, int flags) throws Exception {
|
int pitch, int desiredHeight, int pixelFormat,
|
||||||
if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
|
int flags) throws Exception {
|
||||||
if(dstBuf == null || desiredWidth < 0 || pitch < 0 || desiredHeight < 0
|
if (jpegBuf == null)
|
||||||
|| pixelFormat < 0 || pixelFormat >= TJ.NUMPF || flags < 0)
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
|
if (dstBuf == null || x < 0 || y < 0 || desiredWidth < 0 || pitch < 0 ||
|
||||||
|
desiredHeight < 0 || pixelFormat < 0 || pixelFormat >= TJ.NUMPF ||
|
||||||
|
flags < 0)
|
||||||
throw new Exception("Invalid argument in decompress()");
|
throw new Exception("Invalid argument in decompress()");
|
||||||
|
if (x > 0 || y > 0)
|
||||||
|
decompress(jpegBuf, jpegBufSize, dstBuf, x, y, desiredWidth, pitch,
|
||||||
|
desiredHeight, pixelFormat, flags);
|
||||||
|
else
|
||||||
decompress(jpegBuf, jpegBufSize, dstBuf, desiredWidth, pitch,
|
decompress(jpegBuf, jpegBufSize, dstBuf, desiredWidth, pitch,
|
||||||
desiredHeight, pixelFormat, flags);
|
desiredHeight, pixelFormat, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use
|
||||||
|
* {@link #decompress(byte[], int, int, int, int, int, int, int)} instead.
|
||||||
|
*/
|
||||||
|
public void decompress(byte[] dstBuf, int desiredWidth, int pitch,
|
||||||
|
int desiredHeight, int pixelFormat, int flags)
|
||||||
|
throws Exception {
|
||||||
|
decompress(dstBuf, 0, 0, desiredWidth, pitch, desiredHeight, pixelFormat,
|
||||||
|
flags);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decompress the JPEG source image associated with this decompressor
|
* Decompress the JPEG source image associated with this decompressor
|
||||||
* instance and return a buffer containing the decompressed image.
|
* instance and return a buffer containing the decompressed image.
|
||||||
*
|
*
|
||||||
* @param desiredWidth see
|
* @param desiredWidth see
|
||||||
* {@link #decompress(byte[], int, int, int, int, int)} for description
|
* {@link #decompress(byte[], int, int, int, int, int, int, int)}
|
||||||
|
* for description
|
||||||
*
|
*
|
||||||
* @param pitch see
|
* @param pitch see
|
||||||
* {@link #decompress(byte[], int, int, int, int, int)} for description
|
* {@link #decompress(byte[], int, int, int, int, int, int, int)}
|
||||||
|
* for description
|
||||||
*
|
*
|
||||||
* @param desiredHeight see
|
* @param desiredHeight see
|
||||||
* {@link #decompress(byte[], int, int, int, int, int)} for description
|
* {@link #decompress(byte[], int, int, int, int, int, int, int)}
|
||||||
|
* for description
|
||||||
*
|
*
|
||||||
* @param pixelFormat pixel format of the decompressed image (one of
|
* @param pixelFormat pixel format of the decompressed image (one of
|
||||||
* {@link TJ TJ.PF_*})
|
* {@link TJ TJ.PF_*})
|
||||||
@@ -304,13 +345,14 @@ public class TJDecompressor {
|
|||||||
*/
|
*/
|
||||||
public byte[] decompress(int desiredWidth, int pitch, int desiredHeight,
|
public byte[] decompress(int desiredWidth, int pitch, int desiredHeight,
|
||||||
int pixelFormat, int flags) throws Exception {
|
int pixelFormat, int flags) throws Exception {
|
||||||
if(desiredWidth < 0 || pitch < 0 || desiredHeight < 0
|
if (desiredWidth < 0 || pitch < 0 || desiredHeight < 0 ||
|
||||||
|| pixelFormat < 0 || pixelFormat >= TJ.NUMPF || flags < 0)
|
pixelFormat < 0 || pixelFormat >= TJ.NUMPF || flags < 0)
|
||||||
throw new Exception("Invalid argument in decompress()");
|
throw new Exception("Invalid argument in decompress()");
|
||||||
int pixelSize = TJ.getPixelSize(pixelFormat);
|
int pixelSize = TJ.getPixelSize(pixelFormat);
|
||||||
int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
|
int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
|
||||||
int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
|
int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
|
||||||
if(pitch == 0) pitch = scaledWidth * pixelSize;
|
if (pitch == 0)
|
||||||
|
pitch = scaledWidth * pixelSize;
|
||||||
byte[] buf = new byte[pitch * scaledHeight];
|
byte[] buf = new byte[pitch * scaledHeight];
|
||||||
decompress(buf, desiredWidth, pitch, desiredHeight, pixelFormat, flags);
|
decompress(buf, desiredWidth, pitch, desiredHeight, pixelFormat, flags);
|
||||||
return buf;
|
return buf;
|
||||||
@@ -321,11 +363,11 @@ public class TJDecompressor {
|
|||||||
* instance and output a YUV planar image to the given destination buffer.
|
* instance and output a YUV planar image to the given destination buffer.
|
||||||
* This method performs JPEG decompression but leaves out the color
|
* This method performs JPEG decompression but leaves out the color
|
||||||
* conversion step, so a planar YUV image is generated instead of an RGB
|
* conversion step, so a planar YUV image is generated instead of an RGB
|
||||||
* image. The padding of the planes in this image is the same as the images
|
* image. The padding of the planes in this image is the same as in the
|
||||||
* generated by {@link TJCompressor#encodeYUV(byte[], int)}. Note that, if
|
* images generated by {@link TJCompressor#encodeYUV(byte[], int)}. Note
|
||||||
* the width or height of the image is not an even multiple of the MCU block
|
* that, if the width or height of the image is not an even multiple of the
|
||||||
* size (see {@link TJ#getMCUWidth} and {@link TJ#getMCUHeight}), then an
|
* MCU block size (see {@link TJ#getMCUWidth} and {@link TJ#getMCUHeight}),
|
||||||
* intermediate buffer copy will be performed within TurboJPEG.
|
* then an intermediate buffer copy will be performed within TurboJPEG.
|
||||||
*
|
*
|
||||||
* @param dstBuf buffer that will receive the YUV planar image. Use
|
* @param dstBuf buffer that will receive the YUV planar image. Use
|
||||||
* {@link TJ#bufSizeYUV} to determine the appropriate size for this buffer
|
* {@link TJ#bufSizeYUV} to determine the appropriate size for this buffer
|
||||||
@@ -334,8 +376,9 @@ public class TJDecompressor {
|
|||||||
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
||||||
*/
|
*/
|
||||||
public void decompressToYUV(byte[] dstBuf, int flags) throws Exception {
|
public void decompressToYUV(byte[] dstBuf, int flags) throws Exception {
|
||||||
if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
|
if (jpegBuf == null)
|
||||||
if(dstBuf == null || flags < 0)
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
|
if (dstBuf == null || flags < 0)
|
||||||
throw new Exception("Invalid argument in decompressToYUV()");
|
throw new Exception("Invalid argument in decompressToYUV()");
|
||||||
decompressToYUV(jpegBuf, jpegBufSize, dstBuf, flags);
|
decompressToYUV(jpegBuf, jpegBufSize, dstBuf, flags);
|
||||||
}
|
}
|
||||||
@@ -351,17 +394,80 @@ public class TJDecompressor {
|
|||||||
* @return a buffer containing a YUV planar image
|
* @return a buffer containing a YUV planar image
|
||||||
*/
|
*/
|
||||||
public byte[] decompressToYUV(int flags) throws Exception {
|
public byte[] decompressToYUV(int flags) throws Exception {
|
||||||
if(flags < 0)
|
if (flags < 0)
|
||||||
throw new Exception("Invalid argument in decompressToYUV()");
|
throw new Exception("Invalid argument in decompressToYUV()");
|
||||||
if(jpegWidth < 1 || jpegHeight < 1 || jpegSubsamp < 0)
|
if (jpegWidth < 1 || jpegHeight < 1 || jpegSubsamp < 0)
|
||||||
throw new Exception(NO_ASSOC_ERROR);
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
if(jpegSubsamp >= TJ.NUMSAMP)
|
if (jpegSubsamp >= TJ.NUMSAMP)
|
||||||
throw new Exception("JPEG header information is invalid");
|
throw new Exception("JPEG header information is invalid");
|
||||||
byte[] buf = new byte[TJ.bufSizeYUV(jpegWidth, jpegHeight, jpegSubsamp)];
|
byte[] buf = new byte[TJ.bufSizeYUV(jpegWidth, jpegHeight, jpegSubsamp)];
|
||||||
decompressToYUV(buf, flags);
|
decompressToYUV(buf, flags);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decompress the JPEG source image associated with this decompressor
|
||||||
|
* instance and output a decompressed image to the given destination buffer.
|
||||||
|
*
|
||||||
|
* @param dstBuf buffer that will receive the decompressed image. This
|
||||||
|
* buffer should normally be <code>stride * scaledHeight</code> pixels in
|
||||||
|
* size, where <code>scaledHeight</code> can be determined by calling <code>
|
||||||
|
* scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegHeight)
|
||||||
|
* </code> with one of the scaling factors returned from {@link
|
||||||
|
* TJ#getScalingFactors} or by calling {@link #getScaledHeight}. However,
|
||||||
|
* the buffer may also be larger than the dimensions of the JPEG image, in
|
||||||
|
* which case the <code>x</code>, <code>y</code>, and <code>stride</code>
|
||||||
|
* parameters can be used to specify the region into which the JPEG image
|
||||||
|
* should be decompressed.
|
||||||
|
*
|
||||||
|
* @param x x offset (in pixels) of the region into which the JPEG image
|
||||||
|
* should be decompressed, relative to the start of <code>dstBuf</code>.
|
||||||
|
*
|
||||||
|
* @param y y offset (in pixels) of the region into which the JPEG image
|
||||||
|
* should be decompressed, relative to the start of <code>dstBuf</code>.
|
||||||
|
*
|
||||||
|
* @param desiredWidth desired width (in pixels) of the decompressed image
|
||||||
|
* (or image region.) If the desired image dimensions are different than the
|
||||||
|
* dimensions of the JPEG image being decompressed, then TurboJPEG will use
|
||||||
|
* scaling in the JPEG decompressor to generate the largest possible image
|
||||||
|
* that will fit within the desired dimensions. Setting this to 0 is the
|
||||||
|
* same as setting it to the width of the JPEG image (in other words, the
|
||||||
|
* width will not be considered when determining the scaled image size.)
|
||||||
|
*
|
||||||
|
* @param stride pixels per line of the destination image. Normally, this
|
||||||
|
* should be set to <code>scaledWidth</code>, but you can use this to, for
|
||||||
|
* instance, decompress the JPEG image into a region of a larger image.
|
||||||
|
* NOTE: <code>scaledWidth</code> can be determined by calling <code>
|
||||||
|
* scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegWidth)
|
||||||
|
* </code> or by calling {@link #getScaledWidth}. Setting this parameter to
|
||||||
|
* 0 is the equivalent of setting it to <code>scaledWidth</code>.
|
||||||
|
*
|
||||||
|
* @param desiredHeight desired height (in pixels) of the decompressed image
|
||||||
|
* (or image region.) If the desired image dimensions are different than the
|
||||||
|
* dimensions of the JPEG image being decompressed, then TurboJPEG will use
|
||||||
|
* scaling in the JPEG decompressor to generate the largest possible image
|
||||||
|
* that will fit within the desired dimensions. Setting this to 0 is the
|
||||||
|
* same as setting it to the height of the JPEG image (in other words, the
|
||||||
|
* height will not be considered when determining the scaled image size.)
|
||||||
|
*
|
||||||
|
* @param pixelFormat pixel format of the decompressed image (one of
|
||||||
|
* {@link TJ TJ.PF_*})
|
||||||
|
*
|
||||||
|
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
||||||
|
*/
|
||||||
|
public void decompress(int[] dstBuf, int x, int y, int desiredWidth,
|
||||||
|
int stride, int desiredHeight, int pixelFormat,
|
||||||
|
int flags) throws Exception {
|
||||||
|
if (jpegBuf == null)
|
||||||
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
|
if (dstBuf == null || x < 0 || y < 0 || desiredWidth < 0 || stride < 0 ||
|
||||||
|
desiredHeight < 0 || pixelFormat < 0 || pixelFormat >= TJ.NUMPF ||
|
||||||
|
flags < 0)
|
||||||
|
throw new Exception("Invalid argument in decompress()");
|
||||||
|
decompress(jpegBuf, jpegBufSize, dstBuf, x, y, desiredWidth, stride,
|
||||||
|
desiredHeight, pixelFormat, flags);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decompress the JPEG source image associated with this decompressor
|
* Decompress the JPEG source image associated with this decompressor
|
||||||
* instance and output a decompressed image to the given
|
* instance and output a decompressed image to the given
|
||||||
@@ -373,16 +479,16 @@ public class TJDecompressor {
|
|||||||
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
|
||||||
*/
|
*/
|
||||||
public void decompress(BufferedImage dstImage, int flags) throws Exception {
|
public void decompress(BufferedImage dstImage, int flags) throws Exception {
|
||||||
if(dstImage == null || flags < 0)
|
if (dstImage == null || flags < 0)
|
||||||
throw new Exception("Invalid argument in decompress()");
|
throw new Exception("Invalid argument in decompress()");
|
||||||
int desiredWidth = dstImage.getWidth();
|
int desiredWidth = dstImage.getWidth();
|
||||||
int desiredHeight = dstImage.getHeight();
|
int desiredHeight = dstImage.getHeight();
|
||||||
int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
|
int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
|
||||||
int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
|
int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
|
||||||
if(scaledWidth != desiredWidth || scaledHeight != desiredHeight)
|
if (scaledWidth != desiredWidth || scaledHeight != desiredHeight)
|
||||||
throw new Exception("BufferedImage dimensions do not match a scaled image size that TurboJPEG is capable of generating.");
|
throw new Exception("BufferedImage dimensions do not match a scaled image size that TurboJPEG is capable of generating.");
|
||||||
int pixelFormat; boolean intPixels = false;
|
int pixelFormat; boolean intPixels = false;
|
||||||
if(byteOrder == null)
|
if (byteOrder == null)
|
||||||
byteOrder = ByteOrder.nativeOrder();
|
byteOrder = ByteOrder.nativeOrder();
|
||||||
switch(dstImage.getType()) {
|
switch(dstImage.getType()) {
|
||||||
case BufferedImage.TYPE_3BYTE_BGR:
|
case BufferedImage.TYPE_3BYTE_BGR:
|
||||||
@@ -393,20 +499,20 @@ public class TJDecompressor {
|
|||||||
case BufferedImage.TYPE_BYTE_GRAY:
|
case BufferedImage.TYPE_BYTE_GRAY:
|
||||||
pixelFormat = TJ.PF_GRAY; break;
|
pixelFormat = TJ.PF_GRAY; break;
|
||||||
case BufferedImage.TYPE_INT_BGR:
|
case BufferedImage.TYPE_INT_BGR:
|
||||||
if(byteOrder == ByteOrder.BIG_ENDIAN)
|
if (byteOrder == ByteOrder.BIG_ENDIAN)
|
||||||
pixelFormat = TJ.PF_XBGR;
|
pixelFormat = TJ.PF_XBGR;
|
||||||
else
|
else
|
||||||
pixelFormat = TJ.PF_RGBX;
|
pixelFormat = TJ.PF_RGBX;
|
||||||
intPixels = true; break;
|
intPixels = true; break;
|
||||||
case BufferedImage.TYPE_INT_RGB:
|
case BufferedImage.TYPE_INT_RGB:
|
||||||
if(byteOrder == ByteOrder.BIG_ENDIAN)
|
if (byteOrder == ByteOrder.BIG_ENDIAN)
|
||||||
pixelFormat = TJ.PF_XRGB;
|
pixelFormat = TJ.PF_XRGB;
|
||||||
else
|
else
|
||||||
pixelFormat = TJ.PF_BGRX;
|
pixelFormat = TJ.PF_BGRX;
|
||||||
intPixels = true; break;
|
intPixels = true; break;
|
||||||
case BufferedImage.TYPE_INT_ARGB:
|
case BufferedImage.TYPE_INT_ARGB:
|
||||||
case BufferedImage.TYPE_INT_ARGB_PRE:
|
case BufferedImage.TYPE_INT_ARGB_PRE:
|
||||||
if(byteOrder == ByteOrder.BIG_ENDIAN)
|
if (byteOrder == ByteOrder.BIG_ENDIAN)
|
||||||
pixelFormat = TJ.PF_ARGB;
|
pixelFormat = TJ.PF_ARGB;
|
||||||
else
|
else
|
||||||
pixelFormat = TJ.PF_BGRA;
|
pixelFormat = TJ.PF_BGRA;
|
||||||
@@ -415,21 +521,21 @@ public class TJDecompressor {
|
|||||||
throw new Exception("Unsupported BufferedImage format");
|
throw new Exception("Unsupported BufferedImage format");
|
||||||
}
|
}
|
||||||
WritableRaster wr = dstImage.getRaster();
|
WritableRaster wr = dstImage.getRaster();
|
||||||
if(intPixels) {
|
if (intPixels) {
|
||||||
SinglePixelPackedSampleModel sm =
|
SinglePixelPackedSampleModel sm =
|
||||||
(SinglePixelPackedSampleModel)dstImage.getSampleModel();
|
(SinglePixelPackedSampleModel)dstImage.getSampleModel();
|
||||||
int pitch = sm.getScanlineStride();
|
int stride = sm.getScanlineStride();
|
||||||
DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
|
DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
|
||||||
int[] buf = db.getData();
|
int[] buf = db.getData();
|
||||||
if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
|
if (jpegBuf == null)
|
||||||
decompress(jpegBuf, jpegBufSize, buf, scaledWidth, pitch, scaledHeight,
|
throw new Exception(NO_ASSOC_ERROR);
|
||||||
|
decompress(jpegBuf, jpegBufSize, buf, scaledWidth, stride, scaledHeight,
|
||||||
pixelFormat, flags);
|
pixelFormat, flags);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
ComponentSampleModel sm =
|
ComponentSampleModel sm =
|
||||||
(ComponentSampleModel)dstImage.getSampleModel();
|
(ComponentSampleModel)dstImage.getSampleModel();
|
||||||
int pixelSize = sm.getPixelStride();
|
int pixelSize = sm.getPixelStride();
|
||||||
if(pixelSize != TJ.getPixelSize(pixelFormat))
|
if (pixelSize != TJ.getPixelSize(pixelFormat))
|
||||||
throw new Exception("Inconsistency between pixel format and pixel size in BufferedImage");
|
throw new Exception("Inconsistency between pixel format and pixel size in BufferedImage");
|
||||||
int pitch = sm.getScanlineStride();
|
int pitch = sm.getScanlineStride();
|
||||||
DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
|
DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
|
||||||
@@ -444,10 +550,12 @@ public class TJDecompressor {
|
|||||||
* decompressed image.
|
* decompressed image.
|
||||||
*
|
*
|
||||||
* @param desiredWidth see
|
* @param desiredWidth see
|
||||||
* {@link #decompress(byte[], int, int, int, int, int)} for description
|
* {@link #decompress(byte[], int, int, int, int, int, int, int)} for
|
||||||
|
* description
|
||||||
*
|
*
|
||||||
* @param desiredHeight see
|
* @param desiredHeight see
|
||||||
* {@link #decompress(byte[], int, int, int, int, int)} for description
|
* {@link #decompress(byte[], int, int, int, int, int, int, int)} for
|
||||||
|
* description
|
||||||
*
|
*
|
||||||
* @param bufferedImageType the image type of the newly-created
|
* @param bufferedImageType the image type of the newly-created
|
||||||
* <code>BufferedImage</code> instance (for instance,
|
* <code>BufferedImage</code> instance (for instance,
|
||||||
@@ -459,8 +567,9 @@ public class TJDecompressor {
|
|||||||
* decompressed image
|
* decompressed image
|
||||||
*/
|
*/
|
||||||
public BufferedImage decompress(int desiredWidth, int desiredHeight,
|
public BufferedImage decompress(int desiredWidth, int desiredHeight,
|
||||||
int bufferedImageType, int flags) throws Exception {
|
int bufferedImageType, int flags)
|
||||||
if(desiredWidth < 0 || desiredHeight < 0 || flags < 0)
|
throws Exception {
|
||||||
|
if (desiredWidth < 0 || desiredHeight < 0 || flags < 0)
|
||||||
throw new Exception("Invalid argument in decompress()");
|
throw new Exception("Invalid argument in decompress()");
|
||||||
int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
|
int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
|
||||||
int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
|
int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
|
||||||
@@ -480,9 +589,8 @@ public class TJDecompressor {
|
|||||||
protected void finalize() throws Throwable {
|
protected void finalize() throws Throwable {
|
||||||
try {
|
try {
|
||||||
close();
|
close();
|
||||||
}
|
} catch(Exception e) {
|
||||||
catch(Exception e) {}
|
} finally {
|
||||||
finally {
|
|
||||||
super.finalize();
|
super.finalize();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -496,15 +604,22 @@ public class TJDecompressor {
|
|||||||
|
|
||||||
private native void decompress(byte[] srcBuf, int size, byte[] dstBuf,
|
private native void decompress(byte[] srcBuf, int size, byte[] dstBuf,
|
||||||
int desiredWidth, int pitch, int desiredHeight, int pixelFormat, int flags)
|
int desiredWidth, int pitch, int desiredHeight, int pixelFormat, int flags)
|
||||||
throws Exception;
|
throws Exception; // deprecated
|
||||||
|
|
||||||
|
private native void decompress(byte[] srcBuf, int size, byte[] dstBuf, int x,
|
||||||
|
int y, int desiredWidth, int pitch, int desiredHeight, int pixelFormat,
|
||||||
|
int flags) throws Exception;
|
||||||
|
|
||||||
private native void decompress(byte[] srcBuf, int size, int[] dstBuf,
|
private native void decompress(byte[] srcBuf, int size, int[] dstBuf,
|
||||||
int desiredWidth, int pitch, int desiredHeight, int pixelFormat, int flags)
|
int desiredWidth, int stride, int desiredHeight, int pixelFormat,
|
||||||
throws Exception;
|
int flags) throws Exception; // deprecated
|
||||||
|
|
||||||
|
private native void decompress(byte[] srcBuf, int size, int[] dstBuf, int x,
|
||||||
|
int y, int desiredWidth, int stride, int desiredHeight, int pixelFormat,
|
||||||
|
int flags) throws Exception;
|
||||||
|
|
||||||
private native void decompressToYUV(byte[] srcBuf, int size, byte[] dstBuf,
|
private native void decompressToYUV(byte[] srcBuf, int size, byte[] dstBuf,
|
||||||
int flags)
|
int flags) throws Exception;
|
||||||
throws Exception;
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
TJLoader.load();
|
TJLoader.load();
|
||||||
|
|||||||
59
java/org/libjpegturbo/turbojpeg/TJLoader.java.tmpl
Normal file
59
java/org/libjpegturbo/turbojpeg/TJLoader.java.tmpl
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C)2011-2013 D. R. Commander. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* - Neither the name of the libjpeg-turbo Project nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.libjpegturbo.turbojpeg;
|
||||||
|
|
||||||
|
final class TJLoader {
|
||||||
|
static void load() {
|
||||||
|
try {
|
||||||
|
System.loadLibrary("turbojpeg");
|
||||||
|
} catch (java.lang.UnsatisfiedLinkError e) {
|
||||||
|
String os = System.getProperty("os.name").toLowerCase();
|
||||||
|
if (os.indexOf("mac") >= 0) {
|
||||||
|
try {
|
||||||
|
System.load("%{__libdir}/libturbojpeg.jnilib");
|
||||||
|
} catch (java.lang.UnsatisfiedLinkError e2) {
|
||||||
|
System.load("/usr/lib/libturbojpeg.jnilib");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
System.load("%{__libdir}/libturbojpeg.so");
|
||||||
|
} catch (java.lang.UnsatisfiedLinkError e3) {
|
||||||
|
String libdir = "%{__libdir}";
|
||||||
|
if (libdir.equals("/opt/libjpeg-turbo/lib64")) {
|
||||||
|
System.load("/opt/libjpeg-turbo/lib32/libturbojpeg.so");
|
||||||
|
} else if (libdir.equals("/opt/libjpeg-turbo/lib32")) {
|
||||||
|
System.load("/opt/libjpeg-turbo/lib64/libturbojpeg.so");
|
||||||
|
} else {
|
||||||
|
throw e3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -34,7 +34,7 @@ package org.libjpegturbo.turbojpeg;
|
|||||||
public class TJScalingFactor {
|
public class TJScalingFactor {
|
||||||
|
|
||||||
public TJScalingFactor(int num, int denom) throws Exception {
|
public TJScalingFactor(int num, int denom) throws Exception {
|
||||||
if(num < 1 || denom < 1)
|
if (num < 1 || denom < 1)
|
||||||
throw new Exception("Numerator and denominator must be >= 1");
|
throw new Exception("Numerator and denominator must be >= 1");
|
||||||
this.num = num;
|
this.num = num;
|
||||||
this.denom = denom;
|
this.denom = denom;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C)2011 D. R. Commander. All Rights Reserved.
|
* Copyright (C)2011, 2013 D. R. Commander. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@@ -40,54 +40,54 @@ public class TJTransform extends Rectangle {
|
|||||||
/**
|
/**
|
||||||
* The number of lossless transform operations
|
* The number of lossless transform operations
|
||||||
*/
|
*/
|
||||||
final public static int NUMOP = 8;
|
public static final int NUMOP = 8;
|
||||||
/**
|
/**
|
||||||
* Do not transform the position of the image pixels.
|
* Do not transform the position of the image pixels.
|
||||||
*/
|
*/
|
||||||
final public static int OP_NONE = 0;
|
public static final int OP_NONE = 0;
|
||||||
/**
|
/**
|
||||||
* Flip (mirror) image horizontally. This transform is imperfect if there
|
* Flip (mirror) image horizontally. This transform is imperfect if there
|
||||||
* are any partial MCU blocks on the right edge.
|
* are any partial MCU blocks on the right edge.
|
||||||
* @see #OPT_PERFECT
|
* @see #OPT_PERFECT
|
||||||
*/
|
*/
|
||||||
final public static int OP_HFLIP = 1;
|
public static final int OP_HFLIP = 1;
|
||||||
/**
|
/**
|
||||||
* Flip (mirror) image vertically. This transform is imperfect if there are
|
* Flip (mirror) image vertically. This transform is imperfect if there are
|
||||||
* any partial MCU blocks on the bottom edge.
|
* any partial MCU blocks on the bottom edge.
|
||||||
* @see #OPT_PERFECT
|
* @see #OPT_PERFECT
|
||||||
*/
|
*/
|
||||||
final public static int OP_VFLIP = 2;
|
public static final int OP_VFLIP = 2;
|
||||||
/**
|
/**
|
||||||
* Transpose image (flip/mirror along upper left to lower right axis). This
|
* Transpose image (flip/mirror along upper left to lower right axis). This
|
||||||
* transform is always perfect.
|
* transform is always perfect.
|
||||||
* @see #OPT_PERFECT
|
* @see #OPT_PERFECT
|
||||||
*/
|
*/
|
||||||
final public static int OP_TRANSPOSE = 3;
|
public static final int OP_TRANSPOSE = 3;
|
||||||
/**
|
/**
|
||||||
* Transverse transpose image (flip/mirror along upper right to lower left
|
* Transverse transpose image (flip/mirror along upper right to lower left
|
||||||
* axis). This transform is imperfect if there are any partial MCU blocks in
|
* axis). This transform is imperfect if there are any partial MCU blocks in
|
||||||
* the image.
|
* the image.
|
||||||
* @see #OPT_PERFECT
|
* @see #OPT_PERFECT
|
||||||
*/
|
*/
|
||||||
final public static int OP_TRANSVERSE = 4;
|
public static final int OP_TRANSVERSE = 4;
|
||||||
/**
|
/**
|
||||||
* Rotate image clockwise by 90 degrees. This transform is imperfect if
|
* Rotate image clockwise by 90 degrees. This transform is imperfect if
|
||||||
* there are any partial MCU blocks on the bottom edge.
|
* there are any partial MCU blocks on the bottom edge.
|
||||||
* @see #OPT_PERFECT
|
* @see #OPT_PERFECT
|
||||||
*/
|
*/
|
||||||
final public static int OP_ROT90 = 5;
|
public static final int OP_ROT90 = 5;
|
||||||
/**
|
/**
|
||||||
* Rotate image 180 degrees. This transform is imperfect if there are any
|
* Rotate image 180 degrees. This transform is imperfect if there are any
|
||||||
* partial MCU blocks in the image.
|
* partial MCU blocks in the image.
|
||||||
* @see #OPT_PERFECT
|
* @see #OPT_PERFECT
|
||||||
*/
|
*/
|
||||||
final public static int OP_ROT180 = 6;
|
public static final int OP_ROT180 = 6;
|
||||||
/**
|
/**
|
||||||
* Rotate image counter-clockwise by 90 degrees. This transform is imperfect
|
* Rotate image counter-clockwise by 90 degrees. This transform is imperfect
|
||||||
* if there are any partial MCU blocks on the right edge.
|
* if there are any partial MCU blocks on the right edge.
|
||||||
* @see #OPT_PERFECT
|
* @see #OPT_PERFECT
|
||||||
*/
|
*/
|
||||||
final public static int OP_ROT270 = 7;
|
public static final int OP_ROT270 = 7;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -103,21 +103,21 @@ public class TJTransform extends Rectangle {
|
|||||||
* partial MCU blocks that cannot be transformed will be left in place, which
|
* partial MCU blocks that cannot be transformed will be left in place, which
|
||||||
* will create odd-looking strips on the right or bottom edge of the image.
|
* will create odd-looking strips on the right or bottom edge of the image.
|
||||||
*/
|
*/
|
||||||
final public static int OPT_PERFECT = 1;
|
public static final int OPT_PERFECT = 1;
|
||||||
/**
|
/**
|
||||||
* This option will discard any partial MCU blocks that cannot be
|
* This option will discard any partial MCU blocks that cannot be
|
||||||
* transformed.
|
* transformed.
|
||||||
*/
|
*/
|
||||||
final public static int OPT_TRIM = 2;
|
public static final int OPT_TRIM = 2;
|
||||||
/**
|
/**
|
||||||
* This option will enable lossless cropping.
|
* This option will enable lossless cropping.
|
||||||
*/
|
*/
|
||||||
final public static int OPT_CROP = 4;
|
public static final int OPT_CROP = 4;
|
||||||
/**
|
/**
|
||||||
* This option will discard the color data in the input image and produce
|
* This option will discard the color data in the input image and produce
|
||||||
* a grayscale output image.
|
* a grayscale output image.
|
||||||
*/
|
*/
|
||||||
final public static int OPT_GRAY = 8;
|
public static final int OPT_GRAY = 8;
|
||||||
/**
|
/**
|
||||||
* This option will prevent {@link TJTransformer#transform
|
* This option will prevent {@link TJTransformer#transform
|
||||||
* TJTransformer.transform()} from outputting a JPEG image for this
|
* TJTransformer.transform()} from outputting a JPEG image for this
|
||||||
@@ -125,7 +125,7 @@ public class TJTransform extends Rectangle {
|
|||||||
* filter to capture the transformed DCT coefficients without transcoding
|
* filter to capture the transformed DCT coefficients without transcoding
|
||||||
* them.
|
* them.
|
||||||
*/
|
*/
|
||||||
final public static int OPT_NOOUTPUT = 16;
|
public static final int OPT_NOOUTPUT = 16;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -144,10 +144,12 @@ public class TJTransform extends Rectangle {
|
|||||||
* divisible by the MCU block height (see {@link TJ#getMCUHeight})
|
* divisible by the MCU block height (see {@link TJ#getMCUHeight})
|
||||||
*
|
*
|
||||||
* @param w the width of the cropping region. Setting this to 0 is the
|
* @param w the width of the cropping region. Setting this to 0 is the
|
||||||
* equivalent of setting it to the width of the source JPEG image - x.
|
* equivalent of setting it to (width of the source JPEG image -
|
||||||
|
* <code>x</code>).
|
||||||
*
|
*
|
||||||
* @param h the height of the cropping region. Setting this to 0 is the
|
* @param h the height of the cropping region. Setting this to 0 is the
|
||||||
* equivalent of setting it to the height of the source JPEG image - y.
|
* equivalent of setting it to (height of the source JPEG image -
|
||||||
|
* <code>y</code>).
|
||||||
*
|
*
|
||||||
* @param op one of the transform operations (<code>OP_*</code>)
|
* @param op one of the transform operations (<code>OP_*</code>)
|
||||||
*
|
*
|
||||||
@@ -160,7 +162,9 @@ public class TJTransform extends Rectangle {
|
|||||||
public TJTransform(int x, int y, int w, int h, int op, int options,
|
public TJTransform(int x, int y, int w, int h, int op, int options,
|
||||||
TJCustomFilter cf) throws Exception {
|
TJCustomFilter cf) throws Exception {
|
||||||
super(x, y, w, h);
|
super(x, y, w, h);
|
||||||
this.op = op; this.options = options; this.cf = cf;
|
this.op = op;
|
||||||
|
this.options = options;
|
||||||
|
this.cf = cf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -182,7 +186,9 @@ public class TJTransform extends Rectangle {
|
|||||||
public TJTransform(Rectangle r, int op, int options,
|
public TJTransform(Rectangle r, int op, int options,
|
||||||
TJCustomFilter cf) throws Exception {
|
TJCustomFilter cf) throws Exception {
|
||||||
super(r);
|
super(r);
|
||||||
this.op = op; this.options = options; this.cf = cf;
|
this.op = op;
|
||||||
|
this.options = options;
|
||||||
|
this.cf = cf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C)2011 D. R. Commander. All Rights Reserved.
|
* Copyright (C)2011, 2013 D. R. Commander. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@@ -73,17 +73,18 @@ public class TJTransformer extends TJDecompressor {
|
|||||||
* JPEG image structure to another without altering the values of the
|
* JPEG image structure to another without altering the values of the
|
||||||
* coefficients. While this is typically faster than decompressing the
|
* coefficients. While this is typically faster than decompressing the
|
||||||
* image, transforming it, and re-compressing it, lossless transforms are not
|
* image, transforming it, and re-compressing it, lossless transforms are not
|
||||||
* free. Each lossless transform requires reading and Huffman decoding all
|
* free. Each lossless transform requires reading and performing Huffman
|
||||||
* of the coefficients in the source image, regardless of the size of the
|
* decoding on all of the coefficients in the source image, regardless of the
|
||||||
* destination image. Thus, this method provides a means of generating
|
* size of the destination image. Thus, this method provides a means of
|
||||||
* multiple transformed images from the same source or of applying multiple
|
* generating multiple transformed images from the same source or of applying
|
||||||
* transformations simultaneously, in order to eliminate the need to read the
|
* multiple transformations simultaneously, in order to eliminate the need to
|
||||||
* source coefficients multiple times.
|
* read the source coefficients multiple times.
|
||||||
*
|
*
|
||||||
* @param dstBufs an array of image buffers. <code>dstbufs[i]</code> will
|
* @param dstBufs an array of image buffers. <code>dstbufs[i]</code> will
|
||||||
* receive a JPEG image that has been transformed using the parameters in
|
* receive a JPEG image that has been transformed using the parameters in
|
||||||
* <code>transforms[i]</code>. Use {@link TJ#bufSize} to determine the
|
* <code>transforms[i]</code>. Use {@link TJ#bufSize} to determine the
|
||||||
* maximum size for each buffer based on the cropped width and height.
|
* maximum size for each buffer based on the transformed or cropped width and
|
||||||
|
* height.
|
||||||
*
|
*
|
||||||
* @param transforms an array of {@link TJTransform} instances, each of
|
* @param transforms an array of {@link TJTransform} instances, each of
|
||||||
* which specifies the transform parameters and/or cropping region for the
|
* which specifies the transform parameters and/or cropping region for the
|
||||||
@@ -93,7 +94,8 @@ public class TJTransformer extends TJDecompressor {
|
|||||||
*/
|
*/
|
||||||
public void transform(byte[][] dstBufs, TJTransform[] transforms,
|
public void transform(byte[][] dstBufs, TJTransform[] transforms,
|
||||||
int flags) throws Exception {
|
int flags) throws Exception {
|
||||||
if(jpegBuf == null) throw new Exception("JPEG buffer not initialized");
|
if (jpegBuf == null)
|
||||||
|
throw new Exception("JPEG buffer not initialized");
|
||||||
transformedSizes = transform(jpegBuf, jpegBufSize, dstBufs, transforms,
|
transformedSizes = transform(jpegBuf, jpegBufSize, dstBufs, transforms,
|
||||||
flags);
|
flags);
|
||||||
}
|
}
|
||||||
@@ -115,19 +117,19 @@ public class TJTransformer extends TJDecompressor {
|
|||||||
public TJDecompressor[] transform(TJTransform[] transforms, int flags)
|
public TJDecompressor[] transform(TJTransform[] transforms, int flags)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
byte[][] dstBufs = new byte[transforms.length][];
|
byte[][] dstBufs = new byte[transforms.length][];
|
||||||
if(jpegWidth < 1 || jpegHeight < 1)
|
if (jpegWidth < 1 || jpegHeight < 1)
|
||||||
throw new Exception("JPEG buffer not initialized");
|
throw new Exception("JPEG buffer not initialized");
|
||||||
for(int i = 0; i < transforms.length; i++) {
|
for (int i = 0; i < transforms.length; i++) {
|
||||||
int w = jpegWidth, h = jpegHeight;
|
int w = jpegWidth, h = jpegHeight;
|
||||||
if((transforms[i].options & TJTransform.OPT_CROP) != 0) {
|
if ((transforms[i].options & TJTransform.OPT_CROP) != 0) {
|
||||||
if(transforms[i].width != 0) w = transforms[i].width;
|
if (transforms[i].width != 0) w = transforms[i].width;
|
||||||
if(transforms[i].height != 0) h = transforms[i].height;
|
if (transforms[i].height != 0) h = transforms[i].height;
|
||||||
}
|
}
|
||||||
dstBufs[i] = new byte[TJ.bufSize(w, h, jpegSubsamp)];
|
dstBufs[i] = new byte[TJ.bufSize(w, h, jpegSubsamp)];
|
||||||
}
|
}
|
||||||
TJDecompressor[] tjd = new TJDecompressor[transforms.length];
|
TJDecompressor[] tjd = new TJDecompressor[transforms.length];
|
||||||
transform(dstBufs, transforms, flags);
|
transform(dstBufs, transforms, flags);
|
||||||
for(int i = 0; i < transforms.length; i++)
|
for (int i = 0; i < transforms.length; i++)
|
||||||
tjd[i] = new TJDecompressor(dstBufs[i], transformedSizes[i]);
|
tjd[i] = new TJDecompressor(dstBufs[i], transformedSizes[i]);
|
||||||
return tjd;
|
return tjd;
|
||||||
}
|
}
|
||||||
@@ -140,7 +142,7 @@ public class TJTransformer extends TJDecompressor {
|
|||||||
* the most recent call to {@link #transform transform()}
|
* the most recent call to {@link #transform transform()}
|
||||||
*/
|
*/
|
||||||
public int[] getTransformedSizes() throws Exception {
|
public int[] getTransformedSizes() throws Exception {
|
||||||
if(transformedSizes == null)
|
if (transformedSizes == null)
|
||||||
throw new Exception("No image has been transformed yet");
|
throw new Exception("No image has been transformed yet");
|
||||||
return transformedSizes;
|
return transformedSizes;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,6 +55,10 @@ extern "C" {
|
|||||||
#define org_libjpegturbo_turbojpeg_TJ_FLAG_FORCESSE3 128L
|
#define org_libjpegturbo_turbojpeg_TJ_FLAG_FORCESSE3 128L
|
||||||
#undef org_libjpegturbo_turbojpeg_TJ_FLAG_FASTUPSAMPLE
|
#undef org_libjpegturbo_turbojpeg_TJ_FLAG_FASTUPSAMPLE
|
||||||
#define org_libjpegturbo_turbojpeg_TJ_FLAG_FASTUPSAMPLE 256L
|
#define org_libjpegturbo_turbojpeg_TJ_FLAG_FASTUPSAMPLE 256L
|
||||||
|
#undef org_libjpegturbo_turbojpeg_TJ_FLAG_FASTDCT
|
||||||
|
#define org_libjpegturbo_turbojpeg_TJ_FLAG_FASTDCT 2048L
|
||||||
|
#undef org_libjpegturbo_turbojpeg_TJ_FLAG_ACCURATEDCT
|
||||||
|
#define org_libjpegturbo_turbojpeg_TJ_FLAG_ACCURATEDCT 4096L
|
||||||
/*
|
/*
|
||||||
* Class: org_libjpegturbo_turbojpeg_TJ
|
* Class: org_libjpegturbo_turbojpeg_TJ
|
||||||
* Method: bufSize
|
* Method: bufSize
|
||||||
|
|||||||
@@ -31,6 +31,14 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_destroy
|
|||||||
JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3BIIII_3BIII
|
JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3BIIII_3BIII
|
||||||
(JNIEnv *, jobject, jbyteArray, jint, jint, jint, jint, jbyteArray, jint, jint, jint);
|
(JNIEnv *, jobject, jbyteArray, jint, jint, jint, jint, jbyteArray, jint, jint, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_libjpegturbo_turbojpeg_TJCompressor
|
||||||
|
* Method: compress
|
||||||
|
* Signature: ([BIIIIII[BIII)I
|
||||||
|
*/
|
||||||
|
JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3BIIIIII_3BIII
|
||||||
|
(JNIEnv *, jobject, jbyteArray, jint, jint, jint, jint, jint, jint, jbyteArray, jint, jint, jint);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: org_libjpegturbo_turbojpeg_TJCompressor
|
* Class: org_libjpegturbo_turbojpeg_TJCompressor
|
||||||
* Method: compress
|
* Method: compress
|
||||||
@@ -39,6 +47,14 @@ JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3
|
|||||||
JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3IIIII_3BIII
|
JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3IIIII_3BIII
|
||||||
(JNIEnv *, jobject, jintArray, jint, jint, jint, jint, jbyteArray, jint, jint, jint);
|
(JNIEnv *, jobject, jintArray, jint, jint, jint, jint, jbyteArray, jint, jint, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_libjpegturbo_turbojpeg_TJCompressor
|
||||||
|
* Method: compress
|
||||||
|
* Signature: ([IIIIIII[BIII)I
|
||||||
|
*/
|
||||||
|
JNIEXPORT jint JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3IIIIIII_3BIII
|
||||||
|
(JNIEnv *, jobject, jintArray, jint, jint, jint, jint, jint, jint, jbyteArray, jint, jint, jint);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: org_libjpegturbo_turbojpeg_TJCompressor
|
* Class: org_libjpegturbo_turbojpeg_TJCompressor
|
||||||
* Method: encodeYUV
|
* Method: encodeYUV
|
||||||
|
|||||||
@@ -39,6 +39,14 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
|
|||||||
JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3BIIIII
|
JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3BIIIII
|
||||||
(JNIEnv *, jobject, jbyteArray, jint, jbyteArray, jint, jint, jint, jint, jint);
|
(JNIEnv *, jobject, jbyteArray, jint, jbyteArray, jint, jint, jint, jint, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_libjpegturbo_turbojpeg_TJDecompressor
|
||||||
|
* Method: decompress
|
||||||
|
* Signature: ([BI[BIIIIIII)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3BIIIIIII
|
||||||
|
(JNIEnv *, jobject, jbyteArray, jint, jbyteArray, jint, jint, jint, jint, jint, jint, jint);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: org_libjpegturbo_turbojpeg_TJDecompressor
|
* Class: org_libjpegturbo_turbojpeg_TJDecompressor
|
||||||
* Method: decompress
|
* Method: decompress
|
||||||
@@ -47,6 +55,14 @@ JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress
|
|||||||
JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3IIIIII
|
JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3IIIIII
|
||||||
(JNIEnv *, jobject, jbyteArray, jint, jintArray, jint, jint, jint, jint, jint);
|
(JNIEnv *, jobject, jbyteArray, jint, jintArray, jint, jint, jint, jint, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_libjpegturbo_turbojpeg_TJDecompressor
|
||||||
|
* Method: decompress
|
||||||
|
* Signature: ([BI[IIIIIIII)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_3IIIIIIII
|
||||||
|
(JNIEnv *, jobject, jbyteArray, jint, jintArray, jint, jint, jint, jint, jint, jint, jint);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: org_libjpegturbo_turbojpeg_TJDecompressor
|
* Class: org_libjpegturbo_turbojpeg_TJDecompressor
|
||||||
* Method: decompressToYUV
|
* Method: decompressToYUV
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jccolext.c
|
* jccolext.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1996, Thomas G. Lane.
|
* Copyright (C) 1991-1996, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2009-2012, D. R. Commander.
|
* Copyright (C) 2009-2012, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains input colorspace conversion routines.
|
* This file contains input colorspace conversion routines.
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* jccolor.c
|
* jccolor.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1996, Thomas G. Lane.
|
* Copyright (C) 1991-1996, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
||||||
* Copyright (C) 2009-2012, D. R. Commander.
|
* Copyright (C) 2009-2012, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains input colorspace conversion routines.
|
* This file contains input colorspace conversion routines.
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
/*
|
/*
|
||||||
* jcdctmgr.c
|
* jcdctmgr.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1996, Thomas G. Lane.
|
* Copyright (C) 1994-1996, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 1999-2006, MIYASAKA Masaru.
|
* Copyright (C) 1999-2006, MIYASAKA Masaru.
|
||||||
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
||||||
* Copyright (C) 2011 D. R. Commander
|
* Copyright (C) 2011 D. R. Commander
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains the forward-DCT management logic.
|
* This file contains the forward-DCT management logic.
|
||||||
|
|||||||
5
jchuff.c
5
jchuff.c
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jchuff.c
|
* jchuff.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2009-2011, D. R. Commander.
|
* Copyright (C) 2009-2011, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains Huffman entropy encoding routines.
|
* This file contains Huffman entropy encoding routines.
|
||||||
@@ -298,8 +299,6 @@ dump_buffer (working_state * state)
|
|||||||
{
|
{
|
||||||
struct jpeg_destination_mgr * dest = state->cinfo->dest;
|
struct jpeg_destination_mgr * dest = state->cinfo->dest;
|
||||||
|
|
||||||
dest->free_in_buffer = state->free_in_buffer;
|
|
||||||
|
|
||||||
if (! (*dest->empty_output_buffer) (state->cinfo))
|
if (! (*dest->empty_output_buffer) (state->cinfo))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
/* After a successful buffer dump, must reset buffer pointers */
|
/* After a successful buffer dump, must reset buffer pointers */
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ process_data_buffer_main (j_compress_ptr cinfo,
|
|||||||
JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
|
JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
|
||||||
JDIMENSION in_rows_avail)
|
JDIMENSION in_rows_avail)
|
||||||
{
|
{
|
||||||
my_main_ptr main = (my_main_ptr) cinfo->main;
|
my_main_ptr main_ptr = (my_main_ptr) cinfo->main;
|
||||||
int ci;
|
int ci;
|
||||||
jpeg_component_info *compptr;
|
jpeg_component_info *compptr;
|
||||||
boolean writing = (main_ptr->pass_mode != JBUF_CRANK_DEST);
|
boolean writing = (main_ptr->pass_mode != JBUF_CRANK_DEST);
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jcmarker.c
|
* jcmarker.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1998, Thomas G. Lane.
|
* Copyright (C) 1991-1998, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2010, D. R. Commander.
|
* Copyright (C) 2010, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains routines to write JPEG datastream markers.
|
* This file contains routines to write JPEG datastream markers.
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* jcmaster.c
|
* jcmaster.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
* Modified 2003-2010 by Guido Vollbeding.
|
* Modified 2003-2010 by Guido Vollbeding.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2010, D. R. Commander.
|
* Copyright (C) 2010, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains master control logic for the JPEG compressor.
|
* This file contains master control logic for the JPEG compressor.
|
||||||
|
|||||||
@@ -12,6 +12,9 @@
|
|||||||
/* Support arithmetic decoding */
|
/* Support arithmetic decoding */
|
||||||
#undef D_ARITH_CODING_SUPPORTED
|
#undef D_ARITH_CODING_SUPPORTED
|
||||||
|
|
||||||
|
/* Support in-memory source/destination managers */
|
||||||
|
#undef MEM_SRCDST_SUPPORTED
|
||||||
|
|
||||||
/* Compiler supports function prototypes. */
|
/* Compiler supports function prototypes. */
|
||||||
#undef HAVE_PROTOTYPES
|
#undef HAVE_PROTOTYPES
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* jcparam.c
|
* jcparam.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1998, Thomas G. Lane.
|
* Copyright (C) 1991-1998, Thomas G. Lane.
|
||||||
* Modified 2003-2008 by Guido Vollbeding.
|
* Modified 2003-2008 by Guido Vollbeding.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2009-2011, D. R. Commander.
|
* Copyright (C) 2009-2011, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains optional default-setting code for the JPEG compressor.
|
* This file contains optional default-setting code for the JPEG compressor.
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jdapistd.c
|
* jdapistd.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1996, Thomas G. Lane.
|
* Copyright (C) 1994-1996, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2010, D. R. Commander.
|
* Copyright (C) 2010, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains application interface code for the decompression half
|
* This file contains application interface code for the decompression half
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* jdatadst.c
|
* jdatadst-tj.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1996, Thomas G. Lane.
|
* Copyright (C) 1994-1996, Thomas G. Lane.
|
||||||
* Modified 2009 by Guido Vollbeding.
|
* Modified 2009-2012 by Guido Vollbeding.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* Modifications:
|
||||||
|
* Copyright (C) 2011, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains compression data destination routines for the case of
|
* This file contains compression data destination routines for the case of
|
||||||
@@ -91,7 +93,7 @@ empty_mem_output_buffer (j_compress_ptr cinfo)
|
|||||||
|
|
||||||
/* Try to allocate new buffer with double size */
|
/* Try to allocate new buffer with double size */
|
||||||
nextsize = dest->bufsize * 2;
|
nextsize = dest->bufsize * 2;
|
||||||
nextbuffer = malloc(nextsize);
|
nextbuffer = (JOCTET *) malloc(nextsize);
|
||||||
|
|
||||||
if (nextbuffer == NULL)
|
if (nextbuffer == NULL)
|
||||||
ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
|
ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
|
||||||
@@ -175,7 +177,7 @@ jpeg_mem_dest_tj (j_compress_ptr cinfo,
|
|||||||
if (*outbuffer == NULL || *outsize == 0) {
|
if (*outbuffer == NULL || *outsize == 0) {
|
||||||
if (alloc) {
|
if (alloc) {
|
||||||
/* Allocate initial buffer */
|
/* Allocate initial buffer */
|
||||||
dest->newbuffer = *outbuffer = malloc(OUTPUT_BUF_SIZE);
|
dest->newbuffer = *outbuffer = (unsigned char *) malloc(OUTPUT_BUF_SIZE);
|
||||||
if (dest->newbuffer == NULL)
|
if (dest->newbuffer == NULL)
|
||||||
ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
|
ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
|
||||||
*outsize = OUTPUT_BUF_SIZE;
|
*outsize = OUTPUT_BUF_SIZE;
|
||||||
|
|||||||
22
jdatadst.c
22
jdatadst.c
@@ -1,9 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* jdatadst.c
|
* jdatadst.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1996, Thomas G. Lane.
|
* Copyright (C) 1994-1996, Thomas G. Lane.
|
||||||
* Modified 2009 by Guido Vollbeding.
|
* Modified 2009-2012 by Guido Vollbeding.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* Modifications:
|
||||||
|
* Copyright (C) 2013, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains compression data destination routines for the case of
|
* This file contains compression data destination routines for the case of
|
||||||
@@ -40,7 +42,7 @@ typedef my_destination_mgr * my_dest_ptr;
|
|||||||
#define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */
|
#define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */
|
||||||
|
|
||||||
|
|
||||||
#if JPEG_LIB_VERSION >= 80
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
/* Expanded data destination object for memory output */
|
/* Expanded data destination object for memory output */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -76,7 +78,7 @@ init_destination (j_compress_ptr cinfo)
|
|||||||
dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
|
dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if JPEG_LIB_VERSION >= 80
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
METHODDEF(void)
|
METHODDEF(void)
|
||||||
init_mem_destination (j_compress_ptr cinfo)
|
init_mem_destination (j_compress_ptr cinfo)
|
||||||
{
|
{
|
||||||
@@ -123,7 +125,7 @@ empty_output_buffer (j_compress_ptr cinfo)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if JPEG_LIB_VERSION >= 80
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
METHODDEF(boolean)
|
METHODDEF(boolean)
|
||||||
empty_mem_output_buffer (j_compress_ptr cinfo)
|
empty_mem_output_buffer (j_compress_ptr cinfo)
|
||||||
{
|
{
|
||||||
@@ -133,7 +135,7 @@ empty_mem_output_buffer (j_compress_ptr cinfo)
|
|||||||
|
|
||||||
/* Try to allocate new buffer with double size */
|
/* Try to allocate new buffer with double size */
|
||||||
nextsize = dest->bufsize * 2;
|
nextsize = dest->bufsize * 2;
|
||||||
nextbuffer = malloc(nextsize);
|
nextbuffer = (JOCTET *) malloc(nextsize);
|
||||||
|
|
||||||
if (nextbuffer == NULL)
|
if (nextbuffer == NULL)
|
||||||
ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
|
ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
|
||||||
@@ -182,14 +184,14 @@ term_destination (j_compress_ptr cinfo)
|
|||||||
ERREXIT(cinfo, JERR_FILE_WRITE);
|
ERREXIT(cinfo, JERR_FILE_WRITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if JPEG_LIB_VERSION >= 80
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
METHODDEF(void)
|
METHODDEF(void)
|
||||||
term_mem_destination (j_compress_ptr cinfo)
|
term_mem_destination (j_compress_ptr cinfo)
|
||||||
{
|
{
|
||||||
my_mem_dest_ptr dest = (my_mem_dest_ptr) cinfo->dest;
|
my_mem_dest_ptr dest = (my_mem_dest_ptr) cinfo->dest;
|
||||||
|
|
||||||
*dest->outbuffer = dest->buffer;
|
*dest->outbuffer = dest->buffer;
|
||||||
*dest->outsize = dest->bufsize - dest->pub.free_in_buffer;
|
*dest->outsize = (unsigned long)(dest->bufsize - dest->pub.free_in_buffer);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -225,7 +227,7 @@ jpeg_stdio_dest (j_compress_ptr cinfo, FILE * outfile)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if JPEG_LIB_VERSION >= 80
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
/*
|
/*
|
||||||
* Prepare for output to a memory buffer.
|
* Prepare for output to a memory buffer.
|
||||||
* The caller may supply an own initial buffer with appropriate size.
|
* The caller may supply an own initial buffer with appropriate size.
|
||||||
@@ -265,7 +267,7 @@ jpeg_mem_dest (j_compress_ptr cinfo,
|
|||||||
|
|
||||||
if (*outbuffer == NULL || *outsize == 0) {
|
if (*outbuffer == NULL || *outsize == 0) {
|
||||||
/* Allocate initial buffer */
|
/* Allocate initial buffer */
|
||||||
dest->newbuffer = *outbuffer = malloc(OUTPUT_BUF_SIZE);
|
dest->newbuffer = *outbuffer = (unsigned char *) malloc(OUTPUT_BUF_SIZE);
|
||||||
if (dest->newbuffer == NULL)
|
if (dest->newbuffer == NULL)
|
||||||
ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
|
ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
|
||||||
*outsize = OUTPUT_BUF_SIZE;
|
*outsize = OUTPUT_BUF_SIZE;
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* jdatasrc.c
|
* jdatasrc-tj.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1996, Thomas G. Lane.
|
* Copyright (C) 1994-1996, Thomas G. Lane.
|
||||||
* Modified 2009-2010 by Guido Vollbeding.
|
* Modified 2009-2011 by Guido Vollbeding.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* Modifications:
|
||||||
|
* Copyright (C) 2011, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains decompression data source routines for the case of
|
* This file contains decompression data source routines for the case of
|
||||||
@@ -69,16 +71,17 @@ init_mem_source (j_decompress_ptr cinfo)
|
|||||||
METHODDEF(boolean)
|
METHODDEF(boolean)
|
||||||
fill_mem_input_buffer (j_decompress_ptr cinfo)
|
fill_mem_input_buffer (j_decompress_ptr cinfo)
|
||||||
{
|
{
|
||||||
static JOCTET mybuffer[4];
|
static const JOCTET mybuffer[4] = {
|
||||||
|
(JOCTET) 0xFF, (JOCTET) JPEG_EOI, 0, 0
|
||||||
|
};
|
||||||
|
|
||||||
/* The whole JPEG data is expected to reside in the supplied memory
|
/* The whole JPEG data is expected to reside in the supplied memory
|
||||||
* buffer, so any request for more data beyond the given buffer size
|
* buffer, so any request for more data beyond the given buffer size
|
||||||
* is treated as an error.
|
* is treated as an error.
|
||||||
*/
|
*/
|
||||||
WARNMS(cinfo, JWRN_JPEG_EOF);
|
WARNMS(cinfo, JWRN_JPEG_EOF);
|
||||||
|
|
||||||
/* Insert a fake EOI marker */
|
/* Insert a fake EOI marker */
|
||||||
mybuffer[0] = (JOCTET) 0xFF;
|
|
||||||
mybuffer[1] = (JOCTET) JPEG_EOI;
|
|
||||||
|
|
||||||
cinfo->src->next_input_byte = mybuffer;
|
cinfo->src->next_input_byte = mybuffer;
|
||||||
cinfo->src->bytes_in_buffer = 2;
|
cinfo->src->bytes_in_buffer = 2;
|
||||||
|
|||||||
19
jdatasrc.c
19
jdatasrc.c
@@ -1,9 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* jdatasrc.c
|
* jdatasrc.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1996, Thomas G. Lane.
|
* Copyright (C) 1994-1996, Thomas G. Lane.
|
||||||
* Modified 2009-2010 by Guido Vollbeding.
|
* Modified 2009-2011 by Guido Vollbeding.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* Modifications:
|
||||||
|
* Copyright (C) 2013, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains decompression data source routines for the case of
|
* This file contains decompression data source routines for the case of
|
||||||
@@ -53,7 +55,7 @@ init_source (j_decompress_ptr cinfo)
|
|||||||
src->start_of_file = TRUE;
|
src->start_of_file = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if JPEG_LIB_VERSION >= 80
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
METHODDEF(void)
|
METHODDEF(void)
|
||||||
init_mem_source (j_decompress_ptr cinfo)
|
init_mem_source (j_decompress_ptr cinfo)
|
||||||
{
|
{
|
||||||
@@ -120,20 +122,21 @@ fill_input_buffer (j_decompress_ptr cinfo)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if JPEG_LIB_VERSION >= 80
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
METHODDEF(boolean)
|
METHODDEF(boolean)
|
||||||
fill_mem_input_buffer (j_decompress_ptr cinfo)
|
fill_mem_input_buffer (j_decompress_ptr cinfo)
|
||||||
{
|
{
|
||||||
static JOCTET mybuffer[4];
|
static const JOCTET mybuffer[4] = {
|
||||||
|
(JOCTET) 0xFF, (JOCTET) JPEG_EOI, 0, 0
|
||||||
|
};
|
||||||
|
|
||||||
/* The whole JPEG data is expected to reside in the supplied memory
|
/* The whole JPEG data is expected to reside in the supplied memory
|
||||||
* buffer, so any request for more data beyond the given buffer size
|
* buffer, so any request for more data beyond the given buffer size
|
||||||
* is treated as an error.
|
* is treated as an error.
|
||||||
*/
|
*/
|
||||||
WARNMS(cinfo, JWRN_JPEG_EOF);
|
WARNMS(cinfo, JWRN_JPEG_EOF);
|
||||||
|
|
||||||
/* Insert a fake EOI marker */
|
/* Insert a fake EOI marker */
|
||||||
mybuffer[0] = (JOCTET) 0xFF;
|
|
||||||
mybuffer[1] = (JOCTET) JPEG_EOI;
|
|
||||||
|
|
||||||
cinfo->src->next_input_byte = mybuffer;
|
cinfo->src->next_input_byte = mybuffer;
|
||||||
cinfo->src->bytes_in_buffer = 2;
|
cinfo->src->bytes_in_buffer = 2;
|
||||||
@@ -243,7 +246,7 @@ jpeg_stdio_src (j_decompress_ptr cinfo, FILE * infile)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if JPEG_LIB_VERSION >= 80
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
/*
|
/*
|
||||||
* Prepare for input from a supplied memory buffer.
|
* Prepare for input from a supplied memory buffer.
|
||||||
* The buffer must contain the whole JPEG data.
|
* The buffer must contain the whole JPEG data.
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jdcoefct.c
|
* jdcoefct.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1997, Thomas G. Lane.
|
* Copyright (C) 1994-1997, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2010, D. R. Commander.
|
* Copyright (C) 2010, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains the coefficient buffer controller for decompression.
|
* This file contains the coefficient buffer controller for decompression.
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jdcolext.c
|
* jdcolext.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2009, 2011, D. R. Commander.
|
* Copyright (C) 2009, 2011, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains output colorspace conversion routines.
|
* This file contains output colorspace conversion routines.
|
||||||
|
|||||||
88
jdcolor.c
88
jdcolor.c
@@ -1,10 +1,12 @@
|
|||||||
/*
|
/*
|
||||||
* jdcolor.c
|
* jdcolor.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
|
* Modified 2011 by Guido Vollbeding.
|
||||||
|
* Modifications:
|
||||||
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
||||||
* Copyright (C) 2009, 2011-2012, D. R. Commander.
|
* Copyright (C) 2009, 2011-2012, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains output colorspace conversion routines.
|
* This file contains output colorspace conversion routines.
|
||||||
@@ -27,20 +29,28 @@ typedef struct {
|
|||||||
int * Cb_b_tab; /* => table for Cb to B conversion */
|
int * Cb_b_tab; /* => table for Cb to B conversion */
|
||||||
INT32 * Cr_g_tab; /* => table for Cr to G conversion */
|
INT32 * Cr_g_tab; /* => table for Cr to G conversion */
|
||||||
INT32 * Cb_g_tab; /* => table for Cb to G conversion */
|
INT32 * Cb_g_tab; /* => table for Cb to G conversion */
|
||||||
|
|
||||||
|
/* Private state for RGB->Y conversion */
|
||||||
|
INT32 * rgb_y_tab; /* => table for RGB to Y conversion */
|
||||||
} my_color_deconverter;
|
} my_color_deconverter;
|
||||||
|
|
||||||
typedef my_color_deconverter * my_cconvert_ptr;
|
typedef my_color_deconverter * my_cconvert_ptr;
|
||||||
|
|
||||||
|
|
||||||
/**************** YCbCr -> RGB conversion: most common case **************/
|
/**************** YCbCr -> RGB conversion: most common case **************/
|
||||||
|
/**************** RGB -> Y conversion: less common case **************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* YCbCr is defined per CCIR 601-1, except that Cb and Cr are
|
* YCbCr is defined per CCIR 601-1, except that Cb and Cr are
|
||||||
* normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5.
|
* normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5.
|
||||||
* The conversion equations to be implemented are therefore
|
* The conversion equations to be implemented are therefore
|
||||||
|
*
|
||||||
* R = Y + 1.40200 * Cr
|
* R = Y + 1.40200 * Cr
|
||||||
* G = Y - 0.34414 * Cb - 0.71414 * Cr
|
* G = Y - 0.34414 * Cb - 0.71414 * Cr
|
||||||
* B = Y + 1.77200 * Cb
|
* B = Y + 1.77200 * Cb
|
||||||
|
*
|
||||||
|
* Y = 0.29900 * R + 0.58700 * G + 0.11400 * B
|
||||||
|
*
|
||||||
* where Cb and Cr represent the incoming values less CENTERJSAMPLE.
|
* where Cb and Cr represent the incoming values less CENTERJSAMPLE.
|
||||||
* (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.)
|
* (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.)
|
||||||
*
|
*
|
||||||
@@ -65,6 +75,18 @@ typedef my_color_deconverter * my_cconvert_ptr;
|
|||||||
#define ONE_HALF ((INT32) 1 << (SCALEBITS-1))
|
#define ONE_HALF ((INT32) 1 << (SCALEBITS-1))
|
||||||
#define FIX(x) ((INT32) ((x) * (1L<<SCALEBITS) + 0.5))
|
#define FIX(x) ((INT32) ((x) * (1L<<SCALEBITS) + 0.5))
|
||||||
|
|
||||||
|
/* We allocate one big table for RGB->Y conversion and divide it up into
|
||||||
|
* three parts, instead of doing three alloc_small requests. This lets us
|
||||||
|
* use a single table base address, which can be held in a register in the
|
||||||
|
* inner loops on many machines (more than can hold all three addresses,
|
||||||
|
* anyway).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define R_Y_OFF 0 /* offset to R => Y section */
|
||||||
|
#define G_Y_OFF (1*(MAXJSAMPLE+1)) /* offset to G => Y section */
|
||||||
|
#define B_Y_OFF (2*(MAXJSAMPLE+1)) /* etc. */
|
||||||
|
#define TABLE_SIZE (3*(MAXJSAMPLE+1))
|
||||||
|
|
||||||
|
|
||||||
/* Include inline routines for colorspace extensions */
|
/* Include inline routines for colorspace extensions */
|
||||||
|
|
||||||
@@ -271,6 +293,66 @@ ycc_rgb_convert (j_decompress_ptr cinfo,
|
|||||||
/**************** Cases other than YCbCr -> RGB **************/
|
/**************** Cases other than YCbCr -> RGB **************/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize for RGB->grayscale colorspace conversion.
|
||||||
|
*/
|
||||||
|
|
||||||
|
LOCAL(void)
|
||||||
|
build_rgb_y_table (j_decompress_ptr cinfo)
|
||||||
|
{
|
||||||
|
my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
|
||||||
|
INT32 * rgb_y_tab;
|
||||||
|
INT32 i;
|
||||||
|
|
||||||
|
/* Allocate and fill in the conversion tables. */
|
||||||
|
cconvert->rgb_y_tab = rgb_y_tab = (INT32 *)
|
||||||
|
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
|
||||||
|
(TABLE_SIZE * SIZEOF(INT32)));
|
||||||
|
|
||||||
|
for (i = 0; i <= MAXJSAMPLE; i++) {
|
||||||
|
rgb_y_tab[i+R_Y_OFF] = FIX(0.29900) * i;
|
||||||
|
rgb_y_tab[i+G_Y_OFF] = FIX(0.58700) * i;
|
||||||
|
rgb_y_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert RGB to grayscale.
|
||||||
|
*/
|
||||||
|
|
||||||
|
METHODDEF(void)
|
||||||
|
rgb_gray_convert (j_decompress_ptr cinfo,
|
||||||
|
JSAMPIMAGE input_buf, JDIMENSION input_row,
|
||||||
|
JSAMPARRAY output_buf, int num_rows)
|
||||||
|
{
|
||||||
|
my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
|
||||||
|
register int r, g, b;
|
||||||
|
register INT32 * ctab = cconvert->rgb_y_tab;
|
||||||
|
register JSAMPROW outptr;
|
||||||
|
register JSAMPROW inptr0, inptr1, inptr2;
|
||||||
|
register JDIMENSION col;
|
||||||
|
JDIMENSION num_cols = cinfo->output_width;
|
||||||
|
|
||||||
|
while (--num_rows >= 0) {
|
||||||
|
inptr0 = input_buf[0][input_row];
|
||||||
|
inptr1 = input_buf[1][input_row];
|
||||||
|
inptr2 = input_buf[2][input_row];
|
||||||
|
input_row++;
|
||||||
|
outptr = *output_buf++;
|
||||||
|
for (col = 0; col < num_cols; col++) {
|
||||||
|
r = GETJSAMPLE(inptr0[col]);
|
||||||
|
g = GETJSAMPLE(inptr1[col]);
|
||||||
|
b = GETJSAMPLE(inptr2[col]);
|
||||||
|
/* Y */
|
||||||
|
outptr[col] = (JSAMPLE)
|
||||||
|
((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
|
||||||
|
>> SCALEBITS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Color conversion for no colorspace change: just copy the data,
|
* Color conversion for no colorspace change: just copy the data,
|
||||||
* converting from separate-planes to interleaved representation.
|
* converting from separate-planes to interleaved representation.
|
||||||
@@ -409,6 +491,7 @@ rgb_rgb_convert (j_decompress_ptr cinfo,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Adobe-style YCCK->CMYK conversion.
|
* Adobe-style YCCK->CMYK conversion.
|
||||||
* We convert YCbCr to R=1-C, G=1-M, and B=1-Y using the same
|
* We convert YCbCr to R=1-C, G=1-M, and B=1-Y using the same
|
||||||
@@ -526,6 +609,9 @@ jinit_color_deconverter (j_decompress_ptr cinfo)
|
|||||||
/* For color->grayscale conversion, only the Y (0) component is needed */
|
/* For color->grayscale conversion, only the Y (0) component is needed */
|
||||||
for (ci = 1; ci < cinfo->num_components; ci++)
|
for (ci = 1; ci < cinfo->num_components; ci++)
|
||||||
cinfo->comp_info[ci].component_needed = FALSE;
|
cinfo->comp_info[ci].component_needed = FALSE;
|
||||||
|
} else if (cinfo->jpeg_color_space == JCS_RGB) {
|
||||||
|
cconvert->pub.color_convert = rgb_gray_convert;
|
||||||
|
build_rgb_y_table(cinfo);
|
||||||
} else
|
} else
|
||||||
ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
|
ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
|
||||||
break;
|
break;
|
||||||
|
|||||||
48
jdct.h
48
jdct.h
@@ -95,9 +95,21 @@ typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */
|
|||||||
#define jpeg_idct_islow jRDislow
|
#define jpeg_idct_islow jRDislow
|
||||||
#define jpeg_idct_ifast jRDifast
|
#define jpeg_idct_ifast jRDifast
|
||||||
#define jpeg_idct_float jRDfloat
|
#define jpeg_idct_float jRDfloat
|
||||||
|
#define jpeg_idct_7x7 jRD7x7
|
||||||
|
#define jpeg_idct_6x6 jRD6x6
|
||||||
|
#define jpeg_idct_5x5 jRD5x5
|
||||||
#define jpeg_idct_4x4 jRD4x4
|
#define jpeg_idct_4x4 jRD4x4
|
||||||
|
#define jpeg_idct_3x3 jRD3x3
|
||||||
#define jpeg_idct_2x2 jRD2x2
|
#define jpeg_idct_2x2 jRD2x2
|
||||||
#define jpeg_idct_1x1 jRD1x1
|
#define jpeg_idct_1x1 jRD1x1
|
||||||
|
#define jpeg_idct_9x9 jRD9x9
|
||||||
|
#define jpeg_idct_10x10 jRD10x10
|
||||||
|
#define jpeg_idct_11x11 jRD11x11
|
||||||
|
#define jpeg_idct_12x12 jRD12x12
|
||||||
|
#define jpeg_idct_13x13 jRD13x13
|
||||||
|
#define jpeg_idct_14x14 jRD14x14
|
||||||
|
#define jpeg_idct_15x15 jRD15x15
|
||||||
|
#define jpeg_idct_16x16 jRD16x16
|
||||||
#endif /* NEED_SHORT_EXTERNAL_NAMES */
|
#endif /* NEED_SHORT_EXTERNAL_NAMES */
|
||||||
|
|
||||||
/* Extern declarations for the forward and inverse DCT routines. */
|
/* Extern declarations for the forward and inverse DCT routines. */
|
||||||
@@ -115,15 +127,51 @@ EXTERN(void) jpeg_idct_ifast
|
|||||||
EXTERN(void) jpeg_idct_float
|
EXTERN(void) jpeg_idct_float
|
||||||
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
EXTERN(void) jpeg_idct_7x7
|
||||||
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
EXTERN(void) jpeg_idct_6x6
|
||||||
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
EXTERN(void) jpeg_idct_5x5
|
||||||
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
EXTERN(void) jpeg_idct_4x4
|
EXTERN(void) jpeg_idct_4x4
|
||||||
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
EXTERN(void) jpeg_idct_3x3
|
||||||
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
EXTERN(void) jpeg_idct_2x2
|
EXTERN(void) jpeg_idct_2x2
|
||||||
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
EXTERN(void) jpeg_idct_1x1
|
EXTERN(void) jpeg_idct_1x1
|
||||||
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
EXTERN(void) jpeg_idct_9x9
|
||||||
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
EXTERN(void) jpeg_idct_10x10
|
||||||
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
EXTERN(void) jpeg_idct_11x11
|
||||||
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
EXTERN(void) jpeg_idct_12x12
|
||||||
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
EXTERN(void) jpeg_idct_13x13
|
||||||
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
EXTERN(void) jpeg_idct_14x14
|
||||||
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
EXTERN(void) jpeg_idct_15x15
|
||||||
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
EXTERN(void) jpeg_idct_16x16
|
||||||
|
JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
|
||||||
|
JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
52
jddctmgr.c
52
jddctmgr.c
@@ -1,10 +1,12 @@
|
|||||||
/*
|
/*
|
||||||
* jddctmgr.c
|
* jddctmgr.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1996, Thomas G. Lane.
|
* Copyright (C) 1994-1996, Thomas G. Lane.
|
||||||
|
* Modified 2002-2010 by Guido Vollbeding.
|
||||||
|
* Modifications:
|
||||||
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
||||||
* Copyright (C) 2010, D. R. Commander.
|
* Copyright (C) 2010, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains the inverse-DCT management logic.
|
* This file contains the inverse-DCT management logic.
|
||||||
@@ -115,6 +117,10 @@ start_pass (j_decompress_ptr cinfo)
|
|||||||
method_ptr = jpeg_idct_2x2;
|
method_ptr = jpeg_idct_2x2;
|
||||||
method = JDCT_ISLOW; /* jidctred uses islow-style table */
|
method = JDCT_ISLOW; /* jidctred uses islow-style table */
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
|
method_ptr = jpeg_idct_3x3;
|
||||||
|
method = JDCT_ISLOW; /* jidctint uses islow-style table */
|
||||||
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if (jsimd_can_idct_4x4())
|
if (jsimd_can_idct_4x4())
|
||||||
method_ptr = jsimd_idct_4x4;
|
method_ptr = jsimd_idct_4x4;
|
||||||
@@ -122,6 +128,18 @@ start_pass (j_decompress_ptr cinfo)
|
|||||||
method_ptr = jpeg_idct_4x4;
|
method_ptr = jpeg_idct_4x4;
|
||||||
method = JDCT_ISLOW; /* jidctred uses islow-style table */
|
method = JDCT_ISLOW; /* jidctred uses islow-style table */
|
||||||
break;
|
break;
|
||||||
|
case 5:
|
||||||
|
method_ptr = jpeg_idct_5x5;
|
||||||
|
method = JDCT_ISLOW; /* jidctint uses islow-style table */
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
method_ptr = jpeg_idct_6x6;
|
||||||
|
method = JDCT_ISLOW; /* jidctint uses islow-style table */
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
method_ptr = jpeg_idct_7x7;
|
||||||
|
method = JDCT_ISLOW; /* jidctint uses islow-style table */
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case DCTSIZE:
|
case DCTSIZE:
|
||||||
switch (cinfo->dct_method) {
|
switch (cinfo->dct_method) {
|
||||||
@@ -157,6 +175,38 @@ start_pass (j_decompress_ptr cinfo)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 9:
|
||||||
|
method_ptr = jpeg_idct_9x9;
|
||||||
|
method = JDCT_ISLOW; /* jidctint uses islow-style table */
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
method_ptr = jpeg_idct_10x10;
|
||||||
|
method = JDCT_ISLOW; /* jidctint uses islow-style table */
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
method_ptr = jpeg_idct_11x11;
|
||||||
|
method = JDCT_ISLOW; /* jidctint uses islow-style table */
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
method_ptr = jpeg_idct_12x12;
|
||||||
|
method = JDCT_ISLOW; /* jidctint uses islow-style table */
|
||||||
|
break;
|
||||||
|
case 13:
|
||||||
|
method_ptr = jpeg_idct_13x13;
|
||||||
|
method = JDCT_ISLOW; /* jidctint uses islow-style table */
|
||||||
|
break;
|
||||||
|
case 14:
|
||||||
|
method_ptr = jpeg_idct_14x14;
|
||||||
|
method = JDCT_ISLOW; /* jidctint uses islow-style table */
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
method_ptr = jpeg_idct_15x15;
|
||||||
|
method = JDCT_ISLOW; /* jidctint uses islow-style table */
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
method_ptr = jpeg_idct_16x16;
|
||||||
|
method = JDCT_ISLOW; /* jidctint uses islow-style table */
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->_DCT_scaled_size);
|
ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->_DCT_scaled_size);
|
||||||
break;
|
break;
|
||||||
|
|||||||
3
jdhuff.c
3
jdhuff.c
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jdhuff.c
|
* jdhuff.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2009-2011, D. R. Commander.
|
* Copyright (C) 2009-2011, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains Huffman entropy decoding routines.
|
* This file contains Huffman entropy decoding routines.
|
||||||
|
|||||||
3
jdhuff.h
3
jdhuff.h
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jdhuff.h
|
* jdhuff.h
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2010-2011, D. R. Commander.
|
* Copyright (C) 2010-2011, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains declarations for Huffman entropy decoding routines
|
* This file contains declarations for Huffman entropy decoding routines
|
||||||
|
|||||||
77
jdinput.c
77
jdinput.c
@@ -1,10 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jdinput.c
|
* jdinput.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
* Modified 2002-2009 by Guido Vollbeding.
|
* Modifications:
|
||||||
* Copyright (C) 2010, D. R. Commander.
|
* Copyright (C) 2010, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains input control logic for the JPEG decompressor.
|
* This file contains input control logic for the JPEG decompressor.
|
||||||
@@ -38,79 +38,6 @@ METHODDEF(int) consume_markers JPP((j_decompress_ptr cinfo));
|
|||||||
* Routines to calculate various quantities related to the size of the image.
|
* Routines to calculate various quantities related to the size of the image.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#if JPEG_LIB_VERSION >= 80
|
|
||||||
/*
|
|
||||||
* Compute output image dimensions and related values.
|
|
||||||
* NOTE: this is exported for possible use by application.
|
|
||||||
* Hence it mustn't do anything that can't be done twice.
|
|
||||||
*/
|
|
||||||
|
|
||||||
GLOBAL(void)
|
|
||||||
jpeg_core_output_dimensions (j_decompress_ptr cinfo)
|
|
||||||
/* Do computations that are needed before master selection phase.
|
|
||||||
* This function is used for transcoding and full decompression.
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
#ifdef IDCT_SCALING_SUPPORTED
|
|
||||||
int ci;
|
|
||||||
jpeg_component_info *compptr;
|
|
||||||
|
|
||||||
/* Compute actual output image dimensions and DCT scaling choices. */
|
|
||||||
if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom) {
|
|
||||||
/* Provide 1/block_size scaling */
|
|
||||||
cinfo->output_width = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_width, (long) cinfo->block_size);
|
|
||||||
cinfo->output_height = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_height, (long) cinfo->block_size);
|
|
||||||
cinfo->min_DCT_h_scaled_size = 1;
|
|
||||||
cinfo->min_DCT_v_scaled_size = 1;
|
|
||||||
} else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 2) {
|
|
||||||
/* Provide 2/block_size scaling */
|
|
||||||
cinfo->output_width = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_width * 2L, (long) cinfo->block_size);
|
|
||||||
cinfo->output_height = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_height * 2L, (long) cinfo->block_size);
|
|
||||||
cinfo->min_DCT_h_scaled_size = 2;
|
|
||||||
cinfo->min_DCT_v_scaled_size = 2;
|
|
||||||
} else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 4) {
|
|
||||||
/* Provide 4/block_size scaling */
|
|
||||||
cinfo->output_width = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_width * 4L, (long) cinfo->block_size);
|
|
||||||
cinfo->output_height = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_height * 4L, (long) cinfo->block_size);
|
|
||||||
cinfo->min_DCT_h_scaled_size = 4;
|
|
||||||
cinfo->min_DCT_v_scaled_size = 4;
|
|
||||||
} else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 8) {
|
|
||||||
/* Provide 8/block_size scaling */
|
|
||||||
cinfo->output_width = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_width * 8L, (long) cinfo->block_size);
|
|
||||||
cinfo->output_height = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_height * 8L, (long) cinfo->block_size);
|
|
||||||
cinfo->min_DCT_h_scaled_size = 8;
|
|
||||||
cinfo->min_DCT_v_scaled_size = 8;
|
|
||||||
}
|
|
||||||
/* Recompute dimensions of components */
|
|
||||||
for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
|
|
||||||
ci++, compptr++) {
|
|
||||||
compptr->DCT_h_scaled_size = cinfo->min_DCT_h_scaled_size;
|
|
||||||
compptr->DCT_v_scaled_size = cinfo->min_DCT_v_scaled_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* !IDCT_SCALING_SUPPORTED */
|
|
||||||
|
|
||||||
/* Hardwire it to "no scaling" */
|
|
||||||
cinfo->output_width = cinfo->image_width;
|
|
||||||
cinfo->output_height = cinfo->image_height;
|
|
||||||
/* jdinput.c has already initialized DCT_scaled_size,
|
|
||||||
* and has computed unscaled downsampled_width and downsampled_height.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* IDCT_SCALING_SUPPORTED */
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
LOCAL(void)
|
LOCAL(void)
|
||||||
initial_setup (j_decompress_ptr cinfo)
|
initial_setup (j_decompress_ptr cinfo)
|
||||||
/* Called once, when first SOS marker is reached */
|
/* Called once, when first SOS marker is reached */
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jdmainct.c
|
* jdmainct.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1996, Thomas G. Lane.
|
* Copyright (C) 1994-1996, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2010, D. R. Commander.
|
* Copyright (C) 2010, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains the main buffer controller for decompression.
|
* This file contains the main buffer controller for decompression.
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jdmarker.c
|
* jdmarker.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1998, Thomas G. Lane.
|
* Copyright (C) 1991-1998, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2012, D. R. Commander.
|
* Copyright (C) 2012, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains routines to decode JPEG datastream markers.
|
* This file contains routines to decode JPEG datastream markers.
|
||||||
|
|||||||
232
jdmaster.c
232
jdmaster.c
@@ -1,9 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* jdmaster.c
|
* jdmaster.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
|
* Modified 2002-2009 by Guido Vollbeding.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2009-2011, D. R. Commander.
|
* Copyright (C) 2009-2011, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains master control logic for the JPEG decompressor.
|
* This file contains master control logic for the JPEG decompressor.
|
||||||
@@ -85,6 +87,177 @@ use_merged_upsample (j_decompress_ptr cinfo)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Compute output image dimensions and related values.
|
||||||
|
* NOTE: this is exported for possible use by application.
|
||||||
|
* Hence it mustn't do anything that can't be done twice.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if JPEG_LIB_VERSION >= 80
|
||||||
|
GLOBAL(void)
|
||||||
|
#else
|
||||||
|
LOCAL(void)
|
||||||
|
#endif
|
||||||
|
jpeg_core_output_dimensions (j_decompress_ptr cinfo)
|
||||||
|
/* Do computations that are needed before master selection phase.
|
||||||
|
* This function is used for transcoding and full decompression.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
#ifdef IDCT_SCALING_SUPPORTED
|
||||||
|
int ci;
|
||||||
|
jpeg_component_info *compptr;
|
||||||
|
|
||||||
|
/* Compute actual output image dimensions and DCT scaling choices. */
|
||||||
|
if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom) {
|
||||||
|
/* Provide 1/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 1;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 1;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 2) {
|
||||||
|
/* Provide 2/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 2L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 2L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 2;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 2;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 3) {
|
||||||
|
/* Provide 3/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 3L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 3L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 3;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 3;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 4) {
|
||||||
|
/* Provide 4/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 4L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 4L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 4;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 4;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 5) {
|
||||||
|
/* Provide 5/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 5L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 5L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 5;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 5;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 6) {
|
||||||
|
/* Provide 6/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 6L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 6L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 6;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 6;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 7) {
|
||||||
|
/* Provide 7/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 7L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 7L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 7;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 7;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 8) {
|
||||||
|
/* Provide 8/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 8L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 8L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 8;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 8;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 9) {
|
||||||
|
/* Provide 9/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 9L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 9L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 9;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 9;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 10) {
|
||||||
|
/* Provide 10/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 10L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 10L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 10;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 10;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 11) {
|
||||||
|
/* Provide 11/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 11L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 11L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 11;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 11;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 12) {
|
||||||
|
/* Provide 12/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 12L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 12L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 12;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 12;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 13) {
|
||||||
|
/* Provide 13/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 13L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 13L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 13;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 13;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 14) {
|
||||||
|
/* Provide 14/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 14L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 14L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 14;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 14;
|
||||||
|
} else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 15) {
|
||||||
|
/* Provide 15/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 15L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 15L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 15;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 15;
|
||||||
|
} else {
|
||||||
|
/* Provide 16/block_size scaling */
|
||||||
|
cinfo->output_width = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_width * 16L, (long) DCTSIZE);
|
||||||
|
cinfo->output_height = (JDIMENSION)
|
||||||
|
jdiv_round_up((long) cinfo->image_height * 16L, (long) DCTSIZE);
|
||||||
|
cinfo->_min_DCT_h_scaled_size = 16;
|
||||||
|
cinfo->_min_DCT_v_scaled_size = 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Recompute dimensions of components */
|
||||||
|
for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
|
||||||
|
ci++, compptr++) {
|
||||||
|
compptr->_DCT_h_scaled_size = cinfo->_min_DCT_h_scaled_size;
|
||||||
|
compptr->_DCT_v_scaled_size = cinfo->_min_DCT_v_scaled_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* !IDCT_SCALING_SUPPORTED */
|
||||||
|
|
||||||
|
/* Hardwire it to "no scaling" */
|
||||||
|
cinfo->output_width = cinfo->image_width;
|
||||||
|
cinfo->output_height = cinfo->image_height;
|
||||||
|
/* jdinput.c has already initialized DCT_scaled_size,
|
||||||
|
* and has computed unscaled downsampled_width and downsampled_height.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* IDCT_SCALING_SUPPORTED */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compute output image dimensions and related values.
|
* Compute output image dimensions and related values.
|
||||||
* NOTE: this is exported for possible use by application.
|
* NOTE: this is exported for possible use by application.
|
||||||
@@ -105,65 +278,24 @@ jpeg_calc_output_dimensions (j_decompress_ptr cinfo)
|
|||||||
if (cinfo->global_state != DSTATE_READY)
|
if (cinfo->global_state != DSTATE_READY)
|
||||||
ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
|
ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
|
||||||
|
|
||||||
|
/* Compute core output image dimensions and DCT scaling choices. */
|
||||||
|
jpeg_core_output_dimensions(cinfo);
|
||||||
|
|
||||||
#ifdef IDCT_SCALING_SUPPORTED
|
#ifdef IDCT_SCALING_SUPPORTED
|
||||||
|
|
||||||
/* Compute actual output image dimensions and DCT scaling choices. */
|
|
||||||
if (cinfo->scale_num * 8 <= cinfo->scale_denom) {
|
|
||||||
/* Provide 1/8 scaling */
|
|
||||||
cinfo->output_width = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_width, 8L);
|
|
||||||
cinfo->output_height = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_height, 8L);
|
|
||||||
#if JPEG_LIB_VERSION >= 70
|
|
||||||
cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = 1;
|
|
||||||
#else
|
|
||||||
cinfo->min_DCT_scaled_size = 1;
|
|
||||||
#endif
|
|
||||||
} else if (cinfo->scale_num * 4 <= cinfo->scale_denom) {
|
|
||||||
/* Provide 1/4 scaling */
|
|
||||||
cinfo->output_width = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_width, 4L);
|
|
||||||
cinfo->output_height = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_height, 4L);
|
|
||||||
#if JPEG_LIB_VERSION >= 70
|
|
||||||
cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = 2;
|
|
||||||
#else
|
|
||||||
cinfo->min_DCT_scaled_size = 2;
|
|
||||||
#endif
|
|
||||||
} else if (cinfo->scale_num * 2 <= cinfo->scale_denom) {
|
|
||||||
/* Provide 1/2 scaling */
|
|
||||||
cinfo->output_width = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_width, 2L);
|
|
||||||
cinfo->output_height = (JDIMENSION)
|
|
||||||
jdiv_round_up((long) cinfo->image_height, 2L);
|
|
||||||
#if JPEG_LIB_VERSION >= 70
|
|
||||||
cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = 4;
|
|
||||||
#else
|
|
||||||
cinfo->min_DCT_scaled_size = 4;
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
/* Provide 1/1 scaling */
|
|
||||||
cinfo->output_width = cinfo->image_width;
|
|
||||||
cinfo->output_height = cinfo->image_height;
|
|
||||||
#if JPEG_LIB_VERSION >= 70
|
|
||||||
cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = DCTSIZE;
|
|
||||||
#else
|
|
||||||
cinfo->min_DCT_scaled_size = DCTSIZE;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
/* In selecting the actual DCT scaling for each component, we try to
|
/* In selecting the actual DCT scaling for each component, we try to
|
||||||
* scale up the chroma components via IDCT scaling rather than upsampling.
|
* scale up the chroma components via IDCT scaling rather than upsampling.
|
||||||
* This saves time if the upsampler gets to use 1:1 scaling.
|
* This saves time if the upsampler gets to use 1:1 scaling.
|
||||||
* Note this code assumes that the supported DCT scalings are powers of 2.
|
* Note this code adapts subsampling ratios which are powers of 2.
|
||||||
*/
|
*/
|
||||||
for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
|
for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
|
||||||
ci++, compptr++) {
|
ci++, compptr++) {
|
||||||
int ssize = cinfo->_min_DCT_scaled_size;
|
int ssize = cinfo->_min_DCT_scaled_size;
|
||||||
while (ssize < DCTSIZE &&
|
while (ssize < DCTSIZE &&
|
||||||
(compptr->h_samp_factor * ssize * 2 <=
|
((cinfo->max_h_samp_factor * cinfo->_min_DCT_scaled_size) %
|
||||||
cinfo->max_h_samp_factor * cinfo->_min_DCT_scaled_size) &&
|
(compptr->h_samp_factor * ssize * 2) == 0) &&
|
||||||
(compptr->v_samp_factor * ssize * 2 <=
|
((cinfo->max_v_samp_factor * cinfo->_min_DCT_scaled_size) %
|
||||||
cinfo->max_v_samp_factor * cinfo->_min_DCT_scaled_size)) {
|
(compptr->v_samp_factor * ssize * 2) == 0)) {
|
||||||
ssize = ssize * 2;
|
ssize = ssize * 2;
|
||||||
}
|
}
|
||||||
#if JPEG_LIB_VERSION >= 70
|
#if JPEG_LIB_VERSION >= 70
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* jdmerge.c
|
* jdmerge.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1996, Thomas G. Lane.
|
* Copyright (C) 1994-1996, Thomas G. Lane.
|
||||||
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2009, 2011, D. R. Commander.
|
* Copyright (C) 2009, 2011, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains code for merged upsampling/color conversion.
|
* This file contains code for merged upsampling/color conversion.
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jdmrgext.c
|
* jdmrgext.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1996, Thomas G. Lane.
|
* Copyright (C) 1994-1996, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2011, D. R. Commander.
|
* Copyright (C) 2011, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains code for merged upsampling/color conversion.
|
* This file contains code for merged upsampling/color conversion.
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* jdsample.c
|
* jdsample.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1996, Thomas G. Lane.
|
* Copyright (C) 1991-1996, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
||||||
* Copyright (C) 2010, D. R. Commander.
|
* Copyright (C) 2010, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains upsampling routines.
|
* This file contains upsampling routines.
|
||||||
|
|||||||
2236
jidctint.c
2236
jidctint.c
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jmorecfg.h
|
* jmorecfg.h
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2009, 2011, D. R. Commander.
|
* Copyright (C) 2009, 2011, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains additional configuration options that customize the
|
* This file contains additional configuration options that customize the
|
||||||
@@ -211,8 +212,11 @@ typedef unsigned int JDIMENSION;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef NEED_FAR_POINTERS
|
#ifdef NEED_FAR_POINTERS
|
||||||
|
#ifndef FAR
|
||||||
#define FAR far
|
#define FAR far
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
|
#undef FAR
|
||||||
#define FAR
|
#define FAR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,8 @@
|
|||||||
|
|
||||||
#if JPEG_LIB_VERSION >= 70
|
#if JPEG_LIB_VERSION >= 70
|
||||||
#define _DCT_scaled_size DCT_h_scaled_size
|
#define _DCT_scaled_size DCT_h_scaled_size
|
||||||
|
#define _DCT_h_scaled_size DCT_h_scaled_size
|
||||||
|
#define _DCT_v_scaled_size DCT_v_scaled_size
|
||||||
#define _min_DCT_scaled_size min_DCT_h_scaled_size
|
#define _min_DCT_scaled_size min_DCT_h_scaled_size
|
||||||
#define _min_DCT_h_scaled_size min_DCT_h_scaled_size
|
#define _min_DCT_h_scaled_size min_DCT_h_scaled_size
|
||||||
#define _min_DCT_v_scaled_size min_DCT_v_scaled_size
|
#define _min_DCT_v_scaled_size min_DCT_v_scaled_size
|
||||||
@@ -18,6 +20,8 @@
|
|||||||
#define _jpeg_height jpeg_height
|
#define _jpeg_height jpeg_height
|
||||||
#else
|
#else
|
||||||
#define _DCT_scaled_size DCT_scaled_size
|
#define _DCT_scaled_size DCT_scaled_size
|
||||||
|
#define _DCT_h_scaled_size DCT_scaled_size
|
||||||
|
#define _DCT_v_scaled_size DCT_scaled_size
|
||||||
#define _min_DCT_scaled_size min_DCT_scaled_size
|
#define _min_DCT_scaled_size min_DCT_scaled_size
|
||||||
#define _min_DCT_h_scaled_size min_DCT_scaled_size
|
#define _min_DCT_h_scaled_size min_DCT_scaled_size
|
||||||
#define _min_DCT_v_scaled_size min_DCT_scaled_size
|
#define _min_DCT_v_scaled_size min_DCT_scaled_size
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* jpeglib.h
|
* jpeglib.h
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1998, Thomas G. Lane.
|
* Copyright (C) 1991-1998, Thomas G. Lane.
|
||||||
* Modified 2002-2009 by Guido Vollbeding.
|
* Modified 2002-2009 by Guido Vollbeding.
|
||||||
* Copyright (C) 2009-2011, D. R. Commander.
|
* Modifications:
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* Copyright (C) 2009-2011, 2013, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file defines the application interface for the JPEG library.
|
* This file defines the application interface for the JPEG library.
|
||||||
@@ -912,7 +913,7 @@ typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo));
|
|||||||
#define jpeg_destroy_decompress jDestDecompress
|
#define jpeg_destroy_decompress jDestDecompress
|
||||||
#define jpeg_stdio_dest jStdDest
|
#define jpeg_stdio_dest jStdDest
|
||||||
#define jpeg_stdio_src jStdSrc
|
#define jpeg_stdio_src jStdSrc
|
||||||
#if JPEG_LIB_VERSION >= 80
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
#define jpeg_mem_dest jMemDest
|
#define jpeg_mem_dest jMemDest
|
||||||
#define jpeg_mem_src jMemSrc
|
#define jpeg_mem_src jMemSrc
|
||||||
#endif
|
#endif
|
||||||
@@ -999,7 +1000,7 @@ EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo));
|
|||||||
EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));
|
EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));
|
||||||
EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));
|
EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));
|
||||||
|
|
||||||
#if JPEG_LIB_VERSION >= 80
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
/* Data source and destination managers: memory buffers. */
|
/* Data source and destination managers: memory buffers. */
|
||||||
EXTERN(void) jpeg_mem_dest JPP((j_compress_ptr cinfo,
|
EXTERN(void) jpeg_mem_dest JPP((j_compress_ptr cinfo,
|
||||||
unsigned char ** outbuffer,
|
unsigned char ** outbuffer,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.TH JPEGTRAN 1 "31 January 2012"
|
.TH JPEGTRAN 1 "1 January 2013"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
jpegtran \- lossless transformation of JPEG files
|
jpegtran \- lossless transformation of JPEG files
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -251,6 +251,9 @@ Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
|
|||||||
Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44.
|
Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44.
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Independent JPEG Group
|
Independent JPEG Group
|
||||||
|
.PP
|
||||||
|
This file was modified by The libjpeg-turbo Project to include only information
|
||||||
|
relevant to libjpeg-turbo and to wordsmith certain sections.
|
||||||
.SH BUGS
|
.SH BUGS
|
||||||
The transform options can't transform odd-size images perfectly. Use
|
The transform options can't transform odd-size images perfectly. Use
|
||||||
.B \-trim
|
.B \-trim
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jpegtran.c
|
* jpegtran.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1995-2010, Thomas G. Lane, Guido Vollbeding.
|
* Copyright (C) 1995-2010, Thomas G. Lane, Guido Vollbeding.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2010, D. R. Commander.
|
* Copyright (C) 2010, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains a command-line user interface for JPEG transcoding.
|
* This file contains a command-line user interface for JPEG transcoding.
|
||||||
@@ -205,7 +206,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
fprintf(stderr, "%s version %s (build %s)\n",
|
fprintf(stderr, "%s version %s (build %s)\n",
|
||||||
PACKAGE_NAME, VERSION, BUILD);
|
PACKAGE_NAME, VERSION, BUILD);
|
||||||
fprintf(stderr, "%s\n\n", JCOPYRIGHT);
|
fprintf(stderr, "%s\n\n", JCOPYRIGHT);
|
||||||
fprintf(stderr, "Emulating The Independent JPEG Group's libjpeg, version %s\n\n",
|
fprintf(stderr, "Emulating The Independent JPEG Group's software, version %s\n\n",
|
||||||
JVERSION);
|
JVERSION);
|
||||||
printed_version = TRUE;
|
printed_version = TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jquant1.c
|
* jquant1.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1996, Thomas G. Lane.
|
* Copyright (C) 1991-1996, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2009, D. R. Commander
|
* Copyright (C) 2009, D. R. Commander
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains 1-pass color quantization (color mapping) routines.
|
* This file contains 1-pass color quantization (color mapping) routines.
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jquant2.c
|
* jquant2.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1996, Thomas G. Lane.
|
* Copyright (C) 1991-1996, Thomas G. Lane.
|
||||||
|
* Modifications:
|
||||||
* Copyright (C) 2009, D. R. Commander.
|
* Copyright (C) 2009, D. R. Commander.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains 2-pass color quantization (color mapping) routines.
|
* This file contains 2-pass color quantization (color mapping) routines.
|
||||||
|
|||||||
13
jversion.h
13
jversion.h
@@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* jversion.h
|
* jversion.h
|
||||||
*
|
*
|
||||||
* Copyright (C) 1991-2010, Thomas G. Lane, Guido Vollbeding.
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 2010, 2012, D. R. Commander.
|
* Copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* Modifications:
|
||||||
|
* Copyright (C) 2010, 2012-2013, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README file.
|
||||||
*
|
*
|
||||||
* This file contains software version identification.
|
* This file contains software version identification.
|
||||||
@@ -12,7 +13,7 @@
|
|||||||
|
|
||||||
#if JPEG_LIB_VERSION >= 80
|
#if JPEG_LIB_VERSION >= 80
|
||||||
|
|
||||||
#define JVERSION "8b 16-May-2010"
|
#define JVERSION "8d 15-Jan-2012"
|
||||||
|
|
||||||
#elif JPEG_LIB_VERSION >= 70
|
#elif JPEG_LIB_VERSION >= 70
|
||||||
|
|
||||||
@@ -24,8 +25,8 @@
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define JCOPYRIGHT "Copyright (C) 1991-2010 Thomas G. Lane, Guido Vollbeding\n" \
|
#define JCOPYRIGHT "Copyright (C) 1991-2012 Thomas G. Lane, Guido Vollbeding\n" \
|
||||||
"Copyright (C) 1999-2006 MIYASAKA Masaru\n" \
|
"Copyright (C) 1999-2006 MIYASAKA Masaru\n" \
|
||||||
"Copyright (C) 2009 Pierre Ossman for Cendio AB\n" \
|
"Copyright (C) 2009 Pierre Ossman for Cendio AB\n" \
|
||||||
"Copyright (C) 2009-2012 D. R. Commander\n" \
|
"Copyright (C) 2009-2013 D. R. Commander\n" \
|
||||||
"Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies)"
|
"Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies)"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
LIBJPEGTURBO_@JPEG_LIB_VERSION_DECIMAL@ {
|
LIBJPEGTURBO_@JPEG_LIB_VERSION_DECIMAL@ {
|
||||||
|
@MEM_SRCDST_FUNCTIONS@
|
||||||
local:
|
local:
|
||||||
jsimd_*;
|
jsimd_*;
|
||||||
jconst_*;
|
jconst_*;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user