Compare commits
706 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8162eddf04 | ||
|
|
2e136a7190 | ||
|
|
9f8f683e74 | ||
|
|
4dbc293125 | ||
|
|
59337a67b1 | ||
|
|
ba22c0f76d | ||
|
|
a405519e96 | ||
|
|
fac8381441 | ||
|
|
290ddbf71a | ||
|
|
9171fd4bde | ||
|
|
d0e7c4548a | ||
|
|
dfc63d42ee | ||
|
|
67cb059046 | ||
|
|
5c8cac97c0 | ||
|
|
df3c3dcb9b | ||
|
|
2ee7264d40 | ||
|
|
30cba2a2f8 | ||
|
|
a014845403 | ||
|
|
f3c716a2bc | ||
|
|
6f1534d618 | ||
|
|
9abeff46d8 | ||
|
|
932b5bb0d5 | ||
|
|
fdab4a7af4 | ||
|
|
0565548191 | ||
|
|
c5f269eb96 | ||
|
|
98bc3eeb3a | ||
|
|
147548c055 | ||
|
|
d640a45730 | ||
|
|
eb21c023ab | ||
|
|
13377e6b38 | ||
|
|
607b668ff9 | ||
|
|
ab6cae6f3b | ||
|
|
3ccb6ead23 | ||
|
|
6441ad0f83 | ||
|
|
6d2d6d3baf | ||
|
|
e1588a2a7b | ||
|
|
548490fe5e | ||
|
|
b579fc114d | ||
|
|
a3d4aadd0d | ||
|
|
d7d16df646 | ||
|
|
14ce28a92d | ||
|
|
da41ab94e7 | ||
|
|
1f55ae7b0f | ||
|
|
172972394a | ||
|
|
a7f0244e9b | ||
|
|
a01857cff6 | ||
|
|
57ba02a408 | ||
|
|
8a9a6dd15a | ||
|
|
73eff6effe | ||
|
|
2ce32e0fe5 | ||
|
|
e869a81a7a | ||
|
|
5446ff88d6 | ||
|
|
0f88060b0f | ||
|
|
ecf021bc0d | ||
|
|
4c5fa566b3 | ||
|
|
d401d62514 | ||
|
|
2fd4ae7b2c | ||
|
|
18edeff4e8 | ||
|
|
a9c41fbc4f | ||
|
|
739ecbc5ec | ||
|
|
4c313544e2 | ||
|
|
173900b1ca | ||
|
|
5d2430f4da | ||
|
|
129f0cb763 | ||
|
|
0a9b972178 | ||
|
|
2849d86aaa | ||
|
|
84d6306f64 | ||
|
|
e6e952d5d5 | ||
|
|
a72816ed07 | ||
|
|
4d9f256b01 | ||
|
|
b201838d8b | ||
|
|
a1bfc05854 | ||
|
|
2a2970af67 | ||
|
|
97a1575cb8 | ||
|
|
0081c2de20 | ||
|
|
9df5786f05 | ||
|
|
1a1fb615db | ||
|
|
5135c2e25d | ||
|
|
3932190c2e | ||
|
|
a219fd13b0 | ||
|
|
c23672ce52 | ||
|
|
4f51f36eb3 | ||
|
|
e0606dafff | ||
|
|
ffc1aa9674 | ||
|
|
55ec9b3b89 | ||
|
|
4de8f6922a | ||
|
|
785ec30eb4 | ||
|
|
d147be83e9 | ||
|
|
8fa70367ed | ||
|
|
171b875b27 | ||
|
|
3ab3234875 | ||
|
|
3e68a5ee20 | ||
|
|
4e45161654 | ||
|
|
629e96eedc | ||
|
|
ebaa67ea32 | ||
|
|
dd830b3ffe | ||
|
|
4ede2ef523 | ||
|
|
5cda8c5e31 | ||
|
|
47b66d1d1e | ||
|
|
55ab0d396c | ||
|
|
18bc4c6114 | ||
|
|
b1079002ad | ||
|
|
3311fc0001 | ||
|
|
34d264d64e | ||
|
|
f35fd27ec6 | ||
|
|
df17d398ec | ||
|
|
cd9a318502 | ||
|
|
d2d4465548 | ||
|
|
5536ace198 | ||
|
|
5dd906beff | ||
|
|
c81e91e8ca | ||
|
|
bff7959e34 | ||
|
|
6ad658be17 | ||
|
|
7b57cba6b4 | ||
|
|
2f9e8a1172 | ||
|
|
e4ec23d7ae | ||
|
|
e795afc330 | ||
|
|
2c01200c5d | ||
|
|
ed70101da2 | ||
|
|
8a2cad0201 | ||
|
|
b6772910d3 | ||
|
|
399aa374bd | ||
|
|
1719d12e51 | ||
|
|
486cdcfb9d | ||
|
|
74e6ea45e3 | ||
|
|
d2c4079959 | ||
|
|
3e8911aad5 | ||
|
|
4b838c38f9 | ||
|
|
944f5915cd | ||
|
|
3179f330b2 | ||
|
|
1388ad6757 | ||
|
|
110d8d6dca | ||
|
|
7b68764905 | ||
|
|
21d056847b | ||
|
|
6e4509a3f1 | ||
|
|
c7ca521bc8 | ||
|
|
ccaba5d789 | ||
|
|
cfc7e6e58e | ||
|
|
4e52b66f34 | ||
|
|
8cf6f716bc | ||
|
|
eb14189caa | ||
|
|
91dd3b23ad | ||
|
|
7e0d94d3a7 | ||
|
|
1c839761cf | ||
|
|
6d91e950c8 | ||
|
|
d523435e18 | ||
|
|
1ac83cd636 | ||
|
|
0ba70b6a13 | ||
|
|
e417033d84 | ||
|
|
6d2e8837b4 | ||
|
|
f7c5489244 | ||
|
|
f7a10a61e3 | ||
|
|
d111d9ff7a | ||
|
|
10ba6ed336 | ||
|
|
292d78e786 | ||
|
|
88bf1d1678 | ||
|
|
8f8305981b | ||
|
|
42f7c78fe3 | ||
|
|
33859880e9 | ||
|
|
3e9e7c7055 | ||
|
|
bbd8089297 | ||
|
|
141f26ff6d | ||
|
|
4574f01f43 | ||
|
|
ba52a3de32 | ||
|
|
240ba417aa | ||
|
|
ed581cd935 | ||
|
|
2c6b68e283 | ||
|
|
2acfb93c94 | ||
|
|
975307775c | ||
|
|
5dbd39323c | ||
|
|
0f35cd68f2 | ||
|
|
f3c3f01d23 | ||
|
|
d0004de5dd | ||
|
|
3d84668d42 | ||
|
|
951d3677eb | ||
|
|
366168aa7d | ||
|
|
f73b1dbc60 | ||
|
|
4f2216b435 | ||
|
|
0efc4858d4 | ||
|
|
02227e48a9 | ||
|
|
c7dd191271 | ||
|
|
40557b2301 | ||
|
|
a524b9b06b | ||
|
|
7c1a1789d2 | ||
|
|
6e632af9f6 | ||
|
|
cd342acf7f | ||
|
|
c3bfbde21d | ||
|
|
a8656d703d | ||
|
|
9ecb67c219 | ||
|
|
53c685b7f4 | ||
|
|
d27b935a88 | ||
|
|
88ae60986e | ||
|
|
7e4eac7021 | ||
|
|
9fc018fd1a | ||
|
|
96e4e7eb60 | ||
|
|
26e3aedbe5 | ||
|
|
b4525f9f16 | ||
|
|
59352195b2 | ||
|
|
f7ca3c5a3d | ||
|
|
1ed312eab6 | ||
|
|
b8200c6601 | ||
|
|
ea8f643c16 | ||
|
|
460dfe40e1 | ||
|
|
ae08115d4d | ||
|
|
b5a1472781 | ||
|
|
190382b75f | ||
|
|
8789a5e255 | ||
|
|
89c88c2509 | ||
|
|
2ec4a5ebe3 | ||
|
|
1d7faf84a0 | ||
|
|
8e895c79e1 | ||
|
|
2b121d39e7 | ||
|
|
2d14fc2e3b | ||
|
|
6ab61fa1d1 | ||
|
|
fe5b6a1c7c | ||
|
|
6ee5d5f568 | ||
|
|
fe79f56b77 | ||
|
|
c1037f4380 | ||
|
|
30282a878c | ||
|
|
a46c111d9f | ||
|
|
9120a24743 | ||
|
|
c965dc7a79 | ||
|
|
b9142b21f8 | ||
|
|
7d829bfa30 | ||
|
|
fb6f5e8b01 | ||
|
|
c77783ed41 | ||
|
|
4c5a15c362 | ||
|
|
b797f70012 | ||
|
|
80d77720c3 | ||
|
|
aecee25695 | ||
|
|
ae87a95861 | ||
|
|
b443c541b9 | ||
|
|
cf483eee49 | ||
|
|
70040cb7ee | ||
|
|
3de15e0c34 | ||
|
|
a2291b252d | ||
|
|
219e8e8f65 | ||
|
|
a36deef563 | ||
|
|
b0f92a1d6c | ||
|
|
8cc1277b69 | ||
|
|
77ff3bd66d | ||
|
|
ecf5f9a96a | ||
|
|
00d48d7e8c | ||
|
|
035262a18d | ||
|
|
ed7cab47d9 | ||
|
|
42d679b9fc | ||
|
|
044c22e12f | ||
|
|
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 | ||
|
|
7fbfe29c65 | ||
|
|
5ced1f590b | ||
|
|
b98ee19241 | ||
|
|
ad8330af72 | ||
|
|
b25adabcfa | ||
|
|
875e873f26 | ||
|
|
2a9e3bd743 | ||
|
|
f37b7c1f96 | ||
|
|
509c2680aa | ||
|
|
ec5adb83dd | ||
|
|
051f4862f9 | ||
|
|
c055c88057 | ||
|
|
85d96d4478 | ||
|
|
c8e52741fd | ||
|
|
f36d531553 | ||
|
|
6399d0a699 | ||
|
|
aa9db61677 | ||
|
|
8a0e35b212 | ||
|
|
2b05d47bc2 | ||
|
|
7bc9fca430 | ||
|
|
bb16b94455 | ||
|
|
33011754e6 | ||
|
|
bce58f487e | ||
|
|
ce067a6cd1 | ||
|
|
d3a3a73f64 | ||
|
|
58a3975e93 | ||
|
|
5857929f95 | ||
|
|
709477274e | ||
|
|
1af712c101 | ||
|
|
ec90cd0f90 | ||
|
|
ce76ffac4c | ||
|
|
afbe48c290 | ||
|
|
98ff5507d8 | ||
|
|
3ca6dba96e | ||
|
|
500b5ecec3 | ||
|
|
87ab3360d0 | ||
|
|
b46af82cc1 | ||
|
|
a4aa30d9a0 | ||
|
|
aaf58dabb6 | ||
|
|
0d7818d1b6 | ||
|
|
4b67db4d9b | ||
|
|
f70a7e1ee1 | ||
|
|
a9075a17c3 | ||
|
|
6a8421fb44 | ||
|
|
031e16ecff | ||
|
|
75be88cfbd | ||
|
|
bdec995839 | ||
|
|
fa905fbf7b | ||
|
|
9aada25ced | ||
|
|
e2442e0707 | ||
|
|
73fd604161 | ||
|
|
2f9e7c84d1 | ||
|
|
3c7199ff06 | ||
|
|
73b98acd8b | ||
|
|
bb0d170288 | ||
|
|
db84125fcb | ||
|
|
ae4221f905 | ||
|
|
674343ab14 | ||
|
|
1c2d3cfaaf | ||
|
|
2d0b675adf | ||
|
|
6fac90945a | ||
|
|
01e3032354 | ||
|
|
42d62bf114 | ||
|
|
90e2d7f3fd | ||
|
|
5308c1a03b | ||
|
|
ce90ab5d44 | ||
|
|
1ee87a9e2e | ||
|
|
479501b07c | ||
|
|
a39c970d27 | ||
|
|
12f3d0be84 | ||
|
|
9bc8eb6449 | ||
|
|
0fa5ae6b54 | ||
|
|
1ff90822f1 | ||
|
|
f8cca819a4 | ||
|
|
beefb62a6f | ||
|
|
3d9c64e9f8 | ||
|
|
23e8e0ff83 | ||
|
|
c868e41b22 | ||
|
|
0696b0a451 | ||
|
|
aa829dcf50 | ||
|
|
43ce78e032 | ||
|
|
2cc4f93c88 | ||
|
|
bb3d325624 | ||
|
|
c701014dce | ||
|
|
950580eb0c | ||
|
|
2b1c9c6887 | ||
|
|
07e304c3bf | ||
|
|
5ea77d8b77 | ||
|
|
504a295cde | ||
|
|
d00d7d8c19 | ||
|
|
aaffc14f65 | ||
|
|
d5f281b734 | ||
|
|
f2729c983a | ||
|
|
c1f07a9fc4 | ||
|
|
133e4af070 | ||
|
|
995eb29dc3 | ||
|
|
4f943644e5 | ||
|
|
3bef88f6ec | ||
|
|
2260b66e16 | ||
|
|
a861cc2f31 | ||
|
|
43c58ff983 | ||
|
|
574f3a772c | ||
|
|
ad6c316146 | ||
|
|
8d95be3afb | ||
|
|
a62895265f | ||
|
|
9ab569e616 | ||
|
|
9c78a04df4 | ||
|
|
0fa7850aeb | ||
|
|
0c8eb5b4dd | ||
|
|
84893085cf | ||
|
|
f4b8a5cf03 | ||
|
|
6d8caa9f88 | ||
|
|
398c1e9acc | ||
|
|
26f109290d | ||
|
|
43e84cff1b | ||
|
|
696e754ecf | ||
|
|
909a8cfc7b | ||
|
|
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 | ||
|
|
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 | ||
|
|
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 | ||
|
|
e5c1613ccd | ||
|
|
c94531212f | ||
|
|
9baef107e1 | ||
|
|
dadebcd79a | ||
|
|
dedce66eb5 | ||
|
|
b0971e47d7 | ||
|
|
e248d430e2 | ||
|
|
acb634931a | ||
|
|
1db1ce45da | ||
|
|
aba6ae5950 | ||
|
|
596e3965e7 | ||
|
|
d0c3aa900b | ||
|
|
d4092f6b4d | ||
|
|
42e1e2d886 | ||
|
|
25c912c1b2 | ||
|
|
178796e748 | ||
|
|
b9ab64d8db | ||
|
|
2ac4e9d914 | ||
|
|
6a2b067428 | ||
|
|
11eec4a398 | ||
|
|
301ba4f305 | ||
|
|
70f236ddd7 | ||
|
|
2a4f189444 | ||
|
|
9d64f3c60b | ||
|
|
da2a27ef05 | ||
|
|
c082dc039d | ||
|
|
d4c41fe0da | ||
|
|
44b2399a94 | ||
|
|
d9cb76f636 | ||
|
|
d34d255957 | ||
|
|
a0b7de9a47 | ||
|
|
2252795571 | ||
|
|
eb38b61bfe | ||
|
|
47b29e8cd9 | ||
|
|
e1e816e665 | ||
|
|
2fb4d7e337 | ||
|
|
8a9b042b26 | ||
|
|
6441018150 | ||
|
|
11426a8716 | ||
|
|
67ad535022 | ||
|
|
6c6696e569 | ||
|
|
6530203fdd | ||
|
|
c8358fcbd9 | ||
|
|
b0fcd0ccc5 | ||
|
|
2b29bca2a9 | ||
|
|
d681fa7626 | ||
|
|
ff05b6e0de | ||
|
|
e6426d2420 | ||
|
|
2af2fe42a3 | ||
|
|
fcfc6c5eed | ||
|
|
786b649331 | ||
|
|
f4ba09b33a | ||
|
|
261db7706d | ||
|
|
0f4fcced0a | ||
|
|
952191da79 | ||
|
|
d642da75bd | ||
|
|
059c9a5f2a | ||
|
|
82bf7f5858 | ||
|
|
3582ce90bb | ||
|
|
94686e3c0f | ||
|
|
97205269bc | ||
|
|
27d4c5ea22 | ||
|
|
6abd39160c | ||
|
|
9df7ac2e6a | ||
|
|
0ff7da7191 | ||
|
|
9fdb8f8553 | ||
|
|
d6d7b53968 | ||
|
|
f9f0c75bb8 | ||
|
|
3da94de248 | ||
|
|
ab664e35fc | ||
|
|
ce26e83f47 | ||
|
|
74e4c793cd | ||
|
|
a280fa630c | ||
|
|
6aae007745 | ||
|
|
4ad94b2963 | ||
|
|
a949da48da | ||
|
|
2d4b2f14d0 | ||
|
|
108b1cd9ba | ||
|
|
9366cf0bca | ||
|
|
13e6b151b0 | ||
|
|
1a8c68ac5b | ||
|
|
1ee329d617 | ||
|
|
fa3bdfb7bc | ||
|
|
b47c5e737f | ||
|
|
ce262eb5d7 | ||
|
|
27f817cd11 | ||
|
|
7884e245bc | ||
|
|
0df2e2188b | ||
|
|
be908ac024 | ||
|
|
ed21f4bd03 | ||
|
|
6d22430a3a | ||
|
|
f34f2f5bc6 | ||
|
|
e9e3a2edd7 | ||
|
|
211c69f317 | ||
|
|
1625253d49 | ||
|
|
a0047bdea4 | ||
|
|
7bfb22af12 | ||
|
|
ac4a899511 | ||
|
|
dfefba7752 | ||
|
|
4cf67f2363 | ||
|
|
9407cf7f47 | ||
|
|
6c36568626 | ||
|
|
cb88e5da80 | ||
|
|
e9d9c31fd2 | ||
|
|
077e5bb4e0 | ||
|
|
a1dd35680d | ||
|
|
a09ba29a55 | ||
|
|
8ce2c9119a | ||
|
|
db04435165 | ||
|
|
7723d7f7d0 | ||
|
|
628c168c86 | ||
|
|
3924ebceb5 | ||
|
|
1120ff29a1 | ||
|
|
1945ad961b | ||
|
|
3dcb85ee9a | ||
|
|
1be87b6273 | ||
|
|
b331385e8a | ||
|
|
b2921f1bcc | ||
|
|
eaae2cdb16 | ||
|
|
a7c2f97939 | ||
|
|
e06ccbe3f7 | ||
|
|
67de29b503 | ||
|
|
c22e42e9a2 | ||
|
|
6d765524bc | ||
|
|
421d34fd2f | ||
|
|
c6300ffe4e | ||
|
|
6448a5e584 | ||
|
|
6e9d43e085 | ||
|
|
9055fb408d | ||
|
|
9e6c6a14f8 | ||
|
|
7ee3ce9ada | ||
|
|
b5426c52c0 | ||
|
|
621b29f5b1 | ||
|
|
f1cbc32876 | ||
|
|
72c837da24 | ||
|
|
1c8a475cd4 | ||
|
|
8880e08771 | ||
|
|
426d787c4c | ||
|
|
2cf199cbbd | ||
|
|
16b121890c | ||
|
|
6cb27c31d9 | ||
|
|
ff5685d534 |
4
.gitattributes
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
/appveyor.yml export-ignore
|
||||||
|
/.gitattributes export-ignore
|
||||||
|
/.github export-ignore
|
||||||
|
*.ppm binary
|
||||||
95
.github/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
Contributing to libjpeg-turbo
|
||||||
|
=============================
|
||||||
|
|
||||||
|
libjpeg-turbo is a stable and mature product with a worldwide reach, it is an
|
||||||
|
ISO/ITU-T reference implementation of the JPEG standard, and its maintainer
|
||||||
|
does not earn a salary for maintaining it. Thus, not every code contribution
|
||||||
|
can or will be accepted into the libjpeg-turbo code base. In order to maximize
|
||||||
|
the chances that a code contribution is acceptable, please adhere to the
|
||||||
|
following guidelines:
|
||||||
|
|
||||||
|
1. If the code contribution is a bug fix, then please ensure that enough
|
||||||
|
information is provided so that the maintainer can readily reproduce and
|
||||||
|
document the bug. That information should include:
|
||||||
|
- A clear and concise description of the bug
|
||||||
|
- The steps and (if applicable) images necessary to reproduce the bug
|
||||||
|
- The compilers, operating systems, and CPUs with which the bug was
|
||||||
|
observed
|
||||||
|
- The versions of libjpeg-turbo with which the bug was observed
|
||||||
|
- If the bug is a regression, the specific commit that introduced the bug
|
||||||
|
(use `git bisect` to determine this)
|
||||||
|
|
||||||
|
2. If the code contribution will implement a major new feature, then please
|
||||||
|
contact the project maintainer (through a
|
||||||
|
[GitHub issue](https://github.com/libjpeg-turbo/libjpeg-turbo/issues/new),
|
||||||
|
[direct e-mail](https://libjpeg-turbo.org/About/Contact), or the
|
||||||
|
[libjpeg-turbo-devel mailing list](https://libjpeg-turbo.org/About/MailingLists))
|
||||||
|
prior to implementing the feature. In general, major new features that are
|
||||||
|
potentially disruptive to the quality of libjpeg-turbo are unlikely to be
|
||||||
|
accepted unless:
|
||||||
|
- The new feature is within the existing scope of libjpeg-turbo.
|
||||||
|
- The new feature has been thoroughly regression tested and benchmarked on
|
||||||
|
all of the supported platforms that are potentially affected by it.
|
||||||
|
- The new feature has been documented clearly and concisely in the change
|
||||||
|
log and (if applicable) the libjpeg and TurboJPEG API documentation and
|
||||||
|
man pages.
|
||||||
|
- The code implementing the new feature is formatted consistently with the
|
||||||
|
rest of the libjpeg-turbo code base (use
|
||||||
|
[checkstyle](https://github.com/libjpeg-turbo/checkstyle) to validate
|
||||||
|
this.)
|
||||||
|
- The new feature does not introduce new members into the exposed libjpeg
|
||||||
|
API structures (doing so would break backward ABI compatibility.)
|
||||||
|
- The new feature does not alter existing libjpeg-turbo usage or
|
||||||
|
development workflows.
|
||||||
|
- The code implementing the new feature is elegant, easily maintainable,
|
||||||
|
and causes the least possible amount of disruption to the libjpeg-turbo
|
||||||
|
code base.
|
||||||
|
- The new feature is based on the dev branch of the libjpeg-turbo
|
||||||
|
repository.
|
||||||
|
|
||||||
|
... OR ...
|
||||||
|
|
||||||
|
- Your organization is prepared to pay for the labor necessary to ensure
|
||||||
|
all of the above. Even the most well-written patches can still require
|
||||||
|
a significant amount of labor to clean up, test, and integrate. (See
|
||||||
|
above RE: the maintainer not earning a salary.)
|
||||||
|
|
||||||
|
Specific types of features that *will not* be accepted:
|
||||||
|
|
||||||
|
- Features that extend the scope of libjpeg-turbo to support image formats
|
||||||
|
other than DCT-based JPEG and JFIF
|
||||||
|
- Features that extend the scope of libjpeg-turbo to support image
|
||||||
|
processing algorithms that are not necessary for JPEG compression or
|
||||||
|
decompression
|
||||||
|
- Extensions to the JPEG format that have not been approved by the
|
||||||
|
appropriate standards bodies
|
||||||
|
- Non-trivial performance enhancements that have less than a 5% overall
|
||||||
|
impact on performance
|
||||||
|
|
||||||
|
3. If the code contribution is a build system enhancement, then please be
|
||||||
|
prepared to justify the enhancement. In general, build system enhancements
|
||||||
|
are unlikely to be accepted unless:
|
||||||
|
- The enhancement is potentially beneficial to a significant number of
|
||||||
|
upstream libjpeg-turbo users/developers. (If the enhancement is only
|
||||||
|
beneficial to a downstream project, then it does not belong here.)
|
||||||
|
- The enhancement has been tested with the following CMake versions:
|
||||||
|
- The earliest version of CMake that libjpeg-turbo currently supports
|
||||||
|
(refer to CMakeLists.txt)
|
||||||
|
- The most recent major version of CMake
|
||||||
|
- (if applicable) The earliest version of CMake with which the
|
||||||
|
enhancement can be used
|
||||||
|
- The enhancement has been tested on all of the major platforms (Mac,
|
||||||
|
Linux, Windows/Visual C++, Windows/MinGW) that are potentially affected
|
||||||
|
by it.
|
||||||
|
- The enhancement does not introduce new build system requirements or CMake
|
||||||
|
variables unless absolutely necessary.
|
||||||
|
- The enhancement does not alter existing libjpeg-turbo development
|
||||||
|
workflows.
|
||||||
|
|
||||||
|
Specific types of build system enhancements that *will not* be accepted:
|
||||||
|
|
||||||
|
- Enhancements that allow libjpeg-turbo to be built from a subdirectory
|
||||||
|
of a downstream repository. These enhancements are not maintainable in
|
||||||
|
the upstream libjpeg-turbo build system. Use the CMake
|
||||||
|
`ExternalProject_Add()` function instead.
|
||||||
|
- Enhancements that introduce new (non-CMake-based) build systems
|
||||||
1
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
github: libjpeg-turbo
|
||||||
40
.github/ISSUE_TEMPLATE/bug-report.md
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
name: Bug Report
|
||||||
|
about: Inform the libjpeg-turbo maintainer about unexpected, reproducible behavior
|
||||||
|
title: ''
|
||||||
|
labels: bug
|
||||||
|
assignees: dcommander
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Have you searched the existing issues (both open and closed) in the libjpeg-turbo issue tracker to ensure that this bug report is not a duplicate?**
|
||||||
|
|
||||||
|
|
||||||
|
**Does this bug report describe one of the [two known and unsolvable issues with the JPEG format](https://libjpeg-turbo.org/pmwiki/uploads/About/TwoIssueswiththeJPEGStandard.pdf)?**
|
||||||
|
|
||||||
|
|
||||||
|
**Clear and concise description of the bug:**
|
||||||
|
|
||||||
|
|
||||||
|
**Steps to reproduce the bug (using *only* libjpeg-turbo):**
|
||||||
|
|
||||||
|
|
||||||
|
**Image(s) needed in order to reproduce the bug (if applicable):**
|
||||||
|
|
||||||
|
|
||||||
|
**Expected behavior:**
|
||||||
|
|
||||||
|
|
||||||
|
**Observed behavior:**
|
||||||
|
|
||||||
|
|
||||||
|
**Platform(s) (compiler version, operating system version, CPU) on which the bug was observed:**
|
||||||
|
|
||||||
|
|
||||||
|
**libjpeg-turbo release(s), commit(s), or branch(es) in which the bug was observed (always test the tip of the main branch or the latest [stable pre-release](https://libjpeg-turbo.org/DeveloperInfo/PreReleases) to verify that the bug hasn't already been fixed):**
|
||||||
|
|
||||||
|
|
||||||
|
**If the bug is a regression, the specific commit that introduced the regression (use `git bisect` to determine this):**
|
||||||
|
|
||||||
|
|
||||||
|
**Additional information:**
|
||||||
8
.github/ISSUE_TEMPLATE/feature-request.md
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: Feature Request
|
||||||
|
about: Suggest new libjpeg-turbo functionality
|
||||||
|
title: ''
|
||||||
|
labels: enhancement
|
||||||
|
assignees: dcommander
|
||||||
|
|
||||||
|
---
|
||||||
193
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
name: Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '**'
|
||||||
|
tags-ignore:
|
||||||
|
- '**'
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linux:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Set global environment variables
|
||||||
|
run: |
|
||||||
|
echo "BRANCH=${GITHUB_BASE_REF:-${GITHUB_REF#refs/heads/}}" >$GITHUB_ENV
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up build
|
||||||
|
run: |
|
||||||
|
mkdir -p $HOME/src/ljt.nightly
|
||||||
|
docker pull dcommander/buildljt:$BRANCH
|
||||||
|
git clone --depth=1 https://github.com/libjpeg-turbo/buildscripts.git -b $BRANCH $HOME/src/buildscripts
|
||||||
|
mkdir $HOME/rpmkeys
|
||||||
|
wget --no-check-certificate "http://www.libjpeg-turbo.org/key/LJTPR-GPG-KEY" -O $HOME/rpmkeys/LJTPR-GPG-KEY
|
||||||
|
- name: Configure GPG signing
|
||||||
|
if: ${{github.event_name != 'pull_request'}}
|
||||||
|
run: |
|
||||||
|
sudo apt install -y gnupg1
|
||||||
|
printf "${{secrets.GPG_KEY}}" | base64 --decode | gpg1 --batch --import -
|
||||||
|
chmod 600 $HOME/.gnupg/gpg.conf
|
||||||
|
echo "GPG_KEY_NAME=\"${{secrets.GPG_KEY_NAME}}\"" >$HOME/src/buildscripts/gpgsign
|
||||||
|
echo "GPG_KEY_ID=${{secrets.GPG_KEY_ID}}" >>$HOME/src/buildscripts/gpgsign
|
||||||
|
echo "GPG_KEY_PASS=${{secrets.GPG_KEY_PASS}}" >>$HOME/src/buildscripts/gpgsign
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
docker run -v $HOME/src/ljt.nightly:/root/src/ljt.nightly -v $HOME/src/buildscripts:/root/src/buildscripts -v $GITHUB_WORKSPACE:/root/src/libjpeg-turbo -v $HOME/.gnupg:/root/.gnupg -v $HOME/rpmkeys:/rpmkeys -t dcommander/buildljt:$BRANCH bash -c "rpm --import /rpmkeys/LJTPR-GPG-KEY && ~/src/buildscripts/buildljt -d /root/src/libjpeg-turbo -v"
|
||||||
|
sudo chown -R runner:runner $HOME/src/ljt.nightly
|
||||||
|
mv $HOME/src/ljt.nightly/latest/log-${{github.job}}.txt $HOME/src/ljt.nightly/latest/files/
|
||||||
|
- name: Configure AWS
|
||||||
|
if: ${{github.event_name != 'pull_request'}}
|
||||||
|
uses: aws-actions/configure-aws-credentials@v1
|
||||||
|
with:
|
||||||
|
aws-access-key-id: ${{secrets.AWS_ACCESS_KEY_ID}}
|
||||||
|
aws-secret-access-key: ${{secrets.AWS_SECRET_ACCESS_KEY}}
|
||||||
|
aws-region: ${{secrets.AWS_REGION}}
|
||||||
|
- name: Deploy
|
||||||
|
if: ${{github.event_name != 'pull_request'}}
|
||||||
|
run: |
|
||||||
|
aws s3 sync --acl public-read --delete $HOME/src/ljt.nightly/latest/files/ s3://libjpeg-turbo-pr/${{env.BRANCH}}/${{github.job}}/
|
||||||
|
macos:
|
||||||
|
runs-on: macos-10.15
|
||||||
|
steps:
|
||||||
|
- name: Set global environment variables
|
||||||
|
run: |
|
||||||
|
echo "BRANCH=${GITHUB_BASE_REF:-${GITHUB_REF#refs/heads/}}" >$GITHUB_ENV
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up build
|
||||||
|
run: |
|
||||||
|
brew install yasm md5sha1sum
|
||||||
|
mkdir -p $HOME/src/ljt.nightly
|
||||||
|
git clone --depth=1 https://github.com/libjpeg-turbo/buildscripts.git -b $BRANCH $HOME/src/buildscripts
|
||||||
|
- name: Configure GPG signing
|
||||||
|
if: ${{github.event_name != 'pull_request'}}
|
||||||
|
run: |
|
||||||
|
printf "${{secrets.GPG_KEY}}" | base64 --decode | gpg --batch --import -
|
||||||
|
echo "GPG_KEY_NAME=\"${{secrets.GPG_KEY_NAME}}\"" >$HOME/src/buildscripts/gpgsign
|
||||||
|
echo "GPG_KEY_ID=${{secrets.GPG_KEY_ID}}" >>$HOME/src/buildscripts/gpgsign
|
||||||
|
echo "GPG_KEY_PASS=${{secrets.GPG_KEY_PASS}}" >>$HOME/src/buildscripts/gpgsign
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
$HOME/src/buildscripts/buildljt -d $GITHUB_WORKSPACE -v
|
||||||
|
mv $HOME/src/ljt.nightly/latest/log-${{github.job}}.txt $HOME/src/ljt.nightly/latest/files/
|
||||||
|
- name: Configure AWS
|
||||||
|
if: ${{github.event_name != 'pull_request'}}
|
||||||
|
uses: aws-actions/configure-aws-credentials@v1
|
||||||
|
with:
|
||||||
|
aws-access-key-id: ${{secrets.AWS_ACCESS_KEY_ID}}
|
||||||
|
aws-secret-access-key: ${{secrets.AWS_SECRET_ACCESS_KEY}}
|
||||||
|
aws-region: ${{secrets.AWS_REGION}}
|
||||||
|
- name: Deploy
|
||||||
|
if: ${{github.event_name != 'pull_request'}}
|
||||||
|
run: |
|
||||||
|
aws s3 sync --acl public-read --delete $HOME/src/ljt.nightly/latest/files/ s3://libjpeg-turbo-pr/${{env.BRANCH}}/${{github.job}}/
|
||||||
|
linux-asan-ubsan:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up build
|
||||||
|
run: |
|
||||||
|
sudo apt install -y nasm
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
ASAN_OPTIONS: "detect_leaks=1 symbolize=1"
|
||||||
|
CTEST_OUTPUT_ON_FAILURE: 1
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
pushd build
|
||||||
|
cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER=clang -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O1 -g -fsanitize=address,undefined -fno-sanitize-recover=all -fno-omit-frame-pointer" -DENABLE_SHARED=0 ..
|
||||||
|
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
|
||||||
|
make -j$NUMCPUS --load-average=$NUMCPUS
|
||||||
|
make test
|
||||||
|
JSIMD_FORCESSE2=1 make test
|
||||||
|
cmake -DFLOATTEST=no-fp-contract ..
|
||||||
|
JSIMD_FORCENONE=1 make test
|
||||||
|
popd
|
||||||
|
linux-12bit:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
CTEST_OUTPUT_ON_FAILURE: 1
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
pushd build
|
||||||
|
cmake -G"Unix Makefiles" -DWITH_12BIT=1 \
|
||||||
|
-DCMAKE_C_FLAGS='--std=gnu90 -Wall -Werror -Wextra -Wpedantic -pedantic-errors -Wdouble-promotion -Wformat-overflow=2 -Wformat-security -Wformat-signedness -Wformat-truncation=2 -Wformat-y2k -Wmissing-include-dirs -Wshift-overflow=2 -Wswitch-bool -Wno-unused-parameter -Wuninitialized -Wstrict-overflow=2 -Wstringop-overflow=4 -Wstringop-truncation -Wduplicated-branches -Wduplicated-cond -Wdeclaration-after-statement -Wshadow -Wunsafe-loop-optimizations -Wundef -Wcast-align -Wno-clobbered -Wjump-misses-init -Wno-sign-compare -Wlogical-op -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wno-long-long -Wdisabled-optimization -Wno-overlength-strings' \
|
||||||
|
..
|
||||||
|
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
|
||||||
|
make -j$NUMCPUS --load-average=$NUMCPUS
|
||||||
|
make test
|
||||||
|
popd
|
||||||
|
linux-jpeg7-x32:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up build
|
||||||
|
run: |
|
||||||
|
sudo apt update
|
||||||
|
sudo apt -y --install-recommends install libc6-dev-x32 nasm
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
CTEST_OUTPUT_ON_FAILURE: 1
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
pushd build
|
||||||
|
cmake -G"Unix Makefiles" -DWITH_JPEG7=1 -DCMAKE_C_FLAGS=-mx32 \
|
||||||
|
-DCMAKE_C_FLAGS='--std=gnu90 -Wall -Werror -Wextra -Wpedantic -pedantic-errors -Wdouble-promotion -Wformat-overflow=2 -Wformat-security -Wformat-signedness -Wformat-truncation=2 -Wformat-y2k -Wmissing-include-dirs -Wshift-overflow=2 -Wswitch-bool -Wno-unused-parameter -Wuninitialized -Wstrict-overflow=2 -Wstringop-overflow=4 -Wstringop-truncation -Wduplicated-branches -Wduplicated-cond -Wdeclaration-after-statement -Wshadow -Wunsafe-loop-optimizations -Wundef -Wcast-align -Wno-clobbered -Wjump-misses-init -Wno-sign-compare -Wlogical-op -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wno-long-long -Wdisabled-optimization -Wno-overlength-strings' \
|
||||||
|
..
|
||||||
|
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
|
||||||
|
make -j$NUMCPUS --load-average=$NUMCPUS
|
||||||
|
make test
|
||||||
|
JSIMD_FORCESSE2=1 make test
|
||||||
|
cmake -DFLOATTEST=no-fp-contract ..
|
||||||
|
JSIMD_FORCENONE=1 make test
|
||||||
|
popd
|
||||||
|
linux-jpeg8:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up build
|
||||||
|
run: |
|
||||||
|
sudo apt -y install nasm
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
CTEST_OUTPUT_ON_FAILURE: 1
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
pushd build
|
||||||
|
cmake -G"Unix Makefiles" -DWITH_JPEG8=1 \
|
||||||
|
-DCMAKE_C_FLAGS='--std=gnu90 -Wall -Werror -Wextra -Wpedantic -pedantic-errors -Wdouble-promotion -Wformat-overflow=2 -Wformat-security -Wformat-signedness -Wformat-truncation=2 -Wformat-y2k -Wmissing-include-dirs -Wshift-overflow=2 -Wswitch-bool -Wno-unused-parameter -Wuninitialized -Wstrict-overflow=2 -Wstringop-overflow=4 -Wstringop-truncation -Wduplicated-branches -Wduplicated-cond -Wdeclaration-after-statement -Wshadow -Wunsafe-loop-optimizations -Wundef -Wcast-align -Wno-clobbered -Wjump-misses-init -Wno-sign-compare -Wlogical-op -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wno-long-long -Wdisabled-optimization -Wno-overlength-strings' \
|
||||||
|
..
|
||||||
|
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
|
||||||
|
make -j$NUMCPUS --load-average=$NUMCPUS
|
||||||
|
make test
|
||||||
|
JSIMD_FORCESSE2=1 make test
|
||||||
|
cmake -DFLOATTEST=no-fp-contract ..
|
||||||
|
JSIMD_FORCENONE=1 make test
|
||||||
|
popd
|
||||||
|
linux-msan:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
CTEST_OUTPUT_ON_FAILURE: 1
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
pushd build
|
||||||
|
cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER=clang -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O3 -g -fsanitize=memory -fno-sanitize-recover=all -fPIE" -DWITH_SIMD=0 ..
|
||||||
|
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
|
||||||
|
make -j$NUMCPUS --load-average=$NUMCPUS
|
||||||
|
make test
|
||||||
|
popd
|
||||||
14
.gitignore
vendored
@@ -1,14 +0,0 @@
|
|||||||
.DS_Store
|
|
||||||
Makefile.in
|
|
||||||
aclocal.m4
|
|
||||||
ar-lib
|
|
||||||
autom4te.cache
|
|
||||||
compile
|
|
||||||
config.guess
|
|
||||||
config.h.in
|
|
||||||
config.sub
|
|
||||||
configure
|
|
||||||
depcomp
|
|
||||||
install-sh
|
|
||||||
ltmain.sh
|
|
||||||
missing
|
|
||||||
1151
BUILDING.md
1560
CMakeLists.txt
983
ChangeLog.md
54
LICENSE.md
@@ -9,12 +9,12 @@ libjpeg-turbo is covered by three compatible BSD-style open source licenses:
|
|||||||
This license applies to the libjpeg API library and associated programs
|
This license applies to the libjpeg API library and associated programs
|
||||||
(any code inherited from libjpeg, and any modifications to that code.)
|
(any code inherited from libjpeg, and any modifications to that code.)
|
||||||
|
|
||||||
- The Modified (3-clause) BSD License, which is listed in
|
- The Modified (3-clause) BSD License, which is listed below
|
||||||
[turbojpeg.c](turbojpeg.c)
|
|
||||||
|
|
||||||
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 in [simd/jsimdext.inc](simd/jsimdext.inc)
|
- The [zlib License](https://opensource.org/licenses/Zlib)
|
||||||
|
|
||||||
This license is a subset of the other two, and it covers the libjpeg-turbo
|
This license is a subset of the other two, and it covers the libjpeg-turbo
|
||||||
SIMD extensions.
|
SIMD extensions.
|
||||||
@@ -66,7 +66,7 @@ best of our understanding.
|
|||||||
|
|
||||||
2. If your binary distribution includes or uses the TurboJPEG API, then
|
2. If your binary distribution includes or uses the TurboJPEG API, then
|
||||||
your product documentation must include the text of the Modified BSD
|
your product documentation must include the text of the Modified BSD
|
||||||
License.
|
License (see below.)
|
||||||
|
|
||||||
**Origin**
|
**Origin**
|
||||||
- Clause 2 of the Modified BSD License
|
- Clause 2 of the Modified BSD License
|
||||||
@@ -86,3 +86,47 @@ best of our understanding.
|
|||||||
- IJG License
|
- IJG License
|
||||||
- Modified BSD License
|
- Modified BSD License
|
||||||
- zlib License
|
- zlib License
|
||||||
|
|
||||||
|
|
||||||
|
The Modified (3-clause) BSD License
|
||||||
|
===================================
|
||||||
|
|
||||||
|
Copyright (C)2009-2022 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:
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
|
||||||
|
|
||||||
|
Why Three Licenses?
|
||||||
|
===================
|
||||||
|
|
||||||
|
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.
|
||||||
|
|||||||
778
Makefile.am
@@ -1,778 +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 pkgscripts/libturbojpeg.pc
|
|
||||||
|
|
||||||
HDRS = jchuff.h jdct.h jdhuff.h jerror.h jinclude.h jmemsys.h jmorecfg.h \
|
|
||||||
jpegint.h jpeglib.h jversion.h jsimd.h jsimddct.h jpegcomp.h \
|
|
||||||
jpeg_nbits_table.h
|
|
||||||
|
|
||||||
libjpeg_la_SOURCES = $(HDRS) jcapimin.c jcapistd.c jccoefct.c jccolor.c \
|
|
||||||
jcdctmgr.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
|
|
||||||
|
|
||||||
|
|
||||||
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
|
|
||||||
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
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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_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_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
|
|
||||||
./tjbench testout_tile.ppm 95 -rgb -quiet -tile -benchtime 0.01 >/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_*
|
|
||||||
|
|
||||||
./tjbench testout_tile.ppm 95 -rgb -fastupsample -quiet -tile -benchtime 0.01 >/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 -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 -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 -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 -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 -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
|
|
||||||
|
|
||||||
# CC: RGB->YCC SAMP: fullsize/int FDCT: float ENT: prog huff
|
|
||||||
./cjpeg -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; \
|
|
||||||
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; \
|
|
||||||
fi
|
|
||||||
rm -f testout_3x2_float.ppm testout_3x2_float_prog.jpg
|
|
||||||
|
|
||||||
# CC: RGB->YCC SAMP: fullsize/int FDCT: ifast ENT: prog huff
|
|
||||||
./cjpeg -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 -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 -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 -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 -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 -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 -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 -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 -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 -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/libjpeg-turbo.spec: pkgscripts/libjpeg-turbo.spec.tmpl
|
|
||||||
cat pkgscripts/libjpeg-turbo.spec.tmpl | sed s@%{__prefix}@$(prefix)@g | \
|
|
||||||
sed s@%{__bindir}@$(bindir)@g | sed s@%{__datadir}@$(datadir)@g | \
|
|
||||||
sed s@%{__docdir}@$(docdir)@g | sed s@%{__includedir}@$(includedir)@g | \
|
|
||||||
sed s@%{__libdir}@$(libdir)@g | sed s@%{__mandir}@$(mandir)@g \
|
|
||||||
> pkgscripts/libjpeg-turbo.spec
|
|
||||||
|
|
||||||
rpm: all pkgscripts/libjpeg-turbo.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/libjpeg-turbo.spec; \
|
|
||||||
cp $$TMPDIR/RPMS/${RPMARCH}/${PKGNAME}-${VERSION}-${BUILD}.${RPMARCH}.rpm \
|
|
||||||
${PKGNAME}-${VERSION}.${RPMARCH}.rpm; \
|
|
||||||
rm -rf $$TMPDIR
|
|
||||||
|
|
||||||
srpm: dist-gzip pkgscripts/libjpeg-turbo.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/libjpeg-turbo.spec | sed s/%{_blddir}/%{_tmppath}/g \
|
|
||||||
| sed s/#--\>//g \
|
|
||||||
> $$TMPDIR/SPECS/libjpeg-turbo.spec; \
|
|
||||||
rpmbuild -bs --define "_topdir $$TMPDIR" $$TMPDIR/SPECS/libjpeg-turbo.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} -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S} -buildarmv8 ${BUILDDIRARMV8} -lipo "${LIPO}"
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
|
||||||
sh pkgscripts/makemacpkg -buildarmv6 ${BUILDDIRARMV6} -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
|
|
||||||
87
README.ijg
@@ -43,7 +43,7 @@ User documentation:
|
|||||||
change.log Version-to-version change highlights.
|
change.log Version-to-version change highlights.
|
||||||
Programmer and internal documentation:
|
Programmer and internal documentation:
|
||||||
libjpeg.txt How to use the JPEG library in your own programs.
|
libjpeg.txt How to use the JPEG library in your own programs.
|
||||||
example.c Sample code for calling the JPEG library.
|
example.txt Sample code for calling the JPEG library.
|
||||||
structure.txt Overview of the JPEG library's internal structure.
|
structure.txt Overview of the JPEG library's internal structure.
|
||||||
coderules.txt Coding style rules --- please read if you contribute code.
|
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,
|
fitness for a particular purpose. This software is provided "AS IS", and you,
|
||||||
its user, assume the entire risk as to its quality and accuracy.
|
its user, assume the entire risk as to its quality and accuracy.
|
||||||
|
|
||||||
This software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding.
|
This software is copyright (C) 1991-2020, Thomas G. Lane, Guido Vollbeding.
|
||||||
All Rights Reserved except as specified below.
|
All Rights Reserved except as specified below.
|
||||||
|
|
||||||
Permission is hereby granted to use, copy, modify, and distribute this
|
Permission is hereby granted to use, copy, modify, and distribute this
|
||||||
@@ -159,25 +159,6 @@ commercial products, provided that all warranty or liability claims are
|
|||||||
assumed by the product vendor.
|
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
|
REFERENCES
|
||||||
==========
|
==========
|
||||||
|
|
||||||
@@ -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.
|
numbers ISO/IEC IS 10918-2, ITU-T T.83.
|
||||||
|
|
||||||
The JPEG standard does not specify all details of an interchangeable file
|
The JPEG standard does not specify all details of an interchangeable file
|
||||||
format. For the omitted details we follow the "JFIF" conventions, revision
|
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
|
1.02. JFIF version 1 has been adopted as ISO/IEC 10918-5 (05/2013) and
|
||||||
and thus received a formal publication status. It is available as a free
|
Recommendation ITU-T T.871 (05/2011): Information technology - Digital
|
||||||
download in PDF format from
|
compression and coding of continuous-tone still images: JPEG File Interchange
|
||||||
http://www.ecma-international.org/publications/techreports/E-TR-098.htm.
|
Format (JFIF). It is available as a free download in PDF file format from
|
||||||
A PostScript version of the JFIF document is available at
|
https://www.iso.org/standard/54989.html and http://www.itu.int/rec/T-REC-T.871.
|
||||||
http://www.ijg.org/files/jfif.ps.gz. There is also a plain text version at
|
A PDF file of the older JFIF 1.02 specification is available at
|
||||||
http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures.
|
http://www.w3.org/Graphics/JPEG/jfif3.pdf.
|
||||||
|
|
||||||
The TIFF 6.0 file format specification can be obtained by FTP from
|
The TIFF 6.0 file format specification can be obtained from
|
||||||
ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme
|
http://mirrors.ctan.org/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation
|
||||||
found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
|
scheme found in the TIFF 6.0 spec of 3-June-92 has a number of serious
|
||||||
IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
|
problems. IJG does not recommend use of the TIFF 6.0 design (TIFF Compression
|
||||||
Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
|
tag 6). Instead, we recommend the JPEG design proposed by TIFF Technical Note
|
||||||
(Compression tag 7). Copies of this Note can be obtained from
|
#2 (Compression tag 7). Copies of this Note can be obtained from
|
||||||
http://www.ijg.org/files/. It is expected that the next revision
|
http://www.ijg.org/files/. It is expected that the next revision
|
||||||
of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
|
of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
|
||||||
Although IJG's own code does not support TIFF/JPEG, the free libtiff library
|
Although IJG's own code does not support TIFF/JPEG, the free libtiff library
|
||||||
@@ -249,28 +230,26 @@ The most recent released version can always be found there in
|
|||||||
directory "files".
|
directory "files".
|
||||||
|
|
||||||
The JPEG FAQ (Frequently Asked Questions) article is a source of some
|
The JPEG FAQ (Frequently Asked Questions) article is a source of some
|
||||||
general information about JPEG.
|
general information about JPEG. It is available at
|
||||||
It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
|
http://www.faqs.org/faqs/jpeg-faq.
|
||||||
and other news.answers archive sites, including the official news.answers
|
|
||||||
archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
|
|
||||||
If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu
|
|
||||||
with body
|
|
||||||
send usenet/news.answers/jpeg-faq/part1
|
|
||||||
send usenet/news.answers/jpeg-faq/part2
|
|
||||||
|
|
||||||
|
|
||||||
FILE FORMAT WARS
|
FILE FORMAT COMPATIBILITY
|
||||||
================
|
=========================
|
||||||
|
|
||||||
The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together
|
This software implements ITU T.81 | ISO/IEC 10918 with some extensions from
|
||||||
with ITU-T SG16) currently promotes different formats containing the name
|
ITU T.871 | ISO/IEC 10918-5 (JPEG File Interchange Format-- see REFERENCES).
|
||||||
"JPEG" which are incompatible with original DCT-based JPEG. IJG therefore does
|
Informally, the term "JPEG image" or "JPEG file" most often refers to JFIF or
|
||||||
not support these formats (see REFERENCES). Indeed, one of the original
|
a subset thereof, but there are other formats containing the name "JPEG" that
|
||||||
reasons for developing this free software was to help force convergence on
|
are incompatible with the DCT-based JPEG standard or with JFIF (for instance,
|
||||||
common, interoperable format standards for JPEG files.
|
JPEG 2000 and JPEG XR). This software therefore does not support these
|
||||||
Don't use an incompatible file format!
|
formats. Indeed, one of the original reasons for developing this free software
|
||||||
(In any case, our decoder will remain capable of reading existing JPEG
|
was to help force convergence on a common, interoperable format standard for
|
||||||
image files indefinitely.)
|
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
|
TO DO
|
||||||
|
|||||||
100
README.md
Executable file → Normal file
@@ -1,13 +1,14 @@
|
|||||||
Background
|
Background
|
||||||
==========
|
==========
|
||||||
|
|
||||||
libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2,
|
libjpeg-turbo is a JPEG image codec that uses SIMD instructions to accelerate
|
||||||
NEON, AltiVec) to accelerate baseline JPEG compression and decompression on
|
baseline JPEG compression and decompression on x86, x86-64, Arm, PowerPC, and
|
||||||
x86, x86-64, ARM, and PowerPC systems. On such systems, libjpeg-turbo is
|
MIPS systems, as well as progressive JPEG compression on x86, x86-64, and Arm
|
||||||
generally 2-6x as fast as libjpeg, all else being equal. On other types of
|
systems. On such systems, libjpeg-turbo is generally 2-6x as fast as libjpeg,
|
||||||
systems, libjpeg-turbo can still outperform libjpeg by a significant amount, by
|
all else being equal. On other types of systems, libjpeg-turbo can still
|
||||||
virtue of its highly-optimized Huffman coding routines. In many cases, the
|
outperform libjpeg by a significant amount, by virtue of its highly-optimized
|
||||||
performance of libjpeg-turbo rivals that of proprietary high-speed JPEG codecs.
|
Huffman coding routines. In many cases, the performance of libjpeg-turbo
|
||||||
|
rivals that of proprietary high-speed JPEG codecs.
|
||||||
|
|
||||||
libjpeg-turbo implements both the traditional libjpeg API as well as the less
|
libjpeg-turbo implements both the traditional libjpeg API as well as the less
|
||||||
powerful but more straightforward TurboJPEG API. libjpeg-turbo also features
|
powerful but more straightforward TurboJPEG API. libjpeg-turbo also features
|
||||||
@@ -42,21 +43,25 @@ Using libjpeg-turbo
|
|||||||
libjpeg-turbo includes two APIs that can be used to compress and decompress
|
libjpeg-turbo includes two APIs that can be used to compress and decompress
|
||||||
JPEG images:
|
JPEG images:
|
||||||
|
|
||||||
- **TurboJPEG API**
|
- **TurboJPEG API**<br>
|
||||||
This API provides an easy-to-use interface for compressing and decompressing
|
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
|
JPEG images in memory. It also provides some functionality that would not be
|
||||||
straightforward to achieve using the underlying libjpeg API, such as
|
straightforward to achieve using the underlying libjpeg API, such as
|
||||||
generating planar YUV images and performing multiple simultaneous lossless
|
generating planar YUV images and performing multiple simultaneous lossless
|
||||||
transforms on an image. The Java interface for libjpeg-turbo is written on
|
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
|
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
|
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
|
more powerful. The libjpeg API implementation in libjpeg-turbo is both
|
||||||
API/ABI-compatible and mathematically compatible with libjpeg v6b. It can
|
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
|
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
|
There is no significant performance advantage to either API when both are used
|
||||||
to perform similar operations.
|
to perform similar operations.
|
||||||
@@ -130,28 +135,27 @@ without recompiling. libjpeg-turbo does not claim to support all of the
|
|||||||
libjpeg v7+ features, nor to produce identical output to libjpeg v7+ in all
|
libjpeg v7+ features, nor to produce identical output to libjpeg v7+ in all
|
||||||
cases (see below.)
|
cases (see below.)
|
||||||
|
|
||||||
By passing an argument of `--with-jpeg7` or `--with-jpeg8` to `configure`, or
|
By passing an argument of `-DWITH_JPEG7=1` or `-DWITH_JPEG8=1` to `cmake`, you
|
||||||
an argument of `-DWITH_JPEG7=1` or `-DWITH_JPEG8=1` to `cmake`, you can build a
|
can build a version of libjpeg-turbo that emulates the libjpeg v7 or v8 ABI, so
|
||||||
version of libjpeg-turbo that emulates the libjpeg v7 or v8 ABI, so that
|
that programs that are built against libjpeg v7 or v8 can be run with
|
||||||
programs that are built against libjpeg v7 or v8 can be run with libjpeg-turbo.
|
libjpeg-turbo. The following section describes which libjpeg v7+ features are
|
||||||
The following section describes which libjpeg v7+ features are supported and
|
supported and which aren't.
|
||||||
which aren't.
|
|
||||||
|
|
||||||
### Support for libjpeg v7 and v8 Features
|
### Support for libjpeg v7 and v8 Features
|
||||||
|
|
||||||
#### Fully supported
|
#### Fully supported
|
||||||
|
|
||||||
- **libjpeg: IDCT scaling extensions in decompressor**
|
- **libjpeg API: IDCT scaling extensions in decompressor**<br>
|
||||||
libjpeg-turbo supports IDCT scaling with scaling factors of 1/8, 1/4, 3/8,
|
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
|
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.)
|
and 1/2 are SIMD-accelerated.)
|
||||||
|
|
||||||
- **libjpeg: Arithmetic coding**
|
- **libjpeg API: Arithmetic coding**
|
||||||
|
|
||||||
- **libjpeg: In-memory source and destination managers**
|
- **libjpeg API: In-memory source and destination managers**<br>
|
||||||
See notes below.
|
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
|
Note that the libpjeg v7+ API was extended to accommodate this feature only
|
||||||
for convenience purposes. It has always been possible to implement this
|
for convenience purposes. It has always been possible to implement this
|
||||||
feature with libjpeg v6b (see rdswitch.c for an example.)
|
feature with libjpeg v6b (see rdswitch.c for an example.)
|
||||||
@@ -175,19 +179,19 @@ which aren't.
|
|||||||
|
|
||||||
NOTE: As of this writing, extensive research has been conducted into the
|
NOTE: As of this writing, extensive research has been conducted into the
|
||||||
usefulness of DCT scaling as a means of data reduction and SmartScale as a
|
usefulness of DCT scaling as a means of data reduction and SmartScale as a
|
||||||
means of quality improvement. The reader is invited to peruse the research at
|
means of quality improvement. Readers are invited to peruse the research at
|
||||||
<http://www.libjpeg-turbo.org/About/SmartScale> and draw his/her own conclusions,
|
<http://www.libjpeg-turbo.org/About/SmartScale> and draw their own conclusions,
|
||||||
but it is the general belief of our project that these features have not
|
but it is the general belief of our project that these features have not
|
||||||
demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
|
demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
|
||||||
|
|
||||||
- **libjpeg: DCT scaling in compressor**
|
- **libjpeg API: DCT scaling in compressor**<br>
|
||||||
`cinfo.scale_num` and `cinfo.scale_denom` are silently ignored.
|
`cinfo.scale_num` and `cinfo.scale_denom` are silently ignored.
|
||||||
There is no technical reason why DCT scaling could not be supported when
|
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
|
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
|
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.
|
8/9 would be available, which is of limited usefulness.
|
||||||
|
|
||||||
- **libjpeg: SmartScale**
|
- **libjpeg API: SmartScale**<br>
|
||||||
`cinfo.block_size` is silently ignored.
|
`cinfo.block_size` is silently ignored.
|
||||||
SmartScale is an extension to the JPEG format that allows for DCT block
|
SmartScale is an extension to the JPEG format that allows for DCT block
|
||||||
sizes other than 8x8. Providing support for this new format would be
|
sizes other than 8x8. Providing support for this new format would be
|
||||||
@@ -200,15 +204,15 @@ demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
|
|||||||
interest in providing this feature would be as a means of supporting
|
interest in providing this feature would be as a means of supporting
|
||||||
additional DCT scaling factors.
|
additional DCT scaling factors.
|
||||||
|
|
||||||
- **libjpeg: Fancy downsampling in compressor**
|
- **libjpeg API: Fancy downsampling in compressor**<br>
|
||||||
`cinfo.do_fancy_downsampling` is silently ignored.
|
`cinfo.do_fancy_downsampling` is silently ignored.
|
||||||
This requires the DCT scaling feature, which is not supported.
|
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
|
This requires both the DCT scaling and SmartScale features, which are not
|
||||||
supported.
|
supported.
|
||||||
|
|
||||||
- **Lossless RGB JPEG files**
|
- **Lossless RGB JPEG files**<br>
|
||||||
This requires the SmartScale feature, which is not supported.
|
This requires the SmartScale feature, which is not supported.
|
||||||
|
|
||||||
### What About libjpeg v9?
|
### What About libjpeg v9?
|
||||||
@@ -226,7 +230,7 @@ generally accomplish anything that can't already be accomplished better with
|
|||||||
existing, standard lossless formats. Therefore, at this time it is our belief
|
existing, standard lossless formats. Therefore, at this time it is our belief
|
||||||
that there is not sufficient technical justification for software projects to
|
that there is not sufficient technical justification for software projects to
|
||||||
upgrade from libjpeg v8 to libjpeg v9, and thus there is not sufficient
|
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
|
In-Memory Source/Destination Managers
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
@@ -242,15 +246,14 @@ don't, and it allows those functions to be provided in the "official"
|
|||||||
libjpeg-turbo binaries.
|
libjpeg-turbo binaries.
|
||||||
|
|
||||||
Those who are concerned about maintaining strict conformance with the libjpeg
|
Those who are concerned about maintaining strict conformance with the libjpeg
|
||||||
v6b or v7 API can pass an argument of `--without-mem-srcdst` to `configure` or
|
v6b or v7 API can pass an argument of `-DWITH_MEM_SRCDST=0` to `cmake` prior to
|
||||||
an argument of `-DWITH_MEM_SRCDST=0` to `cmake` prior to building
|
building libjpeg-turbo. This will restore the pre-1.3 behavior, in which
|
||||||
libjpeg-turbo. This will restore the pre-1.3 behavior, in which
|
|
||||||
`jpeg_mem_src()` and `jpeg_mem_dest()` are only included when emulating the
|
`jpeg_mem_src()` and `jpeg_mem_dest()` are only included when emulating the
|
||||||
libjpeg v8 API/ABI.
|
libjpeg v8 API/ABI.
|
||||||
|
|
||||||
On Un*x systems, including the in-memory source/destination managers changes
|
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
|
the dynamic library version from 62.2.0 to 62.3.0 if using libjpeg v6b API/ABI
|
||||||
emulation and from 7.0.0 to 7.1.0 if using libjpeg v7 API/ABI emulation.
|
emulation and from 7.2.0 to 7.3.0 if using libjpeg v7 API/ABI emulation.
|
||||||
|
|
||||||
Note that, on most Un*x systems, the dynamic linker will not look for a
|
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
|
function in a library until that function is actually used. Thus, if a program
|
||||||
@@ -284,12 +287,13 @@ following reasons:
|
|||||||
(and slightly faster) floating point IDCT algorithm introduced in libjpeg
|
(and slightly faster) floating point IDCT algorithm introduced in libjpeg
|
||||||
v8a as opposed to the algorithm used in libjpeg v6b. It should be noted,
|
v8a as opposed to the algorithm used in libjpeg v6b. It should be noted,
|
||||||
however, that this algorithm basically brings the accuracy of the floating
|
however, that this algorithm basically brings the accuracy of the floating
|
||||||
point IDCT in line with the accuracy of the slow integer IDCT. The floating
|
point IDCT in line with the accuracy of the accurate integer IDCT. The
|
||||||
point DCT/IDCT algorithms are mainly a legacy feature, and they do not
|
floating point DCT/IDCT algorithms are mainly a legacy feature, and they do
|
||||||
produce significantly more accuracy than the slow integer algorithms (to put
|
not produce significantly more accuracy than the accurate integer algorithms
|
||||||
numbers on this, the typical difference in PNSR between the two algorithms
|
(to put numbers on this, the typical difference in PNSR between the two
|
||||||
is less than 0.10 dB, whereas changing the quality level by 1 in the upper
|
algorithms is less than 0.10 dB, whereas changing the quality level by 1 in
|
||||||
range of the quality scale is typically more like a 1.0 dB difference.)
|
the upper range of the quality scale is typically more like a 1.0 dB
|
||||||
|
difference.)
|
||||||
|
|
||||||
- If the floating point algorithms in libjpeg-turbo are not implemented using
|
- If the floating point algorithms in libjpeg-turbo are not implemented using
|
||||||
SIMD instructions on a particular platform, then the accuracy of the
|
SIMD instructions on a particular platform, then the accuracy of the
|
||||||
@@ -326,7 +330,7 @@ in a way that makes the rest of the libjpeg infrastructure happy, so it is
|
|||||||
necessary to use the slow Huffman decoder when decompressing a JPEG image that
|
necessary to use the slow Huffman decoder when decompressing a JPEG image that
|
||||||
has restart markers. This can cause the decompression performance to drop by
|
has restart markers. This can cause the decompression performance to drop by
|
||||||
as much as 20%, but the performance will still be much greater than that of
|
as much as 20%, but the performance will still be much greater than that of
|
||||||
libjpeg. Many consumer packages, such as PhotoShop, use restart markers when
|
libjpeg. Many consumer packages, such as Photoshop, use restart markers when
|
||||||
generating JPEG images, so images generated by those programs will experience
|
generating JPEG images, so images generated by those programs will experience
|
||||||
this issue.
|
this issue.
|
||||||
|
|
||||||
@@ -337,5 +341,17 @@ The algorithm used by the SIMD-accelerated quantization function cannot produce
|
|||||||
correct results whenever the fast integer forward DCT is used along with a JPEG
|
correct results whenever the fast integer forward DCT is used along with a JPEG
|
||||||
quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
|
quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
|
||||||
function in those cases. This causes performance to drop by as much as 40%.
|
function in those cases. This causes performance to drop by as much as 40%.
|
||||||
It is therefore strongly advised that you use the slow integer forward DCT
|
It is therefore strongly advised that you use the accurate integer forward DCT
|
||||||
whenever encoding images with a JPEG quality of 98 or higher.
|
whenever encoding images with a JPEG quality of 98 or higher.
|
||||||
|
|
||||||
|
|
||||||
|
Memory Debugger Pitfalls
|
||||||
|
========================
|
||||||
|
|
||||||
|
Valgrind and Memory Sanitizer (MSan) can generate false positives
|
||||||
|
(specifically, incorrect reports of uninitialized memory accesses) when used
|
||||||
|
with libjpeg-turbo's SIMD extensions. It is generally recommended that the
|
||||||
|
SIMD extensions be disabled, either by passing an argument of `-DWITH_SIMD=0`
|
||||||
|
to `cmake` when configuring the build or by setting the environment variable
|
||||||
|
`JSIMD_FORCENONE` to `1` at run time, when testing libjpeg-turbo with Valgrind,
|
||||||
|
MSan, or other memory debuggers.
|
||||||
|
|||||||
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
|
|
||||||
])
|
|
||||||
99
appveyor.yml
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
install:
|
||||||
|
- cmd: >-
|
||||||
|
if not exist c:\installers mkdir c:\installers
|
||||||
|
|
||||||
|
mkdir c:\temp
|
||||||
|
|
||||||
|
if not exist c:\installers\nasm-2.10.01-win32.zip curl -fSL -o c:\installers\nasm-2.10.01-win32.zip http://www.nasm.us/pub/nasm/releasebuilds/2.10.01/win32/nasm-2.10.01-win32.zip
|
||||||
|
|
||||||
|
7z x c:\installers\nasm-2.10.01-win32.zip -oc:\ > c:\installers\nasm.install.log
|
||||||
|
|
||||||
|
if not exist c:\installers\i686-6.4.0-release-posix-dwarf-rt_v5-rev0.7z curl -fSL -o c:\installers\i686-6.4.0-release-posix-dwarf-rt_v5-rev0.7z "https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win32/Personal Builds/mingw-builds/6.4.0/threads-posix/dwarf/i686-6.4.0-release-posix-dwarf-rt_v5-rev0.7z"
|
||||||
|
|
||||||
|
md "c:\Program Files (x86)\mingw-w64\i686-6.4.0-posix-dwarf-rt_v5-rev0"
|
||||||
|
|
||||||
|
7z x c:\installers\i686-6.4.0-release-posix-dwarf-rt_v5-rev0.7z -o"c:\Program Files (x86)\mingw-w64\i686-6.4.0-posix-dwarf-rt_v5-rev0" > c:\installers\mingw32.install.log
|
||||||
|
|
||||||
|
if not exist c:\installers\x86_64-6.4.0-release-posix-seh-rt_v5-rev0.7z curl -fSL -o c:\installers\x86_64-6.4.0-release-posix-seh-rt_v5-rev0.7z "https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win64/Personal Builds/mingw-builds/6.4.0/threads-posix/seh/x86_64-6.4.0-release-posix-seh-rt_v5-rev0.7z"
|
||||||
|
|
||||||
|
md "c:\Program Files\mingw-w64\x86_64-6.4.0-posix-seh-rt_v5-rev0"
|
||||||
|
|
||||||
|
7z x c:\installers\x86_64-6.4.0-release-posix-seh-rt_v5-rev0.7z -o"c:\Program Files\mingw-w64\x86_64-6.4.0-posix-seh-rt_v5-rev0" > c:\installers\mingw64.install.log
|
||||||
|
|
||||||
|
set PATH=c:\nasm-2.10.01;c:\Program Files (x86)\NSIS;c:\msys64\usr\bin;%PATH%
|
||||||
|
|
||||||
|
"c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat"
|
||||||
|
|
||||||
|
set INCLUDE
|
||||||
|
|
||||||
|
set LIB
|
||||||
|
|
||||||
|
set PATH
|
||||||
|
|
||||||
|
set MSYSTEM=MINGW32
|
||||||
|
|
||||||
|
mklink /d "%ProgramData%\Oracle\Java32" "c:\Program Files (x86)\Java\jdk1.6.0"
|
||||||
|
|
||||||
|
git clone --depth=1 https://github.com/libjpeg-turbo/buildscripts.git -b %APPVEYOR_REPO_BRANCH% c:/buildscripts
|
||||||
|
|
||||||
|
cache:
|
||||||
|
- c:\installers\nasm-2.10.01-win32.zip -> appveyor.yml
|
||||||
|
- c:\installers\i686-6.4.0-release-posix-dwarf-rt_v5-rev0.7z -> appveyor.yml
|
||||||
|
- c:\installers\x86_64-6.4.0-release-posix-seh-rt_v5-rev0.7z -> appveyor.yml
|
||||||
|
|
||||||
|
build_script:
|
||||||
|
- cmd: >-
|
||||||
|
for /f %%i in ('"cygpath %CD%"') do set MINGWPATH=%%i
|
||||||
|
|
||||||
|
bash c:/buildscripts/buildljt -d %MINGWPATH% -b /c/ljt.nightly -v
|
||||||
|
|
||||||
|
cmake --build . --target clean
|
||||||
|
|
||||||
|
md win64
|
||||||
|
|
||||||
|
cd win64
|
||||||
|
|
||||||
|
bash c:/buildscripts/setupscripts/win64 -DCMAKE_C_FLAGS='-DWIN32 -D_WINDOWS -W4 -wd4100 -wd4127 -wd4245 -wd4324 -wd4701 -wd4702 -wd4706 -WX'
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
ninja
|
||||||
|
|
||||||
|
move c:\ljt.nightly\files\*.tar.gz .
|
||||||
|
|
||||||
|
move c:\ljt.nightly\files\*.exe .
|
||||||
|
|
||||||
|
move c:\ljt.nightly\files\*.html .
|
||||||
|
|
||||||
|
move c:\ljt.nightly\log-windows.txt .
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
- path: '*.tar.gz'
|
||||||
|
name: Source tarball
|
||||||
|
|
||||||
|
- path: '*-gcc*.exe'
|
||||||
|
name: SDK for MinGW
|
||||||
|
|
||||||
|
- path: '*-vc*.exe'
|
||||||
|
name: SDK for Visual C++
|
||||||
|
|
||||||
|
- path: 'log-windows.txt'
|
||||||
|
name: Build log
|
||||||
|
|
||||||
|
- path: 'index.html'
|
||||||
|
name: MD5 checksums
|
||||||
|
|
||||||
|
test: off
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
provider: S3
|
||||||
|
access_key_id:
|
||||||
|
secure: Z74OYogQ6bNV/I+6b5ZEXig74+6MW2WLER0v/bPM/uk=
|
||||||
|
secret_access_key:
|
||||||
|
secure: cyGZhHVCFwZ9jgf5lXoW69mVtECmqwx3eLo61ha8ueWbMYlHho7lwDXwVvxOFiCa
|
||||||
|
bucket: libjpeg-turbo-pr
|
||||||
|
region:
|
||||||
|
secure: qSElYBgBRcEUf88M6Osthw==
|
||||||
|
folder: $(APPVEYOR_REPO_BRANCH)/windows
|
||||||
|
set_public: true
|
||||||
|
remove_files: true
|
||||||
334
bmp.c
@@ -1,334 +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
|
|
||||||
33
cderror.h
@@ -1,9 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* cderror.h
|
* cderror.h
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1997, Thomas G. Lane.
|
* Copyright (C) 1994-1997, Thomas G. Lane.
|
||||||
* Modified 2009 by Guido Vollbeding.
|
* Modified 2009-2017 by Guido Vollbeding.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* libjpeg-turbo Modifications:
|
||||||
|
* Copyright (C) 2021, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
* file.
|
* file.
|
||||||
*
|
*
|
||||||
@@ -42,16 +44,17 @@ JMESSAGE(JMSG_FIRSTADDONCODE=1000, NULL) /* Must be first entry! */
|
|||||||
|
|
||||||
#ifdef BMP_SUPPORTED
|
#ifdef BMP_SUPPORTED
|
||||||
JMESSAGE(JERR_BMP_BADCMAP, "Unsupported BMP colormap format")
|
JMESSAGE(JERR_BMP_BADCMAP, "Unsupported BMP colormap format")
|
||||||
JMESSAGE(JERR_BMP_BADDEPTH, "Only 8- and 24-bit BMP files are supported")
|
JMESSAGE(JERR_BMP_BADDEPTH, "Only 8-, 24-, and 32-bit BMP files are supported")
|
||||||
JMESSAGE(JERR_BMP_BADHEADER, "Invalid BMP file: bad header length")
|
JMESSAGE(JERR_BMP_BADHEADER, "Invalid BMP file: bad header length")
|
||||||
JMESSAGE(JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1")
|
JMESSAGE(JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1")
|
||||||
JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB")
|
JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB")
|
||||||
JMESSAGE(JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported")
|
JMESSAGE(JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported")
|
||||||
JMESSAGE(JERR_BMP_EMPTY, "Empty BMP image")
|
JMESSAGE(JERR_BMP_EMPTY, "Empty BMP image")
|
||||||
JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM")
|
JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM")
|
||||||
JMESSAGE(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_MAPPED, "%ux%u 8-bit colormapped BMP image")
|
||||||
JMESSAGE(JTRC_BMP_OS2, "%ux%u 24-bit OS2 BMP image")
|
JMESSAGE(JTRC_BMP_OS2, "%ux%u %d-bit OS2 BMP image")
|
||||||
JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image")
|
JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image")
|
||||||
#endif /* BMP_SUPPORTED */
|
#endif /* BMP_SUPPORTED */
|
||||||
|
|
||||||
@@ -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_BUG, "GIF output got confused")
|
||||||
JMESSAGE(JERR_GIF_CODESIZE, "Bogus GIF codesize %d")
|
JMESSAGE(JERR_GIF_CODESIZE, "Bogus GIF codesize %d")
|
||||||
JMESSAGE(JERR_GIF_COLORSPACE, "GIF output must be grayscale or RGB")
|
JMESSAGE(JERR_GIF_COLORSPACE, "GIF output must be grayscale or RGB")
|
||||||
|
JMESSAGE(JERR_GIF_EMPTY, "Empty GIF image")
|
||||||
JMESSAGE(JERR_GIF_IMAGENOTFOUND, "Too few images in GIF file")
|
JMESSAGE(JERR_GIF_IMAGENOTFOUND, "Too few images in GIF file")
|
||||||
JMESSAGE(JERR_GIF_NOT, "Not a GIF file")
|
JMESSAGE(JERR_GIF_NOT, "Not a GIF file")
|
||||||
JMESSAGE(JTRC_GIF, "%ux%ux%d GIF image")
|
JMESSAGE(JTRC_GIF, "%ux%ux%d GIF image")
|
||||||
@@ -75,31 +79,14 @@ JMESSAGE(JWRN_GIF_NOMOREDATA, "Ran out of GIF bits")
|
|||||||
#ifdef PPM_SUPPORTED
|
#ifdef PPM_SUPPORTED
|
||||||
JMESSAGE(JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB")
|
JMESSAGE(JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB")
|
||||||
JMESSAGE(JERR_PPM_NONNUMERIC, "Nonnumeric data in PPM file")
|
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_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, "%ux%u PGM image")
|
||||||
JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image")
|
JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image")
|
||||||
JMESSAGE(JTRC_PPM, "%ux%u PPM image")
|
JMESSAGE(JTRC_PPM, "%ux%u PPM image")
|
||||||
JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image")
|
JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image")
|
||||||
#endif /* PPM_SUPPORTED */
|
#endif /* PPM_SUPPORTED */
|
||||||
|
|
||||||
#ifdef RLE_SUPPORTED
|
|
||||||
JMESSAGE(JERR_RLE_BADERROR, "Bogus error code from RLE library")
|
|
||||||
JMESSAGE(JERR_RLE_COLORSPACE, "RLE output must be grayscale or RGB")
|
|
||||||
JMESSAGE(JERR_RLE_DIMENSIONS, "Image dimensions (%ux%u) too large for RLE")
|
|
||||||
JMESSAGE(JERR_RLE_EMPTY, "Empty RLE file")
|
|
||||||
JMESSAGE(JERR_RLE_EOF, "Premature EOF in RLE header")
|
|
||||||
JMESSAGE(JERR_RLE_MEM, "Insufficient memory for RLE header")
|
|
||||||
JMESSAGE(JERR_RLE_NOT, "Not an RLE file")
|
|
||||||
JMESSAGE(JERR_RLE_TOOMANYCHANNELS, "Cannot handle %d output channels for RLE")
|
|
||||||
JMESSAGE(JERR_RLE_UNSUPPORTED, "Cannot handle this RLE setup")
|
|
||||||
JMESSAGE(JTRC_RLE, "%ux%u full-color RLE file")
|
|
||||||
JMESSAGE(JTRC_RLE_FULLMAP, "%ux%u full-color RLE file with map of length %d")
|
|
||||||
JMESSAGE(JTRC_RLE_GRAY, "%ux%u grayscale RLE file")
|
|
||||||
JMESSAGE(JTRC_RLE_MAPGRAY, "%ux%u grayscale RLE file with map of length %d")
|
|
||||||
JMESSAGE(JTRC_RLE_MAPPED, "%ux%u colormapped RLE file with map of length %d")
|
|
||||||
#endif /* RLE_SUPPORTED */
|
|
||||||
|
|
||||||
#ifdef TARGA_SUPPORTED
|
#ifdef TARGA_SUPPORTED
|
||||||
JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format")
|
JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format")
|
||||||
JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file")
|
JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file")
|
||||||
|
|||||||
26
cdjpeg.c
@@ -3,8 +3,8 @@
|
|||||||
*
|
*
|
||||||
* This file was part of the Independent JPEG Group's software:
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
* It was modified by The libjpeg-turbo Project to include only code relevant
|
* libjpeg-turbo Modifications:
|
||||||
* to libjpeg-turbo.
|
* Copyright (C) 2019, 2022, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
* file.
|
* file.
|
||||||
*
|
*
|
||||||
@@ -25,14 +25,25 @@
|
|||||||
* Optional progress monitor: display a percent-done figure on stderr.
|
* Optional progress monitor: display a percent-done figure on stderr.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
|
||||||
|
|
||||||
METHODDEF(void)
|
METHODDEF(void)
|
||||||
progress_monitor(j_common_ptr cinfo)
|
progress_monitor(j_common_ptr cinfo)
|
||||||
{
|
{
|
||||||
cd_progress_ptr prog = (cd_progress_ptr)cinfo->progress;
|
cd_progress_ptr prog = (cd_progress_ptr)cinfo->progress;
|
||||||
|
|
||||||
|
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 total_passes = prog->pub.total_passes + prog->total_extra_passes;
|
||||||
int percent_done = (int) (prog->pub.pass_counter*100L/prog->pub.pass_limit);
|
int percent_done =
|
||||||
|
(int)(prog->pub.pass_counter * 100L / prog->pub.pass_limit);
|
||||||
|
|
||||||
if (percent_done != prog->percent_done) {
|
if (percent_done != prog->percent_done) {
|
||||||
prog->percent_done = percent_done;
|
prog->percent_done = percent_done;
|
||||||
@@ -46,6 +57,7 @@ progress_monitor (j_common_ptr cinfo)
|
|||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
GLOBAL(void)
|
GLOBAL(void)
|
||||||
@@ -56,6 +68,8 @@ start_progress_monitor (j_common_ptr cinfo, cd_progress_ptr progress)
|
|||||||
progress->pub.progress_monitor = progress_monitor;
|
progress->pub.progress_monitor = progress_monitor;
|
||||||
progress->completed_extra_passes = 0;
|
progress->completed_extra_passes = 0;
|
||||||
progress->total_extra_passes = 0;
|
progress->total_extra_passes = 0;
|
||||||
|
progress->max_scans = 0;
|
||||||
|
progress->report = FALSE;
|
||||||
progress->percent_done = -1;
|
progress->percent_done = -1;
|
||||||
cinfo->progress = &progress->pub;
|
cinfo->progress = &progress->pub;
|
||||||
}
|
}
|
||||||
@@ -72,8 +86,6 @@ end_progress_monitor (j_common_ptr cinfo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Case-insensitive matching of possibly-abbreviated keyword switches.
|
* Case-insensitive matching of possibly-abbreviated keyword switches.
|
||||||
|
|||||||
34
cdjpeg.h
@@ -3,8 +3,9 @@
|
|||||||
*
|
*
|
||||||
* This file was part of the Independent JPEG Group's software:
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1997, Thomas G. Lane.
|
* Copyright (C) 1994-1997, Thomas G. Lane.
|
||||||
* It was modified by The libjpeg-turbo Project to include only code relevant
|
* Modified 2019 by Guido Vollbeding.
|
||||||
* to libjpeg-turbo.
|
* libjpeg-turbo Modifications:
|
||||||
|
* Copyright (C) 2017, 2019, 2021, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
* file.
|
* file.
|
||||||
*
|
*
|
||||||
@@ -35,6 +36,9 @@ struct cjpeg_source_struct {
|
|||||||
|
|
||||||
JSAMPARRAY buffer;
|
JSAMPARRAY buffer;
|
||||||
JDIMENSION buffer_height;
|
JDIMENSION buffer_height;
|
||||||
|
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
|
||||||
|
JDIMENSION max_pixels;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -54,6 +58,14 @@ struct djpeg_dest_struct {
|
|||||||
JDIMENSION rows_supplied);
|
JDIMENSION rows_supplied);
|
||||||
/* Finish up at the end of the image. */
|
/* Finish up at the end of the image. */
|
||||||
void (*finish_output) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo);
|
void (*finish_output) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo);
|
||||||
|
/* Re-calculate buffer dimensions based on output dimensions (for use with
|
||||||
|
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. */
|
/* Target file spec; filled in by djpeg.c after object is created. */
|
||||||
FILE *output_file;
|
FILE *output_file;
|
||||||
@@ -79,6 +91,9 @@ struct cdjpeg_progress_mgr {
|
|||||||
struct jpeg_progress_mgr pub; /* fields known to JPEG library */
|
struct jpeg_progress_mgr pub; /* fields known to JPEG library */
|
||||||
int completed_extra_passes; /* extra passes completed */
|
int completed_extra_passes; /* extra passes completed */
|
||||||
int total_extra_passes; /* total extra */
|
int total_extra_passes; /* total extra */
|
||||||
|
JDIMENSION max_scans; /* abort if the number of scans exceeds this
|
||||||
|
value and the value is non-zero */
|
||||||
|
boolean report; /* whether or not to report progress */
|
||||||
/* last printed percentage stored here to avoid multiple printouts */
|
/* last printed percentage stored here to avoid multiple printouts */
|
||||||
int percent_done;
|
int percent_done;
|
||||||
};
|
};
|
||||||
@@ -88,15 +103,14 @@ typedef struct cdjpeg_progress_mgr *cd_progress_ptr;
|
|||||||
|
|
||||||
/* Module selection routines for I/O modules. */
|
/* Module selection routines for I/O modules. */
|
||||||
|
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_bmp (j_compress_ptr cinfo);
|
EXTERN(cjpeg_source_ptr) jinit_read_bmp(j_compress_ptr cinfo,
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_bmp (j_decompress_ptr cinfo,
|
boolean use_inversion_array);
|
||||||
boolean is_os2);
|
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(cjpeg_source_ptr) jinit_read_gif(j_compress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_gif (j_decompress_ptr cinfo);
|
EXTERN(djpeg_dest_ptr) jinit_write_gif(j_decompress_ptr cinfo, boolean is_lzw);
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_ppm(j_compress_ptr cinfo);
|
EXTERN(cjpeg_source_ptr) jinit_read_ppm(j_compress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_ppm(j_decompress_ptr cinfo);
|
EXTERN(djpeg_dest_ptr) jinit_write_ppm(j_decompress_ptr cinfo);
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_rle (j_compress_ptr cinfo);
|
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_rle (j_decompress_ptr cinfo);
|
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_targa(j_compress_ptr cinfo);
|
EXTERN(cjpeg_source_ptr) jinit_read_targa(j_compress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_targa(j_decompress_ptr cinfo);
|
EXTERN(djpeg_dest_ptr) jinit_write_targa(j_decompress_ptr cinfo);
|
||||||
|
|
||||||
@@ -116,7 +130,6 @@ EXTERN(void) read_color_map (j_decompress_ptr cinfo, FILE *infile);
|
|||||||
|
|
||||||
/* common support routines (in cdjpeg.c) */
|
/* common support routines (in cdjpeg.c) */
|
||||||
|
|
||||||
EXTERN(void) enable_signal_catcher (j_common_ptr cinfo);
|
|
||||||
EXTERN(void) start_progress_monitor(j_common_ptr cinfo,
|
EXTERN(void) start_progress_monitor(j_common_ptr cinfo,
|
||||||
cd_progress_ptr progress);
|
cd_progress_ptr progress);
|
||||||
EXTERN(void) end_progress_monitor(j_common_ptr cinfo);
|
EXTERN(void) end_progress_monitor(j_common_ptr cinfo);
|
||||||
@@ -143,3 +156,6 @@ EXTERN(FILE *) write_stdout (void);
|
|||||||
#ifndef EXIT_WARNING
|
#ifndef EXIT_WARNING
|
||||||
#define EXIT_WARNING 2
|
#define EXIT_WARNING 2
|
||||||
#endif
|
#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
|
CHANGE LOG for Independent JPEG Group's JPEG software
|
||||||
|
|
||||||
|
|
||||||
|
Version 9d 12-Jan-2020
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Restore GIF read and write support from libjpeg version 6a.
|
||||||
|
Thank to Wolfgang Werner (W.W.) Heinz for suggestion.
|
||||||
|
|
||||||
|
Add jpegtran -drop option; add options to the crop extension and wipe
|
||||||
|
to fill the extra area with content from the source image region,
|
||||||
|
instead of gray out.
|
||||||
|
|
||||||
|
|
||||||
|
Version 9c 14-Jan-2018
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
jpegtran: add an option to the -wipe switch to fill the region
|
||||||
|
with the average of adjacent blocks, instead of gray out.
|
||||||
|
Thank to Caitlyn Feddock and Maddie Ziegler for inspiration.
|
||||||
|
|
||||||
|
|
||||||
Version 9b 17-Jan-2016
|
Version 9b 17-Jan-2016
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
@@ -13,6 +32,13 @@ Document 'f' specifier for jpegtran -crop specification.
|
|||||||
Thank to Michele Martone for suggestion.
|
Thank to Michele Martone for suggestion.
|
||||||
|
|
||||||
|
|
||||||
|
Version 9a 19-Jan-2014
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Add jpegtran -wipe option and extension for -crop.
|
||||||
|
Thank to Andrew Senior, David Clunie, and Josef Schmid for suggestion.
|
||||||
|
|
||||||
|
|
||||||
Version 9 13-Jan-2013
|
Version 9 13-Jan-2013
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
@@ -138,11 +164,6 @@ Huffman tables being used.
|
|||||||
|
|
||||||
Huffman tables are checked for validity much more carefully than before.
|
Huffman tables are checked for validity much more carefully than before.
|
||||||
|
|
||||||
To avoid the Unisys LZW patent, djpeg's GIF output capability has been
|
|
||||||
changed to produce "uncompressed GIFs", and cjpeg's GIF input capability
|
|
||||||
has been removed altogether. We're not happy about it either, but there
|
|
||||||
seems to be no good alternative.
|
|
||||||
|
|
||||||
The configure script now supports building libjpeg as a shared library
|
The configure script now supports building libjpeg as a shared library
|
||||||
on many flavors of Unix (all the ones that GNU libtool knows how to
|
on many flavors of Unix (all the ones that GNU libtool knows how to
|
||||||
build shared libraries for). Use "./configure --enable-shared" to
|
build shared libraries for). Use "./configure --enable-shared" to
|
||||||
|
|||||||
78
cjpeg.1
@@ -1,4 +1,4 @@
|
|||||||
.TH CJPEG 1 "17 February 2016"
|
.TH CJPEG 1 "30 November 2021"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
cjpeg \- compress an image file to a JPEG file
|
cjpeg \- compress an image file to a JPEG file
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -16,8 +16,7 @@ cjpeg \- compress an image file to a JPEG file
|
|||||||
compresses the named image file, or the standard input if no file is
|
compresses the named image file, or the standard input if no file is
|
||||||
named, and produces a JPEG/JFIF file on the standard output.
|
named, and produces a JPEG/JFIF file on the standard output.
|
||||||
The currently supported input file formats are: PPM (PBMPLUS color
|
The currently supported input file formats are: PPM (PBMPLUS color
|
||||||
format), PGM (PBMPLUS grayscale format), BMP, Targa, and RLE (Utah Raster
|
format), PGM (PBMPLUS grayscale format), BMP, GIF, and Targa.
|
||||||
Toolkit format). (RLE is supported only if the URT library is available.)
|
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
All switch names may be abbreviated; for example,
|
All switch names may be abbreviated; for example,
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
@@ -41,11 +40,7 @@ Scale quantization tables to adjust image quality. Quality is 0 (worst) to
|
|||||||
100 (best); default is 75. (See below for more info.)
|
100 (best); default is 75. (See below for more info.)
|
||||||
.TP
|
.TP
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
Create monochrome JPEG file from color input. Be sure to use this switch when
|
Create monochrome JPEG file from color input. By saying
|
||||||
compressing a grayscale BMP file, because
|
|
||||||
.B cjpeg
|
|
||||||
isn't bright enough to notice whether a BMP file uses only shades of gray.
|
|
||||||
By saying
|
|
||||||
.BR \-grayscale,
|
.BR \-grayscale,
|
||||||
you'll get a smaller JPEG file that takes less time to process.
|
you'll get a smaller JPEG file that takes less time to process.
|
||||||
.TP
|
.TP
|
||||||
@@ -161,31 +156,43 @@ arithmetic coded JPEG is not yet widely implemented, so many decoders will be
|
|||||||
unable to view an arithmetic coded JPEG file at all.
|
unable to view an arithmetic coded JPEG file at all.
|
||||||
.TP
|
.TP
|
||||||
.B \-dct int
|
.B \-dct int
|
||||||
Use integer DCT method (default).
|
Use accurate integer DCT method (default).
|
||||||
.TP
|
.TP
|
||||||
.B \-dct fast
|
.B \-dct fast
|
||||||
Use fast integer DCT (less accurate).
|
Use less accurate integer DCT method [legacy feature].
|
||||||
In libjpeg-turbo, the fast method is generally about 5-15% faster than the int
|
When the Independent JPEG Group's software was first released in 1991, the
|
||||||
method when using the x86/x86-64 SIMD extensions (results may vary with other
|
compression time for a 1-megapixel JPEG image on a mainstream PC was measured
|
||||||
SIMD implementations, or when using libjpeg-turbo without SIMD extensions.)
|
in minutes. Thus, the \fBfast\fR integer DCT algorithm provided noticeable
|
||||||
|
performance benefits. On modern CPUs running libjpeg-turbo, however, the
|
||||||
|
compression time for a 1-megapixel JPEG image is measured in milliseconds, and
|
||||||
|
thus the performance benefits of the \fBfast\fR algorithm are much less
|
||||||
|
noticeable. On modern x86/x86-64 CPUs that support AVX2 instructions, the
|
||||||
|
\fBfast\fR and \fBint\fR methods have similar performance. On other types of
|
||||||
|
CPUs, the \fBfast\fR method is generally about 5-15% faster than the \fBint\fR
|
||||||
|
method.
|
||||||
|
|
||||||
For quality levels of 90 and below, there should be little or no perceptible
|
For quality levels of 90 and below, there should be little or no perceptible
|
||||||
difference between the two algorithms. For quality levels above 90, however,
|
quality difference between the two algorithms. For quality levels above 90,
|
||||||
the difference between the fast and the int methods becomes more pronounced.
|
however, the difference between the \fBfast\fR and \fBint\fR methods becomes
|
||||||
With quality=97, for instance, the fast method incurs generally about a 1-3 dB
|
more pronounced. With quality=97, for instance, the \fBfast\fR method incurs
|
||||||
loss (in PSNR) relative to the int method, but this can be larger for some
|
generally about a 1-3 dB loss in PSNR relative to the \fBint\fR method, but
|
||||||
images. Do not use the fast method with quality levels above 97. The
|
this can be larger for some images. Do not use the \fBfast\fR method with
|
||||||
algorithm often degenerates at quality=98 and above and can actually produce a
|
quality levels above 97. The algorithm often degenerates at quality=98 and
|
||||||
more lossy image than if lower quality levels had been used. Also, in
|
above and can actually produce a more lossy image than if lower quality levels
|
||||||
libjpeg-turbo, the fast method is not fully accelerated for quality levels
|
had been used. Also, in libjpeg-turbo, the \fBfast\fR method is not fully
|
||||||
above 97, so it will be slower than the int method.
|
accelerated for quality levels above 97, so it will be slower than the
|
||||||
|
\fBint\fR method.
|
||||||
.TP
|
.TP
|
||||||
.B \-dct float
|
.B \-dct float
|
||||||
Use floating-point DCT method.
|
Use floating-point DCT method [legacy feature].
|
||||||
The float method is mainly a legacy feature. It does not produce significantly
|
The \fBfloat\fR method does not produce significantly more accurate results
|
||||||
more accurate results than the int method, and it is much slower. The float
|
than the \fBint\fR method, and it is much slower. The \fBfloat\fR method may
|
||||||
method may also give different results on different machines due to varying
|
also give different results on different machines due to varying roundoff
|
||||||
roundoff behavior, whereas the integer methods should give the same results on
|
behavior, whereas the integer methods should give the same results on all
|
||||||
all machines.
|
machines.
|
||||||
|
.TP
|
||||||
|
.BI \-icc " file"
|
||||||
|
Embed ICC color management profile contained in the specified file.
|
||||||
.TP
|
.TP
|
||||||
.BI \-restart " N"
|
.BI \-restart " N"
|
||||||
Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is
|
Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is
|
||||||
@@ -202,7 +209,7 @@ Set limit for amount of memory to use in processing large images. Value is
|
|||||||
in thousands of bytes, or millions of bytes if "M" is attached to the
|
in thousands of bytes, or millions of bytes if "M" is attached to the
|
||||||
number. For example,
|
number. For example,
|
||||||
.B \-max 4m
|
.B \-max 4m
|
||||||
selects 4000000 bytes. If more space is needed, temporary files will be used.
|
selects 4000000 bytes. If more space is needed, an error will occur.
|
||||||
.TP
|
.TP
|
||||||
.BI \-outfile " name"
|
.BI \-outfile " name"
|
||||||
Send output image to the named file, not to standard output.
|
Send output image to the named file, not to standard output.
|
||||||
@@ -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
|
way of testing the in-memory destination manager (jpeg_mem_dest()), but it is
|
||||||
also useful for benchmarking, since it reduces the I/O overhead.
|
also useful for benchmarking, since it reduces the I/O overhead.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-report
|
||||||
|
Report compression progress.
|
||||||
|
.TP
|
||||||
|
.BI \-strict
|
||||||
|
Treat all warnings as fatal. Enabling this option will cause the compressor to
|
||||||
|
abort if an LZW-compressed GIF input image contains incomplete or corrupt image
|
||||||
|
data.
|
||||||
|
.TP
|
||||||
.B \-verbose
|
.B \-verbose
|
||||||
Enable debug printout. More
|
Enable debug printout. More
|
||||||
.BR \-v 's
|
.BR \-v 's
|
||||||
@@ -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
|
relevant to libjpeg-turbo, to wordsmith certain sections, and to describe
|
||||||
features not present in libjpeg.
|
features not present in libjpeg.
|
||||||
.SH ISSUES
|
.SH ISSUES
|
||||||
Support for GIF input files was removed in cjpeg v6b due to concerns over
|
|
||||||
the Unisys LZW patent. Although this patent expired in 2006, cjpeg still
|
|
||||||
lacks GIF support, for these historical reasons. (Conversion of GIF files to
|
|
||||||
JPEG is usually a bad idea anyway, since GIF is a 256-color format.)
|
|
||||||
.PP
|
|
||||||
Not all variants of BMP and Targa file formats are supported.
|
Not all variants of BMP and Targa file formats are supported.
|
||||||
.PP
|
.PP
|
||||||
The
|
The
|
||||||
|
|||||||
196
cjpeg.c
@@ -5,7 +5,7 @@
|
|||||||
* Copyright (C) 1991-1998, Thomas G. Lane.
|
* Copyright (C) 1991-1998, Thomas G. Lane.
|
||||||
* Modified 2003-2011 by Guido Vollbeding.
|
* Modified 2003-2011 by Guido Vollbeding.
|
||||||
* libjpeg-turbo Modifications:
|
* libjpeg-turbo Modifications:
|
||||||
* Copyright (C) 2010, 2013-2014, D. R. Commander.
|
* Copyright (C) 2010, 2013-2014, 2017, 2019-2022, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
* file.
|
* file.
|
||||||
*
|
*
|
||||||
@@ -27,20 +27,17 @@
|
|||||||
* works regardless of which command line style is used.
|
* works regardless of which command line style is used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
#define JPEG_INTERNALS
|
||||||
|
#endif
|
||||||
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
||||||
#include "jversion.h" /* for version message */
|
#include "jversion.h" /* for version message */
|
||||||
#include "jconfigint.h"
|
#include "jconfigint.h"
|
||||||
|
|
||||||
#ifdef USE_CCOMMAND /* command-line reader for Macintosh */
|
|
||||||
#ifdef __MWERKS__
|
|
||||||
#include <SIOUX.h> /* Metrowerks needs this */
|
|
||||||
#include <console.h> /* ... and this */
|
|
||||||
#endif
|
|
||||||
#ifdef THINK_C
|
|
||||||
#include <console.h> /* Think declares it here */
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Create the add-on message string table. */
|
/* Create the add-on message string table. */
|
||||||
|
|
||||||
@@ -64,9 +61,9 @@ static const char * const cdjpeg_message_table[] = {
|
|||||||
* 2) assume we can push back more than one character (works in
|
* 2) assume we can push back more than one character (works in
|
||||||
* some C implementations, but unportable);
|
* some C implementations, but unportable);
|
||||||
* 3) provide our own buffering (breaks input readers that want to use
|
* 3) provide our own buffering (breaks input readers that want to use
|
||||||
* stdio directly, such as the RLE library);
|
* stdio directly);
|
||||||
* or 4) don't put back the data, and modify the input_init methods to assume
|
* or 4) don't put back the data, and modify the input_init methods to assume
|
||||||
* they start reading after the start of file (also breaks RLE library).
|
* they start reading after the start of file.
|
||||||
* #1 is attractive for MS-DOS but is untenable on Unix.
|
* #1 is attractive for MS-DOS but is untenable on Unix.
|
||||||
*
|
*
|
||||||
* The most portable solution for file types that can't be identified by their
|
* The most portable solution for file types that can't be identified by their
|
||||||
@@ -102,7 +99,7 @@ select_file_type (j_compress_ptr cinfo, FILE *infile)
|
|||||||
switch (c) {
|
switch (c) {
|
||||||
#ifdef BMP_SUPPORTED
|
#ifdef BMP_SUPPORTED
|
||||||
case 'B':
|
case 'B':
|
||||||
return jinit_read_bmp(cinfo);
|
return jinit_read_bmp(cinfo, TRUE);
|
||||||
#endif
|
#endif
|
||||||
#ifdef GIF_SUPPORTED
|
#ifdef GIF_SUPPORTED
|
||||||
case 'G':
|
case 'G':
|
||||||
@@ -112,10 +109,6 @@ select_file_type (j_compress_ptr cinfo, FILE *infile)
|
|||||||
case 'P':
|
case 'P':
|
||||||
return jinit_read_ppm(cinfo);
|
return jinit_read_ppm(cinfo);
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLE_SUPPORTED
|
|
||||||
case 'R':
|
|
||||||
return jinit_read_rle(cinfo);
|
|
||||||
#endif
|
|
||||||
#ifdef TARGA_SUPPORTED
|
#ifdef TARGA_SUPPORTED
|
||||||
case 0x00:
|
case 0x00:
|
||||||
return jinit_read_targa(cinfo);
|
return jinit_read_targa(cinfo);
|
||||||
@@ -139,8 +132,50 @@ select_file_type (j_compress_ptr cinfo, FILE *infile)
|
|||||||
|
|
||||||
|
|
||||||
static const char *progname; /* program name for error messages */
|
static const char *progname; /* program name for error messages */
|
||||||
|
static char *icc_filename; /* for -icc switch */
|
||||||
static char *outfilename; /* for -outfile switch */
|
static char *outfilename; /* for -outfile switch */
|
||||||
boolean memdst; /* for -memdst switch */
|
boolean memdst; /* for -memdst switch */
|
||||||
|
boolean report; /* for -report switch */
|
||||||
|
boolean strict; /* for -strict switch */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
|
||||||
|
#include <setjmp.h>
|
||||||
|
|
||||||
|
struct my_error_mgr {
|
||||||
|
struct jpeg_error_mgr pub;
|
||||||
|
jmp_buf setjmp_buffer;
|
||||||
|
};
|
||||||
|
|
||||||
|
void my_error_exit(j_common_ptr cinfo)
|
||||||
|
{
|
||||||
|
struct my_error_mgr *myerr = (struct my_error_mgr *)cinfo->err;
|
||||||
|
|
||||||
|
longjmp(myerr->setjmp_buffer, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void my_emit_message_fuzzer(j_common_ptr cinfo, int msg_level)
|
||||||
|
{
|
||||||
|
if (msg_level < 0)
|
||||||
|
cinfo->err->num_warnings++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define HANDLE_ERROR() { \
|
||||||
|
if (cinfo.global_state > CSTATE_START) { \
|
||||||
|
if (memdst && outbuffer) \
|
||||||
|
(*cinfo.dest->term_destination) (&cinfo); \
|
||||||
|
jpeg_abort_compress(&cinfo); \
|
||||||
|
} \
|
||||||
|
jpeg_destroy_compress(&cinfo); \
|
||||||
|
if (input_file != stdin && input_file != NULL) \
|
||||||
|
fclose(input_file); \
|
||||||
|
if (memdst) \
|
||||||
|
free(outbuffer); \
|
||||||
|
return EXIT_FAILURE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
LOCAL(void)
|
LOCAL(void)
|
||||||
@@ -173,17 +208,18 @@ usage (void)
|
|||||||
fprintf(stderr, " -arithmetic Use arithmetic coding\n");
|
fprintf(stderr, " -arithmetic Use arithmetic coding\n");
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_ISLOW_SUPPORTED
|
#ifdef DCT_ISLOW_SUPPORTED
|
||||||
fprintf(stderr, " -dct int Use integer DCT method%s\n",
|
fprintf(stderr, " -dct int Use accurate integer DCT method%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_IFAST_SUPPORTED
|
#ifdef DCT_IFAST_SUPPORTED
|
||||||
fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n",
|
fprintf(stderr, " -dct fast Use less accurate integer DCT method [legacy feature]%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_FLOAT_SUPPORTED
|
#ifdef DCT_FLOAT_SUPPORTED
|
||||||
fprintf(stderr, " -dct float Use floating-point DCT method%s\n",
|
fprintf(stderr, " -dct float Use floating-point DCT method [legacy feature]%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
|
fprintf(stderr, " -icc FILE Embed ICC profile contained in FILE\n");
|
||||||
fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n");
|
fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n");
|
||||||
#ifdef INPUT_SMOOTHING_SUPPORTED
|
#ifdef INPUT_SMOOTHING_SUPPORTED
|
||||||
fprintf(stderr, " -smooth N Smooth dithered input (N=1..100 is strength)\n");
|
fprintf(stderr, " -smooth N Smooth dithered input (N=1..100 is strength)\n");
|
||||||
@@ -193,15 +229,17 @@ usage (void)
|
|||||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
fprintf(stderr, " -memdst Compress to memory instead of file (useful for benchmarking)\n");
|
fprintf(stderr, " -memdst Compress to memory instead of file (useful for benchmarking)\n");
|
||||||
#endif
|
#endif
|
||||||
|
fprintf(stderr, " -report Report compression progress\n");
|
||||||
|
fprintf(stderr, " -strict Treat all warnings as fatal\n");
|
||||||
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
||||||
fprintf(stderr, " -version Print version information and exit\n");
|
fprintf(stderr, " -version Print version information and exit\n");
|
||||||
fprintf(stderr, "Switches for wizards:\n");
|
fprintf(stderr, "Switches for wizards:\n");
|
||||||
fprintf(stderr, " -baseline Force baseline quantization tables\n");
|
fprintf(stderr, " -baseline Force baseline quantization tables\n");
|
||||||
fprintf(stderr, " -qtables file Use quantization tables given in file\n");
|
fprintf(stderr, " -qtables FILE Use quantization tables given in FILE\n");
|
||||||
fprintf(stderr, " -qslots N[,...] Set component quantization tables\n");
|
fprintf(stderr, " -qslots N[,...] Set component quantization tables\n");
|
||||||
fprintf(stderr, " -sample HxV[,...] Set component sampling factors\n");
|
fprintf(stderr, " -sample HxV[,...] Set component sampling factors\n");
|
||||||
#ifdef C_MULTISCAN_FILES_SUPPORTED
|
#ifdef C_MULTISCAN_FILES_SUPPORTED
|
||||||
fprintf(stderr, " -scans file Create multi-scan JPEG per script file\n");
|
fprintf(stderr, " -scans FILE Create multi-scan JPEG per script FILE\n");
|
||||||
#endif
|
#endif
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@@ -234,8 +272,11 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
force_baseline = FALSE; /* by default, allow 16-bit quantizers */
|
force_baseline = FALSE; /* by default, allow 16-bit quantizers */
|
||||||
simple_progressive = FALSE;
|
simple_progressive = FALSE;
|
||||||
is_targa = FALSE;
|
is_targa = FALSE;
|
||||||
|
icc_filename = NULL;
|
||||||
outfilename = NULL;
|
outfilename = NULL;
|
||||||
memdst = FALSE;
|
memdst = FALSE;
|
||||||
|
report = FALSE;
|
||||||
|
strict = FALSE;
|
||||||
cinfo->err->trace_level = 0;
|
cinfo->err->trace_level = 0;
|
||||||
|
|
||||||
/* Scan command line options, adjust parameters */
|
/* Scan command line options, adjust parameters */
|
||||||
@@ -299,7 +340,8 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
PACKAGE_NAME, VERSION, BUILD);
|
PACKAGE_NAME, VERSION, BUILD);
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
|
|
||||||
} else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) {
|
} else if (keymatch(arg, "grayscale", 2) ||
|
||||||
|
keymatch(arg, "greyscale", 2)) {
|
||||||
/* Force a monochrome JPEG file to be generated. */
|
/* Force a monochrome JPEG file to be generated. */
|
||||||
jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
|
jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
|
||||||
|
|
||||||
@@ -307,6 +349,12 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
/* Force an RGB JPEG file to be generated. */
|
/* Force an RGB JPEG file to be generated. */
|
||||||
jpeg_set_colorspace(cinfo, JCS_RGB);
|
jpeg_set_colorspace(cinfo, JCS_RGB);
|
||||||
|
|
||||||
|
} 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)) {
|
} else if (keymatch(arg, "maxmemory", 3)) {
|
||||||
/* Maximum memory in Kb (or Mb with 'm'). */
|
/* Maximum memory in Kb (or Mb with 'm'). */
|
||||||
long lval;
|
long lval;
|
||||||
@@ -380,6 +428,9 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
qtablefile = argv[argn];
|
qtablefile = argv[argn];
|
||||||
/* We postpone actually reading the file in case -quality comes later. */
|
/* We postpone actually reading the file in case -quality comes later. */
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "report", 3)) {
|
||||||
|
report = TRUE;
|
||||||
|
|
||||||
} else if (keymatch(arg, "restart", 1)) {
|
} else if (keymatch(arg, "restart", 1)) {
|
||||||
/* Restart interval in MCU rows (or in MCUs with 'b'). */
|
/* Restart interval in MCU rows (or in MCUs with 'b'). */
|
||||||
long lval;
|
long lval;
|
||||||
@@ -434,6 +485,9 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
usage();
|
usage();
|
||||||
cinfo->smoothing_factor = val;
|
cinfo->smoothing_factor = val;
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "strict", 2)) {
|
||||||
|
strict = TRUE;
|
||||||
|
|
||||||
} else if (keymatch(arg, "targa", 1)) {
|
} else if (keymatch(arg, "targa", 1)) {
|
||||||
/* Input file is Targa format. */
|
/* Input file is Targa format. */
|
||||||
is_targa = TRUE;
|
is_targa = TRUE;
|
||||||
@@ -481,6 +535,19 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
METHODDEF(void)
|
||||||
|
my_emit_message(j_common_ptr cinfo, int msg_level)
|
||||||
|
{
|
||||||
|
if (msg_level < 0) {
|
||||||
|
/* Treat warning as fatal */
|
||||||
|
cinfo->err->error_exit(cinfo);
|
||||||
|
} else {
|
||||||
|
if (cinfo->err->trace_level >= msg_level)
|
||||||
|
cinfo->err->output_message(cinfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The main program.
|
* The main program.
|
||||||
*/
|
*/
|
||||||
@@ -489,23 +556,24 @@ int
|
|||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct jpeg_compress_struct cinfo;
|
struct jpeg_compress_struct cinfo;
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
struct my_error_mgr myerr;
|
||||||
|
struct jpeg_error_mgr &jerr = myerr.pub;
|
||||||
|
#else
|
||||||
struct jpeg_error_mgr jerr;
|
struct jpeg_error_mgr jerr;
|
||||||
#ifdef PROGRESS_REPORT
|
|
||||||
struct cdjpeg_progress_mgr progress;
|
|
||||||
#endif
|
#endif
|
||||||
|
struct cdjpeg_progress_mgr progress;
|
||||||
int file_index;
|
int file_index;
|
||||||
cjpeg_source_ptr src_mgr;
|
cjpeg_source_ptr src_mgr;
|
||||||
FILE *input_file;
|
FILE *input_file = NULL;
|
||||||
|
FILE *icc_file;
|
||||||
|
JOCTET *icc_profile = NULL;
|
||||||
|
long icc_len = 0;
|
||||||
FILE *output_file = NULL;
|
FILE *output_file = NULL;
|
||||||
unsigned char *outbuffer = NULL;
|
unsigned char *outbuffer = NULL;
|
||||||
unsigned long outsize = 0;
|
unsigned long outsize = 0;
|
||||||
JDIMENSION num_scanlines;
|
JDIMENSION num_scanlines;
|
||||||
|
|
||||||
/* On Mac, fetch a command line. */
|
|
||||||
#ifdef USE_CCOMMAND
|
|
||||||
argc = ccommand(&argv);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
progname = argv[0];
|
progname = argv[0];
|
||||||
if (progname == NULL || progname[0] == 0)
|
if (progname == NULL || progname[0] == 0)
|
||||||
progname = "cjpeg"; /* in case C library doesn't provide it */
|
progname = "cjpeg"; /* in case C library doesn't provide it */
|
||||||
@@ -535,6 +603,9 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
||||||
|
|
||||||
|
if (strict)
|
||||||
|
jerr.emit_message = my_emit_message;
|
||||||
|
|
||||||
#ifdef TWO_FILE_COMMANDLINE
|
#ifdef TWO_FILE_COMMANDLINE
|
||||||
if (!memdst) {
|
if (!memdst) {
|
||||||
/* Must have either -outfile switch or explicit output file name */
|
/* Must have either -outfile switch or explicit output file name */
|
||||||
@@ -583,13 +654,51 @@ main (int argc, char **argv)
|
|||||||
output_file = write_stdout();
|
output_file = write_stdout();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
if (icc_filename != NULL) {
|
||||||
start_progress_monitor((j_common_ptr) &cinfo, &progress);
|
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
|
#endif
|
||||||
|
|
||||||
|
if (report) {
|
||||||
|
start_progress_monitor((j_common_ptr)&cinfo, &progress);
|
||||||
|
progress.report = report;
|
||||||
|
}
|
||||||
|
|
||||||
/* Figure out the input file format, and set up to read it. */
|
/* Figure out the input file format, and set up to read it. */
|
||||||
src_mgr = select_file_type(&cinfo, input_file);
|
src_mgr = select_file_type(&cinfo, input_file);
|
||||||
src_mgr->input_file = input_file;
|
src_mgr->input_file = input_file;
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
src_mgr->max_pixels = 1048576;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Read the input file header to obtain file size & colorspace. */
|
/* Read the input file header to obtain file size & colorspace. */
|
||||||
(*src_mgr->start_input) (&cinfo, src_mgr);
|
(*src_mgr->start_input) (&cinfo, src_mgr);
|
||||||
@@ -608,9 +717,17 @@ main (int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
jpeg_stdio_dest(&cinfo, output_file);
|
jpeg_stdio_dest(&cinfo, output_file);
|
||||||
|
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
if (setjmp(myerr.setjmp_buffer))
|
||||||
|
HANDLE_ERROR()
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Start compressor */
|
/* Start compressor */
|
||||||
jpeg_start_compress(&cinfo, TRUE);
|
jpeg_start_compress(&cinfo, TRUE);
|
||||||
|
|
||||||
|
if (icc_profile != NULL)
|
||||||
|
jpeg_write_icc_profile(&cinfo, icc_profile, (unsigned int)icc_len);
|
||||||
|
|
||||||
/* Process data */
|
/* Process data */
|
||||||
while (cinfo.next_scanline < cinfo.image_height) {
|
while (cinfo.next_scanline < cinfo.image_height) {
|
||||||
num_scanlines = (*src_mgr->get_pixel_rows) (&cinfo, src_mgr);
|
num_scanlines = (*src_mgr->get_pixel_rows) (&cinfo, src_mgr);
|
||||||
@@ -628,17 +745,18 @@ main (int argc, char **argv)
|
|||||||
if (output_file != stdout && output_file != NULL)
|
if (output_file != stdout && output_file != NULL)
|
||||||
fclose(output_file);
|
fclose(output_file);
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
if (report)
|
||||||
end_progress_monitor((j_common_ptr)&cinfo);
|
end_progress_monitor((j_common_ptr)&cinfo);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (memdst) {
|
if (memdst) {
|
||||||
|
#ifndef CJPEG_FUZZER
|
||||||
fprintf(stderr, "Compressed size: %lu bytes\n", outsize);
|
fprintf(stderr, "Compressed size: %lu bytes\n", outsize);
|
||||||
if (outbuffer != NULL)
|
#endif
|
||||||
free(outbuffer);
|
free(outbuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(icc_profile);
|
||||||
|
|
||||||
/* All done. */
|
/* All done. */
|
||||||
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
return (jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
||||||
return 0; /* suppress no-return-value warnings */
|
|
||||||
}
|
}
|
||||||
|
|||||||
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(MSVC_IDE)
|
||||||
|
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})")
|
||||||
24
cmakescripts/cmake_uninstall.cmake.in
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# This code is from the CMake FAQ
|
||||||
|
|
||||||
|
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_BINARY_DIR@/install_manifest.txt" files)
|
||||||
|
string(REGEX REPLACE "\n" ";" files "${files}")
|
||||||
|
list(REVERSE files)
|
||||||
|
foreach (file ${files})
|
||||||
|
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
|
||||||
|
if (EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
execute_process(
|
||||||
|
COMMAND "@CMAKE_COMMAND@" -E remove "$ENV{DESTDIR}${file}"
|
||||||
|
OUTPUT_VARIABLE rm_out
|
||||||
|
RESULT_VARIABLE rm_retval
|
||||||
|
)
|
||||||
|
if(NOT ${rm_retval} EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
|
||||||
|
endif (NOT ${rm_retval} EQUAL 0)
|
||||||
|
else (EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
|
||||||
|
endif (EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
endforeach(file)
|
||||||
@@ -24,7 +24,14 @@ file(GLOB FILES
|
|||||||
*_440_*.png
|
*_440_*.png
|
||||||
*_440_*.ppm
|
*_440_*.ppm
|
||||||
*_440_*.jpg
|
*_440_*.jpg
|
||||||
*_440.yuv)
|
*_440.yuv
|
||||||
|
*_411_*.bmp
|
||||||
|
*_411_*.png
|
||||||
|
*_411_*.ppm
|
||||||
|
*_411_*.jpg
|
||||||
|
*_411.yuv
|
||||||
|
tjbenchtest*.log
|
||||||
|
tjexampletest*.log)
|
||||||
|
|
||||||
if(NOT FILES STREQUAL "")
|
if(NOT FILES STREQUAL "")
|
||||||
message(STATUS "Removing test files")
|
message(STATUS "Removing test files")
|
||||||
|
|||||||
61
cmyk.h
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* 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>
|
||||||
|
#include "jconfigint.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 */
|
||||||
611
configure.ac
@@ -1,611 +0,0 @@
|
|||||||
# -*- Autoconf -*-
|
|
||||||
# Process this file with autoconf to produce a configure script.
|
|
||||||
|
|
||||||
AC_PREREQ([2.56])
|
|
||||||
AC_INIT([libjpeg-turbo], [1.5.0])
|
|
||||||
|
|
||||||
AM_INIT_AUTOMAKE([-Wall foreign dist-bzip2])
|
|
||||||
AC_PREFIX_DEFAULT(/opt/libjpeg-turbo)
|
|
||||||
|
|
||||||
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
|
|
||||||
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/libjpeg-turbo/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.
|
|
||||||
|
|
||||||
# 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 libjpeg-turbo backward incompatible with libjpeg v6b.)]))
|
|
||||||
AC_ARG_WITH([jpeg8],
|
|
||||||
AC_HELP_STRING([--with-jpeg8],
|
|
||||||
[Emulate libjpeg v8 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b.)]))
|
|
||||||
if test "x${with_jpeg8}" = "xyes"; then
|
|
||||||
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 libjpeg-turbo shared library (default is determined by the API version)])
|
|
||||||
AC_ARG_VAR(SO_MINOR_VERSION,
|
|
||||||
[Minor version of the libjpeg-turbo shared library (default is determined by the API version)])
|
|
||||||
if test "x$SO_MAJOR_VERSION" = "x"; then
|
|
||||||
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(LIBJPEG_TURBO_VERSION, [$VERSION], [libjpeg-turbo version])
|
|
||||||
|
|
||||||
m4_define(version_triplet,m4_split(AC_PACKAGE_VERSION,[[.]]))
|
|
||||||
m4_define(version_major,m4_argn(1,version_triplet))
|
|
||||||
m4_define(version_minor,m4_argn(2,version_triplet))
|
|
||||||
m4_define(version_revision,m4_argn(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 libjpeg-turbo (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_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_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 libjpeg-turbo])
|
|
||||||
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: libjpeg-turbo)])
|
|
||||||
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/libjpeg-turbo.spec.tmpl:release/libjpeg-turbo.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!
|
||||||
118
djpeg.1
@@ -1,4 +1,4 @@
|
|||||||
.TH DJPEG 1 "18 February 2016"
|
.TH DJPEG 1 "4 November 2020"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
djpeg \- decompress a JPEG file to an image file
|
djpeg \- decompress a JPEG file to an image file
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -15,8 +15,7 @@ djpeg \- decompress a JPEG file to an image file
|
|||||||
.B djpeg
|
.B djpeg
|
||||||
decompresses the named JPEG file, or the standard input if no file is named,
|
decompresses the named JPEG file, or the standard input if no file is named,
|
||||||
and produces an image file on the standard output. PBMPLUS (PPM/PGM), BMP,
|
and produces an image file on the standard output. PBMPLUS (PPM/PGM), BMP,
|
||||||
GIF, Targa, or RLE (Utah Raster Toolkit) output format can be selected.
|
GIF, or Targa output format can be selected.
|
||||||
(RLE is supported only if the URT library is available.)
|
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
All switch names may be abbreviated; for example,
|
All switch names may be abbreviated; for example,
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
@@ -81,9 +80,20 @@ is specified, or if the JPEG file is grayscale; otherwise, 24-bit full-color
|
|||||||
format is emitted.
|
format is emitted.
|
||||||
.TP
|
.TP
|
||||||
.B \-gif
|
.B \-gif
|
||||||
Select GIF output format. Since GIF does not support more than 256 colors,
|
Select GIF output format (LZW-compressed). Since GIF does not support more
|
||||||
|
than 256 colors,
|
||||||
.B \-colors 256
|
.B \-colors 256
|
||||||
is assumed (unless you specify a smaller number of colors).
|
is assumed (unless you specify a smaller number of colors). If you specify
|
||||||
|
.BR \-fast,
|
||||||
|
the default number of colors is 216.
|
||||||
|
.TP
|
||||||
|
.B \-gif0
|
||||||
|
Select GIF output format (uncompressed). Since GIF does not support more than
|
||||||
|
256 colors,
|
||||||
|
.B \-colors 256
|
||||||
|
is assumed (unless you specify a smaller number of colors). If you specify
|
||||||
|
.BR \-fast,
|
||||||
|
the default number of colors is 216.
|
||||||
.TP
|
.TP
|
||||||
.B \-os2
|
.B \-os2
|
||||||
Select BMP output format (OS/2 1.x flavor). 8-bit colormapped format is
|
Select BMP output format (OS/2 1.x flavor). 8-bit colormapped format is
|
||||||
@@ -100,9 +110,6 @@ PGM is emitted if the JPEG file is grayscale or if
|
|||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
is specified; otherwise PPM is emitted.
|
is specified; otherwise PPM is emitted.
|
||||||
.TP
|
.TP
|
||||||
.B \-rle
|
|
||||||
Select RLE output format. (Requires URT library.)
|
|
||||||
.TP
|
|
||||||
.B \-targa
|
.B \-targa
|
||||||
Select Targa output format. Grayscale format is emitted if the JPEG file is
|
Select Targa output format. Grayscale format is emitted if the JPEG file is
|
||||||
grayscale or if
|
grayscale or if
|
||||||
@@ -114,32 +121,40 @@ is specified; otherwise, 24-bit full-color format is emitted.
|
|||||||
Switches for advanced users:
|
Switches for advanced users:
|
||||||
.TP
|
.TP
|
||||||
.B \-dct int
|
.B \-dct int
|
||||||
Use integer DCT method (default).
|
Use accurate integer DCT method (default).
|
||||||
.TP
|
.TP
|
||||||
.B \-dct fast
|
.B \-dct fast
|
||||||
Use fast integer DCT (less accurate).
|
Use less accurate integer DCT method [legacy feature].
|
||||||
In libjpeg-turbo, the fast method is generally about 5-15% faster than the int
|
When the Independent JPEG Group's software was first released in 1991, the
|
||||||
method when using the x86/x86-64 SIMD extensions (results may vary with other
|
decompression time for a 1-megapixel JPEG image on a mainstream PC was measured
|
||||||
SIMD implementations, or when using libjpeg-turbo without SIMD extensions.) If
|
in minutes. Thus, the \fBfast\fR integer DCT algorithm provided noticeable
|
||||||
the JPEG image was compressed using a quality level of 85 or below, then there
|
performance benefits. On modern CPUs running libjpeg-turbo, however, the
|
||||||
should be little or no perceptible difference between the two algorithms. When
|
decompression time for a 1-megapixel JPEG image is measured in milliseconds,
|
||||||
decompressing images that were compressed using quality levels above 85,
|
and thus the performance benefits of the \fBfast\fR algorithm are much less
|
||||||
however, the difference between the fast and int methods becomes more
|
noticeable. On modern x86/x86-64 CPUs that support AVX2 instructions, the
|
||||||
pronounced. With images compressed using quality=97, for instance, the fast
|
\fBfast\fR and \fBint\fR methods have similar performance. On other types of
|
||||||
method incurs generally about a 4-6 dB loss (in PSNR) relative to the int
|
CPUs, the \fBfast\fR method is generally about 5-15% faster than the \fBint\fR
|
||||||
method, but this can be larger for some images. If you can avoid it, do not
|
method.
|
||||||
use the fast method when decompressing images that were compressed using
|
|
||||||
quality levels above 97. The algorithm often degenerates for such images and
|
If the JPEG image was compressed using a quality level of 85 or below, then
|
||||||
can actually produce a more lossy output image than if the JPEG image had been
|
there should be little or no perceptible quality difference between the two
|
||||||
compressed using lower quality levels.
|
algorithms. When decompressing images that were compressed using quality
|
||||||
|
levels above 85, however, the difference between the \fBfast\fR and \fBint\fR
|
||||||
|
methods becomes more pronounced. With images compressed using quality=97, for
|
||||||
|
instance, the \fBfast\fR method incurs generally about a 4-6 dB loss in PSNR
|
||||||
|
relative to the \fBint\fR method, but this can be larger for some images. If
|
||||||
|
you can avoid it, do not use the \fBfast\fR method when decompressing images
|
||||||
|
that were compressed using quality levels above 97. The algorithm often
|
||||||
|
degenerates for such images and can actually produce a more lossy output image
|
||||||
|
than if the JPEG image had been compressed using lower quality levels.
|
||||||
.TP
|
.TP
|
||||||
.B \-dct float
|
.B \-dct float
|
||||||
Use floating-point DCT method.
|
Use floating-point DCT method [legacy feature].
|
||||||
The float method is mainly a legacy feature. It does not produce significantly
|
The \fBfloat\fR method does not produce significantly more accurate results
|
||||||
more accurate results than the int method, and it is much slower. The float
|
than the \fBint\fR method, and it is much slower. The \fBfloat\fR method may
|
||||||
method may also give different results on different machines due to varying
|
also give different results on different machines due to varying roundoff
|
||||||
roundoff behavior, whereas the integer methods should give the same results on
|
behavior, whereas the integer methods should give the same results on all
|
||||||
all machines.
|
machines.
|
||||||
.TP
|
.TP
|
||||||
.B \-dither fs
|
.B \-dither fs
|
||||||
Use Floyd-Steinberg dithering in color quantization.
|
Use Floyd-Steinberg dithering in color quantization.
|
||||||
@@ -157,6 +172,9 @@ Ordered dither is only available in
|
|||||||
.B \-onepass
|
.B \-onepass
|
||||||
mode.
|
mode.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-icc " file"
|
||||||
|
Extract ICC color management profile to the specified file.
|
||||||
|
.TP
|
||||||
.BI \-map " file"
|
.BI \-map " file"
|
||||||
Quantize to the colors used in the specified image file. This is useful for
|
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
|
producing multiple files with identical color maps, or for forcing a
|
||||||
@@ -185,7 +203,20 @@ Set limit for amount of memory to use in processing large images. Value is
|
|||||||
in thousands of bytes, or millions of bytes if "M" is attached to the
|
in thousands of bytes, or millions of bytes if "M" is attached to the
|
||||||
number. For example,
|
number. For example,
|
||||||
.B \-max 4m
|
.B \-max 4m
|
||||||
selects 4000000 bytes. If more space is needed, temporary files will be used.
|
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
|
.TP
|
||||||
.BI \-outfile " name"
|
.BI \-outfile " name"
|
||||||
Send output image to the named file, not to standard output.
|
Send output image to the named file, not to standard output.
|
||||||
@@ -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
|
Load input file into memory before decompressing. This feature was implemented
|
||||||
mainly as a way of testing the in-memory source manager (jpeg_mem_src().)
|
mainly as a way of testing the in-memory source manager (jpeg_mem_src().)
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-report
|
||||||
|
Report decompression progress.
|
||||||
|
.TP
|
||||||
.BI \-skip " Y0,Y1"
|
.BI \-skip " Y0,Y1"
|
||||||
Decompress all rows of the JPEG image except those between Y0 and Y1
|
Decompress all rows of the JPEG image except those between Y0 and Y1
|
||||||
(inclusive.) Note that if decompression scaling is being used, then Y0 and Y1
|
(inclusive.) Note that if decompression scaling is being used, then Y0 and Y1
|
||||||
@@ -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
|
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
|
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
|
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
|
.TP
|
||||||
.B \-verbose
|
.B \-verbose
|
||||||
Enable debug printout. More
|
Enable debug printout. More
|
||||||
@@ -249,12 +290,6 @@ is fast but much lower quality than the default behavior.
|
|||||||
.B \-dither none
|
.B \-dither none
|
||||||
may give acceptable results in two-pass mode, but is seldom tolerable in
|
may give acceptable results in two-pass mode, but is seldom tolerable in
|
||||||
one-pass mode.
|
one-pass mode.
|
||||||
.PP
|
|
||||||
If you are fortunate enough to have very fast floating point hardware,
|
|
||||||
\fB\-dct float\fR may be even faster than \fB\-dct fast\fR. But on most
|
|
||||||
machines \fB\-dct float\fR is slower than \fB\-dct int\fR; in this case it is
|
|
||||||
not worth using, because its theoretical accuracy advantage is too small to be
|
|
||||||
significant in practice.
|
|
||||||
.SH ENVIRONMENT
|
.SH ENVIRONMENT
|
||||||
.TP
|
.TP
|
||||||
.B JPEGMEM
|
.B JPEGMEM
|
||||||
@@ -283,10 +318,3 @@ Independent JPEG Group
|
|||||||
This file was modified by The libjpeg-turbo Project to include only information
|
This file was modified by The libjpeg-turbo Project to include only information
|
||||||
relevant to libjpeg-turbo, to wordsmith certain sections, and to describe
|
relevant to libjpeg-turbo, to wordsmith certain sections, and to describe
|
||||||
features not present in libjpeg.
|
features not present in libjpeg.
|
||||||
.SH ISSUES
|
|
||||||
Support for compressed GIF output files was removed in djpeg v6b due to
|
|
||||||
concerns over the Unisys LZW patent. Although this patent expired in 2006,
|
|
||||||
djpeg still lacks compressed GIF support, for these historical reasons.
|
|
||||||
(Conversion of JPEG files to GIF is usually a bad idea anyway, since GIF is a
|
|
||||||
256-color format.) The uncompressed GIF files that djpeg generates are larger
|
|
||||||
than they should be, but they are readable by standard GIF decoders.
|
|
||||||
|
|||||||
196
djpeg.c
@@ -3,9 +3,9 @@
|
|||||||
*
|
*
|
||||||
* This file was part of the Independent JPEG Group's software:
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
* Modified 2013 by Guido Vollbeding.
|
* Modified 2013-2019 by Guido Vollbeding.
|
||||||
* libjpeg-turbo Modifications:
|
* libjpeg-turbo Modifications:
|
||||||
* Copyright (C) 2010-2011, 2013-2016, D. R. Commander.
|
* Copyright (C) 2010-2011, 2013-2017, 2019-2020, 2022, D. R. Commander.
|
||||||
* Copyright (C) 2015, Google, Inc.
|
* Copyright (C) 2015, Google, Inc.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
* file.
|
* file.
|
||||||
@@ -28,23 +28,16 @@
|
|||||||
* works regardless of which command line style is used.
|
* works regardless of which command line style is used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
||||||
#include "jversion.h" /* for version message */
|
#include "jversion.h" /* for version message */
|
||||||
#include "jconfigint.h"
|
#include "jconfigint.h"
|
||||||
#include "wrppm.h"
|
|
||||||
|
|
||||||
#include <ctype.h> /* to declare isprint() */
|
#include <ctype.h> /* to declare isprint() */
|
||||||
|
|
||||||
#ifdef USE_CCOMMAND /* command-line reader for Macintosh */
|
|
||||||
#ifdef __MWERKS__
|
|
||||||
#include <SIOUX.h> /* Metrowerks needs this */
|
|
||||||
#include <console.h> /* ... and this */
|
|
||||||
#endif
|
|
||||||
#ifdef THINK_C
|
|
||||||
#include <console.h> /* Think declares it here */
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Create the add-on message string table. */
|
/* Create the add-on message string table. */
|
||||||
|
|
||||||
@@ -65,10 +58,10 @@ static const char * const cdjpeg_message_table[] = {
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FMT_BMP, /* BMP format (Windows flavor) */
|
FMT_BMP, /* BMP format (Windows flavor) */
|
||||||
FMT_GIF, /* GIF format */
|
FMT_GIF, /* GIF format (LZW-compressed) */
|
||||||
|
FMT_GIF0, /* GIF format (uncompressed) */
|
||||||
FMT_OS2, /* BMP format (OS/2 flavor) */
|
FMT_OS2, /* BMP format (OS/2 flavor) */
|
||||||
FMT_PPM, /* PPM/PGM (PBMPLUS formats) */
|
FMT_PPM, /* PPM/PGM (PBMPLUS formats) */
|
||||||
FMT_RLE, /* RLE format */
|
|
||||||
FMT_TARGA, /* Targa format */
|
FMT_TARGA, /* Targa format */
|
||||||
FMT_TIFF /* TIFF format */
|
FMT_TIFF /* TIFF format */
|
||||||
} IMAGE_FORMATS;
|
} IMAGE_FORMATS;
|
||||||
@@ -90,11 +83,15 @@ static IMAGE_FORMATS requested_fmt;
|
|||||||
|
|
||||||
|
|
||||||
static const char *progname; /* program name for error messages */
|
static const char *progname; /* program name for error messages */
|
||||||
|
static char *icc_filename; /* for -icc switch */
|
||||||
|
JDIMENSION max_scans; /* for -maxscans switch */
|
||||||
static char *outfilename; /* for -outfile switch */
|
static char *outfilename; /* for -outfile switch */
|
||||||
boolean memsrc; /* for -memsrc switch */
|
boolean memsrc; /* for -memsrc switch */
|
||||||
|
boolean report; /* for -report switch */
|
||||||
boolean skip, crop;
|
boolean skip, crop;
|
||||||
JDIMENSION skip_start, skip_end;
|
JDIMENSION skip_start, skip_end;
|
||||||
JDIMENSION crop_x, crop_y, crop_width, crop_height;
|
JDIMENSION crop_x, crop_y, crop_width, crop_height;
|
||||||
|
boolean strict; /* for -strict switch */
|
||||||
#define INPUT_BUF_SIZE 4096
|
#define INPUT_BUF_SIZE 4096
|
||||||
|
|
||||||
|
|
||||||
@@ -123,8 +120,10 @@ usage (void)
|
|||||||
(DEFAULT_FMT == FMT_BMP ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_BMP ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef GIF_SUPPORTED
|
#ifdef GIF_SUPPORTED
|
||||||
fprintf(stderr, " -gif Select GIF output format%s\n",
|
fprintf(stderr, " -gif Select GIF output format (LZW-compressed)%s\n",
|
||||||
(DEFAULT_FMT == FMT_GIF ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_GIF ? " (default)" : ""));
|
||||||
|
fprintf(stderr, " -gif0 Select GIF output format (uncompressed)%s\n",
|
||||||
|
(DEFAULT_FMT == FMT_GIF0 ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef BMP_SUPPORTED
|
#ifdef BMP_SUPPORTED
|
||||||
fprintf(stderr, " -os2 Select BMP output format (OS/2 style)%s\n",
|
fprintf(stderr, " -os2 Select BMP output format (OS/2 style)%s\n",
|
||||||
@@ -134,30 +133,27 @@ usage (void)
|
|||||||
fprintf(stderr, " -pnm Select PBMPLUS (PPM/PGM) output format%s\n",
|
fprintf(stderr, " -pnm Select PBMPLUS (PPM/PGM) output format%s\n",
|
||||||
(DEFAULT_FMT == FMT_PPM ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_PPM ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLE_SUPPORTED
|
|
||||||
fprintf(stderr, " -rle Select Utah RLE output format%s\n",
|
|
||||||
(DEFAULT_FMT == FMT_RLE ? " (default)" : ""));
|
|
||||||
#endif
|
|
||||||
#ifdef TARGA_SUPPORTED
|
#ifdef TARGA_SUPPORTED
|
||||||
fprintf(stderr, " -targa Select Targa output format%s\n",
|
fprintf(stderr, " -targa Select Targa output format%s\n",
|
||||||
(DEFAULT_FMT == FMT_TARGA ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_TARGA ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, "Switches for advanced users:\n");
|
fprintf(stderr, "Switches for advanced users:\n");
|
||||||
#ifdef DCT_ISLOW_SUPPORTED
|
#ifdef DCT_ISLOW_SUPPORTED
|
||||||
fprintf(stderr, " -dct int Use integer DCT method%s\n",
|
fprintf(stderr, " -dct int Use accurate integer DCT method%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_IFAST_SUPPORTED
|
#ifdef DCT_IFAST_SUPPORTED
|
||||||
fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n",
|
fprintf(stderr, " -dct fast Use less accurate integer DCT method [legacy feature]%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_FLOAT_SUPPORTED
|
#ifdef DCT_FLOAT_SUPPORTED
|
||||||
fprintf(stderr, " -dct float Use floating-point DCT method%s\n",
|
fprintf(stderr, " -dct float Use floating-point DCT method [legacy feature]%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, " -dither fs Use F-S dithering (default)\n");
|
fprintf(stderr, " -dither fs Use F-S dithering (default)\n");
|
||||||
fprintf(stderr, " -dither none Don't use dithering in quantization\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, " -dither ordered Use ordered dither (medium speed, quality)\n");
|
||||||
|
fprintf(stderr, " -icc FILE Extract ICC profile to FILE\n");
|
||||||
#ifdef QUANT_2PASS_SUPPORTED
|
#ifdef QUANT_2PASS_SUPPORTED
|
||||||
fprintf(stderr, " -map FILE Map to colors used in named image file\n");
|
fprintf(stderr, " -map FILE Map to colors used in named image file\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -166,13 +162,16 @@ usage (void)
|
|||||||
fprintf(stderr, " -onepass Use 1-pass quantization (fast, low quality)\n");
|
fprintf(stderr, " -onepass Use 1-pass quantization (fast, low quality)\n");
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n");
|
fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n");
|
||||||
|
fprintf(stderr, " -maxscans N Maximum number of scans to allow in input file\n");
|
||||||
fprintf(stderr, " -outfile name Specify name for output file\n");
|
fprintf(stderr, " -outfile name Specify name for output file\n");
|
||||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
fprintf(stderr, " -memsrc Load input file into memory before decompressing\n");
|
fprintf(stderr, " -memsrc Load input file into memory before decompressing\n");
|
||||||
#endif
|
#endif
|
||||||
|
fprintf(stderr, " -report Report decompression progress\n");
|
||||||
fprintf(stderr, " -skip Y0,Y1 Decompress all rows except those between Y0 and Y1 (inclusive)\n");
|
fprintf(stderr, " -skip Y0,Y1 Decompress all rows except those between Y0 and Y1 (inclusive)\n");
|
||||||
fprintf(stderr, " -crop WxH+X+Y Decompress only a rectangular subregion of the image\n");
|
fprintf(stderr, " -crop WxH+X+Y Decompress only a rectangular subregion of the image\n");
|
||||||
|
fprintf(stderr, " [requires PBMPLUS (PPM/PGM), GIF, or Targa output format]\n");
|
||||||
|
fprintf(stderr, " -strict Treat all warnings as fatal\n");
|
||||||
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
||||||
fprintf(stderr, " -version Print version information and exit\n");
|
fprintf(stderr, " -version Print version information and exit\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
@@ -196,10 +195,14 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
|
|
||||||
/* Set up default JPEG parameters. */
|
/* Set up default JPEG parameters. */
|
||||||
requested_fmt = DEFAULT_FMT; /* set default output file format */
|
requested_fmt = DEFAULT_FMT; /* set default output file format */
|
||||||
|
icc_filename = NULL;
|
||||||
|
max_scans = 0;
|
||||||
outfilename = NULL;
|
outfilename = NULL;
|
||||||
memsrc = FALSE;
|
memsrc = FALSE;
|
||||||
|
report = FALSE;
|
||||||
skip = FALSE;
|
skip = FALSE;
|
||||||
crop = FALSE;
|
crop = FALSE;
|
||||||
|
strict = FALSE;
|
||||||
cinfo->err->trace_level = 0;
|
cinfo->err->trace_level = 0;
|
||||||
|
|
||||||
/* Scan command line options, adjust parameters */
|
/* Scan command line options, adjust parameters */
|
||||||
@@ -217,7 +220,7 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
arg++; /* advance past switch marker character */
|
arg++; /* advance past switch marker character */
|
||||||
|
|
||||||
if (keymatch(arg, "bmp", 1)) {
|
if (keymatch(arg, "bmp", 1)) {
|
||||||
/* BMP output format. */
|
/* BMP output format (Windows flavor). */
|
||||||
requested_fmt = FMT_BMP;
|
requested_fmt = FMT_BMP;
|
||||||
|
|
||||||
} else if (keymatch(arg, "colors", 1) || keymatch(arg, "colours", 1) ||
|
} else if (keymatch(arg, "colors", 1) || keymatch(arg, "colours", 1) ||
|
||||||
@@ -288,10 +291,15 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
cinfo->do_fancy_upsampling = FALSE;
|
cinfo->do_fancy_upsampling = FALSE;
|
||||||
|
|
||||||
} else if (keymatch(arg, "gif", 1)) {
|
} else if (keymatch(arg, "gif", 1)) {
|
||||||
/* GIF output format. */
|
/* GIF output format (LZW-compressed). */
|
||||||
requested_fmt = FMT_GIF;
|
requested_fmt = FMT_GIF;
|
||||||
|
|
||||||
} else if (keymatch(arg, "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. */
|
/* Force monochrome output. */
|
||||||
cinfo->out_color_space = JCS_GRAYSCALE;
|
cinfo->out_color_space = JCS_GRAYSCALE;
|
||||||
|
|
||||||
@@ -303,6 +311,13 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
/* Force RGB565 output. */
|
/* Force RGB565 output. */
|
||||||
cinfo->out_color_space = JCS_RGB565;
|
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];
|
||||||
|
jpeg_save_markers(cinfo, JPEG_APP0 + 2, 0xFFFF);
|
||||||
|
|
||||||
} else if (keymatch(arg, "map", 3)) {
|
} else if (keymatch(arg, "map", 3)) {
|
||||||
/* Quantize to a color map taken from an input file. */
|
/* Quantize to a color map taken from an input file. */
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
@@ -336,6 +351,12 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
lval *= 1000L;
|
lval *= 1000L;
|
||||||
cinfo->mem->max_memory_to_use = lval * 1000L;
|
cinfo->mem->max_memory_to_use = lval * 1000L;
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "maxscans", 4)) {
|
||||||
|
if (++argn >= argc) /* advance to next argument */
|
||||||
|
usage();
|
||||||
|
if (sscanf(argv[argn], "%u", &max_scans) != 1)
|
||||||
|
usage();
|
||||||
|
|
||||||
} else if (keymatch(arg, "nosmooth", 3)) {
|
} else if (keymatch(arg, "nosmooth", 3)) {
|
||||||
/* Suppress fancy upsampling */
|
/* Suppress fancy upsampling */
|
||||||
cinfo->do_fancy_upsampling = FALSE;
|
cinfo->do_fancy_upsampling = FALSE;
|
||||||
@@ -368,9 +389,8 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
/* PPM/PGM output format. */
|
/* PPM/PGM output format. */
|
||||||
requested_fmt = FMT_PPM;
|
requested_fmt = FMT_PPM;
|
||||||
|
|
||||||
} else if (keymatch(arg, "rle", 1)) {
|
} else if (keymatch(arg, "report", 2)) {
|
||||||
/* RLE output format. */
|
report = TRUE;
|
||||||
requested_fmt = FMT_RLE;
|
|
||||||
|
|
||||||
} else if (keymatch(arg, "scale", 2)) {
|
} else if (keymatch(arg, "scale", 2)) {
|
||||||
/* Scale the output image by a fraction M/N. */
|
/* Scale the output image by a fraction M/N. */
|
||||||
@@ -398,6 +418,9 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
usage();
|
usage();
|
||||||
crop = TRUE;
|
crop = TRUE;
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "strict", 2)) {
|
||||||
|
strict = TRUE;
|
||||||
|
|
||||||
} else if (keymatch(arg, "targa", 1)) {
|
} else if (keymatch(arg, "targa", 1)) {
|
||||||
/* Targa output format. */
|
/* Targa output format. */
|
||||||
requested_fmt = FMT_TARGA;
|
requested_fmt = FMT_TARGA;
|
||||||
@@ -429,7 +452,7 @@ jpeg_getc (j_decompress_ptr cinfo)
|
|||||||
ERREXIT(cinfo, JERR_CANT_SUSPEND);
|
ERREXIT(cinfo, JERR_CANT_SUSPEND);
|
||||||
}
|
}
|
||||||
datasrc->bytes_in_buffer--;
|
datasrc->bytes_in_buffer--;
|
||||||
return GETJOCTET(*datasrc->next_input_byte++);
|
return *datasrc->next_input_byte++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -484,6 +507,19 @@ print_text_marker (j_decompress_ptr cinfo)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
METHODDEF(void)
|
||||||
|
my_emit_message(j_common_ptr cinfo, int msg_level)
|
||||||
|
{
|
||||||
|
if (msg_level < 0) {
|
||||||
|
/* Treat warning as fatal */
|
||||||
|
cinfo->err->error_exit(cinfo);
|
||||||
|
} else {
|
||||||
|
if (cinfo->err->trace_level >= msg_level)
|
||||||
|
cinfo->err->output_message(cinfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The main program.
|
* The main program.
|
||||||
*/
|
*/
|
||||||
@@ -493,21 +529,16 @@ main (int argc, char **argv)
|
|||||||
{
|
{
|
||||||
struct jpeg_decompress_struct cinfo;
|
struct jpeg_decompress_struct cinfo;
|
||||||
struct jpeg_error_mgr jerr;
|
struct jpeg_error_mgr jerr;
|
||||||
#ifdef PROGRESS_REPORT
|
|
||||||
struct cdjpeg_progress_mgr progress;
|
struct cdjpeg_progress_mgr progress;
|
||||||
#endif
|
|
||||||
int file_index;
|
int file_index;
|
||||||
djpeg_dest_ptr dest_mgr = NULL;
|
djpeg_dest_ptr dest_mgr = NULL;
|
||||||
FILE *input_file;
|
FILE *input_file;
|
||||||
FILE *output_file;
|
FILE *output_file;
|
||||||
unsigned char *inbuffer = NULL;
|
unsigned char *inbuffer = NULL;
|
||||||
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
unsigned long insize = 0;
|
unsigned long insize = 0;
|
||||||
JDIMENSION num_scanlines;
|
|
||||||
|
|
||||||
/* On Mac, fetch a command line. */
|
|
||||||
#ifdef USE_CCOMMAND
|
|
||||||
argc = ccommand(&argv);
|
|
||||||
#endif
|
#endif
|
||||||
|
JDIMENSION num_scanlines;
|
||||||
|
|
||||||
progname = argv[0];
|
progname = argv[0];
|
||||||
if (progname == NULL || progname[0] == 0)
|
if (progname == NULL || progname[0] == 0)
|
||||||
@@ -540,6 +571,9 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
||||||
|
|
||||||
|
if (strict)
|
||||||
|
jerr.emit_message = my_emit_message;
|
||||||
|
|
||||||
#ifdef TWO_FILE_COMMANDLINE
|
#ifdef TWO_FILE_COMMANDLINE
|
||||||
/* Must have either -outfile switch or explicit output file name */
|
/* Must have either -outfile switch or explicit output file name */
|
||||||
if (outfilename == NULL) {
|
if (outfilename == NULL) {
|
||||||
@@ -586,9 +620,11 @@ main (int argc, char **argv)
|
|||||||
output_file = write_stdout();
|
output_file = write_stdout();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
if (report || max_scans != 0) {
|
||||||
start_progress_monitor((j_common_ptr)&cinfo, &progress);
|
start_progress_monitor((j_common_ptr)&cinfo, &progress);
|
||||||
#endif
|
progress.report = report;
|
||||||
|
progress.max_scans = max_scans;
|
||||||
|
}
|
||||||
|
|
||||||
/* Specify data source for decompression */
|
/* Specify data source for decompression */
|
||||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
||||||
@@ -600,7 +636,7 @@ main (int argc, char **argv)
|
|||||||
fprintf(stderr, "%s: memory allocation failure\n", progname);
|
fprintf(stderr, "%s: memory allocation failure\n", progname);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
nbytes = JFREAD(input_file, &inbuffer[insize], INPUT_BUF_SIZE);
|
nbytes = fread(&inbuffer[insize], 1, INPUT_BUF_SIZE, input_file);
|
||||||
if (nbytes < INPUT_BUF_SIZE && ferror(input_file)) {
|
if (nbytes < INPUT_BUF_SIZE && ferror(input_file)) {
|
||||||
if (file_index < argc)
|
if (file_index < argc)
|
||||||
fprintf(stderr, "%s: can't read from %s\n", progname,
|
fprintf(stderr, "%s: can't read from %s\n", progname,
|
||||||
@@ -628,15 +664,18 @@ main (int argc, char **argv)
|
|||||||
switch (requested_fmt) {
|
switch (requested_fmt) {
|
||||||
#ifdef BMP_SUPPORTED
|
#ifdef BMP_SUPPORTED
|
||||||
case FMT_BMP:
|
case FMT_BMP:
|
||||||
dest_mgr = jinit_write_bmp(&cinfo, FALSE);
|
dest_mgr = jinit_write_bmp(&cinfo, FALSE, TRUE);
|
||||||
break;
|
break;
|
||||||
case FMT_OS2:
|
case FMT_OS2:
|
||||||
dest_mgr = jinit_write_bmp(&cinfo, TRUE);
|
dest_mgr = jinit_write_bmp(&cinfo, TRUE, TRUE);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef GIF_SUPPORTED
|
#ifdef GIF_SUPPORTED
|
||||||
case FMT_GIF:
|
case FMT_GIF:
|
||||||
dest_mgr = jinit_write_gif(&cinfo);
|
dest_mgr = jinit_write_gif(&cinfo, TRUE);
|
||||||
|
break;
|
||||||
|
case FMT_GIF0:
|
||||||
|
dest_mgr = jinit_write_gif(&cinfo, FALSE);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef PPM_SUPPORTED
|
#ifdef PPM_SUPPORTED
|
||||||
@@ -644,11 +683,6 @@ main (int argc, char **argv)
|
|||||||
dest_mgr = jinit_write_ppm(&cinfo);
|
dest_mgr = jinit_write_ppm(&cinfo);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLE_SUPPORTED
|
|
||||||
case FMT_RLE:
|
|
||||||
dest_mgr = jinit_write_rle(&cinfo);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef TARGA_SUPPORTED
|
#ifdef TARGA_SUPPORTED
|
||||||
case FMT_TARGA:
|
case FMT_TARGA:
|
||||||
dest_mgr = jinit_write_targa(&cinfo);
|
dest_mgr = jinit_write_targa(&cinfo);
|
||||||
@@ -672,7 +706,7 @@ main (int argc, char **argv)
|
|||||||
* that skip_start <= skip_end.
|
* that skip_start <= skip_end.
|
||||||
*/
|
*/
|
||||||
if (skip_end > cinfo.output_height - 1) {
|
if (skip_end > cinfo.output_height - 1) {
|
||||||
fprintf(stderr, "%s: skip region exceeds image height %d\n", progname,
|
fprintf(stderr, "%s: skip region exceeds image height %u\n", progname,
|
||||||
cinfo.output_height);
|
cinfo.output_height);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@@ -691,7 +725,12 @@ main (int argc, char **argv)
|
|||||||
dest_mgr->buffer_height);
|
dest_mgr->buffer_height);
|
||||||
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
}
|
}
|
||||||
jpeg_skip_scanlines(&cinfo, skip_end - skip_start + 1);
|
if ((tmp = jpeg_skip_scanlines(&cinfo, skip_end - skip_start + 1)) !=
|
||||||
|
skip_end - skip_start + 1) {
|
||||||
|
fprintf(stderr, "%s: jpeg_skip_scanlines() returned %u rather than %u\n",
|
||||||
|
progname, tmp, skip_end - skip_start + 1);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
while (cinfo.output_scanline < cinfo.output_height) {
|
while (cinfo.output_scanline < cinfo.output_height) {
|
||||||
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
||||||
dest_mgr->buffer_height);
|
dest_mgr->buffer_height);
|
||||||
@@ -707,15 +746,16 @@ main (int argc, char **argv)
|
|||||||
*/
|
*/
|
||||||
if (crop_x + crop_width > cinfo.output_width ||
|
if (crop_x + crop_width > cinfo.output_width ||
|
||||||
crop_y + crop_height > cinfo.output_height) {
|
crop_y + crop_height > cinfo.output_height) {
|
||||||
fprintf(stderr, "%s: crop dimensions exceed image dimensions %d x %d\n",
|
fprintf(stderr, "%s: crop dimensions exceed image dimensions %u x %u\n",
|
||||||
progname, cinfo.output_width, cinfo.output_height);
|
progname, cinfo.output_width, cinfo.output_height);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
jpeg_crop_scanline(&cinfo, &crop_x, &crop_width);
|
jpeg_crop_scanline(&cinfo, &crop_x, &crop_width);
|
||||||
((ppm_dest_ptr) dest_mgr)->buffer_width = cinfo.output_width *
|
if (dest_mgr->calc_buffer_dimensions)
|
||||||
cinfo.out_color_components *
|
(*dest_mgr->calc_buffer_dimensions) (&cinfo, dest_mgr);
|
||||||
sizeof(JSAMPLE);
|
else
|
||||||
|
ERREXIT(&cinfo, JERR_UNSUPPORTED_FORMAT);
|
||||||
|
|
||||||
/* Write output file header. This is a hack to ensure that the destination
|
/* Write output file header. This is a hack to ensure that the destination
|
||||||
* manager creates an output image of the proper size.
|
* manager creates an output image of the proper size.
|
||||||
@@ -726,13 +766,24 @@ main (int argc, char **argv)
|
|||||||
cinfo.output_height = tmp;
|
cinfo.output_height = tmp;
|
||||||
|
|
||||||
/* Process data */
|
/* Process data */
|
||||||
jpeg_skip_scanlines(&cinfo, crop_y);
|
if ((tmp = jpeg_skip_scanlines(&cinfo, crop_y)) != crop_y) {
|
||||||
|
fprintf(stderr, "%s: jpeg_skip_scanlines() returned %u rather than %u\n",
|
||||||
|
progname, tmp, crop_y);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
while (cinfo.output_scanline < crop_y + crop_height) {
|
while (cinfo.output_scanline < crop_y + crop_height) {
|
||||||
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
||||||
dest_mgr->buffer_height);
|
dest_mgr->buffer_height);
|
||||||
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
}
|
}
|
||||||
jpeg_skip_scanlines(&cinfo, cinfo.output_height - crop_y - crop_height);
|
if ((tmp =
|
||||||
|
jpeg_skip_scanlines(&cinfo,
|
||||||
|
cinfo.output_height - crop_y - crop_height)) !=
|
||||||
|
cinfo.output_height - crop_y - crop_height) {
|
||||||
|
fprintf(stderr, "%s: jpeg_skip_scanlines() returned %u rather than %u\n",
|
||||||
|
progname, tmp, cinfo.output_height - crop_y - crop_height);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
/* Normal full-image decompress */
|
/* Normal full-image decompress */
|
||||||
} else {
|
} else {
|
||||||
@@ -747,12 +798,34 @@ main (int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
|
||||||
/* Hack: count final pass as done in case finish_output does an extra pass.
|
/* Hack: count final pass as done in case finish_output does an extra pass.
|
||||||
* The library won't have updated completed_passes.
|
* The library won't have updated completed_passes.
|
||||||
*/
|
*/
|
||||||
|
if (report || max_scans != 0)
|
||||||
progress.pub.completed_passes = progress.pub.total_passes;
|
progress.pub.completed_passes = progress.pub.total_passes;
|
||||||
#endif
|
|
||||||
|
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.
|
/* Finish decompression and release memory.
|
||||||
* I must do it in this order because output module has allocated memory
|
* I must do it in this order because output module has allocated memory
|
||||||
@@ -768,11 +841,10 @@ main (int argc, char **argv)
|
|||||||
if (output_file != stdout)
|
if (output_file != stdout)
|
||||||
fclose(output_file);
|
fclose(output_file);
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
if (report || max_scans != 0)
|
||||||
end_progress_monitor((j_common_ptr)&cinfo);
|
end_progress_monitor((j_common_ptr)&cinfo);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (memsrc && inbuffer != NULL)
|
if (memsrc)
|
||||||
free(inbuffer);
|
free(inbuffer);
|
||||||
|
|
||||||
/* All done. */
|
/* 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">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>TurboJPEG: Data Structures</title>
|
<title>TurboJPEG: Data Structures</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
||||||
</script>
|
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG
|
||||||
 <span id="projectnumber">1.5</span>
|
 <span id="projectnumber">2.1.4</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -32,47 +31,29 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
<!-- Generated by Doxygen 1.8.20 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<ul class="tablist">
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<script type="text/javascript">
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
$(function() {
|
||||||
<li>
|
initMenu('',true,false,'search.php','Search');
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
$(document).ready(function() { init_search(); });
|
||||||
<span class="left">
|
});
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
/* @license-end */</script>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
<div id="main-nav"></div>
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
||||||
alt=""/>
|
|
||||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
||||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
||||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
||||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
||||||
</span><span class="right">
|
|
||||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="navrow2" class="tabs2">
|
|
||||||
<ul class="tablist">
|
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
|
||||||
<li><a href="classes.html"><span>Data Structure Index</span></a></li>
|
|
||||||
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
</div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -88,17 +69,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
|
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
|
||||||
<table class="directory">
|
<table class="directory">
|
||||||
<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtjregion.html" target="_self">tjregion</a></td><td class="desc">Cropping region</td></tr>
|
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtjregion.html" target="_self">tjregion</a></td><td class="desc">Cropping region </td></tr>
|
||||||
<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtjscalingfactor.html" target="_self">tjscalingfactor</a></td><td class="desc">Scaling factor</td></tr>
|
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtjscalingfactor.html" target="_self">tjscalingfactor</a></td><td class="desc">Scaling factor </td></tr>
|
||||||
<tr id="row_2_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtjtransform.html" target="_self">tjtransform</a></td><td class="desc">Lossless transform</td></tr>
|
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtjtransform.html" target="_self">tjtransform</a></td><td class="desc">Lossless transform </td></tr>
|
||||||
</table>
|
</table>
|
||||||
</div><!-- directory -->
|
</div><!-- directory -->
|
||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
||||||
</a> 1.8.3.1
|
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>TurboJPEG: Data Structure Index</title>
|
<title>TurboJPEG: Data Structure Index</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
||||||
</script>
|
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG
|
||||||
 <span id="projectnumber">1.5</span>
|
 <span id="projectnumber">2.1.4</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -32,47 +31,29 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
<!-- Generated by Doxygen 1.8.20 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<ul class="tablist">
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<script type="text/javascript">
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
$(function() {
|
||||||
<li>
|
initMenu('',true,false,'search.php','Search');
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
$(document).ready(function() { init_search(); });
|
||||||
<span class="left">
|
});
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
/* @license-end */</script>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
<div id="main-nav"></div>
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
||||||
alt=""/>
|
|
||||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
||||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
||||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
||||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
||||||
</span><span class="right">
|
|
||||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="navrow2" class="tabs2">
|
|
||||||
<ul class="tablist">
|
|
||||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
|
||||||
<li class="current"><a href="classes.html"><span>Data Structure Index</span></a></li>
|
|
||||||
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
</div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -86,21 +67,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<div class="title">Data Structure Index</div> </div>
|
<div class="title">Data Structure Index</div> </div>
|
||||||
</div><!--header-->
|
</div><!--header-->
|
||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="qindex"><a class="qindex" href="#letter_T">T</a></div>
|
<div class="qindex"><a class="qindex" href="#letter_t">t</a></div>
|
||||||
<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
|
<table class="classindex">
|
||||||
<tr><td rowspan="2" valign="bottom"><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  T  </div></td></tr></table>
|
<tr><td rowspan="2" valign="bottom"><a name="letter_t"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  t  </div></td></tr></table>
|
||||||
</td><td valign="top"><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a>   </td><td valign="top"><a class="el" href="structtjtransform.html">tjtransform</a>   </td><td></td></tr>
|
</td>
|
||||||
|
<td valign="top"><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a>   </td>
|
||||||
|
<td valign="top"><a class="el" href="structtjtransform.html">tjtransform</a>   </td>
|
||||||
|
<td></td></tr>
|
||||||
<tr><td></td><td></td><td></td></tr>
|
<tr><td></td><td></td><td></td></tr>
|
||||||
<tr><td valign="top"><a class="el" href="structtjregion.html">tjregion</a>   </td><td></td><td></td><td></td></tr>
|
<tr><td valign="top"><a class="el" href="structtjregion.html">tjregion</a>   </td>
|
||||||
|
<td></td><td></td><td></td></tr>
|
||||||
<tr><td></td><td></td><td></td><td></td></tr>
|
<tr><td></td><td></td><td></td><td></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div class="qindex"><a class="qindex" href="#letter_T">T</a></div>
|
<div class="qindex"><a class="qindex" href="#letter_t">t</a></div>
|
||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
||||||
</a> 1.8.3.1
|
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 746 B After Width: | Height: | Size: 746 B |
@@ -1,7 +1,11 @@
|
|||||||
/* The standard CSS for doxygen 1.8.3.1 */
|
/* The standard CSS for doxygen 1.8.20 */
|
||||||
|
|
||||||
body, table, div, p, dl {
|
body, table, div, p, dl {
|
||||||
font: 400 14px/19px Roboto,sans-serif;
|
font: 400 14px/22px Roboto,sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.reference, p.definition {
|
||||||
|
font: 400 14px/22px Roboto,sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @group Heading Levels */
|
/* @group Heading Levels */
|
||||||
@@ -11,6 +15,7 @@ h1.groupheader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
|
font: 400 14px/28px Roboto,sans-serif;
|
||||||
font-size: 150%;
|
font-size: 150%;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin: 10px 2px;
|
margin: 10px 2px;
|
||||||
@@ -48,17 +53,28 @@ dt {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.multicol {
|
ul.multicol {
|
||||||
-moz-column-gap: 1em;
|
-moz-column-gap: 1em;
|
||||||
-webkit-column-gap: 1em;
|
-webkit-column-gap: 1em;
|
||||||
|
column-gap: 1em;
|
||||||
-moz-column-count: 3;
|
-moz-column-count: 3;
|
||||||
-webkit-column-count: 3;
|
-webkit-column-count: 3;
|
||||||
|
column-count: 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
p.startli, p.startdd, p.starttd {
|
p.startli, p.startdd {
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
th p.starttd, th p.intertd, th p.endtd {
|
||||||
|
font-size: 100%;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.starttd {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
p.endli {
|
p.endli {
|
||||||
margin-bottom: 0px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
@@ -71,6 +87,15 @@ p.endtd {
|
|||||||
margin-bottom: 2px;
|
margin-bottom: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p.interli {
|
||||||
|
}
|
||||||
|
|
||||||
|
p.interdd {
|
||||||
|
}
|
||||||
|
|
||||||
|
p.intertd {
|
||||||
|
}
|
||||||
|
|
||||||
/* @end */
|
/* @end */
|
||||||
|
|
||||||
caption {
|
caption {
|
||||||
@@ -125,12 +150,12 @@ a.qindex {
|
|||||||
a.qindexHL {
|
a.qindexHL {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
background-color: #9CAFD4;
|
background-color: #9CAFD4;
|
||||||
color: #ffffff;
|
color: #FFFFFF;
|
||||||
border: 1px double #869DCA;
|
border: 1px double #869DCA;
|
||||||
}
|
}
|
||||||
|
|
||||||
.contents a.qindexHL:visited {
|
.contents a.qindexHL:visited {
|
||||||
color: #ffffff;
|
color: #FFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.el {
|
a.el {
|
||||||
@@ -140,11 +165,11 @@ a.el {
|
|||||||
a.elRef {
|
a.elRef {
|
||||||
}
|
}
|
||||||
|
|
||||||
a.code, a.code:visited {
|
a.code, a.code:visited, a.line, a.line:visited {
|
||||||
color: #4665A2;
|
color: #4665A2;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.codeRef, a.codeRef:visited {
|
a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
|
||||||
color: #4665A2;
|
color: #4665A2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,6 +179,25 @@ dl.el {
|
|||||||
margin-left: -1cm;
|
margin-left: -1cm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#side-nav ul {
|
||||||
|
overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
|
||||||
|
}
|
||||||
|
|
||||||
|
#main-nav ul {
|
||||||
|
overflow: visible; /* reset ul rule for the navigation bar drop down lists */
|
||||||
|
}
|
||||||
|
|
||||||
|
.fragment {
|
||||||
|
text-align: left;
|
||||||
|
direction: ltr;
|
||||||
|
overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
|
||||||
|
overflow-y: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
pre.fragment {
|
pre.fragment {
|
||||||
border: 1px solid #C4CFE5;
|
border: 1px solid #C4CFE5;
|
||||||
background-color: #FBFCFD;
|
background-color: #FBFCFD;
|
||||||
@@ -168,8 +212,8 @@ pre.fragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
div.fragment {
|
div.fragment {
|
||||||
padding: 4px;
|
padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
|
||||||
margin: 4px;
|
margin: 4px 8px 4px 2px;
|
||||||
background-color: #FBFCFD;
|
background-color: #FBFCFD;
|
||||||
border: 1px solid #C4CFE5;
|
border: 1px solid #C4CFE5;
|
||||||
}
|
}
|
||||||
@@ -201,6 +245,11 @@ div.line {
|
|||||||
transition-duration: 0.5s;
|
transition-duration: 0.5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.line:after {
|
||||||
|
content:"\000A";
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
|
||||||
div.line.glow {
|
div.line.glow {
|
||||||
background-color: cyan;
|
background-color: cyan;
|
||||||
box-shadow: 0 0 10px cyan;
|
box-shadow: 0 0 10px cyan;
|
||||||
@@ -222,10 +271,19 @@ span.lineno a:hover {
|
|||||||
background-color: #C8C8C8;
|
background-color: #C8C8C8;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.ah {
|
.lineno {
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ah, span.ah {
|
||||||
background-color: black;
|
background-color: black;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #ffffff;
|
color: #FFFFFF;
|
||||||
margin-bottom: 3px;
|
margin-bottom: 3px;
|
||||||
margin-top: 3px;
|
margin-top: 3px;
|
||||||
padding: 0.2em;
|
padding: 0.2em;
|
||||||
@@ -237,7 +295,16 @@ div.ah {
|
|||||||
-webkit-box-shadow: 2px 2px 3px #999;
|
-webkit-box-shadow: 2px 2px 3px #999;
|
||||||
-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
|
-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
|
||||||
background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
|
background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.classindex ul {
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.classindex span.ai {
|
||||||
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.groupHeader {
|
div.groupHeader {
|
||||||
@@ -292,7 +359,7 @@ img.formulaDsp {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
img.formulaInl {
|
img.formulaInl, img.inline {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -370,6 +437,13 @@ blockquote {
|
|||||||
padding: 0 12px 0 16px;
|
padding: 0 12px 0 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
blockquote.DocNodeRTL {
|
||||||
|
border-left: 0;
|
||||||
|
border-right: 2px solid #9CAFD4;
|
||||||
|
margin: 0 4px 0 24px;
|
||||||
|
padding: 0 16px 0 12px;
|
||||||
|
}
|
||||||
|
|
||||||
/* @end */
|
/* @end */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -466,7 +540,7 @@ table.memberdecls {
|
|||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.memItemRight {
|
.memItemRight, .memTemplItemRight {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -482,6 +556,29 @@ table.memberdecls {
|
|||||||
|
|
||||||
/* Styles for detailed member documentation */
|
/* Styles for detailed member documentation */
|
||||||
|
|
||||||
|
.memtitle {
|
||||||
|
padding: 8px;
|
||||||
|
border-top: 1px solid #A8B8D9;
|
||||||
|
border-left: 1px solid #A8B8D9;
|
||||||
|
border-right: 1px solid #A8B8D9;
|
||||||
|
border-top-right-radius: 4px;
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
margin-bottom: -1px;
|
||||||
|
background-image: url('nav_f.png');
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
background-color: #E2E8F2;
|
||||||
|
line-height: 1.25;
|
||||||
|
font-weight: 300;
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.permalink
|
||||||
|
{
|
||||||
|
font-size: 65%;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
.memtemplate {
|
.memtemplate {
|
||||||
font-size: 80%;
|
font-size: 80%;
|
||||||
color: #4665A2;
|
color: #4665A2;
|
||||||
@@ -520,7 +617,7 @@ table.memberdecls {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.memname {
|
.memname {
|
||||||
font-weight: bold;
|
font-weight: 400;
|
||||||
margin-left: 6px;
|
margin-left: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -536,24 +633,24 @@ table.memberdecls {
|
|||||||
color: #253555;
|
color: #253555;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
|
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
|
||||||
background-image:url('nav_f.png');
|
background-color: #DFE5F1;
|
||||||
background-repeat:repeat-x;
|
|
||||||
background-color: #E2E8F2;
|
|
||||||
/* opera specific markup */
|
/* opera specific markup */
|
||||||
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||||
border-top-right-radius: 4px;
|
border-top-right-radius: 4px;
|
||||||
border-top-left-radius: 4px;
|
|
||||||
/* firefox specific markup */
|
/* firefox specific markup */
|
||||||
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
|
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
|
||||||
-moz-border-radius-topright: 4px;
|
-moz-border-radius-topright: 4px;
|
||||||
-moz-border-radius-topleft: 4px;
|
|
||||||
/* webkit specific markup */
|
/* webkit specific markup */
|
||||||
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||||
-webkit-border-top-right-radius: 4px;
|
-webkit-border-top-right-radius: 4px;
|
||||||
-webkit-border-top-left-radius: 4px;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.overload {
|
||||||
|
font-family: "courier new",courier,monospace;
|
||||||
|
font-size: 65%;
|
||||||
|
}
|
||||||
|
|
||||||
.memdoc, dl.reflist dd {
|
.memdoc, dl.reflist dd {
|
||||||
border-bottom: 1px solid #A8B8D9;
|
border-bottom: 1px solid #A8B8D9;
|
||||||
border-left: 1px solid #A8B8D9;
|
border-left: 1px solid #A8B8D9;
|
||||||
@@ -611,17 +708,17 @@ dl.reflist dd {
|
|||||||
padding-left: 0px;
|
padding-left: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.params .paramname, .retval .paramname {
|
.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
.params .paramtype {
|
.params .paramtype, .tparams .paramtype {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
.params .paramdir {
|
.params .paramdir, .tparams .paramdir {
|
||||||
font-family: "courier new",courier,monospace;
|
font-family: "courier new",courier,monospace;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
@@ -665,12 +762,12 @@ span.mlabel {
|
|||||||
|
|
||||||
/* @end */
|
/* @end */
|
||||||
|
|
||||||
/* these are for tree view when not used as main index */
|
/* these are for tree view inside a (index) page */
|
||||||
|
|
||||||
div.directory {
|
div.directory {
|
||||||
margin: 10px 0px;
|
margin: 10px 0px;
|
||||||
border-top: 1px solid #A8B8D9;
|
border-top: 1px solid #9CAFD4;
|
||||||
border-bottom: 1px solid #A8B8D9;
|
border-bottom: 1px solid #9CAFD4;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -687,6 +784,7 @@ div.directory {
|
|||||||
.directory td.entry {
|
.directory td.entry {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
padding-right: 6px;
|
padding-right: 6px;
|
||||||
|
padding-top: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.directory td.entry a {
|
.directory td.entry a {
|
||||||
@@ -728,6 +826,80 @@ div.directory {
|
|||||||
color: #3D578C;
|
color: #3D578C;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.arrow {
|
||||||
|
color: #9CAFD4;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 80%;
|
||||||
|
display: inline-block;
|
||||||
|
width: 16px;
|
||||||
|
height: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
font-family: Arial, Helvetica;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 12px;
|
||||||
|
height: 14px;
|
||||||
|
width: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #728DC1;
|
||||||
|
color: white;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-left: 2px;
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icona {
|
||||||
|
width: 24px;
|
||||||
|
height: 22px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconfopen {
|
||||||
|
width: 24px;
|
||||||
|
height: 18px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
background-image:url('folderopen.png');
|
||||||
|
background-position: 0px -4px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
vertical-align:top;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconfclosed {
|
||||||
|
width: 24px;
|
||||||
|
height: 18px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
background-image:url('folderclosed.png');
|
||||||
|
background-position: 0px -4px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
vertical-align:top;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icondoc {
|
||||||
|
width: 24px;
|
||||||
|
height: 18px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
background-image:url('doc.png');
|
||||||
|
background-position: 0px -4px;
|
||||||
|
background-repeat: repeat-y;
|
||||||
|
vertical-align:top;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.directory {
|
||||||
|
font: 400 14px Roboto,sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @end */
|
||||||
|
|
||||||
div.dynheader {
|
div.dynheader {
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
-webkit-touch-callout: none;
|
-webkit-touch-callout: none;
|
||||||
@@ -743,6 +915,10 @@ address {
|
|||||||
color: #2A3D61;
|
color: #2A3D61;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.doxtable caption {
|
||||||
|
caption-side: top;
|
||||||
|
}
|
||||||
|
|
||||||
table.doxtable {
|
table.doxtable {
|
||||||
border-collapse:collapse;
|
border-collapse:collapse;
|
||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
@@ -787,7 +963,7 @@ table.fieldtable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.fieldtable td.fieldname {
|
.fieldtable td.fieldname {
|
||||||
padding-top: 5px;
|
padding-top: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fieldtable td.fielddoc {
|
.fieldtable td.fielddoc {
|
||||||
@@ -796,7 +972,7 @@ table.fieldtable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.fieldtable td.fielddoc p:first-child {
|
.fieldtable td.fielddoc p:first-child {
|
||||||
margin-top: 2px;
|
margin-top: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fieldtable td.fielddoc p:last-child {
|
.fieldtable td.fielddoc p:last-child {
|
||||||
@@ -816,6 +992,7 @@ table.fieldtable {
|
|||||||
padding-bottom: 4px;
|
padding-bottom: 4px;
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
text-align:left;
|
text-align:left;
|
||||||
|
font-weight: 400;
|
||||||
-moz-border-radius-topleft: 4px;
|
-moz-border-radius-topleft: 4px;
|
||||||
-moz-border-radius-topright: 4px;
|
-moz-border-radius-topright: 4px;
|
||||||
-webkit-border-top-left-radius: 4px;
|
-webkit-border-top-left-radius: 4px;
|
||||||
@@ -908,6 +1085,18 @@ div.summary a
|
|||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.classindex
|
||||||
|
{
|
||||||
|
margin: 10px;
|
||||||
|
white-space: nowrap;
|
||||||
|
margin-left: 3%;
|
||||||
|
margin-right: 3%;
|
||||||
|
width: 94%;
|
||||||
|
border: 0;
|
||||||
|
border-spacing: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
div.ingroups
|
div.ingroups
|
||||||
{
|
{
|
||||||
font-size: 8pt;
|
font-size: 8pt;
|
||||||
@@ -934,74 +1123,145 @@ div.headertitle
|
|||||||
padding: 5px 5px 5px 10px;
|
padding: 5px 5px 5px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl
|
.PageDocRTL-title div.headertitle {
|
||||||
{
|
text-align: right;
|
||||||
padding: 0 0 0 10px;
|
direction: rtl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
|
dl {
|
||||||
dl.section
|
padding: 0 0 0 0;
|
||||||
{
|
}
|
||||||
|
|
||||||
|
/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
|
||||||
|
dl.section {
|
||||||
margin-left: 0px;
|
margin-left: 0px;
|
||||||
padding-left: 0px;
|
padding-left: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.note
|
dl.section.DocNodeRTL {
|
||||||
{
|
margin-right: 0px;
|
||||||
|
padding-right: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.note {
|
||||||
margin-left: -7px;
|
margin-left: -7px;
|
||||||
padding-left: 3px;
|
padding-left: 3px;
|
||||||
border-left: 4px solid;
|
border-left: 4px solid;
|
||||||
border-color: #D0C000;
|
border-color: #D0C000;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.warning, dl.attention
|
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.warning, dl.attention {
|
||||||
margin-left: -7px;
|
margin-left: -7px;
|
||||||
padding-left: 3px;
|
padding-left: 3px;
|
||||||
border-left: 4px solid;
|
border-left: 4px solid;
|
||||||
border-color: #FF0000;
|
border-color: #FF0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.pre, dl.post, dl.invariant
|
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.pre, dl.post, dl.invariant {
|
||||||
margin-left: -7px;
|
margin-left: -7px;
|
||||||
padding-left: 3px;
|
padding-left: 3px;
|
||||||
border-left: 4px solid;
|
border-left: 4px solid;
|
||||||
border-color: #00D000;
|
border-color: #00D000;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.deprecated
|
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;
|
margin-left: -7px;
|
||||||
padding-left: 3px;
|
padding-left: 3px;
|
||||||
border-left: 4px solid;
|
border-left: 4px solid;
|
||||||
border-color: #505050;
|
border-color: #505050;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.todo
|
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;
|
margin-left: -7px;
|
||||||
padding-left: 3px;
|
padding-left: 3px;
|
||||||
border-left: 4px solid;
|
border-left: 4px solid;
|
||||||
border-color: #00C0E0;
|
border-color: #00C0E0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.test
|
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;
|
margin-left: -7px;
|
||||||
padding-left: 3px;
|
padding-left: 3px;
|
||||||
border-left: 4px solid;
|
border-left: 4px solid;
|
||||||
border-color: #3030E0;
|
border-color: #3030E0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.bug
|
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;
|
margin-left: -7px;
|
||||||
padding-left: 3px;
|
padding-left: 3px;
|
||||||
border-left: 4px solid;
|
border-left: 4px solid;
|
||||||
border-color: #C08050;
|
border-color: #C08050;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dl.bug.DocNodeRTL {
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
border-left: 0;
|
||||||
|
margin-right: -7px;
|
||||||
|
padding-right: 3px;
|
||||||
|
border-right: 4px solid;
|
||||||
|
border-color: #C08050;
|
||||||
|
}
|
||||||
|
|
||||||
dl.section dd {
|
dl.section dd {
|
||||||
margin-bottom: 6px;
|
margin-bottom: 6px;
|
||||||
}
|
}
|
||||||
@@ -1019,6 +1279,11 @@ dl.section dd {
|
|||||||
border: 0px none;
|
border: 0px none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#projectalign
|
||||||
|
{
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
#projectname
|
#projectname
|
||||||
{
|
{
|
||||||
font: 300% Tahoma, Arial,sans-serif;
|
font: 300% Tahoma, Arial,sans-serif;
|
||||||
@@ -1063,6 +1328,16 @@ dl.section dd {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.plantumlgraph
|
||||||
|
{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.diagraph
|
||||||
|
{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
.caption
|
.caption
|
||||||
{
|
{
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@@ -1083,10 +1358,12 @@ dl.citelist dt {
|
|||||||
font-weight:bold;
|
font-weight:bold;
|
||||||
margin-right:10px;
|
margin-right:10px;
|
||||||
padding:5px;
|
padding:5px;
|
||||||
|
text-align:right;
|
||||||
|
width:52px;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.citelist dd {
|
dl.citelist dd {
|
||||||
margin:2px 0;
|
margin:2px 0 2px 72px;
|
||||||
padding:5px 0;
|
padding:5px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1097,10 +1374,15 @@ div.toc {
|
|||||||
border-radius: 7px 7px 7px 7px;
|
border-radius: 7px 7px 7px 7px;
|
||||||
float: right;
|
float: right;
|
||||||
height: auto;
|
height: auto;
|
||||||
margin: 0 20px 10px 10px;
|
margin: 0 8px 10px 10px;
|
||||||
width: 200px;
|
width: 200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.PageDocRTL-title div.toc {
|
||||||
|
float: left !important;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
div.toc li {
|
div.toc li {
|
||||||
background: url("bdwn.png") no-repeat scroll 0 5px transparent;
|
background: url("bdwn.png") no-repeat scroll 0 5px transparent;
|
||||||
font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
|
font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
|
||||||
@@ -1109,6 +1391,12 @@ div.toc li {
|
|||||||
padding-top: 2px;
|
padding-top: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.PageDocRTL-title div.toc li {
|
||||||
|
background-position-x: right !important;
|
||||||
|
padding-left: 0 !important;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
div.toc h3 {
|
div.toc h3 {
|
||||||
font: bold 12px/1.2 Arial,FreeSans,sans-serif;
|
font: bold 12px/1.2 Arial,FreeSans,sans-serif;
|
||||||
color: #4665A2;
|
color: #4665A2;
|
||||||
@@ -1138,6 +1426,26 @@ div.toc li.level4 {
|
|||||||
margin-left: 45px;
|
margin-left: 45px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.PageDocRTL-title div.toc li.level1 {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PageDocRTL-title div.toc li.level2 {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PageDocRTL-title div.toc li.level3 {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
margin-right: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PageDocRTL-title div.toc li.level4 {
|
||||||
|
margin-left: 0 !important;
|
||||||
|
margin-right: 45px;
|
||||||
|
}
|
||||||
|
|
||||||
.inherit_header {
|
.inherit_header {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: gray;
|
color: gray;
|
||||||
@@ -1163,6 +1471,177 @@ tr.heading h2 {
|
|||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* tooltip related style info */
|
||||||
|
|
||||||
|
.ttc {
|
||||||
|
position: absolute;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip {
|
||||||
|
cursor: default;
|
||||||
|
white-space: nowrap;
|
||||||
|
background-color: white;
|
||||||
|
border: 1px solid gray;
|
||||||
|
border-radius: 4px 4px 4px 4px;
|
||||||
|
box-shadow: 1px 1px 7px gray;
|
||||||
|
display: none;
|
||||||
|
font-size: smaller;
|
||||||
|
max-width: 80%;
|
||||||
|
opacity: 0.9;
|
||||||
|
padding: 1ex 1em 1em;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 2147483647;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip div.ttdoc {
|
||||||
|
color: grey;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip div.ttname a {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip div.ttname {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip div.ttdeci {
|
||||||
|
color: #006318;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip div {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
font: 12px/16px Roboto,sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip:before, #powerTip:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.n:after, #powerTip.n:before,
|
||||||
|
#powerTip.s:after, #powerTip.s:before,
|
||||||
|
#powerTip.w:after, #powerTip.w:before,
|
||||||
|
#powerTip.e:after, #powerTip.e:before,
|
||||||
|
#powerTip.ne:after, #powerTip.ne:before,
|
||||||
|
#powerTip.se:after, #powerTip.se:before,
|
||||||
|
#powerTip.nw:after, #powerTip.nw:before,
|
||||||
|
#powerTip.sw:after, #powerTip.sw:before {
|
||||||
|
border: solid transparent;
|
||||||
|
content: " ";
|
||||||
|
height: 0;
|
||||||
|
width: 0;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.n:after, #powerTip.s:after,
|
||||||
|
#powerTip.w:after, #powerTip.e:after,
|
||||||
|
#powerTip.nw:after, #powerTip.ne:after,
|
||||||
|
#powerTip.sw:after, #powerTip.se:after {
|
||||||
|
border-color: rgba(255, 255, 255, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.n:before, #powerTip.s:before,
|
||||||
|
#powerTip.w:before, #powerTip.e:before,
|
||||||
|
#powerTip.nw:before, #powerTip.ne:before,
|
||||||
|
#powerTip.sw:before, #powerTip.se:before {
|
||||||
|
border-color: rgba(128, 128, 128, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.n:after, #powerTip.n:before,
|
||||||
|
#powerTip.ne:after, #powerTip.ne:before,
|
||||||
|
#powerTip.nw:after, #powerTip.nw:before {
|
||||||
|
top: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
|
||||||
|
border-top-color: #FFFFFF;
|
||||||
|
border-width: 10px;
|
||||||
|
margin: 0px -10px;
|
||||||
|
}
|
||||||
|
#powerTip.n:before {
|
||||||
|
border-top-color: #808080;
|
||||||
|
border-width: 11px;
|
||||||
|
margin: 0px -11px;
|
||||||
|
}
|
||||||
|
#powerTip.n:after, #powerTip.n:before {
|
||||||
|
left: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.nw:after, #powerTip.nw:before {
|
||||||
|
right: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.ne:after, #powerTip.ne:before {
|
||||||
|
left: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.s:after, #powerTip.s:before,
|
||||||
|
#powerTip.se:after, #powerTip.se:before,
|
||||||
|
#powerTip.sw:after, #powerTip.sw:before {
|
||||||
|
bottom: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
|
||||||
|
border-bottom-color: #FFFFFF;
|
||||||
|
border-width: 10px;
|
||||||
|
margin: 0px -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
|
||||||
|
border-bottom-color: #808080;
|
||||||
|
border-width: 11px;
|
||||||
|
margin: 0px -11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.s:after, #powerTip.s:before {
|
||||||
|
left: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.sw:after, #powerTip.sw:before {
|
||||||
|
right: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.se:after, #powerTip.se:before {
|
||||||
|
left: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.e:after, #powerTip.e:before {
|
||||||
|
left: 100%;
|
||||||
|
}
|
||||||
|
#powerTip.e:after {
|
||||||
|
border-left-color: #FFFFFF;
|
||||||
|
border-width: 10px;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -10px;
|
||||||
|
}
|
||||||
|
#powerTip.e:before {
|
||||||
|
border-left-color: #808080;
|
||||||
|
border-width: 11px;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#powerTip.w:after, #powerTip.w:before {
|
||||||
|
right: 100%;
|
||||||
|
}
|
||||||
|
#powerTip.w:after {
|
||||||
|
border-right-color: #FFFFFF;
|
||||||
|
border-width: 10px;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -10px;
|
||||||
|
}
|
||||||
|
#powerTip.w:before {
|
||||||
|
border-right-color: #808080;
|
||||||
|
border-width: 11px;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -11px;
|
||||||
|
}
|
||||||
|
|
||||||
@media print
|
@media print
|
||||||
{
|
{
|
||||||
#top { display: none; }
|
#top { display: none; }
|
||||||
@@ -1182,3 +1661,72 @@ tr.heading h2 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* @group Markdown */
|
||||||
|
|
||||||
|
table.markdownTable {
|
||||||
|
border-collapse:collapse;
|
||||||
|
margin-top: 4px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.markdownTable td, table.markdownTable th {
|
||||||
|
border: 1px solid #2D4068;
|
||||||
|
padding: 3px 7px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.markdownTable tr {
|
||||||
|
}
|
||||||
|
|
||||||
|
th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
|
||||||
|
background-color: #374F7F;
|
||||||
|
color: #FFFFFF;
|
||||||
|
font-size: 110%;
|
||||||
|
padding-bottom: 4px;
|
||||||
|
padding-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.markdownTableHeadLeft, td.markdownTableBodyLeft {
|
||||||
|
text-align: left
|
||||||
|
}
|
||||||
|
|
||||||
|
th.markdownTableHeadRight, td.markdownTableBodyRight {
|
||||||
|
text-align: right
|
||||||
|
}
|
||||||
|
|
||||||
|
th.markdownTableHeadCenter, td.markdownTableBodyCenter {
|
||||||
|
text-align: center
|
||||||
|
}
|
||||||
|
|
||||||
|
.DocNodeRTL {
|
||||||
|
text-align: right;
|
||||||
|
direction: rtl;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DocNodeLTR {
|
||||||
|
text-align: left;
|
||||||
|
direction: ltr;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.DocNodeRTL {
|
||||||
|
width: auto;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.DocNodeLTR {
|
||||||
|
width: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
tt, code, kbd, samp
|
||||||
|
{
|
||||||
|
display: inline-block;
|
||||||
|
direction:ltr;
|
||||||
|
}
|
||||||
|
/* @end */
|
||||||
|
|
||||||
|
u {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.7 KiB |
26
doc/html/doxygen.svg
Normal file
|
After Width: | Height: | Size: 15 KiB |
@@ -1,3 +1,27 @@
|
|||||||
|
/*
|
||||||
|
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||||
|
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
@licend The above is the entire license notice for the JavaScript code in this file
|
||||||
|
*/
|
||||||
function toggleVisibility(linkObj)
|
function toggleVisibility(linkObj)
|
||||||
{
|
{
|
||||||
var base = $(linkObj).attr('id');
|
var base = $(linkObj).attr('id');
|
||||||
@@ -24,6 +48,7 @@ function updateStripes()
|
|||||||
$('table.directory tr').
|
$('table.directory tr').
|
||||||
removeClass('even').filter(':visible:even').addClass('even');
|
removeClass('even').filter(':visible:even').addClass('even');
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleLevel(level)
|
function toggleLevel(level)
|
||||||
{
|
{
|
||||||
$('table.directory tr').each(function() {
|
$('table.directory tr').each(function() {
|
||||||
@@ -31,12 +56,12 @@ function toggleLevel(level)
|
|||||||
var i = $('#img'+this.id.substring(3));
|
var i = $('#img'+this.id.substring(3));
|
||||||
var a = $('#arr'+this.id.substring(3));
|
var a = $('#arr'+this.id.substring(3));
|
||||||
if (l<level+1) {
|
if (l<level+1) {
|
||||||
i.attr('src','ftv2folderopen.png');
|
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
|
||||||
a.attr('src','ftv2mnode.png');
|
a.html('▼');
|
||||||
$(this).show();
|
$(this).show();
|
||||||
} else if (l==level+1) {
|
} else if (l==level+1) {
|
||||||
i.attr('src','ftv2folderclosed.png');
|
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
|
||||||
a.attr('src','ftv2pnode.png');
|
a.html('►');
|
||||||
$(this).show();
|
$(this).show();
|
||||||
} else {
|
} else {
|
||||||
$(this).hide();
|
$(this).hide();
|
||||||
@@ -47,34 +72,33 @@ function toggleLevel(level)
|
|||||||
|
|
||||||
function toggleFolder(id)
|
function toggleFolder(id)
|
||||||
{
|
{
|
||||||
//The clicked row
|
// the clicked row
|
||||||
var currentRow = $('#row_'+id);
|
var currentRow = $('#row_'+id);
|
||||||
var currentRowImages = currentRow.find("img");
|
|
||||||
|
|
||||||
//All rows after the clicked row
|
// all rows after the clicked row
|
||||||
var rows = currentRow.nextAll("tr");
|
var rows = currentRow.nextAll("tr");
|
||||||
|
|
||||||
//Only match elements AFTER this one (can't hide elements before)
|
|
||||||
var childRows = rows.filter(function() {
|
|
||||||
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||||
return this.id.match(re);
|
|
||||||
});
|
|
||||||
|
|
||||||
//First row is visible we are HIDING
|
// only match elements AFTER this one (can't hide elements before)
|
||||||
|
var childRows = rows.filter(function() { return this.id.match(re); });
|
||||||
|
|
||||||
|
// first row is visible we are HIDING
|
||||||
if (childRows.filter(':first').is(':visible')===true) {
|
if (childRows.filter(':first').is(':visible')===true) {
|
||||||
currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png');
|
// replace down arrow by right arrow for current row
|
||||||
currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png');
|
var currentRowSpans = currentRow.find("span");
|
||||||
rows.filter("[id^=row_"+id+"]").hide();
|
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||||
} else { //We are SHOWING
|
currentRowSpans.filter(".arrow").html('►');
|
||||||
//All sub images
|
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
|
||||||
var childImages = childRows.find("img");
|
} else { // we are SHOWING
|
||||||
var childImg = childImages.filter("[id^=img]");
|
// replace right arrow by down arrow for current row
|
||||||
var childArr = childImages.filter("[id^=arr]");
|
var currentRowSpans = currentRow.find("span");
|
||||||
|
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
|
||||||
currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row
|
currentRowSpans.filter(".arrow").html('▼');
|
||||||
currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row
|
// replace down arrows by right arrows for child rows
|
||||||
childImg.attr('src','ftv2folderclosed.png'); //children closed
|
var childRowsSpans = childRows.find("span");
|
||||||
childArr.attr('src','ftv2pnode.png'); //children closed
|
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||||
|
childRowsSpans.filter(".arrow").html('►');
|
||||||
childRows.show(); //show all children
|
childRows.show(); //show all children
|
||||||
}
|
}
|
||||||
updateStripes();
|
updateStripes();
|
||||||
@@ -94,4 +118,4 @@ function toggleInherit(id)
|
|||||||
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* @license-end */
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 616 B After Width: | Height: | Size: 616 B |
|
Before Width: | Height: | Size: 597 B After Width: | Height: | Size: 597 B |
|
Before Width: | Height: | Size: 86 B |
|
Before Width: | Height: | Size: 453 B |
|
Before Width: | Height: | Size: 86 B |
|
Before Width: | Height: | Size: 746 B |
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 403 B |
|
Before Width: | Height: | Size: 86 B |
|
Before Width: | Height: | Size: 388 B |
|
Before Width: | Height: | Size: 229 B |
|
Before Width: | Height: | Size: 229 B |
|
Before Width: | Height: | Size: 86 B |
@@ -1,18 +1,17 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>TurboJPEG: Data Fields</title>
|
<title>TurboJPEG: Data Fields</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
||||||
</script>
|
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG
|
||||||
 <span id="projectnumber">1.5</span>
|
 <span id="projectnumber">2.1.4</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -32,53 +31,29 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
<!-- Generated by Doxygen 1.8.20 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<ul class="tablist">
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<script type="text/javascript">
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
$(function() {
|
||||||
<li>
|
initMenu('',true,false,'search.php','Search');
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
$(document).ready(function() { init_search(); });
|
||||||
<span class="left">
|
});
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
/* @license-end */</script>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
<div id="main-nav"></div>
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
||||||
alt=""/>
|
|
||||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
||||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
||||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
||||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
||||||
</span><span class="right">
|
|
||||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="navrow2" class="tabs2">
|
|
||||||
<ul class="tablist">
|
|
||||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
|
||||||
<li><a href="classes.html"><span>Data Structure Index</span></a></li>
|
|
||||||
<li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="navrow3" class="tabs2">
|
|
||||||
<ul class="tablist">
|
|
||||||
<li class="current"><a href="functions.html"><span>All</span></a></li>
|
|
||||||
<li><a href="functions_vars.html"><span>Variables</span></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
</div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -90,7 +65,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div><ul>
|
<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div><ul>
|
||||||
<li>customFilter
|
<li>customFilter
|
||||||
: <a class="el" href="structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1">tjtransform</a>
|
: <a class="el" href="structtjtransform.html#afd7fc262df33f741e120ef4183202ef5">tjtransform</a>
|
||||||
</li>
|
</li>
|
||||||
<li>data
|
<li>data
|
||||||
: <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a>
|
: <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a>
|
||||||
@@ -126,9 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
||||||
</a> 1.8.3.1
|
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>TurboJPEG: Data Fields - Variables</title>
|
<title>TurboJPEG: Data Fields - Variables</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
||||||
</script>
|
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG
|
||||||
 <span id="projectnumber">1.5</span>
|
 <span id="projectnumber">2.1.4</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -32,53 +31,29 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
<!-- Generated by Doxygen 1.8.20 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<ul class="tablist">
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<script type="text/javascript">
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
$(function() {
|
||||||
<li>
|
initMenu('',true,false,'search.php','Search');
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
$(document).ready(function() { init_search(); });
|
||||||
<span class="left">
|
});
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
/* @license-end */</script>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
<div id="main-nav"></div>
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
||||||
alt=""/>
|
|
||||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
||||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
||||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
||||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
||||||
</span><span class="right">
|
|
||||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="navrow2" class="tabs2">
|
|
||||||
<ul class="tablist">
|
|
||||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
|
||||||
<li><a href="classes.html"><span>Data Structure Index</span></a></li>
|
|
||||||
<li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="navrow3" class="tabs2">
|
|
||||||
<ul class="tablist">
|
|
||||||
<li><a href="functions.html"><span>All</span></a></li>
|
|
||||||
<li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
</div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -90,7 +65,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<div class="contents">
|
<div class="contents">
|
||||||
 <ul>
|
 <ul>
|
||||||
<li>customFilter
|
<li>customFilter
|
||||||
: <a class="el" href="structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1">tjtransform</a>
|
: <a class="el" href="structtjtransform.html#afd7fc262df33f741e120ef4183202ef5">tjtransform</a>
|
||||||
</li>
|
</li>
|
||||||
<li>data
|
<li>data
|
||||||
: <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a>
|
: <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a>
|
||||||
@@ -126,9 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
||||||
</a> 1.8.3.1
|
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>TurboJPEG: Main Page</title>
|
<title>TurboJPEG: Main Page</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
||||||
</script>
|
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG
|
||||||
 <span id="projectnumber">1.5</span>
|
 <span id="projectnumber">2.1.4</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -32,40 +31,29 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
<!-- Generated by Doxygen 1.8.20 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<ul class="tablist">
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<li class="current"><a href="index.html"><span>Main Page</span></a></li>
|
<script type="text/javascript">
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
$(function() {
|
||||||
<li>
|
initMenu('',true,false,'search.php','Search');
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
$(document).ready(function() { init_search(); });
|
||||||
<span class="left">
|
});
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
/* @license-end */</script>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
<div id="main-nav"></div>
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
||||||
alt=""/>
|
|
||||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
||||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
||||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
||||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
||||||
</span><span class="right">
|
|
||||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
</div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -82,9 +70,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
||||||
</a> 1.8.3.1
|
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
43
doc/html/jquery.js
vendored
51
doc/html/menu.js
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||||
|
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
@licend The above is the entire license notice for the JavaScript code in this file
|
||||||
|
*/
|
||||||
|
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
|
||||||
|
function makeTree(data,relPath) {
|
||||||
|
var result='';
|
||||||
|
if ('children' in data) {
|
||||||
|
result+='<ul>';
|
||||||
|
for (var i in data.children) {
|
||||||
|
result+='<li><a href="'+relPath+data.children[i].url+'">'+
|
||||||
|
data.children[i].text+'</a>'+
|
||||||
|
makeTree(data.children[i],relPath)+'</li>';
|
||||||
|
}
|
||||||
|
result+='</ul>';
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#main-nav').append(makeTree(menudata,relPath));
|
||||||
|
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
|
||||||
|
if (searchEnabled) {
|
||||||
|
if (serverSide) {
|
||||||
|
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+relPath+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.svg" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
|
||||||
|
} else {
|
||||||
|
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.svg" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.svg" alt=""/></a></span></div></li>');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$('#main-menu').smartmenus();
|
||||||
|
}
|
||||||
|
/* @license-end */
|
||||||
33
doc/html/menudata.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||||
|
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
@licend The above is the entire license notice for the JavaScript code in this file
|
||||||
|
*/
|
||||||
|
var menudata={children:[
|
||||||
|
{text:"Main Page",url:"index.html"},
|
||||||
|
{text:"Modules",url:"modules.html"},
|
||||||
|
{text:"Data Structures",url:"annotated.html",children:[
|
||||||
|
{text:"Data Structures",url:"annotated.html"},
|
||||||
|
{text:"Data Structure Index",url:"classes.html"},
|
||||||
|
{text:"Data Fields",url:"functions.html",children:[
|
||||||
|
{text:"All",url:"functions.html"},
|
||||||
|
{text:"Variables",url:"functions_vars.html"}]}]}]}
|
||||||
@@ -1,18 +1,17 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
<title>TurboJPEG: Modules</title>
|
<title>TurboJPEG: Modules</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="dynsections.js"></script>
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
||||||
</script>
|
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
@@ -22,9 +21,9 @@
|
|||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG
|
||||||
 <span id="projectnumber">1.5</span>
|
 <span id="projectnumber">2.1.4</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -32,40 +31,29 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.3.1 -->
|
<!-- Generated by Doxygen 1.8.20 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<ul class="tablist">
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<script type="text/javascript">
|
||||||
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
$(function() {
|
||||||
<li>
|
initMenu('',true,false,'search.php','Search');
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
$(document).ready(function() { init_search(); });
|
||||||
<span class="left">
|
});
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
/* @license-end */</script>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
<div id="main-nav"></div>
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
||||||
alt=""/>
|
|
||||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
||||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
||||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
||||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
||||||
</span><span class="right">
|
|
||||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
</div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -81,15 +69,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<div class="contents">
|
<div class="contents">
|
||||||
<div class="textblock">Here is a list of all modules:</div><div class="directory">
|
<div class="textblock">Here is a list of all modules:</div><div class="directory">
|
||||||
<table class="directory">
|
<table class="directory">
|
||||||
<tr id="row_0_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group___turbo_j_p_e_g.html" target="_self">TurboJPEG</a></td><td class="desc">TurboJPEG API</td></tr>
|
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="group___turbo_j_p_e_g.html" target="_self">TurboJPEG</a></td><td class="desc">TurboJPEG API </td></tr>
|
||||||
</table>
|
</table>
|
||||||
</div><!-- directory -->
|
</div><!-- directory -->
|
||||||
</div><!-- contents -->
|
</div><!-- contents -->
|
||||||
<!-- start footer part -->
|
<!-- start footer part -->
|
||||||
<hr class="footer"/><address class="footer"><small>
|
<hr class="footer"/><address class="footer"><small>
|
||||||
Generated by  <a href="http://www.doxygen.org/index.html">
|
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
||||||
</a> 1.8.3.1
|
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
<script type="text/javascript" src="all_63.js"></script>
|
<script type="text/javascript" src="all_0.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
@@ -11,15 +11,25 @@
|
|||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div id="SRResults"></div>
|
<div id="SRResults"></div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
createResults();
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
document.getElementById("Loading").style.display="none";
|
document.getElementById("Loading").style.display="none";
|
||||||
document.getElementById("NoMatches").style.display="none";
|
document.getElementById("NoMatches").style.display="none";
|
||||||
var searchResults = new SearchResults("searchResults");
|
var searchResults = new SearchResults("searchResults");
|
||||||
searchResults.Search();
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
4
doc/html/search/all_0.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['customfilter_0',['customFilter',['../structtjtransform.html#afd7fc262df33f741e120ef4183202ef5',1,'tjtransform']]]
|
||||||
|
];
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
<script type="text/javascript" src="all_64.js"></script>
|
<script type="text/javascript" src="all_1.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
@@ -11,15 +11,25 @@
|
|||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div id="SRResults"></div>
|
<div id="SRResults"></div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
createResults();
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
document.getElementById("Loading").style.display="none";
|
document.getElementById("Loading").style.display="none";
|
||||||
document.getElementById("NoMatches").style.display="none";
|
document.getElementById("NoMatches").style.display="none";
|
||||||
var searchResults = new SearchResults("searchResults");
|
var searchResults = new SearchResults("searchResults");
|
||||||
searchResults.Search();
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
5
doc/html/search/all_1.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['data_1',['data',['../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3',1,'tjtransform']]],
|
||||||
|
['denom_2',['denom',['../structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3',1,'tjscalingfactor']]]
|
||||||
|
];
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
<script type="text/javascript" src="all_68.js"></script>
|
<script type="text/javascript" src="all_2.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
@@ -11,15 +11,25 @@
|
|||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div id="SRResults"></div>
|
<div id="SRResults"></div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
createResults();
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
document.getElementById("Loading").style.display="none";
|
document.getElementById("Loading").style.display="none";
|
||||||
document.getElementById("NoMatches").style.display="none";
|
document.getElementById("NoMatches").style.display="none";
|
||||||
var searchResults = new SearchResults("searchResults");
|
var searchResults = new SearchResults("searchResults");
|
||||||
searchResults.Search();
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
4
doc/html/search/all_2.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['h_3',['h',['../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115',1,'tjregion']]]
|
||||||
|
];
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
<script type="text/javascript" src="all_6e.js"></script>
|
<script type="text/javascript" src="all_3.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
@@ -11,15 +11,25 @@
|
|||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div id="SRResults"></div>
|
<div id="SRResults"></div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
createResults();
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
document.getElementById("Loading").style.display="none";
|
document.getElementById("Loading").style.display="none";
|
||||||
document.getElementById("NoMatches").style.display="none";
|
document.getElementById("NoMatches").style.display="none";
|
||||||
var searchResults = new SearchResults("searchResults");
|
var searchResults = new SearchResults("searchResults");
|
||||||
searchResults.Search();
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
--></script>
|
--></script>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
4
doc/html/search/all_3.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['num_4',['num',['../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec',1,'tjscalingfactor']]]
|
||||||
|
];
|
||||||
36
doc/html/search/all_4.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_4.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
5
doc/html/search/all_4.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['op_5',['op',['../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498',1,'tjtransform']]],
|
||||||
|
['options_6',['options',['../structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6',1,'tjtransform']]]
|
||||||
|
];
|
||||||
36
doc/html/search/all_5.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_5.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
4
doc/html/search/all_5.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['r_7',['r',['../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf',1,'tjtransform']]]
|
||||||
|
];
|
||||||
36
doc/html/search/all_6.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_6.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
103
doc/html/search/all_6.js
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['tj_5fnumcs_8',['TJ_NUMCS',['../group___turbo_j_p_e_g.html#ga39f57a6fb02d9cf32e7b6890099b5a71',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumerr_9',['TJ_NUMERR',['../group___turbo_j_p_e_g.html#ga79bde1b4a3e2351e00887e47781b966e',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumpf_10',['TJ_NUMPF',['../group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumsamp_11',['TJ_NUMSAMP',['../group___turbo_j_p_e_g.html#ga5ef3d169162ce77ce348e292a0b7477c',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumxop_12',['TJ_NUMXOP',['../group___turbo_j_p_e_g.html#ga0f6dbd18adf38b7d46ac547f0f4d562c',1,'turbojpeg.h']]],
|
||||||
|
['tjalloc_13',['tjAlloc',['../group___turbo_j_p_e_g.html#gaec627dd4c5f30b7a775a7aea3bec5d83',1,'turbojpeg.h']]],
|
||||||
|
['tjalphaoffset_14',['tjAlphaOffset',['../group___turbo_j_p_e_g.html#ga5af0ab065feefd526debf1e20c43e837',1,'turbojpeg.h']]],
|
||||||
|
['tjblueoffset_15',['tjBlueOffset',['../group___turbo_j_p_e_g.html#ga84e2e35d3f08025f976ec1ec53693dea',1,'turbojpeg.h']]],
|
||||||
|
['tjbufsize_16',['tjBufSize',['../group___turbo_j_p_e_g.html#ga67ac12fee79073242cb216e07c9f1f90',1,'turbojpeg.h']]],
|
||||||
|
['tjbufsizeyuv2_17',['tjBufSizeYUV2',['../group___turbo_j_p_e_g.html#ga2be2b9969d4df9ecce9b05deed273194',1,'turbojpeg.h']]],
|
||||||
|
['tjcompress2_18',['tjCompress2',['../group___turbo_j_p_e_g.html#gafbdce0112fd78fd38efae841443a9bcf',1,'turbojpeg.h']]],
|
||||||
|
['tjcompressfromyuv_19',['tjCompressFromYUV',['../group___turbo_j_p_e_g.html#ga7622a459b79aa1007e005b58783f875b',1,'turbojpeg.h']]],
|
||||||
|
['tjcompressfromyuvplanes_20',['tjCompressFromYUVPlanes',['../group___turbo_j_p_e_g.html#ga29ec5dfbd2d84b8724e951d6fa0d5d9e',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_21',['TJCS',['../group___turbo_j_p_e_g.html#ga4f83ad3368e0e29d1957be0efa7c3720',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fcmyk_22',['TJCS_CMYK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a6c8b636152ac8195b869587db315ee53',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fgray_23',['TJCS_GRAY',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720ab3e7d6a87f695e45b81c1b5262b5a50a',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5frgb_24',['TJCS_RGB',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a677cb7ccb85c4038ac41964a2e09e555',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fycbcr_25',['TJCS_YCbCr',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a7389b8f65bb387ffedce3efd0d78ec75',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fycck_26',['TJCS_YCCK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a53839e0fe867b76b58d16b0a1a7c598e',1,'turbojpeg.h']]],
|
||||||
|
['tjdecodeyuv_27',['tjDecodeYUV',['../group___turbo_j_p_e_g.html#ga70abbf38f77a26fd6da8813bef96f695',1,'turbojpeg.h']]],
|
||||||
|
['tjdecodeyuvplanes_28',['tjDecodeYUVPlanes',['../group___turbo_j_p_e_g.html#ga10e837c07fa9d25770565b237d3898d9',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompress2_29',['tjDecompress2',['../group___turbo_j_p_e_g.html#gae9eccef8b682a48f43a9117c231ed013',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompressheader3_30',['tjDecompressHeader3',['../group___turbo_j_p_e_g.html#ga0595681096bba7199cc6f3533cb25f77',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompresstoyuv2_31',['tjDecompressToYUV2',['../group___turbo_j_p_e_g.html#ga04d1e839ff9a0860dd1475cff78d3364',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompresstoyuvplanes_32',['tjDecompressToYUVPlanes',['../group___turbo_j_p_e_g.html#gaa59f901a5258ada5bd0185ad59368540',1,'turbojpeg.h']]],
|
||||||
|
['tjdestroy_33',['tjDestroy',['../group___turbo_j_p_e_g.html#ga75f355fa27225ba1a4ee392c852394d2',1,'turbojpeg.h']]],
|
||||||
|
['tjencodeyuv3_34',['tjEncodeYUV3',['../group___turbo_j_p_e_g.html#gac519b922cdf446e97d0cdcba513636bf',1,'turbojpeg.h']]],
|
||||||
|
['tjencodeyuvplanes_35',['tjEncodeYUVPlanes',['../group___turbo_j_p_e_g.html#gae2d04c72457fe7f4d60cf78ab1b1feb1',1,'turbojpeg.h']]],
|
||||||
|
['tjerr_36',['TJERR',['../group___turbo_j_p_e_g.html#gafbc17cfa57d0d5d11fea35ac025950fe',1,'turbojpeg.h']]],
|
||||||
|
['tjerr_5ffatal_37',['TJERR_FATAL',['../group___turbo_j_p_e_g.html#ggafbc17cfa57d0d5d11fea35ac025950feafc9cceeada13122b09e4851e3788039a',1,'turbojpeg.h']]],
|
||||||
|
['tjerr_5fwarning_38',['TJERR_WARNING',['../group___turbo_j_p_e_g.html#ggafbc17cfa57d0d5d11fea35ac025950fea342dd6e2aedb47bb257b4e7568329b59',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5faccuratedct_39',['TJFLAG_ACCURATEDCT',['../group___turbo_j_p_e_g.html#gacb233cfd722d66d1ccbf48a7de81f0e0',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5fbottomup_40',['TJFLAG_BOTTOMUP',['../group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5ffastdct_41',['TJFLAG_FASTDCT',['../group___turbo_j_p_e_g.html#gaabce235db80d3f698b27f36cbd453da2',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5ffastupsample_42',['TJFLAG_FASTUPSAMPLE',['../group___turbo_j_p_e_g.html#ga4ee4506c81177a06f77e2504a22efd2d',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5flimitscans_43',['TJFLAG_LIMITSCANS',['../group___turbo_j_p_e_g.html#ga163e6482dc5096831feef9c79ff3f805',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5fnorealloc_44',['TJFLAG_NOREALLOC',['../group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5fprogressive_45',['TJFLAG_PROGRESSIVE',['../group___turbo_j_p_e_g.html#ga43b426750b46190a25d34a67ef76df1b',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5fstoponwarning_46',['TJFLAG_STOPONWARNING',['../group___turbo_j_p_e_g.html#ga519cfa4ef6c18d9e5b455fdf59306a3a',1,'turbojpeg.h']]],
|
||||||
|
['tjfree_47',['tjFree',['../group___turbo_j_p_e_g.html#gaea863d2da0cdb609563aabdf9196514b',1,'turbojpeg.h']]],
|
||||||
|
['tjgeterrorcode_48',['tjGetErrorCode',['../group___turbo_j_p_e_g.html#ga414feeffbf860ebd31c745df203de410',1,'turbojpeg.h']]],
|
||||||
|
['tjgeterrorstr2_49',['tjGetErrorStr2',['../group___turbo_j_p_e_g.html#ga1ead8574f9f39fbafc6b497124e7aafa',1,'turbojpeg.h']]],
|
||||||
|
['tjgetscalingfactors_50',['tjGetScalingFactors',['../group___turbo_j_p_e_g.html#gac3854476006b10787bd128f7ede48057',1,'turbojpeg.h']]],
|
||||||
|
['tjgreenoffset_51',['tjGreenOffset',['../group___turbo_j_p_e_g.html#ga82d6e35da441112a411da41923c0ba2f',1,'turbojpeg.h']]],
|
||||||
|
['tjhandle_52',['tjhandle',['../group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763',1,'turbojpeg.h']]],
|
||||||
|
['tjinitcompress_53',['tjInitCompress',['../group___turbo_j_p_e_g.html#ga9d63a05fc6d813f4aae06107041a37e8',1,'turbojpeg.h']]],
|
||||||
|
['tjinitdecompress_54',['tjInitDecompress',['../group___turbo_j_p_e_g.html#ga52300eac3f3d9ef4bab303bc244f62d3',1,'turbojpeg.h']]],
|
||||||
|
['tjinittransform_55',['tjInitTransform',['../group___turbo_j_p_e_g.html#ga928beff6ac248ceadf01089fc6b41957',1,'turbojpeg.h']]],
|
||||||
|
['tjloadimage_56',['tjLoadImage',['../group___turbo_j_p_e_g.html#gaffbd83c375e79f5db4b5c5d8ad4466e7',1,'turbojpeg.h']]],
|
||||||
|
['tjmcuheight_57',['tjMCUHeight',['../group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf',1,'turbojpeg.h']]],
|
||||||
|
['tjmcuwidth_58',['tjMCUWidth',['../group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c',1,'turbojpeg.h']]],
|
||||||
|
['tjpad_59',['TJPAD',['../group___turbo_j_p_e_g.html#ga0aba955473315e405295d978f0c16511',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_60',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fabgr_61',['TJPF_ABGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fargb_62',['TJPF_ARGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgr_63',['TJPF_BGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgra_64',['TJPF_BGRA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgrx_65',['TJPF_BGRX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fcmyk_66',['TJPF_CMYK',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7f5100ec44c91994e243f1cf55553f8b',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fgray_67',['TJPF_GRAY',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgb_68',['TJPF_RGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgba_69',['TJPF_RGBA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgbx_70',['TJPF_RGBX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5funknown_71',['TJPF_UNKNOWN',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa84c1a6cead7952998e2fb895844a21ed',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fxbgr_72',['TJPF_XBGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fxrgb_73',['TJPF_XRGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84',1,'turbojpeg.h']]],
|
||||||
|
['tjpixelsize_74',['tjPixelSize',['../group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c',1,'turbojpeg.h']]],
|
||||||
|
['tjplaneheight_75',['tjPlaneHeight',['../group___turbo_j_p_e_g.html#ga1a209696c6a80748f20e134b3c64789f',1,'turbojpeg.h']]],
|
||||||
|
['tjplanesizeyuv_76',['tjPlaneSizeYUV',['../group___turbo_j_p_e_g.html#gab4ab7b24f6e797d79abaaa670373961d',1,'turbojpeg.h']]],
|
||||||
|
['tjplanewidth_77',['tjPlaneWidth',['../group___turbo_j_p_e_g.html#ga63fb66bb1e36c74008c4634360becbb1',1,'turbojpeg.h']]],
|
||||||
|
['tjredoffset_78',['tjRedOffset',['../group___turbo_j_p_e_g.html#gadd9b446742ac8a3923f7992c7988fea8',1,'turbojpeg.h']]],
|
||||||
|
['tjregion_79',['tjregion',['../structtjregion.html',1,'']]],
|
||||||
|
['tjsamp_80',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f411_81',['TJSAMP_411',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a28ec62575e5ea295c3fde3001dc628e2',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f420_82',['TJSAMP_420',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f422_83',['TJSAMP_422',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f440_84',['TJSAMP_440',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f444_85',['TJSAMP_444',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5fgray_86',['TJSAMP_GRAY',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248',1,'turbojpeg.h']]],
|
||||||
|
['tjsaveimage_87',['tjSaveImage',['../group___turbo_j_p_e_g.html#ga6f445b22d8933ae4815b3370a538d879',1,'turbojpeg.h']]],
|
||||||
|
['tjscaled_88',['TJSCALED',['../group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df',1,'turbojpeg.h']]],
|
||||||
|
['tjscalingfactor_89',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
|
||||||
|
['tjtransform_90',['tjtransform',['../structtjtransform.html',1,'tjtransform'],['../group___turbo_j_p_e_g.html#ga504805ec0161f1b505397ca0118bf8fd',1,'tjtransform(): turbojpeg.h'],['../group___turbo_j_p_e_g.html#ga9cb8abf4cc91881e04a0329b2270be25',1,'tjTransform(tjhandle handle, const unsigned char *jpegBuf, unsigned long jpegSize, int n, unsigned char **dstBufs, unsigned long *dstSizes, tjtransform *transforms, int flags): turbojpeg.h']]],
|
||||||
|
['tjxop_91',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fhflip_92',['TJXOP_HFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fnone_93',['TJXOP_NONE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot180_94',['TJXOP_ROT180',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot270_95',['TJXOP_ROT270',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot90_96',['TJXOP_ROT90',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5ftranspose_97',['TJXOP_TRANSPOSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5ftransverse_98',['TJXOP_TRANSVERSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fvflip_99',['TJXOP_VFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fcopynone_100',['TJXOPT_COPYNONE',['../group___turbo_j_p_e_g.html#ga153b468cfb905d0de61706c838986fe8',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fcrop_101',['TJXOPT_CROP',['../group___turbo_j_p_e_g.html#ga9c771a757fc1294add611906b89ab2d2',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fgray_102',['TJXOPT_GRAY',['../group___turbo_j_p_e_g.html#ga3acee7b48ade1b99e5588736007c2589',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fnooutput_103',['TJXOPT_NOOUTPUT',['../group___turbo_j_p_e_g.html#gafbf992bbf6e006705886333703ffab31',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fperfect_104',['TJXOPT_PERFECT',['../group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fprogressive_105',['TJXOPT_PROGRESSIVE',['../group___turbo_j_p_e_g.html#gad2371c80674584ecc1a7d75e564cf026',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5ftrim_106',['TJXOPT_TRIM',['../group___turbo_j_p_e_g.html#ga319826b7eb1583c0595bbe7b95428709',1,'turbojpeg.h']]],
|
||||||
|
['turbojpeg_107',['TurboJPEG',['../group___turbo_j_p_e_g.html',1,'']]]
|
||||||
|
];
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['customfilter',['customFilter',['../structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1',1,'tjtransform']]]
|
|
||||||
];
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['data',['data',['../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3',1,'tjtransform']]],
|
|
||||||
['denom',['denom',['../structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3',1,'tjscalingfactor']]]
|
|
||||||
];
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['h',['h',['../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115',1,'tjregion']]]
|
|
||||||
];
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['num',['num',['../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec',1,'tjscalingfactor']]]
|
|
||||||
];
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html><head><title></title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="all_6f.js"></script>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
|
||||||
<div id="SRResults"></div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
createResults();
|
|
||||||
--></script>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
document.getElementById("Loading").style.display="none";
|
|
||||||
document.getElementById("NoMatches").style.display="none";
|
|
||||||
var searchResults = new SearchResults("searchResults");
|
|
||||||
searchResults.Search();
|
|
||||||
--></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['op',['op',['../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498',1,'tjtransform']]],
|
|
||||||
['options',['options',['../structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6',1,'tjtransform']]]
|
|
||||||
];
|
|
||||||
36
doc/html/search/all_7.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.20"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_7.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
createResults();
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
window.addEventListener("message", function(event) {
|
||||||
|
if (event.data == "take_focus") {
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
4
doc/html/search/all_7.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['w_108',['w',['../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42',1,'tjregion']]]
|
||||||
|
];
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html><head><title></title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="all_72.js"></script>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
|
||||||
<div id="SRResults"></div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
createResults();
|
|
||||||
--></script>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
document.getElementById("Loading").style.display="none";
|
|
||||||
document.getElementById("NoMatches").style.display="none";
|
|
||||||
var searchResults = new SearchResults("searchResults");
|
|
||||||
searchResults.Search();
|
|
||||||
--></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
var searchData=
|
|
||||||
[
|
|
||||||
['r',['r',['../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf',1,'tjtransform']]]
|
|
||||||
];
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html><head><title></title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
||||||
<meta name="generator" content="Doxygen 1.8.3.1">
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="all_74.js"></script>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
|
||||||
<div id="SRResults"></div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
createResults();
|
|
||||||
--></script>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
document.getElementById("Loading").style.display="none";
|
|
||||||
document.getElementById("NoMatches").style.display="none";
|
|
||||||
var searchResults = new SearchResults("searchResults");
|
|
||||||
searchResults.Search();
|
|
||||||
--></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,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>
|
||||||