Compare commits
746 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
af265e7562 | ||
|
|
3b19db4e6e | ||
|
|
27f4ff80ce | ||
|
|
1485beaa49 | ||
|
|
8a1526a442 | ||
|
|
edbb7e6d43 | ||
|
|
af1b4c8df4 | ||
|
|
2aac545899 | ||
|
|
0738305ec5 | ||
|
|
98a6455875 | ||
|
|
b99e7590b0 | ||
|
|
28c2e60770 | ||
|
|
fb15efe94f | ||
|
|
7ed186ed79 | ||
|
|
08cbc23334 | ||
|
|
0c0df2d0c7 | ||
|
|
22a6636852 | ||
|
|
94a2b95342 | ||
|
|
9a146f0f23 | ||
|
|
b03ee8b835 | ||
|
|
d260858395 | ||
|
|
dc4a93fab3 | ||
|
|
5da86f7430 | ||
|
|
7bb5cb560e | ||
|
|
7f2eb09d6e | ||
|
|
403cfad611 | ||
|
|
c4105ba7ef | ||
|
|
45cd2ded88 | ||
|
|
74d5b168f7 | ||
|
|
eb1fd4ad34 | ||
|
|
37dd973bef | ||
|
|
78a36f6dc3 | ||
|
|
aa3dd0bd29 | ||
|
|
4f7a8afbb7 | ||
|
|
8c5e78ce29 | ||
|
|
8917c54877 | ||
|
|
cb3642cb0b | ||
|
|
51f1924e77 | ||
|
|
eb0a024af2 | ||
|
|
f579cc11b3 | ||
|
|
2cad2169ae | ||
|
|
c5db99e1aa | ||
|
|
fd56921259 | ||
|
|
a2d2907ff0 | ||
|
|
8162eddf04 | ||
|
|
2e136a7190 | ||
|
|
9f8f683e74 | ||
|
|
4dbc293125 | ||
|
|
59337a67b1 | ||
|
|
08978e58db | ||
|
|
ba22c0f76d | ||
|
|
a405519e96 | ||
|
|
fac8381441 | ||
|
|
5c6a0f0971 | ||
|
|
5e797fa699 | ||
|
|
290ddbf71a | ||
|
|
9171fd4bde | ||
|
|
d0e7c4548a | ||
|
|
dfc63d42ee | ||
|
|
67cb059046 | ||
|
|
5c8cac97c0 | ||
|
|
df3c3dcb9b | ||
|
|
2ee7264d40 | ||
|
|
30cba2a2f8 | ||
|
|
a014845403 | ||
|
|
f3c716a2bc | ||
|
|
6f1534d618 | ||
|
|
9abeff46d8 | ||
|
|
932b5bb0d5 | ||
|
|
e8df8a2d63 | ||
|
|
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 | ||
|
|
5552483db9 | ||
|
|
18edeff4e8 | ||
|
|
a9c41fbc4f | ||
|
|
739ecbc5ec | ||
|
|
4c313544e2 | ||
|
|
173900b1ca | ||
|
|
5d2430f4da | ||
|
|
129f0cb763 | ||
|
|
0a9b972178 | ||
|
|
2849d86aaa | ||
|
|
84d6306f64 | ||
|
|
512a7c3a51 | ||
|
|
e6e952d5d5 | ||
|
|
a72816ed07 | ||
|
|
4d9f256b01 | ||
|
|
b201838d8b | ||
|
|
a1bfc05854 | ||
|
|
2a2970af67 | ||
|
|
97a1575cb8 | ||
|
|
0081c2de20 | ||
|
|
9df5786f05 | ||
|
|
323469818c | ||
|
|
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 | ||
|
|
c78b82bbb1 | ||
|
|
886ddb1786 | ||
|
|
69bd7ed953 | ||
|
|
ed21c3ba6f | ||
|
|
9f01177f72 | ||
|
|
ceb4f8e97c | ||
|
|
44f3f8a544 | ||
|
|
fe0e3c7e88 | ||
|
|
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 | ||
|
|
1a7384c790 | ||
|
|
c302c77d17 | ||
|
|
d523435e18 | ||
|
|
3940a92fa8 | ||
|
|
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 | ||
|
|
d23e3fc586 | ||
|
|
f1d512de2f | ||
|
|
751ce7d9f3 | ||
|
|
ffea183e55 | ||
|
|
3fed7e016b | ||
|
|
6ab61fa1d1 | ||
|
|
fe5b6a1c7c | ||
|
|
8fb32c0a39 | ||
|
|
b3e739028a | ||
|
|
6ee5d5f568 | ||
|
|
fe79f56b77 | ||
|
|
c1037f4380 | ||
|
|
30282a878c | ||
|
|
a46c111d9f | ||
|
|
9120a24743 | ||
|
|
c965dc7a79 | ||
|
|
b9142b21f8 | ||
|
|
7d829bfa30 | ||
|
|
fb6f5e8b01 | ||
|
|
c77783ed41 | ||
|
|
4c5a15c362 | ||
|
|
b797f70012 | ||
|
|
80d77720c3 | ||
|
|
aecee25695 | ||
|
|
ae87a95861 | ||
|
|
b443c541b9 | ||
|
|
cf483eee49 | ||
|
|
70040cb7ee | ||
|
|
3de15e0c34 | ||
|
|
a2291b252d | ||
|
|
219e8e8f65 | ||
|
|
a36deef563 | ||
|
|
6d95c51adf | ||
|
|
b0f92a1d6c | ||
|
|
5ea5482872 | ||
|
|
8cc1277b69 | ||
|
|
77ff3bd66d | ||
|
|
ecf5f9a96a | ||
|
|
00d48d7e8c | ||
|
|
035262a18d | ||
|
|
ed7cab47d9 | ||
|
|
42d679b9fc | ||
|
|
044c22e12f | ||
|
|
1d2320994d | ||
|
|
9a2cf32317 | ||
|
|
6aabca86d3 | ||
|
|
70327296e2 | ||
|
|
379edfd815 | ||
|
|
ada6ea5105 | ||
|
|
167b5a8059 | ||
|
|
f81833aed6 | ||
|
|
4c57ad476c | ||
|
|
00607ec260 | ||
|
|
04d3143a65 | ||
|
|
fdf8903354 | ||
|
|
b34c85ea4a | ||
|
|
166e34213e | ||
|
|
c4675d62e8 | ||
|
|
6367924ac6 | ||
|
|
29f718ee63 | ||
|
|
fe50cd9978 | ||
|
|
b542e4c8e9 | ||
|
|
80acd5c4a7 | ||
|
|
5000eaa3a6 | ||
|
|
e98b061282 | ||
|
|
54288598bb | ||
|
|
81b8c0eed5 | ||
|
|
52fef34928 | ||
|
|
e821464f79 | ||
|
|
b8a7680e12 | ||
|
|
52291467e1 | ||
|
|
f64c5508df | ||
|
|
c76f4a0826 | ||
|
|
26b4d62a65 | ||
|
|
c0b16e3d2b | ||
|
|
6cedf37c83 | ||
|
|
9c6f79e919 | ||
|
|
f60b6dd36f | ||
|
|
c43a5081ce | ||
|
|
bd20344b0a | ||
|
|
c30b1e72da | ||
|
|
713c451f58 | ||
|
|
2234deeeed | ||
|
|
82695cfddf | ||
|
|
42825b68d5 | ||
|
|
f2d4b47315 | ||
|
|
45dff48c9f | ||
|
|
622c462e48 | ||
|
|
410c028f33 | ||
|
|
d70047fcd2 | ||
|
|
cbf0fcc8b7 | ||
|
|
bbedb4b564 | ||
|
|
cf54623b08 | ||
|
|
087c29e07f | ||
|
|
d92ae5df0c | ||
|
|
ac59b2c582 | ||
|
|
6902cdb177 | ||
|
|
adf9cc942f | ||
|
|
95f4d6ef8b | ||
|
|
55de97207d | ||
|
|
708f013f89 | ||
|
|
163f0b1965 | ||
|
|
3a32d199df | ||
|
|
9a51a87af3 | ||
|
|
74aeaddf8e | ||
|
|
2ae2bd66b4 | ||
|
|
b7523059c1 | ||
|
|
ab6c4a5db1 | ||
|
|
ec4cacc16e | ||
|
|
b4110b65fc | ||
|
|
5db6a6819d | ||
|
|
f448279b14 | ||
|
|
ded5a504b4 | ||
|
|
8ef53b102f | ||
|
|
c0d0fe86d8 | ||
|
|
a81a8c137b | ||
|
|
02f7bcdbd1 | ||
|
|
bbb7550709 | ||
|
|
7fbfe29c65 | ||
|
|
5ced1f590b | ||
|
|
b98ee19241 | ||
|
|
ad8330af72 | ||
|
|
b25adabcfa | ||
|
|
875e873f26 | ||
|
|
2a9e3bd743 | ||
|
|
f37b7c1f96 | ||
|
|
509c2680aa | ||
|
|
d48cfe591f | ||
|
|
68564c0f9e | ||
|
|
ec5adb83dd | ||
|
|
de4cbb5c21 | ||
|
|
051f4862f9 | ||
|
|
c055c88057 | ||
|
|
85d96d4478 | ||
|
|
c8e52741fd | ||
|
|
72473266b8 | ||
|
|
a5ad46b9f8 | ||
|
|
f36d531553 | ||
|
|
6399d0a699 | ||
|
|
aa9db61677 | ||
|
|
8a0e35b212 | ||
|
|
2b05d47bc2 | ||
|
|
7bc9fca430 | ||
|
|
bb16b94455 | ||
|
|
33011754e6 | ||
|
|
bce58f487e | ||
|
|
ce067a6cd1 | ||
|
|
d3a3a73f64 | ||
|
|
58a3975e93 | ||
|
|
351d5d08fa | ||
|
|
426de82d0c | ||
|
|
5857929f95 | ||
|
|
709477274e | ||
|
|
1af712c101 | ||
|
|
ec90cd0f90 | ||
|
|
ce76ffac4c | ||
|
|
afbe48c290 | ||
|
|
98ff5507d8 | ||
|
|
3ca6dba96e | ||
|
|
500b5ecec3 | ||
|
|
87ab3360d0 | ||
|
|
b46af82cc1 | ||
|
|
a4aa30d9a0 | ||
|
|
aaf58dabb6 | ||
|
|
0d7818d1b6 | ||
|
|
4b67db4d9b | ||
|
|
f70a7e1ee1 | ||
|
|
f27167f20c | ||
|
|
a9075a17c3 | ||
|
|
6a8421fb44 | ||
|
|
031e16ecff | ||
|
|
75be88cfbd | ||
|
|
bdec995839 | ||
|
|
fa905fbf7b | ||
|
|
9aada25ced | ||
|
|
e2442e0707 | ||
|
|
73fd604161 | ||
|
|
2f9e7c84d1 | ||
|
|
3c7199ff06 | ||
|
|
73b98acd8b | ||
|
|
bb0d170288 | ||
|
|
db84125fcb | ||
|
|
ae4221f905 | ||
|
|
674343ab14 | ||
|
|
1c2d3cfaaf | ||
|
|
2d0b675adf | ||
|
|
6fac90945a | ||
|
|
01e3032354 | ||
|
|
a214094b37 | ||
|
|
83fcf7b9e9 | ||
|
|
42d62bf114 | ||
|
|
8a885c5443 | ||
|
|
ae5c15eb59 | ||
|
|
90e2d7f3fd | ||
|
|
5308c1a03b | ||
|
|
ce90ab5d44 | ||
|
|
1ee87a9e2e | ||
|
|
479501b07c | ||
|
|
a39c970d27 | ||
|
|
12f3d0be84 | ||
|
|
9bc8eb6449 | ||
|
|
0fa5ae6b54 | ||
|
|
1ff90822f1 | ||
|
|
f8cca819a4 | ||
|
|
beefb62a6f | ||
|
|
3d9c64e9f8 | ||
|
|
23e8e0ff83 | ||
|
|
c868e41b22 | ||
|
|
0696b0a451 | ||
|
|
254909fab5 | ||
|
|
aa829dcf50 | ||
|
|
fbef50bc8b | ||
|
|
43ce78e032 | ||
|
|
add6158e96 | ||
|
|
65aaecd2d5 | ||
|
|
cfb7138523 | ||
|
|
2cc4f93c88 | ||
|
|
bb3d325624 | ||
|
|
c701014dce | ||
|
|
950580eb0c | ||
|
|
8217fd5478 | ||
|
|
103c6c3276 | ||
|
|
2b1c9c6887 | ||
|
|
07e304c3bf | ||
|
|
5ea77d8b77 | ||
|
|
9a1d32095b | ||
|
|
17ed160078 | ||
|
|
504a295cde | ||
|
|
d00d7d8c19 | ||
|
|
aaffc14f65 | ||
|
|
d5f281b734 | ||
|
|
f2729c983a | ||
|
|
c1f07a9fc4 | ||
|
|
133e4af070 | ||
|
|
995eb29dc3 | ||
|
|
4f943644e5 | ||
|
|
3bef88f6ec | ||
|
|
2260b66e16 | ||
|
|
a861cc2f31 | ||
|
|
5c064c6ba5 | ||
|
|
9454cd365a | ||
|
|
43c58ff983 | ||
|
|
86a9bd1b08 | ||
|
|
a4a721fce5 | ||
|
|
574f3a772c | ||
|
|
ad6c316146 | ||
|
|
8d95be3afb | ||
|
|
a62895265f | ||
|
|
9ab569e616 | ||
|
|
9c78a04df4 | ||
|
|
0fa7850aeb | ||
|
|
0c8eb5b4dd | ||
|
|
84893085cf | ||
|
|
f4b8a5cf03 | ||
|
|
6d8caa9f88 | ||
|
|
398c1e9acc | ||
|
|
26f109290d | ||
|
|
43e84cff1b | ||
|
|
696e754ecf | ||
|
|
909a8cfc7b | ||
|
|
7678cba140 | ||
|
|
3820eb1e2d | ||
|
|
d23bf13189 | ||
|
|
f7aeafaf00 | ||
|
|
fce0382181 | ||
|
|
3041cf67ff | ||
|
|
1a85fc497d | ||
|
|
eb8bba627f | ||
|
|
53bb941845 | ||
|
|
2401e4d10c | ||
|
|
34e9d7e340 | ||
|
|
dc9bdf143a | ||
|
|
b2d000e64b | ||
|
|
bfc3ce3157 | ||
|
|
269e84c971 | ||
|
|
b628d6934f | ||
|
|
450306a84b | ||
|
|
ed3c527386 | ||
|
|
4a275cf080 | ||
|
|
13e4803e6a | ||
|
|
a74655af45 | ||
|
|
58cb10ee5f | ||
|
|
7b3c0f0109 | ||
|
|
72964b8633 | ||
|
|
3270768736 | ||
|
|
51f94caba1 | ||
|
|
9a12cf7ab5 | ||
|
|
c80ddef7a4 | ||
|
|
d3a1f899ee | ||
|
|
d64e8e2905 | ||
|
|
e15a6b4e08 | ||
|
|
ca56642128 | ||
|
|
3fa69b4d61 | ||
|
|
d83c997749 | ||
|
|
d66dc70d7b | ||
|
|
8adf4c0a4f | ||
|
|
1095b822b0 | ||
|
|
c0ca354eb4 | ||
|
|
2e90ccac0b | ||
|
|
5b177b3cab | ||
|
|
16bd984557 | ||
|
|
81baa1b501 | ||
|
|
293263c352 | ||
|
|
09497c1a73 | ||
|
|
84fbd4f1ed | ||
|
|
bd96b30b74 | ||
|
|
25758055ac | ||
|
|
c743009717 | ||
|
|
29e453f7c0 | ||
|
|
a4da0750f0 | ||
|
|
19c791cdac | ||
|
|
d45434fe19 | ||
|
|
b85de60a9f | ||
|
|
e73ee60a8f | ||
|
|
4508ab3e51 | ||
|
|
87bc8721b4 | ||
|
|
33ce0b5e71 | ||
|
|
35ed3c97b2 | ||
|
|
3c54642c81 | ||
|
|
367a838626 | ||
|
|
7c2bfdb040 | ||
|
|
0dd9a2c1fd | ||
|
|
32eaeeac9e | ||
|
|
4c4dc6149b | ||
|
|
feaec37d32 | ||
|
|
b6909ab3f7 | ||
|
|
9bef5df776 | ||
|
|
88421563ad | ||
|
|
9cdec16ceb | ||
|
|
845fe8bf80 | ||
|
|
de9e9db6a5 | ||
|
|
715b7c38a8 | ||
|
|
ca387e7fda | ||
|
|
39e9e65c5b | ||
|
|
264dd42a98 | ||
|
|
ff392d81ef | ||
|
|
37bae1a0e9 | ||
|
|
985ef4f9f1 | ||
|
|
700de8aa81 | ||
|
|
4e240795cc | ||
|
|
d4859558da | ||
|
|
289014d470 | ||
|
|
3847f91122 | ||
|
|
f918646f9a | ||
|
|
365bc1ce11 | ||
|
|
836e711c38 | ||
|
|
bd544e284b | ||
|
|
0e2bca0744 | ||
|
|
0fba3c1993 | ||
|
|
7d3feda796 | ||
|
|
bf6c774305 | ||
|
|
afdd7999e4 | ||
|
|
c308d43416 | ||
|
|
773040f9d9 | ||
|
|
c05d124968 | ||
|
|
a831b5a986 | ||
|
|
9f1f86bf7f | ||
|
|
e817c07779 | ||
|
|
479fa1d870 | ||
|
|
8c40ac8ae6 | ||
|
|
dc4b900223 | ||
|
|
aa7459050d | ||
|
|
087ec126c1 | ||
|
|
cd8a12586a | ||
|
|
4893e5d8b8 | ||
|
|
19b393b624 | ||
|
|
9d9d8fe658 | ||
|
|
78e97e38cb | ||
|
|
468f2fed27 | ||
|
|
5abf2536f6 | ||
|
|
5fce2e9421 | ||
|
|
907dd683a4 | ||
|
|
f008876cc1 | ||
|
|
5bc43c7821 | ||
|
|
f3ad13e3d8 | ||
|
|
94e152b186 | ||
|
|
073b0e88a1 | ||
|
|
616b4e2d1b | ||
|
|
3d72522a68 | ||
|
|
f0dd80f246 | ||
|
|
1b385f37f3 | ||
|
|
fd778bba46 | ||
|
|
8d403aeb6a | ||
|
|
01b74c101e | ||
|
|
db0dec3c5a | ||
|
|
ba6e9d8a11 | ||
|
|
7106ffe5f2 | ||
|
|
5426a4cb16 | ||
|
|
d0bac69a8a | ||
|
|
59322e0973 | ||
|
|
51cc89fa7b | ||
|
|
4ded4dfac6 | ||
|
|
1d93541617 | ||
|
|
c0f3512d5a | ||
|
|
02fa8f244e | ||
|
|
32120054c2 | ||
|
|
1478361204 | ||
|
|
c94531212f | ||
|
|
9baef107e1 | ||
|
|
dadebcd79a | ||
|
|
dedce66eb5 | ||
|
|
aba6ae5950 | ||
|
|
596e3965e7 | ||
|
|
d4092f6b4d | ||
|
|
42e1e2d886 | ||
|
|
25c912c1b2 | ||
|
|
178796e748 | ||
|
|
b9ab64d8db | ||
|
|
2ac4e9d914 | ||
|
|
44b2399a94 | ||
|
|
d9cb76f636 | ||
|
|
d34d255957 | ||
|
|
2fb4d7e337 | ||
|
|
8a9b042b26 | ||
|
|
11426a8716 | ||
|
|
67ad535022 | ||
|
|
6c6696e569 | ||
|
|
6530203fdd | ||
|
|
c8358fcbd9 | ||
|
|
b0fcd0ccc5 | ||
|
|
2b29bca2a9 | ||
|
|
d681fa7626 | ||
|
|
ff05b6e0de | ||
|
|
e6426d2420 | ||
|
|
2af2fe42a3 | ||
|
|
261db7706d | ||
|
|
952191da79 | ||
|
|
d642da75bd | ||
|
|
059c9a5f2a | ||
|
|
94686e3c0f | ||
|
|
97205269bc | ||
|
|
27d4c5ea22 | ||
|
|
6abd39160c | ||
|
|
9df7ac2e6a | ||
|
|
0ff7da7191 | ||
|
|
9fdb8f8553 | ||
|
|
a949da48da | ||
|
|
108b1cd9ba | ||
|
|
1a8c68ac5b | ||
|
|
fa3bdfb7bc | ||
|
|
7884e245bc | ||
|
|
be908ac024 | ||
|
|
ed21f4bd03 | ||
|
|
f34f2f5bc6 | ||
|
|
6c36568626 | ||
|
|
3924ebceb5 | ||
|
|
3dcb85ee9a | ||
|
|
1be87b6273 | ||
|
|
b331385e8a | ||
|
|
b2921f1bcc | ||
|
|
eaae2cdb16 | ||
|
|
a7c2f97939 | ||
|
|
e06ccbe3f7 | ||
|
|
67de29b503 | ||
|
|
c22e42e9a2 | ||
|
|
6d765524bc | ||
|
|
421d34fd2f | ||
|
|
c6300ffe4e | ||
|
|
6448a5e584 | ||
|
|
7ee3ce9ada | ||
|
|
b5426c52c0 | ||
|
|
621b29f5b1 | ||
|
|
f1cbc32876 | ||
|
|
72c837da24 | ||
|
|
1c8a475cd4 | ||
|
|
8880e08771 | ||
|
|
426d787c4c | ||
|
|
2cf199cbbd | ||
|
|
16b121890c | ||
|
|
6cb27c31d9 | ||
|
|
ff5685d534 |
5
.gitattributes
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
/.travis.yml export-ignore
|
||||
/appveyor.yml export-ignore
|
||||
/ci export-ignore
|
||||
/.gitattributes export-ignore
|
||||
*.ppm binary
|
||||
@@ -1,7 +0,0 @@
|
||||
|
||||
dcommander = DRC <dcommander@users.sourceforge.net>
|
||||
astrand = Peter Åstrand <astrand@cendio.se>
|
||||
ossman_ = Pierre Ossman <ossman@cendio.se>
|
||||
const_k = Constantin Kaplinsky <const@tightvnc.com>
|
||||
atkac = Adam Tkac <atkac@redhat.com>
|
||||
|
||||
958
BUILDING.md
1677
CMakeLists.txt
15
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Community Participation Guidelines
|
||||
|
||||
This repository is governed by Mozilla's code of conduct and etiquette guidelines.
|
||||
For more details, please read the
|
||||
[Mozilla Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/).
|
||||
|
||||
## How to Report
|
||||
For more information on how to report violations of the Community Participation Guidelines, please read our '[How to Report](https://www.mozilla.org/about/governance/policies/participation/reporting/)' page.
|
||||
|
||||
<!--
|
||||
## Project Specific Etiquette
|
||||
|
||||
In some cases, there will be additional project etiquette i.e.: (https://bugzilla.mozilla.org/page.cgi?id=etiquette.html).
|
||||
Please update for your project.
|
||||
-->
|
||||
882
ChangeLog.md
@@ -1,3 +1,824 @@
|
||||
2.1.5
|
||||
=====
|
||||
|
||||
### Significant changes relative to 2.1.4:
|
||||
|
||||
1. Fixed issues in the build system whereby, when using the Ninja Multi-Config
|
||||
CMake generator, a static build of libjpeg-turbo (a build in which
|
||||
`ENABLE_SHARED` is `0`) could not be installed, a Windows installer could not
|
||||
be built, and the Java regression tests failed.
|
||||
|
||||
2. Fixed a regression introduced by 2.0 beta1[15] that caused a buffer overrun
|
||||
in the progressive Huffman encoder when attempting to transform a
|
||||
specially-crafted malformed 12-bit-per-component JPEG image into a progressive
|
||||
12-bit-per-component JPEG image using a 12-bit-per-component build of
|
||||
libjpeg-turbo (`-DWITH_12BIT=1`.) Given that the buffer overrun was fully
|
||||
contained within the progressive Huffman encoder structure and did not cause a
|
||||
segfault or other user-visible errant behavior, given that the lossless
|
||||
transformer (unlike the decompressor) is not generally exposed to arbitrary
|
||||
data exploits, and given that 12-bit-per-component builds of libjpeg-turbo are
|
||||
uncommon, this issue did not likely pose a security risk.
|
||||
|
||||
3. Fixed an issue whereby, when using a 12-bit-per-component build of
|
||||
libjpeg-turbo (`-DWITH_12BIT=1`), passing samples with values greater than 4095
|
||||
or less than 0 to `jpeg_write_scanlines()` caused a buffer overrun or underrun
|
||||
in the RGB-to-YCbCr color converter.
|
||||
|
||||
4. Fixed a floating point exception that occurred when attempting to use the
|
||||
jpegtran `-drop` and `-trim` options to losslessly transform a
|
||||
specially-crafted malformed JPEG image.
|
||||
|
||||
5. Fixed an issue in `tjBufSizeYUV2()` whereby it returned a bogus result,
|
||||
rather than throwing an error, if the `align` parameter was not a power of 2.
|
||||
Fixed a similar issue in `tjCompressFromYUV()` whereby it generated a corrupt
|
||||
JPEG image in certain cases, rather than throwing an error, if the `align`
|
||||
parameter was not a power of 2.
|
||||
|
||||
6. Fixed an issue whereby `tjDecompressToYUV2()`, which is a wrapper for
|
||||
`tjDecompressToYUVPlanes()`, used the desired YUV image dimensions rather than
|
||||
the actual scaled image dimensions when computing the plane pointers and
|
||||
strides to pass to `tjDecompressToYUVPlanes()`. This caused a buffer overrun
|
||||
and subsequent segfault if the desired image dimensions exceeded the scaled
|
||||
image dimensions.
|
||||
|
||||
7. Fixed an issue whereby, when decompressing a 12-bit-per-component JPEG image
|
||||
(`-DWITH_12BIT=1`) using an alpha-enabled output color space such as
|
||||
`JCS_EXT_RGBA`, the alpha channel was set to 255 rather than 4095.
|
||||
|
||||
8. Fixed an issue whereby the Java version of TJBench did not accept a range of
|
||||
quality values.
|
||||
|
||||
9. Fixed an issue whereby, when `-progressive` was passed to TJBench, the JPEG
|
||||
input image was not transformed into a progressive JPEG image prior to
|
||||
decompression.
|
||||
|
||||
|
||||
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, CVE-2021-46822) 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 (CVE-2020-35538) 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
|
||||
=====
|
||||
|
||||
### Significant changes relative to 2.0.4:
|
||||
|
||||
1. Worked around issues in the MIPS DSPr2 SIMD extensions that caused failures
|
||||
in the libjpeg-turbo regression tests. Specifically, the
|
||||
`jsimd_h2v1_downsample_dspr2()` and `jsimd_h2v2_downsample_dspr2()` functions
|
||||
in the MIPS DSPr2 SIMD extensions are now disabled until/unless they can be
|
||||
fixed, and other functions that are incompatible with big endian MIPS CPUs are
|
||||
disabled when building libjpeg-turbo for such CPUs.
|
||||
|
||||
2. Fixed an oversight in the `TJCompressor.compress(int)` method in the
|
||||
TurboJPEG Java API that caused an error ("java.lang.IllegalStateException: No
|
||||
source image is associated with this instance") when attempting to use that
|
||||
method to compress a YUV image.
|
||||
|
||||
3. Fixed an issue (CVE-2020-13790) in the PPM reader that caused a buffer
|
||||
overrun in cjpeg, TJBench, or the `tjLoadImage()` function if one of the values
|
||||
in a binary PPM/PGM input file exceeded the maximum value defined in the file's
|
||||
header and that maximum value was less than 255. libjpeg-turbo 1.5.0 already
|
||||
included a similar fix for binary PPM/PGM files with maximum values greater
|
||||
than 255.
|
||||
|
||||
4. The TurboJPEG API library's global error handler, which is used in functions
|
||||
such as `tjBufSize()` and `tjLoadImage()` that do not require a TurboJPEG
|
||||
instance handle, is now thread-safe on platforms that support thread-local
|
||||
storage.
|
||||
|
||||
|
||||
2.0.4
|
||||
=====
|
||||
|
||||
### Significant changes relative to 2.0.3:
|
||||
|
||||
1. Fixed a regression in the Windows packaging system (introduced by
|
||||
2.0 beta1[2]) whereby, if both the 64-bit libjpeg-turbo SDK for GCC and the
|
||||
64-bit libjpeg-turbo SDK for Visual C++ were installed on the same system, only
|
||||
one of them could be uninstalled.
|
||||
|
||||
2. Fixed a signed integer overflow and subsequent segfault that occurred when
|
||||
attempting to decompress images with more than 715827882 pixels using the
|
||||
64-bit C version of TJBench.
|
||||
|
||||
3. Fixed out-of-bounds write in `tjDecompressToYUV2()` and
|
||||
`tjDecompressToYUVPlanes()` (sometimes manifesting as a double free) that
|
||||
occurred when attempting to decompress grayscale JPEG images that were
|
||||
compressed with a sampling factor other than 1 (for instance, with
|
||||
`cjpeg -grayscale -sample 2x2`).
|
||||
|
||||
4. Fixed a regression introduced by 2.0.2[5] that caused the TurboJPEG API to
|
||||
incorrectly identify some JPEG images with unusual sampling factors as 4:4:4
|
||||
JPEG images. This was known to cause a buffer overflow when attempting to
|
||||
decompress some such images using `tjDecompressToYUV2()` or
|
||||
`tjDecompressToYUVPlanes()`.
|
||||
|
||||
5. Fixed an issue (CVE-2020-17541), detected by ASan, whereby attempting to
|
||||
losslessly transform a specially-crafted malformed JPEG image containing an
|
||||
extremely-high-frequency coefficient block (junk image data that could never be
|
||||
generated by a legitimate JPEG compressor) could cause the Huffman encoder's
|
||||
local buffer to be overrun. (Refer to 1.4.0[9] and 1.4beta1[15].) Given that
|
||||
the buffer overrun was fully contained within the stack and did not cause a
|
||||
segfault or other user-visible errant behavior, and given that the lossless
|
||||
transformer (unlike the decompressor) is not generally exposed to arbitrary
|
||||
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
|
||||
separate read-only data section rather than in the text section, to support
|
||||
execute-only memory layouts.
|
||||
|
||||
|
||||
2.0.3
|
||||
=====
|
||||
|
||||
### Significant changes relative to 2.0.2:
|
||||
|
||||
1. Fixed "using JNI after critical get" errors that occurred on Android
|
||||
platforms when passing invalid arguments to certain methods in the TurboJPEG
|
||||
Java API.
|
||||
|
||||
2. Fixed a regression in the SIMD feature detection code, introduced by
|
||||
the AVX2 SIMD extensions (2.0 beta1[1]), that was known to cause an illegal
|
||||
instruction exception, in rare cases, on CPUs that lack support for CPUID leaf
|
||||
07H (or on which the maximum CPUID leaf has been limited by way of a BIOS
|
||||
setting.)
|
||||
|
||||
3. The 4:4:0 (h1v2) fancy (smooth) chroma upsampling algorithm in the
|
||||
decompressor now uses a similar bias pattern to that of the 4:2:2 (h2v1) fancy
|
||||
chroma upsampling algorithm, rounding up or down the upsampled result for
|
||||
alternate pixels rather than always rounding down. This ensures that,
|
||||
regardless of whether a 4:2:2 JPEG image is rotated or transposed prior to
|
||||
decompression (in the frequency domain) or after decompression (in the spatial
|
||||
domain), the final image will be similar.
|
||||
|
||||
4. Fixed an integer overflow and subsequent segfault that occurred when
|
||||
attempting to compress or decompress images with more than 1 billion pixels
|
||||
using the TurboJPEG API.
|
||||
|
||||
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 16 would result in an
|
||||
error ("Missing Huffman code table entry") and an invalid JPEG image.
|
||||
|
||||
6. Fixed an issue whereby `tjDecodeYUV()` and `tjDecodeYUVPlanes()` would throw
|
||||
an error ("Invalid progressive parameters") or a warning ("Inconsistent
|
||||
progression sequence") if passed a TurboJPEG instance that was previously used
|
||||
to decompress a progressive JPEG image.
|
||||
|
||||
|
||||
2.0.2
|
||||
=====
|
||||
|
||||
### Significant changes relative to 2.0.1:
|
||||
|
||||
1. Fixed a regression introduced by 2.0.1[5] that prevented a runtime search
|
||||
path (rpath) from being embedded in the libjpeg-turbo shared libraries and
|
||||
executables for macOS and iOS. This caused a fatal error of the form
|
||||
"dyld: Library not loaded" when attempting to use one of the executables,
|
||||
unless `DYLD_LIBRARY_PATH` was explicitly set to the location of the
|
||||
libjpeg-turbo shared libraries.
|
||||
|
||||
2. Fixed an integer overflow and subsequent segfault (CVE-2018-20330) that
|
||||
occurred when attempting to load a BMP file with more than 1 billion pixels
|
||||
using the `tjLoadImage()` function.
|
||||
|
||||
3. Fixed a buffer overrun (CVE-2018-19664) that occurred when attempting to
|
||||
decompress a specially-crafted malformed JPEG image to a 256-color BMP using
|
||||
djpeg.
|
||||
|
||||
4. Fixed a floating point exception that occurred when attempting to
|
||||
decompress a specially-crafted malformed JPEG image with a specified image
|
||||
width or height of 0 using the C version of TJBench.
|
||||
|
||||
5. The TurboJPEG API will now decompress 4:4:4 JPEG images with 2x1, 1x2, 3x1,
|
||||
or 1x3 luminance and chrominance sampling factors. This is a non-standard way
|
||||
of specifying 1x subsampling (normally 4:4:4 JPEGs have 1x1 luminance and
|
||||
chrominance sampling factors), but the JPEG format and the libjpeg API both
|
||||
allow it.
|
||||
|
||||
6. Fixed a regression introduced by 2.0 beta1[7] that caused djpeg to generate
|
||||
incorrect PPM images when used with the `-colors` option.
|
||||
|
||||
7. Fixed an issue whereby a static build of libjpeg-turbo (a build in which
|
||||
`ENABLE_SHARED` is `0`) could not be installed using the Visual Studio IDE.
|
||||
|
||||
8. Fixed a severe performance issue in the Loongson MMI SIMD extensions that
|
||||
occurred when compressing RGB images whose image rows were not 64-bit-aligned.
|
||||
|
||||
|
||||
2.0.1
|
||||
=====
|
||||
|
||||
### Significant changes relative to 2.0.0:
|
||||
|
||||
1. Fixed a regression introduced with the new CMake-based Un*x build system,
|
||||
whereby jconfig.h could cause compiler warnings of the form
|
||||
`"HAVE_*_H" redefined` if it was included by downstream Autotools-based
|
||||
projects that used `AC_CHECK_HEADERS()` to check for the existence of locale.h,
|
||||
stddef.h, or stdlib.h.
|
||||
|
||||
2. The `jsimd_quantize_float_dspr2()` and `jsimd_convsamp_float_dspr2()`
|
||||
functions in the MIPS DSPr2 SIMD extensions are now disabled at compile time
|
||||
if the soft float ABI is enabled. Those functions use instructions that are
|
||||
incompatible with the soft float ABI.
|
||||
|
||||
3. Fixed a regression in the SIMD feature detection code, introduced by
|
||||
the AVX2 SIMD extensions (2.0 beta1[1]), that caused libjpeg-turbo to crash on
|
||||
Windows 7 if Service Pack 1 was not installed.
|
||||
|
||||
4. Fixed out-of-bounds read in cjpeg that occurred when attempting to compress
|
||||
a specially-crafted malformed color-index (8-bit-per-sample) Targa file in
|
||||
which some of the samples (color indices) exceeded the bounds of the Targa
|
||||
file's color table.
|
||||
|
||||
5. Fixed an issue whereby installing a fully static build of libjpeg-turbo
|
||||
(a build in which `CFLAGS` contains `-static` and `ENABLE_SHARED` is `0`) would
|
||||
fail with "No valid ELF RPATH or RUNPATH entry exists in the file."
|
||||
|
||||
|
||||
2.0.0
|
||||
=====
|
||||
|
||||
### Significant changes relative to 2.0 beta1:
|
||||
|
||||
1. The TurboJPEG API can now decompress CMYK JPEG images that have subsampled M
|
||||
and Y components (not to be confused with YCCK JPEG images, in which the C/M/Y
|
||||
components have been transformed into luma and chroma.) Previously, an error
|
||||
was generated ("Could not determine subsampling type for JPEG image") when such
|
||||
an image was passed to `tjDecompressHeader3()`, `tjTransform()`,
|
||||
`tjDecompressToYUVPlanes()`, `tjDecompressToYUV2()`, or the equivalent Java
|
||||
methods.
|
||||
|
||||
2. Fixed an issue (CVE-2018-11813) whereby a specially-crafted malformed input
|
||||
file (specifically, a file with a valid Targa header but incomplete pixel data)
|
||||
would cause cjpeg to generate a JPEG file that was potentially thousands of
|
||||
times larger than the input file. The Targa reader in cjpeg was not properly
|
||||
detecting that the end of the input file had been reached prematurely, so after
|
||||
all valid pixels had been read from the input, the reader injected dummy pixels
|
||||
with values of 255 into the JPEG compressor until the number of pixels
|
||||
specified in the Targa header had been compressed. The Targa reader in cjpeg
|
||||
now behaves like the PPM reader and aborts compression if the end of the input
|
||||
file is reached prematurely. Because this issue only affected cjpeg and not
|
||||
the underlying library, and because it did not involve any out-of-bounds reads
|
||||
or other exploitable behaviors, it was not believed to represent a security
|
||||
threat.
|
||||
|
||||
3. Fixed an issue whereby the `tjLoadImage()` and `tjSaveImage()` functions
|
||||
would produce a "Bogus message code" error message if the underlying bitmap and
|
||||
PPM readers/writers threw an error that was specific to the readers/writers
|
||||
(as opposed to a general libjpeg API error.)
|
||||
|
||||
4. Fixed an issue (CVE-2018-1152) whereby a specially-crafted malformed BMP
|
||||
file, one in which the header specified an image width of 1073741824 pixels,
|
||||
would trigger a floating point exception (division by zero) in the
|
||||
`tjLoadImage()` function when attempting to load the BMP file into a
|
||||
4-component image buffer.
|
||||
|
||||
5. Fixed an issue whereby certain combinations of calls to
|
||||
`jpeg_skip_scanlines()` and `jpeg_read_scanlines()` could trigger an infinite
|
||||
loop when decompressing progressive JPEG images that use vertical chroma
|
||||
subsampling (for instance, 4:2:0 or 4:4:0.)
|
||||
|
||||
6. Fixed a segfault in `jpeg_skip_scanlines()` that occurred when decompressing
|
||||
a 4:2:2 or 4:2:0 JPEG image using the merged (non-fancy) upsampling algorithms
|
||||
(that is, when setting `cinfo.do_fancy_upsampling` to `FALSE`.)
|
||||
|
||||
7. The new CMake-based build system will now disable the MIPS DSPr2 SIMD
|
||||
extensions if it detects that the compiler does not support DSPr2 instructions.
|
||||
|
||||
8. Fixed out-of-bounds read in cjpeg (CVE-2018-14498) that occurred when
|
||||
attempting to compress a specially-crafted malformed color-index
|
||||
(8-bit-per-sample) BMP file in which some of the samples (color indices)
|
||||
exceeded the bounds of the BMP file's color table.
|
||||
|
||||
9. Fixed a signed integer overflow in the progressive Huffman decoder, detected
|
||||
by the Clang and GCC undefined behavior sanitizers, that could be triggered by
|
||||
attempting to decompress a specially-crafted malformed JPEG image. This issue
|
||||
did not pose a security threat, but removing the warning made it easier to
|
||||
detect actual security issues, should they arise in the future.
|
||||
|
||||
|
||||
1.5.90 (2.0 beta1)
|
||||
==================
|
||||
|
||||
### Significant changes relative to 1.5.3:
|
||||
|
||||
1. Added AVX2 SIMD implementations of the colorspace conversion, chroma
|
||||
downsampling and upsampling, integer quantization and sample conversion, and
|
||||
accurate integer DCT/IDCT algorithms. When using the accurate integer DCT/IDCT
|
||||
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
|
||||
64-bit code and 11-21% (avg. 17%) faster with 32-bit code, and the
|
||||
decompression of RGB images is approximately 9-35% (avg. 17%) faster with
|
||||
64-bit code and 7-17% (avg. 12%) faster with 32-bit code. (As tested on a
|
||||
3 GHz Intel Core i7. Actual mileage may vary.)
|
||||
|
||||
2. Overhauled the build system to use CMake on all platforms, and removed the
|
||||
autotools-based build system. This decision resulted from extensive
|
||||
discussions within the libjpeg-turbo community. libjpeg-turbo traditionally
|
||||
used CMake only for Windows builds, but there was an increasing amount of
|
||||
demand to extend CMake support to other platforms. However, because of the
|
||||
unique nature of our code base (the need to support different assemblers on
|
||||
each platform, the need for Java support, etc.), providing dual build systems
|
||||
as other OSS imaging libraries do (including libpng and libtiff) would have
|
||||
created a maintenance burden. The use of CMake greatly simplifies some aspects
|
||||
of our build system, owing to CMake's built-in support for various assemblers,
|
||||
Java, and unit testing, as well as generally fewer quirks that have to be
|
||||
worked around in order to implement our packaging system. Eliminating
|
||||
autotools puts our project slightly at odds with the traditional practices of
|
||||
the OSS community, since most "system libraries" tend to be built with
|
||||
autotools, but it is believed that the benefits of this move outweigh the
|
||||
risks. In addition to providing a unified build environment, switching to
|
||||
CMake allows for the use of various build tools and IDEs that aren't supported
|
||||
under autotools, including XCode, Ninja, and Eclipse. It also eliminates the
|
||||
need to install autotools via MacPorts/Homebrew on OS X and allows
|
||||
libjpeg-turbo to be configured without the use of a terminal/command prompt.
|
||||
Extensive testing was conducted to ensure that all features provided by the
|
||||
autotools-based build system are provided by the new build system.
|
||||
|
||||
3. The libjpeg API in this version of libjpeg-turbo now includes two additional
|
||||
functions, `jpeg_read_icc_profile()` and `jpeg_write_icc_profile()`, that can
|
||||
be used to extract ICC profile data from a JPEG file while decompressing or to
|
||||
embed ICC profile data in a JPEG file while compressing or transforming. This
|
||||
eliminates the need for downstream projects, such as color management libraries
|
||||
and browsers, to include their own glueware for accomplishing this.
|
||||
|
||||
4. Improved error handling in the TurboJPEG API library:
|
||||
|
||||
- Introduced a new function (`tjGetErrorStr2()`) in the TurboJPEG C API
|
||||
that allows compression/decompression/transform error messages to be retrieved
|
||||
in a thread-safe manner. Retrieving error messages from global functions, such
|
||||
as `tjInitCompress()` or `tjBufSize()`, is still thread-unsafe, but since those
|
||||
functions will only throw errors if passed an invalid argument or if a memory
|
||||
allocation failure occurs, thread safety is not as much of a concern.
|
||||
- Introduced a new function (`tjGetErrorCode()`) in the TurboJPEG C API
|
||||
and a new method (`TJException.getErrorCode()`) in the TurboJPEG Java API that
|
||||
can be used to determine the severity of the last
|
||||
compression/decompression/transform error. This allows applications to
|
||||
choose whether to ignore warnings (non-fatal errors) from the underlying
|
||||
libjpeg API or to treat them as fatal.
|
||||
- Introduced a new flag (`TJFLAG_STOPONWARNING` in the TurboJPEG C API and
|
||||
`TJ.FLAG_STOPONWARNING` in the TurboJPEG Java API) that causes the library to
|
||||
immediately halt a compression/decompression/transform operation if it
|
||||
encounters a warning from the underlying libjpeg API (the default behavior is
|
||||
to allow the operation to complete unless a fatal error is encountered.)
|
||||
|
||||
5. Introduced a new flag in the TurboJPEG C and Java APIs (`TJFLAG_PROGRESSIVE`
|
||||
and `TJ.FLAG_PROGRESSIVE`, respectively) that causes the library to use
|
||||
progressive entropy coding in JPEG images generated by compression and
|
||||
transform operations. Additionally, a new transform option
|
||||
(`TJXOPT_PROGRESSIVE` in the C API and `TJTransform.OPT_PROGRESSIVE` in the
|
||||
Java API) has been introduced, allowing progressive entropy coding to be
|
||||
enabled for selected transforms in a multi-transform operation.
|
||||
|
||||
6. Introduced a new transform option in the TurboJPEG API (`TJXOPT_COPYNONE` in
|
||||
the C API and `TJTransform.OPT_COPYNONE` in the Java API) that allows the
|
||||
copying of markers (including EXIF and ICC profile data) to be disabled for a
|
||||
particular transform.
|
||||
|
||||
7. Added two functions to the TurboJPEG C API (`tjLoadImage()` and
|
||||
`tjSaveImage()`) that can be used to load/save a BMP or PPM/PGM image to/from a
|
||||
memory buffer with a specified pixel format and layout. These functions
|
||||
replace the project-private (and slow) bmp API, which was previously used by
|
||||
TJBench, and they also provide a convenient way for first-time users of
|
||||
libjpeg-turbo to quickly develop a complete JPEG compression/decompression
|
||||
program.
|
||||
|
||||
8. The TurboJPEG C API now includes a new convenience array (`tjAlphaOffset[]`)
|
||||
that contains the alpha component index for each pixel format (or -1 if the
|
||||
pixel format lacks an alpha component.) The TurboJPEG Java API now includes a
|
||||
new method (`TJ.getAlphaOffset()`) that returns the same value. In addition,
|
||||
the `tjRedOffset[]`, `tjGreenOffset[]`, and `tjBlueOffset[]` arrays-- and the
|
||||
corresponding `TJ.getRedOffset()`, `TJ.getGreenOffset()`, and
|
||||
`TJ.getBlueOffset()` methods-- now return -1 for `TJPF_GRAY`/`TJ.PF_GRAY`
|
||||
rather than 0. This allows programs to easily determine whether a pixel format
|
||||
has red, green, blue, and alpha components.
|
||||
|
||||
9. Added a new example (tjexample.c) that demonstrates the basic usage of the
|
||||
TurboJPEG C API. This example mirrors the functionality of TJExample.java.
|
||||
Both files are now included in the libjpeg-turbo documentation.
|
||||
|
||||
10. Fixed two signed integer overflows in the arithmetic decoder, detected by
|
||||
the Clang undefined behavior sanitizer, that could be triggered by attempting
|
||||
to decompress a specially-crafted malformed JPEG image. These issues did not
|
||||
pose a security threat, but removing the warnings makes it easier to detect
|
||||
actual security issues, should they arise in the future.
|
||||
|
||||
11. Fixed a bug in the merged 4:2:0 upsampling/dithered RGB565 color conversion
|
||||
algorithm that caused incorrect dithering in the output image. This algorithm
|
||||
now produces bitwise-identical results to the unmerged algorithms.
|
||||
|
||||
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.
|
||||
This prevents those symbols from being exposed in applications or shared
|
||||
libraries that link statically with libjpeg-turbo.
|
||||
|
||||
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
|
||||
chroma upsampling, integer quantization, and accurate integer DCT/IDCT
|
||||
algorithms. When using the accurate integer DCT/IDCT, this speeds up the
|
||||
compression of RGB images by approximately 70-100% and the decompression of RGB
|
||||
images by approximately 2-3.5x.
|
||||
|
||||
14. Fixed a build error when building with older MinGW releases (regression
|
||||
caused by 1.5.1[7].)
|
||||
|
||||
15. Added SIMD acceleration for progressive Huffman encoding on SSE2-capable
|
||||
x86 and x86-64 platforms. This speeds up the compression of full-color
|
||||
progressive JPEGs by about 85-90% on average (relative to libjpeg-turbo 1.5.x)
|
||||
when using modern Intel and AMD CPUs.
|
||||
|
||||
|
||||
1.5.3
|
||||
=====
|
||||
|
||||
### Significant changes relative to 1.5.2:
|
||||
|
||||
1. Fixed a NullPointerException in the TurboJPEG Java wrapper that occurred
|
||||
when using the YUVImage constructor that creates an instance backed by separate
|
||||
image planes and allocates memory for the image planes.
|
||||
|
||||
2. Fixed an issue whereby the Java version of TJUnitTest would fail when
|
||||
testing BufferedImage encoding/decoding on big endian systems.
|
||||
|
||||
3. Fixed a segfault in djpeg that would occur if an output format other than
|
||||
PPM/PGM was selected along with the `-crop` option. The `-crop` option now
|
||||
works with the GIF and Targa formats as well (unfortunately, it cannot be made
|
||||
to work with the BMP and RLE formats due to the fact that those output engines
|
||||
write scanlines in bottom-up order.) djpeg will now exit gracefully if an
|
||||
output format other than PPM/PGM, GIF, or Targa is selected along with the
|
||||
`-crop` option.
|
||||
|
||||
4. Fixed an issue (CVE-2017-15232) whereby `jpeg_skip_scanlines()` would
|
||||
segfault if color quantization was enabled.
|
||||
|
||||
5. TJBench (both C and Java versions) will now display usage information if any
|
||||
command-line argument is unrecognized. This prevents the program from silently
|
||||
ignoring typos.
|
||||
|
||||
6. Fixed an access violation in tjbench.exe (Windows) that occurred when the
|
||||
program was used to decompress an existing JPEG image.
|
||||
|
||||
7. Fixed an ArrayIndexOutOfBoundsException in the TJExample Java program that
|
||||
occurred when attempting to decompress a JPEG image that had been compressed
|
||||
with 4:1:1 chrominance subsampling.
|
||||
|
||||
8. Fixed an issue whereby, when using `jpeg_skip_scanlines()` to skip to the
|
||||
end of a single-scan (non-progressive) image, subsequent calls to
|
||||
`jpeg_consume_input()` would return `JPEG_SUSPENDED` rather than
|
||||
`JPEG_REACHED_EOI`.
|
||||
|
||||
9. `jpeg_crop_scanline()` now works correctly when decompressing grayscale JPEG
|
||||
images that were compressed with a sampling factor other than 1 (for instance,
|
||||
with `cjpeg -grayscale -sample 2x2`).
|
||||
|
||||
|
||||
1.5.2
|
||||
=====
|
||||
|
||||
@@ -19,7 +840,7 @@ on PowerPC-based AmigaOS 4 and OpenBSD systems.
|
||||
5. Fixed build and runtime errors on Windows that occurred when building
|
||||
libjpeg-turbo with libjpeg v7 API/ABI emulation and the in-memory
|
||||
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`.
|
||||
|
||||
6. Fixed "Bogus virtual array access" error that occurred when using the
|
||||
@@ -130,8 +951,8 @@ specified.)
|
||||
2x2 luminance sampling factors and 2x1 or 1x2 chrominance sampling factors.
|
||||
This is a non-standard way of specifying 2x subsampling (normally 4:2:2 JPEGs
|
||||
have 2x1 luminance and 1x1 chrominance sampling factors, and 4:4:0 JPEGs have
|
||||
1x2 luminance and 1x1 chrominance sampling factors), but the JPEG specification
|
||||
and the libjpeg API both allow it.
|
||||
1x2 luminance and 1x1 chrominance sampling factors), but the JPEG format and
|
||||
the libjpeg API both allow it.
|
||||
|
||||
7. Fixed an unsigned integer overflow in the libjpeg memory manager, detected
|
||||
by the Clang undefined behavior sanitizer, that could be triggered by
|
||||
@@ -176,10 +997,10 @@ application was linked against.
|
||||
|
||||
3. Fixed a couple of issues in the PPM reader that would cause buffer overruns
|
||||
in cjpeg if one of the values in a binary PPM/PGM input file exceeded the
|
||||
maximum value defined in the file's header. libjpeg-turbo 1.4.2 already
|
||||
included a similar fix for ASCII PPM/PGM files. Note that these issues were
|
||||
not security bugs, since they were confined to the cjpeg program and did not
|
||||
affect any of the libjpeg-turbo libraries.
|
||||
maximum value defined in the file's header and that maximum value was greater
|
||||
than 255. libjpeg-turbo 1.4.2 already included a similar fix for ASCII PPM/PGM
|
||||
files. Note that these issues were not security bugs, since they were confined
|
||||
to the cjpeg program and did not affect any of the libjpeg-turbo libraries.
|
||||
|
||||
4. Fixed an issue whereby attempting to decompress a JPEG file with a corrupt
|
||||
header using the `tjDecompressToYUV2()` function would cause the function to
|
||||
@@ -275,8 +1096,8 @@ benchmarking or regression testing, SIMD-accelerated Huffman encoding can be
|
||||
disabled by setting the `JSIMD_NOHUFFENC` environment variable to `1`.
|
||||
|
||||
13. Added ARM 64-bit (ARMv8) NEON SIMD implementations of the commonly-used
|
||||
compression algorithms (including the slow integer forward DCT and h2v2 & h2v1
|
||||
downsampling algorithms, which are not accelerated in the 32-bit NEON
|
||||
compression algorithms (including the accurate integer forward DCT and h2v2 &
|
||||
h2v1 downsampling algorithms, which are not accelerated in the 32-bit NEON
|
||||
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
|
||||
Cortex-A53 and Cortex-A57 cores.
|
||||
@@ -407,8 +1228,8 @@ platforms other than Windows or Linux. Oops.
|
||||
|
||||
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
|
||||
quality=98, an optimized Huffman table, and the slow integer forward DCT were
|
||||
used.
|
||||
quality=98, an optimized Huffman table, and the accurate integer forward DCT
|
||||
were used.
|
||||
|
||||
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
|
||||
@@ -567,8 +1388,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
|
||||
implementation. Note, however, that the floating point DCT/IDCT algorithms are
|
||||
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
|
||||
slower.
|
||||
accuracy than the accurate integer DCT/IDCT algorithms, and they are quite a
|
||||
bit slower.
|
||||
|
||||
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
|
||||
@@ -602,13 +1423,13 @@ and IDCT algorithms (both are used during JPEG decompression.) For unknown
|
||||
reasons (probably related to clang), this code cannot currently be compiled for
|
||||
iOS.
|
||||
|
||||
15. Fixed an extremely rare bug that could cause the Huffman encoder's local
|
||||
buffer to overrun when a very high-frequency MCU is compressed using quality
|
||||
100 and no subsampling, and when the JPEG output buffer is being dynamically
|
||||
resized by the destination manager. This issue was so rare that, even with a
|
||||
test program specifically designed to make the bug occur (by injecting random
|
||||
high-frequency YUV data into the compressor), it was reproducible only once in
|
||||
about every 25 million iterations.
|
||||
15. Fixed an extremely rare bug (CVE-2014-9092) that could cause the Huffman
|
||||
encoder's local buffer to overrun when a very high-frequency MCU is compressed
|
||||
using quality 100 and no subsampling, and when the JPEG output buffer is being
|
||||
dynamically resized by the destination manager. This issue was so rare that,
|
||||
even with a test program specifically designed to make the bug occur (by
|
||||
injecting random high-frequency YUV data into the compressor), it was
|
||||
reproducible only once in about every 25 million iterations.
|
||||
|
||||
16. Fixed an oversight in the TurboJPEG C wrapper: if any of the JPEG
|
||||
compression functions was called repeatedly with the same
|
||||
@@ -643,8 +1464,9 @@ entropy coding (by passing arguments of `-progressive -arithmetic` to cjpeg or
|
||||
jpegtran, for instance) would result in an error, `Requested feature was
|
||||
omitted at compile time`.
|
||||
|
||||
4. Fixed a couple of issues whereby malformed JPEG images would cause
|
||||
libjpeg-turbo to use uninitialized memory during decompression.
|
||||
4. Fixed a couple of issues (CVE-2013-6629 and CVE-2013-6630) whereby malformed
|
||||
JPEG images would cause libjpeg-turbo to use uninitialized memory during
|
||||
decompression.
|
||||
|
||||
5. Fixed an error (`Buffer passed to JPEG library is too small`) that occurred
|
||||
when calling the TurboJPEG YUV encoding function with a very small (< 5x5)
|
||||
@@ -783,9 +1605,9 @@ correct behavior of the colorspace extensions when merged upsampling is used.
|
||||
upper 64 bits of xmm6 and xmm7 on Win64 platforms, which violated the Win64
|
||||
calling conventions.
|
||||
|
||||
4. Fixed a regression caused by 1.2.0[6] whereby decompressing corrupt JPEG
|
||||
images (specifically, images in which the component count was erroneously set
|
||||
to a large value) would cause libjpeg-turbo to segfault.
|
||||
4. Fixed a regression (CVE-2012-2806) caused by 1.2.0[6] whereby decompressing
|
||||
corrupt JPEG images (specifically, images in which the component count was
|
||||
erroneously set to a large value) would cause libjpeg-turbo to segfault.
|
||||
|
||||
5. Worked around a severe performance issue with "Bobcat" (AMD Embedded APU)
|
||||
processors. The `MASKMOVDQU` instruction, which was used by the libjpeg-turbo
|
||||
@@ -818,8 +1640,8 @@ either the fast or the accurate DCT/IDCT algorithms in the underlying codec.
|
||||
|
||||
### Significant changes relative to 1.2 beta1:
|
||||
|
||||
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
|
||||
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 able to find jsimdcfg.inc.)
|
||||
|
||||
2. Fixed out-of-bounds read in SSE2 SIMD code that occurred when decompressing
|
||||
@@ -887,7 +1709,7 @@ transposed or rotated 90 degrees.
|
||||
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.
|
||||
|
||||
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
|
||||
NEON instructions.
|
||||
@@ -977,8 +1799,8 @@ cases.
|
||||
|
||||
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
|
||||
use the slow integer forward DCT when generating JPEG images of quality 96 or
|
||||
greater. This reduces compression performance by as much as 15% for these
|
||||
use the accurate integer forward DCT when generating JPEG images of quality 96
|
||||
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
|
||||
lossless. It also ensures that the library can avoid the performance pitfall
|
||||
created by [1].
|
||||
|
||||
39
LICENSE.md
@@ -11,9 +11,10 @@ libjpeg-turbo is covered by three compatible BSD-style open source licenses:
|
||||
|
||||
- The Modified (3-clause) BSD License, which is listed below
|
||||
|
||||
This license covers the TurboJPEG API library and associated programs.
|
||||
This license covers the TurboJPEG API library and associated programs, as
|
||||
well as the build system.
|
||||
|
||||
- The zlib License, which is listed below
|
||||
- The [zlib License](https://opensource.org/licenses/Zlib)
|
||||
|
||||
This license is a subset of the other two, and it covers the libjpeg-turbo
|
||||
SIMD extensions.
|
||||
@@ -65,7 +66,7 @@ best of our understanding.
|
||||
|
||||
2. If your binary distribution includes or uses the TurboJPEG API, then
|
||||
your product documentation must include the text of the Modified BSD
|
||||
License.
|
||||
License (see below.)
|
||||
|
||||
**Origin**
|
||||
- Clause 2 of the Modified BSD License
|
||||
@@ -90,7 +91,8 @@ best of our understanding.
|
||||
The Modified (3-clause) BSD License
|
||||
===================================
|
||||
|
||||
Copyright (C)\<YEAR\> \<AUTHOR\>. All Rights Reserved.
|
||||
Copyright (C)2009-2023 D. R. Commander. All Rights Reserved.<br>
|
||||
Copyright (C)2015 Viktor Szathmáry. All Rights Reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
@@ -117,23 +119,14 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
The zlib License
|
||||
================
|
||||
Why Three Licenses?
|
||||
===================
|
||||
|
||||
Copyright (C) \<YEAR\>, \<AUTHOR\>.
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
The zlib License could have been used instead of the Modified (3-clause) BSD
|
||||
License, and since the IJG License effectively subsumes the distribution
|
||||
conditions of the zlib License, this would have effectively placed
|
||||
libjpeg-turbo binary distributions under the IJG License. However, the IJG
|
||||
License specifically refers to the Independent JPEG Group and does not extend
|
||||
attribution and endorsement protections to other entities. Thus, it was
|
||||
desirable to choose a license that granted us the same protections for new code
|
||||
that were granted to the IJG for code derived from their software.
|
||||
|
||||
806
Makefile.am
@@ -1,806 +0,0 @@
|
||||
lib_LTLIBRARIES = libjpeg.la
|
||||
libjpeg_la_LDFLAGS = -version-info ${LIBTOOL_CURRENT}:${SO_MINOR_VERSION}:${SO_AGE} -no-undefined
|
||||
include_HEADERS = jerror.h jmorecfg.h jpeglib.h
|
||||
|
||||
if WITH_TURBOJPEG
|
||||
lib_LTLIBRARIES += libturbojpeg.la
|
||||
libturbojpeg_la_LDFLAGS = -version-info 1:0:1 -no-undefined
|
||||
include_HEADERS += turbojpeg.h
|
||||
endif
|
||||
|
||||
nodist_include_HEADERS = jconfig.h
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = pkgscripts/libjpeg.pc
|
||||
if WITH_TURBOJPEG
|
||||
pkgconfig_DATA += pkgscripts/libturbojpeg.pc
|
||||
endif
|
||||
|
||||
HDRS = jchuff.h jcmaster.h jdct.h jdhuff.h jerror.h jinclude.h jmemsys.h \
|
||||
jmorecfg.h jpegint.h jpeglib.h jversion.h jsimd.h jsimddct.h jpegcomp.h \
|
||||
jpeg_nbits_table.h
|
||||
|
||||
libjpeg_la_SOURCES = $(HDRS) jcapimin.c jcapistd.c jccoefct.c jccolor.c \
|
||||
jcdctmgr.c jcext.c jchuff.c jcinit.c jcmainct.c jcmarker.c \
|
||||
jcmaster.c jcomapi.c jcparam.c jcphuff.c jcprepct.c jcsample.c \
|
||||
jctrans.c jdapimin.c jdapistd.c jdatadst.c jdatasrc.c jdcoefct.c \
|
||||
jdcolor.c jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c \
|
||||
jdmaster.c jdmerge.c jdphuff.c jdpostct.c jdsample.c jdtrans.c \
|
||||
jerror.c jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c \
|
||||
jidctint.c jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c
|
||||
|
||||
if WITH_ARITH
|
||||
libjpeg_la_SOURCES += jaricom.c
|
||||
endif
|
||||
|
||||
if WITH_ARITH_ENC
|
||||
libjpeg_la_SOURCES += jcarith.c
|
||||
endif
|
||||
|
||||
if WITH_ARITH_DEC
|
||||
libjpeg_la_SOURCES += jdarith.c
|
||||
endif
|
||||
|
||||
|
||||
SUBDIRS = java
|
||||
|
||||
|
||||
if WITH_TURBOJPEG
|
||||
|
||||
libturbojpeg_la_SOURCES = $(libjpeg_la_SOURCES) turbojpeg.c turbojpeg.h \
|
||||
transupp.c transupp.h jdatadst-tj.c jdatasrc-tj.c
|
||||
|
||||
if WITH_JAVA
|
||||
|
||||
libturbojpeg_la_SOURCES += turbojpeg-jni.c
|
||||
libturbojpeg_la_CFLAGS = ${JNI_CFLAGS}
|
||||
TJMAPFILE = turbojpeg-mapfile.jni
|
||||
|
||||
else
|
||||
|
||||
TJMAPFILE = turbojpeg-mapfile
|
||||
|
||||
endif
|
||||
|
||||
libturbojpeg_la_SOURCES += $(TJMAPFILE)
|
||||
|
||||
if VERSION_SCRIPT
|
||||
libturbojpeg_la_LDFLAGS += $(VERSION_SCRIPT_FLAG)$(srcdir)/$(TJMAPFILE)
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
|
||||
if VERSION_SCRIPT
|
||||
libjpeg_la_LDFLAGS += $(VERSION_SCRIPT_FLAG)libjpeg.map
|
||||
endif
|
||||
|
||||
|
||||
if WITH_SIMD
|
||||
|
||||
SUBDIRS += simd
|
||||
libjpeg_la_LIBADD = simd/libsimd.la
|
||||
libturbojpeg_la_LIBADD = simd/libsimd.la
|
||||
|
||||
else
|
||||
|
||||
libjpeg_la_SOURCES += jsimd_none.c
|
||||
|
||||
endif
|
||||
|
||||
|
||||
bin_PROGRAMS = cjpeg djpeg jpegtran rdjpgcom wrjpgcom
|
||||
noinst_PROGRAMS = jcstest jpegyuv yuvjpeg
|
||||
|
||||
|
||||
if WITH_TURBOJPEG
|
||||
|
||||
bin_PROGRAMS += tjbench
|
||||
|
||||
noinst_PROGRAMS += tjunittest
|
||||
|
||||
tjbench_SOURCES = tjbench.c bmp.h bmp.c tjutil.h tjutil.c rdbmp.c rdppm.c \
|
||||
wrbmp.c wrppm.c
|
||||
|
||||
tjbench_LDADD = libturbojpeg.la libjpeg.la -lm
|
||||
|
||||
tjbench_CFLAGS = -DBMP_SUPPORTED -DPPM_SUPPORTED
|
||||
|
||||
tjunittest_SOURCES = tjunittest.c tjutil.h tjutil.c
|
||||
|
||||
tjunittest_LDADD = libturbojpeg.la
|
||||
|
||||
endif
|
||||
|
||||
|
||||
cjpeg_SOURCES = cdjpeg.h cderror.h cdjpeg.c cjpeg.c rdgif.c rdppm.c rdswitch.c rdjpeg.c
|
||||
if WITH_12BIT
|
||||
else
|
||||
cjpeg_SOURCES += rdbmp.c rdtarga.c
|
||||
endif
|
||||
|
||||
cjpeg_LDADD = libjpeg.la
|
||||
|
||||
cjpeg_CFLAGS = -DGIF_SUPPORTED -DPPM_SUPPORTED
|
||||
if WITH_12BIT
|
||||
else
|
||||
cjpeg_CFLAGS += -DBMP_SUPPORTED -DTARGA_SUPPORTED
|
||||
endif
|
||||
|
||||
if HAVE_LIBPNG
|
||||
cjpeg_CFLAGS += -DPNG_SUPPORTED $(libpng_CFLAGS)
|
||||
cjpeg_LDADD += $(libpng_LIBS)
|
||||
cjpeg_SOURCES += rdpng.c
|
||||
endif
|
||||
|
||||
djpeg_SOURCES = cdjpeg.h cderror.h cdjpeg.c djpeg.c rdcolmap.c rdswitch.c \
|
||||
wrgif.c wrppm.c
|
||||
if WITH_12BIT
|
||||
else
|
||||
djpeg_SOURCES += wrbmp.c wrtarga.c
|
||||
endif
|
||||
|
||||
djpeg_LDADD = libjpeg.la
|
||||
|
||||
djpeg_CFLAGS = -DGIF_SUPPORTED -DPPM_SUPPORTED
|
||||
if WITH_12BIT
|
||||
else
|
||||
djpeg_CFLAGS += -DBMP_SUPPORTED -DTARGA_SUPPORTED
|
||||
endif
|
||||
|
||||
jpegtran_SOURCES = jpegtran.c rdswitch.c cdjpeg.c transupp.c transupp.h
|
||||
|
||||
jpegtran_LDADD = libjpeg.la
|
||||
|
||||
rdjpgcom_SOURCES = rdjpgcom.c
|
||||
|
||||
rdjpgcom_LDADD = libjpeg.la
|
||||
|
||||
wrjpgcom_SOURCES = wrjpgcom.c
|
||||
|
||||
wrjpgcom_LDADD = libjpeg.la
|
||||
|
||||
jcstest_SOURCES = jcstest.c
|
||||
|
||||
jcstest_LDADD = libjpeg.la
|
||||
|
||||
jpegyuv_SOURCES = jpegyuv.c
|
||||
|
||||
jpegyuv_LDADD = libjpeg.la
|
||||
|
||||
yuvjpeg_SOURCES = yuvjpeg.c
|
||||
|
||||
yuvjpeg_LDADD = libjpeg.la
|
||||
|
||||
dist_man1_MANS = cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1
|
||||
|
||||
DOCS= coderules.txt jconfig.txt change.log rdrle.c wrrle.c BUILDING.md \
|
||||
ChangeLog.md
|
||||
|
||||
dist_doc_DATA = README.ijg README.md libjpeg.txt structure.txt usage.txt \
|
||||
wizard.txt LICENSE.md
|
||||
|
||||
exampledir = $(docdir)
|
||||
dist_example_DATA = example.c
|
||||
|
||||
|
||||
EXTRA_DIST = win release $(DOCS) testimages CMakeLists.txt \
|
||||
sharedlib/CMakeLists.txt cmakescripts libjpeg.map.in doc doxygen.config \
|
||||
doxygen-extra.css jccolext.c jdcolext.c jdcol565.c jdmrgext.c jdmrg565.c \
|
||||
jstdhuff.c jdcoefct.h jdmainct.h jdmaster.h jdsample.h wrppm.h \
|
||||
md5/CMakeLists.txt
|
||||
|
||||
dist-hook:
|
||||
rm -rf `find $(distdir) -name .svn`
|
||||
|
||||
|
||||
SUBDIRS += md5
|
||||
|
||||
if WITH_12BIT
|
||||
|
||||
TESTORIG = testorig12.jpg
|
||||
MD5_JPEG_RGB_ISLOW = 9620f424569594bb9242b48498ad801f
|
||||
MD5_PPM_RGB_ISLOW = f3301d2219783b8b3d942b7239fa50c0
|
||||
MD5_JPEG_422_IFAST_OPT = 7322e3bd2f127f7de4b40d4480ce60e4
|
||||
MD5_PPM_422_IFAST = 79807fa552899e66a04708f533e16950
|
||||
MD5_PPM_422M_IFAST = 07737bfe8a7c1c87aaa393a0098d16b0
|
||||
MD5_JPEG_420_IFAST_Q100_PROG = a1da220b5604081863a504297ed59e55
|
||||
MD5_PPM_420_Q100_IFAST = 1b3730122709f53d007255e8dfd3305e
|
||||
MD5_PPM_420M_Q100_IFAST = 980a1a3c5bf9510022869d30b7d26566
|
||||
MD5_JPEG_GRAY_ISLOW = 235c90707b16e2e069f37c888b2636d9
|
||||
MD5_PPM_GRAY_ISLOW = 7213c10af507ad467da5578ca5ee1fca
|
||||
MD5_PPM_GRAY_ISLOW_RGB = e96ee81c30a6ed422d466338bd3de65d
|
||||
MD5_JPEG_420S_IFAST_OPT = 7af8e60be4d9c227ec63ac9b6630855e
|
||||
MD5_JPEG_3x2_FLOAT_PROG_SSE = a8c17daf77b457725ec929e215b603f8
|
||||
MD5_PPM_3x2_FLOAT_SSE = 42876ab9e5c2f76a87d08db5fbd57956
|
||||
MD5_JPEG_3x2_FLOAT_PROG_32BIT = a8c17daf77b457725ec929e215b603f8
|
||||
MD5_PPM_3x2_FLOAT_32BIT = 42876ab9e5c2f76a87d08db5fbd57956
|
||||
MD5_PPM_3x2_FLOAT_64BIT = d6fbc71153b3d8ded484dbc17c7b9cf4
|
||||
MD5_JPEG_3x2_FLOAT_PROG_387 = bc6dbbefac2872f6b9d6c4a0ae60c3c0
|
||||
MD5_PPM_3x2_FLOAT_387 = bcc5723c61560463ac60f772e742d092
|
||||
MD5_JPEG_3x2_IFAST_PROG = 1396cc2b7185cfe943d408c9d305339e
|
||||
MD5_PPM_3x2_IFAST = 3975985ef6eeb0a2cdc58daa651ccc00
|
||||
MD5_PPM_420M_ISLOW_2_1 = 4ca6be2a6f326ff9eaab63e70a8259c0
|
||||
MD5_PPM_420M_ISLOW_15_8 = 12aa9f9534c1b3d7ba047322226365eb
|
||||
MD5_PPM_420M_ISLOW_13_8 = f7e22817c7b25e1393e4ec101e9d4e96
|
||||
MD5_PPM_420M_ISLOW_11_8 = 800a16f9f4dc9b293197bfe11be10a82
|
||||
MD5_PPM_420M_ISLOW_9_8 = 06b7a92a9bc69f4dc36ec40f1937d55c
|
||||
MD5_PPM_420M_ISLOW_7_8 = 3ec444a14a4ab4eab88ffc49c48eca43
|
||||
MD5_PPM_420M_ISLOW_3_4 = 3e726b7ea872445b19437d1c1d4f0d93
|
||||
MD5_PPM_420M_ISLOW_5_8 = a8a771abdc94301d20ffac119b2caccd
|
||||
MD5_PPM_420M_ISLOW_1_2 = b419124dd5568b085787234866102866
|
||||
MD5_PPM_420M_ISLOW_3_8 = 343d19015531b7bbe746124127244fa8
|
||||
MD5_PPM_420M_ISLOW_1_4 = 35fd59d866e44659edfa3c18db2a3edb
|
||||
MD5_PPM_420M_ISLOW_1_8 = ccaed48ac0aedefda5d4abe4013f4ad7
|
||||
MD5_PPM_420_ISLOW_SKIP15_31 = 86664cd9dc956536409e44e244d20a97
|
||||
MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 = 452a21656115a163029cfba5c04fa76a
|
||||
MD5_PPM_444_ISLOW_SKIP1_6 = ef63901f71ef7a75cd78253fc0914f84
|
||||
MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 = 15b173fb5872d9575572fbcc1b05956f
|
||||
MD5_JPEG_CROP = cdb35ff4b4519392690ea040c56ea99c
|
||||
|
||||
else
|
||||
|
||||
TESTORIG = testorig.jpg
|
||||
MD5_JPEG_RGB_ISLOW = 768e970dd57b340ff1b83c9d3d47c77b
|
||||
MD5_PPM_RGB_ISLOW = 00a257f5393fef8821f2b88ac7421291
|
||||
MD5_BMP_RGB_ISLOW_565 = f07d2e75073e4bb10f6c6f4d36e2e3be
|
||||
MD5_BMP_RGB_ISLOW_565D = 4cfa0928ef3e6bb626d7728c924cfda4
|
||||
MD5_JPEG_422_IFAST_OPT = 2540287b79d913f91665e660303ab2c8
|
||||
MD5_PPM_422_IFAST = 35bd6b3f833bad23de82acea847129fa
|
||||
MD5_PPM_422M_IFAST = 8dbc65323d62cca7c91ba02dd1cfa81d
|
||||
MD5_BMP_422M_IFAST_565 = 3294bd4d9a1f2b3d08ea6020d0db7065
|
||||
MD5_BMP_422M_IFAST_565D = da98c9c7b6039511be4a79a878a9abc1
|
||||
MD5_JPEG_420_IFAST_Q100_PROG = 990cbe0329c882420a2094da7e5adade
|
||||
MD5_PPM_420_Q100_IFAST = 5a732542015c278ff43635e473a8a294
|
||||
MD5_PPM_420M_Q100_IFAST = ff692ee9323a3b424894862557c092f1
|
||||
MD5_JPEG_GRAY_ISLOW = 72b51f894b8f4a10b3ee3066770aa38d
|
||||
MD5_PPM_GRAY_ISLOW = 8d3596c56eace32f205deccc229aa5ed
|
||||
MD5_PPM_GRAY_ISLOW_RGB = 116424ac07b79e5e801f00508eab48ec
|
||||
MD5_BMP_GRAY_ISLOW_565 = 12f78118e56a2f48b966f792fedf23cc
|
||||
MD5_BMP_GRAY_ISLOW_565D = bdbbd616441a24354c98553df5dc82db
|
||||
MD5_JPEG_420S_IFAST_OPT = 388708217ac46273ca33086b22827ed8
|
||||
# See README.md for more details on why this next bit is necessary.
|
||||
MD5_JPEG_3x2_FLOAT_PROG_SSE = 343e3f8caf8af5986ebaf0bdc13b5c71
|
||||
MD5_PPM_3x2_FLOAT_SSE = 1a75f36e5904d6fc3a85a43da9ad89bb
|
||||
MD5_JPEG_3x2_FLOAT_PROG_32BIT = 9bca803d2042bd1eb03819e2bf92b3e5
|
||||
MD5_PPM_3x2_FLOAT_32BIT = f6bfab038438ed8f5522fbd33595dcdc
|
||||
MD5_PPM_3x2_FLOAT_64BIT = 0e917a34193ef976b679a6b069b1be26
|
||||
MD5_JPEG_3x2_FLOAT_PROG_387 = 1657664a410e0822c924b54f6f65e6e9
|
||||
MD5_PPM_3x2_FLOAT_387 = cb0a1f027f3d2917c902b5640214e025
|
||||
MD5_JPEG_3x2_IFAST_PROG = 1ee5d2c1a77f2da495f993c8c7cceca5
|
||||
MD5_PPM_3x2_IFAST = fd283664b3b49127984af0a7f118fccd
|
||||
MD5_JPEG_420_ISLOW_ARI = e986fb0a637a8d833d96e8a6d6d84ea1
|
||||
MD5_JPEG_444_ISLOW_PROGARI = 0a8f1c8f66e113c3cf635df0a475a617
|
||||
MD5_PPM_420M_IFAST_ARI = 72b59a99bcf1de24c5b27d151bde2437
|
||||
MD5_JPEG_420_ISLOW = 9a68f56bc76e466aa7e52f415d0f4a5f
|
||||
MD5_PPM_420M_ISLOW_2_1 = 9f9de8c0612f8d06869b960b05abf9c9
|
||||
MD5_PPM_420M_ISLOW_15_8 = b6875bc070720b899566cc06459b63b7
|
||||
MD5_PPM_420M_ISLOW_13_8 = bc3452573c8152f6ae552939ee19f82f
|
||||
MD5_PPM_420M_ISLOW_11_8 = d8cc73c0aaacd4556569b59437ba00a5
|
||||
MD5_PPM_420M_ISLOW_9_8 = d25e61bc7eac0002f5b393aa223747b6
|
||||
MD5_PPM_420M_ISLOW_7_8 = ddb564b7c74a09494016d6cd7502a946
|
||||
MD5_PPM_420M_ISLOW_3_4 = 8ed8e68808c3fbc4ea764fc9d2968646
|
||||
MD5_PPM_420M_ISLOW_5_8 = a3363274999da2366a024efae6d16c9b
|
||||
MD5_PPM_420M_ISLOW_1_2 = e692a315cea26b988c8e8b29a5dbcd81
|
||||
MD5_PPM_420M_ISLOW_3_8 = 79eca9175652ced755155c90e785a996
|
||||
MD5_PPM_420M_ISLOW_1_4 = 79cd778f8bf1a117690052cacdd54eca
|
||||
MD5_PPM_420M_ISLOW_1_8 = 391b3d4aca640c8567d6f8745eb2142f
|
||||
MD5_BMP_420_ISLOW_256 = 4980185e3776e89bd931736e1cddeee6
|
||||
MD5_BMP_420_ISLOW_565 = bf9d13e16c4923b92e1faa604d7922cb
|
||||
MD5_BMP_420_ISLOW_565D = 6bde71526acc44bcff76f696df8638d2
|
||||
MD5_BMP_420M_ISLOW_565 = 8dc0185245353cfa32ad97027342216f
|
||||
MD5_BMP_420M_ISLOW_565D =d1be3a3339166255e76fa50a0d70d73e
|
||||
MD5_PPM_420_ISLOW_SKIP15_31 = c4c65c1e43d7275cd50328a61e6534f0
|
||||
MD5_PPM_420_ISLOW_ARI_SKIP16_139 = 087c6b123db16ac00cb88c5b590bb74a
|
||||
MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 = 26eb36ccc7d1f0cb80cdabb0ac8b5d99
|
||||
MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4 = 886c6775af22370257122f8b16207e6d
|
||||
MD5_PPM_444_ISLOW_SKIP1_6 = 5606f86874cf26b8fcee1117a0a436a6
|
||||
MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 = db87dc7ce26bcdc7a6b56239ce2b9d6c
|
||||
MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0 = cb57b32bd6d03e35432362f7bf184b6d
|
||||
MD5_JPEG_CROP = b4197f377e621c4e9b1d20471432610d
|
||||
|
||||
endif
|
||||
|
||||
.PHONY: test
|
||||
test: tjquicktest tjbittest bittest
|
||||
|
||||
if CROSS_COMPILING
|
||||
tjquicktest: testclean
|
||||
else
|
||||
tjquicktest: testclean all
|
||||
endif
|
||||
|
||||
if WITH_TURBOJPEG
|
||||
if WITH_JAVA
|
||||
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest
|
||||
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -bi
|
||||
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv
|
||||
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv -noyuvpad
|
||||
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv -bi
|
||||
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv -bi -noyuvpad
|
||||
endif
|
||||
./tjunittest
|
||||
./tjunittest -alloc
|
||||
./tjunittest -yuv
|
||||
./tjunittest -yuv -alloc
|
||||
./tjunittest -yuv -noyuvpad
|
||||
endif
|
||||
echo GREAT SUCCESS!
|
||||
|
||||
if CROSS_COMPILING
|
||||
tjbittest: testclean
|
||||
else
|
||||
tjbittest: testclean all
|
||||
endif
|
||||
|
||||
if WITH_TURBOJPEG
|
||||
|
||||
MD5_PPM_GRAY_TILE = 89d3ca21213d9d864b50b4e4e7de4ca6
|
||||
MD5_PPM_420_8x8_TILE = 847fceab15c5b7b911cb986cf0f71de3
|
||||
MD5_PPM_420_16x16_TILE = ca45552a93687e078f7137cc4126a7b0
|
||||
MD5_PPM_420_32x32_TILE = d8676f1d6b68df358353bba9844f4a00
|
||||
MD5_PPM_420_64x64_TILE = 4e4c1a3d7ea4bace4f868bcbe83b7050
|
||||
MD5_PPM_420_128x128_TILE = f24c3429c52265832beab9df72a0ceae
|
||||
MD5_PPM_420M_8x8_TILE = bc25320e1f4c31ce2e610e43e9fd173c
|
||||
MD5_PPM_420M_TILE = 75ffdf14602258c5c189522af57fa605
|
||||
MD5_PPM_422_8x8_TILE = d83dacd9fc73b0a6f10c09acad64eb1e
|
||||
MD5_PPM_422_16x16_TILE = 35077fb610d72dd743b1eb0cbcfe10fb
|
||||
MD5_PPM_422_32x32_TILE = e6902ed8a449ecc0f0d6f2bf945f65f7
|
||||
MD5_PPM_422_64x64_TILE = 2b4502a8f316cedbde1da7bce3d2231e
|
||||
MD5_PPM_422_128x128_TILE = f0b5617d578f5e13c8eee215d64d4877
|
||||
MD5_PPM_422M_8x8_TILE = 828941d7f41cd6283abd6beffb7fd51d
|
||||
MD5_PPM_422M_TILE = e877ae1324c4a280b95376f7f018172f
|
||||
MD5_PPM_444_TILE = 7964e41e67cfb8d0a587c0aa4798f9c3
|
||||
|
||||
# Test compressing from/decompressing to an arbitrary subregion of a larger
|
||||
# image buffer
|
||||
cp $(srcdir)/testimages/testorig.ppm testout_tile.ppm
|
||||
TJ_REVERT=1 ./tjbench testout_tile.ppm 95 -rgb -quiet -tile -benchtime 0.01 -warmup 0 >/dev/null 2>&1
|
||||
for i in 8 16 32 64 128; do \
|
||||
md5/md5cmp $(MD5_PPM_GRAY_TILE) testout_tile_GRAY_Q95_$$i\x$$i.ppm; \
|
||||
done
|
||||
md5/md5cmp $(MD5_PPM_420_8x8_TILE) testout_tile_420_Q95_8x8.ppm
|
||||
md5/md5cmp $(MD5_PPM_420_16x16_TILE) testout_tile_420_Q95_16x16.ppm
|
||||
md5/md5cmp $(MD5_PPM_420_32x32_TILE) testout_tile_420_Q95_32x32.ppm
|
||||
md5/md5cmp $(MD5_PPM_420_64x64_TILE) testout_tile_420_Q95_64x64.ppm
|
||||
md5/md5cmp $(MD5_PPM_420_128x128_TILE) testout_tile_420_Q95_128x128.ppm
|
||||
md5/md5cmp $(MD5_PPM_422_8x8_TILE) testout_tile_422_Q95_8x8.ppm
|
||||
md5/md5cmp $(MD5_PPM_422_16x16_TILE) testout_tile_422_Q95_16x16.ppm
|
||||
md5/md5cmp $(MD5_PPM_422_32x32_TILE) testout_tile_422_Q95_32x32.ppm
|
||||
md5/md5cmp $(MD5_PPM_422_64x64_TILE) testout_tile_422_Q95_64x64.ppm
|
||||
md5/md5cmp $(MD5_PPM_422_128x128_TILE) testout_tile_422_Q95_128x128.ppm
|
||||
for i in 8 16 32 64 128; do \
|
||||
md5/md5cmp $(MD5_PPM_444_TILE) testout_tile_444_Q95_$$i\x$$i.ppm; \
|
||||
done
|
||||
rm -f testout_tile_GRAY_* testout_tile_420_* testout_tile_422_* testout_tile_444_*
|
||||
|
||||
TJ_REVERT=1 ./tjbench testout_tile.ppm 95 -rgb -fastupsample -quiet -tile -benchtime 0.01 -warmup 0 >/dev/null 2>&1
|
||||
md5/md5cmp $(MD5_PPM_420M_8x8_TILE) testout_tile_420_Q95_8x8.ppm
|
||||
for i in 16 32 64 128; do \
|
||||
md5/md5cmp $(MD5_PPM_420M_TILE) testout_tile_420_Q95_$$i\x$$i.ppm; \
|
||||
done
|
||||
md5/md5cmp $(MD5_PPM_422M_8x8_TILE) testout_tile_422_Q95_8x8.ppm
|
||||
for i in 16 32 64 128; do \
|
||||
md5/md5cmp $(MD5_PPM_422M_TILE) testout_tile_422_Q95_$$i\x$$i.ppm; \
|
||||
done
|
||||
rm -f testout_tile_GRAY_* testout_tile_420_* testout_tile_422_* testout_tile_444_* testout_tile.ppm
|
||||
echo GREAT SUCCESS!
|
||||
|
||||
endif
|
||||
|
||||
if CROSS_COMPILING
|
||||
bittest: testclean
|
||||
else
|
||||
bittest: testclean all
|
||||
endif
|
||||
|
||||
# These tests are carefully crafted to provide full coverage of as many of the
|
||||
# underlying algorithms as possible (including all of the SIMD-accelerated
|
||||
# ones.)
|
||||
|
||||
# CC: null SAMP: fullsize FDCT: islow ENT: huff
|
||||
./cjpeg -revert -rgb -dct int -outfile testout_rgb_islow.jpg $(srcdir)/testimages/testorig.ppm
|
||||
md5/md5cmp $(MD5_JPEG_RGB_ISLOW) testout_rgb_islow.jpg
|
||||
# CC: null SAMP: fullsize IDCT: islow ENT: huff
|
||||
./djpeg -dct int -ppm -outfile testout_rgb_islow.ppm testout_rgb_islow.jpg
|
||||
md5/md5cmp $(MD5_PPM_RGB_ISLOW) testout_rgb_islow.ppm
|
||||
rm -f testout_rgb_islow.ppm
|
||||
if WITH_12BIT
|
||||
rm -f testout_rgb_islow.jpg
|
||||
else
|
||||
# CC: RGB->RGB565 SAMP: fullsize IDCT: islow ENT: huff
|
||||
./djpeg -dct int -rgb565 -dither none -bmp -outfile testout_rgb_islow_565.bmp testout_rgb_islow.jpg
|
||||
md5/md5cmp $(MD5_BMP_RGB_ISLOW_565) testout_rgb_islow_565.bmp
|
||||
rm -f testout_rgb_islow_565.bmp
|
||||
# CC: RGB->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff
|
||||
./djpeg -dct int -rgb565 -bmp -outfile testout_rgb_islow_565D.bmp testout_rgb_islow.jpg
|
||||
md5/md5cmp $(MD5_BMP_RGB_ISLOW_565D) testout_rgb_islow_565D.bmp
|
||||
rm -f testout_rgb_islow_565D.bmp testout_rgb_islow.jpg
|
||||
endif
|
||||
|
||||
# CC: RGB->YCC SAMP: fullsize/h2v1 FDCT: ifast ENT: 2-pass huff
|
||||
./cjpeg -revert -sample 2x1 -dct fast -opt -outfile testout_422_ifast_opt.jpg $(srcdir)/testimages/testorig.ppm
|
||||
md5/md5cmp $(MD5_JPEG_422_IFAST_OPT) testout_422_ifast_opt.jpg
|
||||
# CC: YCC->RGB SAMP: fullsize/h2v1 fancy IDCT: ifast ENT: huff
|
||||
./djpeg -dct fast -outfile testout_422_ifast.ppm testout_422_ifast_opt.jpg
|
||||
md5/md5cmp $(MD5_PPM_422_IFAST) testout_422_ifast.ppm
|
||||
rm -f testout_422_ifast.ppm
|
||||
# CC: YCC->RGB SAMP: h2v1 merged IDCT: ifast ENT: huff
|
||||
./djpeg -dct fast -nosmooth -outfile testout_422m_ifast.ppm testout_422_ifast_opt.jpg
|
||||
md5/md5cmp $(MD5_PPM_422M_IFAST) testout_422m_ifast.ppm
|
||||
rm -f testout_422m_ifast.ppm
|
||||
if WITH_12BIT
|
||||
rm -f testout_422_ifast_opt.jpg
|
||||
else
|
||||
# CC: YCC->RGB565 SAMP: h2v1 merged IDCT: ifast ENT: huff
|
||||
./djpeg -dct int -nosmooth -rgb565 -dither none -bmp -outfile testout_422m_ifast_565.bmp testout_422_ifast_opt.jpg
|
||||
md5/md5cmp $(MD5_BMP_422M_IFAST_565) testout_422m_ifast_565.bmp
|
||||
rm -f testout_422m_ifast_565.bmp
|
||||
# CC: YCC->RGB565 (dithered) SAMP: h2v1 merged IDCT: ifast ENT: huff
|
||||
./djpeg -dct int -nosmooth -rgb565 -bmp -outfile testout_422m_ifast_565D.bmp testout_422_ifast_opt.jpg
|
||||
md5/md5cmp $(MD5_BMP_422M_IFAST_565D) testout_422m_ifast_565D.bmp
|
||||
rm -f testout_422m_ifast_565D.bmp testout_422_ifast_opt.jpg
|
||||
endif
|
||||
|
||||
# CC: RGB->YCC SAMP: fullsize/h2v2 FDCT: ifast ENT: prog huff
|
||||
./cjpeg -revert -sample 2x2 -quality 100 -dct fast -prog -outfile testout_420_q100_ifast_prog.jpg $(srcdir)/testimages/testorig.ppm
|
||||
md5/md5cmp $(MD5_JPEG_420_IFAST_Q100_PROG) testout_420_q100_ifast_prog.jpg
|
||||
# CC: YCC->RGB SAMP: fullsize/h2v2 fancy IDCT: ifast ENT: prog huff
|
||||
./djpeg -dct fast -outfile testout_420_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
|
||||
md5/md5cmp $(MD5_PPM_420_Q100_IFAST) testout_420_q100_ifast.ppm
|
||||
rm -f testout_420_q100_ifast.ppm
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: ifast ENT: prog huff
|
||||
./djpeg -dct fast -nosmooth -outfile testout_420m_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
|
||||
md5/md5cmp $(MD5_PPM_420M_Q100_IFAST) testout_420m_q100_ifast.ppm
|
||||
rm -f testout_420m_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
|
||||
|
||||
# CC: RGB->Gray SAMP: fullsize FDCT: islow ENT: huff
|
||||
./cjpeg -revert -gray -dct int -outfile testout_gray_islow.jpg $(srcdir)/testimages/testorig.ppm
|
||||
md5/md5cmp $(MD5_JPEG_GRAY_ISLOW) testout_gray_islow.jpg
|
||||
# CC: Gray->Gray SAMP: fullsize IDCT: islow ENT: huff
|
||||
./djpeg -dct int -outfile testout_gray_islow.ppm testout_gray_islow.jpg
|
||||
md5/md5cmp $(MD5_PPM_GRAY_ISLOW) testout_gray_islow.ppm
|
||||
rm -f testout_gray_islow.ppm
|
||||
# CC: Gray->RGB SAMP: fullsize IDCT: islow ENT: huff
|
||||
./djpeg -dct int -rgb -outfile testout_gray_islow_rgb.ppm testout_gray_islow.jpg
|
||||
md5/md5cmp $(MD5_PPM_GRAY_ISLOW_RGB) testout_gray_islow_rgb.ppm
|
||||
rm -f testout_gray_islow_rgb.ppm
|
||||
if WITH_12BIT
|
||||
rm -f testout_gray_islow.jpg
|
||||
else
|
||||
# CC: Gray->RGB565 SAMP: fullsize IDCT: islow ENT: huff
|
||||
./djpeg -dct int -rgb565 -dither none -bmp -outfile testout_gray_islow_565.bmp testout_gray_islow.jpg
|
||||
md5/md5cmp $(MD5_BMP_GRAY_ISLOW_565) testout_gray_islow_565.bmp
|
||||
rm -f testout_gray_islow_565.bmp
|
||||
# CC: Gray->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff
|
||||
./djpeg -dct int -rgb565 -bmp -outfile testout_gray_islow_565D.bmp testout_gray_islow.jpg
|
||||
md5/md5cmp $(MD5_BMP_GRAY_ISLOW_565D) testout_gray_islow_565D.bmp
|
||||
rm -f testout_gray_islow_565D.bmp testout_gray_islow.jpg
|
||||
endif
|
||||
|
||||
# CC: RGB->YCC SAMP: fullsize smooth/h2v2 smooth FDCT: islow
|
||||
# ENT: 2-pass huff
|
||||
./cjpeg -revert -sample 2x2 -smooth 1 -dct int -opt -outfile testout_420s_ifast_opt.jpg $(srcdir)/testimages/testorig.ppm
|
||||
md5/md5cmp $(MD5_JPEG_420S_IFAST_OPT) testout_420s_ifast_opt.jpg
|
||||
rm -f testout_420s_ifast_opt.jpg
|
||||
|
||||
# The output of the floating point tests is not validated by default, because
|
||||
# the output differs depending on the type of floating point math used, and
|
||||
# this is only deterministic if the DCT/IDCT are implemented using SIMD
|
||||
# instructions on a particular platform. Pass one of the following on the make
|
||||
# command line to validate the floating point tests against one of the expected
|
||||
# results:
|
||||
#
|
||||
# FLOATTEST=sse validate against the expected results from the libjpeg-turbo
|
||||
# SSE SIMD extensions
|
||||
# FLOATTEST=32bit validate against the expected results from the C code
|
||||
# when running on a 32-bit FPU (or when SSE is being used for
|
||||
# floating point math, which is generally the default with
|
||||
# x86-64 compilers)
|
||||
# FLOATTEST=64bit validate against the exepected results from the C code
|
||||
# when running on a 64-bit FPU
|
||||
# FLOATTEST=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 with x86 compilers)
|
||||
|
||||
# CC: RGB->YCC SAMP: fullsize/int FDCT: float ENT: prog huff
|
||||
./cjpeg -revert -sample 3x2 -dct float -prog -outfile testout_3x2_float_prog.jpg $(srcdir)/testimages/testorig.ppm
|
||||
if [ "${FLOATTEST}" = "sse" ]; then \
|
||||
md5/md5cmp $(MD5_JPEG_3x2_FLOAT_PROG_SSE) testout_3x2_float_prog.jpg; \
|
||||
elif [ "${FLOATTEST}" = "32bit" -o "${FLOATTEST}" = "64bit" ]; then \
|
||||
md5/md5cmp $(MD5_JPEG_3x2_FLOAT_PROG_32BIT) testout_3x2_float_prog.jpg; \
|
||||
elif [ "${FLOATTEST}" = "387" ]; then \
|
||||
md5/md5cmp $(MD5_JPEG_3x2_FLOAT_PROG_387) testout_3x2_float_prog.jpg; \
|
||||
fi
|
||||
# CC: YCC->RGB SAMP: fullsize/int IDCT: float ENT: prog huff
|
||||
./djpeg -dct float -outfile testout_3x2_float.ppm testout_3x2_float_prog.jpg
|
||||
if [ "${FLOATTEST}" = "sse" ]; then \
|
||||
md5/md5cmp $(MD5_PPM_3x2_FLOAT_SSE) testout_3x2_float.ppm; \
|
||||
elif [ "${FLOATTEST}" = "32bit" ]; then \
|
||||
md5/md5cmp $(MD5_PPM_3x2_FLOAT_32BIT) testout_3x2_float.ppm; \
|
||||
elif [ "${FLOATTEST}" = "64bit" ]; then \
|
||||
md5/md5cmp $(MD5_PPM_3x2_FLOAT_64BIT) testout_3x2_float.ppm; \
|
||||
elif [ "${FLOATTEST}" = "387" ]; then \
|
||||
md5/md5cmp $(MD5_PPM_3x2_FLOAT_387) testout_3x2_float.ppm; \
|
||||
fi
|
||||
rm -f testout_3x2_float.ppm testout_3x2_float_prog.jpg
|
||||
|
||||
# CC: RGB->YCC SAMP: fullsize/int FDCT: ifast ENT: prog huff
|
||||
./cjpeg -revert -sample 3x2 -dct fast -prog -outfile testout_3x2_ifast_prog.jpg $(srcdir)/testimages/testorig.ppm
|
||||
md5/md5cmp $(MD5_JPEG_3x2_IFAST_PROG) testout_3x2_ifast_prog.jpg
|
||||
# CC: YCC->RGB SAMP: fullsize/int IDCT: ifast ENT: prog huff
|
||||
./djpeg -dct fast -outfile testout_3x2_ifast.ppm testout_3x2_ifast_prog.jpg
|
||||
md5/md5cmp $(MD5_PPM_3x2_IFAST) testout_3x2_ifast.ppm
|
||||
rm -f testout_3x2_ifast.ppm testout_3x2_ifast_prog.jpg
|
||||
|
||||
if WITH_ARITH_ENC
|
||||
# CC: YCC->RGB SAMP: fullsize/h2v2 FDCT: islow ENT: arith
|
||||
./cjpeg -revert -dct int -arithmetic -outfile testout_420_islow_ari.jpg $(srcdir)/testimages/testorig.ppm
|
||||
md5/md5cmp $(MD5_JPEG_420_ISLOW_ARI) testout_420_islow_ari.jpg
|
||||
rm -f testout_420_islow_ari.jpg
|
||||
./jpegtran -revert -arithmetic -outfile testout_420_islow_ari.jpg $(srcdir)/testimages/testimgint.jpg
|
||||
md5/md5cmp $(MD5_JPEG_420_ISLOW_ARI) testout_420_islow_ari.jpg
|
||||
rm -f testout_420_islow_ari.jpg
|
||||
# CC: YCC->RGB SAMP: fullsize FDCT: islow ENT: prog arith
|
||||
./cjpeg -revert -sample 1x1 -dct int -prog -arithmetic -outfile testout_444_islow_progari.jpg $(srcdir)/testimages/testorig.ppm
|
||||
md5/md5cmp $(MD5_JPEG_444_ISLOW_PROGARI) testout_444_islow_progari.jpg
|
||||
rm -f testout_444_islow_progari.jpg
|
||||
endif
|
||||
if WITH_ARITH_DEC
|
||||
# CC: RGB->YCC SAMP: h2v2 merged IDCT: ifast ENT: arith
|
||||
./djpeg -fast -ppm -outfile testout_420m_ifast_ari.ppm $(srcdir)/testimages/testimgari.jpg
|
||||
md5/md5cmp $(MD5_PPM_420M_IFAST_ARI) testout_420m_ifast_ari.ppm
|
||||
rm -f testout_420m_ifast_ari.ppm
|
||||
./jpegtran -revert -outfile testout_420_islow.jpg $(srcdir)/testimages/testimgari.jpg
|
||||
md5/md5cmp $(MD5_JPEG_420_ISLOW) testout_420_islow.jpg
|
||||
rm -f testout_420_islow.jpg
|
||||
endif
|
||||
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 16x16 islow ENT: huff
|
||||
./djpeg -dct int -scale 2/1 -nosmooth -ppm -outfile testout_420m_islow_2_1.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420M_ISLOW_2_1) testout_420m_islow_2_1.ppm
|
||||
rm -f testout_420m_islow_2_1.ppm
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 15x15 islow ENT: huff
|
||||
./djpeg -dct int -scale 15/8 -nosmooth -ppm -outfile testout_420m_islow_15_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420M_ISLOW_15_8) testout_420m_islow_15_8.ppm
|
||||
rm -f testout_420m_islow_15_8.ppm
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 13x13 islow ENT: huff
|
||||
./djpeg -dct int -scale 13/8 -nosmooth -ppm -outfile testout_420m_islow_13_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420M_ISLOW_13_8) testout_420m_islow_13_8.ppm
|
||||
rm -f testout_420m_islow_13_8.ppm
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 11x11 islow ENT: huff
|
||||
./djpeg -dct int -scale 11/8 -nosmooth -ppm -outfile testout_420m_islow_11_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420M_ISLOW_11_8) testout_420m_islow_11_8.ppm
|
||||
rm -f testout_420m_islow_11_8.ppm
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 9x9 islow ENT: huff
|
||||
./djpeg -dct int -scale 9/8 -nosmooth -ppm -outfile testout_420m_islow_9_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420M_ISLOW_9_8) testout_420m_islow_9_8.ppm
|
||||
rm -f testout_420m_islow_9_8.ppm
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 7x7 islow/14x14 islow ENT: huff
|
||||
./djpeg -dct int -scale 7/8 -nosmooth -ppm -outfile testout_420m_islow_7_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420M_ISLOW_7_8) testout_420m_islow_7_8.ppm
|
||||
rm -f testout_420m_islow_7_8.ppm
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 6x6 islow/12x12 islow ENT: huff
|
||||
./djpeg -dct int -scale 3/4 -nosmooth -ppm -outfile testout_420m_islow_3_4.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420M_ISLOW_3_4) testout_420m_islow_3_4.ppm
|
||||
rm -f testout_420m_islow_3_4.ppm
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 5x5 islow/10x10 islow ENT: huff
|
||||
./djpeg -dct int -scale 5/8 -nosmooth -ppm -outfile testout_420m_islow_5_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420M_ISLOW_5_8) testout_420m_islow_5_8.ppm
|
||||
rm -f testout_420m_islow_5_8.ppm
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 4x4 islow/8x8 islow ENT: huff
|
||||
./djpeg -dct int -scale 1/2 -nosmooth -ppm -outfile testout_420m_islow_1_2.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420M_ISLOW_1_2) testout_420m_islow_1_2.ppm
|
||||
rm -f testout_420m_islow_1_2.ppm
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 3x3 islow/6x6 islow ENT: huff
|
||||
./djpeg -dct int -scale 3/8 -nosmooth -ppm -outfile testout_420m_islow_3_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420M_ISLOW_3_8) testout_420m_islow_3_8.ppm
|
||||
rm -f testout_420m_islow_3_8.ppm
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 2x2 islow/4x4 islow ENT: huff
|
||||
./djpeg -dct int -scale 1/4 -nosmooth -ppm -outfile testout_420m_islow_1_4.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420M_ISLOW_1_4) testout_420m_islow_1_4.ppm
|
||||
rm -f testout_420m_islow_1_4.ppm
|
||||
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 1x1 islow/2x2 islow ENT: huff
|
||||
./djpeg -dct int -scale 1/8 -nosmooth -ppm -outfile testout_420m_islow_1_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420M_ISLOW_1_8) testout_420m_islow_1_8.ppm
|
||||
rm -f testout_420m_islow_1_8.ppm
|
||||
if WITH_12BIT
|
||||
else
|
||||
# CC: YCC->RGB (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff
|
||||
./djpeg -dct int -colors 256 -bmp -outfile testout_420_islow_256.bmp $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_BMP_420_ISLOW_256) testout_420_islow_256.bmp
|
||||
rm -f testout_420_islow_256.bmp
|
||||
# CC: YCC->RGB565 SAMP: h2v2 fancy IDCT: islow ENT: huff
|
||||
./djpeg -dct int -rgb565 -dither none -bmp -outfile testout_420_islow_565.bmp $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_BMP_420_ISLOW_565) testout_420_islow_565.bmp
|
||||
rm -f testout_420_islow_565.bmp
|
||||
# CC: YCC->RGB565 (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff
|
||||
./djpeg -dct int -rgb565 -bmp -outfile testout_420_islow_565D.bmp $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_BMP_420_ISLOW_565D) testout_420_islow_565D.bmp
|
||||
rm -f testout_420_islow_565D.bmp
|
||||
# CC: YCC->RGB565 SAMP: h2v2 merged IDCT: islow ENT: huff
|
||||
./djpeg -dct int -nosmooth -rgb565 -dither none -bmp -outfile testout_420m_islow_565.bmp $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_BMP_420M_ISLOW_565) testout_420m_islow_565.bmp
|
||||
rm -f testout_420m_islow_565.bmp
|
||||
# CC: YCC->RGB565 (dithered) SAMP: h2v2 merged IDCT: islow ENT: huff
|
||||
./djpeg -dct int -nosmooth -rgb565 -bmp -outfile testout_420m_islow_565D.bmp $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_BMP_420M_ISLOW_565D) testout_420m_islow_565D.bmp
|
||||
rm -f testout_420m_islow_565D.bmp
|
||||
endif
|
||||
|
||||
# Partial decode tests. These tests are designed to cover all of the possible
|
||||
# code paths in jpeg_skip_scanlines().
|
||||
|
||||
# Context rows: Yes Intra-iMCU row: Yes iMCU row prefetch: No ENT: huff
|
||||
./djpeg -dct int -skip 15,31 -ppm -outfile testout_420_islow_skip15,31.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_PPM_420_ISLOW_SKIP15_31) testout_420_islow_skip15,31.ppm
|
||||
rm -f testout_420_islow_skip15,31.ppm
|
||||
# Context rows: Yes Intra-iMCU row: No iMCU row prefetch: Yes ENT: arith
|
||||
if WITH_ARITH_DEC
|
||||
./djpeg -dct int -skip 16,139 -ppm -outfile testout_420_islow_ari_skip16,139.ppm $(srcdir)/testimages/testimgari.jpg
|
||||
md5/md5cmp $(MD5_PPM_420_ISLOW_ARI_SKIP16_139) testout_420_islow_ari_skip16,139.ppm
|
||||
rm -f testout_420_islow_ari_skip16,139.ppm
|
||||
endif
|
||||
# Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: prog huff
|
||||
./cjpeg -revert -dct int -prog -outfile testout_420_islow_prog.jpg $(srcdir)/testimages/testorig.ppm
|
||||
./djpeg -dct int -crop 62x62+71+71 -ppm -outfile testout_420_islow_prog_crop62x62,71,71.ppm testout_420_islow_prog.jpg
|
||||
md5/md5cmp $(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71) testout_420_islow_prog_crop62x62,71,71.ppm
|
||||
rm -f testout_420_islow_prog_crop62x62,71,71.ppm testout_420_islow_prog.jpg
|
||||
# Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: arith
|
||||
if WITH_ARITH_DEC
|
||||
./djpeg -dct int -crop 53x53+4+4 -ppm -outfile testout_420_islow_ari_crop53x53,4,4.ppm $(srcdir)/testimages/testimgari.jpg
|
||||
md5/md5cmp $(MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4) testout_420_islow_ari_crop53x53,4,4.ppm
|
||||
rm -f testout_420_islow_ari_crop53x53,4,4.ppm
|
||||
endif
|
||||
# Context rows: No Intra-iMCU row: Yes ENT: huff
|
||||
./cjpeg -revert -dct int -sample 1x1 -outfile testout_444_islow.jpg $(srcdir)/testimages/testorig.ppm
|
||||
./djpeg -dct int -skip 1,6 -ppm -outfile testout_444_islow_skip1,6.ppm testout_444_islow.jpg
|
||||
md5/md5cmp $(MD5_PPM_444_ISLOW_SKIP1_6) testout_444_islow_skip1,6.ppm
|
||||
rm -f testout_444_islow_skip1,6.ppm testout_444_islow.jpg
|
||||
# Context rows: No Intra-iMCU row: No ENT: prog huff
|
||||
./cjpeg -revert -dct int -prog -sample 1x1 -outfile testout_444_islow_prog.jpg $(srcdir)/testimages/testorig.ppm
|
||||
./djpeg -dct int -crop 98x98+13+13 -ppm -outfile testout_444_islow_prog_crop98x98,13,13.ppm testout_444_islow_prog.jpg
|
||||
md5/md5cmp $(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13) testout_444_islow_prog_crop98x98,13,13.ppm
|
||||
rm -f testout_444_islow_prog_crop98x98,13,13.ppm testout_444_islow_prog.jpg
|
||||
# Context rows: No Intra-iMCU row: No ENT: arith
|
||||
if WITH_ARITH_ENC
|
||||
./cjpeg -revert -dct int -arithmetic -sample 1x1 -outfile testout_444_islow_ari.jpg $(srcdir)/testimages/testorig.ppm
|
||||
if WITH_ARITH_DEC
|
||||
./djpeg -dct int -crop 37x37+0+0 -ppm -outfile testout_444_islow_ari_crop37x37,0,0.ppm testout_444_islow_ari.jpg
|
||||
md5/md5cmp $(MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0) testout_444_islow_ari_crop37x37,0,0.ppm
|
||||
rm -f testout_444_islow_ari_crop37x37,0,0.ppm
|
||||
endif
|
||||
rm -f testout_444_islow_ari.jpg
|
||||
endif
|
||||
|
||||
./jpegtran -revert -crop 120x90+20+50 -transpose -perfect -outfile testout_crop.jpg $(srcdir)/testimages/$(TESTORIG)
|
||||
md5/md5cmp $(MD5_JPEG_CROP) testout_crop.jpg
|
||||
rm -f testout_crop.jpg
|
||||
echo GREAT SUCCESS!
|
||||
|
||||
|
||||
testclean:
|
||||
rm -f testout*
|
||||
rm -f *_GRAY_*.bmp
|
||||
rm -f *_GRAY_*.png
|
||||
rm -f *_GRAY_*.ppm
|
||||
rm -f *_GRAY_*.jpg
|
||||
rm -f *_GRAY.yuv
|
||||
rm -f *_420_*.bmp
|
||||
rm -f *_420_*.png
|
||||
rm -f *_420_*.ppm
|
||||
rm -f *_420_*.jpg
|
||||
rm -f *_420.yuv
|
||||
rm -f *_422_*.bmp
|
||||
rm -f *_422_*.png
|
||||
rm -f *_422_*.ppm
|
||||
rm -f *_422_*.jpg
|
||||
rm -f *_422.yuv
|
||||
rm -f *_444_*.bmp
|
||||
rm -f *_444_*.png
|
||||
rm -f *_444_*.ppm
|
||||
rm -f *_444_*.jpg
|
||||
rm -f *_444.yuv
|
||||
rm -f *_440_*.bmp
|
||||
rm -f *_440_*.png
|
||||
rm -f *_440_*.ppm
|
||||
rm -f *_440_*.jpg
|
||||
rm -f *_440.yuv
|
||||
rm -f *_411_*.bmp
|
||||
rm -f *_411_*.png
|
||||
rm -f *_411_*.ppm
|
||||
rm -f *_411_*.jpg
|
||||
rm -f *_411.yuv
|
||||
|
||||
|
||||
tjtest:
|
||||
sh ./tjbenchtest
|
||||
sh ./tjbenchtest -alloc
|
||||
sh ./tjbenchtest -yuv
|
||||
sh ./tjbenchtest -yuv -alloc
|
||||
if WITH_JAVA
|
||||
sh ./tjbenchtest.java
|
||||
sh ./tjbenchtest.java -yuv
|
||||
endif
|
||||
|
||||
|
||||
pkgscripts/mozjpeg.spec: pkgscripts/mozjpeg.spec.tmpl
|
||||
cat pkgscripts/mozjpeg.spec.tmpl | sed s@%{__prefix}@$(prefix)@g | \
|
||||
sed s@%{__bindir}@$(bindir)@g | sed s@%{__datadir}@$(datadir)@g | \
|
||||
sed s@%{__docdir}@$(docdir)@g | sed s@%{__includedir}@$(includedir)@g | \
|
||||
sed s@%{__libdir}@$(libdir)@g | sed s@%{__mandir}@$(mandir)@g \
|
||||
> pkgscripts/mozjpeg.spec
|
||||
|
||||
rpm: all pkgscripts/mozjpeg.spec
|
||||
TMPDIR=`mktemp -d /tmp/${PACKAGE_NAME}-build.XXXXXX`; \
|
||||
mkdir -p $$TMPDIR/RPMS; \
|
||||
ln -fs `pwd` $$TMPDIR/BUILD; \
|
||||
rm -f ${PKGNAME}-${VERSION}.${RPMARCH}.rpm; \
|
||||
rpmbuild -bb --define "_blddir $$TMPDIR/buildroot" \
|
||||
--define "_topdir $$TMPDIR" \
|
||||
--target ${RPMARCH} pkgscripts/mozjpeg.spec; \
|
||||
cp $$TMPDIR/RPMS/${RPMARCH}/${PKGNAME}-${VERSION}-${BUILD}.${RPMARCH}.rpm \
|
||||
${PKGNAME}-${VERSION}.${RPMARCH}.rpm; \
|
||||
rm -rf $$TMPDIR
|
||||
|
||||
srpm: dist-gzip pkgscripts/mozjpeg.spec
|
||||
TMPDIR=`mktemp -d /tmp/${PACKAGE_NAME}-build.XXXXXX`; \
|
||||
mkdir -p $$TMPDIR/RPMS; \
|
||||
mkdir -p $$TMPDIR/SRPMS; \
|
||||
mkdir -p $$TMPDIR/BUILD; \
|
||||
mkdir -p $$TMPDIR/SOURCES; \
|
||||
mkdir -p $$TMPDIR/SPECS; \
|
||||
rm -f ${PKGNAME}-${VERSION}.src.rpm; \
|
||||
cp ${PACKAGE_NAME}-${VERSION}.tar.gz $$TMPDIR/SOURCES; \
|
||||
cat pkgscripts/mozjpeg.spec | sed s/%{_blddir}/%{_tmppath}/g \
|
||||
| sed s/#--\>//g \
|
||||
> $$TMPDIR/SPECS/mozjpeg.spec; \
|
||||
rpmbuild -bs --define "_topdir $$TMPDIR" $$TMPDIR/SPECS/mozjpeg.spec; \
|
||||
cp $$TMPDIR/SRPMS/${PKGNAME}-${VERSION}-${BUILD}.src.rpm \
|
||||
${PKGNAME}-${VERSION}.src.rpm; \
|
||||
rm -rf $$TMPDIR
|
||||
|
||||
pkgscripts/makedpkg: pkgscripts/makedpkg.tmpl
|
||||
cat pkgscripts/makedpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
|
||||
sed s@%{__docdir}@$(docdir)@g | sed s@%{__libdir}@$(libdir)@g \
|
||||
> pkgscripts/makedpkg
|
||||
|
||||
deb: all pkgscripts/makedpkg
|
||||
sh pkgscripts/makedpkg
|
||||
|
||||
pkgscripts/uninstall: pkgscripts/uninstall.tmpl
|
||||
cat pkgscripts/uninstall.tmpl | sed s@%{__prefix}@$(prefix)@g | \
|
||||
sed s@%{__bindir}@$(bindir)@g | sed s@%{__datadir}@$(datadir)@g | \
|
||||
sed s@%{__includedir}@$(includedir)@g | sed s@%{__libdir}@$(libdir)@g | \
|
||||
sed s@%{__mandir}@$(mandir)@g > pkgscripts/uninstall
|
||||
|
||||
pkgscripts/makemacpkg: pkgscripts/makemacpkg.tmpl
|
||||
cat pkgscripts/makemacpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
|
||||
sed s@%{__bindir}@$(bindir)@g | sed s@%{__docdir}@$(docdir)@g | \
|
||||
sed s@%{__libdir}@$(libdir)@g > pkgscripts/makemacpkg
|
||||
|
||||
if X86_64
|
||||
|
||||
udmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
||||
sh pkgscripts/makemacpkg -build32 ${BUILDDIR32}
|
||||
|
||||
iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
||||
sh pkgscripts/makemacpkg -build32 ${BUILDDIR32} -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S} -buildarmv8 ${BUILDDIRARMV8} -lipo "${LIPO}"
|
||||
|
||||
else
|
||||
|
||||
iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
||||
sh pkgscripts/makemacpkg -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S} -buildarmv8 ${BUILDDIRARMV8} -lipo "${LIPO}"
|
||||
|
||||
endif
|
||||
|
||||
dmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
||||
sh pkgscripts/makemacpkg
|
||||
|
||||
pkgscripts/makecygwinpkg: pkgscripts/makecygwinpkg.tmpl
|
||||
cat pkgscripts/makecygwinpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
|
||||
sed s@%{__docdir}@$(docdir)@g | sed s@%{__libdir}@$(libdir)@g \
|
||||
> pkgscripts/makecygwinpkg
|
||||
|
||||
cygwinpkg: all pkgscripts/makecygwinpkg
|
||||
sh pkgscripts/makecygwinpkg
|
||||
@@ -24,7 +24,7 @@ mozjpeg's implementation of the libjpeg API includes an extensibility framework
|
||||
that allows new features to be added without modifying the transparent libjpeg
|
||||
compress/decompress structures (which would break backward ABI compatibility.)
|
||||
Extension parameters are placed into the opaque jpeg_comp_master structure, and
|
||||
a set of accessor functions and globally unique tokens allows for
|
||||
a set of accessor functions and globally unique tokens allows for
|
||||
getting/setting those parameters without directly accessing the structure.
|
||||
|
||||
Currently, only the accessor functions necessary to support the mozjpeg
|
||||
@@ -185,7 +185,7 @@ Integer Extension Parameters Supported by mozjpeg
|
||||
8 = Table from: An Improved Detection Model for DCT Coefficient Quantization
|
||||
(1993) Peterson, Ahumada and Watson
|
||||
|
||||
* JINT_DC_SCAN_OPT_MODE (default: 1)
|
||||
* JINT_DC_SCAN_OPT_MODE (default: 0)
|
||||
Specifies the DC scan optimization mode. The following options are
|
||||
available:
|
||||
0 = One scan for all components
|
||||
|
||||
@@ -2,8 +2,9 @@ Background
|
||||
==========
|
||||
|
||||
libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2,
|
||||
NEON, AltiVec) to accelerate baseline JPEG compression and decompression on
|
||||
x86, x86-64, ARM, and PowerPC systems. On such systems, libjpeg-turbo is
|
||||
AVX2, NEON, AltiVec) to accelerate baseline JPEG compression and decompression
|
||||
on x86, x86-64, ARM, and PowerPC systems, as well as progressive JPEG
|
||||
compression on x86 and x86-64 systems. On such systems, libjpeg-turbo is
|
||||
generally 2-6x as fast as libjpeg, all else being equal. On other types of
|
||||
systems, libjpeg-turbo can still outperform libjpeg by a significant amount, by
|
||||
virtue of its highly-optimized Huffman coding routines. In many cases, the
|
||||
@@ -42,21 +43,25 @@ Using libjpeg-turbo
|
||||
libjpeg-turbo includes two APIs that can be used to compress and decompress
|
||||
JPEG images:
|
||||
|
||||
- **TurboJPEG API**
|
||||
- **TurboJPEG API**<br>
|
||||
This API provides an easy-to-use interface for compressing and decompressing
|
||||
JPEG images in memory. It also provides some functionality that would not be
|
||||
straightforward to achieve using the underlying libjpeg API, such as
|
||||
generating planar YUV images and performing multiple simultaneous lossless
|
||||
transforms on an image. The Java interface for libjpeg-turbo is written on
|
||||
top of the TurboJPEG API.
|
||||
top of the TurboJPEG API. The TurboJPEG API is recommended for first-time
|
||||
users of libjpeg-turbo. Refer to [tjexample.c](tjexample.c) and
|
||||
[TJExample.java](java/TJExample.java) for examples of its usage and to
|
||||
<http://libjpeg-turbo.org/Documentation/Documentation> for API documentation.
|
||||
|
||||
- **libjpeg API**
|
||||
- **libjpeg API**<br>
|
||||
This is the de facto industry-standard API for compressing and decompressing
|
||||
JPEG images. It is more difficult to use than the TurboJPEG API but also
|
||||
more powerful. The libjpeg API implementation in libjpeg-turbo is both
|
||||
API/ABI-compatible and mathematically compatible with libjpeg v6b. It can
|
||||
also optionally be configured to be API/ABI-compatible with libjpeg v7 and v8
|
||||
(see below.)
|
||||
(see below.) Refer to [cjpeg.c](cjpeg.c) and [djpeg.c](djpeg.c) for examples
|
||||
of its usage and to [libjpeg.txt](libjpeg.txt) for API documentation.
|
||||
|
||||
There is no significant performance advantage to either API when both are used
|
||||
to perform similar operations.
|
||||
@@ -141,17 +146,17 @@ which aren't.
|
||||
|
||||
#### Fully supported
|
||||
|
||||
- **libjpeg: IDCT scaling extensions in decompressor**
|
||||
- **libjpeg: IDCT scaling extensions in decompressor**<br>
|
||||
libjpeg-turbo supports IDCT scaling with scaling factors of 1/8, 1/4, 3/8,
|
||||
1/2, 5/8, 3/4, 7/8, 9/8, 5/4, 11/8, 3/2, 13/8, 7/4, 15/8, and 2/1 (only 1/4
|
||||
and 1/2 are SIMD-accelerated.)
|
||||
|
||||
- **libjpeg: Arithmetic coding**
|
||||
|
||||
- **libjpeg: In-memory source and destination managers**
|
||||
- **libjpeg: In-memory source and destination managers**<br>
|
||||
See notes below.
|
||||
|
||||
- **cjpeg: Separate quality settings for luminance and chrominance**
|
||||
- **cjpeg: Separate quality settings for luminance and chrominance**<br>
|
||||
Note that the libpjeg v7+ API was extended to accommodate this feature only
|
||||
for convenience purposes. It has always been possible to implement this
|
||||
feature with libjpeg v6b (see rdswitch.c for an example.)
|
||||
@@ -180,14 +185,14 @@ means of quality improvement. The reader is invited to peruse the research at
|
||||
but it is the general belief of our project that these features have not
|
||||
demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
|
||||
|
||||
- **libjpeg: DCT scaling in compressor**
|
||||
- **libjpeg: DCT scaling in compressor**<br>
|
||||
`cinfo.scale_num` and `cinfo.scale_denom` are silently ignored.
|
||||
There is no technical reason why DCT scaling could not be supported when
|
||||
emulating the libjpeg v7+ API/ABI, but without the SmartScale extension (see
|
||||
below), only scaling factors of 1/2, 8/15, 4/7, 8/13, 2/3, 8/11, 4/5, and
|
||||
8/9 would be available, which is of limited usefulness.
|
||||
|
||||
- **libjpeg: SmartScale**
|
||||
- **libjpeg: SmartScale**<br>
|
||||
`cinfo.block_size` is silently ignored.
|
||||
SmartScale is an extension to the JPEG format that allows for DCT block
|
||||
sizes other than 8x8. Providing support for this new format would be
|
||||
@@ -200,15 +205,15 @@ demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
|
||||
interest in providing this feature would be as a means of supporting
|
||||
additional DCT scaling factors.
|
||||
|
||||
- **libjpeg: Fancy downsampling in compressor**
|
||||
- **libjpeg: Fancy downsampling in compressor**<br>
|
||||
`cinfo.do_fancy_downsampling` is silently ignored.
|
||||
This requires the DCT scaling feature, which is not supported.
|
||||
|
||||
- **jpegtran: Scaling**
|
||||
- **jpegtran: Scaling**<br>
|
||||
This requires both the DCT scaling and SmartScale features, which are not
|
||||
supported.
|
||||
|
||||
- **Lossless RGB JPEG files**
|
||||
- **Lossless RGB JPEG files**<br>
|
||||
This requires the SmartScale feature, which is not supported.
|
||||
|
||||
### What About libjpeg v9?
|
||||
@@ -226,7 +231,7 @@ generally accomplish anything that can't already be accomplished better with
|
||||
existing, standard lossless formats. Therefore, at this time it is our belief
|
||||
that there is not sufficient technical justification for software projects to
|
||||
upgrade from libjpeg v8 to libjpeg v9, and thus there is not sufficient
|
||||
echnical justification for us to emulate the libjpeg v9 ABI.
|
||||
technical justification for us to emulate the libjpeg v9 ABI.
|
||||
|
||||
In-Memory Source/Destination Managers
|
||||
-------------------------------------
|
||||
@@ -249,8 +254,8 @@ libjpeg-turbo. This will restore the pre-1.3 behavior, in which
|
||||
libjpeg v8 API/ABI.
|
||||
|
||||
On Un*x systems, including the in-memory source/destination managers changes
|
||||
the dynamic library version from 62.0.0 to 62.1.0 if using libjpeg v6b API/ABI
|
||||
emulation and from 7.0.0 to 7.1.0 if using libjpeg v7 API/ABI emulation.
|
||||
the dynamic library version from 62.1.0 to 62.2.0 if using libjpeg v6b API/ABI
|
||||
emulation and from 7.1.0 to 7.2.0 if using libjpeg v7 API/ABI emulation.
|
||||
|
||||
Note that, on most Un*x systems, the dynamic linker will not look for a
|
||||
function in a library until that function is actually used. Thus, if a program
|
||||
@@ -339,4 +344,3 @@ quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
|
||||
function in those cases. This causes performance to drop by as much as 40%.
|
||||
It is therefore strongly advised that you use the slow integer forward DCT
|
||||
whenever encoding images with a JPEG quality of 98 or higher.
|
||||
|
||||
|
||||
91
README.ijg
@@ -43,7 +43,7 @@ User documentation:
|
||||
change.log Version-to-version change highlights.
|
||||
Programmer and internal documentation:
|
||||
libjpeg.txt How to use the JPEG library in your own programs.
|
||||
example.c Sample code for calling the JPEG library.
|
||||
example.txt Sample code for calling the JPEG library.
|
||||
structure.txt Overview of the JPEG library's internal structure.
|
||||
coderules.txt Coding style rules --- please read if you contribute code.
|
||||
|
||||
@@ -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,
|
||||
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.
|
||||
|
||||
Permission is hereby granted to use, copy, modify, and distribute this
|
||||
@@ -159,25 +159,6 @@ commercial products, provided that all warranty or liability claims are
|
||||
assumed by the product vendor.
|
||||
|
||||
|
||||
The Unix configuration script "configure" was produced with GNU Autoconf.
|
||||
It is copyright by the Free Software Foundation but is freely distributable.
|
||||
The same holds for its supporting scripts (config.guess, config.sub,
|
||||
ltmain.sh). Another support script, install-sh, is copyright by X Consortium
|
||||
but is also freely distributable.
|
||||
|
||||
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
|
||||
==========
|
||||
|
||||
@@ -185,8 +166,8 @@ We recommend reading one or more of these references before trying to
|
||||
understand the innards of the JPEG software.
|
||||
|
||||
The best short technical introduction to the JPEG compression algorithm is
|
||||
Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
|
||||
Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
|
||||
Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
|
||||
Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
|
||||
(Adjacent articles in that issue discuss MPEG motion picture compression,
|
||||
applications of JPEG, and related topics.) If you don't have the CACM issue
|
||||
handy, a PDF file containing a revised version of Wallace's article is
|
||||
@@ -220,21 +201,21 @@ Continuous-tone Still Images, Part 2: Compliance testing" and has document
|
||||
numbers ISO/IEC IS 10918-2, ITU-T T.83.
|
||||
|
||||
The JPEG standard does not specify all details of an interchangeable file
|
||||
format. For the omitted details we follow the "JFIF" conventions, revision
|
||||
1.02. JFIF 1.02 has been adopted as an Ecma International Technical Report
|
||||
and thus received a formal publication status. It is available as a free
|
||||
download in PDF format from
|
||||
http://www.ecma-international.org/publications/techreports/E-TR-098.htm.
|
||||
A PostScript version of the JFIF document is available at
|
||||
http://www.ijg.org/files/jfif.ps.gz. There is also a plain text version at
|
||||
http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures.
|
||||
format. For the omitted details, we follow the "JFIF" conventions, revision
|
||||
1.02. JFIF version 1 has been adopted as ISO/IEC 10918-5 (05/2013) and
|
||||
Recommendation ITU-T T.871 (05/2011): Information technology - Digital
|
||||
compression and coding of continuous-tone still images: JPEG File Interchange
|
||||
Format (JFIF). It is available as a free download in PDF file format from
|
||||
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
|
||||
http://www.w3.org/Graphics/JPEG/jfif3.pdf.
|
||||
|
||||
The TIFF 6.0 file format specification can be obtained by FTP from
|
||||
ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme
|
||||
found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
|
||||
IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
|
||||
Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
|
||||
(Compression tag 7). Copies of this Note can be obtained from
|
||||
The TIFF 6.0 file format specification can be obtained from
|
||||
http://mirrors.ctan.org/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation
|
||||
scheme found in the TIFF 6.0 spec of 3-June-92 has a number of serious
|
||||
problems. IJG does not recommend use of the TIFF 6.0 design (TIFF Compression
|
||||
tag 6). Instead, we recommend the JPEG design proposed by TIFF Technical Note
|
||||
#2 (Compression tag 7). Copies of this Note can be obtained from
|
||||
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.
|
||||
Although IJG's own code does not support TIFF/JPEG, the free libtiff library
|
||||
@@ -249,28 +230,26 @@ The most recent released version can always be found there in
|
||||
directory "files".
|
||||
|
||||
The JPEG FAQ (Frequently Asked Questions) article is a source of some
|
||||
general information about JPEG.
|
||||
It is available on the World Wide Web at 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
|
||||
general information about JPEG. It is available at
|
||||
http://www.faqs.org/faqs/jpeg-faq.
|
||||
|
||||
|
||||
FILE FORMAT WARS
|
||||
================
|
||||
FILE FORMAT COMPATIBILITY
|
||||
=========================
|
||||
|
||||
The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together
|
||||
with ITU-T SG16) currently promotes different formats containing the name
|
||||
"JPEG" which are incompatible with original DCT-based JPEG. IJG therefore does
|
||||
not support these formats (see REFERENCES). Indeed, one of the original
|
||||
reasons for developing this free software was to help force convergence on
|
||||
common, interoperable format standards for JPEG files.
|
||||
Don't use an incompatible file format!
|
||||
(In any case, our decoder will remain capable of reading existing JPEG
|
||||
image files indefinitely.)
|
||||
This software implements ITU T.81 | ISO/IEC 10918 with some extensions from
|
||||
ITU T.871 | ISO/IEC 10918-5 (JPEG File Interchange Format-- see REFERENCES).
|
||||
Informally, the term "JPEG image" or "JPEG file" most often refers to JFIF or
|
||||
a subset thereof, but there are other formats containing the name "JPEG" that
|
||||
are incompatible with the DCT-based JPEG standard or with JFIF (for instance,
|
||||
JPEG 2000 and JPEG XR). This software therefore does not support these
|
||||
formats. Indeed, one of the original reasons for developing this free software
|
||||
was to help force convergence on a common, interoperable format standard for
|
||||
JPEG files.
|
||||
|
||||
JFIF is a minimal or "low end" representation. TIFF/JPEG (TIFF revision 6.0 as
|
||||
modified by TIFF Technical Note #2) can be used for "high end" applications
|
||||
that need to record a lot of additional data about an image.
|
||||
|
||||
|
||||
TO DO
|
||||
|
||||
18
README.md
@@ -1,11 +1,13 @@
|
||||
Mozilla JPEG Encoder Project
|
||||
Mozilla JPEG Encoder Project [](https://ci.appveyor.com/project/kornel/mozjpeg-4ekrx)
|
||||
============================
|
||||
|
||||
MozJPEG reduces file sizes of JPEG images while retaining quality and compatibility with the vast majority of the world's deployed decoders.
|
||||
MozJPEG improves JPEG compression efficiency achieving higher visual quality and smaller file sizes at the same time. It is compatible with the JPEG standard, and the vast majority of the world's deployed JPEG decoders.
|
||||
|
||||
MozJPEG is based on [libjpeg-turbo](https://github.com/libjpeg-turbo/libjpeg-turbo). It's compatible with libjpeg API and ABI, and can be used as a drop-in replacement for libjpeg. MozJPEG makes tradeoffs that are intended to benefit Web use cases and focuses solely on improving encoding, so it's best used as part of a Web encoding workflow.
|
||||
MozJPEG is a patch for [libjpeg-turbo](https://github.com/libjpeg-turbo/libjpeg-turbo). **Please send pull requests to libjpeg-turbo** if the changes aren't specific to newly-added MozJPEG-only compression code. This project aims to keep differences with libjpeg-turbo minimal, so whenever possible, improvements and bug fixes should go there first.
|
||||
|
||||
MozJPEG is meant to be used as a library in graphics programs and image processing tools. We include a demo `cjpeg` tool, but it's not intended for serious use. We encourage authors of graphics programs to use MozJPEG's [C API](libjpeg.txt) instead.
|
||||
MozJPEG is compatible with the libjpeg API and ABI. It is intended to be a drop-in replacement for libjpeg. MozJPEG is a strict superset of libjpeg-turbo's functionality. All MozJPEG's improvements can be disabled at run time, and in that case it behaves exactly like libjpeg-turbo.
|
||||
|
||||
MozJPEG is meant to be used as a library in graphics programs and image processing tools. We include a demo `cjpeg` command-line tool, but it's not intended for serious use. We encourage authors of graphics programs to use libjpeg's [C API](libjpeg.txt) and link with MozJPEG library instead.
|
||||
|
||||
## Features
|
||||
|
||||
@@ -13,11 +15,15 @@ MozJPEG is meant to be used as a library in graphics programs and image processi
|
||||
* Trellis quantization. When converting other formats to JPEG it maximizes quality/filesize ratio.
|
||||
* Comes with new quantization table presets, e.g. tuned for high-resolution displays.
|
||||
* Fully compatible with all web browsers.
|
||||
* Can be seamlessly integrated into any program using libjpeg.
|
||||
* Can be seamlessly integrated into any program that uses the industry-standard libjpeg API. There's no need to write any MozJPEG-specific integration code.
|
||||
|
||||
## Releases
|
||||
|
||||
* [Latest release](https://github.com/mozilla/mozjpeg/releases/latest)
|
||||
* [Version 3.0 Announcement](https://boomswaggerboom.wordpress.com/2014/12/30/mozjpeg-3-0-released/) ([overview of 3.0 features](https://calendar.perfplanet.com/2014/mozjpeg-3-0/))
|
||||
* [Overview of 3.0 features](https://calendar.perfplanet.com/2014/mozjpeg-3-0/)
|
||||
* [Version 2.0 Announcement](https://blog.mozilla.org/research/2014/07/15/mozilla-advances-jpeg-encoding-with-mozjpeg-2-0/)
|
||||
* [Version 1.0 Announcement](https://blog.mozilla.org/research/2014/03/05/introducing-the-mozjpeg-project/)
|
||||
|
||||
## Compiling
|
||||
|
||||
See [BUILDING](BUILDING.md). MozJPEG is built exactly the same way as libjpeg-turbo, so if you need additional help please consult [libjpeg-turbo documentation](https://libjpeg-turbo.org/).
|
||||
|
||||
254
acinclude.m4
@@ -1,254 +0,0 @@
|
||||
# AC_PROG_NASM
|
||||
# --------------------------
|
||||
# Check that NASM exists and determine flags
|
||||
AC_DEFUN([AC_PROG_NASM],[
|
||||
|
||||
AC_ARG_VAR(NASM, [NASM command (used to build the x86/x86-64 SIMD code)])
|
||||
if test "x$NASM" = "x"; then
|
||||
AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
|
||||
test -z "$NASM" && AC_MSG_ERROR([no nasm (Netwide Assembler) found])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([for object file format of host system])
|
||||
case "$host_os" in
|
||||
cygwin* | mingw* | pw32* | interix*)
|
||||
case "$host_cpu" in
|
||||
x86_64)
|
||||
objfmt='Win64-COFF'
|
||||
;;
|
||||
*)
|
||||
objfmt='Win32-COFF'
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
msdosdjgpp* | go32*)
|
||||
objfmt='COFF'
|
||||
;;
|
||||
os2-emx*) # not tested
|
||||
objfmt='MSOMF' # obj
|
||||
;;
|
||||
linux*coff* | linux*oldld*)
|
||||
objfmt='COFF' # ???
|
||||
;;
|
||||
linux*aout*)
|
||||
objfmt='a.out'
|
||||
;;
|
||||
linux*)
|
||||
case "$host_cpu" in
|
||||
x86_64)
|
||||
objfmt='ELF64'
|
||||
;;
|
||||
*)
|
||||
objfmt='ELF'
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
kfreebsd* | freebsd* | netbsd* | openbsd*)
|
||||
if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
|
||||
objfmt='BSD-a.out'
|
||||
else
|
||||
case "$host_cpu" in
|
||||
x86_64 | amd64)
|
||||
objfmt='ELF64'
|
||||
;;
|
||||
*)
|
||||
objfmt='ELF'
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
solaris* | sunos* | sysv* | sco*)
|
||||
case "$host_cpu" in
|
||||
x86_64)
|
||||
objfmt='ELF64'
|
||||
;;
|
||||
*)
|
||||
objfmt='ELF'
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
darwin* | rhapsody* | nextstep* | openstep* | macos*)
|
||||
case "$host_cpu" in
|
||||
x86_64)
|
||||
objfmt='Mach-O64'
|
||||
;;
|
||||
*)
|
||||
objfmt='Mach-O'
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
objfmt='ELF ?'
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_MSG_RESULT([$objfmt])
|
||||
if test "$objfmt" = 'ELF ?'; then
|
||||
objfmt='ELF'
|
||||
AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
|
||||
case "$objfmt" in
|
||||
MSOMF) NAFLAGS='-fobj -DOBJ32';;
|
||||
Win32-COFF) NAFLAGS='-fwin32 -DWIN32';;
|
||||
Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__';;
|
||||
COFF) NAFLAGS='-fcoff -DCOFF';;
|
||||
a.out) NAFLAGS='-faout -DAOUT';;
|
||||
BSD-a.out) NAFLAGS='-faoutb -DAOUT';;
|
||||
ELF) NAFLAGS='-felf -DELF';;
|
||||
ELF64) NAFLAGS='-felf64 -DELF -D__x86_64__';;
|
||||
RDF) NAFLAGS='-frdf -DRDF';;
|
||||
Mach-O) NAFLAGS='-fmacho -DMACHO';;
|
||||
Mach-O64) NAFLAGS='-fmacho64 -DMACHO -D__x86_64__';;
|
||||
esac
|
||||
AC_MSG_RESULT([$NAFLAGS])
|
||||
AC_SUBST([NAFLAGS])
|
||||
|
||||
AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
|
||||
cat > conftest.asm <<EOF
|
||||
[%line __oline__ "configure"
|
||||
section .text
|
||||
global _main,main
|
||||
_main:
|
||||
main: xor eax,eax
|
||||
ret
|
||||
]EOF
|
||||
try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
|
||||
if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
echo "configure: failed program was:" >&AC_FD_CC
|
||||
cat conftest.asm >&AC_FD_CC
|
||||
rm -rf conftest*
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_ERROR([installation or configuration problem: assembler cannot create object files.])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([whether the linker accepts assembler output])
|
||||
try_nasm='${CC-cc} -o conftest${ac_exeext} $LDFLAGS conftest.o $LIBS 1>&AC_FD_CC'
|
||||
if AC_TRY_EVAL(try_nasm) && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
rm -rf conftest*
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_ERROR([configuration problem: maybe object file format mismatch.])
|
||||
fi
|
||||
|
||||
])
|
||||
|
||||
# AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE
|
||||
# --------------------------
|
||||
# Test whether the assembler is suitable and supports NEON instructions
|
||||
AC_DEFUN([AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE],[
|
||||
ac_good_gnu_arm_assembler=no
|
||||
ac_save_CC="$CC"
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CCASFLAGS -x assembler-with-cpp"
|
||||
CC="$CCAS"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
.text
|
||||
.fpu neon
|
||||
.arch armv7a
|
||||
.object_arch armv4
|
||||
.arm
|
||||
pld [r0]
|
||||
vmovn.u16 d0, q0]])], ac_good_gnu_arm_assembler=yes)
|
||||
|
||||
ac_use_gas_preprocessor=no
|
||||
if test "x$ac_good_gnu_arm_assembler" = "xno" ; then
|
||||
CC="gas-preprocessor.pl $CCAS"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
.text
|
||||
.fpu neon
|
||||
.arch armv7a
|
||||
.object_arch armv4
|
||||
.arm
|
||||
pld [r0]
|
||||
vmovn.u16 d0, q0]])], ac_use_gas_preprocessor=yes)
|
||||
fi
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
CC="$ac_save_CC"
|
||||
|
||||
if test "x$ac_use_gas_preprocessor" = "xyes" ; then
|
||||
CCAS="gas-preprocessor.pl $CCAS"
|
||||
AC_SUBST([CCAS])
|
||||
ac_good_gnu_arm_assembler=yes
|
||||
fi
|
||||
|
||||
if test "x$ac_good_gnu_arm_assembler" = "xyes" ; then
|
||||
$1
|
||||
else
|
||||
$2
|
||||
fi
|
||||
])
|
||||
|
||||
# AC_CHECK_COMPATIBLE_MIPSEL_ASSEMBLER_IFELSE
|
||||
# --------------------------
|
||||
# Test whether the assembler is suitable and supports MIPS instructions
|
||||
AC_DEFUN([AC_CHECK_COMPATIBLE_MIPS_ASSEMBLER_IFELSE],[
|
||||
have_mips_dspr2=no
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CCASFLAGS -mdspr2"
|
||||
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
|
||||
int main ()
|
||||
{
|
||||
int c = 0, a = 0, b = 0;
|
||||
__asm__ __volatile__ (
|
||||
"precr.qb.ph %[c], %[a], %[b] \n\t"
|
||||
: [c] "=r" (c)
|
||||
: [a] "r" (a), [b] "r" (b)
|
||||
);
|
||||
return c;
|
||||
}
|
||||
]])], have_mips_dspr2=yes)
|
||||
CFLAGS=$ac_save_CFLAGS
|
||||
|
||||
if test "x$have_mips_dspr2" = "xyes" ; then
|
||||
$1
|
||||
else
|
||||
$2
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_CHECK_COMPATIBLE_ARM64_ASSEMBLER_IFELSE],[
|
||||
ac_good_gnu_arm_assembler=no
|
||||
ac_save_CC="$CC"
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CCASFLAGS -x assembler-with-cpp"
|
||||
CC="$CCAS"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
.text
|
||||
MYVAR .req x0
|
||||
movi v0.16b, #100
|
||||
mov MYVAR, #100
|
||||
.unreq MYVAR]])], ac_good_gnu_arm_assembler=yes)
|
||||
|
||||
ac_use_gas_preprocessor=no
|
||||
if test "x$ac_good_gnu_arm_assembler" = "xno" ; then
|
||||
CC="gas-preprocessor.pl $CCAS"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
.text
|
||||
MYVAR .req x0
|
||||
movi v0.16b, #100
|
||||
mov MYVAR, #100
|
||||
.unreq MYVAR]])], ac_use_gas_preprocessor=yes)
|
||||
fi
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
CC="$ac_save_CC"
|
||||
|
||||
if test "x$ac_use_gas_preprocessor" = "xyes" ; then
|
||||
CCAS="gas-preprocessor.pl $CCAS"
|
||||
AC_SUBST([CCAS])
|
||||
ac_good_gnu_arm_assembler=yes
|
||||
fi
|
||||
|
||||
if test "x$ac_good_gnu_arm_assembler" = "xyes" ; then
|
||||
$1
|
||||
else
|
||||
$2
|
||||
fi
|
||||
])
|
||||
62
appveyor.yml
Normal file
@@ -0,0 +1,62 @@
|
||||
image: Visual Studio 2019
|
||||
configuration: Release
|
||||
platform:
|
||||
- Win32
|
||||
- x64
|
||||
|
||||
install:
|
||||
- if %PLATFORM% == Win32 (set ARCH=x86)
|
||||
- if %PLATFORM% == x64 (set ARCH=x64)
|
||||
## Set up nasm
|
||||
- choco install nasm
|
||||
- set PATH=%PATH%;C:\Program Files\NASM
|
||||
## Set up libpng
|
||||
- cd C:\Tools\vcpkg
|
||||
- vcpkg install libpng:%ARCH%-windows
|
||||
- vcpkg install libpng:%ARCH%-windows-static
|
||||
|
||||
before_build:
|
||||
- cd %APPVEYOR_BUILD_FOLDER%
|
||||
- nasm -v
|
||||
- cmake --version
|
||||
- git describe --always --tags --dirty
|
||||
- FOR /F %%a in ('git describe --always --tags --dirty') do set GIT_VERSION=%%a
|
||||
|
||||
build_script:
|
||||
## Build shared
|
||||
- cmake -B shared -A %PLATFORM%
|
||||
-DENABLE_SHARED=1 -DENABLE_STATIC=0
|
||||
-DREQUIRE_SIMD=1
|
||||
-DCMAKE_TOOLCHAIN_FILE=C:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake
|
||||
|
||||
- cmake --build shared --config Release
|
||||
|
||||
## Build static
|
||||
- cmake -B static -A %PLATFORM%
|
||||
-DENABLE_SHARED=0 -DENABLE_STATIC=1
|
||||
-DREQUIRE_SIMD=1
|
||||
-DCMAKE_TOOLCHAIN_FILE=C:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake
|
||||
-DVCPKG_TARGET_TRIPLET=%ARCH%-windows-static
|
||||
|
||||
- cmake --build static --config Release
|
||||
|
||||
after_build:
|
||||
- 7z a mozjpeg-%GIT_VERSION%-win-%ARCH%.zip shared/Release static/Release
|
||||
|
||||
artifacts:
|
||||
- path: '*.zip'
|
||||
|
||||
cache:
|
||||
- C:\ProgramData\chocolatey\bin
|
||||
- C:\ProgramData\chocolatey\lib
|
||||
- C:\Program Files\NASM
|
||||
- C:\tools\vcpkg\installed
|
||||
|
||||
deploy:
|
||||
description: 'Automated build using Appveyor'
|
||||
provider: GitHub
|
||||
auth_token:
|
||||
secure: 2Jj47Q5HnaPob9U4yX2t4q4TYTw4JWU6cS56mM12aoRLgfYkZ4gRZPySIzfmTPqC
|
||||
artifact: /.*\.zip/
|
||||
on:
|
||||
APPVEYOR_REPO_TAG: true # deploy on tag push only
|
||||
341
bmp.c
@@ -1,341 +0,0 @@
|
||||
/*
|
||||
* Copyright (C)2011, 2015 D. R. Commander. All Rights Reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* - Neither the name of the libjpeg-turbo Project nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <setjmp.h>
|
||||
#include <errno.h>
|
||||
#include "cdjpeg.h"
|
||||
#include <jpeglib.h>
|
||||
#include <jpegint.h>
|
||||
#include "tjutil.h"
|
||||
#include "bmp.h"
|
||||
|
||||
|
||||
/* This duplicates the functionality of the VirtualGL bitmap library using
|
||||
the components from cjpeg and djpeg */
|
||||
|
||||
|
||||
/* Error handling (based on example in example.c) */
|
||||
|
||||
static char errStr[JMSG_LENGTH_MAX]="No error";
|
||||
|
||||
struct my_error_mgr
|
||||
{
|
||||
struct jpeg_error_mgr pub;
|
||||
jmp_buf setjmp_buffer;
|
||||
};
|
||||
typedef struct my_error_mgr *my_error_ptr;
|
||||
|
||||
static void my_error_exit(j_common_ptr cinfo)
|
||||
{
|
||||
my_error_ptr myerr=(my_error_ptr)cinfo->err;
|
||||
(*cinfo->err->output_message)(cinfo);
|
||||
longjmp(myerr->setjmp_buffer, 1);
|
||||
}
|
||||
|
||||
/* Based on output_message() in jerror.c */
|
||||
|
||||
static void my_output_message(j_common_ptr cinfo)
|
||||
{
|
||||
(*cinfo->err->format_message)(cinfo, errStr);
|
||||
}
|
||||
|
||||
#define _throw(m) {snprintf(errStr, JMSG_LENGTH_MAX, "%s", m); \
|
||||
retval=-1; goto bailout;}
|
||||
#define _throwunix(m) {snprintf(errStr, JMSG_LENGTH_MAX, "%s\n%s", m, \
|
||||
strerror(errno)); retval=-1; goto bailout;}
|
||||
|
||||
|
||||
static void pixelconvert(unsigned char *srcbuf, int srcpf, int srcbottomup,
|
||||
unsigned char *dstbuf, int dstpf, int dstbottomup, int w, int h)
|
||||
{
|
||||
unsigned char *srcrowptr=srcbuf, *srccolptr;
|
||||
int srcps=tjPixelSize[srcpf];
|
||||
int srcstride=srcbottomup? -w*srcps:w*srcps;
|
||||
unsigned char *dstrowptr=dstbuf, *dstcolptr;
|
||||
int dstps=tjPixelSize[dstpf];
|
||||
int dststride=dstbottomup? -w*dstps:w*dstps;
|
||||
int row, col;
|
||||
|
||||
if(srcbottomup) srcrowptr=&srcbuf[w*srcps*(h-1)];
|
||||
if(dstbottomup) dstrowptr=&dstbuf[w*dstps*(h-1)];
|
||||
|
||||
/* NOTE: These quick & dirty CMYK<->RGB conversion routines are for testing
|
||||
purposes only. Properly converting between CMYK and RGB requires a color
|
||||
management system. */
|
||||
|
||||
if(dstpf==TJPF_CMYK)
|
||||
{
|
||||
for(row=0; row<h; row++, srcrowptr+=srcstride, dstrowptr+=dststride)
|
||||
{
|
||||
for(col=0, srccolptr=srcrowptr, dstcolptr=dstrowptr;
|
||||
col<w; col++, srccolptr+=srcps)
|
||||
{
|
||||
double c=1.0-((double)(srccolptr[tjRedOffset[srcpf]])/255.);
|
||||
double m=1.0-((double)(srccolptr[tjGreenOffset[srcpf]])/255.);
|
||||
double y=1.0-((double)(srccolptr[tjBlueOffset[srcpf]])/255.);
|
||||
double k=min(min(c,m),min(y,1.0));
|
||||
if(k==1.0) c=m=y=0.0;
|
||||
else
|
||||
{
|
||||
c=(c-k)/(1.0-k);
|
||||
m=(m-k)/(1.0-k);
|
||||
y=(y-k)/(1.0-k);
|
||||
}
|
||||
if(c>1.0) c=1.0;
|
||||
if(c<0.) c=0.;
|
||||
if(m>1.0) m=1.0;
|
||||
if(m<0.) m=0.;
|
||||
if(y>1.0) y=1.0;
|
||||
if(y<0.) y=0.;
|
||||
if(k>1.0) k=1.0;
|
||||
if(k<0.) k=0.;
|
||||
*dstcolptr++=(unsigned char)(255.0-c*255.0+0.5);
|
||||
*dstcolptr++=(unsigned char)(255.0-m*255.0+0.5);
|
||||
*dstcolptr++=(unsigned char)(255.0-y*255.0+0.5);
|
||||
*dstcolptr++=(unsigned char)(255.0-k*255.0+0.5);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(srcpf==TJPF_CMYK)
|
||||
{
|
||||
for(row=0; row<h; row++, srcrowptr+=srcstride, dstrowptr+=dststride)
|
||||
{
|
||||
for(col=0, srccolptr=srcrowptr, dstcolptr=dstrowptr;
|
||||
col<w; col++, dstcolptr+=dstps)
|
||||
{
|
||||
double c=(double)(*srccolptr++);
|
||||
double m=(double)(*srccolptr++);
|
||||
double y=(double)(*srccolptr++);
|
||||
double k=(double)(*srccolptr++);
|
||||
double r=c*k/255.;
|
||||
double g=m*k/255.;
|
||||
double b=y*k/255.;
|
||||
if(r>255.0) r=255.0;
|
||||
if(r<0.) r=0.;
|
||||
if(g>255.0) g=255.0;
|
||||
if(g<0.) g=0.;
|
||||
if(b>255.0) b=255.0;
|
||||
if(b<0.) b=0.;
|
||||
dstcolptr[tjRedOffset[dstpf]]=(unsigned char)(r+0.5);
|
||||
dstcolptr[tjGreenOffset[dstpf]]=(unsigned char)(g+0.5);
|
||||
dstcolptr[tjBlueOffset[dstpf]]=(unsigned char)(b+0.5);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(row=0; row<h; row++, srcrowptr+=srcstride, dstrowptr+=dststride)
|
||||
{
|
||||
for(col=0, srccolptr=srcrowptr, dstcolptr=dstrowptr;
|
||||
col<w; col++, srccolptr+=srcps, dstcolptr+=dstps)
|
||||
{
|
||||
dstcolptr[tjRedOffset[dstpf]]=srccolptr[tjRedOffset[srcpf]];
|
||||
dstcolptr[tjGreenOffset[dstpf]]=srccolptr[tjGreenOffset[srcpf]];
|
||||
dstcolptr[tjBlueOffset[dstpf]]=srccolptr[tjBlueOffset[srcpf]];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int loadbmp(char *filename, unsigned char **buf, int *w, int *h,
|
||||
int dstpf, int bottomup)
|
||||
{
|
||||
int retval=0, dstps, srcpf, tempc;
|
||||
struct jpeg_compress_struct cinfo;
|
||||
struct my_error_mgr jerr;
|
||||
cjpeg_source_ptr src;
|
||||
FILE *file=NULL;
|
||||
|
||||
memset(&cinfo, 0, sizeof(struct jpeg_compress_struct));
|
||||
|
||||
if(!filename || !buf || !w || !h || dstpf<0 || dstpf>=TJ_NUMPF)
|
||||
_throw("loadbmp(): Invalid argument");
|
||||
|
||||
if((file=fopen(filename, "rb"))==NULL)
|
||||
_throwunix("loadbmp(): Cannot open input file");
|
||||
|
||||
cinfo.err=jpeg_std_error(&jerr.pub);
|
||||
jerr.pub.error_exit=my_error_exit;
|
||||
jerr.pub.output_message=my_output_message;
|
||||
|
||||
if(setjmp(jerr.setjmp_buffer))
|
||||
{
|
||||
/* If we get here, the JPEG code has signaled an error. */
|
||||
retval=-1; goto bailout;
|
||||
}
|
||||
|
||||
jpeg_create_compress(&cinfo);
|
||||
if((tempc=getc(file))<0 || ungetc(tempc, file)==EOF)
|
||||
_throwunix("loadbmp(): Could not read input file")
|
||||
else if(tempc==EOF) _throw("loadbmp(): Input file contains no data");
|
||||
|
||||
if(tempc=='B')
|
||||
{
|
||||
if((src=jinit_read_bmp(&cinfo))==NULL)
|
||||
_throw("loadbmp(): Could not initialize bitmap loader");
|
||||
}
|
||||
else if(tempc=='P')
|
||||
{
|
||||
if((src=jinit_read_ppm(&cinfo))==NULL)
|
||||
_throw("loadbmp(): Could not initialize bitmap loader");
|
||||
}
|
||||
else _throw("loadbmp(): Unsupported file type");
|
||||
|
||||
src->input_file=file;
|
||||
(*src->start_input)(&cinfo, src);
|
||||
(*cinfo.mem->realize_virt_arrays)((j_common_ptr)&cinfo);
|
||||
|
||||
*w=cinfo.image_width; *h=cinfo.image_height;
|
||||
|
||||
if(cinfo.input_components==1 && cinfo.in_color_space==JCS_RGB)
|
||||
srcpf=TJPF_GRAY;
|
||||
else srcpf=TJPF_RGB;
|
||||
|
||||
dstps=tjPixelSize[dstpf];
|
||||
if((*buf=(unsigned char *)malloc((*w)*(*h)*dstps))==NULL)
|
||||
_throw("loadbmp(): Memory allocation failure");
|
||||
|
||||
while(cinfo.next_scanline<cinfo.image_height)
|
||||
{
|
||||
int i, nlines=(*src->get_pixel_rows)(&cinfo, src);
|
||||
for(i=0; i<nlines; i++)
|
||||
{
|
||||
unsigned char *outbuf; int row;
|
||||
row=cinfo.next_scanline+i;
|
||||
if(bottomup) outbuf=&(*buf)[((*h)-row-1)*(*w)*dstps];
|
||||
else outbuf=&(*buf)[row*(*w)*dstps];
|
||||
pixelconvert(src->buffer[i], srcpf, 0, outbuf, dstpf, bottomup, *w,
|
||||
nlines);
|
||||
}
|
||||
cinfo.next_scanline+=nlines;
|
||||
}
|
||||
|
||||
(*src->finish_input)(&cinfo, src);
|
||||
|
||||
bailout:
|
||||
jpeg_destroy_compress(&cinfo);
|
||||
if(file) fclose(file);
|
||||
if(retval<0 && buf && *buf) {free(*buf); *buf=NULL;}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
int savebmp(char *filename, unsigned char *buf, int w, int h, int srcpf,
|
||||
int bottomup)
|
||||
{
|
||||
int retval=0, srcps, dstpf;
|
||||
struct jpeg_decompress_struct dinfo;
|
||||
struct my_error_mgr jerr;
|
||||
djpeg_dest_ptr dst;
|
||||
FILE *file=NULL;
|
||||
char *ptr=NULL;
|
||||
|
||||
memset(&dinfo, 0, sizeof(struct jpeg_decompress_struct));
|
||||
|
||||
if(!filename || !buf || w<1 || h<1 || srcpf<0 || srcpf>=TJ_NUMPF)
|
||||
_throw("savebmp(): Invalid argument");
|
||||
|
||||
if((file=fopen(filename, "wb"))==NULL)
|
||||
_throwunix("savebmp(): Cannot open output file");
|
||||
|
||||
dinfo.err=jpeg_std_error(&jerr.pub);
|
||||
jerr.pub.error_exit=my_error_exit;
|
||||
jerr.pub.output_message=my_output_message;
|
||||
|
||||
if(setjmp(jerr.setjmp_buffer))
|
||||
{
|
||||
/* If we get here, the JPEG code has signaled an error. */
|
||||
retval=-1; goto bailout;
|
||||
}
|
||||
|
||||
jpeg_create_decompress(&dinfo);
|
||||
if(srcpf==TJPF_GRAY)
|
||||
{
|
||||
dinfo.out_color_components=dinfo.output_components=1;
|
||||
dinfo.out_color_space=JCS_GRAYSCALE;
|
||||
}
|
||||
else
|
||||
{
|
||||
dinfo.out_color_components=dinfo.output_components=3;
|
||||
dinfo.out_color_space=JCS_RGB;
|
||||
}
|
||||
dinfo.image_width=w; dinfo.image_height=h;
|
||||
dinfo.global_state=DSTATE_READY;
|
||||
dinfo.scale_num=dinfo.scale_denom=1;
|
||||
|
||||
ptr=strrchr(filename, '.');
|
||||
if(ptr && !strcasecmp(ptr, ".bmp"))
|
||||
{
|
||||
if((dst=jinit_write_bmp(&dinfo, 0))==NULL)
|
||||
_throw("savebmp(): Could not initialize bitmap writer");
|
||||
}
|
||||
else
|
||||
{
|
||||
if((dst=jinit_write_ppm(&dinfo))==NULL)
|
||||
_throw("savebmp(): Could not initialize PPM writer");
|
||||
}
|
||||
|
||||
dst->output_file=file;
|
||||
(*dst->start_output)(&dinfo, dst);
|
||||
(*dinfo.mem->realize_virt_arrays)((j_common_ptr)&dinfo);
|
||||
|
||||
if(srcpf==TJPF_GRAY) dstpf=srcpf;
|
||||
else dstpf=TJPF_RGB;
|
||||
srcps=tjPixelSize[srcpf];
|
||||
|
||||
while(dinfo.output_scanline<dinfo.output_height)
|
||||
{
|
||||
int i, nlines=dst->buffer_height;
|
||||
for(i=0; i<nlines; i++)
|
||||
{
|
||||
unsigned char *inbuf; int row;
|
||||
row=dinfo.output_scanline+i;
|
||||
if(bottomup) inbuf=&buf[(h-row-1)*w*srcps];
|
||||
else inbuf=&buf[row*w*srcps];
|
||||
pixelconvert(inbuf, srcpf, bottomup, dst->buffer[i], dstpf, 0, w,
|
||||
nlines);
|
||||
}
|
||||
(*dst->put_pixel_rows)(&dinfo, dst, nlines);
|
||||
dinfo.output_scanline+=nlines;
|
||||
}
|
||||
|
||||
(*dst->finish_output)(&dinfo, dst);
|
||||
|
||||
bailout:
|
||||
jpeg_destroy_decompress(&dinfo);
|
||||
if(file) fclose(file);
|
||||
return retval;
|
||||
}
|
||||
|
||||
const char *bmpgeterr(void)
|
||||
{
|
||||
return errStr;
|
||||
}
|
||||
42
bmp.h
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright (C)2011 D. R. Commander. All Rights Reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* - Neither the name of the libjpeg-turbo Project nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef __BMP_H__
|
||||
#define __BMP_H__
|
||||
|
||||
#include "./turbojpeg.h"
|
||||
|
||||
int loadbmp(char *filename, unsigned char **buf, int *w, int *h, int pf,
|
||||
int bottomup);
|
||||
|
||||
int savebmp(char *filename, unsigned char *buf, int w, int h, int pf,
|
||||
int bottomup);
|
||||
|
||||
const char *bmpgeterr(void);
|
||||
|
||||
#endif
|
||||
45
cderror.h
@@ -1,9 +1,11 @@
|
||||
/*
|
||||
* cderror.h
|
||||
*
|
||||
* This file was part of the Independent JPEG Group's software:
|
||||
* Copyright (C) 1994-1997, Thomas G. Lane.
|
||||
* Modified 2009 by Guido Vollbeding.
|
||||
* This file is part of the Independent JPEG Group's software.
|
||||
* Modified 2009-2017 by Guido Vollbeding.
|
||||
* libjpeg-turbo Modifications:
|
||||
* Copyright (C) 2021, D. R. Commander.
|
||||
* For conditions of distribution and use, see the accompanying README.ijg
|
||||
* file.
|
||||
*
|
||||
@@ -26,7 +28,7 @@
|
||||
#define JMAKE_ENUM_LIST
|
||||
#else
|
||||
/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */
|
||||
#define JMESSAGE(code,string)
|
||||
#define JMESSAGE(code, string)
|
||||
#endif /* CDERROR_H */
|
||||
#endif /* JMESSAGE */
|
||||
|
||||
@@ -34,24 +36,25 @@
|
||||
|
||||
typedef enum {
|
||||
|
||||
#define JMESSAGE(code,string) code ,
|
||||
#define JMESSAGE(code, string) code,
|
||||
|
||||
#endif /* JMAKE_ENUM_LIST */
|
||||
|
||||
JMESSAGE(JMSG_FIRSTADDONCODE=1000, NULL) /* Must be first entry! */
|
||||
JMESSAGE(JMSG_FIRSTADDONCODE = 1000, NULL) /* Must be first entry! */
|
||||
|
||||
#ifdef BMP_SUPPORTED
|
||||
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_BADPLANES, "Invalid BMP file: biPlanes not equal to 1")
|
||||
JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB")
|
||||
JMESSAGE(JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported")
|
||||
JMESSAGE(JERR_BMP_EMPTY, "Empty BMP image")
|
||||
JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM")
|
||||
JMESSAGE(JTRC_BMP, "%ux%u 24-bit BMP image")
|
||||
JMESSAGE(JERR_BMP_OUTOFRANGE, "Numeric value out of range in BMP file")
|
||||
JMESSAGE(JTRC_BMP, "%ux%u %d-bit 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")
|
||||
#endif /* BMP_SUPPORTED */
|
||||
|
||||
@@ -59,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_CODESIZE, "Bogus GIF codesize %d")
|
||||
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_NOT, "Not a GIF file")
|
||||
JMESSAGE(JTRC_GIF, "%ux%ux%d GIF image")
|
||||
@@ -75,31 +79,14 @@ JMESSAGE(JWRN_GIF_NOMOREDATA, "Ran out of GIF bits")
|
||||
#ifdef PPM_SUPPORTED
|
||||
JMESSAGE(JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB")
|
||||
JMESSAGE(JERR_PPM_NONNUMERIC, "Nonnumeric data in PPM file")
|
||||
JMESSAGE(JERR_PPM_TOOLARGE, "Integer value too large in PPM file")
|
||||
JMESSAGE(JERR_PPM_NOT, "Not a PPM/PGM file")
|
||||
JMESSAGE(JERR_PPM_OUTOFRANGE, "Numeric value out of range in PPM file")
|
||||
JMESSAGE(JTRC_PGM, "%ux%u PGM image")
|
||||
JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image")
|
||||
JMESSAGE(JTRC_PPM, "%ux%u PPM image")
|
||||
JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image")
|
||||
#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
|
||||
JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format")
|
||||
JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file")
|
||||
@@ -116,11 +103,11 @@ JMESSAGE(JERR_BAD_CMAP_FILE,
|
||||
JMESSAGE(JERR_TOO_MANY_COLORS,
|
||||
"Output file format cannot handle %d colormap entries")
|
||||
JMESSAGE(JERR_UNGETC_FAILED, "ungetc failed")
|
||||
#ifdef TARGA_SUPPORTED
|
||||
#ifdef PNG_SUPPORTED
|
||||
JMESSAGE(JERR_UNKNOWN_FORMAT,
|
||||
"Unrecognized input file format --- perhaps you need -targa")
|
||||
"MozJPEG can't read the image (JPEG, PNG and old BMP and Targa are supported)")
|
||||
#else
|
||||
JMESSAGE(JERR_UNKNOWN_FORMAT, "Unrecognized input file format")
|
||||
JMESSAGE(JERR_UNKNOWN_FORMAT, "MozJPEG can't read the image (PNG support is disabled in this build)")
|
||||
#endif
|
||||
JMESSAGE(JERR_UNSUPPORTED_FORMAT, "Unsupported output file format")
|
||||
|
||||
|
||||
64
cdjpeg.c
@@ -3,8 +3,8 @@
|
||||
*
|
||||
* This file was part of the Independent JPEG Group's software:
|
||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||
* It was modified by The libjpeg-turbo Project to include only code relevant
|
||||
* to libjpeg-turbo.
|
||||
* libjpeg-turbo Modifications:
|
||||
* Copyright (C) 2019, 2022, D. R. Commander.
|
||||
* For conditions of distribution and use, see the accompanying README.ijg
|
||||
* file.
|
||||
*
|
||||
@@ -25,37 +25,51 @@
|
||||
* Optional progress monitor: display a percent-done figure on stderr.
|
||||
*/
|
||||
|
||||
#ifdef PROGRESS_REPORT
|
||||
|
||||
METHODDEF(void)
|
||||
progress_monitor (j_common_ptr cinfo)
|
||||
progress_monitor(j_common_ptr cinfo)
|
||||
{
|
||||
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);
|
||||
cd_progress_ptr prog = (cd_progress_ptr)cinfo->progress;
|
||||
|
||||
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);
|
||||
if (prog->max_scans != 0 && cinfo->is_decompressor) {
|
||||
int scan_no = ((j_decompress_ptr)cinfo)->input_scan_number;
|
||||
|
||||
if (scan_no > (int)prog->max_scans) {
|
||||
fprintf(stderr, "Scan number %d exceeds maximum scans (%u)\n", scan_no,
|
||||
prog->max_scans);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
GLOBAL(void)
|
||||
start_progress_monitor (j_common_ptr cinfo, cd_progress_ptr progress)
|
||||
start_progress_monitor(j_common_ptr cinfo, cd_progress_ptr progress)
|
||||
{
|
||||
/* Enable progress display, unless trace output is on */
|
||||
if (cinfo->err->trace_level == 0) {
|
||||
progress->pub.progress_monitor = progress_monitor;
|
||||
progress->completed_extra_passes = 0;
|
||||
progress->total_extra_passes = 0;
|
||||
progress->max_scans = 0;
|
||||
progress->report = FALSE;
|
||||
progress->percent_done = -1;
|
||||
cinfo->progress = &progress->pub;
|
||||
}
|
||||
@@ -63,7 +77,7 @@ start_progress_monitor (j_common_ptr cinfo, cd_progress_ptr progress)
|
||||
|
||||
|
||||
GLOBAL(void)
|
||||
end_progress_monitor (j_common_ptr cinfo)
|
||||
end_progress_monitor(j_common_ptr cinfo)
|
||||
{
|
||||
/* Clear away progress display */
|
||||
if (cinfo->err->trace_level == 0) {
|
||||
@@ -72,8 +86,6 @@ end_progress_monitor (j_common_ptr cinfo)
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Case-insensitive matching of possibly-abbreviated keyword switches.
|
||||
@@ -82,7 +94,7 @@ end_progress_monitor (j_common_ptr cinfo)
|
||||
*/
|
||||
|
||||
GLOBAL(boolean)
|
||||
keymatch (char *arg, const char *keyword, int minchars)
|
||||
keymatch(char *arg, const char *keyword, int minchars)
|
||||
{
|
||||
register int ca, ck;
|
||||
register int nmatched = 0;
|
||||
@@ -109,9 +121,9 @@ keymatch (char *arg, const char *keyword, int minchars)
|
||||
*/
|
||||
|
||||
GLOBAL(FILE *)
|
||||
read_stdin (void)
|
||||
read_stdin(void)
|
||||
{
|
||||
FILE * input_file = stdin;
|
||||
FILE *input_file = stdin;
|
||||
|
||||
#ifdef USE_SETMODE /* need to hack file mode? */
|
||||
setmode(fileno(stdin), O_BINARY);
|
||||
@@ -127,9 +139,9 @@ read_stdin (void)
|
||||
|
||||
|
||||
GLOBAL(FILE *)
|
||||
write_stdout (void)
|
||||
write_stdout(void)
|
||||
{
|
||||
FILE * output_file = stdout;
|
||||
FILE *output_file = stdout;
|
||||
|
||||
#ifdef USE_SETMODE /* need to hack file mode? */
|
||||
setmode(fileno(stdout), O_BINARY);
|
||||
|
||||
73
cdjpeg.h
@@ -3,8 +3,9 @@
|
||||
*
|
||||
* This file was part of the Independent JPEG Group's software:
|
||||
* Copyright (C) 1994-1997, Thomas G. Lane.
|
||||
* It was modified by The libjpeg-turbo Project to include only code relevant
|
||||
* to libjpeg-turbo.
|
||||
* Modified 2019 by Guido Vollbeding.
|
||||
* libjpeg-turbo Modifications:
|
||||
* Copyright (C) 2017, 2019, 2021, D. R. Commander.
|
||||
* mozjpeg Modifications:
|
||||
* Copyright (C) 2014, Mozilla Corporation.
|
||||
* For conditions of distribution and use, see the accompanying README.ijg file.
|
||||
@@ -37,7 +38,9 @@ struct cjpeg_source_struct {
|
||||
|
||||
JSAMPARRAY buffer;
|
||||
JDIMENSION buffer_height;
|
||||
|
||||
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
|
||||
JDIMENSION max_pixels;
|
||||
#endif
|
||||
#if JPEG_RAW_READER
|
||||
// For reading JPEG
|
||||
JSAMPARRAY plane_pointer[4];
|
||||
@@ -63,6 +66,14 @@ struct djpeg_dest_struct {
|
||||
JDIMENSION rows_supplied);
|
||||
/* Finish up at the end of the image. */
|
||||
void (*finish_output) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo);
|
||||
/* Re-calculate buffer dimensions based on output dimensions (for use with
|
||||
partial image decompression.) If this is NULL, then the output format
|
||||
does not support partial image decompression (BMP, in particular, cannot
|
||||
support partial decompression because it uses an inversion buffer to write
|
||||
the image in bottom-up order.) */
|
||||
void (*calc_buffer_dimensions) (j_decompress_ptr cinfo,
|
||||
djpeg_dest_ptr dinfo);
|
||||
|
||||
|
||||
/* Target file spec; filled in by djpeg.c after object is created. */
|
||||
FILE *output_file;
|
||||
@@ -88,6 +99,9 @@ struct cdjpeg_progress_mgr {
|
||||
struct jpeg_progress_mgr pub; /* fields known to JPEG library */
|
||||
int completed_extra_passes; /* extra passes completed */
|
||||
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 */
|
||||
int percent_done;
|
||||
};
|
||||
@@ -97,43 +111,41 @@ typedef struct cdjpeg_progress_mgr *cd_progress_ptr;
|
||||
|
||||
/* Module selection routines for I/O modules. */
|
||||
|
||||
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(cjpeg_source_ptr) jinit_read_gif (j_compress_ptr cinfo);
|
||||
EXTERN(djpeg_dest_ptr) jinit_write_gif (j_decompress_ptr cinfo);
|
||||
EXTERN(cjpeg_source_ptr) jinit_read_jpeg (j_compress_ptr cinfo);
|
||||
EXTERN(cjpeg_source_ptr) jinit_read_ppm (j_compress_ptr cinfo);
|
||||
EXTERN(cjpeg_source_ptr) jinit_read_png (j_compress_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(djpeg_dest_ptr) jinit_write_targa (j_decompress_ptr cinfo);
|
||||
EXTERN(cjpeg_source_ptr) jinit_read_bmp(j_compress_ptr cinfo,
|
||||
boolean use_inversion_array);
|
||||
EXTERN(djpeg_dest_ptr) jinit_write_bmp(j_decompress_ptr cinfo, boolean is_os2,
|
||||
boolean use_inversion_array);
|
||||
EXTERN(cjpeg_source_ptr) jinit_read_gif(j_compress_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(djpeg_dest_ptr) jinit_write_ppm(j_decompress_ptr cinfo);
|
||||
EXTERN(cjpeg_source_ptr) jinit_read_targa(j_compress_ptr cinfo);
|
||||
EXTERN(djpeg_dest_ptr) jinit_write_targa(j_decompress_ptr cinfo);
|
||||
|
||||
/* cjpeg support routines (in rdswitch.c) */
|
||||
|
||||
EXTERN(boolean) read_quant_tables (j_compress_ptr cinfo, char *filename,
|
||||
boolean force_baseline);
|
||||
EXTERN(boolean) read_scan_script (j_compress_ptr cinfo, char *filename);
|
||||
EXTERN(boolean) set_quality_ratings (j_compress_ptr cinfo, char *arg,
|
||||
boolean force_baseline);
|
||||
EXTERN(boolean) set_quant_slots (j_compress_ptr cinfo, char *arg);
|
||||
EXTERN(boolean) set_sample_factors (j_compress_ptr cinfo, char *arg);
|
||||
EXTERN(boolean) read_quant_tables(j_compress_ptr cinfo, char *filename,
|
||||
boolean force_baseline);
|
||||
EXTERN(boolean) read_scan_script(j_compress_ptr cinfo, char *filename);
|
||||
EXTERN(boolean) set_quality_ratings(j_compress_ptr cinfo, char *arg,
|
||||
boolean force_baseline);
|
||||
EXTERN(boolean) set_quant_slots(j_compress_ptr cinfo, char *arg);
|
||||
EXTERN(boolean) set_sample_factors(j_compress_ptr cinfo, char *arg);
|
||||
|
||||
/* djpeg support routines (in rdcolmap.c) */
|
||||
|
||||
EXTERN(void) read_color_map (j_decompress_ptr cinfo, FILE *infile);
|
||||
EXTERN(void) read_color_map(j_decompress_ptr cinfo, FILE *infile);
|
||||
|
||||
/* common support routines (in cdjpeg.c) */
|
||||
|
||||
EXTERN(void) enable_signal_catcher (j_common_ptr cinfo);
|
||||
EXTERN(void) start_progress_monitor (j_common_ptr cinfo,
|
||||
cd_progress_ptr progress);
|
||||
EXTERN(void) end_progress_monitor (j_common_ptr cinfo);
|
||||
EXTERN(boolean) keymatch (char *arg, const char *keyword, int minchars);
|
||||
EXTERN(FILE *) read_stdin (void);
|
||||
EXTERN(FILE *) write_stdout (void);
|
||||
EXTERN(void) start_progress_monitor(j_common_ptr cinfo,
|
||||
cd_progress_ptr progress);
|
||||
EXTERN(void) end_progress_monitor(j_common_ptr cinfo);
|
||||
EXTERN(boolean) keymatch(char *arg, const char *keyword, int minchars);
|
||||
EXTERN(FILE *) read_stdin(void);
|
||||
EXTERN(FILE *) write_stdout(void);
|
||||
|
||||
/* miscellaneous useful macros */
|
||||
|
||||
@@ -154,3 +166,6 @@ EXTERN(FILE *) write_stdout (void);
|
||||
#ifndef EXIT_WARNING
|
||||
#define EXIT_WARNING 2
|
||||
#endif
|
||||
|
||||
#define IsExtRGB(cs) \
|
||||
(cs == JCS_RGB || (cs >= JCS_EXT_RGB && cs <= JCS_EXT_ARGB))
|
||||
|
||||
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
|
||||
|
||||
|
||||
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
|
||||
-----------------------
|
||||
|
||||
@@ -13,6 +32,13 @@ Document 'f' specifier for jpegtran -crop specification.
|
||||
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
|
||||
----------------------
|
||||
|
||||
@@ -138,11 +164,6 @@ Huffman tables being used.
|
||||
|
||||
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
|
||||
on many flavors of Unix (all the ones that GNU libtool knows how to
|
||||
build shared libraries for). Use "./configure --enable-shared" to
|
||||
|
||||
78
cjpeg.1
@@ -1,4 +1,4 @@
|
||||
.TH CJPEG 1 "18 March 2017"
|
||||
.TH CJPEG 1 "30 November 2021"
|
||||
.SH NAME
|
||||
cjpeg \- compress an image file to a JPEG file
|
||||
.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
|
||||
named, and produces a JPEG/JFIF file on the standard output.
|
||||
The currently supported input file formats are: PPM (PBMPLUS color
|
||||
format), PGM (PBMPLUS grayscale format), BMP, Targa, and RLE (Utah Raster
|
||||
Toolkit format). (RLE is supported only if the URT library is available.)
|
||||
format), PGM (PBMPLUS grayscale format), BMP, GIF, and Targa.
|
||||
.SH OPTIONS
|
||||
All switch names may be abbreviated; for example,
|
||||
.B \-grayscale
|
||||
@@ -41,12 +40,8 @@ Scale quantization tables to adjust image quality. Quality is 0 (worst) to
|
||||
100 (best); default is 75. (See below for more info.)
|
||||
.TP
|
||||
.B \-grayscale
|
||||
Create monochrome JPEG file from color input. Be sure to use this switch when
|
||||
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 ,
|
||||
Create monochrome JPEG file from color input. By saying
|
||||
.BR \-grayscale,
|
||||
you'll get a smaller JPEG file that takes less time to process.
|
||||
.TP
|
||||
.B \-rgb
|
||||
@@ -161,31 +156,43 @@ arithmetic coded JPEG is not yet widely implemented, so many decoders will be
|
||||
unable to view an arithmetic coded JPEG file at all.
|
||||
.TP
|
||||
.B \-dct int
|
||||
Use integer DCT method (default).
|
||||
Use accurate integer DCT method (default).
|
||||
.TP
|
||||
.B \-dct fast
|
||||
Use fast integer DCT (less accurate).
|
||||
In libjpeg-turbo, the fast method is generally about 5-15% faster than the int
|
||||
method when using the x86/x86-64 SIMD extensions (results may vary with other
|
||||
SIMD implementations, or when using libjpeg-turbo without SIMD extensions.)
|
||||
Use less accurate integer DCT method [legacy feature].
|
||||
When the Independent JPEG Group's software was first released in 1991, the
|
||||
compression time for a 1-megapixel JPEG image on a mainstream PC was measured
|
||||
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
|
||||
difference between the two algorithms. For quality levels above 90, however,
|
||||
the difference between the fast and the int methods becomes more pronounced.
|
||||
With quality=97, for instance, the fast method incurs generally about a 1-3 dB
|
||||
loss (in PSNR) relative to the int method, but this can be larger for some
|
||||
images. Do not use the fast method with quality levels above 97. The
|
||||
algorithm often degenerates at quality=98 and above and can actually produce a
|
||||
more lossy image than if lower quality levels had been used. Also, in
|
||||
libjpeg-turbo, the fast method is not fully accelerated for quality levels
|
||||
above 97, so it will be slower than the int method.
|
||||
quality difference between the two algorithms. For quality levels above 90,
|
||||
however, the difference between the \fBfast\fR and \fBint\fR methods becomes
|
||||
more pronounced. With quality=97, for instance, the \fBfast\fR method incurs
|
||||
generally about a 1-3 dB loss in PSNR relative to the \fBint\fR method, but
|
||||
this can be larger for some images. Do not use the \fBfast\fR method with
|
||||
quality levels above 97. The algorithm often degenerates at quality=98 and
|
||||
above and can actually produce a more lossy image than if lower quality levels
|
||||
had been used. Also, in libjpeg-turbo, the \fBfast\fR method is not fully
|
||||
accelerated for quality levels above 97, so it will be slower than the
|
||||
\fBint\fR method.
|
||||
.TP
|
||||
.B \-dct float
|
||||
Use floating-point DCT method.
|
||||
The float method is mainly a legacy feature. It does not produce significantly
|
||||
more accurate results than the int method, and it is much slower. The float
|
||||
method may also give different results on different machines due to varying
|
||||
roundoff behavior, whereas the integer methods should give the same results on
|
||||
all machines.
|
||||
Use floating-point DCT method [legacy feature].
|
||||
The \fBfloat\fR method does not produce significantly more accurate results
|
||||
than the \fBint\fR method, and it is much slower. The \fBfloat\fR method may
|
||||
also give different results on different machines due to varying roundoff
|
||||
behavior, whereas the integer methods should give the same results on all
|
||||
machines.
|
||||
.TP
|
||||
.BI \-icc " file"
|
||||
Embed ICC color management profile contained in the specified file.
|
||||
.TP
|
||||
.BI \-restart " N"
|
||||
Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is
|
||||
@@ -212,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
|
||||
also useful for benchmarking, since it reduces the I/O overhead.
|
||||
.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
|
||||
Enable debug printout. More
|
||||
.BR \-v 's
|
||||
@@ -338,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
|
||||
features not present in libjpeg.
|
||||
.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.
|
||||
.PP
|
||||
The
|
||||
|
||||
238
cjpeg.c
@@ -5,7 +5,7 @@
|
||||
* Copyright (C) 1991-1998, Thomas G. Lane.
|
||||
* Modified 2003-2011 by Guido Vollbeding.
|
||||
* libjpeg-turbo Modifications:
|
||||
* Copyright (C) 2010, 2013-2014, 2017, D. R. Commander.
|
||||
* Copyright (C) 2010, 2013-2014, 2017, 2019-2022, D. R. Commander.
|
||||
* mozjpeg Modifications:
|
||||
* Copyright (C) 2014, Mozilla Corporation.
|
||||
* For conditions of distribution and use, see the accompanying README file.
|
||||
@@ -28,24 +28,21 @@
|
||||
* 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 "jversion.h" /* for version message */
|
||||
#include "jconfigint.h"
|
||||
|
||||
#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. */
|
||||
|
||||
#define JMESSAGE(code,string) string ,
|
||||
#define JMESSAGE(code, string) string,
|
||||
|
||||
static const char * const cdjpeg_message_table[] = {
|
||||
#include "cderror.h"
|
||||
@@ -65,9 +62,9 @@ static const char * const cdjpeg_message_table[] = {
|
||||
* 2) assume we can push back more than one character (works in
|
||||
* some C implementations, but unportable);
|
||||
* 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
|
||||
* 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.
|
||||
*
|
||||
* The most portable solution for file types that can't be identified by their
|
||||
@@ -84,7 +81,7 @@ static boolean is_jpeg;
|
||||
static boolean copy_markers;
|
||||
|
||||
LOCAL(cjpeg_source_ptr)
|
||||
select_file_type (j_compress_ptr cinfo, FILE *infile)
|
||||
select_file_type(j_compress_ptr cinfo, FILE *infile)
|
||||
{
|
||||
int c;
|
||||
|
||||
@@ -104,7 +101,7 @@ select_file_type (j_compress_ptr cinfo, FILE *infile)
|
||||
switch (c) {
|
||||
#ifdef BMP_SUPPORTED
|
||||
case 'B':
|
||||
return jinit_read_bmp(cinfo);
|
||||
return jinit_read_bmp(cinfo, TRUE);
|
||||
#endif
|
||||
#ifdef GIF_SUPPORTED
|
||||
case 'G':
|
||||
@@ -119,10 +116,6 @@ select_file_type (j_compress_ptr cinfo, FILE *infile)
|
||||
copy_markers = TRUE;
|
||||
return jinit_read_png(cinfo);
|
||||
#endif
|
||||
#ifdef RLE_SUPPORTED
|
||||
case 'R':
|
||||
return jinit_read_rle(cinfo);
|
||||
#endif
|
||||
#ifdef TARGA_SUPPORTED
|
||||
case 0x00:
|
||||
return jinit_read_targa(cinfo);
|
||||
@@ -150,12 +143,54 @@ select_file_type (j_compress_ptr cinfo, FILE *infile)
|
||||
|
||||
|
||||
static const char *progname; /* program name for error messages */
|
||||
static char *icc_filename; /* for -icc switch */
|
||||
static char *outfilename; /* for -outfile 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)
|
||||
usage (void)
|
||||
usage(void)
|
||||
/* complain about bad command line */
|
||||
{
|
||||
fprintf(stderr, "usage: %s [switches] ", progname);
|
||||
@@ -196,29 +231,34 @@ usage (void)
|
||||
fprintf(stderr, " -tune-ms-ssim Tune trellis optimization for MS-SSIM\n");
|
||||
fprintf(stderr, "Switches for advanced users:\n");
|
||||
fprintf(stderr, " -noovershoot Disable black-on-white deringing via overshoot\n");
|
||||
fprintf(stderr, " -nojfif Do not write JFIF (reduces size by 18 bytes but breaks standards; no known problems in Web browsers)\n");
|
||||
#ifdef C_ARITH_CODING_SUPPORTED
|
||||
fprintf(stderr, " -arithmetic Use arithmetic coding\n");
|
||||
#endif
|
||||
#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)" : ""));
|
||||
#endif
|
||||
#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)" : ""));
|
||||
#endif
|
||||
#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)" : ""));
|
||||
#endif
|
||||
fprintf(stderr, " -quant-baseline Use 8-bit quantization table entries for baseline JPEG compatibility\n");
|
||||
fprintf(stderr, " -quant-table N Use predefined quantization table N:\n");
|
||||
fprintf(stderr, " - 0 JPEG Annex K\n");
|
||||
fprintf(stderr, " - 1 Flat\n");
|
||||
fprintf(stderr, " - 2 Custom, tuned for MS-SSIM\n");
|
||||
fprintf(stderr, " - 3 ImageMagick table by N. Robidoux\n");
|
||||
fprintf(stderr, " - 4 Custom, tuned for PSNR-HVS\n");
|
||||
fprintf(stderr, " - 2 Tuned for MS-SSIM on Kodak image set\n");
|
||||
fprintf(stderr, " - 3 ImageMagick table by N. Robidoux (default)\n");
|
||||
fprintf(stderr, " - 4 Tuned for PSNR-HVS on Kodak image set\n");
|
||||
fprintf(stderr, " - 5 Table from paper by Klein, Silverstein and Carney\n");
|
||||
fprintf(stderr, " - 6 Table from paper by Watson, Taylor and Borthwick\n");
|
||||
fprintf(stderr, " - 7 Table from paper by Ahumada, Watson, Peterson\n");
|
||||
fprintf(stderr, " - 8 Table from paper by Peterson, Ahumada and Watson\n");
|
||||
fprintf(stderr, " -icc FILE Embed ICC profile contained in FILE\n");
|
||||
fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n");
|
||||
#ifdef INPUT_SMOOTHING_SUPPORTED
|
||||
fprintf(stderr, " -smooth N Smooth dithered input (N=1..100 is strength)\n");
|
||||
@@ -228,6 +268,8 @@ usage (void)
|
||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||
fprintf(stderr, " -memdst Compress to memory instead of file (useful for benchmarking)\n");
|
||||
#endif
|
||||
fprintf(stderr, " -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, " -version Print version information and exit\n");
|
||||
fprintf(stderr, "Switches for wizards:\n");
|
||||
@@ -242,8 +284,8 @@ usage (void)
|
||||
|
||||
|
||||
LOCAL(int)
|
||||
parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
||||
int last_file_arg_seen, boolean for_real)
|
||||
parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
||||
int last_file_arg_seen, boolean for_real)
|
||||
/* Parse optional switches.
|
||||
* Returns argv[] index of first file-name argument (== argc if none).
|
||||
* Any file names with indexes <= last_file_arg_seen are ignored;
|
||||
@@ -272,8 +314,11 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
||||
simple_progressive = FALSE;
|
||||
#endif
|
||||
is_targa = FALSE;
|
||||
icc_filename = NULL;
|
||||
outfilename = NULL;
|
||||
memdst = FALSE;
|
||||
report = FALSE;
|
||||
strict = FALSE;
|
||||
cinfo->err->trace_level = 0;
|
||||
|
||||
/* Scan command line options, adjust parameters */
|
||||
@@ -333,7 +378,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
||||
/* On first -d, print version identification */
|
||||
static boolean printed_version = FALSE;
|
||||
|
||||
if (! printed_version) {
|
||||
if (!printed_version) {
|
||||
fprintf(stderr, "%s version %s (build %s)\n",
|
||||
PACKAGE_NAME, VERSION, BUILD);
|
||||
fprintf(stderr, "%s\n\n", JCOPYRIGHT);
|
||||
@@ -371,6 +416,12 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
||||
jpeg_c_set_float_param(cinfo, JFLOAT_LAMBDA_LOG_SCALE2,
|
||||
atof(argv[argn]));
|
||||
|
||||
} else if (keymatch(arg, "icc", 1)) {
|
||||
/* Set ICC filename. */
|
||||
if (++argn >= argc) /* advance to next argument */
|
||||
usage();
|
||||
icc_filename = argv[argn];
|
||||
|
||||
} else if (keymatch(arg, "maxmemory", 3)) {
|
||||
/* Maximum memory in Kb (or Mb with 'm'). */
|
||||
long lval;
|
||||
@@ -455,6 +506,8 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
||||
qtablefile = argv[argn];
|
||||
/* We postpone actually reading the file in case -quality comes later. */
|
||||
|
||||
} else if (keymatch(arg, "report", 3)) {
|
||||
report = TRUE;
|
||||
} else if (keymatch(arg, "quant-table", 7)) {
|
||||
int val;
|
||||
if (++argn >= argc) /* advance to next argument */
|
||||
@@ -470,7 +523,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
||||
} else if (keymatch(arg, "quant-baseline", 7)) {
|
||||
/* Force quantization table to meet baseline requirements */
|
||||
force_baseline = TRUE;
|
||||
|
||||
|
||||
} else if (keymatch(arg, "restart", 1)) {
|
||||
/* Restart interval in MCU rows (or in MCUs with 'b'). */
|
||||
long lval;
|
||||
@@ -483,10 +536,10 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
||||
if (lval < 0 || lval > 65535L)
|
||||
usage();
|
||||
if (ch == 'b' || ch == 'B') {
|
||||
cinfo->restart_interval = (unsigned int) lval;
|
||||
cinfo->restart_interval = (unsigned int)lval;
|
||||
cinfo->restart_in_rows = 0; /* else prior '-restart n' overrides me */
|
||||
} else {
|
||||
cinfo->restart_in_rows = (int) lval;
|
||||
cinfo->restart_in_rows = (int)lval;
|
||||
/* restart_interval will be computed during startup */
|
||||
}
|
||||
|
||||
@@ -530,6 +583,9 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
||||
usage();
|
||||
cinfo->smoothing_factor = val;
|
||||
|
||||
} else if (keymatch(arg, "strict", 2)) {
|
||||
strict = TRUE;
|
||||
|
||||
} else if (keymatch(arg, "targa", 1)) {
|
||||
/* Input file is Targa format. */
|
||||
is_targa = TRUE;
|
||||
@@ -583,6 +639,9 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
||||
|
||||
} else if (keymatch(arg, "noovershoot", 11)) {
|
||||
jpeg_c_set_bool_param(cinfo, JBOOLEAN_OVERSHOOT_DERINGING, FALSE);
|
||||
|
||||
} else if (keymatch(arg, "nojfif", 6)) {
|
||||
cinfo->write_JFIF_header = 0;
|
||||
} else {
|
||||
fprintf(stderr, "%s: unknown option '%s'\n", progname, arg);
|
||||
usage(); /* bogus switch */
|
||||
@@ -608,7 +667,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
||||
}
|
||||
|
||||
if (qslotsarg != NULL) /* process -qslots if it was present */
|
||||
if (! set_quant_slots(cinfo, qslotsarg))
|
||||
if (!set_quant_slots(cinfo, qslotsarg))
|
||||
usage();
|
||||
|
||||
/* set_quality_ratings sets default subsampling, so the explicit
|
||||
@@ -626,7 +685,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
||||
|
||||
#ifdef C_MULTISCAN_FILES_SUPPORTED
|
||||
if (scansarg != NULL) /* process -scans if it was present */
|
||||
if (! read_scan_script(cinfo, scansarg))
|
||||
if (!read_scan_script(cinfo, scansarg))
|
||||
usage();
|
||||
#endif
|
||||
}
|
||||
@@ -635,31 +694,45 @@ 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.
|
||||
*/
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
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;
|
||||
#ifdef PROGRESS_REPORT
|
||||
struct cdjpeg_progress_mgr progress;
|
||||
#endif
|
||||
struct cdjpeg_progress_mgr progress;
|
||||
int file_index;
|
||||
cjpeg_source_ptr src_mgr;
|
||||
FILE *input_file;
|
||||
FILE *input_file = NULL;
|
||||
FILE *icc_file;
|
||||
JOCTET *icc_profile = NULL;
|
||||
long icc_len = 0;
|
||||
FILE *output_file = NULL;
|
||||
unsigned char *outbuffer = NULL;
|
||||
unsigned long outsize = 0;
|
||||
JDIMENSION num_scanlines;
|
||||
|
||||
/* On Mac, fetch a command line. */
|
||||
#ifdef USE_CCOMMAND
|
||||
argc = ccommand(&argv);
|
||||
#endif
|
||||
|
||||
progname = argv[0];
|
||||
if (progname == NULL || progname[0] == 0)
|
||||
progname = "cjpeg"; /* in case C library doesn't provide it */
|
||||
@@ -689,18 +762,21 @@ main (int argc, char **argv)
|
||||
|
||||
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
||||
|
||||
if (strict)
|
||||
jerr.emit_message = my_emit_message;
|
||||
|
||||
#ifdef TWO_FILE_COMMANDLINE
|
||||
if (!memdst) {
|
||||
/* Must have either -outfile switch or explicit output file name */
|
||||
if (outfilename == NULL) {
|
||||
if (file_index != argc-2) {
|
||||
if (file_index != argc - 2) {
|
||||
fprintf(stderr, "%s: must name one input and one output file\n",
|
||||
progname);
|
||||
usage();
|
||||
}
|
||||
outfilename = argv[file_index+1];
|
||||
outfilename = argv[file_index + 1];
|
||||
} else {
|
||||
if (file_index != argc-1) {
|
||||
if (file_index != argc - 1) {
|
||||
fprintf(stderr, "%s: must name one input and one output file\n",
|
||||
progname);
|
||||
usage();
|
||||
@@ -709,7 +785,7 @@ main (int argc, char **argv)
|
||||
}
|
||||
#else
|
||||
/* Unix style: expect zero or one file name */
|
||||
if (file_index < argc-1) {
|
||||
if (file_index < argc - 1) {
|
||||
fprintf(stderr, "%s: only one input file\n", progname);
|
||||
usage();
|
||||
}
|
||||
@@ -737,13 +813,51 @@ main (int argc, char **argv)
|
||||
output_file = write_stdout();
|
||||
}
|
||||
|
||||
#ifdef PROGRESS_REPORT
|
||||
start_progress_monitor((j_common_ptr) &cinfo, &progress);
|
||||
if (icc_filename != NULL) {
|
||||
if ((icc_file = fopen(icc_filename, READ_BINARY)) == NULL) {
|
||||
fprintf(stderr, "%s: can't open %s\n", progname, icc_filename);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if (fseek(icc_file, 0, SEEK_END) < 0 ||
|
||||
(icc_len = ftell(icc_file)) < 1 ||
|
||||
fseek(icc_file, 0, SEEK_SET) < 0) {
|
||||
fprintf(stderr, "%s: can't determine size of %s\n", progname,
|
||||
icc_filename);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if ((icc_profile = (JOCTET *)malloc(icc_len)) == NULL) {
|
||||
fprintf(stderr, "%s: can't allocate memory for ICC profile\n", progname);
|
||||
fclose(icc_file);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if (fread(icc_profile, icc_len, 1, icc_file) < 1) {
|
||||
fprintf(stderr, "%s: can't read ICC profile from %s\n", progname,
|
||||
icc_filename);
|
||||
free(icc_profile);
|
||||
fclose(icc_file);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
fclose(icc_file);
|
||||
}
|
||||
|
||||
#ifdef CJPEG_FUZZER
|
||||
jerr.error_exit = my_error_exit;
|
||||
jerr.emit_message = my_emit_message_fuzzer;
|
||||
if (setjmp(myerr.setjmp_buffer))
|
||||
HANDLE_ERROR()
|
||||
#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. */
|
||||
src_mgr = select_file_type(&cinfo, 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. */
|
||||
(*src_mgr->start_input) (&cinfo, src_mgr);
|
||||
@@ -765,6 +879,11 @@ main (int argc, char **argv)
|
||||
#endif
|
||||
jpeg_stdio_dest(&cinfo, output_file);
|
||||
|
||||
#ifdef CJPEG_FUZZER
|
||||
if (setjmp(myerr.setjmp_buffer))
|
||||
HANDLE_ERROR()
|
||||
#endif
|
||||
|
||||
/* Start compressor */
|
||||
jpeg_start_compress(&cinfo, TRUE);
|
||||
|
||||
@@ -800,7 +919,9 @@ main (int argc, char **argv)
|
||||
marker->data_length);
|
||||
}
|
||||
}
|
||||
|
||||
if (icc_profile != NULL)
|
||||
jpeg_write_icc_profile(&cinfo, icc_profile, (unsigned int)icc_len);
|
||||
|
||||
/* Process data */
|
||||
while (cinfo.next_scanline < cinfo.image_height) {
|
||||
num_scanlines = (*src_mgr->get_pixel_rows) (&cinfo, src_mgr);
|
||||
@@ -823,17 +944,18 @@ main (int argc, char **argv)
|
||||
if (output_file != stdout && output_file != NULL)
|
||||
fclose(output_file);
|
||||
|
||||
#ifdef PROGRESS_REPORT
|
||||
end_progress_monitor((j_common_ptr) &cinfo);
|
||||
#endif
|
||||
if (report)
|
||||
end_progress_monitor((j_common_ptr)&cinfo);
|
||||
|
||||
if (memdst) {
|
||||
#ifndef CJPEG_FUZZER
|
||||
fprintf(stderr, "Compressed size: %lu bytes\n", outsize);
|
||||
if (outbuffer != NULL)
|
||||
free(outbuffer);
|
||||
#endif
|
||||
free(outbuffer);
|
||||
}
|
||||
|
||||
free(icc_profile);
|
||||
|
||||
/* All done. */
|
||||
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
||||
return 0; /* suppress no-return-value warnings */
|
||||
return (jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
176
cmakescripts/BuildPackages.cmake
Normal file
@@ -0,0 +1,176 @@
|
||||
# This file is included from the top-level CMakeLists.txt. We just store it
|
||||
# here to avoid cluttering up that file.
|
||||
|
||||
###############################################################################
|
||||
# Linux RPM and DEB
|
||||
###############################################################################
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
|
||||
set(RPMARCH ${CMAKE_SYSTEM_PROCESSOR})
|
||||
if(CPU_TYPE STREQUAL "x86_64")
|
||||
set(DEBARCH amd64)
|
||||
elseif(CPU_TYPE STREQUAL "arm64")
|
||||
set(DEBARCH ${CPU_TYPE})
|
||||
elseif(CPU_TYPE STREQUAL "arm")
|
||||
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")
|
||||
set(DEBARCH ppc64el)
|
||||
elseif(CPU_TYPE STREQUAL "powerpc" AND BITS EQUAL 32)
|
||||
set(RPMARCH ppc)
|
||||
set(DEBARCH ppc)
|
||||
else()
|
||||
set(DEBARCH ${CMAKE_SYSTEM_PROCESSOR})
|
||||
endif()
|
||||
message(STATUS "RPM architecture = ${RPMARCH}, DEB architecture = ${DEBARCH}")
|
||||
|
||||
# Re-set CMAKE_POSITION_INDEPENDENT_CODE so that the RPM spec file works
|
||||
# properly
|
||||
boolean_number(CMAKE_POSITION_INDEPENDENT_CODE)
|
||||
|
||||
configure_file(release/makerpm.in pkgscripts/makerpm)
|
||||
configure_file(release/rpm.spec.in pkgscripts/rpm.spec @ONLY)
|
||||
|
||||
add_custom_target(rpm pkgscripts/makerpm
|
||||
SOURCES pkgscripts/makerpm)
|
||||
|
||||
configure_file(release/makesrpm.in pkgscripts/makesrpm)
|
||||
|
||||
add_custom_target(srpm pkgscripts/makesrpm
|
||||
SOURCES pkgscripts/makesrpm
|
||||
DEPENDS dist)
|
||||
|
||||
configure_file(release/makedpkg.in pkgscripts/makedpkg)
|
||||
configure_file(release/deb-control.in pkgscripts/deb-control)
|
||||
|
||||
add_custom_target(deb pkgscripts/makedpkg
|
||||
SOURCES pkgscripts/makedpkg)
|
||||
|
||||
endif() # Linux
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Windows installer (NullSoft Installer)
|
||||
###############################################################################
|
||||
|
||||
if(WIN32)
|
||||
|
||||
if(MSVC)
|
||||
set(INST_PLATFORM "Visual C++")
|
||||
set(INST_ID vc)
|
||||
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-${INST_ID})
|
||||
set(INST_REG_NAME ${CMAKE_PROJECT_NAME})
|
||||
elseif(MINGW)
|
||||
set(INST_PLATFORM GCC)
|
||||
set(INST_ID gcc)
|
||||
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-${INST_ID})
|
||||
set(INST_REG_NAME ${CMAKE_PROJECT_NAME}-${INST_ID})
|
||||
set(INST_DEFS -DGCC)
|
||||
endif()
|
||||
|
||||
if(BITS EQUAL 64)
|
||||
set(INST_PLATFORM "${INST_PLATFORM} 64-bit")
|
||||
set(INST_NAME ${INST_NAME}64)
|
||||
set(INST_REG_NAME ${INST_REG_NAME}64)
|
||||
set(INST_DEFS ${INST_DEFS} -DWIN64)
|
||||
endif()
|
||||
|
||||
if(WITH_JAVA)
|
||||
set(INST_DEFS ${INST_DEFS} -DJAVA)
|
||||
endif()
|
||||
|
||||
if(GENERATOR_IS_MULTI_CONFIG)
|
||||
set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=${CMAKE_CFG_INTDIR}\\")
|
||||
else()
|
||||
set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=")
|
||||
endif()
|
||||
|
||||
string(REGEX REPLACE "/" "\\\\" INST_DIR ${CMAKE_INSTALL_PREFIX})
|
||||
|
||||
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)
|
||||
set(JAVA_DEPEND turbojpeg-java)
|
||||
endif()
|
||||
if(WITH_TURBOJPEG)
|
||||
set(TURBOJPEG_DEPEND turbojpeg turbojpeg-static tjbench)
|
||||
endif()
|
||||
add_custom_target(installer
|
||||
makensis -nocd ${INST_DEFS} installer.nsi
|
||||
DEPENDS jpeg jpeg-static rdjpgcom wrjpgcom cjpeg djpeg jpegtran
|
||||
${JAVA_DEPEND} ${TURBOJPEG_DEPEND}
|
||||
SOURCES installer.nsi)
|
||||
|
||||
endif() # WIN32
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Mac DMG
|
||||
###############################################################################
|
||||
|
||||
if(APPLE)
|
||||
|
||||
set(ARMV8_BUILD "" CACHE PATH
|
||||
"Directory containing Armv8 iOS or macOS build to include in universal binaries")
|
||||
|
||||
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.")
|
||||
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.")
|
||||
|
||||
configure_file(release/makemacpkg.in pkgscripts/makemacpkg)
|
||||
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)
|
||||
|
||||
add_custom_target(dmg pkgscripts/makemacpkg
|
||||
SOURCES pkgscripts/makemacpkg)
|
||||
|
||||
endif() # APPLE
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Generic
|
||||
###############################################################################
|
||||
|
||||
add_custom_target(dist
|
||||
COMMAND git archive --prefix=${CMAKE_PROJECT_NAME}-${VERSION}/ HEAD |
|
||||
gzip > ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-${VERSION}.tar.gz
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
configure_file(release/maketarball.in pkgscripts/maketarball)
|
||||
|
||||
add_custom_target(tarball pkgscripts/maketarball
|
||||
SOURCES pkgscripts/maketarball)
|
||||
|
||||
configure_file(release/libjpeg.pc.in pkgscripts/libjpeg.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})
|
||||
419
cmakescripts/GNUInstallDirs.cmake
Normal file
@@ -0,0 +1,419 @@
|
||||
#.rst:
|
||||
# GNUInstallDirs
|
||||
# --------------
|
||||
#
|
||||
# Define GNU standard installation directories
|
||||
#
|
||||
# Provides install directory variables as defined by the
|
||||
# `GNU Coding Standards`_.
|
||||
#
|
||||
# .. _`GNU Coding Standards`: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
|
||||
#
|
||||
# Result Variables
|
||||
# ^^^^^^^^^^^^^^^^
|
||||
#
|
||||
# Inclusion of this module defines the following variables:
|
||||
#
|
||||
# ``CMAKE_INSTALL_<dir>``
|
||||
#
|
||||
# Destination for files of a given type. This value may be passed to
|
||||
# the ``DESTINATION`` options of :command:`install` commands for the
|
||||
# corresponding file type.
|
||||
#
|
||||
# ``CMAKE_INSTALL_FULL_<dir>``
|
||||
#
|
||||
# The absolute path generated from the corresponding ``CMAKE_INSTALL_<dir>``
|
||||
# value. If the value is not already an absolute path, an absolute path
|
||||
# is constructed typically by prepending the value of the
|
||||
# :variable:`CMAKE_INSTALL_PREFIX` variable. However, there are some
|
||||
# `special cases`_ as documented below.
|
||||
#
|
||||
# where ``<dir>`` is one of:
|
||||
#
|
||||
# ``BINDIR``
|
||||
# user executables (``bin``)
|
||||
# ``SBINDIR``
|
||||
# system admin executables (``sbin``)
|
||||
# ``LIBEXECDIR``
|
||||
# program executables (``libexec``)
|
||||
# ``SYSCONFDIR``
|
||||
# read-only single-machine data (``etc``)
|
||||
# ``SHAREDSTATEDIR``
|
||||
# modifiable architecture-independent data (``com``)
|
||||
# ``LOCALSTATEDIR``
|
||||
# modifiable single-machine data (``var``)
|
||||
# ``LIBDIR``
|
||||
# object code libraries (``lib`` or ``lib64``
|
||||
# or ``lib/<multiarch-tuple>`` on Debian)
|
||||
# ``INCLUDEDIR``
|
||||
# C header files (``include``)
|
||||
# ``OLDINCLUDEDIR``
|
||||
# C header files for non-gcc (``/usr/include``)
|
||||
# ``DATAROOTDIR``
|
||||
# read-only architecture-independent data root (``share``)
|
||||
# ``DATADIR``
|
||||
# read-only architecture-independent data (``DATAROOTDIR``)
|
||||
# ``INFODIR``
|
||||
# info documentation (``DATAROOTDIR/info``)
|
||||
# ``LOCALEDIR``
|
||||
# locale-dependent data (``DATAROOTDIR/locale``)
|
||||
# ``MANDIR``
|
||||
# man documentation (``DATAROOTDIR/man``)
|
||||
# ``DOCDIR``
|
||||
# documentation root (``DATAROOTDIR/doc/PROJECT_NAME``)
|
||||
#
|
||||
# If the includer does not define a value the above-shown default will be
|
||||
# used and the value will appear in the cache for editing by the user.
|
||||
#
|
||||
# Special Cases
|
||||
# ^^^^^^^^^^^^^
|
||||
#
|
||||
# The following values of :variable:`CMAKE_INSTALL_PREFIX` are special:
|
||||
#
|
||||
# ``/``
|
||||
#
|
||||
# For ``<dir>`` other than the ``SYSCONFDIR`` and ``LOCALSTATEDIR``,
|
||||
# the value of ``CMAKE_INSTALL_<dir>`` is prefixed with ``usr/`` if
|
||||
# it is not user-specified as an absolute path. For example, the
|
||||
# ``INCLUDEDIR`` value ``include`` becomes ``usr/include``.
|
||||
# This is required by the `GNU Coding Standards`_, which state:
|
||||
#
|
||||
# When building the complete GNU system, the prefix will be empty
|
||||
# and ``/usr`` will be a symbolic link to ``/``.
|
||||
#
|
||||
# ``/usr``
|
||||
#
|
||||
# For ``<dir>`` equal to ``SYSCONFDIR`` or ``LOCALSTATEDIR``, the
|
||||
# ``CMAKE_INSTALL_FULL_<dir>`` is computed by prepending just ``/``
|
||||
# to the value of ``CMAKE_INSTALL_<dir>`` if it is not user-specified
|
||||
# as an absolute path. For example, the ``SYSCONFDIR`` value ``etc``
|
||||
# becomes ``/etc``. This is required by the `GNU Coding Standards`_.
|
||||
#
|
||||
# ``/opt/...``
|
||||
#
|
||||
# For ``<dir>`` equal to ``SYSCONFDIR`` or ``LOCALSTATEDIR``, the
|
||||
# ``CMAKE_INSTALL_FULL_<dir>`` is computed by *appending* the prefix
|
||||
# to the value of ``CMAKE_INSTALL_<dir>`` if it is not user-specified
|
||||
# as an absolute path. For example, the ``SYSCONFDIR`` value ``etc``
|
||||
# becomes ``/etc/opt/...``. This is defined by the
|
||||
# `Filesystem Hierarchy Standard`_.
|
||||
#
|
||||
# .. _`Filesystem Hierarchy Standard`: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html
|
||||
#
|
||||
# Macros
|
||||
# ^^^^^^
|
||||
#
|
||||
# .. command:: GNUInstallDirs_get_absolute_install_dir
|
||||
#
|
||||
# ::
|
||||
#
|
||||
# GNUInstallDirs_get_absolute_install_dir(absvar var)
|
||||
#
|
||||
# Set the given variable ``absvar`` to the absolute path contained
|
||||
# within the variable ``var``. This is to allow the computation of an
|
||||
# absolute path, accounting for all the special cases documented
|
||||
# above. While this macro is used to compute the various
|
||||
# ``CMAKE_INSTALL_FULL_<dir>`` variables, it is exposed publicly to
|
||||
# allow users who create additional path variables to also compute
|
||||
# absolute paths where necessary, using the same logic.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2018 Matthias Räncker
|
||||
# Copyright 2016, 2019 D. R. Commander
|
||||
# Copyright 2016 Dmitry Marakasov
|
||||
# Copyright 2016 Roger Leigh
|
||||
# Copyright 2015 Alex Turbov
|
||||
# Copyright 2014 Rolf Eike Beer
|
||||
# Copyright 2014 Daniele E. Domenichelli
|
||||
# Copyright 2013 Dimitri John Ledkov
|
||||
# Copyright 2011 Alex Neundorf
|
||||
# Copyright 2011 Eric NOULARD
|
||||
# Copyright 2011, 2013-2015 Kitware, Inc.
|
||||
# Copyright 2011 Nikita Krupen'ko
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# * Neither the names of Kitware, Inc., the Insight Software Consortium,
|
||||
# nor the names of their contributors may be used to endorse or promote
|
||||
# products derived from this software without specific prior written
|
||||
# permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#=============================================================================
|
||||
|
||||
# Installation directories
|
||||
#
|
||||
|
||||
macro(GNUInstallDirs_set_install_dir var docstring)
|
||||
# If CMAKE_INSTALL_PREFIX changes and CMAKE_INSTALL_*DIR is still set to the
|
||||
# default value, then modify it accordingly. This presumes that the default
|
||||
# value may change based on the prefix.
|
||||
|
||||
set(_GNUInstallDirs_CMAKE_INSTALL_FORCE_${var} "")
|
||||
if(NOT DEFINED CMAKE_INSTALL_${var})
|
||||
set(_GNUInstallDirs_CMAKE_INSTALL_DEFAULT_${var} 1 CACHE INTERNAL
|
||||
"CMAKE_INSTALL_${var} has default value")
|
||||
elseif(DEFINED _GNUInstallDirs_CMAKE_INSTALL_LAST_DEFAULT_${var} AND
|
||||
NOT "${_GNUInstallDirs_CMAKE_INSTALL_LAST_DEFAULT_${var}}" STREQUAL
|
||||
"${CMAKE_INSTALL_DEFAULT_${var}}" AND
|
||||
_GNUInstallDirs_CMAKE_INSTALL_DEFAULT_${var} AND
|
||||
"${_GNUInstallDirs_CMAKE_INSTALL_LAST_${var}}" STREQUAL
|
||||
"${CMAKE_INSTALL_${var}}")
|
||||
set(_GNUInstallDirs_CMAKE_INSTALL_FORCE_${var} "FORCE")
|
||||
endif()
|
||||
|
||||
set(CMAKE_INSTALL_${var} "${CMAKE_INSTALL_DEFAULT_${var}}" CACHE PATH
|
||||
"${docstring} (Default: ${CMAKE_INSTALL_DEFAULT_${var}})"
|
||||
${_GNUInstallDirs_CMAKE_INSTALL_FORCE_${var}})
|
||||
|
||||
if(NOT CMAKE_INSTALL_${var} STREQUAL CMAKE_INSTALL_DEFAULT_${var})
|
||||
unset(_GNUInstallDirs_CMAKE_INSTALL_DEFAULT_${var} CACHE)
|
||||
endif()
|
||||
|
||||
# Save for next run
|
||||
set(_GNUInstallDirs_CMAKE_INSTALL_LAST_${var} "${CMAKE_INSTALL_${var}}"
|
||||
CACHE INTERNAL "CMAKE_INSTALL_${var} during last run")
|
||||
set(_GNUInstallDirs_CMAKE_INSTALL_LAST_DEFAULT_${var}
|
||||
"${CMAKE_INSTALL_DEFAULT_${var}}" CACHE INTERNAL
|
||||
"CMAKE_INSTALL_DEFAULT_${var} during last run")
|
||||
endmacro()
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_BINDIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_BINDIR "bin")
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(BINDIR
|
||||
"Directory into which user executables should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_SBINDIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_SBINDIR "sbin")
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(SBINDIR
|
||||
"Directory into which system admin executables should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_LIBEXECDIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_LIBEXECDIR "libexec")
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(LIBEXECDIR
|
||||
"Directory under which executables run by other programs should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_SYSCONFDIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_SYSCONFDIR "etc")
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(SYSCONFDIR
|
||||
"Directory into which machine-specific read-only ASCII data and configuration files should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_SHAREDSTATEDIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_SHAREDSTATEDIR "com")
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(SHAREDSTATEDIR
|
||||
"Directory into which architecture-independent run-time-modifiable data files should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_LOCALSTATEDIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_LOCALSTATEDIR "var")
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(LOCALSTATEDIR
|
||||
"Directory into which machine-specific run-time-modifiable data files should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_LIBDIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib")
|
||||
# Override this default 'lib' with 'lib64' iff:
|
||||
# - we are on Linux system but NOT cross-compiling
|
||||
# - we are NOT on debian
|
||||
# - we are on a 64 bits system
|
||||
# reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf
|
||||
# For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if
|
||||
# CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"
|
||||
# and CMAKE_INSTALL_PREFIX is "/usr"
|
||||
# See http://wiki.debian.org/Multiarch
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$"
|
||||
AND NOT CMAKE_CROSSCOMPILING)
|
||||
if (EXISTS "/etc/debian_version") # is this a debian system ?
|
||||
if(CMAKE_LIBRARY_ARCHITECTURE)
|
||||
if("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
|
||||
set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
|
||||
endif()
|
||||
endif()
|
||||
else() # not debian, rely on CMAKE_SIZEOF_VOID_P:
|
||||
if(NOT DEFINED CMAKE_SIZEOF_VOID_P)
|
||||
message(AUTHOR_WARNING
|
||||
"Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. "
|
||||
"Please enable at least one language before including GNUInstallDirs.")
|
||||
else()
|
||||
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
||||
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()
|
||||
GNUInstallDirs_set_install_dir(LIBDIR
|
||||
"Directory into which object files and object code libraries should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_INCLUDEDIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_INCLUDEDIR "include")
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(INCLUDEDIR
|
||||
"Directory into which C header files should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_OLDINCLUDEDIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_OLDINCLUDEDIR "/usr/include")
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(OLDINCLUDEDIR
|
||||
PATH "Directory into which C header files for non-GCC compilers should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_DATAROOTDIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_DATAROOTDIR "share")
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(DATAROOTDIR
|
||||
"The root of the directory tree for read-only architecture-independent data files")
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Values whose defaults are relative to DATAROOTDIR. Store empty values in
|
||||
# the cache and store the defaults in local variables if the cache values are
|
||||
# not set explicitly. This auto-updates the defaults as DATAROOTDIR changes.
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_DATADIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_DATADIR "<CMAKE_INSTALL_DATAROOTDIR>")
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(DATADIR
|
||||
"The directory under which read-only architecture-independent data files should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_INFODIR)
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "^(.*BSD|DragonFly)$")
|
||||
set(CMAKE_INSTALL_DEFAULT_INFODIR "info")
|
||||
else()
|
||||
set(CMAKE_INSTALL_DEFAULT_INFODIR "<CMAKE_INSTALL_DATAROOTDIR>/info")
|
||||
endif()
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(INFODIR
|
||||
"The directory into which info documentation files should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_MANDIR)
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "^(.*BSD|DragonFly)$")
|
||||
set(CMAKE_INSTALL_DEFAULT_MANDIR "man")
|
||||
else()
|
||||
set(CMAKE_INSTALL_DEFAULT_MANDIR "<CMAKE_INSTALL_DATAROOTDIR>/man")
|
||||
endif()
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(MANDIR
|
||||
"The directory under which man pages should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_LOCALEDIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_LOCALEDIR "<CMAKE_INSTALL_DATAROOTDIR>/locale")
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(LOCALEDIR
|
||||
"The directory under which locale-specific message catalogs should be installed")
|
||||
|
||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_DOCDIR)
|
||||
set(CMAKE_INSTALL_DEFAULT_DOCDIR "<CMAKE_INSTALL_DATAROOTDIR>/doc/${PROJECT_NAME}")
|
||||
endif()
|
||||
GNUInstallDirs_set_install_dir(DOCDIR
|
||||
"The directory into which documentation files (other than info files) should be installed")
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
mark_as_advanced(
|
||||
CMAKE_INSTALL_BINDIR
|
||||
CMAKE_INSTALL_SBINDIR
|
||||
CMAKE_INSTALL_LIBEXECDIR
|
||||
CMAKE_INSTALL_SYSCONFDIR
|
||||
CMAKE_INSTALL_SHAREDSTATEDIR
|
||||
CMAKE_INSTALL_LOCALSTATEDIR
|
||||
CMAKE_INSTALL_LIBDIR
|
||||
CMAKE_INSTALL_INCLUDEDIR
|
||||
CMAKE_INSTALL_OLDINCLUDEDIR
|
||||
CMAKE_INSTALL_DATAROOTDIR
|
||||
CMAKE_INSTALL_DATADIR
|
||||
CMAKE_INSTALL_INFODIR
|
||||
CMAKE_INSTALL_LOCALEDIR
|
||||
CMAKE_INSTALL_MANDIR
|
||||
CMAKE_INSTALL_DOCDIR
|
||||
)
|
||||
|
||||
macro(GNUInstallDirs_get_absolute_install_dir absvar var)
|
||||
string(REGEX REPLACE "[<>]" "@" ${var} "${${var}}")
|
||||
# Handle the specific case of an empty CMAKE_INSTALL_DATAROOTDIR
|
||||
if(NOT CMAKE_INSTALL_DATAROOTDIR AND
|
||||
${var} MATCHES "\@CMAKE_INSTALL_DATAROOTDIR\@/")
|
||||
string(CONFIGURE "${${var}}" ${var} @ONLY)
|
||||
string(REGEX REPLACE "^/" "" ${var} "${${var}}")
|
||||
else()
|
||||
string(CONFIGURE "${${var}}" ${var} @ONLY)
|
||||
endif()
|
||||
if(NOT IS_ABSOLUTE "${${var}}")
|
||||
# Handle special cases:
|
||||
# - CMAKE_INSTALL_PREFIX == /
|
||||
# - CMAKE_INSTALL_PREFIX == /usr
|
||||
# - CMAKE_INSTALL_PREFIX == /opt/...
|
||||
if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/")
|
||||
if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR")
|
||||
set(${absvar} "/${${var}}")
|
||||
else()
|
||||
if (NOT "${${var}}" MATCHES "^usr/")
|
||||
set(${var} "usr/${${var}}")
|
||||
endif()
|
||||
set(${absvar} "/${${var}}")
|
||||
endif()
|
||||
elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
|
||||
if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR")
|
||||
set(${absvar} "/${${var}}")
|
||||
else()
|
||||
set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
|
||||
endif()
|
||||
elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/opt/.*")
|
||||
if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR")
|
||||
set(${absvar} "/${${var}}${CMAKE_INSTALL_PREFIX}")
|
||||
else()
|
||||
set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
|
||||
endif()
|
||||
else()
|
||||
set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
|
||||
endif()
|
||||
else()
|
||||
set(${absvar} "${${var}}")
|
||||
endif()
|
||||
string(REGEX REPLACE "/$" "" ${absvar} "${${absvar}}")
|
||||
endmacro()
|
||||
|
||||
# Result directories
|
||||
#
|
||||
foreach(dir
|
||||
BINDIR
|
||||
SBINDIR
|
||||
LIBEXECDIR
|
||||
SYSCONFDIR
|
||||
SHAREDSTATEDIR
|
||||
LOCALSTATEDIR
|
||||
LIBDIR
|
||||
INCLUDEDIR
|
||||
OLDINCLUDEDIR
|
||||
DATAROOTDIR
|
||||
DATADIR
|
||||
INFODIR
|
||||
LOCALEDIR
|
||||
MANDIR
|
||||
DOCDIR
|
||||
)
|
||||
GNUInstallDirs_get_absolute_install_dir(CMAKE_INSTALL_FULL_${dir} CMAKE_INSTALL_${dir})
|
||||
endforeach()
|
||||
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})")
|
||||
@@ -1,10 +1,10 @@
|
||||
# This code is from the CMake FAQ
|
||||
|
||||
if (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
|
||||
endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||
if (NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt")
|
||||
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_BINARY_DIR@/install_manifest.txt\"")
|
||||
endif(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt")
|
||||
|
||||
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
|
||||
file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files)
|
||||
string(REGEX REPLACE "\n" ";" files "${files}")
|
||||
list(REVERSE files)
|
||||
foreach (file ${files})
|
||||
|
||||
@@ -29,7 +29,9 @@ file(GLOB FILES
|
||||
*_411_*.png
|
||||
*_411_*.ppm
|
||||
*_411_*.jpg
|
||||
*_411.yuv)
|
||||
*_411.yuv
|
||||
tjbenchtest*.log
|
||||
tjexampletest*.log)
|
||||
|
||||
if(NOT FILES STREQUAL "")
|
||||
message(STATUS "Removing test files")
|
||||
|
||||
60
cmyk.h
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* cmyk.h
|
||||
*
|
||||
* Copyright (C) 2017-2018, D. R. Commander.
|
||||
* For conditions of distribution and use, see the accompanying README.ijg
|
||||
* file.
|
||||
*
|
||||
* This file contains convenience functions for performing quick & dirty
|
||||
* CMYK<->RGB conversion. This algorithm is suitable for testing purposes
|
||||
* only. Properly converting between CMYK and RGB requires a color management
|
||||
* system.
|
||||
*/
|
||||
|
||||
#ifndef CMYK_H
|
||||
#define CMYK_H
|
||||
|
||||
#include <jinclude.h>
|
||||
#define JPEG_INTERNALS
|
||||
#include <jpeglib.h>
|
||||
|
||||
|
||||
/* Fully reversible */
|
||||
|
||||
INLINE
|
||||
LOCAL(void)
|
||||
rgb_to_cmyk(JSAMPLE r, JSAMPLE g, JSAMPLE b, JSAMPLE *c, JSAMPLE *m,
|
||||
JSAMPLE *y, JSAMPLE *k)
|
||||
{
|
||||
double ctmp = 1.0 - ((double)r / 255.0);
|
||||
double mtmp = 1.0 - ((double)g / 255.0);
|
||||
double ytmp = 1.0 - ((double)b / 255.0);
|
||||
double ktmp = MIN(MIN(ctmp, mtmp), ytmp);
|
||||
|
||||
if (ktmp == 1.0) ctmp = mtmp = ytmp = 0.0;
|
||||
else {
|
||||
ctmp = (ctmp - ktmp) / (1.0 - ktmp);
|
||||
mtmp = (mtmp - ktmp) / (1.0 - ktmp);
|
||||
ytmp = (ytmp - ktmp) / (1.0 - ktmp);
|
||||
}
|
||||
*c = (JSAMPLE)(255.0 - ctmp * 255.0 + 0.5);
|
||||
*m = (JSAMPLE)(255.0 - mtmp * 255.0 + 0.5);
|
||||
*y = (JSAMPLE)(255.0 - ytmp * 255.0 + 0.5);
|
||||
*k = (JSAMPLE)(255.0 - ktmp * 255.0 + 0.5);
|
||||
}
|
||||
|
||||
|
||||
/* Fully reversible only for C/M/Y/K values generated with rgb_to_cmyk() */
|
||||
|
||||
INLINE
|
||||
LOCAL(void)
|
||||
cmyk_to_rgb(JSAMPLE c, JSAMPLE m, JSAMPLE y, JSAMPLE k, JSAMPLE *r, JSAMPLE *g,
|
||||
JSAMPLE *b)
|
||||
{
|
||||
*r = (JSAMPLE)((double)c * (double)k / 255.0 + 0.5);
|
||||
*g = (JSAMPLE)((double)m * (double)k / 255.0 + 0.5);
|
||||
*b = (JSAMPLE)((double)y * (double)k / 255.0 + 0.5);
|
||||
}
|
||||
|
||||
|
||||
#endif /* CMYK_H */
|
||||
619
configure.ac
@@ -1,619 +0,0 @@
|
||||
# -*- Autoconf -*-
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ([2.56])
|
||||
AC_INIT([mozjpeg], [3.3.1])
|
||||
BUILD=`date +%Y%m%d`
|
||||
|
||||
AM_INIT_AUTOMAKE([-Wall foreign dist-bzip2])
|
||||
AC_PREFIX_DEFAULT(/opt/mozjpeg)
|
||||
|
||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||
|
||||
# Checks for programs.
|
||||
SAVED_CFLAGS=${CFLAGS}
|
||||
SAVED_CPPFLAGS=${CPPFLAGS}
|
||||
AC_PROG_CPP
|
||||
AC_PROG_CC
|
||||
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
||||
AM_PROG_AS
|
||||
AM_PROG_CC_C_O
|
||||
AC_PROG_INSTALL
|
||||
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
||||
AC_PROG_LIBTOOL
|
||||
AC_PROG_LN_S
|
||||
|
||||
AC_ARG_WITH([build-date], [Use custom build string to enable reproducible builds (default: YYMMDD)],
|
||||
[BUILD="$with_build_date"],
|
||||
[BUILD=`date +%Y%m%d`])
|
||||
|
||||
PKG_PROG_PKG_CONFIG
|
||||
|
||||
# When the prefix is /opt/libjpeg-turbo, we assume that an "official" binary is
|
||||
# being created, and thus we install things into specific locations.
|
||||
|
||||
old_prefix=${prefix}
|
||||
if test "x$prefix" = "xNONE" -a "x$ac_default_prefix" != "x"; then
|
||||
prefix=$ac_default_prefix
|
||||
fi
|
||||
DATADIR=`eval echo ${datadir}`
|
||||
DATADIR=`eval echo $DATADIR`
|
||||
if test "$DATADIR" = "/opt/libjpeg-turbo/share"; then
|
||||
datadir='${prefix}'
|
||||
fi
|
||||
DATADIR=`eval echo ${datarootdir}`
|
||||
DATADIR=`eval echo $DATADIR`
|
||||
if test "$DATADIR" = "/opt/libjpeg-turbo/share"; then
|
||||
datarootdir='${prefix}'
|
||||
fi
|
||||
DOCDIR=`eval echo ${docdir}`
|
||||
DOCDIR=`eval echo $DOCDIR`
|
||||
if test "$DOCDIR" = "/opt/libjpeg-turbo/doc/libjpeg-turbo"; then
|
||||
docdir='${datadir}/doc'
|
||||
fi
|
||||
|
||||
old_exec_prefix=${exec_prefix}
|
||||
if test "x$exec_prefix" = "xNONE"; then
|
||||
exec_prefix=${prefix}
|
||||
fi
|
||||
|
||||
AC_CHECK_SIZEOF(size_t)
|
||||
|
||||
if test "x${libdir}" = 'x${exec_prefix}/lib' -o "x${libdir}" = 'x${prefix}/lib'; then
|
||||
LIBDIR=`eval echo ${libdir}`
|
||||
LIBDIR=`eval echo $LIBDIR`
|
||||
if test "$LIBDIR" = "/opt/mozjpeg/lib"; then
|
||||
case $host_os in
|
||||
darwin*)
|
||||
;;
|
||||
*)
|
||||
if test "${ac_cv_sizeof_size_t}" = "8"; then
|
||||
libdir='${exec_prefix}/lib64'
|
||||
elif test "${ac_cv_sizeof_size_t}" = "4"; then
|
||||
libdir='${exec_prefix}/lib32'
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
exec_prefix=${old_exec_prefix}
|
||||
prefix=${old_prefix}
|
||||
|
||||
# Check whether compiler supports pointers to undefined structures
|
||||
AC_MSG_CHECKING(whether compiler supports pointers to undefined structures)
|
||||
AC_TRY_COMPILE([ typedef struct undefined_structure *undef_struct_ptr; ], ,
|
||||
AC_MSG_RESULT(yes),
|
||||
[AC_MSG_RESULT(no)
|
||||
AC_DEFINE([INCOMPLETE_TYPES_BROKEN], [1],
|
||||
[Compiler does not support pointers to undefined structures.])])
|
||||
|
||||
if test "x${GCC}" = "xyes"; then
|
||||
if test "x${SAVED_CFLAGS}" = "x"; then
|
||||
CFLAGS=-O3
|
||||
fi
|
||||
if test "x${SAVED_CPPFLAGS}" = "x"; then
|
||||
CPPFLAGS=-Wall
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
|
||||
if test "x${SUNCC}" = "xyes"; then
|
||||
if test "x${SAVED_CFLAGS}" = "x"; then
|
||||
CFLAGS=-xO5
|
||||
fi
|
||||
fi
|
||||
|
||||
# Checks for libraries.
|
||||
AC_CHECK_LIB([m],[pow])
|
||||
|
||||
PKG_CHECK_MODULES([libpng], [libpng], [HAVE_LIBPNG=1], [
|
||||
PKG_CHECK_MODULES([libpng], [libpng12], [HAVE_LIBPNG=1], [HAVE_LIBPNG=0])
|
||||
])
|
||||
AM_CONDITIONAL([HAVE_LIBPNG], [test "$HAVE_LIBPNG" -eq 1])
|
||||
|
||||
# Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS([stddef.h stdlib.h locale.h string.h])
|
||||
AC_CHECK_HEADER([sys/types.h],
|
||||
AC_DEFINE([NEED_SYS_TYPES_H], 1, [Define if you need to include <sys/types.h> to get size_t.]))
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
AC_C_CHAR_UNSIGNED
|
||||
AC_C_INLINE
|
||||
AC_TYPE_SIZE_T
|
||||
AC_CHECK_TYPES([unsigned char, unsigned short])
|
||||
|
||||
AC_MSG_CHECKING([if right shift is signed])
|
||||
AC_TRY_RUN(
|
||||
[#include <stdio.h>
|
||||
int is_shifting_signed (long arg) {
|
||||
long res = arg >> 4;
|
||||
|
||||
if (res == -0x7F7E80CL)
|
||||
return 1; /* right shift is signed */
|
||||
|
||||
/* see if unsigned-shift hack will fix it. */
|
||||
/* we can't just test exact value since it depends on width of long... */
|
||||
res |= (~0L) << (32-4);
|
||||
if (res == -0x7F7E80CL)
|
||||
return 0; /* right shift is unsigned */
|
||||
|
||||
printf("Right shift isn't acting as I expect it to.\n");
|
||||
printf("I fear the JPEG software will not work at all.\n\n");
|
||||
return 0; /* try it with unsigned anyway */
|
||||
}
|
||||
int main (void) {
|
||||
exit(is_shifting_signed(-0x7F7E80B1L));
|
||||
}],
|
||||
[AC_MSG_RESULT(no)
|
||||
AC_DEFINE([RIGHT_SHIFT_IS_UNSIGNED], 1,
|
||||
[Define if your (broken) compiler shifts signed values as if they were unsigned.])],
|
||||
[AC_MSG_RESULT(yes)],
|
||||
[AC_MSG_RESULT(Assuming that right shift is signed on target machine.)])
|
||||
|
||||
# Checks for library functions.
|
||||
AC_CHECK_FUNCS([memset memcpy], [],
|
||||
[AC_DEFINE([NEED_BSD_STRINGS], 1,
|
||||
[Define if you have BSD-like bzero and bcopy in <strings.h> rather than memset/memcpy in <string.h>.])])
|
||||
|
||||
AC_MSG_CHECKING([libjpeg API version])
|
||||
AC_ARG_VAR(JPEG_LIB_VERSION, [libjpeg API version (62, 70, or 80)])
|
||||
if test "x$JPEG_LIB_VERSION" = "x"; then
|
||||
AC_ARG_WITH([jpeg7],
|
||||
AC_HELP_STRING([--with-jpeg7],
|
||||
[Emulate libjpeg v7 API/ABI (this makes mozjpeg backward incompatible with libjpeg v6b.)]))
|
||||
AC_ARG_WITH([jpeg8],
|
||||
AC_HELP_STRING([--with-jpeg8],
|
||||
[Emulate libjpeg v8 API/ABI (this makes mozjpeg backward incompatible with libjpeg v6b.)]))
|
||||
if test "x${with_jpeg8}" = "xyes"; then
|
||||
JPEG_LIB_VERSION=80
|
||||
else
|
||||
if test "x${with_jpeg7}" = "xyes"; then
|
||||
JPEG_LIB_VERSION=70
|
||||
else
|
||||
JPEG_LIB_VERSION=62
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
JPEG_LIB_VERSION_DECIMAL=`expr $JPEG_LIB_VERSION / 10`.`expr $JPEG_LIB_VERSION % 10`
|
||||
AC_SUBST(JPEG_LIB_VERSION_DECIMAL)
|
||||
AC_MSG_RESULT([$JPEG_LIB_VERSION_DECIMAL])
|
||||
AC_DEFINE_UNQUOTED(JPEG_LIB_VERSION, [$JPEG_LIB_VERSION],
|
||||
[libjpeg API version])
|
||||
|
||||
AC_ARG_VAR(SO_MAJOR_VERSION,
|
||||
[Major version of the mozjpeg shared library (default is determined by the API version)])
|
||||
AC_ARG_VAR(SO_MINOR_VERSION,
|
||||
[Minor version of the mozjpeg shared library (default is determined by the API version)])
|
||||
if test "x$SO_MAJOR_VERSION" = "x"; then
|
||||
case "$JPEG_LIB_VERSION" in
|
||||
62) SO_MAJOR_VERSION=$JPEG_LIB_VERSION ;;
|
||||
*) SO_MAJOR_VERSION=`expr $JPEG_LIB_VERSION / 10` ;;
|
||||
esac
|
||||
fi
|
||||
if test "x$SO_MINOR_VERSION" = "x"; then
|
||||
case "$JPEG_LIB_VERSION" in
|
||||
80) SO_MINOR_VERSION=2 ;;
|
||||
*) SO_MINOR_VERSION=0 ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
RPM_CONFIG_ARGS=
|
||||
|
||||
# Memory source/destination managers
|
||||
SO_AGE=1
|
||||
MEM_SRCDST_FUNCTIONS=
|
||||
if test "x${with_jpeg8}" != "xyes"; then
|
||||
AC_MSG_CHECKING([whether to include in-memory source/destination managers])
|
||||
AC_ARG_WITH([mem-srcdst],
|
||||
AC_HELP_STRING([--without-mem-srcdst],
|
||||
[Do not include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI]))
|
||||
if test "x$with_mem_srcdst" != "xno"; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([MEM_SRCDST_SUPPORTED], [1],
|
||||
[Support in-memory source/destination managers])
|
||||
SO_AGE=2
|
||||
MEM_SRCDST_FUNCTIONS="global: jpeg_mem_dest; jpeg_mem_src;";
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-mem-srcdst"
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([libjpeg shared library version])
|
||||
AC_MSG_RESULT([$SO_MAJOR_VERSION.$SO_AGE.$SO_MINOR_VERSION])
|
||||
LIBTOOL_CURRENT=`expr $SO_MAJOR_VERSION + $SO_AGE`
|
||||
AC_SUBST(LIBTOOL_CURRENT)
|
||||
AC_SUBST(SO_MAJOR_VERSION)
|
||||
AC_SUBST(SO_MINOR_VERSION)
|
||||
AC_SUBST(SO_AGE)
|
||||
AC_SUBST(MEM_SRCDST_FUNCTIONS)
|
||||
|
||||
AC_DEFINE_UNQUOTED(MOZJPEG_VERSION, [$VERSION], [mozjpeg version])
|
||||
|
||||
m4_define(version_triplet,m4_split(AC_PACKAGE_VERSION,[[.]]))
|
||||
m4_define(version_major,m4_car(m4_shiftn(1,[],version_triplet)))
|
||||
m4_define(version_minor,m4_car(m4_shiftn(2,[],version_triplet)))
|
||||
m4_define(version_revision,m4_car(m4_shiftn(3,[],version_triplet)))
|
||||
VERSION_MAJOR=version_major
|
||||
VERSION_MINOR=version_minor
|
||||
VERSION_REVISION=version_revision
|
||||
LIBJPEG_TURBO_VERSION_NUMBER=`printf "%d%03d%03d" $VERSION_MAJOR $VERSION_MINOR $VERSION_REVISION`
|
||||
AC_DEFINE_UNQUOTED(LIBJPEG_TURBO_VERSION_NUMBER, [$LIBJPEG_TURBO_VERSION_NUMBER], [libjpeg-turbo version in integer form])
|
||||
|
||||
VERSION_SCRIPT=yes
|
||||
AC_ARG_ENABLE([ld-version-script],
|
||||
AS_HELP_STRING([--disable-ld-version-script],
|
||||
[Disable linker version script for mozjpeg (default is to use linker version script if the linker supports it)]),
|
||||
[VERSION_SCRIPT=$enableval], [])
|
||||
|
||||
AC_MSG_CHECKING([whether the linker supports version scripts])
|
||||
SAVED_LDFLAGS="$LDFLAGS"
|
||||
LDFLAGS="$LDFLAGS -Wl,--version-script,conftest.map"
|
||||
cat > conftest.map <<EOF
|
||||
VERS_1 {
|
||||
global: *;
|
||||
};
|
||||
EOF
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([AC_LANG_PROGRAM([], [])])],
|
||||
[VERSION_SCRIPT_FLAG=-Wl,--version-script,;
|
||||
AC_MSG_RESULT([yes (GNU style)])],
|
||||
[])
|
||||
if test "x$VERSION_SCRIPT_FLAG" = "x"; then
|
||||
LDFLAGS="$SAVED_LDFLAGS -Wl,-M,conftest.map"
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([AC_LANG_PROGRAM([], [])])],
|
||||
[VERSION_SCRIPT_FLAG=-Wl,-M,;
|
||||
AC_MSG_RESULT([yes (Sun style)])],
|
||||
[])
|
||||
fi
|
||||
if test "x$VERSION_SCRIPT_FLAG" = "x"; then
|
||||
VERSION_SCRIPT=no
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
LDFLAGS="$SAVED_LDFLAGS"
|
||||
|
||||
AC_MSG_CHECKING([whether to use version script when building mozjpeg])
|
||||
AC_MSG_RESULT($VERSION_SCRIPT)
|
||||
|
||||
AM_CONDITIONAL(VERSION_SCRIPT, test "x$VERSION_SCRIPT" = "xyes")
|
||||
AC_SUBST(VERSION_SCRIPT_FLAG)
|
||||
|
||||
# Check for non-broken inline under various spellings
|
||||
AC_MSG_CHECKING(for inline)
|
||||
ljt_cv_inline=""
|
||||
AC_TRY_COMPILE(, [} inline __attribute__((always_inline)) int foo() { return 0; }
|
||||
int bar() { return foo();], ljt_cv_inline="inline __attribute__((always_inline))",
|
||||
AC_TRY_COMPILE(, [} __inline__ int foo() { return 0; }
|
||||
int bar() { return foo();], ljt_cv_inline="__inline__",
|
||||
AC_TRY_COMPILE(, [} __inline int foo() { return 0; }
|
||||
int bar() { return foo();], ljt_cv_inline="__inline",
|
||||
AC_TRY_COMPILE(, [} inline int foo() { return 0; }
|
||||
int bar() { return foo();], ljt_cv_inline="inline"))))
|
||||
AC_MSG_RESULT($ljt_cv_inline)
|
||||
AC_DEFINE_UNQUOTED([INLINE],[$ljt_cv_inline],[How to obtain function inlining.])
|
||||
|
||||
# Arithmetic coding support
|
||||
AC_MSG_CHECKING([whether to include arithmetic encoding support])
|
||||
AC_ARG_WITH([arith-enc],
|
||||
AC_HELP_STRING([--without-arith-enc],
|
||||
[Do not include arithmetic encoding support when emulating the libjpeg v6b API/ABI]))
|
||||
if test "x$with_12bit" = "xyes"; then
|
||||
with_arith_enc=no
|
||||
fi
|
||||
if test "x${with_jpeg8}" = "xyes" -o "x${with_jpeg7}" = "xyes"; then
|
||||
with_arith_enc=yes
|
||||
fi
|
||||
if test "x$with_arith_enc" = "xno"; then
|
||||
AC_MSG_RESULT(no)
|
||||
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-enc"
|
||||
else
|
||||
AC_DEFINE([C_ARITH_CODING_SUPPORTED], [1], [Support arithmetic encoding])
|
||||
AC_MSG_RESULT(yes)
|
||||
fi
|
||||
AM_CONDITIONAL([WITH_ARITH_ENC], [test "x$with_arith_enc" != "xno"])
|
||||
|
||||
AC_MSG_CHECKING([whether to include arithmetic decoding support])
|
||||
AC_ARG_WITH([arith-dec],
|
||||
AC_HELP_STRING([--without-arith-dec],
|
||||
[Do not include arithmetic decoding support when emulating the libjpeg v6b API/ABI]))
|
||||
if test "x$with_12bit" = "xyes"; then
|
||||
with_arith_dec=no
|
||||
fi
|
||||
if test "x${with_jpeg8}" = "xyes" -o "x${with_jpeg7}" = "xyes"; then
|
||||
with_arith_dec=yes
|
||||
fi
|
||||
if test "x$with_arith_dec" = "xno"; then
|
||||
AC_MSG_RESULT(no)
|
||||
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-dec"
|
||||
else
|
||||
AC_DEFINE([D_ARITH_CODING_SUPPORTED], [1], [Support arithmetic decoding])
|
||||
AC_MSG_RESULT(yes)
|
||||
fi
|
||||
AM_CONDITIONAL([WITH_ARITH_DEC], [test "x$with_arith_dec" != "xno"])
|
||||
|
||||
AM_CONDITIONAL([WITH_ARITH],
|
||||
[test "x$with_arith_dec" != "xno" -o "x$with_arith_enc" != "xno"])
|
||||
|
||||
# 12-bit component support
|
||||
AC_MSG_CHECKING([whether to use 12-bit samples])
|
||||
AC_ARG_WITH([12bit],
|
||||
AC_HELP_STRING([--with-12bit], [Encode/decode JPEG images with 12-bit samples (implies --without-simd --without-turbojpeg --without-arith-dec --without-arith-enc)]))
|
||||
if test "x$with_12bit" = "xyes"; then
|
||||
AC_DEFINE([BITS_IN_JSAMPLE], [12], [use 8 or 12])
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
AM_CONDITIONAL([WITH_12BIT], [test "x$with_12bit" = "xyes"])
|
||||
|
||||
# TurboJPEG support
|
||||
AC_MSG_CHECKING([whether to build TurboJPEG C wrapper])
|
||||
AC_ARG_WITH([turbojpeg],
|
||||
AC_HELP_STRING([--without-turbojpeg],
|
||||
[Do not include the TurboJPEG wrapper library and associated test programs]))
|
||||
if test "x$with_12bit" = "xyes"; then
|
||||
with_turbojpeg=no
|
||||
fi
|
||||
if test "x$with_turbojpeg" = "xno"; then
|
||||
AC_MSG_RESULT(no)
|
||||
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-turbojpeg"
|
||||
else
|
||||
AC_MSG_RESULT(yes)
|
||||
fi
|
||||
|
||||
# Java support
|
||||
AC_ARG_VAR(JAVAC, [Java compiler command (default: javac)])
|
||||
if test "x$JAVAC" = "x"; then
|
||||
JAVAC=javac
|
||||
fi
|
||||
AC_SUBST(JAVAC)
|
||||
AC_ARG_VAR(JAVACFLAGS, [Java compiler flags])
|
||||
AC_SUBST(JAVACFLAGS)
|
||||
AC_ARG_VAR(JAR, [Java archive command (default: jar)])
|
||||
if test "x$JAR" = "x"; then
|
||||
JAR=jar
|
||||
fi
|
||||
AC_SUBST(JAR)
|
||||
AC_ARG_VAR(JAVA, [Java runtime command (default: java)])
|
||||
if test "x$JAVA" = "x"; then
|
||||
JAVA=java
|
||||
fi
|
||||
AC_SUBST(JAVA)
|
||||
AC_ARG_VAR(JNI_CFLAGS,
|
||||
[C compiler flags needed to include jni.h (default: -I/System/Library/Frameworks/JavaVM.framework/Headers on OS X, '-I/usr/java/include -I/usr/java/include/solaris' on Solaris, and '-I/usr/java/default/include -I/usr/java/default/include/linux' on Linux)])
|
||||
|
||||
AC_MSG_CHECKING([whether to build TurboJPEG Java wrapper])
|
||||
AC_ARG_WITH([java],
|
||||
AC_HELP_STRING([--with-java], [Build Java wrapper for the TurboJPEG library]))
|
||||
if test "x$with_12bit" = "xyes" -o "x$with_turbojpeg" = "xno"; then
|
||||
with_java=no
|
||||
fi
|
||||
|
||||
WITH_JAVA=0
|
||||
if test "x$with_java" = "xyes"; then
|
||||
AC_MSG_RESULT(yes)
|
||||
|
||||
case $host_os in
|
||||
darwin*)
|
||||
DEFAULT_JNI_CFLAGS=-I/System/Library/Frameworks/JavaVM.framework/Headers
|
||||
;;
|
||||
solaris*)
|
||||
DEFAULT_JNI_CFLAGS='-I/usr/java/include -I/usr/java/include/solaris'
|
||||
;;
|
||||
linux*)
|
||||
DEFAULT_JNI_CFLAGS='-I/usr/java/default/include -I/usr/java/default/include/linux'
|
||||
;;
|
||||
esac
|
||||
if test "x$JNI_CFLAGS" = "x"; then
|
||||
JNI_CFLAGS=$DEFAULT_JNI_CFLAGS
|
||||
fi
|
||||
|
||||
SAVE_CPPFLAGS=${CPPFLAGS}
|
||||
CPPFLAGS="${CPPFLAGS} ${JNI_CFLAGS}"
|
||||
AC_CHECK_HEADERS([jni.h], [DUMMY=1],
|
||||
[AC_MSG_ERROR([Could not find JNI header file])])
|
||||
CPPFLAGS=${SAVE_CPPFLAGS}
|
||||
AC_SUBST(JNI_CFLAGS)
|
||||
|
||||
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --with-java"
|
||||
JAVA_RPM_CONTENTS_1='%dir %{_datadir}/classes'
|
||||
JAVA_RPM_CONTENTS_2=%{_datadir}/classes/turbojpeg.jar
|
||||
WITH_JAVA=1
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
AM_CONDITIONAL([WITH_JAVA], [test "x$with_java" = "xyes"])
|
||||
AC_SUBST(WITH_JAVA)
|
||||
AC_SUBST(JAVA_RPM_CONTENTS_1)
|
||||
AC_SUBST(JAVA_RPM_CONTENTS_2)
|
||||
|
||||
# optionally force using gas-preprocessor.pl for compatibility testing
|
||||
AC_ARG_WITH([gas-preprocessor],
|
||||
AC_HELP_STRING([--with-gas-preprocessor],
|
||||
[Force using gas-preprocessor.pl on ARM.]))
|
||||
if test "x${with_gas_preprocessor}" = "xyes"; then
|
||||
case $host_os in
|
||||
darwin*)
|
||||
CCAS="gas-preprocessor.pl -fix-unreq $CC"
|
||||
;;
|
||||
*)
|
||||
CCAS="gas-preprocessor.pl -no-fix-unreq $CC"
|
||||
;;
|
||||
esac
|
||||
AC_SUBST([CCAS])
|
||||
fi
|
||||
|
||||
# SIMD is optional
|
||||
AC_ARG_WITH([simd],
|
||||
AC_HELP_STRING([--without-simd], [Do not include SIMD extensions]))
|
||||
if test "x$with_12bit" = "xyes"; then
|
||||
with_simd=no
|
||||
fi
|
||||
if test "x${with_simd}" != "xno"; then
|
||||
require_simd=no
|
||||
if test "x${with_simd}" = "xyes"; then
|
||||
require_simd=yes
|
||||
fi
|
||||
# Check if we're on a supported CPU
|
||||
AC_MSG_CHECKING([if we have SIMD optimisations for cpu type])
|
||||
case "$host_cpu" in
|
||||
x86_64 | amd64)
|
||||
AC_MSG_RESULT([yes (x86_64)])
|
||||
AC_PROG_NASM
|
||||
simd_arch=x86_64
|
||||
;;
|
||||
i*86 | x86 | ia32)
|
||||
AC_MSG_RESULT([yes (i386)])
|
||||
AC_PROG_NASM
|
||||
simd_arch=i386
|
||||
;;
|
||||
arm*)
|
||||
AC_MSG_RESULT([yes (arm)])
|
||||
AC_MSG_CHECKING([if the assembler is GNU-compatible and can be used])
|
||||
AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE(
|
||||
[if test "x$ac_use_gas_preprocessor" = "xyes"; then
|
||||
AC_MSG_RESULT([yes (with gas-preprocessor)])
|
||||
else
|
||||
AC_MSG_RESULT([yes])
|
||||
fi
|
||||
simd_arch=arm],
|
||||
[AC_MSG_RESULT([no])
|
||||
with_simd=no])
|
||||
if test "x${with_simd}" = "xno"; then
|
||||
if test "x${require_simd}" = "xyes"; then
|
||||
AC_MSG_ERROR([SIMD support can't be enabled.])
|
||||
else
|
||||
AC_MSG_WARN([SIMD support can't be enabled. Performance will suffer.])
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
aarch64*)
|
||||
AC_MSG_RESULT([yes (arm64)])
|
||||
AC_MSG_CHECKING([if the assembler is GNU-compatible and can be used])
|
||||
AC_CHECK_COMPATIBLE_ARM64_ASSEMBLER_IFELSE(
|
||||
[if test "x$ac_use_gas_preprocessor" = "xyes"; then
|
||||
AC_MSG_RESULT([yes (with gas-preprocessor)])
|
||||
else
|
||||
AC_MSG_RESULT([yes])
|
||||
fi
|
||||
simd_arch=aarch64],
|
||||
[AC_MSG_RESULT([no])
|
||||
with_simd=no])
|
||||
if test "x${with_simd}" = "xno"; then
|
||||
if test "x${require_simd}" = "xyes"; then
|
||||
AC_MSG_ERROR([SIMD support can't be enabled.])
|
||||
else
|
||||
AC_MSG_WARN([SIMD support can't be enabled. Performance will suffer.])
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
mips*)
|
||||
AC_MSG_RESULT([yes (mips)])
|
||||
AC_MSG_CHECKING([if the assembler is GNU-compatible and can be used])
|
||||
AC_CHECK_COMPATIBLE_MIPS_ASSEMBLER_IFELSE(
|
||||
[AC_MSG_RESULT([yes])
|
||||
simd_arch=mips],
|
||||
[AC_MSG_RESULT([no])
|
||||
with_simd=no])
|
||||
if test "x${with_simd}" = "xno"; then
|
||||
if test "x${require_simd}" = "xyes"; then
|
||||
AC_MSG_ERROR([SIMD support can't be enabled.])
|
||||
else
|
||||
AC_MSG_WARN([SIMD support can't be enabled. Performance will suffer.])
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
powerpc*)
|
||||
AC_MSG_RESULT([yes (powerpc)])
|
||||
simd_arch=powerpc
|
||||
;;
|
||||
*)
|
||||
AC_MSG_RESULT([no ("$host_cpu")])
|
||||
with_simd=no;
|
||||
if test "x${require_simd}" = "xyes"; then
|
||||
AC_MSG_ERROR([SIMD support not available for this CPU.])
|
||||
else
|
||||
AC_MSG_WARN([SIMD support not available for this CPU. Performance will suffer.])
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "x${with_simd}" != "xno"; then
|
||||
AC_DEFINE([WITH_SIMD], [1], [Use accelerated SIMD routines.])
|
||||
fi
|
||||
else
|
||||
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-simd"
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL([WITH_SIMD], [test "x$with_simd" != "xno"])
|
||||
AM_CONDITIONAL([WITH_SSE_FLOAT_DCT], [test "x$simd_arch" = "xx86_64" -o "x$simd_arch" = "xi386"])
|
||||
AM_CONDITIONAL([SIMD_I386], [test "x$simd_arch" = "xi386"])
|
||||
AM_CONDITIONAL([SIMD_X86_64], [test "x$simd_arch" = "xx86_64"])
|
||||
AM_CONDITIONAL([SIMD_ARM], [test "x$simd_arch" = "xarm"])
|
||||
AM_CONDITIONAL([SIMD_ARM_64], [test "x$simd_arch" = "xaarch64"])
|
||||
AM_CONDITIONAL([SIMD_MIPS], [test "x$simd_arch" = "xmips"])
|
||||
AM_CONDITIONAL([SIMD_POWERPC], [test "x$simd_arch" = "xpowerpc"])
|
||||
AM_CONDITIONAL([X86_64], [test "x$host_cpu" = "xx86_64" -o "x$host_cpu" = "xamd64"])
|
||||
AM_CONDITIONAL([WITH_TURBOJPEG], [test "x$with_turbojpeg" != "xno"])
|
||||
AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = "xyes"])
|
||||
|
||||
AC_ARG_VAR(PKGNAME, [distribution package name (default: mozjpeg)])
|
||||
if test "x$PKGNAME" = "x"; then
|
||||
PKGNAME=$PACKAGE_NAME
|
||||
fi
|
||||
AC_SUBST(PKGNAME)
|
||||
|
||||
case "$host_cpu" in
|
||||
x86_64)
|
||||
RPMARCH=x86_64
|
||||
DEBARCH=amd64
|
||||
;;
|
||||
i*86 | x86 | ia32)
|
||||
RPMARCH=i386
|
||||
DEBARCH=i386
|
||||
;;
|
||||
*)
|
||||
RPMARCH=`uname -m`
|
||||
DEBARCH=$RPMARCH
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "${docdir}" = ""; then
|
||||
docdir=${datadir}/doc
|
||||
AC_SUBST(docdir)
|
||||
fi
|
||||
|
||||
AC_SUBST(RPMARCH)
|
||||
AC_SUBST(RPM_CONFIG_ARGS)
|
||||
AC_SUBST(DEBARCH)
|
||||
AC_SUBST(BUILD)
|
||||
AC_DEFINE_UNQUOTED([BUILD], "$BUILD", [libjpeg-turbo build number])
|
||||
|
||||
# NOTE: autoheader automatically modifies the input file of the first
|
||||
# invocation of AC_CONFIG_HEADERS, so we put config.h first to prevent
|
||||
# jconfig.h.in from being clobbered. config.h is used only internally, whereas
|
||||
# jconfig.h contains macros that are relevant to external programs (macros that
|
||||
# specify which features were built into the library.)
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_HEADERS([jconfig.h])
|
||||
AC_CONFIG_HEADERS([jconfigint.h])
|
||||
AC_CONFIG_FILES([pkgscripts/mozjpeg.spec.tmpl:release/mozjpeg.spec.in])
|
||||
AC_CONFIG_FILES([pkgscripts/makecygwinpkg.tmpl:release/makecygwinpkg.in])
|
||||
AC_CONFIG_FILES([pkgscripts/makedpkg.tmpl:release/makedpkg.in])
|
||||
AC_CONFIG_FILES([pkgscripts/makemacpkg.tmpl:release/makemacpkg.in])
|
||||
AC_CONFIG_FILES([pkgscripts/uninstall.tmpl:release/uninstall.in])
|
||||
AC_CONFIG_FILES([pkgscripts/libjpeg.pc:release/libjpeg.pc.in])
|
||||
AC_CONFIG_FILES([pkgscripts/libturbojpeg.pc:release/libturbojpeg.pc.in])
|
||||
if test "x$with_turbojpeg" != "xno"; then
|
||||
AC_CONFIG_FILES([tjbenchtest])
|
||||
fi
|
||||
if test "x$with_java" = "xyes"; then
|
||||
AC_CONFIG_FILES([tjbenchtest.java])
|
||||
AC_CONFIG_FILES([tjexampletest])
|
||||
fi
|
||||
AC_CONFIG_FILES([libjpeg.map])
|
||||
AC_CONFIG_FILES([Makefile simd/Makefile])
|
||||
AC_CONFIG_FILES([java/Makefile])
|
||||
AC_CONFIG_FILES([md5/Makefile])
|
||||
AC_OUTPUT
|
||||
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!
|
||||
116
djpeg.1
@@ -1,4 +1,4 @@
|
||||
.TH DJPEG 1 "18 March 2017"
|
||||
.TH DJPEG 1 "4 November 2020"
|
||||
.SH NAME
|
||||
djpeg \- decompress a JPEG file to an image file
|
||||
.SH SYNOPSIS
|
||||
@@ -15,8 +15,7 @@ djpeg \- decompress a JPEG file to an image file
|
||||
.B djpeg
|
||||
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,
|
||||
GIF, Targa, or RLE (Utah Raster Toolkit) output format can be selected.
|
||||
(RLE is supported only if the URT library is available.)
|
||||
GIF, or Targa output format can be selected.
|
||||
.SH OPTIONS
|
||||
All switch names may be abbreviated; for example,
|
||||
.B \-grayscale
|
||||
@@ -81,9 +80,20 @@ is specified, or if the JPEG file is grayscale; otherwise, 24-bit full-color
|
||||
format is emitted.
|
||||
.TP
|
||||
.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
|
||||
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
|
||||
.B \-os2
|
||||
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
|
||||
is specified; otherwise PPM is emitted.
|
||||
.TP
|
||||
.B \-rle
|
||||
Select RLE output format. (Requires URT library.)
|
||||
.TP
|
||||
.B \-targa
|
||||
Select Targa output format. Grayscale format is emitted if the JPEG file is
|
||||
grayscale or if
|
||||
@@ -114,32 +121,40 @@ is specified; otherwise, 24-bit full-color format is emitted.
|
||||
Switches for advanced users:
|
||||
.TP
|
||||
.B \-dct int
|
||||
Use integer DCT method (default).
|
||||
Use accurate integer DCT method (default).
|
||||
.TP
|
||||
.B \-dct fast
|
||||
Use fast integer DCT (less accurate).
|
||||
In libjpeg-turbo, the fast method is generally about 5-15% faster than the int
|
||||
method when using the x86/x86-64 SIMD extensions (results may vary with other
|
||||
SIMD implementations, or when using libjpeg-turbo without SIMD extensions.) If
|
||||
the JPEG image was compressed using a quality level of 85 or below, then there
|
||||
should be little or no perceptible difference between the two algorithms. When
|
||||
decompressing images that were compressed using quality levels above 85,
|
||||
however, the difference between the fast and int methods becomes more
|
||||
pronounced. With images compressed using quality=97, for instance, the fast
|
||||
method incurs generally about a 4-6 dB loss (in PSNR) relative to the int
|
||||
method, but this can be larger for some images. If you can avoid it, do not
|
||||
use the fast 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.
|
||||
Use less accurate integer DCT method [legacy feature].
|
||||
When the Independent JPEG Group's software was first released in 1991, the
|
||||
decompression time for a 1-megapixel JPEG image on a mainstream PC was measured
|
||||
in minutes. Thus, the \fBfast\fR integer DCT algorithm provided noticeable
|
||||
performance benefits. On modern CPUs running libjpeg-turbo, however, the
|
||||
decompression 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.
|
||||
|
||||
If the JPEG image was compressed using a quality level of 85 or below, then
|
||||
there should be little or no perceptible quality difference between the two
|
||||
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
|
||||
.B \-dct float
|
||||
Use floating-point DCT method.
|
||||
The float method is mainly a legacy feature. It does not produce significantly
|
||||
more accurate results than the int method, and it is much slower. The float
|
||||
method may also give different results on different machines due to varying
|
||||
roundoff behavior, whereas the integer methods should give the same results on
|
||||
all machines.
|
||||
Use floating-point DCT method [legacy feature].
|
||||
The \fBfloat\fR method does not produce significantly more accurate results
|
||||
than the \fBint\fR method, and it is much slower. The \fBfloat\fR method may
|
||||
also give different results on different machines due to varying roundoff
|
||||
behavior, whereas the integer methods should give the same results on all
|
||||
machines.
|
||||
.TP
|
||||
.B \-dither fs
|
||||
Use Floyd-Steinberg dithering in color quantization.
|
||||
@@ -157,6 +172,9 @@ Ordered dither is only available in
|
||||
.B \-onepass
|
||||
mode.
|
||||
.TP
|
||||
.BI \-icc " file"
|
||||
Extract ICC color management profile to the specified file.
|
||||
.TP
|
||||
.BI \-map " file"
|
||||
Quantize to the colors used in the specified image file. This is useful for
|
||||
producing multiple files with identical color maps, or for forcing a
|
||||
@@ -187,6 +205,19 @@ number. For example,
|
||||
.B \-max 4m
|
||||
selects 4000000 bytes. If more space is needed, an error will occur.
|
||||
.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"
|
||||
Send output image to the named file, not to standard output.
|
||||
.TP
|
||||
@@ -194,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
|
||||
mainly as a way of testing the in-memory source manager (jpeg_mem_src().)
|
||||
.TP
|
||||
.BI \-report
|
||||
Report decompression progress.
|
||||
.TP
|
||||
.BI \-skip " Y0,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
|
||||
@@ -204,7 +238,14 @@ Decompress only a rectangular subregion of the image, starting at point X,Y
|
||||
with width W and height H. If necessary, X will be shifted left to the nearest
|
||||
iMCU boundary, and the width will be increased accordingly. Note that if
|
||||
decompression scaling is being used, then X, Y, W, and H are relative to the
|
||||
scaled image dimensions.
|
||||
scaled image dimensions. Currently this option only works with the
|
||||
PBMPLUS (PPM/PGM), GIF, and Targa output formats.
|
||||
.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
|
||||
Enable debug printout. More
|
||||
@@ -249,12 +290,6 @@ is fast but much lower quality than the default behavior.
|
||||
.B \-dither none
|
||||
may give acceptable results in two-pass mode, but is seldom tolerable in
|
||||
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
|
||||
.TP
|
||||
.B JPEGMEM
|
||||
@@ -283,10 +318,3 @@ Independent JPEG Group
|
||||
This file was modified by The libjpeg-turbo Project to include only information
|
||||
relevant to libjpeg-turbo, to wordsmith certain sections, and to describe
|
||||
features not present in libjpeg.
|
||||
.SH 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.
|
||||
|
||||
254
djpeg.c
@@ -3,9 +3,9 @@
|
||||
*
|
||||
* This file was part of the Independent JPEG Group's software:
|
||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||
* Modified 2013 by Guido Vollbeding.
|
||||
* Modified 2013-2019 by Guido Vollbeding.
|
||||
* libjpeg-turbo Modifications:
|
||||
* Copyright (C) 2010-2011, 2013-2016, D. R. Commander.
|
||||
* Copyright (C) 2010-2011, 2013-2017, 2019-2020, 2022, D. R. Commander.
|
||||
* Copyright (C) 2015, Google, Inc.
|
||||
* For conditions of distribution and use, see the accompanying README.ijg
|
||||
* file.
|
||||
@@ -28,27 +28,20 @@
|
||||
* 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 "jversion.h" /* for version message */
|
||||
#include "jconfigint.h"
|
||||
#include "wrppm.h"
|
||||
|
||||
#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. */
|
||||
|
||||
#define JMESSAGE(code,string) string ,
|
||||
#define JMESSAGE(code, string) string,
|
||||
|
||||
static const char * const cdjpeg_message_table[] = {
|
||||
#include "cderror.h"
|
||||
@@ -64,13 +57,13 @@ static const char * const cdjpeg_message_table[] = {
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
FMT_BMP, /* BMP format (Windows flavor) */
|
||||
FMT_GIF, /* GIF format */
|
||||
FMT_OS2, /* BMP format (OS/2 flavor) */
|
||||
FMT_PPM, /* PPM/PGM (PBMPLUS formats) */
|
||||
FMT_RLE, /* RLE format */
|
||||
FMT_TARGA, /* Targa format */
|
||||
FMT_TIFF /* TIFF format */
|
||||
FMT_BMP, /* BMP format (Windows flavor) */
|
||||
FMT_GIF, /* GIF format (LZW-compressed) */
|
||||
FMT_GIF0, /* GIF format (uncompressed) */
|
||||
FMT_OS2, /* BMP format (OS/2 flavor) */
|
||||
FMT_PPM, /* PPM/PGM (PBMPLUS formats) */
|
||||
FMT_TARGA, /* Targa format */
|
||||
FMT_TIFF /* TIFF format */
|
||||
} IMAGE_FORMATS;
|
||||
|
||||
#ifndef DEFAULT_FMT /* so can override from CFLAGS in Makefile */
|
||||
@@ -90,16 +83,20 @@ static IMAGE_FORMATS requested_fmt;
|
||||
|
||||
|
||||
static const char *progname; /* program name for error messages */
|
||||
static char *icc_filename; /* for -icc switch */
|
||||
JDIMENSION max_scans; /* for -maxscans switch */
|
||||
static char *outfilename; /* for -outfile switch */
|
||||
boolean memsrc; /* for -memsrc switch */
|
||||
boolean report; /* for -report switch */
|
||||
boolean skip, crop;
|
||||
JDIMENSION skip_start, skip_end;
|
||||
JDIMENSION crop_x, crop_y, crop_width, crop_height;
|
||||
boolean strict; /* for -strict switch */
|
||||
#define INPUT_BUF_SIZE 4096
|
||||
|
||||
|
||||
LOCAL(void)
|
||||
usage (void)
|
||||
usage(void)
|
||||
/* complain about bad command line */
|
||||
{
|
||||
fprintf(stderr, "usage: %s [switches] ", progname);
|
||||
@@ -123,8 +120,10 @@ usage (void)
|
||||
(DEFAULT_FMT == FMT_BMP ? " (default)" : ""));
|
||||
#endif
|
||||
#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)" : ""));
|
||||
fprintf(stderr, " -gif0 Select GIF output format (uncompressed)%s\n",
|
||||
(DEFAULT_FMT == FMT_GIF0 ? " (default)" : ""));
|
||||
#endif
|
||||
#ifdef BMP_SUPPORTED
|
||||
fprintf(stderr, " -os2 Select BMP output format (OS/2 style)%s\n",
|
||||
@@ -134,30 +133,27 @@ usage (void)
|
||||
fprintf(stderr, " -pnm Select PBMPLUS (PPM/PGM) output format%s\n",
|
||||
(DEFAULT_FMT == FMT_PPM ? " (default)" : ""));
|
||||
#endif
|
||||
#ifdef RLE_SUPPORTED
|
||||
fprintf(stderr, " -rle Select Utah RLE output format%s\n",
|
||||
(DEFAULT_FMT == FMT_RLE ? " (default)" : ""));
|
||||
#endif
|
||||
#ifdef TARGA_SUPPORTED
|
||||
fprintf(stderr, " -targa Select Targa output format%s\n",
|
||||
(DEFAULT_FMT == FMT_TARGA ? " (default)" : ""));
|
||||
#endif
|
||||
fprintf(stderr, "Switches for advanced users:\n");
|
||||
#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)" : ""));
|
||||
#endif
|
||||
#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)" : ""));
|
||||
#endif
|
||||
#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)" : ""));
|
||||
#endif
|
||||
fprintf(stderr, " -dither fs Use F-S dithering (default)\n");
|
||||
fprintf(stderr, " -dither none Don't use dithering in quantization\n");
|
||||
fprintf(stderr, " -dither ordered Use ordered dither (medium speed, quality)\n");
|
||||
fprintf(stderr, " -icc FILE Extract ICC profile to FILE\n");
|
||||
#ifdef QUANT_2PASS_SUPPORTED
|
||||
fprintf(stderr, " -map FILE Map to colors used in named image file\n");
|
||||
#endif
|
||||
@@ -166,13 +162,16 @@ usage (void)
|
||||
fprintf(stderr, " -onepass Use 1-pass quantization (fast, low quality)\n");
|
||||
#endif
|
||||
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");
|
||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||
fprintf(stderr, " -memsrc Load input file into memory before decompressing\n");
|
||||
#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, " -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, " -strict Treat all warnings as fatal\n");
|
||||
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
||||
fprintf(stderr, " -version Print version information and exit\n");
|
||||
exit(EXIT_FAILURE);
|
||||
@@ -180,8 +179,8 @@ usage (void)
|
||||
|
||||
|
||||
LOCAL(int)
|
||||
parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
||||
int last_file_arg_seen, boolean for_real)
|
||||
parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
||||
int last_file_arg_seen, boolean for_real)
|
||||
/* Parse optional switches.
|
||||
* Returns argv[] index of first file-name argument (== argc if none).
|
||||
* Any file names with indexes <= last_file_arg_seen are ignored;
|
||||
@@ -196,10 +195,14 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
||||
|
||||
/* Set up default JPEG parameters. */
|
||||
requested_fmt = DEFAULT_FMT; /* set default output file format */
|
||||
icc_filename = NULL;
|
||||
max_scans = 0;
|
||||
outfilename = NULL;
|
||||
memsrc = FALSE;
|
||||
report = FALSE;
|
||||
skip = FALSE;
|
||||
crop = FALSE;
|
||||
strict = FALSE;
|
||||
cinfo->err->trace_level = 0;
|
||||
|
||||
/* Scan command line options, adjust parameters */
|
||||
@@ -217,7 +220,7 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
||||
arg++; /* advance past switch marker character */
|
||||
|
||||
if (keymatch(arg, "bmp", 1)) {
|
||||
/* BMP output format. */
|
||||
/* BMP output format (Windows flavor). */
|
||||
requested_fmt = FMT_BMP;
|
||||
|
||||
} else if (keymatch(arg, "colors", 1) || keymatch(arg, "colours", 1) ||
|
||||
@@ -263,7 +266,7 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
||||
/* On first -d, print version identification */
|
||||
static boolean printed_version = FALSE;
|
||||
|
||||
if (! printed_version) {
|
||||
if (!printed_version) {
|
||||
fprintf(stderr, "%s version %s (build %s)\n",
|
||||
PACKAGE_NAME, VERSION, BUILD);
|
||||
fprintf(stderr, "%s\n\n", JCOPYRIGHT);
|
||||
@@ -282,16 +285,21 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
||||
/* Select recommended processing options for quick-and-dirty output. */
|
||||
cinfo->two_pass_quantize = FALSE;
|
||||
cinfo->dither_mode = JDITHER_ORDERED;
|
||||
if (! cinfo->quantize_colors) /* don't override an earlier -colors */
|
||||
if (!cinfo->quantize_colors) /* don't override an earlier -colors */
|
||||
cinfo->desired_number_of_colors = 216;
|
||||
cinfo->dct_method = JDCT_FASTEST;
|
||||
cinfo->do_fancy_upsampling = FALSE;
|
||||
|
||||
} else if (keymatch(arg, "gif", 1)) {
|
||||
/* GIF output format. */
|
||||
/* GIF output format (LZW-compressed). */
|
||||
requested_fmt = FMT_GIF;
|
||||
|
||||
} else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) {
|
||||
} else if (keymatch(arg, "gif0", 4)) {
|
||||
/* GIF output format (uncompressed). */
|
||||
requested_fmt = FMT_GIF0;
|
||||
|
||||
} else if (keymatch(arg, "grayscale", 2) ||
|
||||
keymatch(arg, "greyscale", 2)) {
|
||||
/* Force monochrome output. */
|
||||
cinfo->out_color_space = JCS_GRAYSCALE;
|
||||
|
||||
@@ -303,6 +311,15 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
||||
/* Force RGB565 output. */
|
||||
cinfo->out_color_space = JCS_RGB565;
|
||||
|
||||
} else if (keymatch(arg, "icc", 1)) {
|
||||
/* Set ICC filename. */
|
||||
if (++argn >= argc) /* advance to next argument */
|
||||
usage();
|
||||
icc_filename = argv[argn];
|
||||
#ifdef SAVE_MARKERS_SUPPORTED
|
||||
jpeg_save_markers(cinfo, JPEG_APP0 + 2, 0xFFFF);
|
||||
#endif
|
||||
|
||||
} else if (keymatch(arg, "map", 3)) {
|
||||
/* Quantize to a color map taken from an input file. */
|
||||
if (++argn >= argc) /* advance to next argument */
|
||||
@@ -336,6 +353,12 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
||||
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)) {
|
||||
/* Suppress fancy upsampling */
|
||||
cinfo->do_fancy_upsampling = FALSE;
|
||||
@@ -368,9 +391,8 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
||||
/* PPM/PGM output format. */
|
||||
requested_fmt = FMT_PPM;
|
||||
|
||||
} else if (keymatch(arg, "rle", 1)) {
|
||||
/* RLE output format. */
|
||||
requested_fmt = FMT_RLE;
|
||||
} else if (keymatch(arg, "report", 2)) {
|
||||
report = TRUE;
|
||||
|
||||
} else if (keymatch(arg, "scale", 2)) {
|
||||
/* Scale the output image by a fraction M/N. */
|
||||
@@ -398,6 +420,9 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
||||
usage();
|
||||
crop = TRUE;
|
||||
|
||||
} else if (keymatch(arg, "strict", 2)) {
|
||||
strict = TRUE;
|
||||
|
||||
} else if (keymatch(arg, "targa", 1)) {
|
||||
/* Targa output format. */
|
||||
requested_fmt = FMT_TARGA;
|
||||
@@ -419,22 +444,22 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
||||
*/
|
||||
|
||||
LOCAL(unsigned int)
|
||||
jpeg_getc (j_decompress_ptr cinfo)
|
||||
jpeg_getc(j_decompress_ptr cinfo)
|
||||
/* Read next byte */
|
||||
{
|
||||
struct jpeg_source_mgr *datasrc = cinfo->src;
|
||||
|
||||
if (datasrc->bytes_in_buffer == 0) {
|
||||
if (! (*datasrc->fill_input_buffer) (cinfo))
|
||||
if (!(*datasrc->fill_input_buffer) (cinfo))
|
||||
ERREXIT(cinfo, JERR_CANT_SUSPEND);
|
||||
}
|
||||
datasrc->bytes_in_buffer--;
|
||||
return GETJOCTET(*datasrc->next_input_byte++);
|
||||
return *datasrc->next_input_byte++;
|
||||
}
|
||||
|
||||
|
||||
METHODDEF(boolean)
|
||||
print_text_marker (j_decompress_ptr cinfo)
|
||||
print_text_marker(j_decompress_ptr cinfo)
|
||||
{
|
||||
boolean traceit = (cinfo->err->trace_level >= 1);
|
||||
long length;
|
||||
@@ -447,10 +472,10 @@ print_text_marker (j_decompress_ptr cinfo)
|
||||
|
||||
if (traceit) {
|
||||
if (cinfo->unread_marker == JPEG_COM)
|
||||
fprintf(stderr, "Comment, length %ld:\n", (long) length);
|
||||
fprintf(stderr, "Comment, length %ld:\n", (long)length);
|
||||
else /* assume it is an APPn otherwise */
|
||||
fprintf(stderr, "APP%d, length %ld:\n",
|
||||
cinfo->unread_marker - JPEG_APP0, (long) length);
|
||||
cinfo->unread_marker - JPEG_APP0, (long)length);
|
||||
}
|
||||
|
||||
while (--length >= 0) {
|
||||
@@ -484,30 +509,38 @@ 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.
|
||||
*/
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
struct jpeg_decompress_struct cinfo;
|
||||
struct jpeg_error_mgr jerr;
|
||||
#ifdef PROGRESS_REPORT
|
||||
struct cdjpeg_progress_mgr progress;
|
||||
#endif
|
||||
int file_index;
|
||||
djpeg_dest_ptr dest_mgr = NULL;
|
||||
FILE *input_file;
|
||||
FILE *output_file;
|
||||
unsigned char *inbuffer = NULL;
|
||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||
unsigned long insize = 0;
|
||||
JDIMENSION num_scanlines;
|
||||
|
||||
/* On Mac, fetch a command line. */
|
||||
#ifdef USE_CCOMMAND
|
||||
argc = ccommand(&argv);
|
||||
#endif
|
||||
JDIMENSION num_scanlines;
|
||||
|
||||
progname = argv[0];
|
||||
if (progname == NULL || progname[0] == 0)
|
||||
@@ -528,7 +561,7 @@ main (int argc, char **argv)
|
||||
* but don't try to override APP0 or APP14 this way (see libjpeg.txt).
|
||||
*/
|
||||
jpeg_set_marker_processor(&cinfo, JPEG_COM, print_text_marker);
|
||||
jpeg_set_marker_processor(&cinfo, JPEG_APP0+12, print_text_marker);
|
||||
jpeg_set_marker_processor(&cinfo, JPEG_APP0 + 12, print_text_marker);
|
||||
|
||||
/* Scan command line to find file names. */
|
||||
/* It is convenient to use just one switch-parsing routine, but the switch
|
||||
@@ -540,17 +573,20 @@ main (int argc, char **argv)
|
||||
|
||||
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
||||
|
||||
if (strict)
|
||||
jerr.emit_message = my_emit_message;
|
||||
|
||||
#ifdef TWO_FILE_COMMANDLINE
|
||||
/* Must have either -outfile switch or explicit output file name */
|
||||
if (outfilename == NULL) {
|
||||
if (file_index != argc-2) {
|
||||
if (file_index != argc - 2) {
|
||||
fprintf(stderr, "%s: must name one input and one output file\n",
|
||||
progname);
|
||||
usage();
|
||||
}
|
||||
outfilename = argv[file_index+1];
|
||||
outfilename = argv[file_index + 1];
|
||||
} else {
|
||||
if (file_index != argc-1) {
|
||||
if (file_index != argc - 1) {
|
||||
fprintf(stderr, "%s: must name one input and one output file\n",
|
||||
progname);
|
||||
usage();
|
||||
@@ -558,7 +594,7 @@ main (int argc, char **argv)
|
||||
}
|
||||
#else
|
||||
/* Unix style: expect zero or one file name */
|
||||
if (file_index < argc-1) {
|
||||
if (file_index < argc - 1) {
|
||||
fprintf(stderr, "%s: only one input file\n", progname);
|
||||
usage();
|
||||
}
|
||||
@@ -586,9 +622,11 @@ main (int argc, char **argv)
|
||||
output_file = write_stdout();
|
||||
}
|
||||
|
||||
#ifdef PROGRESS_REPORT
|
||||
start_progress_monitor((j_common_ptr) &cinfo, &progress);
|
||||
#endif
|
||||
if (report || max_scans != 0) {
|
||||
start_progress_monitor((j_common_ptr)&cinfo, &progress);
|
||||
progress.report = report;
|
||||
progress.max_scans = max_scans;
|
||||
}
|
||||
|
||||
/* Specify data source for decompression */
|
||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||
@@ -600,7 +638,7 @@ main (int argc, char **argv)
|
||||
fprintf(stderr, "%s: memory allocation failure\n", progname);
|
||||
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 (file_index < argc)
|
||||
fprintf(stderr, "%s: can't read from %s\n", progname,
|
||||
@@ -617,7 +655,7 @@ main (int argc, char **argv)
|
||||
jpeg_stdio_src(&cinfo, input_file);
|
||||
|
||||
/* Read file header, set default decompression parameters */
|
||||
(void) jpeg_read_header(&cinfo, TRUE);
|
||||
(void)jpeg_read_header(&cinfo, TRUE);
|
||||
|
||||
/* Adjust default decompression parameters by re-parsing the options */
|
||||
file_index = parse_switches(&cinfo, argc, argv, 0, TRUE);
|
||||
@@ -628,15 +666,18 @@ main (int argc, char **argv)
|
||||
switch (requested_fmt) {
|
||||
#ifdef BMP_SUPPORTED
|
||||
case FMT_BMP:
|
||||
dest_mgr = jinit_write_bmp(&cinfo, FALSE);
|
||||
dest_mgr = jinit_write_bmp(&cinfo, FALSE, TRUE);
|
||||
break;
|
||||
case FMT_OS2:
|
||||
dest_mgr = jinit_write_bmp(&cinfo, TRUE);
|
||||
dest_mgr = jinit_write_bmp(&cinfo, TRUE, TRUE);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GIF_SUPPORTED
|
||||
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;
|
||||
#endif
|
||||
#ifdef PPM_SUPPORTED
|
||||
@@ -644,11 +685,6 @@ main (int argc, char **argv)
|
||||
dest_mgr = jinit_write_ppm(&cinfo);
|
||||
break;
|
||||
#endif
|
||||
#ifdef RLE_SUPPORTED
|
||||
case FMT_RLE:
|
||||
dest_mgr = jinit_write_rle(&cinfo);
|
||||
break;
|
||||
#endif
|
||||
#ifdef TARGA_SUPPORTED
|
||||
case FMT_TARGA:
|
||||
dest_mgr = jinit_write_targa(&cinfo);
|
||||
@@ -661,7 +697,7 @@ main (int argc, char **argv)
|
||||
dest_mgr->output_file = output_file;
|
||||
|
||||
/* Start decompressor */
|
||||
(void) jpeg_start_decompress(&cinfo);
|
||||
(void)jpeg_start_decompress(&cinfo);
|
||||
|
||||
/* Skip rows */
|
||||
if (skip) {
|
||||
@@ -672,7 +708,7 @@ main (int argc, char **argv)
|
||||
* that skip_start <= skip_end.
|
||||
*/
|
||||
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);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
@@ -691,7 +727,12 @@ main (int argc, char **argv)
|
||||
dest_mgr->buffer_height);
|
||||
(*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) {
|
||||
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
||||
dest_mgr->buffer_height);
|
||||
@@ -707,15 +748,16 @@ main (int argc, char **argv)
|
||||
*/
|
||||
if (crop_x + crop_width > cinfo.output_width ||
|
||||
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);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
jpeg_crop_scanline(&cinfo, &crop_x, &crop_width);
|
||||
((ppm_dest_ptr) dest_mgr)->buffer_width = cinfo.output_width *
|
||||
cinfo.out_color_components *
|
||||
sizeof(JSAMPLE);
|
||||
if (dest_mgr->calc_buffer_dimensions)
|
||||
(*dest_mgr->calc_buffer_dimensions) (&cinfo, dest_mgr);
|
||||
else
|
||||
ERREXIT(&cinfo, JERR_UNSUPPORTED_FORMAT);
|
||||
|
||||
/* Write output file header. This is a hack to ensure that the destination
|
||||
* manager creates an output image of the proper size.
|
||||
@@ -726,13 +768,24 @@ main (int argc, char **argv)
|
||||
cinfo.output_height = tmp;
|
||||
|
||||
/* 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) {
|
||||
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
||||
dest_mgr->buffer_height);
|
||||
(*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 */
|
||||
} else {
|
||||
@@ -747,19 +800,41 @@ main (int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef PROGRESS_REPORT
|
||||
/* Hack: count final pass as done in case finish_output does an extra pass.
|
||||
* The library won't have updated completed_passes.
|
||||
*/
|
||||
progress.pub.completed_passes = progress.pub.total_passes;
|
||||
#endif
|
||||
if (report || max_scans != 0)
|
||||
progress.pub.completed_passes = progress.pub.total_passes;
|
||||
|
||||
if (icc_filename != NULL) {
|
||||
FILE *icc_file;
|
||||
JOCTET *icc_profile;
|
||||
unsigned int icc_len;
|
||||
|
||||
if ((icc_file = fopen(icc_filename, WRITE_BINARY)) == NULL) {
|
||||
fprintf(stderr, "%s: can't open %s\n", progname, icc_filename);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if (jpeg_read_icc_profile(&cinfo, &icc_profile, &icc_len)) {
|
||||
if (fwrite(icc_profile, icc_len, 1, icc_file) < 1) {
|
||||
fprintf(stderr, "%s: can't read ICC profile from %s\n", progname,
|
||||
icc_filename);
|
||||
free(icc_profile);
|
||||
fclose(icc_file);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
free(icc_profile);
|
||||
fclose(icc_file);
|
||||
} else if (cinfo.err->msg_code != JWRN_BOGUS_ICC)
|
||||
fprintf(stderr, "%s: no ICC profile data in JPEG file\n", progname);
|
||||
}
|
||||
|
||||
/* Finish decompression and release memory.
|
||||
* I must do it in this order because output module has allocated memory
|
||||
* of lifespan JPOOL_IMAGE; it needs to finish before releasing memory.
|
||||
*/
|
||||
(*dest_mgr->finish_output) (&cinfo, dest_mgr);
|
||||
(void) jpeg_finish_decompress(&cinfo);
|
||||
(void)jpeg_finish_decompress(&cinfo);
|
||||
jpeg_destroy_decompress(&cinfo);
|
||||
|
||||
/* Close files, if we opened them */
|
||||
@@ -768,11 +843,10 @@ main (int argc, char **argv)
|
||||
if (output_file != stdout)
|
||||
fclose(output_file);
|
||||
|
||||
#ifdef PROGRESS_REPORT
|
||||
end_progress_monitor((j_common_ptr) &cinfo);
|
||||
#endif
|
||||
if (report || max_scans != 0)
|
||||
end_progress_monitor((j_common_ptr)&cinfo);
|
||||
|
||||
if (memsrc && inbuffer != NULL)
|
||||
if (memsrc)
|
||||
free(inbuffer);
|
||||
|
||||
/* All done. */
|
||||
|
||||
@@ -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">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<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>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<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">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
@@ -22,9 +21,9 @@
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td style="padding-left: 0.5em;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">TurboJPEG
|
||||
 <span id="projectnumber">1.5</span>
|
||||
 <span id="projectnumber">2.1.4</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -32,47 +31,29 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||
<!-- Generated by Doxygen 1.8.20 -->
|
||||
<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');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
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="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>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
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) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
@@ -88,17 +69,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
<div class="contents">
|
||||
<div class="textblock">Here are the data structures with brief descriptions:</div><div 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_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_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_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"><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"><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>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.3.1
|
||||
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
|
||||
</small></address>
|
||||
</body>
|
||||
</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">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<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>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<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">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
@@ -22,9 +21,9 @@
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td style="padding-left: 0.5em;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">TurboJPEG
|
||||
 <span id="projectnumber">1.5</span>
|
||||
 <span id="projectnumber">2.1.4</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -32,47 +31,29 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||
<!-- Generated by Doxygen 1.8.20 -->
|
||||
<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');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
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="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>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
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) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
@@ -86,21 +67,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
<div class="title">Data Structure Index</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<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">
|
||||
<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>
|
||||
<div class="qindex"><a class="qindex" href="#letter_t">t</a></div>
|
||||
<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>
|
||||
</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 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>
|
||||
</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 -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.3.1
|
||||
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
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
Before Width: | Height: | Size: 746 B After Width: | Height: | Size: 746 B |
@@ -1,3 +1,3 @@
|
||||
code {
|
||||
color: #4665A2;
|
||||
color: #4665A2;
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
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 */
|
||||
@@ -11,6 +15,7 @@ h1.groupheader {
|
||||
}
|
||||
|
||||
.title {
|
||||
font: 400 14px/28px Roboto,sans-serif;
|
||||
font-size: 150%;
|
||||
font-weight: bold;
|
||||
margin: 10px 2px;
|
||||
@@ -48,17 +53,28 @@ dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.multicol {
|
||||
ul.multicol {
|
||||
-moz-column-gap: 1em;
|
||||
-webkit-column-gap: 1em;
|
||||
column-gap: 1em;
|
||||
-moz-column-count: 3;
|
||||
-webkit-column-count: 3;
|
||||
column-count: 3;
|
||||
}
|
||||
|
||||
p.startli, p.startdd, p.starttd {
|
||||
p.startli, p.startdd {
|
||||
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 {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
@@ -71,6 +87,15 @@ p.endtd {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
p.interli {
|
||||
}
|
||||
|
||||
p.interdd {
|
||||
}
|
||||
|
||||
p.intertd {
|
||||
}
|
||||
|
||||
/* @end */
|
||||
|
||||
caption {
|
||||
@@ -125,12 +150,12 @@ a.qindex {
|
||||
a.qindexHL {
|
||||
font-weight: bold;
|
||||
background-color: #9CAFD4;
|
||||
color: #ffffff;
|
||||
color: #FFFFFF;
|
||||
border: 1px double #869DCA;
|
||||
}
|
||||
|
||||
.contents a.qindexHL:visited {
|
||||
color: #ffffff;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
a.el {
|
||||
@@ -140,11 +165,11 @@ a.el {
|
||||
a.elRef {
|
||||
}
|
||||
|
||||
a.code, a.code:visited {
|
||||
a.code, a.code:visited, a.line, a.line:visited {
|
||||
color: #4665A2;
|
||||
}
|
||||
|
||||
a.codeRef, a.codeRef:visited {
|
||||
a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
|
||||
color: #4665A2;
|
||||
}
|
||||
|
||||
@@ -154,6 +179,25 @@ dl.el {
|
||||
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 {
|
||||
border: 1px solid #C4CFE5;
|
||||
background-color: #FBFCFD;
|
||||
@@ -168,8 +212,8 @@ pre.fragment {
|
||||
}
|
||||
|
||||
div.fragment {
|
||||
padding: 4px;
|
||||
margin: 4px;
|
||||
padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
|
||||
margin: 4px 8px 4px 2px;
|
||||
background-color: #FBFCFD;
|
||||
border: 1px solid #C4CFE5;
|
||||
}
|
||||
@@ -201,6 +245,11 @@ div.line {
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
|
||||
div.line:after {
|
||||
content:"\000A";
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
div.line.glow {
|
||||
background-color: cyan;
|
||||
box-shadow: 0 0 10px cyan;
|
||||
@@ -222,10 +271,19 @@ span.lineno a:hover {
|
||||
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;
|
||||
font-weight: bold;
|
||||
color: #ffffff;
|
||||
color: #FFFFFF;
|
||||
margin-bottom: 3px;
|
||||
margin-top: 3px;
|
||||
padding: 0.2em;
|
||||
@@ -237,7 +295,16 @@ div.ah {
|
||||
-webkit-box-shadow: 2px 2px 3px #999;
|
||||
-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: -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 {
|
||||
@@ -292,7 +359,7 @@ img.formulaDsp {
|
||||
|
||||
}
|
||||
|
||||
img.formulaInl {
|
||||
img.formulaInl, img.inline {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
@@ -370,6 +437,13 @@ blockquote {
|
||||
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 */
|
||||
|
||||
/*
|
||||
@@ -466,7 +540,7 @@ table.memberdecls {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.memItemRight {
|
||||
.memItemRight, .memTemplItemRight {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@@ -482,6 +556,29 @@ table.memberdecls {
|
||||
|
||||
/* 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 {
|
||||
font-size: 80%;
|
||||
color: #4665A2;
|
||||
@@ -520,7 +617,7 @@ table.memberdecls {
|
||||
}
|
||||
|
||||
.memname {
|
||||
font-weight: bold;
|
||||
font-weight: 400;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
@@ -536,24 +633,24 @@ table.memberdecls {
|
||||
color: #253555;
|
||||
font-weight: bold;
|
||||
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
|
||||
background-image:url('nav_f.png');
|
||||
background-repeat:repeat-x;
|
||||
background-color: #E2E8F2;
|
||||
background-color: #DFE5F1;
|
||||
/* opera specific markup */
|
||||
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||
border-top-right-radius: 4px;
|
||||
border-top-left-radius: 4px;
|
||||
/* firefox specific markup */
|
||||
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
/* webkit specific markup */
|
||||
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||
-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 {
|
||||
border-bottom: 1px solid #A8B8D9;
|
||||
border-left: 1px solid #A8B8D9;
|
||||
@@ -611,17 +708,17 @@ dl.reflist dd {
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
.params .paramname, .retval .paramname {
|
||||
.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
|
||||
font-weight: bold;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.params .paramtype {
|
||||
.params .paramtype, .tparams .paramtype {
|
||||
font-style: italic;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.params .paramdir {
|
||||
.params .paramdir, .tparams .paramdir {
|
||||
font-family: "courier new",courier,monospace;
|
||||
vertical-align: top;
|
||||
}
|
||||
@@ -665,12 +762,12 @@ span.mlabel {
|
||||
|
||||
/* @end */
|
||||
|
||||
/* these are for tree view when not used as main index */
|
||||
/* these are for tree view inside a (index) page */
|
||||
|
||||
div.directory {
|
||||
margin: 10px 0px;
|
||||
border-top: 1px solid #A8B8D9;
|
||||
border-bottom: 1px solid #A8B8D9;
|
||||
border-top: 1px solid #9CAFD4;
|
||||
border-bottom: 1px solid #9CAFD4;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@@ -687,6 +784,7 @@ div.directory {
|
||||
.directory td.entry {
|
||||
white-space: nowrap;
|
||||
padding-right: 6px;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
.directory td.entry a {
|
||||
@@ -728,6 +826,80 @@ div.directory {
|
||||
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 {
|
||||
margin-top: 8px;
|
||||
-webkit-touch-callout: none;
|
||||
@@ -743,6 +915,10 @@ address {
|
||||
color: #2A3D61;
|
||||
}
|
||||
|
||||
table.doxtable caption {
|
||||
caption-side: top;
|
||||
}
|
||||
|
||||
table.doxtable {
|
||||
border-collapse:collapse;
|
||||
margin-top: 4px;
|
||||
@@ -787,7 +963,7 @@ table.fieldtable {
|
||||
}
|
||||
|
||||
.fieldtable td.fieldname {
|
||||
padding-top: 5px;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
.fieldtable td.fielddoc {
|
||||
@@ -796,7 +972,7 @@ table.fieldtable {
|
||||
}
|
||||
|
||||
.fieldtable td.fielddoc p:first-child {
|
||||
margin-top: 2px;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
.fieldtable td.fielddoc p:last-child {
|
||||
@@ -816,6 +992,7 @@ table.fieldtable {
|
||||
padding-bottom: 4px;
|
||||
padding-top: 5px;
|
||||
text-align:left;
|
||||
font-weight: 400;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
@@ -908,6 +1085,18 @@ div.summary a
|
||||
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
|
||||
{
|
||||
font-size: 8pt;
|
||||
@@ -934,72 +1123,143 @@ div.headertitle
|
||||
padding: 5px 5px 5px 10px;
|
||||
}
|
||||
|
||||
dl
|
||||
{
|
||||
padding: 0 0 0 10px;
|
||||
.PageDocRTL-title div.headertitle {
|
||||
text-align: right;
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
|
||||
dl.section
|
||||
{
|
||||
dl {
|
||||
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;
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
dl.note
|
||||
{
|
||||
margin-left:-7px;
|
||||
padding-left: 3px;
|
||||
border-left:4px solid;
|
||||
border-color: #D0C000;
|
||||
dl.section.DocNodeRTL {
|
||||
margin-right: 0px;
|
||||
padding-right: 0px;
|
||||
}
|
||||
|
||||
dl.warning, dl.attention
|
||||
{
|
||||
margin-left:-7px;
|
||||
padding-left: 3px;
|
||||
border-left:4px solid;
|
||||
border-color: #FF0000;
|
||||
dl.note {
|
||||
margin-left: -7px;
|
||||
padding-left: 3px;
|
||||
border-left: 4px solid;
|
||||
border-color: #D0C000;
|
||||
}
|
||||
|
||||
dl.pre, dl.post, dl.invariant
|
||||
{
|
||||
margin-left:-7px;
|
||||
padding-left: 3px;
|
||||
border-left:4px solid;
|
||||
border-color: #00D000;
|
||||
dl.note.DocNodeRTL {
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
border-left: 0;
|
||||
margin-right: -7px;
|
||||
padding-right: 3px;
|
||||
border-right: 4px solid;
|
||||
border-color: #D0C000;
|
||||
}
|
||||
|
||||
dl.deprecated
|
||||
{
|
||||
margin-left:-7px;
|
||||
padding-left: 3px;
|
||||
border-left:4px solid;
|
||||
border-color: #505050;
|
||||
dl.warning, dl.attention {
|
||||
margin-left: -7px;
|
||||
padding-left: 3px;
|
||||
border-left: 4px solid;
|
||||
border-color: #FF0000;
|
||||
}
|
||||
|
||||
dl.todo
|
||||
{
|
||||
margin-left:-7px;
|
||||
padding-left: 3px;
|
||||
border-left:4px solid;
|
||||
border-color: #00C0E0;
|
||||
dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
border-left: 0;
|
||||
margin-right: -7px;
|
||||
padding-right: 3px;
|
||||
border-right: 4px solid;
|
||||
border-color: #FF0000;
|
||||
}
|
||||
|
||||
dl.test
|
||||
{
|
||||
margin-left:-7px;
|
||||
padding-left: 3px;
|
||||
border-left:4px solid;
|
||||
border-color: #3030E0;
|
||||
dl.pre, dl.post, dl.invariant {
|
||||
margin-left: -7px;
|
||||
padding-left: 3px;
|
||||
border-left: 4px solid;
|
||||
border-color: #00D000;
|
||||
}
|
||||
|
||||
dl.bug
|
||||
{
|
||||
margin-left:-7px;
|
||||
padding-left: 3px;
|
||||
border-left:4px solid;
|
||||
border-color: #C08050;
|
||||
dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
border-left: 0;
|
||||
margin-right: -7px;
|
||||
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 {
|
||||
@@ -1019,6 +1279,11 @@ dl.section dd {
|
||||
border: 0px none;
|
||||
}
|
||||
|
||||
#projectalign
|
||||
{
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#projectname
|
||||
{
|
||||
font: 300% Tahoma, Arial,sans-serif;
|
||||
@@ -1063,6 +1328,16 @@ dl.section dd {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.plantumlgraph
|
||||
{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.diagraph
|
||||
{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.caption
|
||||
{
|
||||
font-weight: bold;
|
||||
@@ -1083,10 +1358,12 @@ dl.citelist dt {
|
||||
font-weight:bold;
|
||||
margin-right:10px;
|
||||
padding:5px;
|
||||
text-align:right;
|
||||
width:52px;
|
||||
}
|
||||
|
||||
dl.citelist dd {
|
||||
margin:2px 0;
|
||||
margin:2px 0 2px 72px;
|
||||
padding:5px 0;
|
||||
}
|
||||
|
||||
@@ -1097,10 +1374,15 @@ div.toc {
|
||||
border-radius: 7px 7px 7px 7px;
|
||||
float: right;
|
||||
height: auto;
|
||||
margin: 0 20px 10px 10px;
|
||||
margin: 0 8px 10px 10px;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.PageDocRTL-title div.toc {
|
||||
float: left !important;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
div.toc li {
|
||||
background: url("bdwn.png") no-repeat scroll 0 5px transparent;
|
||||
font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
|
||||
@@ -1109,6 +1391,12 @@ div.toc li {
|
||||
padding-top: 2px;
|
||||
}
|
||||
|
||||
.PageDocRTL-title div.toc li {
|
||||
background-position-x: right !important;
|
||||
padding-left: 0 !important;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
div.toc h3 {
|
||||
font: bold 12px/1.2 Arial,FreeSans,sans-serif;
|
||||
color: #4665A2;
|
||||
@@ -1138,6 +1426,26 @@ div.toc li.level4 {
|
||||
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 {
|
||||
font-weight: bold;
|
||||
color: gray;
|
||||
@@ -1163,6 +1471,177 @@ tr.heading h2 {
|
||||
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
|
||||
{
|
||||
#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)
|
||||
{
|
||||
var base = $(linkObj).attr('id');
|
||||
@@ -15,7 +39,7 @@ function toggleVisibility(linkObj)
|
||||
summary.hide();
|
||||
$(linkObj).removeClass('closed').addClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -24,19 +48,20 @@ function updateStripes()
|
||||
$('table.directory tr').
|
||||
removeClass('even').filter(':visible:even').addClass('even');
|
||||
}
|
||||
|
||||
function toggleLevel(level)
|
||||
{
|
||||
$('table.directory tr').each(function(){
|
||||
$('table.directory tr').each(function() {
|
||||
var l = this.id.split('_').length-1;
|
||||
var i = $('#img'+this.id.substring(3));
|
||||
var a = $('#arr'+this.id.substring(3));
|
||||
if (l<level+1) {
|
||||
i.attr('src','ftv2folderopen.png');
|
||||
a.attr('src','ftv2mnode.png');
|
||||
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
|
||||
a.html('▼');
|
||||
$(this).show();
|
||||
} else if (l==level+1) {
|
||||
i.attr('src','ftv2folderclosed.png');
|
||||
a.attr('src','ftv2pnode.png');
|
||||
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
|
||||
a.html('►');
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
@@ -47,34 +72,33 @@ function toggleLevel(level)
|
||||
|
||||
function toggleFolder(id)
|
||||
{
|
||||
//The clicked row
|
||||
// the clicked row
|
||||
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");
|
||||
|
||||
//Only match elements AFTER this one (can't hide elements before)
|
||||
var childRows = rows.filter(function() {
|
||||
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||
return this.id.match(re);
|
||||
});
|
||||
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||
|
||||
//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) {
|
||||
currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png');
|
||||
currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png');
|
||||
rows.filter("[id^=row_"+id+"]").hide();
|
||||
} else { //We are SHOWING
|
||||
//All sub images
|
||||
var childImages = childRows.find("img");
|
||||
var childImg = childImages.filter("[id^=img]");
|
||||
var childArr = childImages.filter("[id^=arr]");
|
||||
|
||||
currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row
|
||||
currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row
|
||||
childImg.attr('src','ftv2folderclosed.png'); //children closed
|
||||
childArr.attr('src','ftv2pnode.png'); //children closed
|
||||
// replace down arrow by right arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
currentRowSpans.filter(".arrow").html('►');
|
||||
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
|
||||
} else { // we are SHOWING
|
||||
// replace right arrow by down arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
|
||||
currentRowSpans.filter(".arrow").html('▼');
|
||||
// replace down arrows by right arrows for child rows
|
||||
var childRowsSpans = childRows.find("span");
|
||||
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
childRowsSpans.filter(".arrow").html('►');
|
||||
childRows.show(); //show all children
|
||||
}
|
||||
updateStripes();
|
||||
@@ -94,4 +118,4 @@ function toggleInherit(id)
|
||||
$(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">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<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>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<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">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
@@ -22,9 +21,9 @@
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td style="padding-left: 0.5em;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">TurboJPEG
|
||||
 <span id="projectnumber">1.5</span>
|
||||
 <span id="projectnumber">2.1.4</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -32,53 +31,29 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||
<!-- Generated by Doxygen 1.8.20 -->
|
||||
<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');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
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="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>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
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) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
@@ -90,7 +65,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
<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>
|
||||
<li>customFilter
|
||||
: <a class="el" href="structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1">tjtransform</a>
|
||||
: <a class="el" href="structtjtransform.html#afd7fc262df33f741e120ef4183202ef5">tjtransform</a>
|
||||
</li>
|
||||
<li>data
|
||||
: <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a>
|
||||
@@ -126,9 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.3.1
|
||||
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
|
||||
</small></address>
|
||||
</body>
|
||||
</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">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<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>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<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">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
@@ -22,9 +21,9 @@
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td style="padding-left: 0.5em;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">TurboJPEG
|
||||
 <span id="projectnumber">1.5</span>
|
||||
 <span id="projectnumber">2.1.4</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -32,53 +31,29 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||
<!-- Generated by Doxygen 1.8.20 -->
|
||||
<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');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
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="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>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
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) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
@@ -90,7 +65,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
<div class="contents">
|
||||
 <ul>
|
||||
<li>customFilter
|
||||
: <a class="el" href="structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1">tjtransform</a>
|
||||
: <a class="el" href="structtjtransform.html#afd7fc262df33f741e120ef4183202ef5">tjtransform</a>
|
||||
</li>
|
||||
<li>data
|
||||
: <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a>
|
||||
@@ -126,9 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.3.1
|
||||
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
|
||||
</small></address>
|
||||
</body>
|
||||
</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">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<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>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<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">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
@@ -22,9 +21,9 @@
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td style="padding-left: 0.5em;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">TurboJPEG
|
||||
 <span id="projectnumber">1.5</span>
|
||||
 <span id="projectnumber">2.1.4</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -32,40 +31,29 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||
<!-- Generated by Doxygen 1.8.20 -->
|
||||
<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');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li class="current"><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
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="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
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) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
@@ -82,9 +70,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.3.1
|
||||
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
|
||||
</small></address>
|
||||
</body>
|
||||
</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">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<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>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<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">
|
||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
@@ -22,9 +21,9 @@
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td style="padding-left: 0.5em;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">TurboJPEG
|
||||
 <span id="projectnumber">1.5</span>
|
||||
 <span id="projectnumber">2.1.4</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -32,40 +31,29 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||
<!-- Generated by Doxygen 1.8.20 -->
|
||||
<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');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
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="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
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) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
@@ -81,15 +69,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all modules:</div><div 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>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.3.1
|
||||
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
|
||||
</small></address>
|
||||
</body>
|
||||
</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>
|
||||
<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"/>
|
||||
<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>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
@@ -11,15 +11,25 @@
|
||||
<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>
|
||||
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>
|
||||
<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"/>
|
||||
<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>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
@@ -11,15 +11,25 @@
|
||||
<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>
|
||||
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>
|
||||
<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"/>
|
||||
<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>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
@@ -11,15 +11,25 @@
|
||||
<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>
|
||||
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>
|
||||
<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"/>
|
||||
<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>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
@@ -11,15 +11,25 @@
|
||||
<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>
|
||||
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#ga5e5aac9e8bcf17049279301e2466474c',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#gab40f5096a72fd7e5bda9d6b58fa37e2e',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#ga97c2cedc1e2bade15a84164c94e503c1',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#ga5a3093e325598c17a9f004323af6fafa',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#ga5d619e0a02b71e05a8dffb764f6d7a64',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#ga193d0977b3b9966d53a6c402e90899b1',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#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'],['../group___turbo_j_p_e_g.html#ga504805ec0161f1b505397ca0118bf8fd',1,'tjtransform(): 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,89 +0,0 @@
|
||||
var searchData=
|
||||
[
|
||||
['tj_5fnumcs',['TJ_NUMCS',['../group___turbo_j_p_e_g.html#ga39f57a6fb02d9cf32e7b6890099b5a71',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#ga5c9234bda6d993cdaffdd89bf81a00ff',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#gaccc5bca7f12fcdcc302e6e1c6d4b311b',1,'turbojpeg.h']]],
|
||||
['tjbufsizeyuv2',['tjBufSizeYUV2',['../group___turbo_j_p_e_g.html#gaf451664a62c1f6c7cc5a6401f32908c9',1,'turbojpeg.h']]],
|
||||
['tjcompress2',['tjCompress2',['../group___turbo_j_p_e_g.html#gaf38f2ed44bdc88e730e08b632fa6e88e',1,'turbojpeg.h']]],
|
||||
['tjcompressfromyuv',['tjCompressFromYUV',['../group___turbo_j_p_e_g.html#ga6f6de375d6ec0020faba627e37e5a060',1,'turbojpeg.h']]],
|
||||
['tjcompressfromyuvplanes',['tjCompressFromYUVPlanes',['../group___turbo_j_p_e_g.html#ga0b84c682d8accf097d7a743c965d3464',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#ga077c61027b875afecd5a1613bf18b3c1',1,'turbojpeg.h']]],
|
||||
['tjdecodeyuvplanes',['tjDecodeYUVPlanes',['../group___turbo_j_p_e_g.html#gaf42f19b7a496eb18bdc84fe61ee6d3e2',1,'turbojpeg.h']]],
|
||||
['tjdecompress2',['tjDecompress2',['../group___turbo_j_p_e_g.html#gad8026a417e16a76313bc0a6c9e8b2ba2',1,'turbojpeg.h']]],
|
||||
['tjdecompressheader3',['tjDecompressHeader3',['../group___turbo_j_p_e_g.html#ga3fced455e504e8ff4fbad28ba94a3020',1,'turbojpeg.h']]],
|
||||
['tjdecompresstoyuv2',['tjDecompressToYUV2',['../group___turbo_j_p_e_g.html#ga39e08906528db5a764670ea48d344b09',1,'turbojpeg.h']]],
|
||||
['tjdecompresstoyuvplanes',['tjDecompressToYUVPlanes',['../group___turbo_j_p_e_g.html#ga38d0ef90692663b3ffb5b16da2541512',1,'turbojpeg.h']]],
|
||||
['tjdestroy',['tjDestroy',['../group___turbo_j_p_e_g.html#ga674adee917b95ad4a896f1ba39e12540',1,'turbojpeg.h']]],
|
||||
['tjencodeyuv3',['tjEncodeYUV3',['../group___turbo_j_p_e_g.html#gaabe05acd734990053ad1294b5ef239aa',1,'turbojpeg.h']]],
|
||||
['tjencodeyuvplanes',['tjEncodeYUVPlanes',['../group___turbo_j_p_e_g.html#ga8a65ed3bd12df57c219d46afbc9008f1',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']]],
|
||||
['tjfree',['tjFree',['../group___turbo_j_p_e_g.html#ga8c4a1231dc06a450514c835f6471f137',1,'turbojpeg.h']]],
|
||||
['tjgeterrorstr',['tjGetErrorStr',['../group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf',1,'turbojpeg.h']]],
|
||||
['tjgetscalingfactors',['tjGetScalingFactors',['../group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8',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#ga3d10c47fbe4a2489a2b30c931551d01a',1,'turbojpeg.h']]],
|
||||
['tjinitdecompress',['tjInitDecompress',['../group___turbo_j_p_e_g.html#gae5408179d041e2a2f7199c8283cf649e',1,'turbojpeg.h']]],
|
||||
['tjinittransform',['tjInitTransform',['../group___turbo_j_p_e_g.html#ga3155b775bfbac9dbba869b95a0367902',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_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#ga6f98d977bfa9d167c97172e876ba61e2',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']]],
|
||||
['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#gad02cd42b69f193a0623a9c801788df3a',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'],['../group___turbo_j_p_e_g.html#gaa29f3189c41be12ec5dee7caec318a31',1,'tjtransform(): 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_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_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,'']]]
|
||||
];
|
||||