Compare commits
304 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8162eddf04 | ||
|
|
2e136a7190 | ||
|
|
9f8f683e74 | ||
|
|
4dbc293125 | ||
|
|
59337a67b1 | ||
|
|
ba22c0f76d | ||
|
|
a405519e96 | ||
|
|
fac8381441 | ||
|
|
290ddbf71a | ||
|
|
9171fd4bde | ||
|
|
d0e7c4548a | ||
|
|
dfc63d42ee | ||
|
|
67cb059046 | ||
|
|
5c8cac97c0 | ||
|
|
df3c3dcb9b | ||
|
|
2ee7264d40 | ||
|
|
30cba2a2f8 | ||
|
|
a014845403 | ||
|
|
f3c716a2bc | ||
|
|
6f1534d618 | ||
|
|
9abeff46d8 | ||
|
|
932b5bb0d5 | ||
|
|
fdab4a7af4 | ||
|
|
0565548191 | ||
|
|
c5f269eb96 | ||
|
|
98bc3eeb3a | ||
|
|
147548c055 | ||
|
|
d640a45730 | ||
|
|
eb21c023ab | ||
|
|
13377e6b38 | ||
|
|
607b668ff9 | ||
|
|
ab6cae6f3b | ||
|
|
3ccb6ead23 | ||
|
|
6441ad0f83 | ||
|
|
6d2d6d3baf | ||
|
|
e1588a2a7b | ||
|
|
548490fe5e | ||
|
|
b579fc114d | ||
|
|
a3d4aadd0d | ||
|
|
d7d16df646 | ||
|
|
14ce28a92d | ||
|
|
da41ab94e7 | ||
|
|
1f55ae7b0f | ||
|
|
172972394a | ||
|
|
a7f0244e9b | ||
|
|
a01857cff6 | ||
|
|
57ba02a408 | ||
|
|
8a9a6dd15a | ||
|
|
73eff6effe | ||
|
|
2ce32e0fe5 | ||
|
|
e869a81a7a | ||
|
|
5446ff88d6 | ||
|
|
0f88060b0f | ||
|
|
ecf021bc0d | ||
|
|
4c5fa566b3 | ||
|
|
d401d62514 | ||
|
|
2fd4ae7b2c | ||
|
|
18edeff4e8 | ||
|
|
a9c41fbc4f | ||
|
|
739ecbc5ec | ||
|
|
4c313544e2 | ||
|
|
173900b1ca | ||
|
|
5d2430f4da | ||
|
|
129f0cb763 | ||
|
|
0a9b972178 | ||
|
|
2849d86aaa | ||
|
|
84d6306f64 | ||
|
|
e6e952d5d5 | ||
|
|
a72816ed07 | ||
|
|
4d9f256b01 | ||
|
|
b201838d8b | ||
|
|
a1bfc05854 | ||
|
|
2a2970af67 | ||
|
|
97a1575cb8 | ||
|
|
0081c2de20 | ||
|
|
9df5786f05 | ||
|
|
1a1fb615db | ||
|
|
5135c2e25d | ||
|
|
3932190c2e | ||
|
|
a219fd13b0 | ||
|
|
c23672ce52 | ||
|
|
4f51f36eb3 | ||
|
|
e0606dafff | ||
|
|
ffc1aa9674 | ||
|
|
55ec9b3b89 | ||
|
|
4de8f6922a | ||
|
|
785ec30eb4 | ||
|
|
d147be83e9 | ||
|
|
8fa70367ed | ||
|
|
171b875b27 | ||
|
|
3ab3234875 | ||
|
|
3e68a5ee20 | ||
|
|
4e45161654 | ||
|
|
629e96eedc | ||
|
|
ebaa67ea32 | ||
|
|
dd830b3ffe | ||
|
|
4ede2ef523 | ||
|
|
5cda8c5e31 | ||
|
|
47b66d1d1e | ||
|
|
55ab0d396c | ||
|
|
18bc4c6114 | ||
|
|
b1079002ad | ||
|
|
3311fc0001 | ||
|
|
34d264d64e | ||
|
|
f35fd27ec6 | ||
|
|
df17d398ec | ||
|
|
cd9a318502 | ||
|
|
d2d4465548 | ||
|
|
5536ace198 | ||
|
|
5dd906beff | ||
|
|
c81e91e8ca | ||
|
|
bff7959e34 | ||
|
|
6ad658be17 | ||
|
|
7b57cba6b4 | ||
|
|
2f9e8a1172 | ||
|
|
e4ec23d7ae | ||
|
|
e795afc330 | ||
|
|
2c01200c5d | ||
|
|
ed70101da2 | ||
|
|
8a2cad0201 | ||
|
|
b6772910d3 | ||
|
|
399aa374bd | ||
|
|
1719d12e51 | ||
|
|
486cdcfb9d | ||
|
|
74e6ea45e3 | ||
|
|
d2c4079959 | ||
|
|
3e8911aad5 | ||
|
|
4b838c38f9 | ||
|
|
944f5915cd | ||
|
|
3179f330b2 | ||
|
|
1388ad6757 | ||
|
|
110d8d6dca | ||
|
|
7b68764905 | ||
|
|
21d056847b | ||
|
|
6e4509a3f1 | ||
|
|
c7ca521bc8 | ||
|
|
ccaba5d789 | ||
|
|
cfc7e6e58e | ||
|
|
4e52b66f34 | ||
|
|
8cf6f716bc | ||
|
|
eb14189caa | ||
|
|
91dd3b23ad | ||
|
|
7e0d94d3a7 | ||
|
|
1c839761cf | ||
|
|
6d91e950c8 | ||
|
|
d523435e18 | ||
|
|
1ac83cd636 | ||
|
|
0ba70b6a13 | ||
|
|
e417033d84 | ||
|
|
6d2e8837b4 | ||
|
|
f7c5489244 | ||
|
|
f7a10a61e3 | ||
|
|
d111d9ff7a | ||
|
|
10ba6ed336 | ||
|
|
292d78e786 | ||
|
|
88bf1d1678 | ||
|
|
8f8305981b | ||
|
|
42f7c78fe3 | ||
|
|
33859880e9 | ||
|
|
3e9e7c7055 | ||
|
|
bbd8089297 | ||
|
|
141f26ff6d | ||
|
|
4574f01f43 | ||
|
|
ba52a3de32 | ||
|
|
240ba417aa | ||
|
|
ed581cd935 | ||
|
|
2c6b68e283 | ||
|
|
2acfb93c94 | ||
|
|
975307775c | ||
|
|
5dbd39323c | ||
|
|
0f35cd68f2 | ||
|
|
f3c3f01d23 | ||
|
|
d0004de5dd | ||
|
|
3d84668d42 | ||
|
|
951d3677eb | ||
|
|
366168aa7d | ||
|
|
f73b1dbc60 | ||
|
|
4f2216b435 | ||
|
|
0efc4858d4 | ||
|
|
02227e48a9 | ||
|
|
c7dd191271 | ||
|
|
40557b2301 | ||
|
|
a524b9b06b | ||
|
|
7c1a1789d2 | ||
|
|
6e632af9f6 | ||
|
|
cd342acf7f | ||
|
|
c3bfbde21d | ||
|
|
a8656d703d | ||
|
|
9ecb67c219 | ||
|
|
53c685b7f4 | ||
|
|
d27b935a88 | ||
|
|
88ae60986e | ||
|
|
7e4eac7021 | ||
|
|
9fc018fd1a | ||
|
|
96e4e7eb60 | ||
|
|
26e3aedbe5 | ||
|
|
b4525f9f16 | ||
|
|
59352195b2 | ||
|
|
f7ca3c5a3d | ||
|
|
1ed312eab6 | ||
|
|
b8200c6601 | ||
|
|
ea8f643c16 | ||
|
|
460dfe40e1 | ||
|
|
ae08115d4d | ||
|
|
b5a1472781 | ||
|
|
190382b75f | ||
|
|
8789a5e255 | ||
|
|
89c88c2509 | ||
|
|
2ec4a5ebe3 | ||
|
|
1d7faf84a0 | ||
|
|
8e895c79e1 | ||
|
|
2b121d39e7 | ||
|
|
2d14fc2e3b | ||
|
|
6ab61fa1d1 | ||
|
|
fe5b6a1c7c | ||
|
|
6ee5d5f568 | ||
|
|
fe79f56b77 | ||
|
|
c1037f4380 | ||
|
|
30282a878c | ||
|
|
a46c111d9f | ||
|
|
9120a24743 | ||
|
|
c965dc7a79 | ||
|
|
b9142b21f8 | ||
|
|
7d829bfa30 | ||
|
|
fb6f5e8b01 | ||
|
|
c77783ed41 | ||
|
|
4c5a15c362 | ||
|
|
b797f70012 | ||
|
|
80d77720c3 | ||
|
|
aecee25695 | ||
|
|
70040cb7ee | ||
|
|
219e8e8f65 | ||
|
|
b0f92a1d6c | ||
|
|
77ff3bd66d | ||
|
|
00d48d7e8c | ||
|
|
9a2cf32317 | ||
|
|
6aabca86d3 | ||
|
|
379edfd815 | ||
|
|
ada6ea5105 | ||
|
|
167b5a8059 | ||
|
|
4c57ad476c | ||
|
|
04d3143a65 | ||
|
|
b34c85ea4a | ||
|
|
c4675d62e8 | ||
|
|
80acd5c4a7 | ||
|
|
5000eaa3a6 | ||
|
|
e98b061282 | ||
|
|
54288598bb | ||
|
|
81b8c0eed5 | ||
|
|
52fef34928 | ||
|
|
e821464f79 | ||
|
|
b8a7680e12 | ||
|
|
f64c5508df | ||
|
|
26b4d62a65 | ||
|
|
9c6f79e919 | ||
|
|
f60b6dd36f | ||
|
|
c43a5081ce | ||
|
|
713c451f58 | ||
|
|
2234deeeed | ||
|
|
82695cfddf | ||
|
|
42825b68d5 | ||
|
|
f2d4b47315 | ||
|
|
45dff48c9f | ||
|
|
d70047fcd2 | ||
|
|
cbf0fcc8b7 | ||
|
|
bbedb4b564 | ||
|
|
087c29e07f | ||
|
|
d92ae5df0c | ||
|
|
adf9cc942f | ||
|
|
95f4d6ef8b | ||
|
|
2ae2bd66b4 | ||
|
|
b7523059c1 | ||
|
|
b4110b65fc | ||
|
|
8ef53b102f | ||
|
|
7fbfe29c65 | ||
|
|
051f4862f9 | ||
|
|
c055c88057 | ||
|
|
85d96d4478 | ||
|
|
f36d531553 | ||
|
|
8a0e35b212 | ||
|
|
afbe48c290 | ||
|
|
98ff5507d8 | ||
|
|
3ca6dba96e | ||
|
|
aaf58dabb6 | ||
|
|
a9075a17c3 | ||
|
|
bdec995839 | ||
|
|
fa905fbf7b | ||
|
|
9aada25ced | ||
|
|
73fd604161 | ||
|
|
2f9e7c84d1 | ||
|
|
3c7199ff06 | ||
|
|
73b98acd8b | ||
|
|
bb0d170288 | ||
|
|
db84125fcb | ||
|
|
ae4221f905 | ||
|
|
674343ab14 | ||
|
|
6fac90945a | ||
|
|
01e3032354 | ||
|
|
42d62bf114 | ||
|
|
a39c970d27 | ||
|
|
12f3d0be84 | ||
|
|
2cc4f93c88 | ||
|
|
133e4af070 | ||
|
|
995eb29dc3 |
3
.gitattributes
vendored
@@ -1,5 +1,4 @@
|
|||||||
/.travis.yml export-ignore
|
|
||||||
/appveyor.yml export-ignore
|
/appveyor.yml export-ignore
|
||||||
/ci export-ignore
|
|
||||||
/.gitattributes export-ignore
|
/.gitattributes export-ignore
|
||||||
/.github export-ignore
|
/.github export-ignore
|
||||||
|
*.ppm binary
|
||||||
|
|||||||
1
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
github: libjpeg-turbo
|
||||||
2
.github/ISSUE_TEMPLATE/bug-report.md
vendored
@@ -31,7 +31,7 @@ assignees: dcommander
|
|||||||
**Platform(s) (compiler version, operating system version, CPU) on which the bug was observed:**
|
**Platform(s) (compiler version, operating system version, CPU) on which the bug was observed:**
|
||||||
|
|
||||||
|
|
||||||
**libjpeg-turbo release(s), commit(s), or branch(es) in which the bug was observed (always test the tip of the master branch or the latest [stable pre-release](https://libjpeg-turbo.org/DeveloperInfo/PreReleases) to verify that the bug hasn't already been fixed):**
|
**libjpeg-turbo release(s), commit(s), or branch(es) in which the bug was observed (always test the tip of the main branch or the latest [stable pre-release](https://libjpeg-turbo.org/DeveloperInfo/PreReleases) to verify that the bug hasn't already been fixed):**
|
||||||
|
|
||||||
|
|
||||||
**If the bug is a regression, the specific commit that introduced the regression (use `git bisect` to determine this):**
|
**If the bug is a regression, the specific commit that introduced the regression (use `git bisect` to determine this):**
|
||||||
|
|||||||
193
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
name: Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '**'
|
||||||
|
tags-ignore:
|
||||||
|
- '**'
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linux:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Set global environment variables
|
||||||
|
run: |
|
||||||
|
echo "BRANCH=${GITHUB_BASE_REF:-${GITHUB_REF#refs/heads/}}" >$GITHUB_ENV
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up build
|
||||||
|
run: |
|
||||||
|
mkdir -p $HOME/src/ljt.nightly
|
||||||
|
docker pull dcommander/buildljt:$BRANCH
|
||||||
|
git clone --depth=1 https://github.com/libjpeg-turbo/buildscripts.git -b $BRANCH $HOME/src/buildscripts
|
||||||
|
mkdir $HOME/rpmkeys
|
||||||
|
wget --no-check-certificate "http://www.libjpeg-turbo.org/key/LJTPR-GPG-KEY" -O $HOME/rpmkeys/LJTPR-GPG-KEY
|
||||||
|
- name: Configure GPG signing
|
||||||
|
if: ${{github.event_name != 'pull_request'}}
|
||||||
|
run: |
|
||||||
|
sudo apt install -y gnupg1
|
||||||
|
printf "${{secrets.GPG_KEY}}" | base64 --decode | gpg1 --batch --import -
|
||||||
|
chmod 600 $HOME/.gnupg/gpg.conf
|
||||||
|
echo "GPG_KEY_NAME=\"${{secrets.GPG_KEY_NAME}}\"" >$HOME/src/buildscripts/gpgsign
|
||||||
|
echo "GPG_KEY_ID=${{secrets.GPG_KEY_ID}}" >>$HOME/src/buildscripts/gpgsign
|
||||||
|
echo "GPG_KEY_PASS=${{secrets.GPG_KEY_PASS}}" >>$HOME/src/buildscripts/gpgsign
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
docker run -v $HOME/src/ljt.nightly:/root/src/ljt.nightly -v $HOME/src/buildscripts:/root/src/buildscripts -v $GITHUB_WORKSPACE:/root/src/libjpeg-turbo -v $HOME/.gnupg:/root/.gnupg -v $HOME/rpmkeys:/rpmkeys -t dcommander/buildljt:$BRANCH bash -c "rpm --import /rpmkeys/LJTPR-GPG-KEY && ~/src/buildscripts/buildljt -d /root/src/libjpeg-turbo -v"
|
||||||
|
sudo chown -R runner:runner $HOME/src/ljt.nightly
|
||||||
|
mv $HOME/src/ljt.nightly/latest/log-${{github.job}}.txt $HOME/src/ljt.nightly/latest/files/
|
||||||
|
- name: Configure AWS
|
||||||
|
if: ${{github.event_name != 'pull_request'}}
|
||||||
|
uses: aws-actions/configure-aws-credentials@v1
|
||||||
|
with:
|
||||||
|
aws-access-key-id: ${{secrets.AWS_ACCESS_KEY_ID}}
|
||||||
|
aws-secret-access-key: ${{secrets.AWS_SECRET_ACCESS_KEY}}
|
||||||
|
aws-region: ${{secrets.AWS_REGION}}
|
||||||
|
- name: Deploy
|
||||||
|
if: ${{github.event_name != 'pull_request'}}
|
||||||
|
run: |
|
||||||
|
aws s3 sync --acl public-read --delete $HOME/src/ljt.nightly/latest/files/ s3://libjpeg-turbo-pr/${{env.BRANCH}}/${{github.job}}/
|
||||||
|
macos:
|
||||||
|
runs-on: macos-10.15
|
||||||
|
steps:
|
||||||
|
- name: Set global environment variables
|
||||||
|
run: |
|
||||||
|
echo "BRANCH=${GITHUB_BASE_REF:-${GITHUB_REF#refs/heads/}}" >$GITHUB_ENV
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up build
|
||||||
|
run: |
|
||||||
|
brew install yasm md5sha1sum
|
||||||
|
mkdir -p $HOME/src/ljt.nightly
|
||||||
|
git clone --depth=1 https://github.com/libjpeg-turbo/buildscripts.git -b $BRANCH $HOME/src/buildscripts
|
||||||
|
- name: Configure GPG signing
|
||||||
|
if: ${{github.event_name != 'pull_request'}}
|
||||||
|
run: |
|
||||||
|
printf "${{secrets.GPG_KEY}}" | base64 --decode | gpg --batch --import -
|
||||||
|
echo "GPG_KEY_NAME=\"${{secrets.GPG_KEY_NAME}}\"" >$HOME/src/buildscripts/gpgsign
|
||||||
|
echo "GPG_KEY_ID=${{secrets.GPG_KEY_ID}}" >>$HOME/src/buildscripts/gpgsign
|
||||||
|
echo "GPG_KEY_PASS=${{secrets.GPG_KEY_PASS}}" >>$HOME/src/buildscripts/gpgsign
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
$HOME/src/buildscripts/buildljt -d $GITHUB_WORKSPACE -v
|
||||||
|
mv $HOME/src/ljt.nightly/latest/log-${{github.job}}.txt $HOME/src/ljt.nightly/latest/files/
|
||||||
|
- name: Configure AWS
|
||||||
|
if: ${{github.event_name != 'pull_request'}}
|
||||||
|
uses: aws-actions/configure-aws-credentials@v1
|
||||||
|
with:
|
||||||
|
aws-access-key-id: ${{secrets.AWS_ACCESS_KEY_ID}}
|
||||||
|
aws-secret-access-key: ${{secrets.AWS_SECRET_ACCESS_KEY}}
|
||||||
|
aws-region: ${{secrets.AWS_REGION}}
|
||||||
|
- name: Deploy
|
||||||
|
if: ${{github.event_name != 'pull_request'}}
|
||||||
|
run: |
|
||||||
|
aws s3 sync --acl public-read --delete $HOME/src/ljt.nightly/latest/files/ s3://libjpeg-turbo-pr/${{env.BRANCH}}/${{github.job}}/
|
||||||
|
linux-asan-ubsan:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up build
|
||||||
|
run: |
|
||||||
|
sudo apt install -y nasm
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
ASAN_OPTIONS: "detect_leaks=1 symbolize=1"
|
||||||
|
CTEST_OUTPUT_ON_FAILURE: 1
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
pushd build
|
||||||
|
cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER=clang -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O1 -g -fsanitize=address,undefined -fno-sanitize-recover=all -fno-omit-frame-pointer" -DENABLE_SHARED=0 ..
|
||||||
|
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
|
||||||
|
make -j$NUMCPUS --load-average=$NUMCPUS
|
||||||
|
make test
|
||||||
|
JSIMD_FORCESSE2=1 make test
|
||||||
|
cmake -DFLOATTEST=no-fp-contract ..
|
||||||
|
JSIMD_FORCENONE=1 make test
|
||||||
|
popd
|
||||||
|
linux-12bit:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
CTEST_OUTPUT_ON_FAILURE: 1
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
pushd build
|
||||||
|
cmake -G"Unix Makefiles" -DWITH_12BIT=1 \
|
||||||
|
-DCMAKE_C_FLAGS='--std=gnu90 -Wall -Werror -Wextra -Wpedantic -pedantic-errors -Wdouble-promotion -Wformat-overflow=2 -Wformat-security -Wformat-signedness -Wformat-truncation=2 -Wformat-y2k -Wmissing-include-dirs -Wshift-overflow=2 -Wswitch-bool -Wno-unused-parameter -Wuninitialized -Wstrict-overflow=2 -Wstringop-overflow=4 -Wstringop-truncation -Wduplicated-branches -Wduplicated-cond -Wdeclaration-after-statement -Wshadow -Wunsafe-loop-optimizations -Wundef -Wcast-align -Wno-clobbered -Wjump-misses-init -Wno-sign-compare -Wlogical-op -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wno-long-long -Wdisabled-optimization -Wno-overlength-strings' \
|
||||||
|
..
|
||||||
|
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
|
||||||
|
make -j$NUMCPUS --load-average=$NUMCPUS
|
||||||
|
make test
|
||||||
|
popd
|
||||||
|
linux-jpeg7-x32:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up build
|
||||||
|
run: |
|
||||||
|
sudo apt update
|
||||||
|
sudo apt -y --install-recommends install libc6-dev-x32 nasm
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
CTEST_OUTPUT_ON_FAILURE: 1
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
pushd build
|
||||||
|
cmake -G"Unix Makefiles" -DWITH_JPEG7=1 -DCMAKE_C_FLAGS=-mx32 \
|
||||||
|
-DCMAKE_C_FLAGS='--std=gnu90 -Wall -Werror -Wextra -Wpedantic -pedantic-errors -Wdouble-promotion -Wformat-overflow=2 -Wformat-security -Wformat-signedness -Wformat-truncation=2 -Wformat-y2k -Wmissing-include-dirs -Wshift-overflow=2 -Wswitch-bool -Wno-unused-parameter -Wuninitialized -Wstrict-overflow=2 -Wstringop-overflow=4 -Wstringop-truncation -Wduplicated-branches -Wduplicated-cond -Wdeclaration-after-statement -Wshadow -Wunsafe-loop-optimizations -Wundef -Wcast-align -Wno-clobbered -Wjump-misses-init -Wno-sign-compare -Wlogical-op -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wno-long-long -Wdisabled-optimization -Wno-overlength-strings' \
|
||||||
|
..
|
||||||
|
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
|
||||||
|
make -j$NUMCPUS --load-average=$NUMCPUS
|
||||||
|
make test
|
||||||
|
JSIMD_FORCESSE2=1 make test
|
||||||
|
cmake -DFLOATTEST=no-fp-contract ..
|
||||||
|
JSIMD_FORCENONE=1 make test
|
||||||
|
popd
|
||||||
|
linux-jpeg8:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up build
|
||||||
|
run: |
|
||||||
|
sudo apt -y install nasm
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
CTEST_OUTPUT_ON_FAILURE: 1
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
pushd build
|
||||||
|
cmake -G"Unix Makefiles" -DWITH_JPEG8=1 \
|
||||||
|
-DCMAKE_C_FLAGS='--std=gnu90 -Wall -Werror -Wextra -Wpedantic -pedantic-errors -Wdouble-promotion -Wformat-overflow=2 -Wformat-security -Wformat-signedness -Wformat-truncation=2 -Wformat-y2k -Wmissing-include-dirs -Wshift-overflow=2 -Wswitch-bool -Wno-unused-parameter -Wuninitialized -Wstrict-overflow=2 -Wstringop-overflow=4 -Wstringop-truncation -Wduplicated-branches -Wduplicated-cond -Wdeclaration-after-statement -Wshadow -Wunsafe-loop-optimizations -Wundef -Wcast-align -Wno-clobbered -Wjump-misses-init -Wno-sign-compare -Wlogical-op -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wno-long-long -Wdisabled-optimization -Wno-overlength-strings' \
|
||||||
|
..
|
||||||
|
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
|
||||||
|
make -j$NUMCPUS --load-average=$NUMCPUS
|
||||||
|
make test
|
||||||
|
JSIMD_FORCESSE2=1 make test
|
||||||
|
cmake -DFLOATTEST=no-fp-contract ..
|
||||||
|
JSIMD_FORCENONE=1 make test
|
||||||
|
popd
|
||||||
|
linux-msan:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
CTEST_OUTPUT_ON_FAILURE: 1
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
pushd build
|
||||||
|
cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER=clang -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O3 -g -fsanitize=memory -fno-sanitize-recover=all -fPIE" -DWITH_SIMD=0 ..
|
||||||
|
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
|
||||||
|
make -j$NUMCPUS --load-average=$NUMCPUS
|
||||||
|
make test
|
||||||
|
popd
|
||||||
153
.travis.yml
@@ -1,153 +0,0 @@
|
|||||||
language: c
|
|
||||||
|
|
||||||
branches:
|
|
||||||
except:
|
|
||||||
- /^[0-9]+\.[0-9]+\.[0-9]+/
|
|
||||||
- /^jpeg-.*/
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- os: linux
|
|
||||||
env: BUILD_OFFICIAL=1
|
|
||||||
sudo: required
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
- os: osx
|
|
||||||
env: BUILD_OFFICIAL=1
|
|
||||||
osx_image: xcode8.3
|
|
||||||
- os: linux
|
|
||||||
compiler: clang
|
|
||||||
env:
|
|
||||||
CMAKE_BUILD_TYPE=RelWithDebInfo
|
|
||||||
CFLAGS_RELWITHDEBINFO="-O1 -g -fsanitize=address,undefined -fno-omit-frame-pointer"
|
|
||||||
CMAKE_FLAGS="-DENABLE_SHARED=0"
|
|
||||||
ASAN_OPTIONS="detect_leaks=1 symbolize=1"
|
|
||||||
CTEST_OUTPUT_ON_FAILURE=1
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- nasm
|
|
||||||
- os: linux
|
|
||||||
compiler: gcc
|
|
||||||
env:
|
|
||||||
CMAKE_FLAGS="-DWITH_12BIT=1"
|
|
||||||
CTEST_OUTPUT_ON_FAILURE=1
|
|
||||||
- os: linux
|
|
||||||
compiler: gcc
|
|
||||||
env:
|
|
||||||
CMAKE_FLAGS="-DWITH_JPEG7=1"
|
|
||||||
CTEST_OUTPUT_ON_FAILURE=1
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- nasm
|
|
||||||
- os: linux
|
|
||||||
compiler: gcc
|
|
||||||
env:
|
|
||||||
CMAKE_FLAGS="-DWITH_JPEG8=1"
|
|
||||||
CTEST_OUTPUT_ON_FAILURE=1
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- nasm
|
|
||||||
- os: linux
|
|
||||||
compiler: clang
|
|
||||||
env:
|
|
||||||
CMAKE_BUILD_TYPE=RelWithDebInfo
|
|
||||||
CFLAGS_RELWITHDEBINFO="-O3 -g -fsanitize=memory -fPIE"
|
|
||||||
CMAKE_FLAGS="-DWITH_SIMD=0"
|
|
||||||
CTEST_OUTPUT_ON_FAILURE=1
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
|
||||||
pushd $HOME/Downloads &&
|
|
||||||
curl -LO https://updates.cdn-apple.com/2019/cert/041-88384-20191011-3d8da658-dca4-4a5b-b67c-26e686876403/JavaForOSX.dmg &&
|
|
||||||
hdid JavaForOSX.dmg &&
|
|
||||||
sudo installer -pkg /Volumes/Java\ for\ macOS\ 2017-001/JavaForOSX.pkg -target / &&
|
|
||||||
hdiutil detach /Volumes/Java\ for\ macOS\ 2017-001 &&
|
|
||||||
curl -LO https://raw.githubusercontent.com/GiovanniBussi/macports-ci/master/macports-ci &&
|
|
||||||
. ./macports-ci install &&
|
|
||||||
sudo /opt/local/bin/port -N install gcc5 yasm md5sha1sum &&
|
|
||||||
popd &&
|
|
||||||
git clone --depth=1 https://github.com/libjpeg-turbo/gas-preprocessor.git ~/src/gas-preprocessor &&
|
|
||||||
ln -fs /Applications/Xcode.app /Applications/Xcode72.app;
|
|
||||||
fi
|
|
||||||
- if [ "${BUILD_OFFICIAL:-}" != "" ]; then
|
|
||||||
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
|
||||||
docker pull dcommander/buildljt;
|
|
||||||
fi &&
|
|
||||||
git clone --depth=1 https://github.com/libjpeg-turbo/buildscripts.git -b $TRAVIS_BRANCH ~/src/buildscripts &&
|
|
||||||
if [ -n "$encrypted_f92e8533f6f1_iv" ]; then
|
|
||||||
openssl aes-256-cbc -K $encrypted_f92e8533f6f1_key -iv $encrypted_f92e8533f6f1_iv -in ci/keys.enc -out ci/keys -d &&
|
|
||||||
tar xf ci/keys &&
|
|
||||||
rm ci/keys &&
|
|
||||||
mv ci/gpgsign ~/src/buildscripts &&
|
|
||||||
gpg --batch --import ci/sign_ljt &&
|
|
||||||
rm ci/sign_ljt;
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
script:
|
|
||||||
- if [ "${BUILD_OFFICIAL:-}" != "" ]; then
|
|
||||||
mkdir -p ~/src/ljt.nightly &&
|
|
||||||
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
|
||||||
mkdir $HOME/rpmkeys &&
|
|
||||||
wget --no-check-certificate "http://www.libjpeg-turbo.org/key/LJTPR-GPG-KEY" -O $HOME/rpmkeys/LJTPR-GPG-KEY &&
|
|
||||||
docker run -v $HOME/src/ljt.nightly:/root/src/ljt.nightly -v $HOME/src/buildscripts:/root/src/buildscripts -v $TRAVIS_BUILD_DIR:/root/src/libjpeg-turbo -v $HOME/.gnupg:/root/.gnupg -v $HOME/rpmkeys:/rpmkeys -t dcommander/buildljt:latest bash -c "rpm --import /rpmkeys/LJTPR-GPG-KEY && ~/src/buildscripts/buildljt -d /root/src/libjpeg-turbo -v" &&
|
|
||||||
sudo chown -R travis:travis ~/src/ljt.nightly &&
|
|
||||||
mv ~/src/ljt.nightly/latest/log-$TRAVIS_OS_NAME.txt ~/src/ljt.nightly/latest/files/;
|
|
||||||
else
|
|
||||||
PATH=$PATH:~/src/gas-preprocessor ~/src/buildscripts/buildljt -d $TRAVIS_BUILD_DIR -v &&
|
|
||||||
mv ~/src/ljt.nightly/latest/log-$TRAVIS_OS_NAME.txt ~/src/ljt.nightly/latest/files/;
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
- if [ "${BUILD_OFFICIAL:-}" == "" ]; then
|
|
||||||
mkdir build &&
|
|
||||||
pushd build &&
|
|
||||||
cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE "-DCMAKE_C_FLAGS_RELWITHDEBINFO=$CFLAGS_RELWITHDEBINFO" $CMAKE_FLAGS .. &&
|
|
||||||
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo` &&
|
|
||||||
make -j$NUMCPUS --load-average=$NUMCPUS &&
|
|
||||||
make test &&
|
|
||||||
if [[ ! "${CMAKE_FLAGS[0]}" =~ "WITH_12BIT" &&
|
|
||||||
! "${CMAKE_FLAGS[0]}" =~ "WITH_SIMD" ]]; then
|
|
||||||
JSIMD_FORCESSE2=1 make test &&
|
|
||||||
cmake -DFLOATTEST=32bit .. &&
|
|
||||||
JSIMD_FORCENONE=1 make test;
|
|
||||||
fi &&
|
|
||||||
popd;
|
|
||||||
fi
|
|
||||||
|
|
||||||
after_failure:
|
|
||||||
- if [ "${BUILD_OFFICIAL:-}" == "" ]; then
|
|
||||||
if [ -f $TRAVIS_BUILD_DIR/build/config.log ]; then
|
|
||||||
cat $TRAVIS_BUILD_DIR/build/config.log;
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
- provider: s3
|
|
||||||
bucket: libjpeg-turbo-pr
|
|
||||||
access_key_id:
|
|
||||||
secure: bmFEt4H90/oR/LiN9XI+G26Pd6hiyrTw3+Vg3lS4ynwAYk33weApaVM8CyzQTgIhGSPzFStqVm9fTrb3RmrYP/PnNS+/surOeWLkH2DMRxvc0qmetBuNx1+vAN7FUkY8MO/u5uE9WXHAdp4e64pXcLXEbKmh+wgDm72b35WmMxErtHsGbpqy+j47rQkY4BJGi7XQzjjafaamfm4PzitsjkYYsgX8KLI16jyJEIirvyDHCPTn9wKR/jSjelDl+xTlgZGuCqmLCBW8f6JgycIspWjcYfO4WpWvkbnnI2sl3rCMPvOYc4wHe8SwzG0l4tM1PblZZDRcU7vjE15PmNf1Xfq9Vx3RpgBJv+UBNL/Vn0rKdpUCeEcfC12hxrske8DWpV6waBiDivjQJreE+YRXqa5YBhV/EdkoKYCqafnJvRASlOko9evje8F9KXTNsIGTT1HPmU9QM9WoJwLs/Xa3t09EmA2IjhcuAvvUmwCTuBBQVAlDjExiTT3Zhc9IYZDD92JgpAYLgridtzR87ElOxKhTkR4PowdI6UiLYArPjMFTjoz5Rivb9qNpbLaQC8HCYgLWxpWtUTzlW/9rM8izHpF8ySFHjO6E2aA9OJFc0tcbEGwAs2jLGD01OduU+DbBfsIkW0EgfXCPbD3FVgHsn3tkuzgO/bg20SM7uuCEYKQ=
|
|
||||||
secret_access_key:
|
|
||||||
secure: mrkOpEtqd2dEmi/qNJyX9vkME+6xgVBnXaRETKF7jT+flcQCQ0ayQkRkMV7lzGqq44XFg+n6Cpfn6oW0gH9RNdcC8YQvFP+kgzPx6nw6V/M31Vz6ySapJf59HBzVevf0NJkr0/1JoWsp1iq4IoN10WPzsCXZB55Io3Cf7DgpR+yiyBlWOctDfNdjJ97Juw3ENE80MHDf0fVqdUOIknQka1p68yAGkjar9kc2Oe7o94RzzmoqEn8tuFumiBQjIcuVRALsKqz+eIxBNgkL3BF9shVyRjOWLAeBhMPVFxZs5Dgd4ECbvU0i33gfmje3d6qqcw78N2lZaLefoVvWol3pOzVO133ewOSY9/lmpqEiRUU2ohEe8T4aSoS7posBW42itUTO4Y5w+eVOnHsm4sRQaI+/AXWTe7GPel+P8Qbe8Ya10A5gnpoag7o3raRDcHx+/qaZw1Af/u4XiAOYz3be3U90Qc+YMc/kS5i8BH0GXBbSfaWQ00CwRFlZQ3n1xUqmjC2CmjZTki3W/p7mEt0DjhcH9ZIXscK603sCC+mF6pEd9019k5fG/8fr2Y4Ptai9kd3BxZJCX9/jSoMfWOBbgkA5bRgHU0xrAj+p49qD6Ej9Xr8GE3+uebz3sEuhSFRnCKwKoOHOemfgevfO2y/jQXP677WPf3xQX7bVDfTFSHU=
|
|
||||||
acl: public_read
|
|
||||||
local-dir: $HOME/src/ljt.nightly/latest/files
|
|
||||||
upload-dir: $TRAVIS_BRANCH/$TRAVIS_OS_NAME
|
|
||||||
on:
|
|
||||||
repo: libjpeg-turbo/libjpeg-turbo
|
|
||||||
branch: master
|
|
||||||
condition: -n "$BUILD_OFFICIAL"
|
|
||||||
- provider: s3
|
|
||||||
bucket: libjpeg-turbo-pr
|
|
||||||
access_key_id:
|
|
||||||
secure: bmFEt4H90/oR/LiN9XI+G26Pd6hiyrTw3+Vg3lS4ynwAYk33weApaVM8CyzQTgIhGSPzFStqVm9fTrb3RmrYP/PnNS+/surOeWLkH2DMRxvc0qmetBuNx1+vAN7FUkY8MO/u5uE9WXHAdp4e64pXcLXEbKmh+wgDm72b35WmMxErtHsGbpqy+j47rQkY4BJGi7XQzjjafaamfm4PzitsjkYYsgX8KLI16jyJEIirvyDHCPTn9wKR/jSjelDl+xTlgZGuCqmLCBW8f6JgycIspWjcYfO4WpWvkbnnI2sl3rCMPvOYc4wHe8SwzG0l4tM1PblZZDRcU7vjE15PmNf1Xfq9Vx3RpgBJv+UBNL/Vn0rKdpUCeEcfC12hxrske8DWpV6waBiDivjQJreE+YRXqa5YBhV/EdkoKYCqafnJvRASlOko9evje8F9KXTNsIGTT1HPmU9QM9WoJwLs/Xa3t09EmA2IjhcuAvvUmwCTuBBQVAlDjExiTT3Zhc9IYZDD92JgpAYLgridtzR87ElOxKhTkR4PowdI6UiLYArPjMFTjoz5Rivb9qNpbLaQC8HCYgLWxpWtUTzlW/9rM8izHpF8ySFHjO6E2aA9OJFc0tcbEGwAs2jLGD01OduU+DbBfsIkW0EgfXCPbD3FVgHsn3tkuzgO/bg20SM7uuCEYKQ=
|
|
||||||
secret_access_key:
|
|
||||||
secure: mrkOpEtqd2dEmi/qNJyX9vkME+6xgVBnXaRETKF7jT+flcQCQ0ayQkRkMV7lzGqq44XFg+n6Cpfn6oW0gH9RNdcC8YQvFP+kgzPx6nw6V/M31Vz6ySapJf59HBzVevf0NJkr0/1JoWsp1iq4IoN10WPzsCXZB55Io3Cf7DgpR+yiyBlWOctDfNdjJ97Juw3ENE80MHDf0fVqdUOIknQka1p68yAGkjar9kc2Oe7o94RzzmoqEn8tuFumiBQjIcuVRALsKqz+eIxBNgkL3BF9shVyRjOWLAeBhMPVFxZs5Dgd4ECbvU0i33gfmje3d6qqcw78N2lZaLefoVvWol3pOzVO133ewOSY9/lmpqEiRUU2ohEe8T4aSoS7posBW42itUTO4Y5w+eVOnHsm4sRQaI+/AXWTe7GPel+P8Qbe8Ya10A5gnpoag7o3raRDcHx+/qaZw1Af/u4XiAOYz3be3U90Qc+YMc/kS5i8BH0GXBbSfaWQ00CwRFlZQ3n1xUqmjC2CmjZTki3W/p7mEt0DjhcH9ZIXscK603sCC+mF6pEd9019k5fG/8fr2Y4Ptai9kd3BxZJCX9/jSoMfWOBbgkA5bRgHU0xrAj+p49qD6Ej9Xr8GE3+uebz3sEuhSFRnCKwKoOHOemfgevfO2y/jQXP677WPf3xQX7bVDfTFSHU=
|
|
||||||
acl: public_read
|
|
||||||
local-dir: $HOME/src/ljt.nightly/latest/files
|
|
||||||
upload-dir: $TRAVIS_BRANCH/$TRAVIS_OS_NAME
|
|
||||||
on:
|
|
||||||
repo: libjpeg-turbo/libjpeg-turbo
|
|
||||||
branch: dev
|
|
||||||
condition: -n "$BUILD_OFFICIAL"
|
|
||||||
252
BUILDING.md
@@ -10,38 +10,24 @@ Build Requirements
|
|||||||
|
|
||||||
- [CMake](http://www.cmake.org) v2.8.12 or later
|
- [CMake](http://www.cmake.org) v2.8.12 or later
|
||||||
|
|
||||||
- [NASM](http://www.nasm.us) or [YASM](http://yasm.tortall.net)
|
- [NASM](http://www.nasm.us) or [Yasm](http://yasm.tortall.net)
|
||||||
(if building x86 or x86-64 SIMD extensions)
|
(if building x86 or x86-64 SIMD extensions)
|
||||||
* If using NASM, 2.10 or later is required.
|
* If using NASM, 2.13 or later is required.
|
||||||
* If using NASM, 2.10 or later (except 2.11.08) is required for an x86-64 Mac
|
* If using Yasm, 1.2.0 or later is required.
|
||||||
build (2.11.08 does not work properly with libjpeg-turbo's x86-64 SIMD code
|
* If building on macOS, NASM or Yasm can be obtained from
|
||||||
when building macho64 objects.)
|
|
||||||
* If using YASM, 1.2.0 or later is required.
|
|
||||||
* If building on macOS, NASM or YASM can be obtained from
|
|
||||||
[MacPorts](http://www.macports.org/) or [Homebrew](http://brew.sh/).
|
[MacPorts](http://www.macports.org/) or [Homebrew](http://brew.sh/).
|
||||||
- NOTE: Currently, if it is desirable to hide the SIMD function symbols in
|
- NOTE: Currently, if it is desirable to hide the SIMD function symbols in
|
||||||
Mac executables or shared libraries that statically link with
|
Mac executables or shared libraries that statically link with
|
||||||
libjpeg-turbo, then NASM 2.14 or later or YASM must be used when
|
libjpeg-turbo, then NASM 2.14 or later or Yasm must be used when
|
||||||
building libjpeg-turbo.
|
building libjpeg-turbo.
|
||||||
* If building on Windows, **nasm.exe**/**yasm.exe** should be in your `PATH`.
|
* If NASM or Yasm is not in your `PATH`, then you can specify the full path
|
||||||
* NASM and YASM are located in the CRB (Code Ready Builder) repository on
|
to the assembler by using either the `CMAKE_ASM_NASM_COMPILER` CMake
|
||||||
Red Hat Enterprise Linux 8 and in the PowerTools repository on CentOS 8,
|
variable or the `ASM_NASM` environment variable. On Windows, use forward
|
||||||
which is not enabled by default.
|
slashes rather than backslashes in the path (for example,
|
||||||
|
**c:/nasm/nasm.exe**).
|
||||||
The binary RPMs released by the NASM project do not work on older Linux
|
* NASM and Yasm are located in the CRB (Code Ready Builder) repository on
|
||||||
systems, such as Red Hat Enterprise Linux 5. On such systems, you can easily
|
Red Hat Enterprise Linux 8 and in the PowerTools repository on RHEL
|
||||||
build and install NASM from a source RPM by downloading one of the SRPMs from
|
derivatives, which is not enabled by default.
|
||||||
|
|
||||||
<http://www.nasm.us/pub/nasm/releasebuilds>
|
|
||||||
|
|
||||||
and executing the following as root:
|
|
||||||
|
|
||||||
ARCH=`uname -m`
|
|
||||||
rpmbuild --rebuild nasm-{version}.src.rpm
|
|
||||||
rpm -Uvh /usr/src/redhat/RPMS/$ARCH/nasm-{version}.$ARCH.rpm
|
|
||||||
|
|
||||||
NOTE: the NASM build will fail if texinfo is not installed.
|
|
||||||
|
|
||||||
|
|
||||||
### Un*x Platforms (including Linux, Mac, FreeBSD, Solaris, and Cygwin)
|
### Un*x Platforms (including Linux, Mac, FreeBSD, Solaris, and Cygwin)
|
||||||
|
|
||||||
@@ -49,10 +35,8 @@ Build Requirements
|
|||||||
|
|
||||||
- If building the TurboJPEG 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. Most modern Linux distributions, as well as Solaris 10 and later,
|
required. Most modern Linux distributions, as well as Solaris 10 and later,
|
||||||
include JDK or OpenJDK. On OS X 10.5 and 10.6, it will be necessary to
|
include JDK or OpenJDK. For other systems, you can obtain the Oracle Java
|
||||||
install the Java Developer Package, which can be downloaded from
|
Development Kit from
|
||||||
<http://developer.apple.com/downloads> (Apple ID required.) For other
|
|
||||||
systems, you can obtain the Oracle Java Development Kit from
|
|
||||||
<http://www.oracle.com/technetwork/java/javase/downloads>.
|
<http://www.oracle.com/technetwork/java/javase/downloads>.
|
||||||
|
|
||||||
* If using JDK 11 or later, CMake 3.10.x or later must also be used.
|
* If using JDK 11 or later, CMake 3.10.x or later must also be used.
|
||||||
@@ -62,22 +46,22 @@ Build Requirements
|
|||||||
- Microsoft Visual C++ 2005 or later
|
- Microsoft Visual C++ 2005 or later
|
||||||
|
|
||||||
If you don't already have Visual C++, then the easiest way to get it is by
|
If you don't already have Visual C++, then the easiest way to get it is by
|
||||||
installing the
|
installing
|
||||||
[Windows SDK](http://msdn.microsoft.com/en-us/windows/bb980924.aspx).
|
[Visual Studio Community Edition](https://visualstudio.microsoft.com),
|
||||||
The Windows SDK includes both 32-bit and 64-bit Visual C++ compilers and
|
which includes everything necessary to build libjpeg-turbo.
|
||||||
everything necessary to build libjpeg-turbo.
|
|
||||||
|
|
||||||
* You can also use Microsoft Visual Studio Express/Community Edition, which
|
* You can also download and install the standalone Windows SDK (for Windows 7
|
||||||
is a free download. (NOTE: versions prior to 2012 can only be used to
|
or later), which includes command-line versions of the 32-bit and 64-bit
|
||||||
build 32-bit code.)
|
Visual C++ compilers.
|
||||||
* If you intend to build libjpeg-turbo from the command line, then add the
|
* If you intend to build libjpeg-turbo from the command line, then add the
|
||||||
appropriate compiler and SDK directories to the `INCLUDE`, `LIB`, and
|
appropriate compiler and SDK directories to the `INCLUDE`, `LIB`, and
|
||||||
`PATH` environment variables. This is generally accomplished by
|
`PATH` environment variables. This is generally accomplished by
|
||||||
executing `vcvars32.bat` or `vcvars64.bat` and `SetEnv.cmd`.
|
executing `vcvars32.bat` or `vcvars64.bat`, which are located in the same
|
||||||
`vcvars32.bat` and `vcvars64.bat` are part of Visual C++ and are located in
|
directory as the compiler.
|
||||||
the same directory as the compiler. `SetEnv.cmd` is part of the Windows
|
* If built with Visual C++ 2015 or later, the libjpeg-turbo static libraries
|
||||||
SDK. You can pass optional arguments to `SetEnv.cmd` to specify a 32-bit
|
cannot be used with earlier versions of Visual C++, and vice versa.
|
||||||
or 64-bit build environment.
|
* The libjpeg API DLL (**jpeg{version}.dll**) will depend on the C run-time
|
||||||
|
DLLs corresponding to the version of Visual C++ that was used to build it.
|
||||||
|
|
||||||
... OR ...
|
... OR ...
|
||||||
|
|
||||||
@@ -95,6 +79,14 @@ Build Requirements
|
|||||||
* If using JDK 11 or later, CMake 3.10.x or later must also be used.
|
* If using JDK 11 or later, CMake 3.10.x or later must also be used.
|
||||||
|
|
||||||
|
|
||||||
|
Sub-Project Builds
|
||||||
|
------------------
|
||||||
|
|
||||||
|
The libjpeg-turbo build system does not support being included as a sub-project
|
||||||
|
using the CMake `add_subdirectory()` function. Use the CMake
|
||||||
|
`ExternalProject_Add()` function instead.
|
||||||
|
|
||||||
|
|
||||||
Out-of-Tree Builds
|
Out-of-Tree Builds
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
@@ -108,6 +100,14 @@ directory, whereas *{source_directory}* refers to the libjpeg-turbo source
|
|||||||
directory. For in-tree builds, these directories are the same.
|
directory. For in-tree builds, these directories are the same.
|
||||||
|
|
||||||
|
|
||||||
|
Ninja
|
||||||
|
-----
|
||||||
|
|
||||||
|
If using Ninja, then replace `make` or `nmake` with `ninja`, and replace the
|
||||||
|
CMake generator (specified with the `-G` option) with `Ninja`, in all of the
|
||||||
|
procedures and recipes below.
|
||||||
|
|
||||||
|
|
||||||
Build Procedure
|
Build Procedure
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
@@ -333,7 +333,7 @@ Build Recipes
|
|||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
|
||||||
### 32-bit Build on 64-bit Linux/Unix/Mac
|
### 32-bit Build on 64-bit Linux/Unix
|
||||||
|
|
||||||
Use export/setenv to set the following environment variables before running
|
Use export/setenv to set the following environment variables before running
|
||||||
CMake:
|
CMake:
|
||||||
@@ -398,117 +398,23 @@ located (usually **/usr/bin**.) Next, execute the following commands:
|
|||||||
Building libjpeg-turbo for iOS
|
Building libjpeg-turbo for iOS
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
iOS platforms, such as the iPhone and iPad, use ARM processors, and all
|
iOS platforms, such as the iPhone and iPad, use Arm processors, and all
|
||||||
currently supported models include NEON instructions. Thus, they can take
|
currently supported models include Neon instructions. Thus, they can take
|
||||||
advantage of libjpeg-turbo's SIMD extensions to significantly accelerate JPEG
|
advantage of libjpeg-turbo's SIMD extensions to significantly accelerate JPEG
|
||||||
compression/decompression. This section describes how to build libjpeg-turbo
|
compression/decompression. This section describes how to build libjpeg-turbo
|
||||||
for these platforms.
|
for these platforms.
|
||||||
|
|
||||||
|
|
||||||
### Additional build requirements
|
### Armv8 (64-bit)
|
||||||
|
|
||||||
- For configurations that require [gas-preprocessor.pl]
|
**Xcode 5 or later required, Xcode 6.3.x or later recommended**
|
||||||
(https://raw.githubusercontent.com/libjpeg-turbo/gas-preprocessor/master/gas-preprocessor.pl),
|
|
||||||
it should be installed in your `PATH`.
|
|
||||||
|
|
||||||
|
|
||||||
### ARMv7 (32-bit)
|
|
||||||
|
|
||||||
**gas-preprocessor.pl required**
|
|
||||||
|
|
||||||
The following scripts demonstrate how to build libjpeg-turbo to run on the
|
|
||||||
iPhone 3GS-4S/iPad 1st-3rd Generation and newer:
|
|
||||||
|
|
||||||
#### Xcode 4.2 and earlier (LLVM-GCC)
|
|
||||||
|
|
||||||
IOS_PLATFORMDIR=/Developer/Platforms/iPhoneOS.platform
|
|
||||||
IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk)
|
|
||||||
export CFLAGS="-mfloat-abi=softfp -march=armv7 -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -miphoneos-version-min=3.0"
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
|
|
||||||
cat <<EOF >toolchain.cmake
|
|
||||||
set(CMAKE_SYSTEM_NAME Darwin)
|
|
||||||
set(CMAKE_SYSTEM_PROCESSOR arm)
|
|
||||||
set(CMAKE_C_COMPILER ${IOS_PLATFORMDIR}/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
|
||||||
-DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} \
|
|
||||||
[additional CMake flags] {source_directory}
|
|
||||||
make
|
|
||||||
|
|
||||||
#### Xcode 4.3-4.6 (LLVM-GCC)
|
|
||||||
|
|
||||||
Same as above, but replace the first line with:
|
|
||||||
|
|
||||||
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
|
||||||
|
|
||||||
#### Xcode 5 and later (Clang)
|
|
||||||
|
|
||||||
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
|
||||||
IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk)
|
|
||||||
export CFLAGS="-mfloat-abi=softfp -arch armv7 -miphoneos-version-min=3.0"
|
|
||||||
export ASMFLAGS="-no-integrated-as"
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
|
|
||||||
cat <<EOF >toolchain.cmake
|
|
||||||
set(CMAKE_SYSTEM_NAME Darwin)
|
|
||||||
set(CMAKE_SYSTEM_PROCESSOR arm)
|
|
||||||
set(CMAKE_C_COMPILER /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
|
||||||
-DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} \
|
|
||||||
[additional CMake flags] {source_directory}
|
|
||||||
make
|
|
||||||
|
|
||||||
|
|
||||||
### ARMv7s (32-bit)
|
|
||||||
|
|
||||||
**gas-preprocessor.pl required**
|
|
||||||
|
|
||||||
The following scripts demonstrate how to build libjpeg-turbo to run on the
|
|
||||||
iPhone 5/iPad 4th Generation and newer:
|
|
||||||
|
|
||||||
#### Xcode 4.5-4.6 (LLVM-GCC)
|
|
||||||
|
|
||||||
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
|
||||||
IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk)
|
|
||||||
export CFLAGS="-Wall -mfloat-abi=softfp -march=armv7s -mcpu=swift -mtune=swift -mfpu=neon -miphoneos-version-min=6.0"
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
|
|
||||||
cat <<EOF >toolchain.cmake
|
|
||||||
set(CMAKE_SYSTEM_NAME Darwin)
|
|
||||||
set(CMAKE_SYSTEM_PROCESSOR arm)
|
|
||||||
set(CMAKE_C_COMPILER ${IOS_PLATFORMDIR}/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
|
||||||
-DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} \
|
|
||||||
[additional CMake flags] {source_directory}
|
|
||||||
make
|
|
||||||
|
|
||||||
#### Xcode 5 and later (Clang)
|
|
||||||
|
|
||||||
Same as the ARMv7 build procedure for Xcode 5 and later, except replace the
|
|
||||||
compiler flags as follows:
|
|
||||||
|
|
||||||
export CFLAGS="-Wall -mfloat-abi=softfp -arch armv7s -miphoneos-version-min=6.0"
|
|
||||||
|
|
||||||
|
|
||||||
### ARMv8 (64-bit)
|
|
||||||
|
|
||||||
**gas-preprocessor.pl required if using Xcode < 6**
|
|
||||||
|
|
||||||
The following script demonstrates how to build libjpeg-turbo to run on the
|
The following script demonstrates how to build libjpeg-turbo to run on the
|
||||||
iPhone 5S/iPad Mini 2/iPad Air and newer.
|
iPhone 5S/iPad Mini 2/iPad Air and newer.
|
||||||
|
|
||||||
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
||||||
IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk)
|
IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk)
|
||||||
export CFLAGS="-Wall -arch arm64 -miphoneos-version-min=7.0 -funwind-tables"
|
export CFLAGS="-Wall -arch arm64 -miphoneos-version-min=8.0 -funwind-tables"
|
||||||
|
|
||||||
cd {build_directory}
|
cd {build_directory}
|
||||||
|
|
||||||
@@ -523,9 +429,6 @@ iPhone 5S/iPad Mini 2/iPad Air and newer.
|
|||||||
[additional CMake flags] {source_directory}
|
[additional CMake flags] {source_directory}
|
||||||
make
|
make
|
||||||
|
|
||||||
Once built, lipo can be used to combine the ARMv7, v7s, and/or v8 variants into
|
|
||||||
a universal library.
|
|
||||||
|
|
||||||
|
|
||||||
Building libjpeg-turbo for Android
|
Building libjpeg-turbo for Android
|
||||||
----------------------------------
|
----------------------------------
|
||||||
@@ -534,7 +437,9 @@ Building libjpeg-turbo for Android platforms requires v13b or later of the
|
|||||||
[Android NDK](https://developer.android.com/tools/sdk/ndk).
|
[Android NDK](https://developer.android.com/tools/sdk/ndk).
|
||||||
|
|
||||||
|
|
||||||
### ARMv7 (32-bit)
|
### Armv7 (32-bit)
|
||||||
|
|
||||||
|
**NDK r19 or later with Clang recommended**
|
||||||
|
|
||||||
The following is a general recipe script that can be modified for your specific
|
The following is a general recipe script that can be modified for your specific
|
||||||
needs.
|
needs.
|
||||||
@@ -559,7 +464,9 @@ needs.
|
|||||||
make
|
make
|
||||||
|
|
||||||
|
|
||||||
### ARMv8 (64-bit)
|
### Armv8 (64-bit)
|
||||||
|
|
||||||
|
**Clang recommended**
|
||||||
|
|
||||||
The following is a general recipe script that can be modified for your specific
|
The following is a general recipe script that can be modified for your specific
|
||||||
needs.
|
needs.
|
||||||
@@ -735,44 +642,23 @@ Mac
|
|||||||
make dmg
|
make dmg
|
||||||
|
|
||||||
Create Mac package/disk image. This requires pkgbuild and productbuild, which
|
Create Mac package/disk image. This requires pkgbuild and productbuild, which
|
||||||
are installed by default on OS X 10.7 and later and which can be obtained by
|
are installed by default on OS X/macOS 10.7 and later.
|
||||||
installing Xcode 3.2.6 (with the "Unix Development" option) on OS X 10.6.
|
|
||||||
Packages built in this manner can be installed on OS X 10.5 and later, but they
|
|
||||||
must be built on OS X 10.6 or later.
|
|
||||||
|
|
||||||
make udmg
|
In order to create a Mac package/disk image that contains universal
|
||||||
|
x86-64/Arm binaries, set the following CMake variable:
|
||||||
|
|
||||||
This creates a Mac package/disk image that contains universal x86-64/i386/ARM
|
* `ARMV8_BUILD`: Directory containing an Armv8 (64-bit) iOS or macOS build of
|
||||||
binaries. The following CMake variables control which architectures are
|
libjpeg-turbo to include in the universal binaries
|
||||||
included in the universal binaries. Setting any of these variables to an empty
|
|
||||||
string excludes that architecture from the package.
|
|
||||||
|
|
||||||
* `OSX_32BIT_BUILD`: Directory containing an i386 (32-bit) Mac build of
|
You should first use CMake to configure an Armv8 sub-build of libjpeg-turbo
|
||||||
libjpeg-turbo (default: *{source_directory}*/osxx86)
|
(see "Building libjpeg-turbo for iOS" above, if applicable) in a build
|
||||||
* `IOS_ARMV7_BUILD`: Directory containing an ARMv7 (32-bit) iOS build of
|
directory that matches the one specified in the aforementioned CMake variable.
|
||||||
libjpeg-turbo (default: *{source_directory}*/iosarmv7)
|
Next, configure the primary (x86-64) build of libjpeg-turbo as an out-of-tree
|
||||||
* `IOS_ARMV7S_BUILD`: Directory containing an ARMv7s (32-bit) iOS build of
|
build, specifying the aforementioned CMake variable, and build it. Once the
|
||||||
libjpeg-turbo (default: *{source_directory}*/iosarmv7s)
|
primary build has been built, run `make dmg` from the build directory. The
|
||||||
* `IOS_ARMV8_BUILD`: Directory containing an ARMv8 (64-bit) iOS build of
|
packaging system will build the sub-build, use lipo to combine it with the
|
||||||
libjpeg-turbo (default: *{source_directory}*/iosarmv8)
|
primary build into a single set of universal binaries, then package the
|
||||||
|
universal binaries.
|
||||||
You should first use CMake to configure i386, ARMv7, ARMv7s, and/or ARMv8
|
|
||||||
sub-builds of libjpeg-turbo (see "Build Recipes" and "Building libjpeg-turbo
|
|
||||||
for iOS" above) in build directories that match those specified in the
|
|
||||||
aforementioned CMake variables. Next, configure the primary build of
|
|
||||||
libjpeg-turbo as an out-of-tree build, and build it. Once the primary build
|
|
||||||
has been built, run `make udmg` from the build directory. The packaging system
|
|
||||||
will build the sub-builds, use lipo to combine them into a single set of
|
|
||||||
universal binaries, then package the universal binaries in the same manner as
|
|
||||||
`make dmg`.
|
|
||||||
|
|
||||||
|
|
||||||
Cygwin
|
|
||||||
------
|
|
||||||
|
|
||||||
make cygwinpkg
|
|
||||||
|
|
||||||
Build a Cygwin binary package.
|
|
||||||
|
|
||||||
|
|
||||||
Windows
|
Windows
|
||||||
|
|||||||
259
CMakeLists.txt
@@ -1,11 +1,17 @@
|
|||||||
cmake_minimum_required(VERSION 2.8.12)
|
cmake_minimum_required(VERSION 2.8.12)
|
||||||
|
# When using CMake 3.4 and later, don't export symbols from executables unless
|
||||||
|
# the CMAKE_ENABLE_EXPORTS variable is set.
|
||||||
|
if(POLICY CMP0065)
|
||||||
|
cmake_policy(SET CMP0065 NEW)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CMAKE_EXECUTABLE_SUFFIX)
|
if(CMAKE_EXECUTABLE_SUFFIX)
|
||||||
set(CMAKE_EXECUTABLE_SUFFIX_TMP ${CMAKE_EXECUTABLE_SUFFIX})
|
set(CMAKE_EXECUTABLE_SUFFIX_TMP ${CMAKE_EXECUTABLE_SUFFIX})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
project(libjpeg-turbo C)
|
project(libjpeg-turbo C)
|
||||||
set(VERSION 2.0.5)
|
set(VERSION 2.1.4)
|
||||||
|
set(COPYRIGHT_YEAR "1991-2022")
|
||||||
string(REPLACE "." ";" VERSION_TRIPLET ${VERSION})
|
string(REPLACE "." ";" VERSION_TRIPLET ${VERSION})
|
||||||
list(GET VERSION_TRIPLET 0 VERSION_MAJOR)
|
list(GET VERSION_TRIPLET 0 VERSION_MAJOR)
|
||||||
list(GET VERSION_TRIPLET 1 VERSION_MINOR)
|
list(GET VERSION_TRIPLET 1 VERSION_MINOR)
|
||||||
@@ -25,6 +31,15 @@ pad_number(VERSION_MINOR 3)
|
|||||||
pad_number(VERSION_REVISION 3)
|
pad_number(VERSION_REVISION 3)
|
||||||
set(LIBJPEG_TURBO_VERSION_NUMBER ${VERSION_MAJOR}${VERSION_MINOR}${VERSION_REVISION})
|
set(LIBJPEG_TURBO_VERSION_NUMBER ${VERSION_MAJOR}${VERSION_MINOR}${VERSION_REVISION})
|
||||||
|
|
||||||
|
# CMake 3.14 and later sets CMAKE_MACOSX_BUNDLE to TRUE by default when
|
||||||
|
# CMAKE_SYSTEM_NAME is iOS, tvOS, or watchOS, which breaks the libjpeg-turbo
|
||||||
|
# build. (Specifically, when CMAKE_MACOSX_BUNDLE is TRUE, executables for
|
||||||
|
# Apple platforms are built as application bundles, which causes CMake to
|
||||||
|
# complain that our install() directives for executables do not specify a
|
||||||
|
# BUNDLE DESTINATION. Even if CMake did not complain, building executables as
|
||||||
|
# application bundles would break our iOS packages.)
|
||||||
|
set(CMAKE_MACOSX_BUNDLE FALSE)
|
||||||
|
|
||||||
string(TIMESTAMP DEFAULT_BUILD "%Y%m%d")
|
string(TIMESTAMP DEFAULT_BUILD "%Y%m%d")
|
||||||
set(BUILD ${DEFAULT_BUILD} CACHE STRING "Build string (default: ${DEFAULT_BUILD})")
|
set(BUILD ${DEFAULT_BUILD} CACHE STRING "Build string (default: ${DEFAULT_BUILD})")
|
||||||
|
|
||||||
@@ -38,15 +53,24 @@ message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
|
|||||||
|
|
||||||
message(STATUS "VERSION = ${VERSION}, BUILD = ${BUILD}")
|
message(STATUS "VERSION = ${VERSION}, BUILD = ${BUILD}")
|
||||||
|
|
||||||
|
include(cmakescripts/PackageInfo.cmake)
|
||||||
|
|
||||||
# Detect CPU type and whether we're building 64-bit or 32-bit code
|
# Detect CPU type and whether we're building 64-bit or 32-bit code
|
||||||
math(EXPR BITS "${CMAKE_SIZEOF_VOID_P} * 8")
|
math(EXPR BITS "${CMAKE_SIZEOF_VOID_P} * 8")
|
||||||
string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR_LC)
|
string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR_LC)
|
||||||
|
set(COUNT 1)
|
||||||
|
foreach(ARCH ${CMAKE_OSX_ARCHITECTURES})
|
||||||
|
if(COUNT GREATER 1)
|
||||||
|
message(FATAL_ERROR "The libjpeg-turbo build system does not support multiple values in CMAKE_OSX_ARCHITECTURES.")
|
||||||
|
endif()
|
||||||
|
math(EXPR COUNT "${COUNT}+1")
|
||||||
|
endforeach()
|
||||||
if(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86_64" OR
|
if(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86_64" OR
|
||||||
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "amd64" OR
|
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "amd64" OR
|
||||||
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "i[0-9]86" OR
|
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "i[0-9]86" OR
|
||||||
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86" OR
|
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86" OR
|
||||||
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "ia32")
|
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "ia32")
|
||||||
if(BITS EQUAL 64)
|
if(BITS EQUAL 64 OR CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
|
||||||
set(CPU_TYPE x86_64)
|
set(CPU_TYPE x86_64)
|
||||||
else()
|
else()
|
||||||
set(CPU_TYPE i386)
|
set(CPU_TYPE i386)
|
||||||
@@ -55,16 +79,30 @@ if(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86_64" OR
|
|||||||
set(CMAKE_SYSTEM_PROCESSOR ${CPU_TYPE})
|
set(CMAKE_SYSTEM_PROCESSOR ${CPU_TYPE})
|
||||||
endif()
|
endif()
|
||||||
elseif(CMAKE_SYSTEM_PROCESSOR_LC STREQUAL "aarch64" OR
|
elseif(CMAKE_SYSTEM_PROCESSOR_LC STREQUAL "aarch64" OR
|
||||||
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "arm*64*")
|
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^arm")
|
||||||
set(CPU_TYPE arm64)
|
if(BITS EQUAL 64)
|
||||||
elseif(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "arm*")
|
set(CPU_TYPE arm64)
|
||||||
set(CPU_TYPE arm)
|
else()
|
||||||
elseif(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "ppc*" OR
|
set(CPU_TYPE arm)
|
||||||
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "powerpc*")
|
endif()
|
||||||
|
elseif(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^ppc" OR
|
||||||
|
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^powerpc")
|
||||||
set(CPU_TYPE powerpc)
|
set(CPU_TYPE powerpc)
|
||||||
else()
|
else()
|
||||||
set(CPU_TYPE ${CMAKE_SYSTEM_PROCESSOR_LC})
|
set(CPU_TYPE ${CMAKE_SYSTEM_PROCESSOR_LC})
|
||||||
endif()
|
endif()
|
||||||
|
if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR
|
||||||
|
CMAKE_OSX_ARCHITECTURES MATCHES "arm64" OR
|
||||||
|
CMAKE_OSX_ARCHITECTURES MATCHES "i386")
|
||||||
|
set(CPU_TYPE ${CMAKE_OSX_ARCHITECTURES})
|
||||||
|
endif()
|
||||||
|
if(CMAKE_OSX_ARCHITECTURES MATCHES "ppc")
|
||||||
|
set(CPU_TYPE powerpc)
|
||||||
|
endif()
|
||||||
|
if(MSVC_IDE AND CMAKE_GENERATOR_PLATFORM MATCHES "arm64")
|
||||||
|
set(CPU_TYPE arm64)
|
||||||
|
endif()
|
||||||
|
|
||||||
message(STATUS "${BITS}-bit build (${CPU_TYPE})")
|
message(STATUS "${BITS}-bit build (${CPU_TYPE})")
|
||||||
|
|
||||||
|
|
||||||
@@ -82,7 +120,9 @@ if(WIN32)
|
|||||||
set(CMAKE_INSTALL_DEFAULT_PREFIX "${CMAKE_INSTALL_DEFAULT_PREFIX}64")
|
set(CMAKE_INSTALL_DEFAULT_PREFIX "${CMAKE_INSTALL_DEFAULT_PREFIX}64")
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
set(CMAKE_INSTALL_DEFAULT_PREFIX /opt/${CMAKE_PROJECT_NAME})
|
if(NOT CMAKE_INSTALL_DEFAULT_PREFIX)
|
||||||
|
set(CMAKE_INSTALL_DEFAULT_PREFIX /opt/${CMAKE_PROJECT_NAME})
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_DEFAULT_PREFIX}" CACHE PATH
|
set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_DEFAULT_PREFIX}" CACHE PATH
|
||||||
@@ -101,6 +141,8 @@ if(CMAKE_INSTALL_PREFIX STREQUAL "${CMAKE_INSTALL_DEFAULT_PREFIX}")
|
|||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
if(BITS EQUAL 64)
|
if(BITS EQUAL 64)
|
||||||
set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib64")
|
set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib64")
|
||||||
|
elseif(CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
|
||||||
|
set(CMAKE_INSTALL_DEFAULT_LIBDIR "libx32")
|
||||||
else()
|
else()
|
||||||
set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib32")
|
set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib32")
|
||||||
endif()
|
endif()
|
||||||
@@ -133,9 +175,9 @@ endforeach()
|
|||||||
|
|
||||||
macro(boolean_number var)
|
macro(boolean_number var)
|
||||||
if(${var})
|
if(${var})
|
||||||
set(${var} 1)
|
set(${var} 1 ${ARGN})
|
||||||
else()
|
else()
|
||||||
set(${var} 0)
|
set(${var} 0 ${ARGN})
|
||||||
endif()
|
endif()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
@@ -151,8 +193,12 @@ option(WITH_ARITH_DEC "Include arithmetic decoding support when emulating the li
|
|||||||
boolean_number(WITH_ARITH_DEC)
|
boolean_number(WITH_ARITH_DEC)
|
||||||
option(WITH_ARITH_ENC "Include arithmetic encoding support when emulating the libjpeg v6b API/ABI" TRUE)
|
option(WITH_ARITH_ENC "Include arithmetic encoding support when emulating the libjpeg v6b API/ABI" TRUE)
|
||||||
boolean_number(WITH_ARITH_ENC)
|
boolean_number(WITH_ARITH_ENC)
|
||||||
option(WITH_JAVA "Build Java wrapper for the TurboJPEG API library (implies ENABLE_SHARED=1)" FALSE)
|
if(CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
|
||||||
boolean_number(WITH_JAVA)
|
set(WITH_JAVA 0)
|
||||||
|
else()
|
||||||
|
option(WITH_JAVA "Build Java wrapper for the TurboJPEG API library (implies ENABLE_SHARED=1)" FALSE)
|
||||||
|
boolean_number(WITH_JAVA)
|
||||||
|
endif()
|
||||||
option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
|
option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
|
||||||
boolean_number(WITH_JPEG7)
|
boolean_number(WITH_JPEG7)
|
||||||
option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
|
option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
|
||||||
@@ -163,6 +209,7 @@ option(WITH_SIMD "Include SIMD extensions, if available for this platform" TRUE)
|
|||||||
boolean_number(WITH_SIMD)
|
boolean_number(WITH_SIMD)
|
||||||
option(WITH_TURBOJPEG "Include the TurboJPEG API library and associated test programs" TRUE)
|
option(WITH_TURBOJPEG "Include the TurboJPEG API library and associated test programs" TRUE)
|
||||||
boolean_number(WITH_TURBOJPEG)
|
boolean_number(WITH_TURBOJPEG)
|
||||||
|
option(WITH_FUZZ "Build fuzz targets" FALSE)
|
||||||
|
|
||||||
macro(report_option var desc)
|
macro(report_option var desc)
|
||||||
if(${var})
|
if(${var})
|
||||||
@@ -193,6 +240,14 @@ if(ENABLE_SHARED)
|
|||||||
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
|
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(WITH_JPEG8 OR WITH_JPEG7)
|
||||||
|
set(WITH_ARITH_ENC 1)
|
||||||
|
set(WITH_ARITH_DEC 1)
|
||||||
|
endif()
|
||||||
|
if(WITH_JPEG8)
|
||||||
|
set(WITH_MEM_SRCDST 0)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WITH_12BIT)
|
if(WITH_12BIT)
|
||||||
set(WITH_ARITH_DEC 0)
|
set(WITH_ARITH_DEC 0)
|
||||||
set(WITH_ARITH_ENC 0)
|
set(WITH_ARITH_ENC 0)
|
||||||
@@ -205,14 +260,6 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
report_option(WITH_12BIT "12-bit JPEG support")
|
report_option(WITH_12BIT "12-bit JPEG support")
|
||||||
|
|
||||||
if(WITH_JPEG8 OR WITH_JPEG7)
|
|
||||||
set(WITH_ARITH_ENC 1)
|
|
||||||
set(WITH_ARITH_DEC 1)
|
|
||||||
endif()
|
|
||||||
if(WITH_JPEG8)
|
|
||||||
set(WITH_MEM_SRCDST 0)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WITH_ARITH_DEC)
|
if(WITH_ARITH_DEC)
|
||||||
set(D_ARITH_CODING_SUPPORTED 1)
|
set(D_ARITH_CODING_SUPPORTED 1)
|
||||||
endif()
|
endif()
|
||||||
@@ -292,7 +339,8 @@ message(STATUS "libjpeg API shared library version = ${SO_MAJOR_VERSION}.${SO_AG
|
|||||||
# minor SO versions don't change. However, we increase the middle number (the
|
# minor SO versions don't change. However, we increase the middle number (the
|
||||||
# SO "age") whenever functions are added to the API.
|
# SO "age") whenever functions are added to the API.
|
||||||
set(TURBOJPEG_SO_MAJOR_VERSION 0)
|
set(TURBOJPEG_SO_MAJOR_VERSION 0)
|
||||||
set(TURBOJPEG_SO_VERSION 0.2.0)
|
set(TURBOJPEG_SO_AGE 2)
|
||||||
|
set(TURBOJPEG_SO_VERSION 0.${TURBOJPEG_SO_AGE}.0)
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@@ -312,7 +360,7 @@ if(MSVC)
|
|||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /wd4996")
|
add_definitions(-D_CRT_NONSTDC_NO_WARNINGS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||||
@@ -362,34 +410,6 @@ if(MSVC)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
# Check for headers
|
|
||||||
check_include_files(locale.h HAVE_LOCALE_H)
|
|
||||||
check_include_files(stddef.h HAVE_STDDEF_H)
|
|
||||||
check_include_files(stdlib.h HAVE_STDLIB_H)
|
|
||||||
check_include_files(sys/types.h NEED_SYS_TYPES_H)
|
|
||||||
|
|
||||||
# Check for functions
|
|
||||||
include(CheckSymbolExists)
|
|
||||||
check_symbol_exists(memset string.h HAVE_MEMSET)
|
|
||||||
check_symbol_exists(memcpy string.h HAVE_MEMCPY)
|
|
||||||
if(NOT HAVE_MEMSET AND NOT HAVE_MEMCPY)
|
|
||||||
set(NEED_BSD_STRINGS 1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Check for types
|
|
||||||
check_type_size("unsigned char" UNSIGNED_CHAR)
|
|
||||||
check_type_size("unsigned short" UNSIGNED_SHORT)
|
|
||||||
|
|
||||||
# Check for compiler features
|
|
||||||
check_c_source_compiles("int main(void) { typedef struct undefined_structure *undef_struct_ptr; undef_struct_ptr ptr = 0; return ptr != 0; }"
|
|
||||||
INCOMPLETE_TYPES)
|
|
||||||
if(INCOMPLETE_TYPES)
|
|
||||||
message(STATUS "Compiler supports pointers to undefined structures.")
|
|
||||||
else()
|
|
||||||
set(INCOMPLETE_TYPES_BROKEN 1)
|
|
||||||
message(STATUS "Compiler does not support pointers to undefined structures.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(CMAKE_CROSSCOMPILING)
|
if(CMAKE_CROSSCOMPILING)
|
||||||
set(RIGHT_SHIFT_IS_UNSIGNED 0)
|
set(RIGHT_SHIFT_IS_UNSIGNED 0)
|
||||||
else()
|
else()
|
||||||
@@ -414,13 +434,6 @@ if(UNIX)
|
|||||||
exit(is_shifting_signed(-0x7F7E80B1L));
|
exit(is_shifting_signed(-0x7F7E80B1L));
|
||||||
}" RIGHT_SHIFT_IS_UNSIGNED)
|
}" RIGHT_SHIFT_IS_UNSIGNED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_CROSSCOMPILING)
|
|
||||||
set(__CHAR_UNSIGNED__ 0)
|
|
||||||
else()
|
|
||||||
check_c_source_runs("int main(void) { return ((char) -1 < 0); }"
|
|
||||||
__CHAR_UNSIGNED__)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
@@ -507,6 +520,7 @@ else()
|
|||||||
configure_file(jconfig.h.in jconfig.h)
|
configure_file(jconfig.h.in jconfig.h)
|
||||||
endif()
|
endif()
|
||||||
configure_file(jconfigint.h.in jconfigint.h)
|
configure_file(jconfigint.h.in jconfigint.h)
|
||||||
|
configure_file(jversion.h.in jversion.h)
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
configure_file(libjpeg.map.in libjpeg.map)
|
configure_file(libjpeg.map.in libjpeg.map)
|
||||||
endif()
|
endif()
|
||||||
@@ -546,6 +560,9 @@ endif()
|
|||||||
|
|
||||||
if(WITH_SIMD)
|
if(WITH_SIMD)
|
||||||
add_subdirectory(simd)
|
add_subdirectory(simd)
|
||||||
|
if(NEON_INTRINSICS)
|
||||||
|
add_definitions(-DNEON_INTRINSICS)
|
||||||
|
endif()
|
||||||
elseif(NOT WITH_12BIT)
|
elseif(NOT WITH_12BIT)
|
||||||
message(STATUS "SIMD extensions: None (WITH_SIMD = ${WITH_SIMD})")
|
message(STATUS "SIMD extensions: None (WITH_SIMD = ${WITH_SIMD})")
|
||||||
endif()
|
endif()
|
||||||
@@ -556,6 +573,9 @@ if(WITH_SIMD)
|
|||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
add_library(simd OBJECT jsimd_none.c)
|
add_library(simd OBJECT jsimd_none.c)
|
||||||
|
if(NOT WIN32 AND (CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED))
|
||||||
|
set_target_properties(simd PROPERTIES POSITION_INDEPENDENT_CODE 1)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_JAVA)
|
if(WITH_JAVA)
|
||||||
@@ -585,6 +605,12 @@ if(WITH_TURBOJPEG)
|
|||||||
include_directories(${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
|
include_directories(${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
|
||||||
set(TJMAPFILE ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg-mapfile.jni)
|
set(TJMAPFILE ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg-mapfile.jni)
|
||||||
endif()
|
endif()
|
||||||
|
if(MSVC)
|
||||||
|
configure_file(${CMAKE_SOURCE_DIR}/win/turbojpeg.rc.in
|
||||||
|
${CMAKE_BINARY_DIR}/win/turbojpeg.rc)
|
||||||
|
set(TURBOJPEG_SOURCES ${TURBOJPEG_SOURCES}
|
||||||
|
${CMAKE_BINARY_DIR}/win/turbojpeg.rc)
|
||||||
|
endif()
|
||||||
add_library(turbojpeg SHARED ${TURBOJPEG_SOURCES})
|
add_library(turbojpeg SHARED ${TURBOJPEG_SOURCES})
|
||||||
set_property(TARGET turbojpeg PROPERTY COMPILE_FLAGS
|
set_property(TARGET turbojpeg PROPERTY COMPILE_FLAGS
|
||||||
"-DBMP_SUPPORTED -DPPM_SUPPORTED")
|
"-DBMP_SUPPORTED -DPPM_SUPPORTED")
|
||||||
@@ -679,6 +705,12 @@ add_executable(wrjpgcom wrjpgcom.c)
|
|||||||
# TESTS
|
# TESTS
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
if(WITH_FUZZ)
|
||||||
|
add_subdirectory(fuzz)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(strtest strtest.c)
|
||||||
|
|
||||||
add_subdirectory(md5)
|
add_subdirectory(md5)
|
||||||
|
|
||||||
if(MSVC_IDE OR XCODE)
|
if(MSVC_IDE OR XCODE)
|
||||||
@@ -696,8 +728,10 @@ if(WITH_12BIT)
|
|||||||
set(MD5_PPM_RGB_ISLOW f3301d2219783b8b3d942b7239fa50c0)
|
set(MD5_PPM_RGB_ISLOW f3301d2219783b8b3d942b7239fa50c0)
|
||||||
set(MD5_JPEG_422_IFAST_OPT 7322e3bd2f127f7de4b40d4480ce60e4)
|
set(MD5_JPEG_422_IFAST_OPT 7322e3bd2f127f7de4b40d4480ce60e4)
|
||||||
set(MD5_PPM_422_IFAST 79807fa552899e66a04708f533e16950)
|
set(MD5_PPM_422_IFAST 79807fa552899e66a04708f533e16950)
|
||||||
|
set(MD5_JPEG_440_ISLOW e25c1912e38367be505a89c410c1c2d2)
|
||||||
|
set(MD5_PPM_440_ISLOW e7d2e26288870cfcb30f3114ad01e380)
|
||||||
set(MD5_PPM_422M_IFAST 07737bfe8a7c1c87aaa393a0098d16b0)
|
set(MD5_PPM_422M_IFAST 07737bfe8a7c1c87aaa393a0098d16b0)
|
||||||
set(MD5_JPEG_420_IFAST_Q100_PROG 008ab68d6ddbba04a8f01deee4e0f9f8)
|
set(MD5_JPEG_420_IFAST_Q100_PROG 9447cef4803d9b0f74bcf333cc710a29)
|
||||||
set(MD5_PPM_420_Q100_IFAST 1b3730122709f53d007255e8dfd3305e)
|
set(MD5_PPM_420_Q100_IFAST 1b3730122709f53d007255e8dfd3305e)
|
||||||
set(MD5_PPM_420M_Q100_IFAST 980a1a3c5bf9510022869d30b7d26566)
|
set(MD5_PPM_420M_Q100_IFAST 980a1a3c5bf9510022869d30b7d26566)
|
||||||
set(MD5_JPEG_GRAY_ISLOW 235c90707b16e2e069f37c888b2636d9)
|
set(MD5_JPEG_GRAY_ISLOW 235c90707b16e2e069f37c888b2636d9)
|
||||||
@@ -707,10 +741,11 @@ if(WITH_12BIT)
|
|||||||
|
|
||||||
set(MD5_JPEG_3x2_FLOAT_PROG_SSE a8c17daf77b457725ec929e215b603f8)
|
set(MD5_JPEG_3x2_FLOAT_PROG_SSE a8c17daf77b457725ec929e215b603f8)
|
||||||
set(MD5_PPM_3x2_FLOAT_SSE 42876ab9e5c2f76a87d08db5fbd57956)
|
set(MD5_PPM_3x2_FLOAT_SSE 42876ab9e5c2f76a87d08db5fbd57956)
|
||||||
set(MD5_JPEG_3x2_FLOAT_PROG_32BIT a8c17daf77b457725ec929e215b603f8)
|
set(MD5_JPEG_3x2_FLOAT_PROG_NO_FP_CONTRACT a8c17daf77b457725ec929e215b603f8)
|
||||||
set(MD5_PPM_3x2_FLOAT_32BIT ${MD5_PPM_3x2_FLOAT_SSE})
|
set(MD5_PPM_3x2_FLOAT_NO_FP_CONTRACT ${MD5_PPM_3x2_FLOAT_SSE})
|
||||||
set(MD5_JPEG_3x2_FLOAT_PROG_64BIT ${MD5_JPEG_3x2_FLOAT_PROG_32BIT})
|
set(MD5_JPEG_3x2_FLOAT_PROG_FP_CONTRACT
|
||||||
set(MD5_PPM_3x2_FLOAT_64BIT ${MD5_PPM_3x2_FLOAT_SSE})
|
${MD5_JPEG_3x2_FLOAT_PROG_NO_FP_CONTRACT})
|
||||||
|
set(MD5_PPM_3x2_FLOAT_FP_CONTRACT ${MD5_PPM_3x2_FLOAT_SSE})
|
||||||
set(MD5_JPEG_3x2_FLOAT_PROG_387 bc6dbbefac2872f6b9d6c4a0ae60c3c0)
|
set(MD5_JPEG_3x2_FLOAT_PROG_387 bc6dbbefac2872f6b9d6c4a0ae60c3c0)
|
||||||
set(MD5_PPM_3x2_FLOAT_387 bcc5723c61560463ac60f772e742d092)
|
set(MD5_PPM_3x2_FLOAT_387 bcc5723c61560463ac60f772e742d092)
|
||||||
set(MD5_JPEG_3x2_FLOAT_PROG_MSVC e27840755870fa849872e58aa0cd1400)
|
set(MD5_JPEG_3x2_FLOAT_PROG_MSVC e27840755870fa849872e58aa0cd1400)
|
||||||
@@ -744,10 +779,12 @@ else()
|
|||||||
set(MD5_BMP_RGB_ISLOW_565D 4cfa0928ef3e6bb626d7728c924cfda4)
|
set(MD5_BMP_RGB_ISLOW_565D 4cfa0928ef3e6bb626d7728c924cfda4)
|
||||||
set(MD5_JPEG_422_IFAST_OPT 2540287b79d913f91665e660303ab2c8)
|
set(MD5_JPEG_422_IFAST_OPT 2540287b79d913f91665e660303ab2c8)
|
||||||
set(MD5_PPM_422_IFAST 35bd6b3f833bad23de82acea847129fa)
|
set(MD5_PPM_422_IFAST 35bd6b3f833bad23de82acea847129fa)
|
||||||
|
set(MD5_JPEG_440_ISLOW 538bc02bd4b4658fd85de6ece6cbeda6)
|
||||||
|
set(MD5_PPM_440_ISLOW 11e7eab7ef7ef3276934bb7e7b6bb377)
|
||||||
set(MD5_PPM_422M_IFAST 8dbc65323d62cca7c91ba02dd1cfa81d)
|
set(MD5_PPM_422M_IFAST 8dbc65323d62cca7c91ba02dd1cfa81d)
|
||||||
set(MD5_BMP_422M_IFAST_565 3294bd4d9a1f2b3d08ea6020d0db7065)
|
set(MD5_BMP_422M_IFAST_565 3294bd4d9a1f2b3d08ea6020d0db7065)
|
||||||
set(MD5_BMP_422M_IFAST_565D da98c9c7b6039511be4a79a878a9abc1)
|
set(MD5_BMP_422M_IFAST_565D da98c9c7b6039511be4a79a878a9abc1)
|
||||||
set(MD5_JPEG_420_IFAST_Q100_PROG e59bb462016a8d9a748c330a3474bb55)
|
set(MD5_JPEG_420_IFAST_Q100_PROG 0ba15f9dab81a703505f835f9dbbac6d)
|
||||||
set(MD5_PPM_420_Q100_IFAST 5a732542015c278ff43635e473a8a294)
|
set(MD5_PPM_420_Q100_IFAST 5a732542015c278ff43635e473a8a294)
|
||||||
set(MD5_PPM_420M_Q100_IFAST ff692ee9323a3b424894862557c092f1)
|
set(MD5_PPM_420M_Q100_IFAST ff692ee9323a3b424894862557c092f1)
|
||||||
set(MD5_JPEG_GRAY_ISLOW 72b51f894b8f4a10b3ee3066770aa38d)
|
set(MD5_JPEG_GRAY_ISLOW 72b51f894b8f4a10b3ee3066770aa38d)
|
||||||
@@ -759,10 +796,11 @@ else()
|
|||||||
|
|
||||||
set(MD5_JPEG_3x2_FLOAT_PROG_SSE 343e3f8caf8af5986ebaf0bdc13b5c71)
|
set(MD5_JPEG_3x2_FLOAT_PROG_SSE 343e3f8caf8af5986ebaf0bdc13b5c71)
|
||||||
set(MD5_PPM_3x2_FLOAT_SSE 1a75f36e5904d6fc3a85a43da9ad89bb)
|
set(MD5_PPM_3x2_FLOAT_SSE 1a75f36e5904d6fc3a85a43da9ad89bb)
|
||||||
set(MD5_JPEG_3x2_FLOAT_PROG_32BIT 9bca803d2042bd1eb03819e2bf92b3e5)
|
set(MD5_JPEG_3x2_FLOAT_PROG_NO_FP_CONTRACT 9bca803d2042bd1eb03819e2bf92b3e5)
|
||||||
set(MD5_PPM_3x2_FLOAT_32BIT f6bfab038438ed8f5522fbd33595dcdc)
|
set(MD5_PPM_3x2_FLOAT_NO_FP_CONTRACT f6bfab038438ed8f5522fbd33595dcdc)
|
||||||
set(MD5_JPEG_3x2_FLOAT_PROG_64BIT ${MD5_JPEG_3x2_FLOAT_PROG_32BIT})
|
set(MD5_JPEG_3x2_FLOAT_PROG_FP_CONTRACT
|
||||||
set(MD5_PPM_3x2_FLOAT_64BIT 0e917a34193ef976b679a6b069b1be26)
|
${MD5_JPEG_3x2_FLOAT_PROG_NO_FP_CONTRACT})
|
||||||
|
set(MD5_PPM_3x2_FLOAT_FP_CONTRACT 0e917a34193ef976b679a6b069b1be26)
|
||||||
set(MD5_JPEG_3x2_FLOAT_PROG_387 1657664a410e0822c924b54f6f65e6e9)
|
set(MD5_JPEG_3x2_FLOAT_PROG_387 1657664a410e0822c924b54f6f65e6e9)
|
||||||
set(MD5_PPM_3x2_FLOAT_387 cb0a1f027f3d2917c902b5640214e025)
|
set(MD5_PPM_3x2_FLOAT_387 cb0a1f027f3d2917c902b5640214e025)
|
||||||
set(MD5_JPEG_3x2_FLOAT_PROG_MSVC 7999ce9cd0ee9b6c7043b7351ab7639d)
|
set(MD5_JPEG_3x2_FLOAT_PROG_MSVC 7999ce9cd0ee9b6c7043b7351ab7639d)
|
||||||
@@ -772,7 +810,7 @@ else()
|
|||||||
set(MD5_PPM_3x2_IFAST fd283664b3b49127984af0a7f118fccd)
|
set(MD5_PPM_3x2_IFAST fd283664b3b49127984af0a7f118fccd)
|
||||||
set(MD5_JPEG_420_ISLOW_ARI e986fb0a637a8d833d96e8a6d6d84ea1)
|
set(MD5_JPEG_420_ISLOW_ARI e986fb0a637a8d833d96e8a6d6d84ea1)
|
||||||
set(MD5_JPEG_444_ISLOW_PROGARI 0a8f1c8f66e113c3cf635df0a475a617)
|
set(MD5_JPEG_444_ISLOW_PROGARI 0a8f1c8f66e113c3cf635df0a475a617)
|
||||||
set(MD5_PPM_420M_IFAST_ARI 72b59a99bcf1de24c5b27d151bde2437)
|
set(MD5_PPM_420M_IFAST_ARI 57251da28a35b46eecb7177d82d10e0e)
|
||||||
set(MD5_JPEG_420_ISLOW 9a68f56bc76e466aa7e52f415d0f4a5f)
|
set(MD5_JPEG_420_ISLOW 9a68f56bc76e466aa7e52f415d0f4a5f)
|
||||||
set(MD5_PPM_420M_ISLOW_2_1 9f9de8c0612f8d06869b960b05abf9c9)
|
set(MD5_PPM_420M_ISLOW_2_1 9f9de8c0612f8d06869b960b05abf9c9)
|
||||||
set(MD5_PPM_420M_ISLOW_15_8 b6875bc070720b899566cc06459b63b7)
|
set(MD5_PPM_420M_ISLOW_15_8 b6875bc070720b899566cc06459b63b7)
|
||||||
@@ -850,11 +888,16 @@ endif()
|
|||||||
#
|
#
|
||||||
# sse = validate against the expected results from the libjpeg-turbo SSE SIMD
|
# sse = validate against the expected results from the libjpeg-turbo SSE SIMD
|
||||||
# extensions
|
# extensions
|
||||||
# 32bit = validate against the expected results from the C code when running on
|
# no-fp-contract = validate against the expected results from the C code when
|
||||||
# a 32-bit FPU (or when SSE is being used for floating point math,
|
# floating point expression contraction is disabled (the
|
||||||
# which is generally the default with x86-64 compilers)
|
# default with Clang, with GCC when building for platforms
|
||||||
# 64bit = validate against the expected results from the C code when running
|
# that lack fused multiply-add [FMA] instructions, or when
|
||||||
# on a 64-bit FPU
|
# passing -ffp-contract=off to the compiler)
|
||||||
|
# fp-contract = validate against the expected results from the C code when
|
||||||
|
# floating point expression contraction is enabled (the default
|
||||||
|
# with GCC when building for platforms that have fused multiply-
|
||||||
|
# add [FMA] instructions or when passing -ffp-contract=fast to
|
||||||
|
# the compiler)
|
||||||
# 387 = validate against the expected results from the C code when the 387 FPU
|
# 387 = validate against the expected results from the C code when the 387 FPU
|
||||||
# is being used for floating point math (which is generally the default
|
# is being used for floating point math (which is generally the default
|
||||||
# with x86 compilers)
|
# with x86 compilers)
|
||||||
@@ -865,15 +908,18 @@ if(CPU_TYPE STREQUAL "x86_64" OR CPU_TYPE STREQUAL "i386")
|
|||||||
if(WITH_SIMD)
|
if(WITH_SIMD)
|
||||||
set(DEFAULT_FLOATTEST sse)
|
set(DEFAULT_FLOATTEST sse)
|
||||||
elseif(CPU_TYPE STREQUAL "x86_64")
|
elseif(CPU_TYPE STREQUAL "x86_64")
|
||||||
set(DEFAULT_FLOATTEST 32bit)
|
set(DEFAULT_FLOATTEST no-fp-contract)
|
||||||
elseif(CPU_TYPE STREQUAL "i386" AND MSVC)
|
# else we can't really set an intelligent default for i386. The appropriate
|
||||||
set(DEFAULT_FLOATTEST msvc)
|
# value could be no-fp-contract, fp-contract, 387, or msvc, depending on the
|
||||||
|
# compiler and compiler options. We leave it to the user to set FLOATTEST
|
||||||
|
# manually.
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
if(BITS EQUAL 64)
|
if((CPU_TYPE STREQUAL "powerpc" OR CPU_TYPE STREQUAL "arm64") AND
|
||||||
set(DEFAULT_FLOATTEST 64bit)
|
NOT CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT MSVC)
|
||||||
elseif(BITS EQUAL 32)
|
set(DEFAULT_FLOATTEST fp-contract)
|
||||||
set(DEFAULT_FLOATTEST 32bit)
|
else()
|
||||||
|
set(DEFAULT_FLOATTEST no-fp-contract)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -884,15 +930,17 @@ if(DEFINED WITH_SIMD_INT AND NOT WITH_SIMD EQUAL WITH_SIMD_INT)
|
|||||||
endif()
|
endif()
|
||||||
set(WITH_SIMD_INT ${WITH_SIMD} CACHE INTERNAL "")
|
set(WITH_SIMD_INT ${WITH_SIMD} CACHE INTERNAL "")
|
||||||
set(FLOATTEST ${DEFAULT_FLOATTEST} CACHE STRING
|
set(FLOATTEST ${DEFAULT_FLOATTEST} CACHE STRING
|
||||||
"The type of floating point math used by the floating point DCT/IDCT algorithms. This tells the testing system which numerical results it should expect from those tests. [sse = libjpeg-turbo x86/x86-64 SIMD extensions, 32bit = generic 32-bit FPU or SSE, 64bit = generic 64-bit FPU, 387 = 387 FPU, msvc = 32-bit Visual Studio] (default = ${DEFAULT_FLOATTEST})"
|
"The type of floating point math used by the floating point DCT/IDCT algorithms. This tells the testing system which numerical results it should expect from those tests. [sse = libjpeg-turbo x86/x86-64 SIMD extensions, no-fp-contract = generic FPU with floating point expression contraction disabled, fp-contract = generic FPU with floating point expression contraction enabled, 387 = 387 FPU, msvc = 32-bit Visual Studio] (default = ${DEFAULT_FLOATTEST})"
|
||||||
${FORCE_FLOATTEST})
|
${FORCE_FLOATTEST})
|
||||||
message(STATUS "FLOATTEST = ${FLOATTEST}")
|
message(STATUS "FLOATTEST = ${FLOATTEST}")
|
||||||
|
|
||||||
if(FLOATTEST)
|
if(FLOATTEST)
|
||||||
string(TOUPPER ${FLOATTEST} FLOATTEST_UC)
|
string(TOUPPER ${FLOATTEST} FLOATTEST_UC)
|
||||||
|
string(REGEX REPLACE "-" "_" FLOATTEST_UC ${FLOATTEST_UC})
|
||||||
string(TOLOWER ${FLOATTEST} FLOATTEST)
|
string(TOLOWER ${FLOATTEST} FLOATTEST)
|
||||||
if(NOT FLOATTEST STREQUAL "sse" AND NOT FLOATTEST STREQUAL "32bit" AND
|
if(NOT FLOATTEST STREQUAL "sse" AND
|
||||||
NOT FLOATTEST STREQUAL "64bit" AND NOT FLOATTEST STREQUAL "387" AND
|
NOT FLOATTEST STREQUAL "no-fp-contract" AND
|
||||||
|
NOT FLOATTEST STREQUAL "fp-contract" AND NOT FLOATTEST STREQUAL "387" AND
|
||||||
NOT FLOATTEST STREQUAL "msvc")
|
NOT FLOATTEST STREQUAL "msvc")
|
||||||
message(FATAL_ERROR "\"${FLOATTEST}\" is not a valid value for FLOATTEST.")
|
message(FATAL_ERROR "\"${FLOATTEST}\" is not a valid value for FLOATTEST.")
|
||||||
endif()
|
endif()
|
||||||
@@ -1055,6 +1103,16 @@ foreach(libtype ${TEST_LIBTYPES})
|
|||||||
testout_422_ifast.ppm testout_422_ifast_opt.jpg
|
testout_422_ifast.ppm testout_422_ifast_opt.jpg
|
||||||
${MD5_PPM_422_IFAST} cjpeg-${libtype}-422-ifast-opt)
|
${MD5_PPM_422_IFAST} cjpeg-${libtype}-422-ifast-opt)
|
||||||
|
|
||||||
|
# CC: RGB->YCC SAMP: fullsize/h1v2 FDCT: islow ENT: huff
|
||||||
|
add_bittest(cjpeg 440-islow "-sample;1x2;-dct;int"
|
||||||
|
testout_440_islow.jpg ${TESTIMAGES}/testorig.ppm
|
||||||
|
${MD5_JPEG_440_ISLOW})
|
||||||
|
|
||||||
|
# CC: YCC->RGB SAMP: fullsize/h1v2 fancy IDCT: islow ENT: huff
|
||||||
|
add_bittest(djpeg 440-islow "-dct;int"
|
||||||
|
testout_440_islow.ppm testout_440_islow.jpg
|
||||||
|
${MD5_PPM_440_ISLOW} cjpeg-${libtype}-440-islow)
|
||||||
|
|
||||||
# CC: YCC->RGB SAMP: h2v1 merged IDCT: ifast ENT: huff
|
# CC: YCC->RGB SAMP: h2v1 merged IDCT: ifast ENT: huff
|
||||||
add_bittest(djpeg 422m-ifast "-dct;fast;-nosmooth"
|
add_bittest(djpeg 422m-ifast "-dct;fast;-nosmooth"
|
||||||
testout_422m_ifast.ppm testout_422_ifast_opt.jpg
|
testout_422m_ifast.ppm testout_422_ifast_opt.jpg
|
||||||
@@ -1163,7 +1221,7 @@ foreach(libtype ${TEST_LIBTYPES})
|
|||||||
|
|
||||||
if(WITH_ARITH_DEC)
|
if(WITH_ARITH_DEC)
|
||||||
# CC: RGB->YCC SAMP: h2v2 merged IDCT: ifast ENT: arith
|
# CC: RGB->YCC SAMP: h2v2 merged IDCT: ifast ENT: arith
|
||||||
add_bittest(djpeg 420m-ifast-ari "-fast;-ppm"
|
add_bittest(djpeg 420m-ifast-ari "-fast;-skip;1,20;-ppm"
|
||||||
testout_420m_ifast_ari.ppm ${TESTIMAGES}/testimgari.jpg
|
testout_420m_ifast_ari.ppm ${TESTIMAGES}/testimgari.jpg
|
||||||
${MD5_PPM_420M_IFAST_ARI})
|
${MD5_PPM_420M_IFAST_ARI})
|
||||||
|
|
||||||
@@ -1299,6 +1357,11 @@ endforeach()
|
|||||||
add_custom_target(testclean COMMAND ${CMAKE_COMMAND} -P
|
add_custom_target(testclean COMMAND ${CMAKE_COMMAND} -P
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/cmakescripts/testclean.cmake)
|
${CMAKE_CURRENT_SOURCE_DIR}/cmakescripts/testclean.cmake)
|
||||||
|
|
||||||
|
configure_file(croptest.in croptest @ONLY)
|
||||||
|
add_custom_target(croptest
|
||||||
|
COMMAND echo croptest
|
||||||
|
COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/croptest)
|
||||||
|
|
||||||
if(WITH_TURBOJPEG)
|
if(WITH_TURBOJPEG)
|
||||||
configure_file(tjbenchtest.in tjbenchtest @ONLY)
|
configure_file(tjbenchtest.in tjbenchtest @ONLY)
|
||||||
configure_file(tjexampletest.in tjexampletest @ONLY)
|
configure_file(tjexampletest.in tjexampletest @ONLY)
|
||||||
@@ -1366,10 +1429,13 @@ set(EXE ${CMAKE_EXECUTABLE_SUFFIX})
|
|||||||
|
|
||||||
if(WITH_TURBOJPEG)
|
if(WITH_TURBOJPEG)
|
||||||
if(ENABLE_SHARED)
|
if(ENABLE_SHARED)
|
||||||
install(TARGETS turbojpeg tjbench
|
install(TARGETS turbojpeg EXPORT ${CMAKE_PROJECT_NAME}Targets
|
||||||
|
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||||
|
install(TARGETS tjbench
|
||||||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||||
if(NOT CMAKE_VERSION VERSION_LESS "3.1" AND MSVC AND
|
if(NOT CMAKE_VERSION VERSION_LESS "3.1" AND MSVC AND
|
||||||
CMAKE_C_LINKER_SUPPORTS_PDB)
|
CMAKE_C_LINKER_SUPPORTS_PDB)
|
||||||
install(FILES "$<TARGET_PDB_FILE:turbojpeg>"
|
install(FILES "$<TARGET_PDB_FILE:turbojpeg>"
|
||||||
@@ -1377,8 +1443,9 @@ if(WITH_TURBOJPEG)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if(ENABLE_STATIC)
|
if(ENABLE_STATIC)
|
||||||
install(TARGETS turbojpeg-static ARCHIVE
|
install(TARGETS turbojpeg-static EXPORT ${CMAKE_PROJECT_NAME}Targets
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||||
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
if(NOT ENABLE_SHARED)
|
if(NOT ENABLE_SHARED)
|
||||||
if(MSVC_IDE OR XCODE)
|
if(MSVC_IDE OR XCODE)
|
||||||
set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
|
set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
|
||||||
@@ -1394,7 +1461,9 @@ if(WITH_TURBOJPEG)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ENABLE_STATIC)
|
if(ENABLE_STATIC)
|
||||||
install(TARGETS jpeg-static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
install(TARGETS jpeg-static EXPORT ${CMAKE_PROJECT_NAME}Targets
|
||||||
|
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||||
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
if(NOT ENABLE_SHARED)
|
if(NOT ENABLE_SHARED)
|
||||||
if(MSVC_IDE OR XCODE)
|
if(MSVC_IDE OR XCODE)
|
||||||
set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
|
set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
|
||||||
@@ -1432,8 +1501,18 @@ if(UNIX OR MINGW)
|
|||||||
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
||||||
endif()
|
endif()
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libjpeg.pc
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libjpeg.pc
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libturbojpeg.pc
|
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
|
if(WITH_TURBOJPEG)
|
||||||
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libturbojpeg.pc
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
|
endif()
|
||||||
|
install(FILES
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/${CMAKE_PROJECT_NAME}Config.cmake
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME})
|
||||||
|
install(EXPORT ${CMAKE_PROJECT_NAME}Targets
|
||||||
|
NAMESPACE ${CMAKE_PROJECT_NAME}::
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME})
|
||||||
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jconfig.h
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jconfig.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/jerror.h ${CMAKE_CURRENT_SOURCE_DIR}/jmorecfg.h
|
${CMAKE_CURRENT_SOURCE_DIR}/jerror.h ${CMAKE_CURRENT_SOURCE_DIR}/jmorecfg.h
|
||||||
|
|||||||
412
ChangeLog.md
@@ -1,3 +1,353 @@
|
|||||||
|
2.1.4
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1.3
|
||||||
|
|
||||||
|
1. Fixed a regression introduced in 2.1.3 that caused build failures with
|
||||||
|
Visual Studio 2010.
|
||||||
|
|
||||||
|
2. The `tjDecompressHeader3()` function in the TurboJPEG C API and the
|
||||||
|
`TJDecompressor.setSourceImage()` method in the TurboJPEG Java API now accept
|
||||||
|
"abbreviated table specification" (AKA "tables-only") datastreams, which can be
|
||||||
|
used to prime the decompressor with quantization and Huffman tables that can be
|
||||||
|
used when decompressing subsequent "abbreviated image" datastreams.
|
||||||
|
|
||||||
|
3. libjpeg-turbo now performs run-time detection of AltiVec instructions on
|
||||||
|
OS X/PowerPC systems if AltiVec instructions are not enabled at compile time.
|
||||||
|
This allows both AltiVec-equipped (PowerPC G4 and G5) and non-AltiVec-equipped
|
||||||
|
(PowerPC G3) CPUs to be supported using the same build of libjpeg-turbo.
|
||||||
|
|
||||||
|
4. Fixed an error ("Bogus virtual array access") that occurred when attempting
|
||||||
|
to decompress a progressive JPEG image with a height less than or equal to one
|
||||||
|
iMCU (8 * the vertical sampling factor) using buffered-image mode with
|
||||||
|
interblock smoothing enabled. This was a regression introduced by
|
||||||
|
2.1 beta1[6(b)].
|
||||||
|
|
||||||
|
5. Fixed two issues that prevented partial image decompression from working
|
||||||
|
properly with buffered-image mode:
|
||||||
|
|
||||||
|
- Attempting to call `jpeg_crop_scanline()` after
|
||||||
|
`jpeg_start_decompress()` but before `jpeg_start_output()` resulted in an error
|
||||||
|
("Improper call to JPEG library in state 207".)
|
||||||
|
- Attempting to use `jpeg_skip_scanlines()` resulted in an error ("Bogus
|
||||||
|
virtual array access") under certain circumstances.
|
||||||
|
|
||||||
|
|
||||||
|
2.1.3
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1.2
|
||||||
|
|
||||||
|
1. Fixed a regression introduced by 2.0 beta1[7] whereby cjpeg compressed PGM
|
||||||
|
input files into full-color JPEG images unless the `-grayscale` option was
|
||||||
|
used.
|
||||||
|
|
||||||
|
2. cjpeg now automatically compresses GIF and 8-bit BMP input files into
|
||||||
|
grayscale JPEG images if the input files contain only shades of gray.
|
||||||
|
|
||||||
|
3. The build system now enables the intrinsics implementation of the AArch64
|
||||||
|
(Arm 64-bit) Neon SIMD extensions by default when using GCC 12 or later.
|
||||||
|
|
||||||
|
4. Fixed a segfault that occurred while decompressing a 4:2:0 JPEG image using
|
||||||
|
the merged (non-fancy) upsampling algorithms (that is, with
|
||||||
|
`cinfo.do_fancy_upsampling` set to `FALSE`) along with `jpeg_crop_scanline()`.
|
||||||
|
Specifically, the segfault occurred if the number of bytes remaining in the
|
||||||
|
output buffer was less than the number of bytes required to represent one
|
||||||
|
uncropped scanline of the output image. For that reason, the issue could only
|
||||||
|
be reproduced using the libjpeg API, not using djpeg.
|
||||||
|
|
||||||
|
|
||||||
|
2.1.2
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1.1
|
||||||
|
|
||||||
|
1. Fixed a regression introduced by 2.1 beta1[13] that caused the remaining
|
||||||
|
GAS implementations of AArch64 (Arm 64-bit) Neon SIMD functions (which are used
|
||||||
|
by default with GCC for performance reasons) to be placed in the `.rodata`
|
||||||
|
section rather than in the `.text` section. This caused the GNU linker to
|
||||||
|
automatically place the `.rodata` section in an executable segment, which
|
||||||
|
prevented libjpeg-turbo from working properly with other linkers and also
|
||||||
|
represented a potential security risk.
|
||||||
|
|
||||||
|
2. Fixed an issue whereby the `tjTransform()` function incorrectly computed the
|
||||||
|
MCU block size for 4:4:4 JPEG images with non-unary sampling factors and thus
|
||||||
|
unduly rejected some cropping regions, even though those regions aligned with
|
||||||
|
8x8 MCU block boundaries.
|
||||||
|
|
||||||
|
3. Fixed a regression introduced by 2.1 beta1[13] that caused the build system
|
||||||
|
to enable the Arm Neon SIMD extensions when targetting Armv6 and other legacy
|
||||||
|
architectures that do not support Neon instructions.
|
||||||
|
|
||||||
|
4. libjpeg-turbo now performs run-time detection of AltiVec instructions on
|
||||||
|
FreeBSD/PowerPC systems if AltiVec instructions are not enabled at compile
|
||||||
|
time. This allows both AltiVec-equipped and non-AltiVec-equipped CPUs to be
|
||||||
|
supported using the same build of libjpeg-turbo.
|
||||||
|
|
||||||
|
5. cjpeg now accepts a `-strict` argument similar to that of djpeg and
|
||||||
|
jpegtran, which causes the compressor to abort if an LZW-compressed GIF input
|
||||||
|
image contains incomplete or corrupt image data.
|
||||||
|
|
||||||
|
|
||||||
|
2.1.1
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1.0
|
||||||
|
|
||||||
|
1. Fixed a regression introduced in 2.1.0 that caused build failures with
|
||||||
|
non-GCC-compatible compilers for Un*x/Arm platforms.
|
||||||
|
|
||||||
|
2. Fixed a regression introduced by 2.1 beta1[13] that prevented the Arm 32-bit
|
||||||
|
(AArch32) Neon SIMD extensions from building unless the C compiler flags
|
||||||
|
included `-mfloat-abi=softfp` or `-mfloat-abi=hard`.
|
||||||
|
|
||||||
|
3. Fixed an issue in the AArch32 Neon SIMD Huffman encoder whereby reliance on
|
||||||
|
undefined C compiler behavior led to crashes ("SIGBUS: illegal alignment") on
|
||||||
|
Android systems when running AArch32/Thumb builds of libjpeg-turbo built with
|
||||||
|
recent versions of Clang.
|
||||||
|
|
||||||
|
4. Added a command-line argument (`-copy icc`) to jpegtran that causes it to
|
||||||
|
copy only the ICC profile markers from the source file and discard any other
|
||||||
|
metadata.
|
||||||
|
|
||||||
|
5. libjpeg-turbo should now build and run on CHERI-enabled architectures, which
|
||||||
|
use capability pointers that are larger than the size of `size_t`.
|
||||||
|
|
||||||
|
6. Fixed a regression (CVE-2021-37972) introduced by 2.1 beta1[5] that caused a
|
||||||
|
segfault in the 64-bit SSE2 Huffman encoder when attempting to losslessly
|
||||||
|
transform a specially-crafted malformed JPEG image.
|
||||||
|
|
||||||
|
|
||||||
|
2.1.0
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1 beta1
|
||||||
|
|
||||||
|
1. Fixed a regression introduced by 2.1 beta1[6(b)] whereby attempting to
|
||||||
|
decompress certain progressive JPEG images with one or more component planes of
|
||||||
|
width 8 or less caused a buffer overrun.
|
||||||
|
|
||||||
|
2. Fixed a regression introduced by 2.1 beta1[6(b)] whereby attempting to
|
||||||
|
decompress a specially-crafted malformed progressive JPEG image caused the
|
||||||
|
block smoothing algorithm to read from uninitialized memory.
|
||||||
|
|
||||||
|
3. Fixed an issue in the Arm Neon SIMD Huffman encoders that caused the
|
||||||
|
encoders to generate incorrect results when using the Clang compiler with
|
||||||
|
Visual Studio.
|
||||||
|
|
||||||
|
4. Fixed a floating point exception (CVE-2021-20205) that occurred when
|
||||||
|
attempting to compress a specially-crafted malformed GIF image with a specified
|
||||||
|
image width of 0 using cjpeg.
|
||||||
|
|
||||||
|
5. Fixed a regression introduced by 2.0 beta1[15] whereby attempting to
|
||||||
|
generate a progressive JPEG image on an SSE2-capable CPU using a scan script
|
||||||
|
containing one or more scans with lengths divisible by 32 and non-zero
|
||||||
|
successive approximation low bit positions would, under certain circumstances,
|
||||||
|
result in an error ("Missing Huffman code table entry") and an invalid JPEG
|
||||||
|
image.
|
||||||
|
|
||||||
|
6. Introduced a new flag (`TJFLAG_LIMITSCANS` in the TurboJPEG C API and
|
||||||
|
`TJ.FLAG_LIMIT_SCANS` in the TurboJPEG Java API) and a corresponding TJBench
|
||||||
|
command-line argument (`-limitscans`) that causes the TurboJPEG decompression
|
||||||
|
and transform functions/operations to return/throw an error if a progressive
|
||||||
|
JPEG image contains an unreasonably large number of scans. This allows
|
||||||
|
applications that use the TurboJPEG API to guard against an exploit of the
|
||||||
|
progressive JPEG format described in the report
|
||||||
|
["Two Issues with the JPEG Standard"](https://libjpeg-turbo.org/pmwiki/uploads/About/TwoIssueswiththeJPEGStandard.pdf).
|
||||||
|
|
||||||
|
7. The PPM reader now throws an error, rather than segfaulting (due to a buffer
|
||||||
|
overrun) or generating incorrect pixels, if an application attempts to use the
|
||||||
|
`tjLoadImage()` function to load a 16-bit binary PPM file (a binary PPM file
|
||||||
|
with a maximum value greater than 255) into a grayscale image buffer or to load
|
||||||
|
a 16-bit binary PGM file into an RGB image buffer.
|
||||||
|
|
||||||
|
8. Fixed an issue in the PPM reader that caused incorrect pixels to be
|
||||||
|
generated when using the `tjLoadImage()` function to load a 16-bit binary PPM
|
||||||
|
file into an extended RGB image buffer.
|
||||||
|
|
||||||
|
9. Fixed an issue whereby, if a JPEG buffer was automatically re-allocated by
|
||||||
|
one of the TurboJPEG compression or transform functions and an error
|
||||||
|
subsequently occurred during compression or transformation, the JPEG buffer
|
||||||
|
pointer passed by the application was not updated when the function returned.
|
||||||
|
|
||||||
|
|
||||||
|
2.0.90 (2.1 beta1)
|
||||||
|
==================
|
||||||
|
|
||||||
|
### Significant changes relative to 2.0.6:
|
||||||
|
|
||||||
|
1. The build system, x86-64 SIMD extensions, and accelerated Huffman codec now
|
||||||
|
support the x32 ABI on Linux, which allows for using x86-64 instructions with
|
||||||
|
32-bit pointers. The x32 ABI is generally enabled by adding `-mx32` to the
|
||||||
|
compiler flags.
|
||||||
|
|
||||||
|
Caveats:
|
||||||
|
- CMake 3.9.0 or later is required in order for the build system to
|
||||||
|
automatically detect an x32 build.
|
||||||
|
- Java does not support the x32 ABI, and thus the TurboJPEG Java API will
|
||||||
|
automatically be disabled with x32 builds.
|
||||||
|
|
||||||
|
2. Added Loongson MMI SIMD implementations of the RGB-to-grayscale, 4:2:2 fancy
|
||||||
|
chroma upsampling, 4:2:2 and 4:2:0 merged chroma upsampling/color conversion,
|
||||||
|
and fast integer DCT/IDCT algorithms. Relative to libjpeg-turbo 2.0.x, this
|
||||||
|
speeds up:
|
||||||
|
|
||||||
|
- the compression of RGB source images into grayscale JPEG images by
|
||||||
|
approximately 20%
|
||||||
|
- the decompression of 4:2:2 JPEG images by approximately 40-60% when
|
||||||
|
using fancy upsampling
|
||||||
|
- the decompression of 4:2:2 and 4:2:0 JPEG images by approximately
|
||||||
|
15-20% when using merged upsampling
|
||||||
|
- the compression of RGB source images by approximately 30-45% when using
|
||||||
|
the fast integer DCT
|
||||||
|
- the decompression of JPEG images into RGB destination images by
|
||||||
|
approximately 2x when using the fast integer IDCT
|
||||||
|
|
||||||
|
The overall decompression speedup for RGB images is now approximately
|
||||||
|
2.3-3.7x (compared to 2-3.5x with libjpeg-turbo 2.0.x.)
|
||||||
|
|
||||||
|
3. 32-bit (Armv7 or Armv7s) iOS builds of libjpeg-turbo are no longer
|
||||||
|
supported, and the libjpeg-turbo build system can no longer be used to package
|
||||||
|
such builds. 32-bit iOS apps cannot run in iOS 11 and later, and the App Store
|
||||||
|
no longer allows them.
|
||||||
|
|
||||||
|
4. 32-bit (i386) OS X/macOS builds of libjpeg-turbo are no longer supported,
|
||||||
|
and the libjpeg-turbo build system can no longer be used to package such
|
||||||
|
builds. 32-bit Mac applications cannot run in macOS 10.15 "Catalina" and
|
||||||
|
later, and the App Store no longer allows them.
|
||||||
|
|
||||||
|
5. The SSE2 (x86 SIMD) and C Huffman encoding algorithms have been
|
||||||
|
significantly optimized, resulting in a measured average overall compression
|
||||||
|
speedup of 12-28% for 64-bit code and 22-52% for 32-bit code on various Intel
|
||||||
|
and AMD CPUs, as well as a measured average overall compression speedup of
|
||||||
|
0-23% on platforms that do not have a SIMD-accelerated Huffman encoding
|
||||||
|
implementation.
|
||||||
|
|
||||||
|
6. The block smoothing algorithm that is applied by default when decompressing
|
||||||
|
progressive Huffman-encoded JPEG images has been improved in the following
|
||||||
|
ways:
|
||||||
|
|
||||||
|
- The algorithm is now more fault-tolerant. Previously, if a particular
|
||||||
|
scan was incomplete, then the smoothing parameters for the incomplete scan
|
||||||
|
would be applied to the entire output image, including the parts of the image
|
||||||
|
that were generated by the prior (complete) scan. Visually, this had the
|
||||||
|
effect of removing block smoothing from lower-frequency scans if they were
|
||||||
|
followed by an incomplete higher-frequency scan. libjpeg-turbo now applies
|
||||||
|
block smoothing parameters to each iMCU row based on which scan generated the
|
||||||
|
pixels in that row, rather than always using the block smoothing parameters for
|
||||||
|
the most recent scan.
|
||||||
|
- When applying block smoothing to DC scans, a Gaussian-like kernel with a
|
||||||
|
5x5 window is used to reduce the "blocky" appearance.
|
||||||
|
|
||||||
|
7. Added SIMD acceleration for progressive Huffman encoding on Arm platforms.
|
||||||
|
This speeds up the compression of full-color progressive JPEGs by about 30-40%
|
||||||
|
on average (relative to libjpeg-turbo 2.0.x) when using modern Arm CPUs.
|
||||||
|
|
||||||
|
8. Added configure-time and run-time auto-detection of Loongson MMI SIMD
|
||||||
|
instructions, so that the Loongson MMI SIMD extensions can be included in any
|
||||||
|
MIPS64 libjpeg-turbo build.
|
||||||
|
|
||||||
|
9. Added fault tolerance features to djpeg and jpegtran, mainly to demonstrate
|
||||||
|
methods by which applications can guard against the exploits of the JPEG format
|
||||||
|
described in the report
|
||||||
|
["Two Issues with the JPEG Standard"](https://libjpeg-turbo.org/pmwiki/uploads/About/TwoIssueswiththeJPEGStandard.pdf).
|
||||||
|
|
||||||
|
- Both programs now accept a `-maxscans` argument, which can be used to
|
||||||
|
limit the number of allowable scans in the input file.
|
||||||
|
- Both programs now accept a `-strict` argument, which can be used to
|
||||||
|
treat all warnings as fatal.
|
||||||
|
|
||||||
|
10. CMake package config files are now included for both the libjpeg and
|
||||||
|
TurboJPEG API libraries. This facilitates using libjpeg-turbo with CMake's
|
||||||
|
`find_package()` function. For example:
|
||||||
|
|
||||||
|
find_package(libjpeg-turbo CONFIG REQUIRED)
|
||||||
|
|
||||||
|
add_executable(libjpeg_program libjpeg_program.c)
|
||||||
|
target_link_libraries(libjpeg_program PUBLIC libjpeg-turbo::jpeg)
|
||||||
|
|
||||||
|
add_executable(libjpeg_program_static libjpeg_program.c)
|
||||||
|
target_link_libraries(libjpeg_program_static PUBLIC
|
||||||
|
libjpeg-turbo::jpeg-static)
|
||||||
|
|
||||||
|
add_executable(turbojpeg_program turbojpeg_program.c)
|
||||||
|
target_link_libraries(turbojpeg_program PUBLIC
|
||||||
|
libjpeg-turbo::turbojpeg)
|
||||||
|
|
||||||
|
add_executable(turbojpeg_program_static turbojpeg_program.c)
|
||||||
|
target_link_libraries(turbojpeg_program_static PUBLIC
|
||||||
|
libjpeg-turbo::turbojpeg-static)
|
||||||
|
|
||||||
|
11. Since the Unisys LZW patent has long expired, cjpeg and djpeg can now
|
||||||
|
read/write both LZW-compressed and uncompressed GIF files (feature ported from
|
||||||
|
jpeg-6a and jpeg-9d.)
|
||||||
|
|
||||||
|
12. jpegtran now includes the `-wipe` and `-drop` options from jpeg-9a and
|
||||||
|
jpeg-9d, as well as the ability to expand the image size using the `-crop`
|
||||||
|
option. Refer to jpegtran.1 or usage.txt for more details.
|
||||||
|
|
||||||
|
13. Added a complete intrinsics implementation of the Arm Neon SIMD extensions,
|
||||||
|
thus providing SIMD acceleration on Arm platforms for all of the algorithms
|
||||||
|
that are SIMD-accelerated on x86 platforms. This new implementation is
|
||||||
|
significantly faster in some cases than the old GAS implementation--
|
||||||
|
depending on the algorithms used, the type of CPU core, and the compiler. GCC,
|
||||||
|
as of this writing, does not provide a full or optimal set of Neon intrinsics,
|
||||||
|
so for performance reasons, the default when building libjpeg-turbo with GCC is
|
||||||
|
to continue using the GAS implementation of the following algorithms:
|
||||||
|
|
||||||
|
- 32-bit RGB-to-YCbCr color conversion
|
||||||
|
- 32-bit fast and accurate inverse DCT
|
||||||
|
- 64-bit RGB-to-YCbCr and YCbCr-to-RGB color conversion
|
||||||
|
- 64-bit accurate forward and inverse DCT
|
||||||
|
- 64-bit Huffman encoding
|
||||||
|
|
||||||
|
A new CMake variable (`NEON_INTRINSICS`) can be used to override this
|
||||||
|
default.
|
||||||
|
|
||||||
|
Since the new intrinsics implementation includes SIMD acceleration
|
||||||
|
for merged upsampling/color conversion, 1.5.1[5] is no longer necessary and has
|
||||||
|
been reverted.
|
||||||
|
|
||||||
|
14. The Arm Neon SIMD extensions can now be built using Visual Studio.
|
||||||
|
|
||||||
|
15. The build system can now be used to generate a universal x86-64 + Armv8
|
||||||
|
libjpeg-turbo SDK package for both iOS and macOS.
|
||||||
|
|
||||||
|
|
||||||
|
2.0.6
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 2.0.5:
|
||||||
|
|
||||||
|
1. Fixed "using JNI after critical get" errors that occurred on Android
|
||||||
|
platforms when using any of the YUV encoding/compression/decompression/decoding
|
||||||
|
methods in the TurboJPEG Java API.
|
||||||
|
|
||||||
|
2. Fixed or worked around multiple issues with `jpeg_skip_scanlines()`:
|
||||||
|
|
||||||
|
- Fixed segfaults or "Corrupt JPEG data: premature end of data segment"
|
||||||
|
errors in `jpeg_skip_scanlines()` that occurred when decompressing 4:2:2 or
|
||||||
|
4:2:0 JPEG images using merged (non-fancy) upsampling/color conversion (that
|
||||||
|
is, when setting `cinfo.do_fancy_upsampling` to `FALSE`.) 2.0.0[6] was a
|
||||||
|
similar fix, but it did not cover all cases.
|
||||||
|
- `jpeg_skip_scanlines()` now throws an error if two-pass color
|
||||||
|
quantization is enabled. Two-pass color quantization never worked properly
|
||||||
|
with `jpeg_skip_scanlines()`, and the issues could not readily be fixed.
|
||||||
|
- Fixed an issue whereby `jpeg_skip_scanlines()` always returned 0 when
|
||||||
|
skipping past the end of an image.
|
||||||
|
|
||||||
|
3. The Arm 64-bit (Armv8) Neon SIMD extensions can now be built using MinGW
|
||||||
|
toolchains targetting Arm64 (AArch64) Windows binaries.
|
||||||
|
|
||||||
|
4. Fixed unexpected visual artifacts that occurred when using
|
||||||
|
`jpeg_crop_scanline()` and interblock smoothing while decompressing only the DC
|
||||||
|
scan of a progressive JPEG image.
|
||||||
|
|
||||||
|
5. Fixed an issue whereby libjpeg-turbo would not build if 12-bit-per-component
|
||||||
|
JPEG support (`WITH_12BIT`) was enabled along with libjpeg v7 or libjpeg v8
|
||||||
|
API/ABI emulation (`WITH_JPEG7` or `WITH_JPEG8`.)
|
||||||
|
|
||||||
|
|
||||||
2.0.5
|
2.0.5
|
||||||
=====
|
=====
|
||||||
|
|
||||||
@@ -54,17 +404,17 @@ JPEG images. This was known to cause a buffer overflow when attempting to
|
|||||||
decompress some such images using `tjDecompressToYUV2()` or
|
decompress some such images using `tjDecompressToYUV2()` or
|
||||||
`tjDecompressToYUVPlanes()`.
|
`tjDecompressToYUVPlanes()`.
|
||||||
|
|
||||||
5. Fixed an issue, detected by ASan, whereby attempting to losslessly transform
|
5. Fixed an issue (CVE-2020-17541), detected by ASan, whereby attempting to
|
||||||
a specially-crafted malformed JPEG image containing an extremely-high-frequency
|
losslessly transform a specially-crafted malformed JPEG image containing an
|
||||||
coefficient block (junk image data that could never be generated by a
|
extremely-high-frequency coefficient block (junk image data that could never be
|
||||||
legitimate JPEG compressor) could cause the Huffman encoder's local buffer to
|
generated by a legitimate JPEG compressor) could cause the Huffman encoder's
|
||||||
be overrun. (Refer to 1.4.0[9] and 1.4beta1[15].) Given that the buffer
|
local buffer to be overrun. (Refer to 1.4.0[9] and 1.4beta1[15].) Given that
|
||||||
overrun was fully contained within the stack and did not cause a segfault or
|
the buffer overrun was fully contained within the stack and did not cause a
|
||||||
other user-visible errant behavior, and given that the lossless transformer
|
segfault or other user-visible errant behavior, and given that the lossless
|
||||||
(unlike the decompressor) is not generally exposed to arbitrary data exploits,
|
transformer (unlike the decompressor) is not generally exposed to arbitrary
|
||||||
this issue did not likely pose a security risk.
|
data exploits, this issue did not likely pose a security risk.
|
||||||
|
|
||||||
6. The ARM 64-bit (ARMv8) NEON SIMD assembly code now stores constants in a
|
6. The Arm 64-bit (Armv8) Neon SIMD assembly code now stores constants in a
|
||||||
separate read-only data section rather than in the text section, to support
|
separate read-only data section rather than in the text section, to support
|
||||||
execute-only memory layouts.
|
execute-only memory layouts.
|
||||||
|
|
||||||
@@ -246,7 +596,7 @@ detect actual security issues, should they arise in the future.
|
|||||||
|
|
||||||
1. Added AVX2 SIMD implementations of the colorspace conversion, chroma
|
1. Added AVX2 SIMD implementations of the colorspace conversion, chroma
|
||||||
downsampling and upsampling, integer quantization and sample conversion, and
|
downsampling and upsampling, integer quantization and sample conversion, and
|
||||||
slow integer DCT/IDCT algorithms. When using the slow integer DCT/IDCT
|
accurate integer DCT/IDCT algorithms. When using the accurate integer DCT/IDCT
|
||||||
algorithms on AVX2-equipped CPUs, the compression of RGB images is
|
algorithms on AVX2-equipped CPUs, the compression of RGB images is
|
||||||
approximately 13-36% (avg. 22%) faster (relative to libjpeg-turbo 1.5.x) with
|
approximately 13-36% (avg. 22%) faster (relative to libjpeg-turbo 1.5.x) with
|
||||||
64-bit code and 11-21% (avg. 17%) faster with 32-bit code, and the
|
64-bit code and 11-21% (avg. 17%) faster with 32-bit code, and the
|
||||||
@@ -350,16 +700,16 @@ algorithm that caused incorrect dithering in the output image. This algorithm
|
|||||||
now produces bitwise-identical results to the unmerged algorithms.
|
now produces bitwise-identical results to the unmerged algorithms.
|
||||||
|
|
||||||
12. The SIMD function symbols for x86[-64]/ELF, MIPS/ELF, macOS/x86[-64] (if
|
12. The SIMD function symbols for x86[-64]/ELF, MIPS/ELF, macOS/x86[-64] (if
|
||||||
libjpeg-turbo is built with YASM), and iOS/ARM[64] builds are now private.
|
libjpeg-turbo is built with Yasm), and iOS/Arm[64] builds are now private.
|
||||||
This prevents those symbols from being exposed in applications or shared
|
This prevents those symbols from being exposed in applications or shared
|
||||||
libraries that link statically with libjpeg-turbo.
|
libraries that link statically with libjpeg-turbo.
|
||||||
|
|
||||||
13. Added Loongson MMI SIMD implementations of the RGB-to-YCbCr and
|
13. Added Loongson MMI SIMD implementations of the RGB-to-YCbCr and
|
||||||
YCbCr-to-RGB colorspace conversion, 4:2:0 chroma downsampling, 4:2:0 fancy
|
YCbCr-to-RGB colorspace conversion, 4:2:0 chroma downsampling, 4:2:0 fancy
|
||||||
chroma upsampling, integer quantization, and slow integer DCT/IDCT algorithms.
|
chroma upsampling, integer quantization, and accurate integer DCT/IDCT
|
||||||
When using the slow integer DCT/IDCT, this speeds up the compression of RGB
|
algorithms. When using the accurate integer DCT/IDCT, this speeds up the
|
||||||
images by approximately 70-100% and the decompression of RGB images by
|
compression of RGB images by approximately 70-100% and the decompression of RGB
|
||||||
approximately 2-3.5x.
|
images by approximately 2-3.5x.
|
||||||
|
|
||||||
14. Fixed a build error when building with older MinGW releases (regression
|
14. Fixed a build error when building with older MinGW releases (regression
|
||||||
caused by 1.5.1[7].)
|
caused by 1.5.1[7].)
|
||||||
@@ -409,9 +759,9 @@ end of a single-scan (non-progressive) image, subsequent calls to
|
|||||||
`jpeg_consume_input()` would return `JPEG_SUSPENDED` rather than
|
`jpeg_consume_input()` would return `JPEG_SUSPENDED` rather than
|
||||||
`JPEG_REACHED_EOI`.
|
`JPEG_REACHED_EOI`.
|
||||||
|
|
||||||
9. `jpeg_crop_scanlines()` now works correctly when decompressing grayscale
|
9. `jpeg_crop_scanline()` now works correctly when decompressing grayscale JPEG
|
||||||
JPEG images that were compressed with a sampling factor other than 1 (for
|
images that were compressed with a sampling factor other than 1 (for instance,
|
||||||
instance, with `cjpeg -grayscale -sample 2x2`).
|
with `cjpeg -grayscale -sample 2x2`).
|
||||||
|
|
||||||
|
|
||||||
1.5.2
|
1.5.2
|
||||||
@@ -435,7 +785,7 @@ on PowerPC-based AmigaOS 4 and OpenBSD systems.
|
|||||||
5. Fixed build and runtime errors on Windows that occurred when building
|
5. Fixed build and runtime errors on Windows that occurred when building
|
||||||
libjpeg-turbo with libjpeg v7 API/ABI emulation and the in-memory
|
libjpeg-turbo with libjpeg v7 API/ABI emulation and the in-memory
|
||||||
source/destination managers. Due to an oversight, the `jpeg_skip_scanlines()`
|
source/destination managers. Due to an oversight, the `jpeg_skip_scanlines()`
|
||||||
and `jpeg_crop_scanlines()` functions were not being included in jpeg7.dll when
|
and `jpeg_crop_scanline()` functions were not being included in jpeg7.dll when
|
||||||
libjpeg-turbo was built with `-DWITH_JPEG7=1` and `-DWITH_MEMSRCDST=1`.
|
libjpeg-turbo was built with `-DWITH_JPEG7=1` and `-DWITH_MEMSRCDST=1`.
|
||||||
|
|
||||||
6. Fixed "Bogus virtual array access" error that occurred when using the
|
6. Fixed "Bogus virtual array access" error that occurred when using the
|
||||||
@@ -691,8 +1041,8 @@ benchmarking or regression testing, SIMD-accelerated Huffman encoding can be
|
|||||||
disabled by setting the `JSIMD_NOHUFFENC` environment variable to `1`.
|
disabled by setting the `JSIMD_NOHUFFENC` environment variable to `1`.
|
||||||
|
|
||||||
13. Added ARM 64-bit (ARMv8) NEON SIMD implementations of the commonly-used
|
13. Added ARM 64-bit (ARMv8) NEON SIMD implementations of the commonly-used
|
||||||
compression algorithms (including the slow integer forward DCT and h2v2 & h2v1
|
compression algorithms (including the accurate integer forward DCT and h2v2 &
|
||||||
downsampling algorithms, which are not accelerated in the 32-bit NEON
|
h2v1 downsampling algorithms, which are not accelerated in the 32-bit NEON
|
||||||
implementation.) This speeds up the compression of full-color JPEGs by about
|
implementation.) This speeds up the compression of full-color JPEGs by about
|
||||||
75% on average on a Cavium ThunderX processor and by about 2-2.5x on average on
|
75% on average on a Cavium ThunderX processor and by about 2-2.5x on average on
|
||||||
Cortex-A53 and Cortex-A57 cores.
|
Cortex-A53 and Cortex-A57 cores.
|
||||||
@@ -823,8 +1173,8 @@ platforms other than Windows or Linux. Oops.
|
|||||||
|
|
||||||
7. Fixed an extremely rare bug in the Huffman encoder that caused 64-bit
|
7. Fixed an extremely rare bug in the Huffman encoder that caused 64-bit
|
||||||
builds of libjpeg-turbo to incorrectly encode a few specific test images when
|
builds of libjpeg-turbo to incorrectly encode a few specific test images when
|
||||||
quality=98, an optimized Huffman table, and the slow integer forward DCT were
|
quality=98, an optimized Huffman table, and the accurate integer forward DCT
|
||||||
used.
|
were used.
|
||||||
|
|
||||||
8. The Windows (CMake) build system now supports building only static or only
|
8. The Windows (CMake) build system now supports building only static or only
|
||||||
shared libraries. This is accomplished by adding either `-DENABLE_STATIC=0` or
|
shared libraries. This is accomplished by adding either `-DENABLE_STATIC=0` or
|
||||||
@@ -983,8 +1333,8 @@ floating point inverse DCT (using code borrowed from libjpeg v8a and later.)
|
|||||||
The accuracy of this implementation now matches the accuracy of the SSE/SSE2
|
The accuracy of this implementation now matches the accuracy of the SSE/SSE2
|
||||||
implementation. Note, however, that the floating point DCT/IDCT algorithms are
|
implementation. Note, however, that the floating point DCT/IDCT algorithms are
|
||||||
mainly a legacy feature. They generally do not produce significantly better
|
mainly a legacy feature. They generally do not produce significantly better
|
||||||
accuracy than the slow integer DCT/IDCT algorithms, and they are quite a bit
|
accuracy than the accurate integer DCT/IDCT algorithms, and they are quite a
|
||||||
slower.
|
bit slower.
|
||||||
|
|
||||||
8. Added a new output colorspace (`JCS_RGB565`) to the libjpeg API that allows
|
8. Added a new output colorspace (`JCS_RGB565`) to the libjpeg API that allows
|
||||||
for decompressing JPEG images into RGB565 (16-bit) pixels. If dithering is not
|
for decompressing JPEG images into RGB565 (16-bit) pixels. If dithering is not
|
||||||
@@ -1235,8 +1585,8 @@ either the fast or the accurate DCT/IDCT algorithms in the underlying codec.
|
|||||||
|
|
||||||
### Significant changes relative to 1.2 beta1:
|
### Significant changes relative to 1.2 beta1:
|
||||||
|
|
||||||
1. Fixed build issue with YASM on Unix systems (the libjpeg-turbo build system
|
1. Fixed build issue with Yasm on Unix systems (the libjpeg-turbo build system
|
||||||
was not adding the current directory to the assembler include path, so YASM
|
was not adding the current directory to the assembler include path, so Yasm
|
||||||
was not able to find jsimdcfg.inc.)
|
was not able to find jsimdcfg.inc.)
|
||||||
|
|
||||||
2. Fixed out-of-bounds read in SSE2 SIMD code that occurred when decompressing
|
2. Fixed out-of-bounds read in SSE2 SIMD code that occurred when decompressing
|
||||||
@@ -1304,7 +1654,7 @@ transposed or rotated 90 degrees.
|
|||||||
8. All legacy VirtualGL code has been re-factored, and this has allowed
|
8. All legacy VirtualGL code has been re-factored, and this has allowed
|
||||||
libjpeg-turbo, in its entirety, to be re-licensed under a BSD-style license.
|
libjpeg-turbo, in its entirety, to be re-licensed under a BSD-style license.
|
||||||
|
|
||||||
9. libjpeg-turbo can now be built with YASM.
|
9. libjpeg-turbo can now be built with Yasm.
|
||||||
|
|
||||||
10. Added SIMD acceleration for ARM Linux and iOS platforms that support
|
10. Added SIMD acceleration for ARM Linux and iOS platforms that support
|
||||||
NEON instructions.
|
NEON instructions.
|
||||||
@@ -1394,8 +1744,8 @@ 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 the TurboJPEG wrapper will now automatically
|
JPEG qualities greater than 95, so the TurboJPEG wrapper will now automatically
|
||||||
use the slow integer forward DCT when generating JPEG images of quality 96 or
|
use the accurate integer forward DCT when generating JPEG images of quality 96
|
||||||
greater. This reduces compression performance by as much as 15% for these
|
or greater. This reduces compression performance by as much as 15% for these
|
||||||
high-quality images but is necessary to ensure that the images are perceptually
|
high-quality images but is necessary to ensure that the images are perceptually
|
||||||
lossless. It also ensures that the library can avoid the performance pitfall
|
lossless. It also ensures that the library can avoid the performance pitfall
|
||||||
created by [1].
|
created by [1].
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ best of our understanding.
|
|||||||
The Modified (3-clause) BSD License
|
The Modified (3-clause) BSD License
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
Copyright (C)2009-2020 D. R. Commander. All Rights Reserved.
|
Copyright (C)2009-2022 D. R. Commander. All Rights Reserved.<br>
|
||||||
Copyright (C)2015 Viktor Szathmáry. All Rights Reserved.
|
Copyright (C)2015 Viktor Szathmáry. 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
|
||||||
|
|||||||
37
README.ijg
@@ -128,7 +128,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-2016, Thomas G. Lane, Guido Vollbeding.
|
This software is copyright (C) 1991-2020, 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
|
||||||
@@ -159,19 +159,6 @@ commercial products, provided that all warranty or liability claims are
|
|||||||
assumed by the product vendor.
|
assumed by the product vendor.
|
||||||
|
|
||||||
|
|
||||||
The IJG distribution formerly included code to read and write GIF files.
|
|
||||||
To avoid entanglement with the Unisys LZW patent (now expired), GIF reading
|
|
||||||
support has been removed altogether, and the GIF writer has been simplified
|
|
||||||
to produce "uncompressed GIFs". This technique does not use the LZW
|
|
||||||
algorithm; the resulting GIF files are larger than usual, but are readable
|
|
||||||
by all standard GIF decoders.
|
|
||||||
|
|
||||||
We are required to state that
|
|
||||||
"The Graphics Interchange Format(c) is the Copyright property of
|
|
||||||
CompuServe Incorporated. GIF(sm) is a Service Mark property of
|
|
||||||
CompuServe Incorporated."
|
|
||||||
|
|
||||||
|
|
||||||
REFERENCES
|
REFERENCES
|
||||||
==========
|
==========
|
||||||
|
|
||||||
@@ -223,12 +210,12 @@ https://www.iso.org/standard/54989.html and http://www.itu.int/rec/T-REC-T.871.
|
|||||||
A PDF file of the older JFIF 1.02 specification is available at
|
A PDF file of the older JFIF 1.02 specification is available at
|
||||||
http://www.w3.org/Graphics/JPEG/jfif3.pdf.
|
http://www.w3.org/Graphics/JPEG/jfif3.pdf.
|
||||||
|
|
||||||
The TIFF 6.0 file format specification can be obtained by FTP from
|
The TIFF 6.0 file format specification can be obtained from
|
||||||
ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme
|
http://mirrors.ctan.org/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation
|
||||||
found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
|
scheme found in the TIFF 6.0 spec of 3-June-92 has a number of serious
|
||||||
IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
|
problems. IJG does not recommend use of the TIFF 6.0 design (TIFF Compression
|
||||||
Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
|
tag 6). Instead, we recommend the JPEG design proposed by TIFF Technical Note
|
||||||
(Compression tag 7). Copies of this Note can be obtained from
|
#2 (Compression tag 7). Copies of this Note can be obtained from
|
||||||
http://www.ijg.org/files/. It is expected that the next revision
|
http://www.ijg.org/files/. It is expected that the next revision
|
||||||
of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
|
of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
|
||||||
Although IJG's own code does not support TIFF/JPEG, the free libtiff library
|
Although IJG's own code does not support TIFF/JPEG, the free libtiff library
|
||||||
@@ -243,14 +230,8 @@ The most recent released version can always be found there in
|
|||||||
directory "files".
|
directory "files".
|
||||||
|
|
||||||
The JPEG FAQ (Frequently Asked Questions) article is a source of some
|
The JPEG FAQ (Frequently Asked Questions) article is a source of some
|
||||||
general information about JPEG.
|
general information about JPEG. It is available at
|
||||||
It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
|
http://www.faqs.org/faqs/jpeg-faq.
|
||||||
and other news.answers archive sites, including the official news.answers
|
|
||||||
archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
|
|
||||||
If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu
|
|
||||||
with body
|
|
||||||
send usenet/news.answers/jpeg-faq/part1
|
|
||||||
send usenet/news.answers/jpeg-faq/part2
|
|
||||||
|
|
||||||
|
|
||||||
FILE FORMAT COMPATIBILITY
|
FILE FORMAT COMPATIBILITY
|
||||||
|
|||||||
23
README.md
@@ -2,8 +2,8 @@ Background
|
|||||||
==========
|
==========
|
||||||
|
|
||||||
libjpeg-turbo is a JPEG image codec that uses SIMD instructions to accelerate
|
libjpeg-turbo is a JPEG image codec that uses SIMD instructions to accelerate
|
||||||
baseline JPEG compression and decompression on x86, x86-64, ARM, PowerPC, and
|
baseline JPEG compression and decompression on x86, x86-64, Arm, PowerPC, and
|
||||||
MIPS systems, as well as progressive JPEG compression on x86 and x86-64
|
MIPS systems, as well as progressive JPEG compression on x86, x86-64, and Arm
|
||||||
systems. On such systems, libjpeg-turbo is generally 2-6x as fast as libjpeg,
|
systems. On such systems, libjpeg-turbo is generally 2-6x as fast as libjpeg,
|
||||||
all else being equal. On other types of systems, libjpeg-turbo can still
|
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
|
outperform libjpeg by a significant amount, by virtue of its highly-optimized
|
||||||
@@ -179,8 +179,8 @@ supported and which aren't.
|
|||||||
|
|
||||||
NOTE: As of this writing, extensive research has been conducted into the
|
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
|
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
|
means of quality improvement. Readers are invited to peruse the research at
|
||||||
<http://www.libjpeg-turbo.org/About/SmartScale> and draw his/her own conclusions,
|
<http://www.libjpeg-turbo.org/About/SmartScale> and draw their own conclusions,
|
||||||
but it is the general belief of our project that these features have not
|
but it is the general belief of our project that these features have not
|
||||||
demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
|
demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
|
||||||
|
|
||||||
@@ -287,12 +287,13 @@ following reasons:
|
|||||||
(and slightly faster) floating point IDCT algorithm introduced in libjpeg
|
(and slightly faster) floating point IDCT algorithm introduced in libjpeg
|
||||||
v8a as opposed to the algorithm used in libjpeg v6b. It should be noted,
|
v8a as opposed to the algorithm used in libjpeg v6b. It should be noted,
|
||||||
however, that this algorithm basically brings the accuracy of the floating
|
however, that this algorithm basically brings the accuracy of the floating
|
||||||
point IDCT in line with the accuracy of the slow integer IDCT. The floating
|
point IDCT in line with the accuracy of the accurate integer IDCT. The
|
||||||
point DCT/IDCT algorithms are mainly a legacy feature, and they do not
|
floating point DCT/IDCT algorithms are mainly a legacy feature, and they do
|
||||||
produce significantly more accuracy than the slow integer algorithms (to put
|
not produce significantly more accuracy than the accurate integer algorithms
|
||||||
numbers on this, the typical difference in PNSR between the two algorithms
|
(to put numbers on this, the typical difference in PNSR between the two
|
||||||
is less than 0.10 dB, whereas changing the quality level by 1 in the upper
|
algorithms is less than 0.10 dB, whereas changing the quality level by 1 in
|
||||||
range of the quality scale is typically more like a 1.0 dB difference.)
|
the upper range of the quality scale is typically more like a 1.0 dB
|
||||||
|
difference.)
|
||||||
|
|
||||||
- If the floating point algorithms in libjpeg-turbo are not implemented using
|
- If the floating point algorithms in libjpeg-turbo are not implemented using
|
||||||
SIMD instructions on a particular platform, then the accuracy of the
|
SIMD instructions on a particular platform, then the accuracy of the
|
||||||
@@ -340,7 +341,7 @@ The algorithm used by the SIMD-accelerated quantization function cannot produce
|
|||||||
correct results whenever the fast integer forward DCT is used along with a JPEG
|
correct results whenever the fast integer forward DCT is used along with a JPEG
|
||||||
quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
|
quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
|
||||||
function in those cases. This causes performance to drop by as much as 40%.
|
function in those cases. This causes performance to drop by as much as 40%.
|
||||||
It is therefore strongly advised that you use the slow integer forward DCT
|
It is therefore strongly advised that you use the accurate integer forward DCT
|
||||||
whenever encoding images with a JPEG quality of 98 or higher.
|
whenever encoding images with a JPEG quality of 98 or higher.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
45
appveyor.yml
@@ -20,16 +20,18 @@ install:
|
|||||||
|
|
||||||
7z x c:\installers\x86_64-6.4.0-release-posix-seh-rt_v5-rev0.7z -o"c:\Program Files\mingw-w64\x86_64-6.4.0-posix-seh-rt_v5-rev0" > c:\installers\mingw64.install.log
|
7z x c:\installers\x86_64-6.4.0-release-posix-seh-rt_v5-rev0.7z -o"c:\Program Files\mingw-w64\x86_64-6.4.0-posix-seh-rt_v5-rev0" > c:\installers\mingw64.install.log
|
||||||
|
|
||||||
set INCLUDE=c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include;c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include
|
set PATH=c:\nasm-2.10.01;c:\Program Files (x86)\NSIS;c:\msys64\usr\bin;%PATH%
|
||||||
|
|
||||||
set LIB=c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64;c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\lib\x64
|
"c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat"
|
||||||
|
|
||||||
set PATH=c:\nasm-2.10.01;c:\Program Files (x86)\NSIS;c:\msys64\usr\bin;c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE;c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\bin\x64;c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\bin;%PATH%
|
set INCLUDE
|
||||||
|
|
||||||
|
set LIB
|
||||||
|
|
||||||
|
set PATH
|
||||||
|
|
||||||
set MSYSTEM=MINGW32
|
set MSYSTEM=MINGW32
|
||||||
|
|
||||||
bash -c "pacman --noconfirm -S zip"
|
|
||||||
|
|
||||||
mklink /d "%ProgramData%\Oracle\Java32" "c:\Program Files (x86)\Java\jdk1.6.0"
|
mklink /d "%ProgramData%\Oracle\Java32" "c:\Program Files (x86)\Java\jdk1.6.0"
|
||||||
|
|
||||||
git clone --depth=1 https://github.com/libjpeg-turbo/buildscripts.git -b %APPVEYOR_REPO_BRANCH% c:/buildscripts
|
git clone --depth=1 https://github.com/libjpeg-turbo/buildscripts.git -b %APPVEYOR_REPO_BRANCH% c:/buildscripts
|
||||||
@@ -45,11 +47,23 @@ build_script:
|
|||||||
|
|
||||||
bash c:/buildscripts/buildljt -d %MINGWPATH% -b /c/ljt.nightly -v
|
bash c:/buildscripts/buildljt -d %MINGWPATH% -b /c/ljt.nightly -v
|
||||||
|
|
||||||
|
cmake --build . --target clean
|
||||||
|
|
||||||
|
md win64
|
||||||
|
|
||||||
|
cd win64
|
||||||
|
|
||||||
|
bash c:/buildscripts/setupscripts/win64 -DCMAKE_C_FLAGS='-DWIN32 -D_WINDOWS -W4 -wd4100 -wd4127 -wd4245 -wd4324 -wd4701 -wd4702 -wd4706 -WX'
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
ninja
|
||||||
|
|
||||||
move c:\ljt.nightly\files\*.tar.gz .
|
move c:\ljt.nightly\files\*.tar.gz .
|
||||||
|
|
||||||
move c:\ljt.nightly\files\*.exe .
|
move c:\ljt.nightly\files\*.exe .
|
||||||
|
|
||||||
move c:\ljt.nightly\files\*.zip .
|
move c:\ljt.nightly\files\*.html .
|
||||||
|
|
||||||
move c:\ljt.nightly\log-windows.txt .
|
move c:\ljt.nightly\log-windows.txt .
|
||||||
|
|
||||||
@@ -63,12 +77,23 @@ artifacts:
|
|||||||
- path: '*-vc*.exe'
|
- path: '*-vc*.exe'
|
||||||
name: SDK for Visual C++
|
name: SDK for Visual C++
|
||||||
|
|
||||||
- path: '*.zip'
|
|
||||||
name: Windows JNI JARs
|
|
||||||
|
|
||||||
- path: 'log-windows.txt'
|
- path: 'log-windows.txt'
|
||||||
name: Build log
|
name: Build log
|
||||||
|
|
||||||
|
- path: 'index.html'
|
||||||
|
name: MD5 checksums
|
||||||
|
|
||||||
test: off
|
test: off
|
||||||
|
|
||||||
deploy: off
|
deploy:
|
||||||
|
provider: S3
|
||||||
|
access_key_id:
|
||||||
|
secure: Z74OYogQ6bNV/I+6b5ZEXig74+6MW2WLER0v/bPM/uk=
|
||||||
|
secret_access_key:
|
||||||
|
secure: cyGZhHVCFwZ9jgf5lXoW69mVtECmqwx3eLo61ha8ueWbMYlHho7lwDXwVvxOFiCa
|
||||||
|
bucket: libjpeg-turbo-pr
|
||||||
|
region:
|
||||||
|
secure: qSElYBgBRcEUf88M6Osthw==
|
||||||
|
folder: $(APPVEYOR_REPO_BRANCH)/windows
|
||||||
|
set_public: true
|
||||||
|
remove_files: true
|
||||||
|
|||||||
28
cderror.h
@@ -1,9 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* cderror.h
|
* cderror.h
|
||||||
*
|
*
|
||||||
|
* 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.
|
||||||
* Modified 2009-2017 by Guido Vollbeding.
|
* Modified 2009-2017 by Guido Vollbeding.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* libjpeg-turbo Modifications:
|
||||||
|
* Copyright (C) 2021, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
* file.
|
* file.
|
||||||
*
|
*
|
||||||
@@ -42,7 +44,7 @@ JMESSAGE(JMSG_FIRSTADDONCODE = 1000, NULL) /* Must be first entry! */
|
|||||||
|
|
||||||
#ifdef BMP_SUPPORTED
|
#ifdef BMP_SUPPORTED
|
||||||
JMESSAGE(JERR_BMP_BADCMAP, "Unsupported BMP colormap format")
|
JMESSAGE(JERR_BMP_BADCMAP, "Unsupported BMP colormap format")
|
||||||
JMESSAGE(JERR_BMP_BADDEPTH, "Only 8- and 24-bit BMP files are supported")
|
JMESSAGE(JERR_BMP_BADDEPTH, "Only 8-, 24-, and 32-bit BMP files are supported")
|
||||||
JMESSAGE(JERR_BMP_BADHEADER, "Invalid BMP file: bad header length")
|
JMESSAGE(JERR_BMP_BADHEADER, "Invalid BMP file: bad header length")
|
||||||
JMESSAGE(JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1")
|
JMESSAGE(JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1")
|
||||||
JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB")
|
JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB")
|
||||||
@@ -50,9 +52,9 @@ JMESSAGE(JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported")
|
|||||||
JMESSAGE(JERR_BMP_EMPTY, "Empty BMP image")
|
JMESSAGE(JERR_BMP_EMPTY, "Empty BMP image")
|
||||||
JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM")
|
JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM")
|
||||||
JMESSAGE(JERR_BMP_OUTOFRANGE, "Numeric value out of range in BMP file")
|
JMESSAGE(JERR_BMP_OUTOFRANGE, "Numeric value out of range in BMP file")
|
||||||
JMESSAGE(JTRC_BMP, "%ux%u 24-bit BMP image")
|
JMESSAGE(JTRC_BMP, "%ux%u %d-bit BMP image")
|
||||||
JMESSAGE(JTRC_BMP_MAPPED, "%ux%u 8-bit colormapped BMP image")
|
JMESSAGE(JTRC_BMP_MAPPED, "%ux%u 8-bit colormapped BMP image")
|
||||||
JMESSAGE(JTRC_BMP_OS2, "%ux%u 24-bit OS2 BMP image")
|
JMESSAGE(JTRC_BMP_OS2, "%ux%u %d-bit OS2 BMP image")
|
||||||
JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image")
|
JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image")
|
||||||
#endif /* BMP_SUPPORTED */
|
#endif /* BMP_SUPPORTED */
|
||||||
|
|
||||||
@@ -60,6 +62,7 @@ JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image")
|
|||||||
JMESSAGE(JERR_GIF_BUG, "GIF output got confused")
|
JMESSAGE(JERR_GIF_BUG, "GIF output got confused")
|
||||||
JMESSAGE(JERR_GIF_CODESIZE, "Bogus GIF codesize %d")
|
JMESSAGE(JERR_GIF_CODESIZE, "Bogus GIF codesize %d")
|
||||||
JMESSAGE(JERR_GIF_COLORSPACE, "GIF output must be grayscale or RGB")
|
JMESSAGE(JERR_GIF_COLORSPACE, "GIF output must be grayscale or RGB")
|
||||||
|
JMESSAGE(JERR_GIF_EMPTY, "Empty GIF image")
|
||||||
JMESSAGE(JERR_GIF_IMAGENOTFOUND, "Too few images in GIF file")
|
JMESSAGE(JERR_GIF_IMAGENOTFOUND, "Too few images in GIF file")
|
||||||
JMESSAGE(JERR_GIF_NOT, "Not a GIF file")
|
JMESSAGE(JERR_GIF_NOT, "Not a GIF file")
|
||||||
JMESSAGE(JTRC_GIF, "%ux%ux%d GIF image")
|
JMESSAGE(JTRC_GIF, "%ux%ux%d GIF image")
|
||||||
@@ -84,23 +87,6 @@ JMESSAGE(JTRC_PPM, "%ux%u PPM image")
|
|||||||
JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image")
|
JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image")
|
||||||
#endif /* PPM_SUPPORTED */
|
#endif /* PPM_SUPPORTED */
|
||||||
|
|
||||||
#ifdef RLE_SUPPORTED
|
|
||||||
JMESSAGE(JERR_RLE_BADERROR, "Bogus error code from RLE library")
|
|
||||||
JMESSAGE(JERR_RLE_COLORSPACE, "RLE output must be grayscale or RGB")
|
|
||||||
JMESSAGE(JERR_RLE_DIMENSIONS, "Image dimensions (%ux%u) too large for RLE")
|
|
||||||
JMESSAGE(JERR_RLE_EMPTY, "Empty RLE file")
|
|
||||||
JMESSAGE(JERR_RLE_EOF, "Premature EOF in RLE header")
|
|
||||||
JMESSAGE(JERR_RLE_MEM, "Insufficient memory for RLE header")
|
|
||||||
JMESSAGE(JERR_RLE_NOT, "Not an RLE file")
|
|
||||||
JMESSAGE(JERR_RLE_TOOMANYCHANNELS, "Cannot handle %d output channels for RLE")
|
|
||||||
JMESSAGE(JERR_RLE_UNSUPPORTED, "Cannot handle this RLE setup")
|
|
||||||
JMESSAGE(JTRC_RLE, "%ux%u full-color RLE file")
|
|
||||||
JMESSAGE(JTRC_RLE_FULLMAP, "%ux%u full-color RLE file with map of length %d")
|
|
||||||
JMESSAGE(JTRC_RLE_GRAY, "%ux%u grayscale RLE file")
|
|
||||||
JMESSAGE(JTRC_RLE_MAPGRAY, "%ux%u grayscale RLE file with map of length %d")
|
|
||||||
JMESSAGE(JTRC_RLE_MAPPED, "%ux%u colormapped RLE file with map of length %d")
|
|
||||||
#endif /* RLE_SUPPORTED */
|
|
||||||
|
|
||||||
#ifdef TARGA_SUPPORTED
|
#ifdef TARGA_SUPPORTED
|
||||||
JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format")
|
JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format")
|
||||||
JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file")
|
JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file")
|
||||||
|
|||||||
47
cdjpeg.c
@@ -3,8 +3,8 @@
|
|||||||
*
|
*
|
||||||
* This file was part of the Independent JPEG Group's software:
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
* It was modified by The libjpeg-turbo Project to include only code relevant
|
* libjpeg-turbo Modifications:
|
||||||
* to libjpeg-turbo.
|
* Copyright (C) 2019, 2022, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
* file.
|
* file.
|
||||||
*
|
*
|
||||||
@@ -25,26 +25,37 @@
|
|||||||
* Optional progress monitor: display a percent-done figure on stderr.
|
* Optional progress monitor: display a percent-done figure on stderr.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
|
||||||
|
|
||||||
METHODDEF(void)
|
METHODDEF(void)
|
||||||
progress_monitor(j_common_ptr cinfo)
|
progress_monitor(j_common_ptr cinfo)
|
||||||
{
|
{
|
||||||
cd_progress_ptr prog = (cd_progress_ptr)cinfo->progress;
|
cd_progress_ptr prog = (cd_progress_ptr)cinfo->progress;
|
||||||
int total_passes = prog->pub.total_passes + prog->total_extra_passes;
|
|
||||||
int percent_done =
|
|
||||||
(int)(prog->pub.pass_counter * 100L / prog->pub.pass_limit);
|
|
||||||
|
|
||||||
if (percent_done != prog->percent_done) {
|
if (prog->max_scans != 0 && cinfo->is_decompressor) {
|
||||||
prog->percent_done = percent_done;
|
int scan_no = ((j_decompress_ptr)cinfo)->input_scan_number;
|
||||||
if (total_passes > 1) {
|
|
||||||
fprintf(stderr, "\rPass %d/%d: %3d%% ",
|
if (scan_no > (int)prog->max_scans) {
|
||||||
prog->pub.completed_passes + prog->completed_extra_passes + 1,
|
fprintf(stderr, "Scan number %d exceeds maximum scans (%u)\n", scan_no,
|
||||||
total_passes, percent_done);
|
prog->max_scans);
|
||||||
} else {
|
exit(EXIT_FAILURE);
|
||||||
fprintf(stderr, "\r %3d%% ", percent_done);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prog->report) {
|
||||||
|
int total_passes = prog->pub.total_passes + prog->total_extra_passes;
|
||||||
|
int percent_done =
|
||||||
|
(int)(prog->pub.pass_counter * 100L / prog->pub.pass_limit);
|
||||||
|
|
||||||
|
if (percent_done != prog->percent_done) {
|
||||||
|
prog->percent_done = percent_done;
|
||||||
|
if (total_passes > 1) {
|
||||||
|
fprintf(stderr, "\rPass %d/%d: %3d%% ",
|
||||||
|
prog->pub.completed_passes + prog->completed_extra_passes + 1,
|
||||||
|
total_passes, percent_done);
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "\r %3d%% ", percent_done);
|
||||||
|
}
|
||||||
|
fflush(stderr);
|
||||||
}
|
}
|
||||||
fflush(stderr);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,6 +68,8 @@ start_progress_monitor(j_common_ptr cinfo, cd_progress_ptr progress)
|
|||||||
progress->pub.progress_monitor = progress_monitor;
|
progress->pub.progress_monitor = progress_monitor;
|
||||||
progress->completed_extra_passes = 0;
|
progress->completed_extra_passes = 0;
|
||||||
progress->total_extra_passes = 0;
|
progress->total_extra_passes = 0;
|
||||||
|
progress->max_scans = 0;
|
||||||
|
progress->report = FALSE;
|
||||||
progress->percent_done = -1;
|
progress->percent_done = -1;
|
||||||
cinfo->progress = &progress->pub;
|
cinfo->progress = &progress->pub;
|
||||||
}
|
}
|
||||||
@@ -73,8 +86,6 @@ end_progress_monitor(j_common_ptr cinfo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Case-insensitive matching of possibly-abbreviated keyword switches.
|
* Case-insensitive matching of possibly-abbreviated keyword switches.
|
||||||
|
|||||||
20
cdjpeg.h
@@ -3,8 +3,9 @@
|
|||||||
*
|
*
|
||||||
* This file was part of the Independent JPEG Group's software:
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1997, Thomas G. Lane.
|
* Copyright (C) 1994-1997, Thomas G. Lane.
|
||||||
|
* Modified 2019 by Guido Vollbeding.
|
||||||
* libjpeg-turbo Modifications:
|
* libjpeg-turbo Modifications:
|
||||||
* Copyright (C) 2017, D. R. Commander.
|
* Copyright (C) 2017, 2019, 2021, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
* file.
|
* file.
|
||||||
*
|
*
|
||||||
@@ -35,6 +36,9 @@ struct cjpeg_source_struct {
|
|||||||
|
|
||||||
JSAMPARRAY buffer;
|
JSAMPARRAY buffer;
|
||||||
JDIMENSION buffer_height;
|
JDIMENSION buffer_height;
|
||||||
|
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
|
||||||
|
JDIMENSION max_pixels;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -56,9 +60,9 @@ struct djpeg_dest_struct {
|
|||||||
void (*finish_output) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo);
|
void (*finish_output) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo);
|
||||||
/* Re-calculate buffer dimensions based on output dimensions (for use with
|
/* Re-calculate buffer dimensions based on output dimensions (for use with
|
||||||
partial image decompression.) If this is NULL, then the output format
|
partial image decompression.) If this is NULL, then the output format
|
||||||
does not support partial image decompression (BMP and RLE, in particular,
|
does not support partial image decompression (BMP, in particular, cannot
|
||||||
cannot support partial decompression because they use an inversion buffer
|
support partial decompression because it uses an inversion buffer to write
|
||||||
to write the image in bottom-up order.) */
|
the image in bottom-up order.) */
|
||||||
void (*calc_buffer_dimensions) (j_decompress_ptr cinfo,
|
void (*calc_buffer_dimensions) (j_decompress_ptr cinfo,
|
||||||
djpeg_dest_ptr dinfo);
|
djpeg_dest_ptr dinfo);
|
||||||
|
|
||||||
@@ -87,6 +91,9 @@ struct cdjpeg_progress_mgr {
|
|||||||
struct jpeg_progress_mgr pub; /* fields known to JPEG library */
|
struct jpeg_progress_mgr pub; /* fields known to JPEG library */
|
||||||
int completed_extra_passes; /* extra passes completed */
|
int completed_extra_passes; /* extra passes completed */
|
||||||
int total_extra_passes; /* total extra */
|
int total_extra_passes; /* total extra */
|
||||||
|
JDIMENSION max_scans; /* abort if the number of scans exceeds this
|
||||||
|
value and the value is non-zero */
|
||||||
|
boolean report; /* whether or not to report progress */
|
||||||
/* last printed percentage stored here to avoid multiple printouts */
|
/* last printed percentage stored here to avoid multiple printouts */
|
||||||
int percent_done;
|
int percent_done;
|
||||||
};
|
};
|
||||||
@@ -101,11 +108,9 @@ EXTERN(cjpeg_source_ptr) jinit_read_bmp(j_compress_ptr cinfo,
|
|||||||
EXTERN(djpeg_dest_ptr) jinit_write_bmp(j_decompress_ptr cinfo, boolean is_os2,
|
EXTERN(djpeg_dest_ptr) jinit_write_bmp(j_decompress_ptr cinfo, boolean is_os2,
|
||||||
boolean use_inversion_array);
|
boolean use_inversion_array);
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_gif(j_compress_ptr cinfo);
|
EXTERN(cjpeg_source_ptr) jinit_read_gif(j_compress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_gif(j_decompress_ptr cinfo);
|
EXTERN(djpeg_dest_ptr) jinit_write_gif(j_decompress_ptr cinfo, boolean is_lzw);
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_ppm(j_compress_ptr cinfo);
|
EXTERN(cjpeg_source_ptr) jinit_read_ppm(j_compress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_ppm(j_decompress_ptr cinfo);
|
EXTERN(djpeg_dest_ptr) jinit_write_ppm(j_decompress_ptr cinfo);
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_rle(j_compress_ptr cinfo);
|
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_rle(j_decompress_ptr cinfo);
|
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_targa(j_compress_ptr cinfo);
|
EXTERN(cjpeg_source_ptr) jinit_read_targa(j_compress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_targa(j_decompress_ptr cinfo);
|
EXTERN(djpeg_dest_ptr) jinit_write_targa(j_decompress_ptr cinfo);
|
||||||
|
|
||||||
@@ -125,7 +130,6 @@ EXTERN(void) read_color_map(j_decompress_ptr cinfo, FILE *infile);
|
|||||||
|
|
||||||
/* common support routines (in cdjpeg.c) */
|
/* common support routines (in cdjpeg.c) */
|
||||||
|
|
||||||
EXTERN(void) enable_signal_catcher(j_common_ptr cinfo);
|
|
||||||
EXTERN(void) start_progress_monitor(j_common_ptr cinfo,
|
EXTERN(void) start_progress_monitor(j_common_ptr cinfo,
|
||||||
cd_progress_ptr progress);
|
cd_progress_ptr progress);
|
||||||
EXTERN(void) end_progress_monitor(j_common_ptr cinfo);
|
EXTERN(void) end_progress_monitor(j_common_ptr cinfo);
|
||||||
|
|||||||
31
change.log
@@ -6,6 +6,25 @@ reference. Please see ChangeLog.md for information specific to libjpeg-turbo.
|
|||||||
CHANGE LOG for Independent JPEG Group's JPEG software
|
CHANGE LOG for Independent JPEG Group's JPEG software
|
||||||
|
|
||||||
|
|
||||||
|
Version 9d 12-Jan-2020
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Restore GIF read and write support from libjpeg version 6a.
|
||||||
|
Thank to Wolfgang Werner (W.W.) Heinz for suggestion.
|
||||||
|
|
||||||
|
Add jpegtran -drop option; add options to the crop extension and wipe
|
||||||
|
to fill the extra area with content from the source image region,
|
||||||
|
instead of gray out.
|
||||||
|
|
||||||
|
|
||||||
|
Version 9c 14-Jan-2018
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
jpegtran: add an option to the -wipe switch to fill the region
|
||||||
|
with the average of adjacent blocks, instead of gray out.
|
||||||
|
Thank to Caitlyn Feddock and Maddie Ziegler for inspiration.
|
||||||
|
|
||||||
|
|
||||||
Version 9b 17-Jan-2016
|
Version 9b 17-Jan-2016
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
@@ -13,6 +32,13 @@ Document 'f' specifier for jpegtran -crop specification.
|
|||||||
Thank to Michele Martone for suggestion.
|
Thank to Michele Martone for suggestion.
|
||||||
|
|
||||||
|
|
||||||
|
Version 9a 19-Jan-2014
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Add jpegtran -wipe option and extension for -crop.
|
||||||
|
Thank to Andrew Senior, David Clunie, and Josef Schmid for suggestion.
|
||||||
|
|
||||||
|
|
||||||
Version 9 13-Jan-2013
|
Version 9 13-Jan-2013
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
@@ -138,11 +164,6 @@ Huffman tables being used.
|
|||||||
|
|
||||||
Huffman tables are checked for validity much more carefully than before.
|
Huffman tables are checked for validity much more carefully than before.
|
||||||
|
|
||||||
To avoid the Unisys LZW patent, djpeg's GIF output capability has been
|
|
||||||
changed to produce "uncompressed GIFs", and cjpeg's GIF input capability
|
|
||||||
has been removed altogether. We're not happy about it either, but there
|
|
||||||
seems to be no good alternative.
|
|
||||||
|
|
||||||
The configure script now supports building libjpeg as a shared library
|
The configure script now supports building libjpeg as a shared library
|
||||||
on many flavors of Unix (all the ones that GNU libtool knows how to
|
on many flavors of Unix (all the ones that GNU libtool knows how to
|
||||||
build shared libraries for). Use "./configure --enable-shared" to
|
build shared libraries for). Use "./configure --enable-shared" to
|
||||||
|
|||||||
BIN
ci/keys.enc
73
cjpeg.1
@@ -1,4 +1,4 @@
|
|||||||
.TH CJPEG 1 "18 March 2017"
|
.TH CJPEG 1 "30 November 2021"
|
||||||
.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
|
||||||
@@ -16,8 +16,7 @@ cjpeg \- compress an image file to a JPEG file
|
|||||||
compresses the named image file, or the standard input if no file is
|
compresses the named image file, or the standard input if no file is
|
||||||
named, and produces a JPEG/JFIF file on the standard output.
|
named, and produces a JPEG/JFIF file on the standard output.
|
||||||
The currently supported input file formats are: PPM (PBMPLUS color
|
The currently supported input file formats are: PPM (PBMPLUS color
|
||||||
format), PGM (PBMPLUS grayscale format), BMP, Targa, and RLE (Utah Raster
|
format), PGM (PBMPLUS grayscale format), BMP, GIF, and Targa.
|
||||||
Toolkit format). (RLE is supported only if the URT library is available.)
|
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
All switch names may be abbreviated; for example,
|
All switch names may be abbreviated; for example,
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
@@ -41,11 +40,7 @@ Scale quantization tables to adjust image quality. Quality is 0 (worst) to
|
|||||||
100 (best); default is 75. (See below for more info.)
|
100 (best); default is 75. (See below for more info.)
|
||||||
.TP
|
.TP
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
Create monochrome JPEG file from color input. Be sure to use this switch when
|
Create monochrome JPEG file from color input. By saying
|
||||||
compressing a grayscale BMP file, because
|
|
||||||
.B cjpeg
|
|
||||||
isn't bright enough to notice whether a BMP file uses only shades of gray.
|
|
||||||
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
|
||||||
@@ -161,31 +156,40 @@ arithmetic coded JPEG is not yet widely implemented, so many decoders will be
|
|||||||
unable to view an arithmetic coded JPEG file at all.
|
unable to view an arithmetic coded JPEG file at all.
|
||||||
.TP
|
.TP
|
||||||
.B \-dct int
|
.B \-dct int
|
||||||
Use integer DCT method (default).
|
Use accurate integer DCT method (default).
|
||||||
.TP
|
.TP
|
||||||
.B \-dct fast
|
.B \-dct fast
|
||||||
Use fast integer DCT (less accurate).
|
Use less accurate integer DCT method [legacy feature].
|
||||||
In libjpeg-turbo, the fast method is generally about 5-15% faster than the int
|
When the Independent JPEG Group's software was first released in 1991, the
|
||||||
method when using the x86/x86-64 SIMD extensions (results may vary with other
|
compression time for a 1-megapixel JPEG image on a mainstream PC was measured
|
||||||
SIMD implementations, or when using libjpeg-turbo without SIMD extensions.)
|
in minutes. Thus, the \fBfast\fR integer DCT algorithm provided noticeable
|
||||||
|
performance benefits. On modern CPUs running libjpeg-turbo, however, the
|
||||||
|
compression time for a 1-megapixel JPEG image is measured in milliseconds, and
|
||||||
|
thus the performance benefits of the \fBfast\fR algorithm are much less
|
||||||
|
noticeable. On modern x86/x86-64 CPUs that support AVX2 instructions, the
|
||||||
|
\fBfast\fR and \fBint\fR methods have similar performance. On other types of
|
||||||
|
CPUs, the \fBfast\fR method is generally about 5-15% faster than the \fBint\fR
|
||||||
|
method.
|
||||||
|
|
||||||
For quality levels of 90 and below, there should be little or no perceptible
|
For quality levels of 90 and below, there should be little or no perceptible
|
||||||
difference between the two algorithms. For quality levels above 90, however,
|
quality difference between the two algorithms. For quality levels above 90,
|
||||||
the difference between the fast and the int methods becomes more pronounced.
|
however, the difference between the \fBfast\fR and \fBint\fR methods becomes
|
||||||
With quality=97, for instance, the fast method incurs generally about a 1-3 dB
|
more pronounced. With quality=97, for instance, the \fBfast\fR method incurs
|
||||||
loss (in PSNR) relative to the int method, but this can be larger for some
|
generally about a 1-3 dB loss in PSNR relative to the \fBint\fR method, but
|
||||||
images. Do not use the fast method with quality levels above 97. The
|
this can be larger for some images. Do not use the \fBfast\fR method with
|
||||||
algorithm often degenerates at quality=98 and above and can actually produce a
|
quality levels above 97. The algorithm often degenerates at quality=98 and
|
||||||
more lossy image than if lower quality levels had been used. Also, in
|
above and can actually produce a more lossy image than if lower quality levels
|
||||||
libjpeg-turbo, the fast method is not fully accelerated for quality levels
|
had been used. Also, in libjpeg-turbo, the \fBfast\fR method is not fully
|
||||||
above 97, so it will be slower than the int method.
|
accelerated for quality levels above 97, so it will be slower than the
|
||||||
|
\fBint\fR method.
|
||||||
.TP
|
.TP
|
||||||
.B \-dct float
|
.B \-dct float
|
||||||
Use floating-point DCT method.
|
Use floating-point DCT method [legacy feature].
|
||||||
The float method is mainly a legacy feature. It does not produce significantly
|
The \fBfloat\fR method does not produce significantly more accurate results
|
||||||
more accurate results than the int method, and it is much slower. The float
|
than the \fBint\fR method, and it is much slower. The \fBfloat\fR method may
|
||||||
method may also give different results on different machines due to varying
|
also give different results on different machines due to varying roundoff
|
||||||
roundoff behavior, whereas the integer methods should give the same results on
|
behavior, whereas the integer methods should give the same results on all
|
||||||
all machines.
|
machines.
|
||||||
.TP
|
.TP
|
||||||
.BI \-icc " file"
|
.BI \-icc " file"
|
||||||
Embed ICC color management profile contained in the specified file.
|
Embed ICC color management profile contained in the specified file.
|
||||||
@@ -215,6 +219,14 @@ 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
|
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.
|
also useful for benchmarking, since it reduces the I/O overhead.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-report
|
||||||
|
Report compression progress.
|
||||||
|
.TP
|
||||||
|
.BI \-strict
|
||||||
|
Treat all warnings as fatal. Enabling this option will cause the compressor to
|
||||||
|
abort if an LZW-compressed GIF input image contains incomplete or corrupt image
|
||||||
|
data.
|
||||||
|
.TP
|
||||||
.B \-verbose
|
.B \-verbose
|
||||||
Enable debug printout. More
|
Enable debug printout. More
|
||||||
.BR \-v 's
|
.BR \-v 's
|
||||||
@@ -341,11 +353,6 @@ This file was modified by The libjpeg-turbo Project to include only information
|
|||||||
relevant to libjpeg-turbo, to wordsmith certain sections, and to describe
|
relevant to libjpeg-turbo, to wordsmith certain sections, and to describe
|
||||||
features not present in libjpeg.
|
features not present in libjpeg.
|
||||||
.SH ISSUES
|
.SH ISSUES
|
||||||
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
|
|
||||||
lacks GIF support, for these historical reasons. (Conversion of GIF files to
|
|
||||||
JPEG is usually a bad idea anyway, since GIF is a 256-color format.)
|
|
||||||
.PP
|
|
||||||
Not all variants of BMP and Targa file formats are supported.
|
Not all variants of BMP and Targa file formats are supported.
|
||||||
.PP
|
.PP
|
||||||
The
|
The
|
||||||
|
|||||||
149
cjpeg.c
@@ -5,7 +5,7 @@
|
|||||||
* Copyright (C) 1991-1998, Thomas G. Lane.
|
* Copyright (C) 1991-1998, Thomas G. Lane.
|
||||||
* Modified 2003-2011 by Guido Vollbeding.
|
* Modified 2003-2011 by Guido Vollbeding.
|
||||||
* libjpeg-turbo Modifications:
|
* libjpeg-turbo Modifications:
|
||||||
* Copyright (C) 2010, 2013-2014, 2017, D. R. Commander.
|
* Copyright (C) 2010, 2013-2014, 2017, 2019-2022, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
* file.
|
* file.
|
||||||
*
|
*
|
||||||
@@ -27,25 +27,17 @@
|
|||||||
* works regardless of which command line style is used.
|
* works regardless of which command line style is used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
#define JPEG_INTERNALS
|
||||||
|
#endif
|
||||||
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
||||||
#include "jversion.h" /* for version message */
|
#include "jversion.h" /* for version message */
|
||||||
#include "jconfigint.h"
|
#include "jconfigint.h"
|
||||||
|
|
||||||
#ifndef HAVE_STDLIB_H /* <stdlib.h> should declare malloc(),free() */
|
|
||||||
extern void *malloc(size_t size);
|
|
||||||
extern void free(void *ptr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_CCOMMAND /* command-line reader for Macintosh */
|
|
||||||
#ifdef __MWERKS__
|
|
||||||
#include <SIOUX.h> /* Metrowerks needs this */
|
|
||||||
#include <console.h> /* ... and this */
|
|
||||||
#endif
|
|
||||||
#ifdef THINK_C
|
|
||||||
#include <console.h> /* Think declares it here */
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Create the add-on message string table. */
|
/* Create the add-on message string table. */
|
||||||
|
|
||||||
@@ -69,9 +61,9 @@ static const char * const cdjpeg_message_table[] = {
|
|||||||
* 2) assume we can push back more than one character (works in
|
* 2) assume we can push back more than one character (works in
|
||||||
* some C implementations, but unportable);
|
* some C implementations, but unportable);
|
||||||
* 3) provide our own buffering (breaks input readers that want to use
|
* 3) provide our own buffering (breaks input readers that want to use
|
||||||
* stdio directly, such as the RLE library);
|
* stdio directly);
|
||||||
* or 4) don't put back the data, and modify the input_init methods to assume
|
* or 4) don't put back the data, and modify the input_init methods to assume
|
||||||
* they start reading after the start of file (also breaks RLE library).
|
* they start reading after the start of file.
|
||||||
* #1 is attractive for MS-DOS but is untenable on Unix.
|
* #1 is attractive for MS-DOS but is untenable on Unix.
|
||||||
*
|
*
|
||||||
* The most portable solution for file types that can't be identified by their
|
* The most portable solution for file types that can't be identified by their
|
||||||
@@ -117,10 +109,6 @@ select_file_type(j_compress_ptr cinfo, FILE *infile)
|
|||||||
case 'P':
|
case 'P':
|
||||||
return jinit_read_ppm(cinfo);
|
return jinit_read_ppm(cinfo);
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLE_SUPPORTED
|
|
||||||
case 'R':
|
|
||||||
return jinit_read_rle(cinfo);
|
|
||||||
#endif
|
|
||||||
#ifdef TARGA_SUPPORTED
|
#ifdef TARGA_SUPPORTED
|
||||||
case 0x00:
|
case 0x00:
|
||||||
return jinit_read_targa(cinfo);
|
return jinit_read_targa(cinfo);
|
||||||
@@ -147,6 +135,47 @@ static const char *progname; /* program name for error messages */
|
|||||||
static char *icc_filename; /* for -icc switch */
|
static char *icc_filename; /* for -icc switch */
|
||||||
static char *outfilename; /* for -outfile switch */
|
static char *outfilename; /* for -outfile switch */
|
||||||
boolean memdst; /* for -memdst switch */
|
boolean memdst; /* for -memdst switch */
|
||||||
|
boolean report; /* for -report switch */
|
||||||
|
boolean strict; /* for -strict switch */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
|
||||||
|
#include <setjmp.h>
|
||||||
|
|
||||||
|
struct my_error_mgr {
|
||||||
|
struct jpeg_error_mgr pub;
|
||||||
|
jmp_buf setjmp_buffer;
|
||||||
|
};
|
||||||
|
|
||||||
|
void my_error_exit(j_common_ptr cinfo)
|
||||||
|
{
|
||||||
|
struct my_error_mgr *myerr = (struct my_error_mgr *)cinfo->err;
|
||||||
|
|
||||||
|
longjmp(myerr->setjmp_buffer, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void my_emit_message_fuzzer(j_common_ptr cinfo, int msg_level)
|
||||||
|
{
|
||||||
|
if (msg_level < 0)
|
||||||
|
cinfo->err->num_warnings++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define HANDLE_ERROR() { \
|
||||||
|
if (cinfo.global_state > CSTATE_START) { \
|
||||||
|
if (memdst && outbuffer) \
|
||||||
|
(*cinfo.dest->term_destination) (&cinfo); \
|
||||||
|
jpeg_abort_compress(&cinfo); \
|
||||||
|
} \
|
||||||
|
jpeg_destroy_compress(&cinfo); \
|
||||||
|
if (input_file != stdin && input_file != NULL) \
|
||||||
|
fclose(input_file); \
|
||||||
|
if (memdst) \
|
||||||
|
free(outbuffer); \
|
||||||
|
return EXIT_FAILURE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
LOCAL(void)
|
LOCAL(void)
|
||||||
@@ -179,15 +208,15 @@ usage(void)
|
|||||||
fprintf(stderr, " -arithmetic Use arithmetic coding\n");
|
fprintf(stderr, " -arithmetic Use arithmetic coding\n");
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_ISLOW_SUPPORTED
|
#ifdef DCT_ISLOW_SUPPORTED
|
||||||
fprintf(stderr, " -dct int Use integer DCT method%s\n",
|
fprintf(stderr, " -dct int Use accurate integer DCT method%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_IFAST_SUPPORTED
|
#ifdef DCT_IFAST_SUPPORTED
|
||||||
fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n",
|
fprintf(stderr, " -dct fast Use less accurate integer DCT method [legacy feature]%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_FLOAT_SUPPORTED
|
#ifdef DCT_FLOAT_SUPPORTED
|
||||||
fprintf(stderr, " -dct float Use floating-point DCT method%s\n",
|
fprintf(stderr, " -dct float Use floating-point DCT method [legacy feature]%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, " -icc FILE Embed ICC profile contained in FILE\n");
|
fprintf(stderr, " -icc FILE Embed ICC profile contained in FILE\n");
|
||||||
@@ -200,6 +229,8 @@ usage(void)
|
|||||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
fprintf(stderr, " -memdst Compress to memory instead of file (useful for benchmarking)\n");
|
fprintf(stderr, " -memdst Compress to memory instead of file (useful for benchmarking)\n");
|
||||||
#endif
|
#endif
|
||||||
|
fprintf(stderr, " -report Report compression progress\n");
|
||||||
|
fprintf(stderr, " -strict Treat all warnings as fatal\n");
|
||||||
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
||||||
fprintf(stderr, " -version Print version information and exit\n");
|
fprintf(stderr, " -version Print version information and exit\n");
|
||||||
fprintf(stderr, "Switches for wizards:\n");
|
fprintf(stderr, "Switches for wizards:\n");
|
||||||
@@ -244,6 +275,8 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
icc_filename = NULL;
|
icc_filename = NULL;
|
||||||
outfilename = NULL;
|
outfilename = NULL;
|
||||||
memdst = FALSE;
|
memdst = FALSE;
|
||||||
|
report = FALSE;
|
||||||
|
strict = FALSE;
|
||||||
cinfo->err->trace_level = 0;
|
cinfo->err->trace_level = 0;
|
||||||
|
|
||||||
/* Scan command line options, adjust parameters */
|
/* Scan command line options, adjust parameters */
|
||||||
@@ -395,6 +428,9 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
qtablefile = argv[argn];
|
qtablefile = argv[argn];
|
||||||
/* We postpone actually reading the file in case -quality comes later. */
|
/* We postpone actually reading the file in case -quality comes later. */
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "report", 3)) {
|
||||||
|
report = TRUE;
|
||||||
|
|
||||||
} else if (keymatch(arg, "restart", 1)) {
|
} else if (keymatch(arg, "restart", 1)) {
|
||||||
/* Restart interval in MCU rows (or in MCUs with 'b'). */
|
/* Restart interval in MCU rows (or in MCUs with 'b'). */
|
||||||
long lval;
|
long lval;
|
||||||
@@ -449,6 +485,9 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
usage();
|
usage();
|
||||||
cinfo->smoothing_factor = val;
|
cinfo->smoothing_factor = val;
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "strict", 2)) {
|
||||||
|
strict = TRUE;
|
||||||
|
|
||||||
} else if (keymatch(arg, "targa", 1)) {
|
} else if (keymatch(arg, "targa", 1)) {
|
||||||
/* Input file is Targa format. */
|
/* Input file is Targa format. */
|
||||||
is_targa = TRUE;
|
is_targa = TRUE;
|
||||||
@@ -496,6 +535,19 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
METHODDEF(void)
|
||||||
|
my_emit_message(j_common_ptr cinfo, int msg_level)
|
||||||
|
{
|
||||||
|
if (msg_level < 0) {
|
||||||
|
/* Treat warning as fatal */
|
||||||
|
cinfo->err->error_exit(cinfo);
|
||||||
|
} else {
|
||||||
|
if (cinfo->err->trace_level >= msg_level)
|
||||||
|
cinfo->err->output_message(cinfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The main program.
|
* The main program.
|
||||||
*/
|
*/
|
||||||
@@ -504,13 +556,16 @@ int
|
|||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct jpeg_compress_struct cinfo;
|
struct jpeg_compress_struct cinfo;
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
struct my_error_mgr myerr;
|
||||||
|
struct jpeg_error_mgr &jerr = myerr.pub;
|
||||||
|
#else
|
||||||
struct jpeg_error_mgr jerr;
|
struct jpeg_error_mgr jerr;
|
||||||
#ifdef PROGRESS_REPORT
|
|
||||||
struct cdjpeg_progress_mgr progress;
|
|
||||||
#endif
|
#endif
|
||||||
|
struct cdjpeg_progress_mgr progress;
|
||||||
int file_index;
|
int file_index;
|
||||||
cjpeg_source_ptr src_mgr;
|
cjpeg_source_ptr src_mgr;
|
||||||
FILE *input_file;
|
FILE *input_file = NULL;
|
||||||
FILE *icc_file;
|
FILE *icc_file;
|
||||||
JOCTET *icc_profile = NULL;
|
JOCTET *icc_profile = NULL;
|
||||||
long icc_len = 0;
|
long icc_len = 0;
|
||||||
@@ -519,11 +574,6 @@ main(int argc, char **argv)
|
|||||||
unsigned long outsize = 0;
|
unsigned long outsize = 0;
|
||||||
JDIMENSION num_scanlines;
|
JDIMENSION num_scanlines;
|
||||||
|
|
||||||
/* On Mac, fetch a command line. */
|
|
||||||
#ifdef USE_CCOMMAND
|
|
||||||
argc = ccommand(&argv);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
progname = argv[0];
|
progname = argv[0];
|
||||||
if (progname == NULL || progname[0] == 0)
|
if (progname == NULL || progname[0] == 0)
|
||||||
progname = "cjpeg"; /* in case C library doesn't provide it */
|
progname = "cjpeg"; /* in case C library doesn't provide it */
|
||||||
@@ -553,6 +603,9 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
||||||
|
|
||||||
|
if (strict)
|
||||||
|
jerr.emit_message = my_emit_message;
|
||||||
|
|
||||||
#ifdef TWO_FILE_COMMANDLINE
|
#ifdef TWO_FILE_COMMANDLINE
|
||||||
if (!memdst) {
|
if (!memdst) {
|
||||||
/* Must have either -outfile switch or explicit output file name */
|
/* Must have either -outfile switch or explicit output file name */
|
||||||
@@ -628,13 +681,24 @@ main(int argc, char **argv)
|
|||||||
fclose(icc_file);
|
fclose(icc_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
#ifdef CJPEG_FUZZER
|
||||||
start_progress_monitor((j_common_ptr)&cinfo, &progress);
|
jerr.error_exit = my_error_exit;
|
||||||
|
jerr.emit_message = my_emit_message_fuzzer;
|
||||||
|
if (setjmp(myerr.setjmp_buffer))
|
||||||
|
HANDLE_ERROR()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (report) {
|
||||||
|
start_progress_monitor((j_common_ptr)&cinfo, &progress);
|
||||||
|
progress.report = report;
|
||||||
|
}
|
||||||
|
|
||||||
/* Figure out the input file format, and set up to read it. */
|
/* Figure out the input file format, and set up to read it. */
|
||||||
src_mgr = select_file_type(&cinfo, input_file);
|
src_mgr = select_file_type(&cinfo, input_file);
|
||||||
src_mgr->input_file = input_file;
|
src_mgr->input_file = input_file;
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
src_mgr->max_pixels = 1048576;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Read the input file header to obtain file size & colorspace. */
|
/* Read the input file header to obtain file size & colorspace. */
|
||||||
(*src_mgr->start_input) (&cinfo, src_mgr);
|
(*src_mgr->start_input) (&cinfo, src_mgr);
|
||||||
@@ -653,6 +717,11 @@ main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
jpeg_stdio_dest(&cinfo, output_file);
|
jpeg_stdio_dest(&cinfo, output_file);
|
||||||
|
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
if (setjmp(myerr.setjmp_buffer))
|
||||||
|
HANDLE_ERROR()
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Start compressor */
|
/* Start compressor */
|
||||||
jpeg_start_compress(&cinfo, TRUE);
|
jpeg_start_compress(&cinfo, TRUE);
|
||||||
|
|
||||||
@@ -676,18 +745,18 @@ main(int argc, char **argv)
|
|||||||
if (output_file != stdout && output_file != NULL)
|
if (output_file != stdout && output_file != NULL)
|
||||||
fclose(output_file);
|
fclose(output_file);
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
if (report)
|
||||||
end_progress_monitor((j_common_ptr)&cinfo);
|
end_progress_monitor((j_common_ptr)&cinfo);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (memdst) {
|
if (memdst) {
|
||||||
|
#ifndef CJPEG_FUZZER
|
||||||
fprintf(stderr, "Compressed size: %lu bytes\n", outsize);
|
fprintf(stderr, "Compressed size: %lu bytes\n", outsize);
|
||||||
|
#endif
|
||||||
free(outbuffer);
|
free(outbuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(icc_profile);
|
free(icc_profile);
|
||||||
|
|
||||||
/* All done. */
|
/* All done. */
|
||||||
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
return (jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
||||||
return 0; /* suppress no-return-value warnings */
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,6 @@
|
|||||||
# This file is included from the top-level CMakeLists.txt. We just store it
|
# This file is included from the top-level CMakeLists.txt. We just store it
|
||||||
# here to avoid cluttering up that file.
|
# here to avoid cluttering up that file.
|
||||||
|
|
||||||
set(PKGNAME ${CMAKE_PROJECT_NAME} CACHE STRING
|
|
||||||
"Distribution package name (default: ${CMAKE_PROJECT_NAME})")
|
|
||||||
set(PKGVENDOR "The ${CMAKE_PROJECT_NAME} Project" CACHE STRING
|
|
||||||
"Vendor name to be included in distribution package descriptions (default: The ${CMAKE_PROJECT_NAME} Project)")
|
|
||||||
set(PKGURL "http://www.${CMAKE_PROJECT_NAME}.org" CACHE STRING
|
|
||||||
"URL of project web site to be included in distribution package descriptions (default: http://www.${CMAKE_PROJECT_NAME}.org)")
|
|
||||||
set(PKGEMAIL "information@${CMAKE_PROJECT_NAME}.org" CACHE STRING
|
|
||||||
"E-mail of project maintainer to be included in distribution package descriptions (default: information@${CMAKE_PROJECT_NAME}.org")
|
|
||||||
set(PKGID "com.${CMAKE_PROJECT_NAME}.${PKGNAME}" CACHE STRING
|
|
||||||
"Globally unique package identifier (reverse DNS notation) (default: com.${CMAKE_PROJECT_NAME}.${PKGNAME})")
|
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Linux RPM and DEB
|
# Linux RPM and DEB
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@@ -22,12 +10,21 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|||||||
set(RPMARCH ${CMAKE_SYSTEM_PROCESSOR})
|
set(RPMARCH ${CMAKE_SYSTEM_PROCESSOR})
|
||||||
if(CPU_TYPE STREQUAL "x86_64")
|
if(CPU_TYPE STREQUAL "x86_64")
|
||||||
set(DEBARCH amd64)
|
set(DEBARCH amd64)
|
||||||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "armv7*")
|
|
||||||
set(DEBARCH armhf)
|
|
||||||
elseif(CPU_TYPE STREQUAL "arm64")
|
elseif(CPU_TYPE STREQUAL "arm64")
|
||||||
set(DEBARCH ${CPU_TYPE})
|
set(DEBARCH ${CPU_TYPE})
|
||||||
elseif(CPU_TYPE STREQUAL "arm")
|
elseif(CPU_TYPE STREQUAL "arm")
|
||||||
set(DEBARCH armel)
|
check_c_source_compiles("
|
||||||
|
#if __ARM_PCS_VFP != 1
|
||||||
|
#error \"float ABI != hard\"
|
||||||
|
#endif
|
||||||
|
int main(void) { return 0; }" HAVE_HARD_FLOAT)
|
||||||
|
if(HAVE_HARD_FLOAT)
|
||||||
|
set(RPMARCH armv7hl)
|
||||||
|
set(DEBARCH armhf)
|
||||||
|
else()
|
||||||
|
set(RPMARCH armel)
|
||||||
|
set(DEBARCH armel)
|
||||||
|
endif()
|
||||||
elseif(CMAKE_SYSTEM_PROCESSOR_LC STREQUAL "ppc64le")
|
elseif(CMAKE_SYSTEM_PROCESSOR_LC STREQUAL "ppc64le")
|
||||||
set(DEBARCH ppc64el)
|
set(DEBARCH ppc64el)
|
||||||
elseif(CPU_TYPE STREQUAL "powerpc" AND BITS EQUAL 32)
|
elseif(CPU_TYPE STREQUAL "powerpc" AND BITS EQUAL 32)
|
||||||
@@ -45,19 +42,19 @@ boolean_number(CMAKE_POSITION_INDEPENDENT_CODE)
|
|||||||
configure_file(release/makerpm.in pkgscripts/makerpm)
|
configure_file(release/makerpm.in pkgscripts/makerpm)
|
||||||
configure_file(release/rpm.spec.in pkgscripts/rpm.spec @ONLY)
|
configure_file(release/rpm.spec.in pkgscripts/rpm.spec @ONLY)
|
||||||
|
|
||||||
add_custom_target(rpm sh pkgscripts/makerpm
|
add_custom_target(rpm pkgscripts/makerpm
|
||||||
SOURCES pkgscripts/makerpm)
|
SOURCES pkgscripts/makerpm)
|
||||||
|
|
||||||
configure_file(release/makesrpm.in pkgscripts/makesrpm)
|
configure_file(release/makesrpm.in pkgscripts/makesrpm)
|
||||||
|
|
||||||
add_custom_target(srpm sh pkgscripts/makesrpm
|
add_custom_target(srpm pkgscripts/makesrpm
|
||||||
SOURCES pkgscripts/makesrpm
|
SOURCES pkgscripts/makesrpm
|
||||||
DEPENDS dist)
|
DEPENDS dist)
|
||||||
|
|
||||||
configure_file(release/makedpkg.in pkgscripts/makedpkg)
|
configure_file(release/makedpkg.in pkgscripts/makedpkg)
|
||||||
configure_file(release/deb-control.in pkgscripts/deb-control)
|
configure_file(release/deb-control.in pkgscripts/deb-control)
|
||||||
|
|
||||||
add_custom_target(deb sh pkgscripts/makedpkg
|
add_custom_target(deb pkgscripts/makedpkg
|
||||||
SOURCES pkgscripts/makedpkg)
|
SOURCES pkgscripts/makedpkg)
|
||||||
|
|
||||||
endif() # Linux
|
endif() # Linux
|
||||||
@@ -71,12 +68,14 @@ if(WIN32)
|
|||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
set(INST_PLATFORM "Visual C++")
|
set(INST_PLATFORM "Visual C++")
|
||||||
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-vc)
|
set(INST_ID vc)
|
||||||
|
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-${INST_ID})
|
||||||
set(INST_REG_NAME ${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_ID gcc)
|
||||||
set(INST_REG_NAME ${CMAKE_PROJECT_NAME}-gcc)
|
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-${INST_ID})
|
||||||
|
set(INST_REG_NAME ${CMAKE_PROJECT_NAME}-${INST_ID})
|
||||||
set(INST_DEFS -DGCC)
|
set(INST_DEFS -DGCC)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -100,64 +99,48 @@ endif()
|
|||||||
string(REGEX REPLACE "/" "\\\\" INST_DIR ${CMAKE_INSTALL_PREFIX})
|
string(REGEX REPLACE "/" "\\\\" INST_DIR ${CMAKE_INSTALL_PREFIX})
|
||||||
|
|
||||||
configure_file(release/installer.nsi.in installer.nsi @ONLY)
|
configure_file(release/installer.nsi.in installer.nsi @ONLY)
|
||||||
|
# TODO: It would be nice to eventually switch to CPack and eliminate this mess,
|
||||||
|
# but not today.
|
||||||
|
configure_file(win/projectTargets.cmake.in
|
||||||
|
win/${CMAKE_PROJECT_NAME}Targets.cmake @ONLY)
|
||||||
|
configure_file(win/${INST_ID}/projectTargets-release.cmake.in
|
||||||
|
win/${CMAKE_PROJECT_NAME}Targets-release.cmake @ONLY)
|
||||||
|
|
||||||
if(WITH_JAVA)
|
if(WITH_JAVA)
|
||||||
set(JAVA_DEPEND turbojpeg-java)
|
set(JAVA_DEPEND turbojpeg-java)
|
||||||
endif()
|
endif()
|
||||||
|
if(WITH_TURBOJPEG)
|
||||||
|
set(TURBOJPEG_DEPEND turbojpeg turbojpeg-static tjbench)
|
||||||
|
endif()
|
||||||
add_custom_target(installer
|
add_custom_target(installer
|
||||||
makensis -nocd ${INST_DEFS} installer.nsi
|
makensis -nocd ${INST_DEFS} installer.nsi
|
||||||
DEPENDS jpeg jpeg-static turbojpeg turbojpeg-static rdjpgcom wrjpgcom
|
DEPENDS jpeg jpeg-static rdjpgcom wrjpgcom cjpeg djpeg jpegtran
|
||||||
cjpeg djpeg jpegtran tjbench ${JAVA_DEPEND}
|
${JAVA_DEPEND} ${TURBOJPEG_DEPEND}
|
||||||
SOURCES installer.nsi)
|
SOURCES installer.nsi)
|
||||||
|
|
||||||
endif() # WIN32
|
endif() # WIN32
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# Cygwin Package
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
if(CYGWIN)
|
|
||||||
|
|
||||||
configure_file(release/makecygwinpkg.in pkgscripts/makecygwinpkg)
|
|
||||||
|
|
||||||
add_custom_target(cygwinpkg sh pkgscripts/makecygwinpkg)
|
|
||||||
|
|
||||||
endif() # CYGWIN
|
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Mac DMG
|
# Mac DMG
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
|
|
||||||
set(DEFAULT_OSX_32BIT_BUILD ${CMAKE_SOURCE_DIR}/osxx86)
|
set(ARMV8_BUILD "" CACHE PATH
|
||||||
set(OSX_32BIT_BUILD ${DEFAULT_OSX_32BIT_BUILD} CACHE PATH
|
"Directory containing Armv8 iOS or macOS build to include in universal binaries")
|
||||||
"Directory containing 32-bit (i386) Mac build to include in universal binaries (default: ${DEFAULT_OSX_32BIT_BUILD})")
|
|
||||||
set(DEFAULT_IOS_ARMV7_BUILD ${CMAKE_SOURCE_DIR}/iosarmv7)
|
|
||||||
set(IOS_ARMV7_BUILD ${DEFAULT_IOS_ARMV7_BUILD} CACHE PATH
|
|
||||||
"Directory containing ARMv7 iOS build to include in universal binaries (default: ${DEFAULT_IOS_ARMV7_BUILD})")
|
|
||||||
set(DEFAULT_IOS_ARMV7S_BUILD ${CMAKE_SOURCE_DIR}/iosarmv7s)
|
|
||||||
set(IOS_ARMV7S_BUILD ${DEFAULT_IOS_ARMV7S_BUILD} CACHE PATH
|
|
||||||
"Directory containing ARMv7s iOS build to include in universal binaries (default: ${DEFAULT_IOS_ARMV7S_BUILD})")
|
|
||||||
set(DEFAULT_IOS_ARMV8_BUILD ${CMAKE_SOURCE_DIR}/iosarmv8)
|
|
||||||
set(IOS_ARMV8_BUILD ${DEFAULT_IOS_ARMV8_BUILD} CACHE PATH
|
|
||||||
"Directory containing ARMv8 iOS build to include in universal binaries (default: ${DEFAULT_IOS_ARMV8_BUILD})")
|
|
||||||
|
|
||||||
set(OSX_APP_CERT_NAME "" CACHE STRING
|
set(MACOS_APP_CERT_NAME "" CACHE STRING
|
||||||
"Name of the Developer ID Application certificate (in the macOS keychain) that should be used to sign the libjpeg-turbo DMG. Leave this blank to generate an unsigned DMG.")
|
"Name of the Developer ID Application certificate (in the macOS keychain) that should be used to sign the libjpeg-turbo DMG. Leave this blank to generate an unsigned DMG.")
|
||||||
set(OSX_INST_CERT_NAME "" CACHE STRING
|
set(MACOS_INST_CERT_NAME "" CACHE STRING
|
||||||
"Name of the Developer ID Installer certificate (in the macOS keychain) that should be used to sign the libjpeg-turbo installer package. Leave this blank to generate an unsigned package.")
|
"Name of the Developer ID Installer certificate (in the macOS keychain) that should be used to sign the libjpeg-turbo installer package. Leave this blank to generate an unsigned package.")
|
||||||
|
|
||||||
configure_file(release/makemacpkg.in pkgscripts/makemacpkg)
|
configure_file(release/makemacpkg.in pkgscripts/makemacpkg)
|
||||||
configure_file(release/Distribution.xml.in pkgscripts/Distribution.xml)
|
configure_file(release/Distribution.xml.in pkgscripts/Distribution.xml)
|
||||||
|
configure_file(release/Welcome.rtf.in pkgscripts/Welcome.rtf)
|
||||||
configure_file(release/uninstall.in pkgscripts/uninstall)
|
configure_file(release/uninstall.in pkgscripts/uninstall)
|
||||||
|
|
||||||
add_custom_target(dmg sh pkgscripts/makemacpkg
|
add_custom_target(dmg pkgscripts/makemacpkg
|
||||||
SOURCES pkgscripts/makemacpkg)
|
|
||||||
|
|
||||||
add_custom_target(udmg sh pkgscripts/makemacpkg universal
|
|
||||||
SOURCES pkgscripts/makemacpkg)
|
SOURCES pkgscripts/makemacpkg)
|
||||||
|
|
||||||
endif() # APPLE
|
endif() # APPLE
|
||||||
@@ -174,9 +157,20 @@ add_custom_target(dist
|
|||||||
|
|
||||||
configure_file(release/maketarball.in pkgscripts/maketarball)
|
configure_file(release/maketarball.in pkgscripts/maketarball)
|
||||||
|
|
||||||
add_custom_target(tarball sh pkgscripts/maketarball
|
add_custom_target(tarball pkgscripts/maketarball
|
||||||
SOURCES pkgscripts/maketarball)
|
SOURCES pkgscripts/maketarball)
|
||||||
|
|
||||||
configure_file(release/libjpeg.pc.in pkgscripts/libjpeg.pc @ONLY)
|
configure_file(release/libjpeg.pc.in pkgscripts/libjpeg.pc @ONLY)
|
||||||
|
|
||||||
configure_file(release/libturbojpeg.pc.in pkgscripts/libturbojpeg.pc @ONLY)
|
if(WITH_TURBOJPEG)
|
||||||
|
configure_file(release/libturbojpeg.pc.in pkgscripts/libturbojpeg.pc @ONLY)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(CMakePackageConfigHelpers)
|
||||||
|
write_basic_package_version_file(
|
||||||
|
pkgscripts/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
|
||||||
|
VERSION ${VERSION} COMPATIBILITY AnyNewerVersion)
|
||||||
|
|
||||||
|
configure_package_config_file(release/Config.cmake.in
|
||||||
|
pkgscripts/${CMAKE_PROJECT_NAME}Config.cmake
|
||||||
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME})
|
||||||
|
|||||||
@@ -118,6 +118,7 @@
|
|||||||
# absolute paths where necessary, using the same logic.
|
# absolute paths where necessary, using the same logic.
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
|
# Copyright 2018 Matthias Räncker
|
||||||
# Copyright 2016, 2019 D. R. Commander
|
# Copyright 2016, 2019 D. R. Commander
|
||||||
# Copyright 2016 Dmitry Marakasov
|
# Copyright 2016 Dmitry Marakasov
|
||||||
# Copyright 2016 Roger Leigh
|
# Copyright 2016 Roger Leigh
|
||||||
@@ -259,6 +260,8 @@ if(NOT DEFINED CMAKE_INSTALL_DEFAULT_LIBDIR)
|
|||||||
else()
|
else()
|
||||||
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
||||||
set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib64")
|
set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib64")
|
||||||
|
elseif(CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
|
||||||
|
set(CMAKE_INSTALL_DEFAULT_LIBDIR "libx32")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
13
cmakescripts/PackageInfo.cmake
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# This file is included from the top-level CMakeLists.txt. We just store it
|
||||||
|
# here to avoid cluttering up that file.
|
||||||
|
|
||||||
|
set(PKGNAME ${CMAKE_PROJECT_NAME} CACHE STRING
|
||||||
|
"Distribution package name (default: ${CMAKE_PROJECT_NAME})")
|
||||||
|
set(PKGVENDOR "The ${CMAKE_PROJECT_NAME} Project" CACHE STRING
|
||||||
|
"Vendor name to be included in distribution package descriptions (default: The ${CMAKE_PROJECT_NAME} Project)")
|
||||||
|
set(PKGURL "http://www.${CMAKE_PROJECT_NAME}.org" CACHE STRING
|
||||||
|
"URL of project web site to be included in distribution package descriptions (default: http://www.${CMAKE_PROJECT_NAME}.org)")
|
||||||
|
set(PKGEMAIL "information@${CMAKE_PROJECT_NAME}.org" CACHE STRING
|
||||||
|
"E-mail of project maintainer to be included in distribution package descriptions (default: information@${CMAKE_PROJECT_NAME}.org")
|
||||||
|
set(PKGID "com.${CMAKE_PROJECT_NAME}.${PKGNAME}" CACHE STRING
|
||||||
|
"Globally unique package identifier (reverse DNS notation) (default: com.${CMAKE_PROJECT_NAME}.${PKGNAME})")
|
||||||
95
croptest.in
Executable file
@@ -0,0 +1,95 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -u
|
||||||
|
set -e
|
||||||
|
trap onexit INT
|
||||||
|
trap onexit TERM
|
||||||
|
trap onexit EXIT
|
||||||
|
|
||||||
|
onexit()
|
||||||
|
{
|
||||||
|
if [ -d $OUTDIR ]; then
|
||||||
|
rm -rf $OUTDIR
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
runme()
|
||||||
|
{
|
||||||
|
echo \*\*\* $*
|
||||||
|
$*
|
||||||
|
}
|
||||||
|
|
||||||
|
IMAGE=vgl_6548_0026a.bmp
|
||||||
|
WIDTH=128
|
||||||
|
HEIGHT=95
|
||||||
|
IMGDIR=@CMAKE_CURRENT_SOURCE_DIR@/testimages
|
||||||
|
OUTDIR=`mktemp -d /tmp/__croptest_output.XXXXXX`
|
||||||
|
EXEDIR=@CMAKE_CURRENT_BINARY_DIR@
|
||||||
|
|
||||||
|
if [ -d $OUTDIR ]; then
|
||||||
|
rm -rf $OUTDIR
|
||||||
|
fi
|
||||||
|
mkdir -p $OUTDIR
|
||||||
|
|
||||||
|
exec >$EXEDIR/croptest.log
|
||||||
|
|
||||||
|
echo "============================================================"
|
||||||
|
echo "$IMAGE ($WIDTH x $HEIGHT)"
|
||||||
|
echo "============================================================"
|
||||||
|
echo
|
||||||
|
|
||||||
|
for PROGARG in "" -progressive; do
|
||||||
|
|
||||||
|
cp $IMGDIR/$IMAGE $OUTDIR
|
||||||
|
basename=`basename $IMAGE .bmp`
|
||||||
|
echo "------------------------------------------------------------"
|
||||||
|
echo "Generating test images"
|
||||||
|
echo "------------------------------------------------------------"
|
||||||
|
echo
|
||||||
|
runme $EXEDIR/cjpeg $PROGARG -grayscale -outfile $OUTDIR/${basename}_GRAY.jpg $IMGDIR/${basename}.bmp
|
||||||
|
runme $EXEDIR/cjpeg $PROGARG -sample 2x2 -outfile $OUTDIR/${basename}_420.jpg $IMGDIR/${basename}.bmp
|
||||||
|
runme $EXEDIR/cjpeg $PROGARG -sample 2x1 -outfile $OUTDIR/${basename}_422.jpg $IMGDIR/${basename}.bmp
|
||||||
|
runme $EXEDIR/cjpeg $PROGARG -sample 1x2 -outfile $OUTDIR/${basename}_440.jpg $IMGDIR/${basename}.bmp
|
||||||
|
runme $EXEDIR/cjpeg $PROGARG -sample 1x1 -outfile $OUTDIR/${basename}_444.jpg $IMGDIR/${basename}.bmp
|
||||||
|
echo
|
||||||
|
|
||||||
|
for NSARG in "" -nosmooth; do
|
||||||
|
|
||||||
|
for COLORSARG in "" "-colors 256 -dither none -onepass"; do
|
||||||
|
|
||||||
|
for Y in {0..16}; do
|
||||||
|
|
||||||
|
for H in {1..16}; do
|
||||||
|
|
||||||
|
X=$(( (Y*16)%128 ))
|
||||||
|
W=$(( WIDTH-X-7 ))
|
||||||
|
if [ $Y -le 15 ]; then
|
||||||
|
CROPSPEC="${W}x${H}+${X}+${Y}"
|
||||||
|
else
|
||||||
|
Y2=$(( HEIGHT-H ));
|
||||||
|
CROPSPEC="${W}x${H}+${X}+${Y2}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "------------------------------------------------------------"
|
||||||
|
echo $PROGARG $NSARG $COLORSARG -crop $CROPSPEC
|
||||||
|
echo "------------------------------------------------------------"
|
||||||
|
echo
|
||||||
|
for samp in GRAY 420 422 440 444; do
|
||||||
|
$EXEDIR/djpeg $NSARG $COLORSARG -rgb -outfile $OUTDIR/${basename}_${samp}_full.ppm $OUTDIR/${basename}_${samp}.jpg
|
||||||
|
convert -crop $CROPSPEC $OUTDIR/${basename}_${samp}_full.ppm $OUTDIR/${basename}_${samp}_ref.ppm
|
||||||
|
runme $EXEDIR/djpeg $NSARG $COLORSARG -crop $CROPSPEC -rgb -outfile $OUTDIR/${basename}_${samp}.ppm $OUTDIR/${basename}_${samp}.jpg
|
||||||
|
runme cmp $OUTDIR/${basename}_${samp}.ppm $OUTDIR/${basename}_${samp}_ref.ppm
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
echo SUCCESS!
|
||||||
110
djpeg.1
@@ -1,4 +1,4 @@
|
|||||||
.TH DJPEG 1 "13 November 2017"
|
.TH DJPEG 1 "4 November 2020"
|
||||||
.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
|
||||||
@@ -15,8 +15,7 @@ djpeg \- decompress a JPEG file to an image file
|
|||||||
.B djpeg
|
.B djpeg
|
||||||
decompresses the named JPEG file, or the standard input if no file is named,
|
decompresses the named JPEG file, or the standard input if no file is named,
|
||||||
and produces an image file on the standard output. PBMPLUS (PPM/PGM), BMP,
|
and produces an image file on the standard output. PBMPLUS (PPM/PGM), BMP,
|
||||||
GIF, Targa, or RLE (Utah Raster Toolkit) output format can be selected.
|
GIF, or Targa output format can be selected.
|
||||||
(RLE is supported only if the URT library is available.)
|
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
All switch names may be abbreviated; for example,
|
All switch names may be abbreviated; for example,
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
@@ -81,9 +80,20 @@ is specified, or if the JPEG file is grayscale; otherwise, 24-bit full-color
|
|||||||
format is emitted.
|
format is emitted.
|
||||||
.TP
|
.TP
|
||||||
.B \-gif
|
.B \-gif
|
||||||
Select GIF output format. Since GIF does not support more than 256 colors,
|
Select GIF output format (LZW-compressed). Since GIF does not support more
|
||||||
|
than 256 colors,
|
||||||
.B \-colors 256
|
.B \-colors 256
|
||||||
is assumed (unless you specify a smaller number of colors).
|
is assumed (unless you specify a smaller number of colors). If you specify
|
||||||
|
.BR \-fast,
|
||||||
|
the default number of colors is 216.
|
||||||
|
.TP
|
||||||
|
.B \-gif0
|
||||||
|
Select GIF output format (uncompressed). Since GIF does not support more than
|
||||||
|
256 colors,
|
||||||
|
.B \-colors 256
|
||||||
|
is assumed (unless you specify a smaller number of colors). If you specify
|
||||||
|
.BR \-fast,
|
||||||
|
the default number of colors is 216.
|
||||||
.TP
|
.TP
|
||||||
.B \-os2
|
.B \-os2
|
||||||
Select BMP output format (OS/2 1.x flavor). 8-bit colormapped format is
|
Select BMP output format (OS/2 1.x flavor). 8-bit colormapped format is
|
||||||
@@ -100,9 +110,6 @@ PGM is emitted if the JPEG file is grayscale or if
|
|||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
is specified; otherwise PPM is emitted.
|
is specified; otherwise PPM is emitted.
|
||||||
.TP
|
.TP
|
||||||
.B \-rle
|
|
||||||
Select RLE output format. (Requires URT library.)
|
|
||||||
.TP
|
|
||||||
.B \-targa
|
.B \-targa
|
||||||
Select Targa output format. Grayscale format is emitted if the JPEG file is
|
Select Targa output format. Grayscale format is emitted if the JPEG file is
|
||||||
grayscale or if
|
grayscale or if
|
||||||
@@ -114,32 +121,40 @@ is specified; otherwise, 24-bit full-color format is emitted.
|
|||||||
Switches for advanced users:
|
Switches for advanced users:
|
||||||
.TP
|
.TP
|
||||||
.B \-dct int
|
.B \-dct int
|
||||||
Use integer DCT method (default).
|
Use accurate integer DCT method (default).
|
||||||
.TP
|
.TP
|
||||||
.B \-dct fast
|
.B \-dct fast
|
||||||
Use fast integer DCT (less accurate).
|
Use less accurate integer DCT method [legacy feature].
|
||||||
In libjpeg-turbo, the fast method is generally about 5-15% faster than the int
|
When the Independent JPEG Group's software was first released in 1991, the
|
||||||
method when using the x86/x86-64 SIMD extensions (results may vary with other
|
decompression time for a 1-megapixel JPEG image on a mainstream PC was measured
|
||||||
SIMD implementations, or when using libjpeg-turbo without SIMD extensions.) If
|
in minutes. Thus, the \fBfast\fR integer DCT algorithm provided noticeable
|
||||||
the JPEG image was compressed using a quality level of 85 or below, then there
|
performance benefits. On modern CPUs running libjpeg-turbo, however, the
|
||||||
should be little or no perceptible difference between the two algorithms. When
|
decompression time for a 1-megapixel JPEG image is measured in milliseconds,
|
||||||
decompressing images that were compressed using quality levels above 85,
|
and thus the performance benefits of the \fBfast\fR algorithm are much less
|
||||||
however, the difference between the fast and int methods becomes more
|
noticeable. On modern x86/x86-64 CPUs that support AVX2 instructions, the
|
||||||
pronounced. With images compressed using quality=97, for instance, the fast
|
\fBfast\fR and \fBint\fR methods have similar performance. On other types of
|
||||||
method incurs generally about a 4-6 dB loss (in PSNR) relative to the int
|
CPUs, the \fBfast\fR method is generally about 5-15% faster than the \fBint\fR
|
||||||
method, but this can be larger for some images. If you can avoid it, do not
|
method.
|
||||||
use the fast method when decompressing images that were compressed using
|
|
||||||
quality levels above 97. The algorithm often degenerates for such images and
|
If the JPEG image was compressed using a quality level of 85 or below, then
|
||||||
can actually produce a more lossy output image than if the JPEG image had been
|
there should be little or no perceptible quality difference between the two
|
||||||
compressed using lower quality levels.
|
algorithms. When decompressing images that were compressed using quality
|
||||||
|
levels above 85, however, the difference between the \fBfast\fR and \fBint\fR
|
||||||
|
methods becomes more pronounced. With images compressed using quality=97, for
|
||||||
|
instance, the \fBfast\fR method incurs generally about a 4-6 dB loss in PSNR
|
||||||
|
relative to the \fBint\fR method, but this can be larger for some images. If
|
||||||
|
you can avoid it, do not use the \fBfast\fR method when decompressing images
|
||||||
|
that were compressed using quality levels above 97. The algorithm often
|
||||||
|
degenerates for such images and can actually produce a more lossy output image
|
||||||
|
than if the JPEG image had been compressed using lower quality levels.
|
||||||
.TP
|
.TP
|
||||||
.B \-dct float
|
.B \-dct float
|
||||||
Use floating-point DCT method.
|
Use floating-point DCT method [legacy feature].
|
||||||
The float method is mainly a legacy feature. It does not produce significantly
|
The \fBfloat\fR method does not produce significantly more accurate results
|
||||||
more accurate results than the int method, and it is much slower. The float
|
than the \fBint\fR method, and it is much slower. The \fBfloat\fR method may
|
||||||
method may also give different results on different machines due to varying
|
also give different results on different machines due to varying roundoff
|
||||||
roundoff behavior, whereas the integer methods should give the same results on
|
behavior, whereas the integer methods should give the same results on all
|
||||||
all machines.
|
machines.
|
||||||
.TP
|
.TP
|
||||||
.B \-dither fs
|
.B \-dither fs
|
||||||
Use Floyd-Steinberg dithering in color quantization.
|
Use Floyd-Steinberg dithering in color quantization.
|
||||||
@@ -190,6 +205,19 @@ number. For example,
|
|||||||
.B \-max 4m
|
.B \-max 4m
|
||||||
selects 4000000 bytes. If more space is needed, an error will occur.
|
selects 4000000 bytes. If more space is needed, an error will occur.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-maxscans " N"
|
||||||
|
Abort if the JPEG image contains more than
|
||||||
|
.I N
|
||||||
|
scans. This feature demonstrates a method by which applications can guard
|
||||||
|
against denial-of-service attacks instigated by specially-crafted malformed
|
||||||
|
JPEG images containing numerous scans with missing image data or image data
|
||||||
|
consisting only of "EOB runs" (a feature of progressive JPEG images that allows
|
||||||
|
potentially hundreds of thousands of adjoining zero-value pixels to be
|
||||||
|
represented using only a few bytes.) Attempting to decompress such malformed
|
||||||
|
JPEG images can cause excessive CPU activity, since the decompressor must fully
|
||||||
|
process each scan (even if the scan is corrupt) before it can proceed to the
|
||||||
|
next scan.
|
||||||
|
.TP
|
||||||
.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
|
||||||
@@ -197,6 +225,9 @@ Send output image to the named file, not to standard output.
|
|||||||
Load input file into memory before decompressing. This feature was implemented
|
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().)
|
mainly as a way of testing the in-memory source manager (jpeg_mem_src().)
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-report
|
||||||
|
Report decompression progress.
|
||||||
|
.TP
|
||||||
.BI \-skip " Y0,Y1"
|
.BI \-skip " Y0,Y1"
|
||||||
Decompress all rows of the JPEG image except those between Y0 and Y1
|
Decompress all rows of the JPEG image except those between Y0 and Y1
|
||||||
(inclusive.) Note that if decompression scaling is being used, then Y0 and Y1
|
(inclusive.) Note that if decompression scaling is being used, then Y0 and Y1
|
||||||
@@ -210,6 +241,12 @@ decompression scaling is being used, then X, Y, W, and H are relative to the
|
|||||||
scaled image dimensions. Currently this option only works with the
|
scaled image dimensions. Currently this option only works with the
|
||||||
PBMPLUS (PPM/PGM), GIF, and Targa output formats.
|
PBMPLUS (PPM/PGM), GIF, and Targa output formats.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-strict
|
||||||
|
Treat all warnings as fatal. This feature also demonstrates a method by which
|
||||||
|
applications can guard against attacks instigated by specially-crafted
|
||||||
|
malformed JPEG images. Enabling this option will cause the decompressor to
|
||||||
|
abort if the JPEG image contains incomplete or corrupt image data.
|
||||||
|
.TP
|
||||||
.B \-verbose
|
.B \-verbose
|
||||||
Enable debug printout. More
|
Enable debug printout. More
|
||||||
.BR \-v 's
|
.BR \-v 's
|
||||||
@@ -253,12 +290,6 @@ is fast but much lower quality than the default behavior.
|
|||||||
.B \-dither none
|
.B \-dither none
|
||||||
may give acceptable results in two-pass mode, but is seldom tolerable in
|
may give acceptable results in two-pass mode, but is seldom tolerable in
|
||||||
one-pass mode.
|
one-pass mode.
|
||||||
.PP
|
|
||||||
If you are fortunate enough to have very fast floating point hardware,
|
|
||||||
\fB\-dct float\fR may be even faster than \fB\-dct fast\fR. But on most
|
|
||||||
machines \fB\-dct float\fR is slower than \fB\-dct int\fR; in this case it is
|
|
||||||
not worth using, because its theoretical accuracy advantage is too small to be
|
|
||||||
significant in practice.
|
|
||||||
.SH ENVIRONMENT
|
.SH ENVIRONMENT
|
||||||
.TP
|
.TP
|
||||||
.B JPEGMEM
|
.B JPEGMEM
|
||||||
@@ -287,10 +318,3 @@ Independent JPEG Group
|
|||||||
This file was modified by The libjpeg-turbo Project to include only information
|
This file was modified by The libjpeg-turbo Project to include only information
|
||||||
relevant to libjpeg-turbo, to wordsmith certain sections, and to describe
|
relevant to libjpeg-turbo, to wordsmith certain sections, and to describe
|
||||||
features not present in libjpeg.
|
features not present in libjpeg.
|
||||||
.SH ISSUES
|
|
||||||
Support for compressed GIF output files was removed in djpeg v6b due to
|
|
||||||
concerns over the Unisys LZW patent. Although this patent expired in 2006,
|
|
||||||
djpeg still lacks compressed GIF support, for these historical reasons.
|
|
||||||
(Conversion of JPEG files to GIF is usually a bad idea anyway, since GIF is a
|
|
||||||
256-color format.) The uncompressed GIF files that djpeg generates are larger
|
|
||||||
than they should be, but they are readable by standard GIF decoders.
|
|
||||||
|
|||||||
153
djpeg.c
@@ -3,9 +3,9 @@
|
|||||||
*
|
*
|
||||||
* This file was part of the Independent JPEG Group's software:
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
* Modified 2013 by Guido Vollbeding.
|
* Modified 2013-2019 by Guido Vollbeding.
|
||||||
* libjpeg-turbo Modifications:
|
* libjpeg-turbo Modifications:
|
||||||
* Copyright (C) 2010-2011, 2013-2017, D. R. Commander.
|
* Copyright (C) 2010-2011, 2013-2017, 2019-2020, 2022, D. R. Commander.
|
||||||
* Copyright (C) 2015, Google, Inc.
|
* Copyright (C) 2015, Google, Inc.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
* file.
|
* file.
|
||||||
@@ -28,26 +28,16 @@
|
|||||||
* works regardless of which command line style is used.
|
* works regardless of which command line style is used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
||||||
#include "jversion.h" /* for version message */
|
#include "jversion.h" /* for version message */
|
||||||
#include "jconfigint.h"
|
#include "jconfigint.h"
|
||||||
|
|
||||||
#ifndef HAVE_STDLIB_H /* <stdlib.h> should declare free() */
|
|
||||||
extern void free(void *ptr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <ctype.h> /* to declare isprint() */
|
#include <ctype.h> /* to declare isprint() */
|
||||||
|
|
||||||
#ifdef USE_CCOMMAND /* command-line reader for Macintosh */
|
|
||||||
#ifdef __MWERKS__
|
|
||||||
#include <SIOUX.h> /* Metrowerks needs this */
|
|
||||||
#include <console.h> /* ... and this */
|
|
||||||
#endif
|
|
||||||
#ifdef THINK_C
|
|
||||||
#include <console.h> /* Think declares it here */
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Create the add-on message string table. */
|
/* Create the add-on message string table. */
|
||||||
|
|
||||||
@@ -68,10 +58,10 @@ static const char * const cdjpeg_message_table[] = {
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FMT_BMP, /* BMP format (Windows flavor) */
|
FMT_BMP, /* BMP format (Windows flavor) */
|
||||||
FMT_GIF, /* GIF format */
|
FMT_GIF, /* GIF format (LZW-compressed) */
|
||||||
|
FMT_GIF0, /* GIF format (uncompressed) */
|
||||||
FMT_OS2, /* BMP format (OS/2 flavor) */
|
FMT_OS2, /* BMP format (OS/2 flavor) */
|
||||||
FMT_PPM, /* PPM/PGM (PBMPLUS formats) */
|
FMT_PPM, /* PPM/PGM (PBMPLUS formats) */
|
||||||
FMT_RLE, /* RLE format */
|
|
||||||
FMT_TARGA, /* Targa format */
|
FMT_TARGA, /* Targa format */
|
||||||
FMT_TIFF /* TIFF format */
|
FMT_TIFF /* TIFF format */
|
||||||
} IMAGE_FORMATS;
|
} IMAGE_FORMATS;
|
||||||
@@ -94,11 +84,14 @@ 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 *icc_filename; /* for -icc switch */
|
static char *icc_filename; /* for -icc switch */
|
||||||
|
JDIMENSION max_scans; /* for -maxscans switch */
|
||||||
static char *outfilename; /* for -outfile switch */
|
static char *outfilename; /* for -outfile switch */
|
||||||
boolean memsrc; /* for -memsrc switch */
|
boolean memsrc; /* for -memsrc switch */
|
||||||
|
boolean report; /* for -report switch */
|
||||||
boolean skip, crop;
|
boolean skip, crop;
|
||||||
JDIMENSION skip_start, skip_end;
|
JDIMENSION skip_start, skip_end;
|
||||||
JDIMENSION crop_x, crop_y, crop_width, crop_height;
|
JDIMENSION crop_x, crop_y, crop_width, crop_height;
|
||||||
|
boolean strict; /* for -strict switch */
|
||||||
#define INPUT_BUF_SIZE 4096
|
#define INPUT_BUF_SIZE 4096
|
||||||
|
|
||||||
|
|
||||||
@@ -127,8 +120,10 @@ usage(void)
|
|||||||
(DEFAULT_FMT == FMT_BMP ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_BMP ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef GIF_SUPPORTED
|
#ifdef GIF_SUPPORTED
|
||||||
fprintf(stderr, " -gif Select GIF output format%s\n",
|
fprintf(stderr, " -gif Select GIF output format (LZW-compressed)%s\n",
|
||||||
(DEFAULT_FMT == FMT_GIF ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_GIF ? " (default)" : ""));
|
||||||
|
fprintf(stderr, " -gif0 Select GIF output format (uncompressed)%s\n",
|
||||||
|
(DEFAULT_FMT == FMT_GIF0 ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef BMP_SUPPORTED
|
#ifdef BMP_SUPPORTED
|
||||||
fprintf(stderr, " -os2 Select BMP output format (OS/2 style)%s\n",
|
fprintf(stderr, " -os2 Select BMP output format (OS/2 style)%s\n",
|
||||||
@@ -138,25 +133,21 @@ usage(void)
|
|||||||
fprintf(stderr, " -pnm Select PBMPLUS (PPM/PGM) output format%s\n",
|
fprintf(stderr, " -pnm Select PBMPLUS (PPM/PGM) output format%s\n",
|
||||||
(DEFAULT_FMT == FMT_PPM ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_PPM ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLE_SUPPORTED
|
|
||||||
fprintf(stderr, " -rle Select Utah RLE output format%s\n",
|
|
||||||
(DEFAULT_FMT == FMT_RLE ? " (default)" : ""));
|
|
||||||
#endif
|
|
||||||
#ifdef TARGA_SUPPORTED
|
#ifdef TARGA_SUPPORTED
|
||||||
fprintf(stderr, " -targa Select Targa output format%s\n",
|
fprintf(stderr, " -targa Select Targa output format%s\n",
|
||||||
(DEFAULT_FMT == FMT_TARGA ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_TARGA ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, "Switches for advanced users:\n");
|
fprintf(stderr, "Switches for advanced users:\n");
|
||||||
#ifdef DCT_ISLOW_SUPPORTED
|
#ifdef DCT_ISLOW_SUPPORTED
|
||||||
fprintf(stderr, " -dct int Use integer DCT method%s\n",
|
fprintf(stderr, " -dct int Use accurate integer DCT method%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_IFAST_SUPPORTED
|
#ifdef DCT_IFAST_SUPPORTED
|
||||||
fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n",
|
fprintf(stderr, " -dct fast Use less accurate integer DCT method [legacy feature]%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_FLOAT_SUPPORTED
|
#ifdef DCT_FLOAT_SUPPORTED
|
||||||
fprintf(stderr, " -dct float Use floating-point DCT method%s\n",
|
fprintf(stderr, " -dct float Use floating-point DCT method [legacy feature]%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, " -dither fs Use F-S dithering (default)\n");
|
fprintf(stderr, " -dither fs Use F-S dithering (default)\n");
|
||||||
@@ -171,14 +162,16 @@ usage(void)
|
|||||||
fprintf(stderr, " -onepass Use 1-pass quantization (fast, low quality)\n");
|
fprintf(stderr, " -onepass Use 1-pass quantization (fast, low quality)\n");
|
||||||
#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, " -maxscans N Maximum number of scans to allow in input file\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)
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
fprintf(stderr, " -memsrc Load input file into memory before decompressing\n");
|
fprintf(stderr, " -memsrc Load input file into memory before decompressing\n");
|
||||||
#endif
|
#endif
|
||||||
|
fprintf(stderr, " -report Report decompression progress\n");
|
||||||
fprintf(stderr, " -skip Y0,Y1 Decompress all rows except those between Y0 and Y1 (inclusive)\n");
|
fprintf(stderr, " -skip Y0,Y1 Decompress all rows except those between Y0 and Y1 (inclusive)\n");
|
||||||
fprintf(stderr, " -crop WxH+X+Y Decompress only a rectangular subregion of the image\n");
|
fprintf(stderr, " -crop WxH+X+Y Decompress only a rectangular subregion of the image\n");
|
||||||
fprintf(stderr, " [requires PBMPLUS (PPM/PGM), GIF, or Targa output format]\n");
|
fprintf(stderr, " [requires PBMPLUS (PPM/PGM), GIF, or Targa output format]\n");
|
||||||
|
fprintf(stderr, " -strict Treat all warnings as fatal\n");
|
||||||
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
||||||
fprintf(stderr, " -version Print version information and exit\n");
|
fprintf(stderr, " -version Print version information and exit\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
@@ -203,10 +196,13 @@ 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 */
|
||||||
icc_filename = NULL;
|
icc_filename = NULL;
|
||||||
|
max_scans = 0;
|
||||||
outfilename = NULL;
|
outfilename = NULL;
|
||||||
memsrc = FALSE;
|
memsrc = FALSE;
|
||||||
|
report = FALSE;
|
||||||
skip = FALSE;
|
skip = FALSE;
|
||||||
crop = FALSE;
|
crop = FALSE;
|
||||||
|
strict = FALSE;
|
||||||
cinfo->err->trace_level = 0;
|
cinfo->err->trace_level = 0;
|
||||||
|
|
||||||
/* Scan command line options, adjust parameters */
|
/* Scan command line options, adjust parameters */
|
||||||
@@ -224,7 +220,7 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
arg++; /* advance past switch marker character */
|
arg++; /* advance past switch marker character */
|
||||||
|
|
||||||
if (keymatch(arg, "bmp", 1)) {
|
if (keymatch(arg, "bmp", 1)) {
|
||||||
/* BMP output format. */
|
/* BMP output format (Windows flavor). */
|
||||||
requested_fmt = FMT_BMP;
|
requested_fmt = FMT_BMP;
|
||||||
|
|
||||||
} else if (keymatch(arg, "colors", 1) || keymatch(arg, "colours", 1) ||
|
} else if (keymatch(arg, "colors", 1) || keymatch(arg, "colours", 1) ||
|
||||||
@@ -295,9 +291,13 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
cinfo->do_fancy_upsampling = FALSE;
|
cinfo->do_fancy_upsampling = FALSE;
|
||||||
|
|
||||||
} else if (keymatch(arg, "gif", 1)) {
|
} else if (keymatch(arg, "gif", 1)) {
|
||||||
/* GIF output format. */
|
/* GIF output format (LZW-compressed). */
|
||||||
requested_fmt = FMT_GIF;
|
requested_fmt = FMT_GIF;
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "gif0", 4)) {
|
||||||
|
/* GIF output format (uncompressed). */
|
||||||
|
requested_fmt = FMT_GIF0;
|
||||||
|
|
||||||
} else if (keymatch(arg, "grayscale", 2) ||
|
} else if (keymatch(arg, "grayscale", 2) ||
|
||||||
keymatch(arg, "greyscale", 2)) {
|
keymatch(arg, "greyscale", 2)) {
|
||||||
/* Force monochrome output. */
|
/* Force monochrome output. */
|
||||||
@@ -351,6 +351,12 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
lval *= 1000L;
|
lval *= 1000L;
|
||||||
cinfo->mem->max_memory_to_use = lval * 1000L;
|
cinfo->mem->max_memory_to_use = lval * 1000L;
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "maxscans", 4)) {
|
||||||
|
if (++argn >= argc) /* advance to next argument */
|
||||||
|
usage();
|
||||||
|
if (sscanf(argv[argn], "%u", &max_scans) != 1)
|
||||||
|
usage();
|
||||||
|
|
||||||
} else if (keymatch(arg, "nosmooth", 3)) {
|
} else if (keymatch(arg, "nosmooth", 3)) {
|
||||||
/* Suppress fancy upsampling */
|
/* Suppress fancy upsampling */
|
||||||
cinfo->do_fancy_upsampling = FALSE;
|
cinfo->do_fancy_upsampling = FALSE;
|
||||||
@@ -383,9 +389,8 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
/* PPM/PGM output format. */
|
/* PPM/PGM output format. */
|
||||||
requested_fmt = FMT_PPM;
|
requested_fmt = FMT_PPM;
|
||||||
|
|
||||||
} else if (keymatch(arg, "rle", 1)) {
|
} else if (keymatch(arg, "report", 2)) {
|
||||||
/* RLE output format. */
|
report = TRUE;
|
||||||
requested_fmt = FMT_RLE;
|
|
||||||
|
|
||||||
} else if (keymatch(arg, "scale", 2)) {
|
} else if (keymatch(arg, "scale", 2)) {
|
||||||
/* Scale the output image by a fraction M/N. */
|
/* Scale the output image by a fraction M/N. */
|
||||||
@@ -413,6 +418,9 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
usage();
|
usage();
|
||||||
crop = TRUE;
|
crop = TRUE;
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "strict", 2)) {
|
||||||
|
strict = TRUE;
|
||||||
|
|
||||||
} else if (keymatch(arg, "targa", 1)) {
|
} else if (keymatch(arg, "targa", 1)) {
|
||||||
/* Targa output format. */
|
/* Targa output format. */
|
||||||
requested_fmt = FMT_TARGA;
|
requested_fmt = FMT_TARGA;
|
||||||
@@ -444,7 +452,7 @@ jpeg_getc(j_decompress_ptr cinfo)
|
|||||||
ERREXIT(cinfo, JERR_CANT_SUSPEND);
|
ERREXIT(cinfo, JERR_CANT_SUSPEND);
|
||||||
}
|
}
|
||||||
datasrc->bytes_in_buffer--;
|
datasrc->bytes_in_buffer--;
|
||||||
return GETJOCTET(*datasrc->next_input_byte++);
|
return *datasrc->next_input_byte++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -499,6 +507,19 @@ print_text_marker(j_decompress_ptr cinfo)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
METHODDEF(void)
|
||||||
|
my_emit_message(j_common_ptr cinfo, int msg_level)
|
||||||
|
{
|
||||||
|
if (msg_level < 0) {
|
||||||
|
/* Treat warning as fatal */
|
||||||
|
cinfo->err->error_exit(cinfo);
|
||||||
|
} else {
|
||||||
|
if (cinfo->err->trace_level >= msg_level)
|
||||||
|
cinfo->err->output_message(cinfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The main program.
|
* The main program.
|
||||||
*/
|
*/
|
||||||
@@ -508,9 +529,7 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
struct jpeg_decompress_struct cinfo;
|
struct jpeg_decompress_struct cinfo;
|
||||||
struct jpeg_error_mgr jerr;
|
struct jpeg_error_mgr jerr;
|
||||||
#ifdef PROGRESS_REPORT
|
|
||||||
struct cdjpeg_progress_mgr progress;
|
struct cdjpeg_progress_mgr progress;
|
||||||
#endif
|
|
||||||
int file_index;
|
int file_index;
|
||||||
djpeg_dest_ptr dest_mgr = NULL;
|
djpeg_dest_ptr dest_mgr = NULL;
|
||||||
FILE *input_file;
|
FILE *input_file;
|
||||||
@@ -521,11 +540,6 @@ main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
JDIMENSION num_scanlines;
|
JDIMENSION num_scanlines;
|
||||||
|
|
||||||
/* On Mac, fetch a command line. */
|
|
||||||
#ifdef USE_CCOMMAND
|
|
||||||
argc = ccommand(&argv);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
progname = argv[0];
|
progname = argv[0];
|
||||||
if (progname == NULL || progname[0] == 0)
|
if (progname == NULL || progname[0] == 0)
|
||||||
progname = "djpeg"; /* in case C library doesn't provide it */
|
progname = "djpeg"; /* in case C library doesn't provide it */
|
||||||
@@ -557,6 +571,9 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
||||||
|
|
||||||
|
if (strict)
|
||||||
|
jerr.emit_message = my_emit_message;
|
||||||
|
|
||||||
#ifdef TWO_FILE_COMMANDLINE
|
#ifdef TWO_FILE_COMMANDLINE
|
||||||
/* 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) {
|
||||||
@@ -603,9 +620,11 @@ main(int argc, char **argv)
|
|||||||
output_file = write_stdout();
|
output_file = write_stdout();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
if (report || max_scans != 0) {
|
||||||
start_progress_monitor((j_common_ptr)&cinfo, &progress);
|
start_progress_monitor((j_common_ptr)&cinfo, &progress);
|
||||||
#endif
|
progress.report = report;
|
||||||
|
progress.max_scans = max_scans;
|
||||||
|
}
|
||||||
|
|
||||||
/* Specify data source for decompression */
|
/* Specify data source for decompression */
|
||||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
@@ -617,7 +636,7 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr, "%s: memory allocation failure\n", progname);
|
fprintf(stderr, "%s: memory allocation failure\n", progname);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
nbytes = JFREAD(input_file, &inbuffer[insize], INPUT_BUF_SIZE);
|
nbytes = fread(&inbuffer[insize], 1, INPUT_BUF_SIZE, input_file);
|
||||||
if (nbytes < INPUT_BUF_SIZE && ferror(input_file)) {
|
if (nbytes < INPUT_BUF_SIZE && ferror(input_file)) {
|
||||||
if (file_index < argc)
|
if (file_index < argc)
|
||||||
fprintf(stderr, "%s: can't read from %s\n", progname,
|
fprintf(stderr, "%s: can't read from %s\n", progname,
|
||||||
@@ -653,7 +672,10 @@ main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
#ifdef GIF_SUPPORTED
|
#ifdef GIF_SUPPORTED
|
||||||
case FMT_GIF:
|
case FMT_GIF:
|
||||||
dest_mgr = jinit_write_gif(&cinfo);
|
dest_mgr = jinit_write_gif(&cinfo, TRUE);
|
||||||
|
break;
|
||||||
|
case FMT_GIF0:
|
||||||
|
dest_mgr = jinit_write_gif(&cinfo, FALSE);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef PPM_SUPPORTED
|
#ifdef PPM_SUPPORTED
|
||||||
@@ -661,11 +683,6 @@ main(int argc, char **argv)
|
|||||||
dest_mgr = jinit_write_ppm(&cinfo);
|
dest_mgr = jinit_write_ppm(&cinfo);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLE_SUPPORTED
|
|
||||||
case FMT_RLE:
|
|
||||||
dest_mgr = jinit_write_rle(&cinfo);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef TARGA_SUPPORTED
|
#ifdef TARGA_SUPPORTED
|
||||||
case FMT_TARGA:
|
case FMT_TARGA:
|
||||||
dest_mgr = jinit_write_targa(&cinfo);
|
dest_mgr = jinit_write_targa(&cinfo);
|
||||||
@@ -689,7 +706,7 @@ main(int argc, char **argv)
|
|||||||
* that skip_start <= skip_end.
|
* that skip_start <= skip_end.
|
||||||
*/
|
*/
|
||||||
if (skip_end > cinfo.output_height - 1) {
|
if (skip_end > cinfo.output_height - 1) {
|
||||||
fprintf(stderr, "%s: skip region exceeds image height %d\n", progname,
|
fprintf(stderr, "%s: skip region exceeds image height %u\n", progname,
|
||||||
cinfo.output_height);
|
cinfo.output_height);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@@ -708,7 +725,12 @@ main(int argc, char **argv)
|
|||||||
dest_mgr->buffer_height);
|
dest_mgr->buffer_height);
|
||||||
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
}
|
}
|
||||||
jpeg_skip_scanlines(&cinfo, skip_end - skip_start + 1);
|
if ((tmp = jpeg_skip_scanlines(&cinfo, skip_end - skip_start + 1)) !=
|
||||||
|
skip_end - skip_start + 1) {
|
||||||
|
fprintf(stderr, "%s: jpeg_skip_scanlines() returned %u rather than %u\n",
|
||||||
|
progname, tmp, skip_end - skip_start + 1);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
while (cinfo.output_scanline < cinfo.output_height) {
|
while (cinfo.output_scanline < cinfo.output_height) {
|
||||||
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
||||||
dest_mgr->buffer_height);
|
dest_mgr->buffer_height);
|
||||||
@@ -724,7 +746,7 @@ main(int argc, char **argv)
|
|||||||
*/
|
*/
|
||||||
if (crop_x + crop_width > cinfo.output_width ||
|
if (crop_x + crop_width > cinfo.output_width ||
|
||||||
crop_y + crop_height > cinfo.output_height) {
|
crop_y + crop_height > cinfo.output_height) {
|
||||||
fprintf(stderr, "%s: crop dimensions exceed image dimensions %d x %d\n",
|
fprintf(stderr, "%s: crop dimensions exceed image dimensions %u x %u\n",
|
||||||
progname, cinfo.output_width, cinfo.output_height);
|
progname, cinfo.output_width, cinfo.output_height);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@@ -744,13 +766,24 @@ main(int argc, char **argv)
|
|||||||
cinfo.output_height = tmp;
|
cinfo.output_height = tmp;
|
||||||
|
|
||||||
/* Process data */
|
/* Process data */
|
||||||
jpeg_skip_scanlines(&cinfo, crop_y);
|
if ((tmp = jpeg_skip_scanlines(&cinfo, crop_y)) != crop_y) {
|
||||||
|
fprintf(stderr, "%s: jpeg_skip_scanlines() returned %u rather than %u\n",
|
||||||
|
progname, tmp, crop_y);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
while (cinfo.output_scanline < crop_y + crop_height) {
|
while (cinfo.output_scanline < crop_y + crop_height) {
|
||||||
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
||||||
dest_mgr->buffer_height);
|
dest_mgr->buffer_height);
|
||||||
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
}
|
}
|
||||||
jpeg_skip_scanlines(&cinfo, cinfo.output_height - crop_y - crop_height);
|
if ((tmp =
|
||||||
|
jpeg_skip_scanlines(&cinfo,
|
||||||
|
cinfo.output_height - crop_y - crop_height)) !=
|
||||||
|
cinfo.output_height - crop_y - crop_height) {
|
||||||
|
fprintf(stderr, "%s: jpeg_skip_scanlines() returned %u rather than %u\n",
|
||||||
|
progname, tmp, cinfo.output_height - crop_y - crop_height);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
/* Normal full-image decompress */
|
/* Normal full-image decompress */
|
||||||
} else {
|
} else {
|
||||||
@@ -765,12 +798,11 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
|
||||||
/* Hack: count final pass as done in case finish_output does an extra pass.
|
/* Hack: count final pass as done in case finish_output does an extra pass.
|
||||||
* The library won't have updated completed_passes.
|
* The library won't have updated completed_passes.
|
||||||
*/
|
*/
|
||||||
progress.pub.completed_passes = progress.pub.total_passes;
|
if (report || max_scans != 0)
|
||||||
#endif
|
progress.pub.completed_passes = progress.pub.total_passes;
|
||||||
|
|
||||||
if (icc_filename != NULL) {
|
if (icc_filename != NULL) {
|
||||||
FILE *icc_file;
|
FILE *icc_file;
|
||||||
@@ -809,9 +841,8 @@ main(int argc, char **argv)
|
|||||||
if (output_file != stdout)
|
if (output_file != stdout)
|
||||||
fclose(output_file);
|
fclose(output_file);
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
if (report || max_scans != 0)
|
||||||
end_progress_monitor((j_common_ptr)&cinfo);
|
end_progress_monitor((j_common_ptr)&cinfo);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (memsrc)
|
if (memsrc)
|
||||||
free(inbuffer);
|
free(inbuffer);
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>TurboJPEG: Data Structures</title>
|
<title>TurboJPEG: Data Structures</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
||||||
</script>
|
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG
|
||||||
 <span id="projectnumber">2.0</span>
|
 <span id="projectnumber">2.1.4</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -32,47 +31,29 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
<!-- Generated by Doxygen 1.8.20 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<ul class="tablist">
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<script type="text/javascript">
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
$(function() {
|
||||||
<li>
|
initMenu('',true,false,'search.php','Search');
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
$(document).ready(function() { init_search(); });
|
||||||
<span class="left">
|
});
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
/* @license-end */</script>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
<div id="main-nav"></div>
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
||||||
alt=""/>
|
|
||||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
||||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
||||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
||||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
||||||
</span><span class="right">
|
|
||||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="navrow2" class="tabs2">
|
|
||||||
<ul class="tablist">
|
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
|
||||||
<li><a href="classes.html"><span>Data Structure Index</span></a></li>
|
|
||||||
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
</div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -88,17 +69,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
|
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
|
||||||
<table class="directory">
|
<table class="directory">
|
||||||
<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtjregion.html" target="_self">tjregion</a></td><td class="desc">Cropping region</td></tr>
|
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtjregion.html" target="_self">tjregion</a></td><td class="desc">Cropping region </td></tr>
|
||||||
<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtjscalingfactor.html" target="_self">tjscalingfactor</a></td><td class="desc">Scaling factor</td></tr>
|
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtjscalingfactor.html" target="_self">tjscalingfactor</a></td><td class="desc">Scaling factor </td></tr>
|
||||||
<tr id="row_2_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtjtransform.html" target="_self">tjtransform</a></td><td class="desc">Lossless transform</td></tr>
|
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtjtransform.html" target="_self">tjtransform</a></td><td class="desc">Lossless transform </td></tr>
|
||||||
</table>
|
</table>
|
||||||
</div><!-- directory -->
|
</div><!-- directory -->
|
||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
||||||
</a> 1.8.3.1
|
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>TurboJPEG: Data Structure Index</title>
|
<title>TurboJPEG: Data Structure Index</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
||||||
</script>
|
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG
|
||||||
 <span id="projectnumber">2.0</span>
|
 <span id="projectnumber">2.1.4</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -32,47 +31,29 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
<!-- Generated by Doxygen 1.8.20 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<ul class="tablist">
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<script type="text/javascript">
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
$(function() {
|
||||||
<li>
|
initMenu('',true,false,'search.php','Search');
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
$(document).ready(function() { init_search(); });
|
||||||
<span class="left">
|
});
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
/* @license-end */</script>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
<div id="main-nav"></div>
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
||||||
alt=""/>
|
|
||||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
||||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
||||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
||||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
||||||
</span><span class="right">
|
|
||||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="navrow2" class="tabs2">
|
|
||||||
<ul class="tablist">
|
|
||||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
|
||||||
<li class="current"><a href="classes.html"><span>Data Structure Index</span></a></li>
|
|
||||||
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
</div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -86,21 +67,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<div class="title">Data Structure Index</div> </div>
|
<div class="title">Data Structure Index</div> </div>
|
||||||
</div><!--header-->
|
</div><!--header-->
|
||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="qindex"><a class="qindex" href="#letter_T">T</a></div>
|
<div class="qindex"><a class="qindex" href="#letter_t">t</a></div>
|
||||||
<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
|
<table class="classindex">
|
||||||
<tr><td rowspan="2" valign="bottom"><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  T  </div></td></tr></table>
|
<tr><td rowspan="2" valign="bottom"><a name="letter_t"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  t  </div></td></tr></table>
|
||||||
</td><td valign="top"><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a>   </td><td valign="top"><a class="el" href="structtjtransform.html">tjtransform</a>   </td><td></td></tr>
|
</td>
|
||||||
|
<td valign="top"><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a>   </td>
|
||||||
|
<td valign="top"><a class="el" href="structtjtransform.html">tjtransform</a>   </td>
|
||||||
|
<td></td></tr>
|
||||||
<tr><td></td><td></td><td></td></tr>
|
<tr><td></td><td></td><td></td></tr>
|
||||||
<tr><td valign="top"><a class="el" href="structtjregion.html">tjregion</a>   </td><td></td><td></td><td></td></tr>
|
<tr><td valign="top"><a class="el" href="structtjregion.html">tjregion</a>   </td>
|
||||||
|
<td></td><td></td><td></td></tr>
|
||||||
<tr><td></td><td></td><td></td><td></td></tr>
|
<tr><td></td><td></td><td></td><td></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div class="qindex"><a class="qindex" href="#letter_T">T</a></div>
|
<div class="qindex"><a class="qindex" href="#letter_t">t</a></div>
|
||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
||||||
</a> 1.8.3.1
|
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 746 B After Width: | Height: | Size: 746 B |
@@ -1,7 +1,11 @@
|
|||||||
/* The standard CSS for doxygen 1.8.3.1 */
|
/* The standard CSS for doxygen 1.8.20 */
|
||||||
|
|
||||||
body, table, div, p, dl {
|
body, table, div, p, dl {
|
||||||
font: 400 14px/19px Roboto,sans-serif;
|
font: 400 14px/22px Roboto,sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.reference, p.definition {
|
||||||
|
font: 400 14px/22px Roboto,sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @group Heading Levels */
|
/* @group Heading Levels */
|
||||||
@@ -11,6 +15,7 @@ h1.groupheader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
|
font: 400 14px/28px Roboto,sans-serif;
|
||||||
font-size: 150%;
|
font-size: 150%;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin: 10px 2px;
|
margin: 10px 2px;
|
||||||
@@ -48,17 +53,28 @@ dt {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.multicol {
|
ul.multicol {
|
||||||
-moz-column-gap: 1em;
|
-moz-column-gap: 1em;
|
||||||
-webkit-column-gap: 1em;
|
-webkit-column-gap: 1em;
|
||||||
|
column-gap: 1em;
|
||||||
-moz-column-count: 3;
|
-moz-column-count: 3;
|
||||||
-webkit-column-count: 3;
|
-webkit-column-count: 3;
|
||||||
|
column-count: 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
p.startli, p.startdd, p.starttd {
|
p.startli, p.startdd {
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
th p.starttd, th p.intertd, th p.endtd {
|
||||||
|
font-size: 100%;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.starttd {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
p.endli {
|
p.endli {
|
||||||
margin-bottom: 0px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
@@ -71,6 +87,15 @@ p.endtd {
|
|||||||
margin-bottom: 2px;
|
margin-bottom: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p.interli {
|
||||||
|
}
|
||||||
|
|
||||||
|
p.interdd {
|
||||||
|
}
|
||||||
|
|
||||||
|
p.intertd {
|
||||||
|
}
|
||||||
|
|
||||||
/* @end */
|
/* @end */
|
||||||
|
|
||||||
caption {
|
caption {
|
||||||
@@ -125,12 +150,12 @@ a.qindex {
|
|||||||
a.qindexHL {
|
a.qindexHL {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
background-color: #9CAFD4;
|
background-color: #9CAFD4;
|
||||||
color: #ffffff;
|
color: #FFFFFF;
|
||||||
border: 1px double #869DCA;
|
border: 1px double #869DCA;
|
||||||
}
|
}
|
||||||
|
|
||||||
.contents a.qindexHL:visited {
|
.contents a.qindexHL:visited {
|
||||||
color: #ffffff;
|
color: #FFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.el {
|
a.el {
|
||||||
@@ -140,11 +165,11 @@ a.el {
|
|||||||
a.elRef {
|
a.elRef {
|
||||||
}
|
}
|
||||||
|
|
||||||
a.code, a.code:visited {
|
a.code, a.code:visited, a.line, a.line:visited {
|
||||||
color: #4665A2;
|
color: #4665A2;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.codeRef, a.codeRef:visited {
|
a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
|
||||||
color: #4665A2;
|
color: #4665A2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,6 +179,25 @@ dl.el {
|
|||||||
margin-left: -1cm;
|
margin-left: -1cm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#side-nav ul {
|
||||||
|
overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
|
||||||
|
}
|
||||||
|
|
||||||
|
#main-nav ul {
|
||||||
|
overflow: visible; /* reset ul rule for the navigation bar drop down lists */
|
||||||
|
}
|
||||||
|
|
||||||
|
.fragment {
|
||||||
|
text-align: left;
|
||||||
|
direction: ltr;
|
||||||
|
overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
|
||||||
|
overflow-y: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
pre.fragment {
|
pre.fragment {
|
||||||
border: 1px solid #C4CFE5;
|
border: 1px solid #C4CFE5;
|
||||||
background-color: #FBFCFD;
|
background-color: #FBFCFD;
|
||||||
@@ -168,8 +212,8 @@ pre.fragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
div.fragment {
|
div.fragment {
|
||||||
padding: 4px;
|
padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
|
||||||
margin: 4px;
|
margin: 4px 8px 4px 2px;
|
||||||
background-color: #FBFCFD;
|
background-color: #FBFCFD;
|
||||||
border: 1px solid #C4CFE5;
|
border: 1px solid #C4CFE5;
|
||||||
}
|
}
|
||||||
@@ -201,6 +245,11 @@ div.line {
|
|||||||
transition-duration: 0.5s;
|
transition-duration: 0.5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.line:after {
|
||||||
|
content:"\000A";
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
|
||||||
div.line.glow {
|
div.line.glow {
|
||||||
background-color: cyan;
|
background-color: cyan;
|
||||||
box-shadow: 0 0 10px cyan;
|
box-shadow: 0 0 10px cyan;
|
||||||
@@ -222,10 +271,19 @@ span.lineno a:hover {
|
|||||||
background-color: #C8C8C8;
|
background-color: #C8C8C8;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.ah {
|
.lineno {
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ah, span.ah {
|
||||||
background-color: black;
|
background-color: black;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #ffffff;
|
color: #FFFFFF;
|
||||||
margin-bottom: 3px;
|
margin-bottom: 3px;
|
||||||
margin-top: 3px;
|
margin-top: 3px;
|
||||||
padding: 0.2em;
|
padding: 0.2em;
|
||||||
@@ -237,7 +295,16 @@ div.ah {
|
|||||||
-webkit-box-shadow: 2px 2px 3px #999;
|
-webkit-box-shadow: 2px 2px 3px #999;
|
||||||
-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
|
-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
|
||||||
background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
|
background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.classindex ul {
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.classindex span.ai {
|
||||||
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.groupHeader {
|
div.groupHeader {
|
||||||
@@ -292,7 +359,7 @@ img.formulaDsp {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
img.formulaInl {
|
img.formulaInl, img.inline {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -370,6 +437,13 @@ blockquote {
|
|||||||
padding: 0 12px 0 16px;
|
padding: 0 12px 0 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
blockquote.DocNodeRTL {
|
||||||
|
border-left: 0;
|
||||||
|
border-right: 2px solid #9CAFD4;
|
||||||
|
margin: 0 4px 0 24px;
|
||||||
|
padding: 0 16px 0 12px;
|
||||||
|
}
|
||||||
|
|
||||||
/* @end */
|
/* @end */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -466,7 +540,7 @@ table.memberdecls {
|
|||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.memItemRight {
|
.memItemRight, .memTemplItemRight {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -482,6 +556,29 @@ table.memberdecls {
|
|||||||
|
|
||||||
/* Styles for detailed member documentation */
|
/* Styles for detailed member documentation */
|
||||||
|
|
||||||
|
.memtitle {
|
||||||
|
padding: 8px;
|
||||||
|
border-top: 1px solid #A8B8D9;
|
||||||
|
border-left: 1px solid #A8B8D9;
|
||||||
|
border-right: 1px solid #A8B8D9;
|
||||||
|
border-top-right-radius: 4px;
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
margin-bottom: -1px;
|
||||||
|
background-image: url('nav_f.png');
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
background-color: #E2E8F2;
|
||||||
|
line-height: 1.25;
|
||||||
|
font-weight: 300;
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.permalink
|
||||||
|
{
|
||||||
|
font-size: 65%;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
.memtemplate {
|
.memtemplate {
|
||||||
font-size: 80%;
|
font-size: 80%;
|
||||||
color: #4665A2;
|
color: #4665A2;
|
||||||
@@ -520,7 +617,7 @@ table.memberdecls {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.memname {
|
.memname {
|
||||||
font-weight: bold;
|
font-weight: 400;
|
||||||
margin-left: 6px;
|
margin-left: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -536,24 +633,24 @@ table.memberdecls {
|
|||||||
color: #253555;
|
color: #253555;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
|
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
|
||||||
background-image:url('nav_f.png');
|
background-color: #DFE5F1;
|
||||||
background-repeat:repeat-x;
|
|
||||||
background-color: #E2E8F2;
|
|
||||||
/* opera specific markup */
|
/* opera specific markup */
|
||||||
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||||
border-top-right-radius: 4px;
|
border-top-right-radius: 4px;
|
||||||
border-top-left-radius: 4px;
|
|
||||||
/* firefox specific markup */
|
/* firefox specific markup */
|
||||||
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
|
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
|
||||||
-moz-border-radius-topright: 4px;
|
-moz-border-radius-topright: 4px;
|
||||||
-moz-border-radius-topleft: 4px;
|
|
||||||
/* webkit specific markup */
|
/* webkit specific markup */
|
||||||
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||||
-webkit-border-top-right-radius: 4px;
|
-webkit-border-top-right-radius: 4px;
|
||||||
-webkit-border-top-left-radius: 4px;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.overload {
|
||||||
|
font-family: "courier new",courier,monospace;
|
||||||
|
font-size: 65%;
|
||||||
|
}
|
||||||
|
|
||||||
.memdoc, dl.reflist dd {
|
.memdoc, dl.reflist dd {
|
||||||
border-bottom: 1px solid #A8B8D9;
|
border-bottom: 1px solid #A8B8D9;
|
||||||
border-left: 1px solid #A8B8D9;
|
border-left: 1px solid #A8B8D9;
|
||||||
@@ -611,17 +708,17 @@ dl.reflist dd {
|
|||||||
padding-left: 0px;
|
padding-left: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.params .paramname, .retval .paramname {
|
.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
.params .paramtype {
|
.params .paramtype, .tparams .paramtype {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
.params .paramdir {
|
.params .paramdir, .tparams .paramdir {
|
||||||
font-family: "courier new",courier,monospace;
|
font-family: "courier new",courier,monospace;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
@@ -665,12 +762,12 @@ span.mlabel {
|
|||||||
|
|
||||||
/* @end */
|
/* @end */
|
||||||
|
|
||||||
/* these are for tree view when not used as main index */
|
/* these are for tree view inside a (index) page */
|
||||||
|
|
||||||
div.directory {
|
div.directory {
|
||||||
margin: 10px 0px;
|
margin: 10px 0px;
|
||||||
border-top: 1px solid #A8B8D9;
|
border-top: 1px solid #9CAFD4;
|
||||||
border-bottom: 1px solid #A8B8D9;
|
border-bottom: 1px solid #9CAFD4;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -687,6 +784,7 @@ div.directory {
|
|||||||
.directory td.entry {
|
.directory td.entry {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
padding-right: 6px;
|
padding-right: 6px;
|
||||||
|
padding-top: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.directory td.entry a {
|
.directory td.entry a {
|
||||||
@@ -728,6 +826,80 @@ div.directory {
|
|||||||
color: #3D578C;
|
color: #3D578C;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.arrow {
|
||||||
|
color: #9CAFD4;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 80%;
|
||||||
|
display: inline-block;
|
||||||
|
width: 16px;
|
||||||
|
height: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
font-family: Arial, Helvetica;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 12px;
|
||||||
|
height: 14px;
|
||||||
|
width: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #728DC1;
|
||||||
|
color: white;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-left: 2px;
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icona {
|
||||||
|
width: 24px;
|
||||||
|
height: 22px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconfopen {
|
||||||
|
width: 24px;
|
||||||
|
height: 18px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
background-image:url('folderopen.png');
|
||||||
|
background-position: 0px -4px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
vertical-align:top;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconfclosed {
|
||||||
|
width: 24px;
|
||||||
|
height: 18px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
background-image:url('folderclosed.png');
|
||||||
|
background-position: 0px -4px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
vertical-align:top;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icondoc {
|
||||||
|
width: 24px;
|
||||||
|
height: 18px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
background-image:url('doc.png');
|
||||||
|
background-position: 0px -4px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
vertical-align:top;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.directory {
|
||||||
|
font: 400 14px Roboto,sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @end */
|
||||||
|
|
||||||
div.dynheader {
|
div.dynheader {
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
-webkit-touch-callout: none;
|
-webkit-touch-callout: none;
|
||||||
@@ -743,6 +915,10 @@ address {
|
|||||||
color: #2A3D61;
|
color: #2A3D61;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.doxtable caption {
|
||||||
|
caption-side: top;
|
||||||
|
}
|
||||||
|
|
||||||
table.doxtable {
|
table.doxtable {
|
||||||
border-collapse:collapse;
|
border-collapse:collapse;
|
||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
@@ -787,7 +963,7 @@ table.fieldtable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.fieldtable td.fieldname {
|
.fieldtable td.fieldname {
|
||||||
padding-top: 5px;
|
padding-top: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fieldtable td.fielddoc {
|
.fieldtable td.fielddoc {
|
||||||
@@ -796,7 +972,7 @@ table.fieldtable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.fieldtable td.fielddoc p:first-child {
|
.fieldtable td.fielddoc p:first-child {
|
||||||
margin-top: 2px;
|
margin-top: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fieldtable td.fielddoc p:last-child {
|
.fieldtable td.fielddoc p:last-child {
|
||||||
@@ -816,6 +992,7 @@ table.fieldtable {
|
|||||||
padding-bottom: 4px;
|
padding-bottom: 4px;
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
text-align:left;
|
text-align:left;
|
||||||
|
font-weight: 400;
|
||||||
-moz-border-radius-topleft: 4px;
|
-moz-border-radius-topleft: 4px;
|
||||||
-moz-border-radius-topright: 4px;
|
-moz-border-radius-topright: 4px;
|
||||||
-webkit-border-top-left-radius: 4px;
|
-webkit-border-top-left-radius: 4px;
|
||||||
@@ -908,6 +1085,18 @@ div.summary a
|
|||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.classindex
|
||||||
|
{
|
||||||
|
margin: 10px;
|
||||||
|
white-space: nowrap;
|
||||||
|
margin-left: 3%;
|
||||||
|
margin-right: 3%;
|
||||||
|
width: 94%;
|
||||||
|
border: 0;
|
||||||
|
border-spacing: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
div.ingroups
|
div.ingroups
|
||||||
{
|
{
|
||||||
font-size: 8pt;
|
font-size: 8pt;
|
||||||
@@ -934,72 +1123,143 @@ div.headertitle
|
|||||||
padding: 5px 5px 5px 10px;
|
padding: 5px 5px 5px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl
|
.PageDocRTL-title div.headertitle {
|
||||||
{
|
text-align: right;
|
||||||
padding: 0 0 0 10px;
|
direction: rtl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
|
dl {
|
||||||
dl.section
|
padding: 0 0 0 0;
|
||||||
{
|
}
|
||||||
|
|
||||||
|
/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
|
||||||
|
dl.section {
|
||||||
margin-left: 0px;
|
margin-left: 0px;
|
||||||
padding-left: 0px;
|
padding-left: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.note
|
dl.section.DocNodeRTL {
|
||||||
{
|
margin-right: 0px;
|
||||||
margin-left:-7px;
|
padding-right: 0px;
|
||||||
padding-left: 3px;
|
|
||||||
border-left:4px solid;
|
|
||||||
border-color: #D0C000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.warning, dl.attention
|
dl.note {
|
||||||
{
|
margin-left: -7px;
|
||||||
margin-left:-7px;
|
padding-left: 3px;
|
||||||
padding-left: 3px;
|
border-left: 4px solid;
|
||||||
border-left:4px solid;
|
border-color: #D0C000;
|
||||||
border-color: #FF0000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.pre, dl.post, dl.invariant
|
dl.note.DocNodeRTL {
|
||||||
{
|
margin-left: 0;
|
||||||
margin-left:-7px;
|
padding-left: 0;
|
||||||
padding-left: 3px;
|
border-left: 0;
|
||||||
border-left:4px solid;
|
margin-right: -7px;
|
||||||
border-color: #00D000;
|
padding-right: 3px;
|
||||||
|
border-right: 4px solid;
|
||||||
|
border-color: #D0C000;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.deprecated
|
dl.warning, dl.attention {
|
||||||
{
|
margin-left: -7px;
|
||||||
margin-left:-7px;
|
padding-left: 3px;
|
||||||
padding-left: 3px;
|
border-left: 4px solid;
|
||||||
border-left:4px solid;
|
border-color: #FF0000;
|
||||||
border-color: #505050;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.todo
|
dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
|
||||||
{
|
margin-left: 0;
|
||||||
margin-left:-7px;
|
padding-left: 0;
|
||||||
padding-left: 3px;
|
border-left: 0;
|
||||||
border-left:4px solid;
|
margin-right: -7px;
|
||||||
border-color: #00C0E0;
|
padding-right: 3px;
|
||||||
|
border-right: 4px solid;
|
||||||
|
border-color: #FF0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.test
|
dl.pre, dl.post, dl.invariant {
|
||||||
{
|
margin-left: -7px;
|
||||||
margin-left:-7px;
|
padding-left: 3px;
|
||||||
padding-left: 3px;
|
border-left: 4px solid;
|
||||||
border-left:4px solid;
|
border-color: #00D000;
|
||||||
border-color: #3030E0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.bug
|
dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
|
||||||
{
|
margin-left: 0;
|
||||||
margin-left:-7px;
|
padding-left: 0;
|
||||||
padding-left: 3px;
|
border-left: 0;
|
||||||
border-left:4px solid;
|
margin-right: -7px;
|
||||||
border-color: #C08050;
|
padding-right: 3px;
|
||||||
|
border-right: 4px solid;
|
||||||
|
border-color: #00D000;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.deprecated {
|
||||||
|
margin-left: -7px;
|
||||||
|
padding-left: 3px;
|
||||||
|
border-left: 4px solid;
|
||||||
|
border-color: #505050;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.deprecated.DocNodeRTL {
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
border-left: 0;
|
||||||
|
margin-right: -7px;
|
||||||
|
padding-right: 3px;
|
||||||
|
border-right: 4px solid;
|
||||||
|
border-color: #505050;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.todo {
|
||||||
|
margin-left: -7px;
|
||||||
|
padding-left: 3px;
|
||||||
|
border-left: 4px solid;
|
||||||
|
border-color: #00C0E0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.todo.DocNodeRTL {
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
border-left: 0;
|
||||||
|
margin-right: -7px;
|
||||||
|
padding-right: 3px;
|
||||||
|
border-right: 4px solid;
|
||||||
|
border-color: #00C0E0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.test {
|
||||||
|
margin-left: -7px;
|
||||||
|
padding-left: 3px;
|
||||||
|
border-left: 4px solid;
|
||||||
|
border-color: #3030E0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.test.DocNodeRTL {
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
border-left: 0;
|
||||||
|
margin-right: -7px;
|
||||||
|
padding-right: 3px;
|
||||||
|
border-right: 4px solid;
|
||||||
|
border-color: #3030E0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.bug {
|
||||||
|
margin-left: -7px;
|
||||||
|
padding-left: 3px;
|
||||||
|
border-left: 4px solid;
|
||||||
|
border-color: #C08050;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.bug.DocNodeRTL {
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
border-left: 0;
|
||||||
|
margin-right: -7px;
|
||||||
|
padding-right: 3px;
|
||||||
|
border-right: 4px solid;
|
||||||
|
border-color: #C08050;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.section dd {
|
dl.section dd {
|
||||||
@@ -1019,6 +1279,11 @@ dl.section dd {
|
|||||||
border: 0px none;
|
border: 0px none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#projectalign
|
||||||
|
{
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
#projectname
|
#projectname
|
||||||
{
|
{
|
||||||
font: 300% Tahoma, Arial,sans-serif;
|
font: 300% Tahoma, Arial,sans-serif;
|
||||||
@@ -1063,6 +1328,16 @@ dl.section dd {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.plantumlgraph
|
||||||
|
{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.diagraph
|
||||||
|
{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
.caption
|
.caption
|
||||||
{
|
{
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@@ -1083,10 +1358,12 @@ dl.citelist dt {
|
|||||||
font-weight:bold;
|
font-weight:bold;
|
||||||
margin-right:10px;
|
margin-right:10px;
|
||||||
padding:5px;
|
padding:5px;
|
||||||
|
text-align:right;
|
||||||
|
width:52px;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.citelist dd {
|
dl.citelist dd {
|
||||||
margin:2px 0;
|
margin:2px 0 2px 72px;
|
||||||
padding:5px 0;
|
padding:5px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1097,10 +1374,15 @@ div.toc {
|
|||||||
border-radius: 7px 7px 7px 7px;
|
border-radius: 7px 7px 7px 7px;
|
||||||
float: right;
|
float: right;
|
||||||
height: auto;
|
height: auto;
|
||||||
margin: 0 20px 10px 10px;
|
margin: 0 8px 10px 10px;
|
||||||
width: 200px;
|
width: 200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.PageDocRTL-title div.toc {
|
||||||
|
float: left !important;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
div.toc li {
|
div.toc li {
|
||||||
background: url("bdwn.png") no-repeat scroll 0 5px transparent;
|
background: url("bdwn.png") no-repeat scroll 0 5px transparent;
|
||||||
font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
|
font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
|
||||||
@@ -1109,6 +1391,12 @@ div.toc li {
|
|||||||
padding-top: 2px;
|
padding-top: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.PageDocRTL-title div.toc li {
|
||||||
|
background-position-x: right !important;
|
||||||
|
padding-left: 0 !important;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
div.toc h3 {
|
div.toc h3 {
|
||||||
font: bold 12px/1.2 Arial,FreeSans,sans-serif;
|
font: bold 12px/1.2 Arial,FreeSans,sans-serif;
|
||||||
color: #4665A2;
|
color: #4665A2;
|
||||||
@@ -1138,6 +1426,26 @@ div.toc li.level4 {
|
|||||||
margin-left: 45px;
|
margin-left: 45px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.PageDocRTL-title div.toc li.level1 {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PageDocRTL-title div.toc li.level2 {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PageDocRTL-title div.toc li.level3 {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
margin-right: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PageDocRTL-title div.toc li.level4 {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
margin-right: 45px;
|
||||||
|
}
|
||||||
|
|
||||||
.inherit_header {
|
.inherit_header {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: gray;
|
color: gray;
|
||||||
@@ -1163,6 +1471,177 @@ tr.heading h2 {
|
|||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* tooltip related style info */
|
||||||
|
|
||||||
|
.ttc {
|
||||||
|
position: absolute;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip {
|
||||||
|
cursor: default;
|
||||||
|
white-space: nowrap;
|
||||||
|
background-color: white;
|
||||||
|
border: 1px solid gray;
|
||||||
|
border-radius: 4px 4px 4px 4px;
|
||||||
|
box-shadow: 1px 1px 7px gray;
|
||||||
|
display: none;
|
||||||
|
font-size: smaller;
|
||||||
|
max-width: 80%;
|
||||||
|
opacity: 0.9;
|
||||||
|
padding: 1ex 1em 1em;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 2147483647;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip div.ttdoc {
|
||||||
|
color: grey;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip div.ttname a {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip div.ttname {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip div.ttdeci {
|
||||||
|
color: #006318;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip div {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
font: 12px/16px Roboto,sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip:before, #powerTip:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.n:after, #powerTip.n:before,
|
||||||
|
#powerTip.s:after, #powerTip.s:before,
|
||||||
|
#powerTip.w:after, #powerTip.w:before,
|
||||||
|
#powerTip.e:after, #powerTip.e:before,
|
||||||
|
#powerTip.ne:after, #powerTip.ne:before,
|
||||||
|
#powerTip.se:after, #powerTip.se:before,
|
||||||
|
#powerTip.nw:after, #powerTip.nw:before,
|
||||||
|
#powerTip.sw:after, #powerTip.sw:before {
|
||||||
|
border: solid transparent;
|
||||||
|
content: " ";
|
||||||
|
height: 0;
|
||||||
|
width: 0;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.n:after, #powerTip.s:after,
|
||||||
|
#powerTip.w:after, #powerTip.e:after,
|
||||||
|
#powerTip.nw:after, #powerTip.ne:after,
|
||||||
|
#powerTip.sw:after, #powerTip.se:after {
|
||||||
|
border-color: rgba(255, 255, 255, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.n:before, #powerTip.s:before,
|
||||||
|
#powerTip.w:before, #powerTip.e:before,
|
||||||
|
#powerTip.nw:before, #powerTip.ne:before,
|
||||||
|
#powerTip.sw:before, #powerTip.se:before {
|
||||||
|
border-color: rgba(128, 128, 128, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.n:after, #powerTip.n:before,
|
||||||
|
#powerTip.ne:after, #powerTip.ne:before,
|
||||||
|
#powerTip.nw:after, #powerTip.nw:before {
|
||||||
|
top: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
|
||||||
|
border-top-color: #FFFFFF;
|
||||||
|
border-width: 10px;
|
||||||
|
margin: 0px -10px;
|
||||||
|
}
|
||||||
|
#powerTip.n:before {
|
||||||
|
border-top-color: #808080;
|
||||||
|
border-width: 11px;
|
||||||
|
margin: 0px -11px;
|
||||||
|
}
|
||||||
|
#powerTip.n:after, #powerTip.n:before {
|
||||||
|
left: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.nw:after, #powerTip.nw:before {
|
||||||
|
right: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.ne:after, #powerTip.ne:before {
|
||||||
|
left: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.s:after, #powerTip.s:before,
|
||||||
|
#powerTip.se:after, #powerTip.se:before,
|
||||||
|
#powerTip.sw:after, #powerTip.sw:before {
|
||||||
|
bottom: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
|
||||||
|
border-bottom-color: #FFFFFF;
|
||||||
|
border-width: 10px;
|
||||||
|
margin: 0px -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
|
||||||
|
border-bottom-color: #808080;
|
||||||
|
border-width: 11px;
|
||||||
|
margin: 0px -11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.s:after, #powerTip.s:before {
|
||||||
|
left: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.sw:after, #powerTip.sw:before {
|
||||||
|
right: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.se:after, #powerTip.se:before {
|
||||||
|
left: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.e:after, #powerTip.e:before {
|
||||||
|
left: 100%;
|
||||||
|
}
|
||||||
|
#powerTip.e:after {
|
||||||
|
border-left-color: #FFFFFF;
|
||||||
|
border-width: 10px;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -10px;
|
||||||
|
}
|
||||||
|
#powerTip.e:before {
|
||||||
|
border-left-color: #808080;
|
||||||
|
border-width: 11px;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.w:after, #powerTip.w:before {
|
||||||
|
right: 100%;
|
||||||
|
}
|
||||||
|
#powerTip.w:after {
|
||||||
|
border-right-color: #FFFFFF;
|
||||||
|
border-width: 10px;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -10px;
|
||||||
|
}
|
||||||
|
#powerTip.w:before {
|
||||||
|
border-right-color: #808080;
|
||||||
|
border-width: 11px;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -11px;
|
||||||
|
}
|
||||||
|
|
||||||
@media print
|
@media print
|
||||||
{
|
{
|
||||||
#top { display: none; }
|
#top { display: none; }
|
||||||
@@ -1182,3 +1661,72 @@ tr.heading h2 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* @group Markdown */
|
||||||
|
|
||||||
|
table.markdownTable {
|
||||||
|
border-collapse:collapse;
|
||||||
|
margin-top: 4px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.markdownTable td, table.markdownTable th {
|
||||||
|
border: 1px solid #2D4068;
|
||||||
|
padding: 3px 7px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.markdownTable tr {
|
||||||
|
}
|
||||||
|
|
||||||
|
th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
|
||||||
|
background-color: #374F7F;
|
||||||
|
color: #FFFFFF;
|
||||||
|
font-size: 110%;
|
||||||
|
padding-bottom: 4px;
|
||||||
|
padding-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.markdownTableHeadLeft, td.markdownTableBodyLeft {
|
||||||
|
text-align: left
|
||||||
|
}
|
||||||
|
|
||||||
|
th.markdownTableHeadRight, td.markdownTableBodyRight {
|
||||||
|
text-align: right
|
||||||
|
}
|
||||||
|
|
||||||
|
th.markdownTableHeadCenter, td.markdownTableBodyCenter {
|
||||||
|
text-align: center
|
||||||
|
}
|
||||||
|
|
||||||
|
.DocNodeRTL {
|
||||||
|
text-align: right;
|
||||||
|
direction: rtl;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DocNodeLTR {
|
||||||
|
text-align: left;
|
||||||
|
direction: ltr;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.DocNodeRTL {
|
||||||
|
width: auto;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.DocNodeLTR {
|
||||||
|
width: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
tt, code, kbd, samp
|
||||||
|
{
|
||||||
|
display: inline-block;
|
||||||
|
direction:ltr;
|
||||||
|
}
|
||||||
|
/* @end */
|
||||||
|
|
||||||
|
u {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.7 KiB |
26
doc/html/doxygen.svg
Normal file
|
After Width: | Height: | Size: 15 KiB |
@@ -1,3 +1,27 @@
|
|||||||
|
/*
|
||||||
|
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||||
|
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
@licend The above is the entire license notice for the JavaScript code in this file
|
||||||
|
*/
|
||||||
function toggleVisibility(linkObj)
|
function toggleVisibility(linkObj)
|
||||||
{
|
{
|
||||||
var base = $(linkObj).attr('id');
|
var base = $(linkObj).attr('id');
|
||||||
@@ -24,19 +48,20 @@ function updateStripes()
|
|||||||
$('table.directory tr').
|
$('table.directory tr').
|
||||||
removeClass('even').filter(':visible:even').addClass('even');
|
removeClass('even').filter(':visible:even').addClass('even');
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleLevel(level)
|
function toggleLevel(level)
|
||||||
{
|
{
|
||||||
$('table.directory tr').each(function(){
|
$('table.directory tr').each(function() {
|
||||||
var l = this.id.split('_').length-1;
|
var l = this.id.split('_').length-1;
|
||||||
var i = $('#img'+this.id.substring(3));
|
var i = $('#img'+this.id.substring(3));
|
||||||
var a = $('#arr'+this.id.substring(3));
|
var a = $('#arr'+this.id.substring(3));
|
||||||
if (l<level+1) {
|
if (l<level+1) {
|
||||||
i.attr('src','ftv2folderopen.png');
|
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
|
||||||
a.attr('src','ftv2mnode.png');
|
a.html('▼');
|
||||||
$(this).show();
|
$(this).show();
|
||||||
} else if (l==level+1) {
|
} else if (l==level+1) {
|
||||||
i.attr('src','ftv2folderclosed.png');
|
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
|
||||||
a.attr('src','ftv2pnode.png');
|
a.html('►');
|
||||||
$(this).show();
|
$(this).show();
|
||||||
} else {
|
} else {
|
||||||
$(this).hide();
|
$(this).hide();
|
||||||
@@ -47,34 +72,33 @@ function toggleLevel(level)
|
|||||||
|
|
||||||
function toggleFolder(id)
|
function toggleFolder(id)
|
||||||
{
|
{
|
||||||
//The clicked row
|
// the clicked row
|
||||||
var currentRow = $('#row_'+id);
|
var currentRow = $('#row_'+id);
|
||||||
var currentRowImages = currentRow.find("img");
|
|
||||||
|
|
||||||
//All rows after the clicked row
|
// all rows after the clicked row
|
||||||
var rows = currentRow.nextAll("tr");
|
var rows = currentRow.nextAll("tr");
|
||||||
|
|
||||||
//Only match elements AFTER this one (can't hide elements before)
|
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||||
var childRows = rows.filter(function() {
|
|
||||||
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
|
||||||
return this.id.match(re);
|
|
||||||
});
|
|
||||||
|
|
||||||
//First row is visible we are HIDING
|
// only match elements AFTER this one (can't hide elements before)
|
||||||
|
var childRows = rows.filter(function() { return this.id.match(re); });
|
||||||
|
|
||||||
|
// first row is visible we are HIDING
|
||||||
if (childRows.filter(':first').is(':visible')===true) {
|
if (childRows.filter(':first').is(':visible')===true) {
|
||||||
currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png');
|
// replace down arrow by right arrow for current row
|
||||||
currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png');
|
var currentRowSpans = currentRow.find("span");
|
||||||
rows.filter("[id^=row_"+id+"]").hide();
|
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||||
} else { //We are SHOWING
|
currentRowSpans.filter(".arrow").html('►');
|
||||||
//All sub images
|
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
|
||||||
var childImages = childRows.find("img");
|
} else { // we are SHOWING
|
||||||
var childImg = childImages.filter("[id^=img]");
|
// replace right arrow by down arrow for current row
|
||||||
var childArr = childImages.filter("[id^=arr]");
|
var currentRowSpans = currentRow.find("span");
|
||||||
|
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
|
||||||
currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row
|
currentRowSpans.filter(".arrow").html('▼');
|
||||||
currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row
|
// replace down arrows by right arrows for child rows
|
||||||
childImg.attr('src','ftv2folderclosed.png'); //children closed
|
var childRowsSpans = childRows.find("span");
|
||||||
childArr.attr('src','ftv2pnode.png'); //children closed
|
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||||
|
childRowsSpans.filter(".arrow").html('►');
|
||||||
childRows.show(); //show all children
|
childRows.show(); //show all children
|
||||||
}
|
}
|
||||||
updateStripes();
|
updateStripes();
|
||||||
@@ -94,4 +118,4 @@ function toggleInherit(id)
|
|||||||
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* @license-end */
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 616 B After Width: | Height: | Size: 616 B |
|
Before Width: | Height: | Size: 597 B After Width: | Height: | Size: 597 B |
|
Before Width: | Height: | Size: 86 B |
|
Before Width: | Height: | Size: 453 B |
|
Before Width: | Height: | Size: 86 B |
|
Before Width: | Height: | Size: 746 B |
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 403 B |
|
Before Width: | Height: | Size: 86 B |
|
Before Width: | Height: | Size: 388 B |
|
Before Width: | Height: | Size: 229 B |
|
Before Width: | Height: | Size: 229 B |
|
Before Width: | Height: | Size: 86 B |
@@ -1,18 +1,17 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>TurboJPEG: Data Fields</title>
|
<title>TurboJPEG: Data Fields</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
||||||
</script>
|
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG
|
||||||
 <span id="projectnumber">2.0</span>
|
 <span id="projectnumber">2.1.4</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -32,53 +31,29 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
<!-- Generated by Doxygen 1.8.20 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<ul class="tablist">
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<script type="text/javascript">
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
$(function() {
|
||||||
<li>
|
initMenu('',true,false,'search.php','Search');
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
$(document).ready(function() { init_search(); });
|
||||||
<span class="left">
|
});
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
/* @license-end */</script>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
<div id="main-nav"></div>
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
||||||
alt=""/>
|
|
||||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
||||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
||||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
||||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
||||||
</span><span class="right">
|
|
||||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="navrow2" class="tabs2">
|
|
||||||
<ul class="tablist">
|
|
||||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
|
||||||
<li><a href="classes.html"><span>Data Structure Index</span></a></li>
|
|
||||||
<li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="navrow3" class="tabs2">
|
|
||||||
<ul class="tablist">
|
|
||||||
<li class="current"><a href="functions.html"><span>All</span></a></li>
|
|
||||||
<li><a href="functions_vars.html"><span>Variables</span></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
</div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -90,7 +65,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div><ul>
|
<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div><ul>
|
||||||
<li>customFilter
|
<li>customFilter
|
||||||
: <a class="el" href="structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1">tjtransform</a>
|
: <a class="el" href="structtjtransform.html#afd7fc262df33f741e120ef4183202ef5">tjtransform</a>
|
||||||
</li>
|
</li>
|
||||||
<li>data
|
<li>data
|
||||||
: <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a>
|
: <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a>
|
||||||
@@ -126,9 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
||||||
</a> 1.8.3.1
|
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>TurboJPEG: Data Fields - Variables</title>
|
<title>TurboJPEG: Data Fields - Variables</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
||||||
</script>
|
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG
|
||||||
 <span id="projectnumber">2.0</span>
|
 <span id="projectnumber">2.1.4</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -32,53 +31,29 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
<!-- Generated by Doxygen 1.8.20 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<ul class="tablist">
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<script type="text/javascript">
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
$(function() {
|
||||||
<li>
|
initMenu('',true,false,'search.php','Search');
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
$(document).ready(function() { init_search(); });
|
||||||
<span class="left">
|
});
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
/* @license-end */</script>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
<div id="main-nav"></div>
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
||||||
alt=""/>
|
|
||||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
||||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
||||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
||||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
||||||
</span><span class="right">
|
|
||||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="navrow2" class="tabs2">
|
|
||||||
<ul class="tablist">
|
|
||||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
|
||||||
<li><a href="classes.html"><span>Data Structure Index</span></a></li>
|
|
||||||
<li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="navrow3" class="tabs2">
|
|
||||||
<ul class="tablist">
|
|
||||||
<li><a href="functions.html"><span>All</span></a></li>
|
|
||||||
<li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
</div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -90,7 +65,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<div class="contents">
|
<div class="contents">
|
||||||
 <ul>
|
 <ul>
|
||||||
<li>customFilter
|
<li>customFilter
|
||||||
: <a class="el" href="structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1">tjtransform</a>
|
: <a class="el" href="structtjtransform.html#afd7fc262df33f741e120ef4183202ef5">tjtransform</a>
|
||||||
</li>
|
</li>
|
||||||
<li>data
|
<li>data
|
||||||
: <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a>
|
: <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a>
|
||||||
@@ -126,9 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
||||||
</a> 1.8.3.1
|
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>TurboJPEG: Main Page</title>
|
<title>TurboJPEG: Main Page</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
||||||
</script>
|
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG
|
||||||
 <span id="projectnumber">2.0</span>
|
 <span id="projectnumber">2.1.4</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -32,40 +31,29 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
<!-- Generated by Doxygen 1.8.20 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<ul class="tablist">
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<li class="current"><a href="index.html"><span>Main Page</span></a></li>
|
<script type="text/javascript">
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
$(function() {
|
||||||
<li>
|
initMenu('',true,false,'search.php','Search');
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
$(document).ready(function() { init_search(); });
|
||||||
<span class="left">
|
});
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
/* @license-end */</script>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
<div id="main-nav"></div>
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
||||||
alt=""/>
|
|
||||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
||||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
||||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
||||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
||||||
</span><span class="right">
|
|
||||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
</div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -82,9 +70,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
||||||
</a> 1.8.3.1
|
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
43
doc/html/jquery.js
vendored
51
doc/html/menu.js
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||||
|
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
@licend The above is the entire license notice for the JavaScript code in this file
|
||||||
|
*/
|
||||||
|
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
|
||||||
|
function makeTree(data,relPath) {
|
||||||
|
var result='';
|
||||||
|
if ('children' in data) {
|
||||||
|
result+='<ul>';
|
||||||
|
for (var i in data.children) {
|
||||||
|
result+='<li><a href="'+relPath+data.children[i].url+'">'+
|
||||||
|
data.children[i].text+'</a>'+
|
||||||
|
makeTree(data.children[i],relPath)+'</li>';
|
||||||
|
}
|
||||||
|
result+='</ul>';
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#main-nav').append(makeTree(menudata,relPath));
|
||||||
|
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
|
||||||
|
if (searchEnabled) {
|
||||||
|
if (serverSide) {
|
||||||
|
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+relPath+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.svg" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
|
||||||
|
} else {
|
||||||
|
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.svg" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.svg" alt=""/></a></span></div></li>');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$('#main-menu').smartmenus();
|
||||||
|
}
|
||||||
|
/* @license-end */
|
||||||
33
doc/html/menudata.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||||
|
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
@licend The above is the entire license notice for the JavaScript code in this file
|
||||||
|
*/
|
||||||
|
var menudata={children:[
|
||||||
|
{text:"Main Page",url:"index.html"},
|
||||||
|
{text:"Modules",url:"modules.html"},
|
||||||
|
{text:"Data Structures",url:"annotated.html",children:[
|
||||||
|
{text:"Data Structures",url:"annotated.html"},
|
||||||
|
{text:"Data Structure Index",url:"classes.html"},
|
||||||
|
{text:"Data Fields",url:"functions.html",children:[
|
||||||
|
{text:"All",url:"functions.html"},
|
||||||
|
{text:"Variables",url:"functions_vars.html"}]}]}]}
|
||||||
@@ -1,18 +1,17 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>TurboJPEG: Modules</title>
|
<title>TurboJPEG: Modules</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
||||||
</script>
|
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG
|
||||||
 <span id="projectnumber">2.0</span>
|
 <span id="projectnumber">2.1.4</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -32,40 +31,29 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
<!-- Generated by Doxygen 1.8.20 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<ul class="tablist">
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<script type="text/javascript">
|
||||||
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
$(function() {
|
||||||
<li>
|
initMenu('',true,false,'search.php','Search');
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
$(document).ready(function() { init_search(); });
|
||||||
<span class="left">
|
});
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
/* @license-end */</script>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
<div id="main-nav"></div>
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
||||||
alt=""/>
|
|
||||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
||||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
||||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
||||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
||||||
</span><span class="right">
|
|
||||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
</div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -81,15 +69,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="textblock">Here is a list of all modules:</div><div class="directory">
|
<div class="textblock">Here is a list of all modules:</div><div class="directory">
|
||||||
<table class="directory">
|
<table class="directory">
|
||||||
<tr id="row_0_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group___turbo_j_p_e_g.html" target="_self">TurboJPEG</a></td><td class="desc">TurboJPEG API</td></tr>
|
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="group___turbo_j_p_e_g.html" target="_self">TurboJPEG</a></td><td class="desc">TurboJPEG API </td></tr>
|
||||||
</table>
|
</table>
|
||||||
</div><!-- directory -->
|
</div><!-- directory -->
|
||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
||||||
</a> 1.8.3.1
|
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
<script type="text/javascript" src="all_63.js"></script>
|
<script type="text/javascript" src="all_0.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
@@ -11,15 +11,25 @@
|
|||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div id="SRResults"></div>
|
<div id="SRResults"></div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
createResults();
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
document.getElementById("Loading").style.display="none";
|
document.getElementById("Loading").style.display="none";
|
||||||
document.getElementById("NoMatches").style.display="none";
|
document.getElementById("NoMatches").style.display="none";
|
||||||
var searchResults = new SearchResults("searchResults");
|
var searchResults = new SearchResults("searchResults");
|
||||||
searchResults.Search();
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
4
doc/html/search/all_0.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['customfilter_0',['customFilter',['../structtjtransform.html#afd7fc262df33f741e120ef4183202ef5',1,'tjtransform']]]
|
||||||
|
];
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
<script type="text/javascript" src="all_64.js"></script>
|
<script type="text/javascript" src="all_1.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
@@ -11,15 +11,25 @@
|
|||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div id="SRResults"></div>
|
<div id="SRResults"></div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
createResults();
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
document.getElementById("Loading").style.display="none";
|
document.getElementById("Loading").style.display="none";
|
||||||
document.getElementById("NoMatches").style.display="none";
|
document.getElementById("NoMatches").style.display="none";
|
||||||
var searchResults = new SearchResults("searchResults");
|
var searchResults = new SearchResults("searchResults");
|
||||||
searchResults.Search();
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
5
doc/html/search/all_1.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['data_1',['data',['../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3',1,'tjtransform']]],
|
||||||
|
['denom_2',['denom',['../structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3',1,'tjscalingfactor']]]
|
||||||
|
];
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
<script type="text/javascript" src="all_68.js"></script>
|
<script type="text/javascript" src="all_2.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
@@ -11,15 +11,25 @@
|
|||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div id="SRResults"></div>
|
<div id="SRResults"></div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
createResults();
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
document.getElementById("Loading").style.display="none";
|
document.getElementById("Loading").style.display="none";
|
||||||
document.getElementById("NoMatches").style.display="none";
|
document.getElementById("NoMatches").style.display="none";
|
||||||
var searchResults = new SearchResults("searchResults");
|
var searchResults = new SearchResults("searchResults");
|
||||||
searchResults.Search();
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
4
doc/html/search/all_2.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['h_3',['h',['../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115',1,'tjregion']]]
|
||||||
|
];
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
<script type="text/javascript" src="all_6e.js"></script>
|
<script type="text/javascript" src="all_3.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
@@ -11,15 +11,25 @@
|
|||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div id="SRResults"></div>
|
<div id="SRResults"></div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
createResults();
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
document.getElementById("Loading").style.display="none";
|
document.getElementById("Loading").style.display="none";
|
||||||
document.getElementById("NoMatches").style.display="none";
|
document.getElementById("NoMatches").style.display="none";
|
||||||
var searchResults = new SearchResults("searchResults");
|
var searchResults = new SearchResults("searchResults");
|
||||||
searchResults.Search();
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
4
doc/html/search/all_3.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['num_4',['num',['../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec',1,'tjscalingfactor']]]
|
||||||
|
];
|
||||||
36
doc/html/search/all_4.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_4.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
5
doc/html/search/all_4.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['op_5',['op',['../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498',1,'tjtransform']]],
|
||||||
|
['options_6',['options',['../structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6',1,'tjtransform']]]
|
||||||
|
];
|
||||||
36
doc/html/search/all_5.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_5.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
4
doc/html/search/all_5.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['r_7',['r',['../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf',1,'tjtransform']]]
|
||||||
|
];
|
||||||
36
doc/html/search/all_6.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_6.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
103
doc/html/search/all_6.js
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['tj_5fnumcs_8',['TJ_NUMCS',['../group___turbo_j_p_e_g.html#ga39f57a6fb02d9cf32e7b6890099b5a71',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumerr_9',['TJ_NUMERR',['../group___turbo_j_p_e_g.html#ga79bde1b4a3e2351e00887e47781b966e',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumpf_10',['TJ_NUMPF',['../group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumsamp_11',['TJ_NUMSAMP',['../group___turbo_j_p_e_g.html#ga5ef3d169162ce77ce348e292a0b7477c',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumxop_12',['TJ_NUMXOP',['../group___turbo_j_p_e_g.html#ga0f6dbd18adf38b7d46ac547f0f4d562c',1,'turbojpeg.h']]],
|
||||||
|
['tjalloc_13',['tjAlloc',['../group___turbo_j_p_e_g.html#gaec627dd4c5f30b7a775a7aea3bec5d83',1,'turbojpeg.h']]],
|
||||||
|
['tjalphaoffset_14',['tjAlphaOffset',['../group___turbo_j_p_e_g.html#ga5af0ab065feefd526debf1e20c43e837',1,'turbojpeg.h']]],
|
||||||
|
['tjblueoffset_15',['tjBlueOffset',['../group___turbo_j_p_e_g.html#ga84e2e35d3f08025f976ec1ec53693dea',1,'turbojpeg.h']]],
|
||||||
|
['tjbufsize_16',['tjBufSize',['../group___turbo_j_p_e_g.html#ga67ac12fee79073242cb216e07c9f1f90',1,'turbojpeg.h']]],
|
||||||
|
['tjbufsizeyuv2_17',['tjBufSizeYUV2',['../group___turbo_j_p_e_g.html#ga2be2b9969d4df9ecce9b05deed273194',1,'turbojpeg.h']]],
|
||||||
|
['tjcompress2_18',['tjCompress2',['../group___turbo_j_p_e_g.html#gafbdce0112fd78fd38efae841443a9bcf',1,'turbojpeg.h']]],
|
||||||
|
['tjcompressfromyuv_19',['tjCompressFromYUV',['../group___turbo_j_p_e_g.html#ga7622a459b79aa1007e005b58783f875b',1,'turbojpeg.h']]],
|
||||||
|
['tjcompressfromyuvplanes_20',['tjCompressFromYUVPlanes',['../group___turbo_j_p_e_g.html#ga29ec5dfbd2d84b8724e951d6fa0d5d9e',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_21',['TJCS',['../group___turbo_j_p_e_g.html#ga4f83ad3368e0e29d1957be0efa7c3720',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fcmyk_22',['TJCS_CMYK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a6c8b636152ac8195b869587db315ee53',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fgray_23',['TJCS_GRAY',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720ab3e7d6a87f695e45b81c1b5262b5a50a',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5frgb_24',['TJCS_RGB',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a677cb7ccb85c4038ac41964a2e09e555',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fycbcr_25',['TJCS_YCbCr',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a7389b8f65bb387ffedce3efd0d78ec75',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fycck_26',['TJCS_YCCK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a53839e0fe867b76b58d16b0a1a7c598e',1,'turbojpeg.h']]],
|
||||||
|
['tjdecodeyuv_27',['tjDecodeYUV',['../group___turbo_j_p_e_g.html#ga70abbf38f77a26fd6da8813bef96f695',1,'turbojpeg.h']]],
|
||||||
|
['tjdecodeyuvplanes_28',['tjDecodeYUVPlanes',['../group___turbo_j_p_e_g.html#ga10e837c07fa9d25770565b237d3898d9',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompress2_29',['tjDecompress2',['../group___turbo_j_p_e_g.html#gae9eccef8b682a48f43a9117c231ed013',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompressheader3_30',['tjDecompressHeader3',['../group___turbo_j_p_e_g.html#ga0595681096bba7199cc6f3533cb25f77',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompresstoyuv2_31',['tjDecompressToYUV2',['../group___turbo_j_p_e_g.html#ga04d1e839ff9a0860dd1475cff78d3364',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompresstoyuvplanes_32',['tjDecompressToYUVPlanes',['../group___turbo_j_p_e_g.html#gaa59f901a5258ada5bd0185ad59368540',1,'turbojpeg.h']]],
|
||||||
|
['tjdestroy_33',['tjDestroy',['../group___turbo_j_p_e_g.html#ga75f355fa27225ba1a4ee392c852394d2',1,'turbojpeg.h']]],
|
||||||
|
['tjencodeyuv3_34',['tjEncodeYUV3',['../group___turbo_j_p_e_g.html#gac519b922cdf446e97d0cdcba513636bf',1,'turbojpeg.h']]],
|
||||||
|
['tjencodeyuvplanes_35',['tjEncodeYUVPlanes',['../group___turbo_j_p_e_g.html#gae2d04c72457fe7f4d60cf78ab1b1feb1',1,'turbojpeg.h']]],
|
||||||
|
['tjerr_36',['TJERR',['../group___turbo_j_p_e_g.html#gafbc17cfa57d0d5d11fea35ac025950fe',1,'turbojpeg.h']]],
|
||||||
|
['tjerr_5ffatal_37',['TJERR_FATAL',['../group___turbo_j_p_e_g.html#ggafbc17cfa57d0d5d11fea35ac025950feafc9cceeada13122b09e4851e3788039a',1,'turbojpeg.h']]],
|
||||||
|
['tjerr_5fwarning_38',['TJERR_WARNING',['../group___turbo_j_p_e_g.html#ggafbc17cfa57d0d5d11fea35ac025950fea342dd6e2aedb47bb257b4e7568329b59',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5faccuratedct_39',['TJFLAG_ACCURATEDCT',['../group___turbo_j_p_e_g.html#gacb233cfd722d66d1ccbf48a7de81f0e0',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5fbottomup_40',['TJFLAG_BOTTOMUP',['../group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5ffastdct_41',['TJFLAG_FASTDCT',['../group___turbo_j_p_e_g.html#gaabce235db80d3f698b27f36cbd453da2',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5ffastupsample_42',['TJFLAG_FASTUPSAMPLE',['../group___turbo_j_p_e_g.html#ga4ee4506c81177a06f77e2504a22efd2d',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5flimitscans_43',['TJFLAG_LIMITSCANS',['../group___turbo_j_p_e_g.html#ga163e6482dc5096831feef9c79ff3f805',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5fnorealloc_44',['TJFLAG_NOREALLOC',['../group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5fprogressive_45',['TJFLAG_PROGRESSIVE',['../group___turbo_j_p_e_g.html#ga43b426750b46190a25d34a67ef76df1b',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5fstoponwarning_46',['TJFLAG_STOPONWARNING',['../group___turbo_j_p_e_g.html#ga519cfa4ef6c18d9e5b455fdf59306a3a',1,'turbojpeg.h']]],
|
||||||
|
['tjfree_47',['tjFree',['../group___turbo_j_p_e_g.html#gaea863d2da0cdb609563aabdf9196514b',1,'turbojpeg.h']]],
|
||||||
|
['tjgeterrorcode_48',['tjGetErrorCode',['../group___turbo_j_p_e_g.html#ga414feeffbf860ebd31c745df203de410',1,'turbojpeg.h']]],
|
||||||
|
['tjgeterrorstr2_49',['tjGetErrorStr2',['../group___turbo_j_p_e_g.html#ga1ead8574f9f39fbafc6b497124e7aafa',1,'turbojpeg.h']]],
|
||||||
|
['tjgetscalingfactors_50',['tjGetScalingFactors',['../group___turbo_j_p_e_g.html#gac3854476006b10787bd128f7ede48057',1,'turbojpeg.h']]],
|
||||||
|
['tjgreenoffset_51',['tjGreenOffset',['../group___turbo_j_p_e_g.html#ga82d6e35da441112a411da41923c0ba2f',1,'turbojpeg.h']]],
|
||||||
|
['tjhandle_52',['tjhandle',['../group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763',1,'turbojpeg.h']]],
|
||||||
|
['tjinitcompress_53',['tjInitCompress',['../group___turbo_j_p_e_g.html#ga9d63a05fc6d813f4aae06107041a37e8',1,'turbojpeg.h']]],
|
||||||
|
['tjinitdecompress_54',['tjInitDecompress',['../group___turbo_j_p_e_g.html#ga52300eac3f3d9ef4bab303bc244f62d3',1,'turbojpeg.h']]],
|
||||||
|
['tjinittransform_55',['tjInitTransform',['../group___turbo_j_p_e_g.html#ga928beff6ac248ceadf01089fc6b41957',1,'turbojpeg.h']]],
|
||||||
|
['tjloadimage_56',['tjLoadImage',['../group___turbo_j_p_e_g.html#gaffbd83c375e79f5db4b5c5d8ad4466e7',1,'turbojpeg.h']]],
|
||||||
|
['tjmcuheight_57',['tjMCUHeight',['../group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf',1,'turbojpeg.h']]],
|
||||||
|
['tjmcuwidth_58',['tjMCUWidth',['../group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c',1,'turbojpeg.h']]],
|
||||||
|
['tjpad_59',['TJPAD',['../group___turbo_j_p_e_g.html#ga0aba955473315e405295d978f0c16511',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_60',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fabgr_61',['TJPF_ABGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fargb_62',['TJPF_ARGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgr_63',['TJPF_BGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgra_64',['TJPF_BGRA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgrx_65',['TJPF_BGRX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fcmyk_66',['TJPF_CMYK',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7f5100ec44c91994e243f1cf55553f8b',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fgray_67',['TJPF_GRAY',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgb_68',['TJPF_RGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgba_69',['TJPF_RGBA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgbx_70',['TJPF_RGBX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5funknown_71',['TJPF_UNKNOWN',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa84c1a6cead7952998e2fb895844a21ed',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fxbgr_72',['TJPF_XBGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fxrgb_73',['TJPF_XRGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84',1,'turbojpeg.h']]],
|
||||||
|
['tjpixelsize_74',['tjPixelSize',['../group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c',1,'turbojpeg.h']]],
|
||||||
|
['tjplaneheight_75',['tjPlaneHeight',['../group___turbo_j_p_e_g.html#ga1a209696c6a80748f20e134b3c64789f',1,'turbojpeg.h']]],
|
||||||
|
['tjplanesizeyuv_76',['tjPlaneSizeYUV',['../group___turbo_j_p_e_g.html#gab4ab7b24f6e797d79abaaa670373961d',1,'turbojpeg.h']]],
|
||||||
|
['tjplanewidth_77',['tjPlaneWidth',['../group___turbo_j_p_e_g.html#ga63fb66bb1e36c74008c4634360becbb1',1,'turbojpeg.h']]],
|
||||||
|
['tjredoffset_78',['tjRedOffset',['../group___turbo_j_p_e_g.html#gadd9b446742ac8a3923f7992c7988fea8',1,'turbojpeg.h']]],
|
||||||
|
['tjregion_79',['tjregion',['../structtjregion.html',1,'']]],
|
||||||
|
['tjsamp_80',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f411_81',['TJSAMP_411',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a28ec62575e5ea295c3fde3001dc628e2',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f420_82',['TJSAMP_420',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f422_83',['TJSAMP_422',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f440_84',['TJSAMP_440',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f444_85',['TJSAMP_444',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5fgray_86',['TJSAMP_GRAY',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248',1,'turbojpeg.h']]],
|
||||||
|
['tjsaveimage_87',['tjSaveImage',['../group___turbo_j_p_e_g.html#ga6f445b22d8933ae4815b3370a538d879',1,'turbojpeg.h']]],
|
||||||
|
['tjscaled_88',['TJSCALED',['../group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df',1,'turbojpeg.h']]],
|
||||||
|
['tjscalingfactor_89',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
|
||||||
|
['tjtransform_90',['tjtransform',['../structtjtransform.html',1,'tjtransform'],['../group___turbo_j_p_e_g.html#ga504805ec0161f1b505397ca0118bf8fd',1,'tjtransform(): turbojpeg.h'],['../group___turbo_j_p_e_g.html#ga9cb8abf4cc91881e04a0329b2270be25',1,'tjTransform(tjhandle handle, const unsigned char *jpegBuf, unsigned long jpegSize, int n, unsigned char **dstBufs, unsigned long *dstSizes, tjtransform *transforms, int flags): turbojpeg.h']]],
|
||||||
|
['tjxop_91',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fhflip_92',['TJXOP_HFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fnone_93',['TJXOP_NONE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot180_94',['TJXOP_ROT180',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot270_95',['TJXOP_ROT270',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot90_96',['TJXOP_ROT90',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5ftranspose_97',['TJXOP_TRANSPOSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5ftransverse_98',['TJXOP_TRANSVERSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fvflip_99',['TJXOP_VFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fcopynone_100',['TJXOPT_COPYNONE',['../group___turbo_j_p_e_g.html#ga153b468cfb905d0de61706c838986fe8',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fcrop_101',['TJXOPT_CROP',['../group___turbo_j_p_e_g.html#ga9c771a757fc1294add611906b89ab2d2',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fgray_102',['TJXOPT_GRAY',['../group___turbo_j_p_e_g.html#ga3acee7b48ade1b99e5588736007c2589',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fnooutput_103',['TJXOPT_NOOUTPUT',['../group___turbo_j_p_e_g.html#gafbf992bbf6e006705886333703ffab31',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fperfect_104',['TJXOPT_PERFECT',['../group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fprogressive_105',['TJXOPT_PROGRESSIVE',['../group___turbo_j_p_e_g.html#gad2371c80674584ecc1a7d75e564cf026',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5ftrim_106',['TJXOPT_TRIM',['../group___turbo_j_p_e_g.html#ga319826b7eb1583c0595bbe7b95428709',1,'turbojpeg.h']]],
|
||||||
|
['turbojpeg_107',['TurboJPEG',['../group___turbo_j_p_e_g.html',1,'']]]
|
||||||
|
];
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['customfilter',['customFilter',['../structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1',1,'tjtransform']]]
|
|
||||||
];
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['data',['data',['../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3',1,'tjtransform']]],
|
|
||||||
['denom',['denom',['../structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3',1,'tjscalingfactor']]]
|
|
||||||
];
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['h',['h',['../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115',1,'tjregion']]]
|
|
||||||
];
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['num',['num',['../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec',1,'tjscalingfactor']]]
|
|
||||||
];
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html><head><title></title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="all_6f.js"></script>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
|
||||||
<div id="SRResults"></div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
createResults();
|
|
||||||
--></script>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
document.getElementById("Loading").style.display="none";
|
|
||||||
document.getElementById("NoMatches").style.display="none";
|
|
||||||
var searchResults = new SearchResults("searchResults");
|
|
||||||
searchResults.Search();
|
|
||||||
--></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['op',['op',['../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498',1,'tjtransform']]],
|
|
||||||
['options',['options',['../structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6',1,'tjtransform']]]
|
|
||||||
];
|
|
||||||
36
doc/html/search/all_7.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_7.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
4
doc/html/search/all_7.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['w_108',['w',['../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42',1,'tjregion']]]
|
||||||
|
];
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html><head><title></title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="all_72.js"></script>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
|
||||||
<div id="SRResults"></div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
createResults();
|
|
||||||
--></script>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
document.getElementById("Loading").style.display="none";
|
|
||||||
document.getElementById("NoMatches").style.display="none";
|
|
||||||
var searchResults = new SearchResults("searchResults");
|
|
||||||
searchResults.Search();
|
|
||||||
--></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['r',['r',['../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf',1,'tjtransform']]]
|
|
||||||
];
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html><head><title></title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="all_74.js"></script>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
|
||||||
<div id="SRResults"></div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
createResults();
|
|
||||||
--></script>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
document.getElementById("Loading").style.display="none";
|
|
||||||
document.getElementById("NoMatches").style.display="none";
|
|
||||||
var searchResults = new SearchResults("searchResults");
|
|
||||||
searchResults.Search();
|
|
||||||
--></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['tj_5fnumcs',['TJ_NUMCS',['../group___turbo_j_p_e_g.html#ga39f57a6fb02d9cf32e7b6890099b5a71',1,'turbojpeg.h']]],
|
|
||||||
['tj_5fnumerr',['TJ_NUMERR',['../group___turbo_j_p_e_g.html#ga79bde1b4a3e2351e00887e47781b966e',1,'turbojpeg.h']]],
|
|
||||||
['tj_5fnumpf',['TJ_NUMPF',['../group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e',1,'turbojpeg.h']]],
|
|
||||||
['tj_5fnumsamp',['TJ_NUMSAMP',['../group___turbo_j_p_e_g.html#ga5ef3d169162ce77ce348e292a0b7477c',1,'turbojpeg.h']]],
|
|
||||||
['tj_5fnumxop',['TJ_NUMXOP',['../group___turbo_j_p_e_g.html#ga0f6dbd18adf38b7d46ac547f0f4d562c',1,'turbojpeg.h']]],
|
|
||||||
['tjalloc',['tjAlloc',['../group___turbo_j_p_e_g.html#gaec627dd4c5f30b7a775a7aea3bec5d83',1,'turbojpeg.h']]],
|
|
||||||
['tjalphaoffset',['tjAlphaOffset',['../group___turbo_j_p_e_g.html#ga5af0ab065feefd526debf1e20c43e837',1,'turbojpeg.h']]],
|
|
||||||
['tjblueoffset',['tjBlueOffset',['../group___turbo_j_p_e_g.html#ga84e2e35d3f08025f976ec1ec53693dea',1,'turbojpeg.h']]],
|
|
||||||
['tjbufsize',['tjBufSize',['../group___turbo_j_p_e_g.html#ga67ac12fee79073242cb216e07c9f1f90',1,'turbojpeg.h']]],
|
|
||||||
['tjbufsizeyuv2',['tjBufSizeYUV2',['../group___turbo_j_p_e_g.html#ga2be2b9969d4df9ecce9b05deed273194',1,'turbojpeg.h']]],
|
|
||||||
['tjcompress2',['tjCompress2',['../group___turbo_j_p_e_g.html#gafbdce0112fd78fd38efae841443a9bcf',1,'turbojpeg.h']]],
|
|
||||||
['tjcompressfromyuv',['tjCompressFromYUV',['../group___turbo_j_p_e_g.html#ga7622a459b79aa1007e005b58783f875b',1,'turbojpeg.h']]],
|
|
||||||
['tjcompressfromyuvplanes',['tjCompressFromYUVPlanes',['../group___turbo_j_p_e_g.html#ga29ec5dfbd2d84b8724e951d6fa0d5d9e',1,'turbojpeg.h']]],
|
|
||||||
['tjcs',['TJCS',['../group___turbo_j_p_e_g.html#ga4f83ad3368e0e29d1957be0efa7c3720',1,'turbojpeg.h']]],
|
|
||||||
['tjcs_5fcmyk',['TJCS_CMYK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a6c8b636152ac8195b869587db315ee53',1,'turbojpeg.h']]],
|
|
||||||
['tjcs_5fgray',['TJCS_GRAY',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720ab3e7d6a87f695e45b81c1b5262b5a50a',1,'turbojpeg.h']]],
|
|
||||||
['tjcs_5frgb',['TJCS_RGB',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a677cb7ccb85c4038ac41964a2e09e555',1,'turbojpeg.h']]],
|
|
||||||
['tjcs_5fycbcr',['TJCS_YCbCr',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a7389b8f65bb387ffedce3efd0d78ec75',1,'turbojpeg.h']]],
|
|
||||||
['tjcs_5fycck',['TJCS_YCCK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a53839e0fe867b76b58d16b0a1a7c598e',1,'turbojpeg.h']]],
|
|
||||||
['tjdecodeyuv',['tjDecodeYUV',['../group___turbo_j_p_e_g.html#ga70abbf38f77a26fd6da8813bef96f695',1,'turbojpeg.h']]],
|
|
||||||
['tjdecodeyuvplanes',['tjDecodeYUVPlanes',['../group___turbo_j_p_e_g.html#ga10e837c07fa9d25770565b237d3898d9',1,'turbojpeg.h']]],
|
|
||||||
['tjdecompress2',['tjDecompress2',['../group___turbo_j_p_e_g.html#gae9eccef8b682a48f43a9117c231ed013',1,'turbojpeg.h']]],
|
|
||||||
['tjdecompressheader3',['tjDecompressHeader3',['../group___turbo_j_p_e_g.html#ga0595681096bba7199cc6f3533cb25f77',1,'turbojpeg.h']]],
|
|
||||||
['tjdecompresstoyuv2',['tjDecompressToYUV2',['../group___turbo_j_p_e_g.html#ga04d1e839ff9a0860dd1475cff78d3364',1,'turbojpeg.h']]],
|
|
||||||
['tjdecompresstoyuvplanes',['tjDecompressToYUVPlanes',['../group___turbo_j_p_e_g.html#gaa59f901a5258ada5bd0185ad59368540',1,'turbojpeg.h']]],
|
|
||||||
['tjdestroy',['tjDestroy',['../group___turbo_j_p_e_g.html#ga75f355fa27225ba1a4ee392c852394d2',1,'turbojpeg.h']]],
|
|
||||||
['tjencodeyuv3',['tjEncodeYUV3',['../group___turbo_j_p_e_g.html#gac519b922cdf446e97d0cdcba513636bf',1,'turbojpeg.h']]],
|
|
||||||
['tjencodeyuvplanes',['tjEncodeYUVPlanes',['../group___turbo_j_p_e_g.html#gae2d04c72457fe7f4d60cf78ab1b1feb1',1,'turbojpeg.h']]],
|
|
||||||
['tjerr',['TJERR',['../group___turbo_j_p_e_g.html#gafbc17cfa57d0d5d11fea35ac025950fe',1,'turbojpeg.h']]],
|
|
||||||
['tjerr_5ffatal',['TJERR_FATAL',['../group___turbo_j_p_e_g.html#ggafbc17cfa57d0d5d11fea35ac025950feafc9cceeada13122b09e4851e3788039a',1,'turbojpeg.h']]],
|
|
||||||
['tjerr_5fwarning',['TJERR_WARNING',['../group___turbo_j_p_e_g.html#ggafbc17cfa57d0d5d11fea35ac025950fea342dd6e2aedb47bb257b4e7568329b59',1,'turbojpeg.h']]],
|
|
||||||
['tjflag_5faccuratedct',['TJFLAG_ACCURATEDCT',['../group___turbo_j_p_e_g.html#gacb233cfd722d66d1ccbf48a7de81f0e0',1,'turbojpeg.h']]],
|
|
||||||
['tjflag_5fbottomup',['TJFLAG_BOTTOMUP',['../group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec',1,'turbojpeg.h']]],
|
|
||||||
['tjflag_5ffastdct',['TJFLAG_FASTDCT',['../group___turbo_j_p_e_g.html#gaabce235db80d3f698b27f36cbd453da2',1,'turbojpeg.h']]],
|
|
||||||
['tjflag_5ffastupsample',['TJFLAG_FASTUPSAMPLE',['../group___turbo_j_p_e_g.html#ga4ee4506c81177a06f77e2504a22efd2d',1,'turbojpeg.h']]],
|
|
||||||
['tjflag_5fnorealloc',['TJFLAG_NOREALLOC',['../group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963',1,'turbojpeg.h']]],
|
|
||||||
['tjflag_5fprogressive',['TJFLAG_PROGRESSIVE',['../group___turbo_j_p_e_g.html#ga43b426750b46190a25d34a67ef76df1b',1,'turbojpeg.h']]],
|
|
||||||
['tjflag_5fstoponwarning',['TJFLAG_STOPONWARNING',['../group___turbo_j_p_e_g.html#ga519cfa4ef6c18d9e5b455fdf59306a3a',1,'turbojpeg.h']]],
|
|
||||||
['tjfree',['tjFree',['../group___turbo_j_p_e_g.html#gaea863d2da0cdb609563aabdf9196514b',1,'turbojpeg.h']]],
|
|
||||||
['tjgeterrorcode',['tjGetErrorCode',['../group___turbo_j_p_e_g.html#ga414feeffbf860ebd31c745df203de410',1,'turbojpeg.h']]],
|
|
||||||
['tjgeterrorstr2',['tjGetErrorStr2',['../group___turbo_j_p_e_g.html#ga1ead8574f9f39fbafc6b497124e7aafa',1,'turbojpeg.h']]],
|
|
||||||
['tjgetscalingfactors',['tjGetScalingFactors',['../group___turbo_j_p_e_g.html#gac3854476006b10787bd128f7ede48057',1,'turbojpeg.h']]],
|
|
||||||
['tjgreenoffset',['tjGreenOffset',['../group___turbo_j_p_e_g.html#ga82d6e35da441112a411da41923c0ba2f',1,'turbojpeg.h']]],
|
|
||||||
['tjhandle',['tjhandle',['../group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763',1,'turbojpeg.h']]],
|
|
||||||
['tjinitcompress',['tjInitCompress',['../group___turbo_j_p_e_g.html#ga9d63a05fc6d813f4aae06107041a37e8',1,'turbojpeg.h']]],
|
|
||||||
['tjinitdecompress',['tjInitDecompress',['../group___turbo_j_p_e_g.html#ga52300eac3f3d9ef4bab303bc244f62d3',1,'turbojpeg.h']]],
|
|
||||||
['tjinittransform',['tjInitTransform',['../group___turbo_j_p_e_g.html#ga928beff6ac248ceadf01089fc6b41957',1,'turbojpeg.h']]],
|
|
||||||
['tjloadimage',['tjLoadImage',['../group___turbo_j_p_e_g.html#gaffbd83c375e79f5db4b5c5d8ad4466e7',1,'turbojpeg.h']]],
|
|
||||||
['tjmcuheight',['tjMCUHeight',['../group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf',1,'turbojpeg.h']]],
|
|
||||||
['tjmcuwidth',['tjMCUWidth',['../group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c',1,'turbojpeg.h']]],
|
|
||||||
['tjpad',['TJPAD',['../group___turbo_j_p_e_g.html#ga0aba955473315e405295d978f0c16511',1,'turbojpeg.h']]],
|
|
||||||
['tjpf',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fabgr',['TJPF_ABGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fargb',['TJPF_ARGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fbgr',['TJPF_BGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fbgra',['TJPF_BGRA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fbgrx',['TJPF_BGRX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fcmyk',['TJPF_CMYK',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7f5100ec44c91994e243f1cf55553f8b',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fgray',['TJPF_GRAY',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5frgb',['TJPF_RGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5frgba',['TJPF_RGBA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5frgbx',['TJPF_RGBX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5funknown',['TJPF_UNKNOWN',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa84c1a6cead7952998e2fb895844a21ed',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fxbgr',['TJPF_XBGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fxrgb',['TJPF_XRGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84',1,'turbojpeg.h']]],
|
|
||||||
['tjpixelsize',['tjPixelSize',['../group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c',1,'turbojpeg.h']]],
|
|
||||||
['tjplaneheight',['tjPlaneHeight',['../group___turbo_j_p_e_g.html#ga1a209696c6a80748f20e134b3c64789f',1,'turbojpeg.h']]],
|
|
||||||
['tjplanesizeyuv',['tjPlaneSizeYUV',['../group___turbo_j_p_e_g.html#gab4ab7b24f6e797d79abaaa670373961d',1,'turbojpeg.h']]],
|
|
||||||
['tjplanewidth',['tjPlaneWidth',['../group___turbo_j_p_e_g.html#ga63fb66bb1e36c74008c4634360becbb1',1,'turbojpeg.h']]],
|
|
||||||
['tjredoffset',['tjRedOffset',['../group___turbo_j_p_e_g.html#gadd9b446742ac8a3923f7992c7988fea8',1,'turbojpeg.h']]],
|
|
||||||
['tjregion',['tjregion',['../structtjregion.html',1,'']]],
|
|
||||||
['tjsamp',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp_5f411',['TJSAMP_411',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a28ec62575e5ea295c3fde3001dc628e2',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp_5f420',['TJSAMP_420',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp_5f422',['TJSAMP_422',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp_5f440',['TJSAMP_440',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp_5f444',['TJSAMP_444',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp_5fgray',['TJSAMP_GRAY',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248',1,'turbojpeg.h']]],
|
|
||||||
['tjsaveimage',['tjSaveImage',['../group___turbo_j_p_e_g.html#ga6f445b22d8933ae4815b3370a538d879',1,'turbojpeg.h']]],
|
|
||||||
['tjscaled',['TJSCALED',['../group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df',1,'turbojpeg.h']]],
|
|
||||||
['tjscalingfactor',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
|
|
||||||
['tjtransform',['tjtransform',['../structtjtransform.html',1,'tjtransform'],['../group___turbo_j_p_e_g.html#gaa29f3189c41be12ec5dee7caec318a31',1,'tjtransform(): turbojpeg.h'],['../group___turbo_j_p_e_g.html#ga9cb8abf4cc91881e04a0329b2270be25',1,'tjTransform(tjhandle handle, const unsigned char *jpegBuf, unsigned long jpegSize, int n, unsigned char **dstBufs, unsigned long *dstSizes, tjtransform *transforms, int flags): turbojpeg.h']]],
|
|
||||||
['tjxop',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5fhflip',['TJXOP_HFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5fnone',['TJXOP_NONE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5frot180',['TJXOP_ROT180',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5frot270',['TJXOP_ROT270',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5frot90',['TJXOP_ROT90',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5ftranspose',['TJXOP_TRANSPOSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5ftransverse',['TJXOP_TRANSVERSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5fvflip',['TJXOP_VFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5fcopynone',['TJXOPT_COPYNONE',['../group___turbo_j_p_e_g.html#ga153b468cfb905d0de61706c838986fe8',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5fcrop',['TJXOPT_CROP',['../group___turbo_j_p_e_g.html#ga9c771a757fc1294add611906b89ab2d2',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5fgray',['TJXOPT_GRAY',['../group___turbo_j_p_e_g.html#ga3acee7b48ade1b99e5588736007c2589',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5fnooutput',['TJXOPT_NOOUTPUT',['../group___turbo_j_p_e_g.html#gafbf992bbf6e006705886333703ffab31',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5fperfect',['TJXOPT_PERFECT',['../group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5fprogressive',['TJXOPT_PROGRESSIVE',['../group___turbo_j_p_e_g.html#gad2371c80674584ecc1a7d75e564cf026',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5ftrim',['TJXOPT_TRIM',['../group___turbo_j_p_e_g.html#ga319826b7eb1583c0595bbe7b95428709',1,'turbojpeg.h']]],
|
|
||||||
['turbojpeg',['TurboJPEG',['../group___turbo_j_p_e_g.html',1,'']]]
|
|
||||||
];
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html><head><title></title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="all_77.js"></script>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
|
||||||
<div id="SRResults"></div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
createResults();
|
|
||||||
--></script>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
document.getElementById("Loading").style.display="none";
|
|
||||||
document.getElementById("NoMatches").style.display="none";
|
|
||||||
var searchResults = new SearchResults("searchResults");
|
|
||||||
searchResults.Search();
|
|
||||||
--></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['w',['w',['../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42',1,'tjregion']]]
|
|
||||||
];
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html><head><title></title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="all_78.js"></script>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
|
||||||
<div id="SRResults"></div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
createResults();
|
|
||||||
--></script>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
document.getElementById("Loading").style.display="none";
|
|
||||||
document.getElementById("NoMatches").style.display="none";
|
|
||||||
var searchResults = new SearchResults("searchResults");
|
|
||||||
searchResults.Search();
|
|
||||||
--></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['x',['x',['../structtjregion.html#a4b6a37a93997091b26a75831fa291ad9',1,'tjregion']]]
|
|
||||||
];
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html><head><title></title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="all_79.js"></script>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
|
||||||
<div id="SRResults"></div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
createResults();
|
|
||||||
--></script>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
document.getElementById("Loading").style.display="none";
|
|
||||||
document.getElementById("NoMatches").style.display="none";
|
|
||||||
var searchResults = new SearchResults("searchResults");
|
|
||||||
searchResults.Search();
|
|
||||||
--></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['y',['y',['../structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2',1,'tjregion']]]
|
|
||||||
];
|
|
||||||
36
doc/html/search/all_8.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_8.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
4
doc/html/search/all_8.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['x_109',['x',['../structtjregion.html#a4b6a37a93997091b26a75831fa291ad9',1,'tjregion']]]
|
||||||
|
];
|
||||||
36
doc/html/search/all_9.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_9.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
4
doc/html/search/all_9.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['y_110',['y',['../structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2',1,'tjregion']]]
|
||||||
|
];
|
||||||
36
doc/html/search/classes_0.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="classes_0.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
6
doc/html/search/classes_0.js
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['tjregion_111',['tjregion',['../structtjregion.html',1,'']]],
|
||||||
|
['tjscalingfactor_112',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
|
||||||
|
['tjtransform_113',['tjtransform',['../structtjtransform.html',1,'']]]
|
||||||
|
];
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html><head><title></title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="classes_74.js"></script>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
|
||||||
<div id="SRResults"></div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
createResults();
|
|
||||||
--></script>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
document.getElementById("Loading").style.display="none";
|
|
||||||
document.getElementById("NoMatches").style.display="none";
|
|
||||||
var searchResults = new SearchResults("searchResults");
|
|
||||||
searchResults.Search();
|
|
||||||
--></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['tjregion',['tjregion',['../structtjregion.html',1,'']]],
|
|
||||||
['tjscalingfactor',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
|
|
||||||
['tjtransform',['tjtransform',['../structtjtransform.html',1,'']]]
|
|
||||||
];
|
|
||||||
|
Before Width: | Height: | Size: 273 B |
31
doc/html/search/close.svg
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 11 11"
|
||||||
|
height="11"
|
||||||
|
width="11"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1">
|
||||||
|
<metadata
|
||||||
|
id="metadata8">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs6" />
|
||||||
|
<path
|
||||||
|
id="path12"
|
||||||
|
d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z "
|
||||||
|
style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
36
doc/html/search/enums_0.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="enums_0.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
8
doc/html/search/enums_0.js
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['tjcs_162',['TJCS',['../group___turbo_j_p_e_g.html#ga4f83ad3368e0e29d1957be0efa7c3720',1,'turbojpeg.h']]],
|
||||||
|
['tjerr_163',['TJERR',['../group___turbo_j_p_e_g.html#gafbc17cfa57d0d5d11fea35ac025950fe',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_164',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_165',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_166',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]]
|
||||||
|
];
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html><head><title></title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="enums_74.js"></script>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
|
||||||
<div id="SRResults"></div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
createResults();
|
|
||||||
--></script>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
document.getElementById("Loading").style.display="none";
|
|
||||||
document.getElementById("NoMatches").style.display="none";
|
|
||||||
var searchResults = new SearchResults("searchResults");
|
|
||||||
searchResults.Search();
|
|
||||||
--></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['tjcs',['TJCS',['../group___turbo_j_p_e_g.html#ga4f83ad3368e0e29d1957be0efa7c3720',1,'turbojpeg.h']]],
|
|
||||||
['tjerr',['TJERR',['../group___turbo_j_p_e_g.html#gafbc17cfa57d0d5d11fea35ac025950fe',1,'turbojpeg.h']]],
|
|
||||||
['tjpf',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
|
|
||||||
['tjxop',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]]
|
|
||||||
];
|
|
||||||