Compare commits
637 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0826579077 | ||
|
|
9b8d11f05e | ||
|
|
1d3b119320 | ||
|
|
38869c2d5d | ||
|
|
b6e0d504f7 | ||
|
|
3611168b5a | ||
|
|
97e2e1df43 | ||
|
|
ed667d4bfd | ||
|
|
c6d33b6d69 | ||
|
|
15274b901a | ||
|
|
d04cff3d6c | ||
|
|
e81cb16e0f | ||
|
|
3e703af408 | ||
|
|
b4ca1ba192 | ||
|
|
1c864a9d15 | ||
|
|
ab56b9841c | ||
|
|
f23981b0aa | ||
|
|
3358df7da4 | ||
|
|
4e55d44658 | ||
|
|
3be781679c | ||
|
|
45fa88190f | ||
|
|
00e71d4c07 | ||
|
|
b20e7f17dd | ||
|
|
60a75c8a47 | ||
|
|
63f4cf4222 | ||
|
|
7f200a2acc | ||
|
|
f29eda6485 | ||
|
|
bcbca8b9bc | ||
|
|
b3f0abe377 | ||
|
|
6d9591703f | ||
|
|
2e40a6875d | ||
|
|
758e8a8e9f | ||
|
|
fe1e555a73 | ||
|
|
bb1d540a80 | ||
|
|
dd8b15ee82 | ||
|
|
e7e9344db1 | ||
|
|
5550c80fdc | ||
|
|
939f3814ab | ||
|
|
a5689cd45b | ||
|
|
f5f8f5aadc | ||
|
|
843d04d9d4 | ||
|
|
797c6ccd98 | ||
|
|
7ec70ee891 | ||
|
|
174672af4e | ||
|
|
eb75363004 | ||
|
|
0fb8fbe158 | ||
|
|
8d76e4e550 | ||
|
|
9983840eb6 | ||
|
|
8456d2b98c | ||
|
|
5cf7960678 | ||
|
|
d62079717c | ||
|
|
c72bbd9c06 | ||
|
|
35199878f6 | ||
|
|
00a261c473 | ||
|
|
4851cbe406 | ||
|
|
548f732432 | ||
|
|
de4bbac55e | ||
|
|
0acb084464 | ||
|
|
d44fc54f94 | ||
|
|
8c2e7306cf | ||
|
|
49f1b5807d | ||
|
|
a9723f8a98 | ||
|
|
562ad7612e | ||
|
|
488d42a8a5 | ||
|
|
0c23b0ad60 | ||
|
|
b4336c3afb | ||
|
|
8db0312668 | ||
|
|
0566d51e09 | ||
|
|
e287a35762 | ||
|
|
51d021bf01 | ||
|
|
bb3ab53157 | ||
|
|
a8aaaf5d5b | ||
|
|
94c64ead85 | ||
|
|
2c5312fd12 | ||
|
|
3c17063ef1 | ||
|
|
46173635be | ||
|
|
9ddcae4a8f | ||
|
|
bc491b16e2 | ||
|
|
0fc7313e54 | ||
|
|
7fa4b5b762 | ||
|
|
3f43bb3320 | ||
|
|
24e09baaf0 | ||
|
|
6a522fcda4 | ||
|
|
2dfe6c0fe9 | ||
|
|
710865cf0e | ||
|
|
fe218ca19c | ||
|
|
dfde1f857d | ||
|
|
905ec0fa01 | ||
|
|
34c055851e | ||
|
|
7bb958b732 | ||
|
|
3202feb08a | ||
|
|
1335547558 | ||
|
|
26fc07c8d1 | ||
|
|
b6ee1016ab | ||
|
|
d59b1a3bce | ||
|
|
36c51dd3eb | ||
|
|
9ef0d03e1e | ||
|
|
7d67c3495f | ||
|
|
17df25f92c | ||
|
|
289df647c0 | ||
|
|
0ef07927c3 | ||
|
|
1644bdb7d2 | ||
|
|
5a2353c2da | ||
|
|
335ed793f9 | ||
|
|
fa2b6ea092 | ||
|
|
be96fa0a40 | ||
|
|
abeca1f0cc | ||
|
|
3eee0dd747 | ||
|
|
55d342c788 | ||
|
|
6136a9e285 | ||
|
|
40419472fa | ||
|
|
45f018cb22 | ||
|
|
d51830473a | ||
|
|
8a4ce73c92 | ||
|
|
a27bad6552 | ||
|
|
837e471a90 | ||
|
|
df9dbff830 | ||
|
|
bf248a5093 | ||
|
|
220bd76188 | ||
|
|
cbdc20fbf4 | ||
|
|
7c61794faf | ||
|
|
78eaf0d46d | ||
|
|
0e2d289fab | ||
|
|
6c9f0897af | ||
|
|
ec32420f6b | ||
|
|
5b2beb4bc4 | ||
|
|
da48edfc49 | ||
|
|
3d1d68cf96 | ||
|
|
2c97a1ff07 | ||
|
|
47656a0820 | ||
|
|
0c6302e086 | ||
|
|
4ae5d3dac5 | ||
|
|
c0412b56d6 | ||
|
|
7722c54c63 | ||
|
|
f3c7116eaf | ||
|
|
61e03cc6b2 | ||
|
|
3a691f41f9 | ||
|
|
3bd754ee68 | ||
|
|
a9d87361c8 | ||
|
|
9b704f96b2 | ||
|
|
7b844bfda6 | ||
|
|
e17fa3a271 | ||
|
|
eadd2436ee | ||
|
|
dbae59281f | ||
|
|
300a344d65 | ||
|
|
21f5688aa4 | ||
|
|
ebca79d508 | ||
|
|
63bd71885f | ||
|
|
d6914b6b1e | ||
|
|
041c80a42e | ||
|
|
e429e379b0 | ||
|
|
035ea386d1 | ||
|
|
d011622f4b | ||
|
|
58cee6d90c | ||
|
|
f48f73d4ec | ||
|
|
895287572d | ||
|
|
30c21e559d | ||
|
|
926f1f3daf | ||
|
|
383286702c | ||
|
|
762f8b4f21 | ||
|
|
6c87537f60 | ||
|
|
31a301389b | ||
|
|
02b074fd90 | ||
|
|
e0c53aa38f | ||
|
|
369b84a4ee | ||
|
|
4a831d6e48 | ||
|
|
53aafa949a | ||
|
|
240a5a5cbb | ||
|
|
7173889223 | ||
|
|
bf9f319cb4 | ||
|
|
19f9d8f0fd | ||
|
|
c8d52f1c4c | ||
|
|
6b9e3b0400 | ||
|
|
41b18e8d61 | ||
|
|
a403ad5b52 | ||
|
|
fcfd2ada75 | ||
|
|
58cbda3e37 | ||
|
|
c27695a193 | ||
|
|
65a85ce34e | ||
|
|
0e9683c4c6 | ||
|
|
be678e5a1b | ||
|
|
6b506ed397 | ||
|
|
2192560d74 | ||
|
|
4e7ff7b922 | ||
|
|
10693e6441 | ||
|
|
36aaeebb55 | ||
|
|
2e1b8a462f | ||
|
|
3a53627306 | ||
|
|
42ce199c9c | ||
|
|
62590d428b | ||
|
|
9f756bc67a | ||
|
|
3f43c6a310 | ||
|
|
d491094b41 | ||
|
|
0d20aa15ce | ||
|
|
bc087d6aa9 | ||
|
|
7313fe5aea | ||
|
|
cc8c6d3667 | ||
|
|
9d2f189c29 | ||
|
|
386ec0abc7 | ||
|
|
fc881ebb21 | ||
|
|
58a3427ffc | ||
|
|
0827eaff11 | ||
|
|
9c432a4d40 | ||
|
|
c8a20e0c2f | ||
|
|
97df8ea9ed | ||
|
|
c13fe15955 | ||
|
|
33eaf17e5b | ||
|
|
d67edaff83 | ||
|
|
2af984fdae | ||
|
|
6c61033349 | ||
|
|
8ecba3647e | ||
|
|
6316d4d752 | ||
|
|
2a5a3c6f0a | ||
|
|
af265e7562 | ||
|
|
d743a2c12e | ||
|
|
4e028ecd63 | ||
|
|
89ceac8c85 | ||
|
|
a93f6a7a63 | ||
|
|
dd89ce6cd6 | ||
|
|
fd93d98a95 | ||
|
|
0205c6e04c | ||
|
|
6c5caf30e2 | ||
|
|
3b19db4e6e | ||
|
|
427c304595 | ||
|
|
fd8c4da0ac | ||
|
|
9b3a8f3641 | ||
|
|
d0015876ec | ||
|
|
d7790789a6 | ||
|
|
54f571f8fb | ||
|
|
8c57aad0a3 | ||
|
|
b94041390c | ||
|
|
db9f297f1c | ||
|
|
96bc40c1b3 | ||
|
|
fc01f4673b | ||
|
|
1a1ea4eeba | ||
|
|
27f4ff80ce | ||
|
|
1485beaa49 | ||
|
|
8a1526a442 | ||
|
|
52659f4f47 | ||
|
|
edbb7e6d43 | ||
|
|
af1b4c8df4 | ||
|
|
2aac545899 | ||
|
|
7ab6222cff | ||
|
|
0738305ec5 | ||
|
|
98a6455875 | ||
|
|
b99e7590b0 | ||
|
|
28c2e60770 | ||
|
|
fb15efe94f | ||
|
|
6a060d8c95 | ||
|
|
c7c02d9288 | ||
|
|
7ed186ed79 | ||
|
|
08cbc23334 | ||
|
|
155a8b0321 | ||
|
|
0c0df2d0c7 | ||
|
|
22a6636852 | ||
|
|
d859232da3 | ||
|
|
d4589f4f1c | ||
|
|
94a2b95342 | ||
|
|
9a146f0f23 | ||
|
|
b03ee8b835 | ||
|
|
d260858395 | ||
|
|
0e63514214 | ||
|
|
d6d6ac739f | ||
|
|
2241434eb9 | ||
|
|
ad4e2ad86f | ||
|
|
803523402f | ||
|
|
dc4a93fab3 | ||
|
|
5da86f7430 | ||
|
|
7bb5cb560e | ||
|
|
0f047a5747 | ||
|
|
7f2eb09d6e | ||
|
|
e2a98701e4 | ||
|
|
73ca9712e3 | ||
|
|
403cfad611 | ||
|
|
c4105ba7ef | ||
|
|
e7a248ebb7 | ||
|
|
45cd2ded88 | ||
|
|
8b9bc4b963 | ||
|
|
4afa4d3ee8 | ||
|
|
140a1ea315 | ||
|
|
382563a58c | ||
|
|
98ff1fd103 | ||
|
|
b85b028d2b | ||
|
|
db9dd93da4 | ||
|
|
07129256e0 | ||
|
|
1a31176e0c | ||
|
|
74d5b168f7 | ||
|
|
25ccad99a0 | ||
|
|
3fb10c35d8 | ||
|
|
af618ffe09 | ||
|
|
918ace631e | ||
|
|
766910e8b2 | ||
|
|
b56e8b28ba | ||
|
|
6002720c37 | ||
|
|
bc086c4427 | ||
|
|
eb1fd4ad34 | ||
|
|
ed73fdc9be | ||
|
|
37dd973bef | ||
|
|
78a36f6dc3 | ||
|
|
aa3dd0bd29 | ||
|
|
1926ab4186 | ||
|
|
99866007c6 | ||
|
|
8fc9356581 | ||
|
|
97772cba65 | ||
|
|
217d1a75f5 | ||
|
|
b5a9ef64ea | ||
|
|
9ca7919a40 | ||
|
|
bf01ed2fbc | ||
|
|
e8b40f3c2b | ||
|
|
6c2bc901e2 | ||
|
|
664b64a9ac | ||
|
|
4f7a8afbb7 | ||
|
|
8c5e78ce29 | ||
|
|
8917c54877 | ||
|
|
cb3642cb0b | ||
|
|
ec6e451d05 | ||
|
|
2df43f51f1 | ||
|
|
2e8360e061 | ||
|
|
4d269d7cd5 | ||
|
|
51f1924e77 | ||
|
|
5acd9f2061 | ||
|
|
eb0a024af2 | ||
|
|
543bfc25f5 | ||
|
|
f579cc11b3 | ||
|
|
2fd634b833 | ||
|
|
2cad2169ae | ||
|
|
b3d3cbf43d | ||
|
|
fdfba4957c | ||
|
|
c5db99e1aa | ||
|
|
fd56921259 | ||
|
|
a2d2907ff0 | ||
|
|
513f9e6628 | ||
|
|
8162eddf04 | ||
|
|
931884e78d | ||
|
|
280784f7ab | ||
|
|
2e136a7190 | ||
|
|
f627319258 | ||
|
|
9f8f683e74 | ||
|
|
9a60181b3d | ||
|
|
4dbc293125 | ||
|
|
fc224c4889 | ||
|
|
59337a67b1 | ||
|
|
8a3b0f70d2 | ||
|
|
08978e58db | ||
|
|
aa5a359945 | ||
|
|
ba22c0f76d | ||
|
|
225781aff9 | ||
|
|
faa7c74aef | ||
|
|
aadd60ae49 | ||
|
|
0000dadf17 | ||
|
|
a405519e96 | ||
|
|
fac8381441 | ||
|
|
5c6a0f0971 | ||
|
|
5e797fa699 | ||
|
|
0f5d31e62f | ||
|
|
290ddbf71a | ||
|
|
b98dabac24 | ||
|
|
9171fd4bde | ||
|
|
d0e7c4548a | ||
|
|
dfc63d42ee | ||
|
|
82081337a0 | ||
|
|
67cb059046 | ||
|
|
5c8cac97c0 | ||
|
|
89a369dec1 | ||
|
|
df3c3dcb9b | ||
|
|
1b9edb5caf | ||
|
|
cb715fe1ae | ||
|
|
ebd1930207 | ||
|
|
263386c23a | ||
|
|
2ee7264d40 | ||
|
|
30cba2a2f8 | ||
|
|
a014845403 | ||
|
|
b3ae777964 | ||
|
|
a32038e3b3 | ||
|
|
7fec5074f9 | ||
|
|
fc562d11f0 | ||
|
|
f3c716a2bc | ||
|
|
6f1534d618 | ||
|
|
9abeff46d8 | ||
|
|
932b5bb0d5 | ||
|
|
e8df8a2d63 | ||
|
|
fdab4a7af4 | ||
|
|
0565548191 | ||
|
|
c5f269eb96 | ||
|
|
98bc3eeb3a | ||
|
|
147548c055 | ||
|
|
d640a45730 | ||
|
|
eb21c023ab | ||
|
|
13377e6b38 | ||
|
|
607b668ff9 | ||
|
|
ab6cae6f3b | ||
|
|
3ccb6ead23 | ||
|
|
6441ad0f83 | ||
|
|
6d2d6d3baf | ||
|
|
e1588a2a7b | ||
|
|
548490fe5e | ||
|
|
b579fc114d | ||
|
|
a3d4aadd0d | ||
|
|
d7d16df646 | ||
|
|
14ce28a92d | ||
|
|
da41ab94e7 | ||
|
|
1f55ae7b0f | ||
|
|
172972394a | ||
|
|
a7f0244e9b | ||
|
|
a01857cff6 | ||
|
|
57ba02a408 | ||
|
|
8a9a6dd15a | ||
|
|
73eff6effe | ||
|
|
2ce32e0fe5 | ||
|
|
e869a81a7a | ||
|
|
5446ff88d6 | ||
|
|
0f88060b0f | ||
|
|
ecf021bc0d | ||
|
|
4c5fa566b3 | ||
|
|
d401d62514 | ||
|
|
2fd4ae7b2c | ||
|
|
5552483db9 | ||
|
|
18edeff4e8 | ||
|
|
a9c41fbc4f | ||
|
|
739ecbc5ec | ||
|
|
4c313544e2 | ||
|
|
173900b1ca | ||
|
|
5d2430f4da | ||
|
|
129f0cb763 | ||
|
|
0a9b972178 | ||
|
|
2849d86aaa | ||
|
|
84d6306f64 | ||
|
|
512a7c3a51 | ||
|
|
e6e952d5d5 | ||
|
|
a72816ed07 | ||
|
|
4d9f256b01 | ||
|
|
b201838d8b | ||
|
|
a1bfc05854 | ||
|
|
2a2970af67 | ||
|
|
97a1575cb8 | ||
|
|
0081c2de20 | ||
|
|
9df5786f05 | ||
|
|
323469818c | ||
|
|
1a1fb615db | ||
|
|
5135c2e25d | ||
|
|
3932190c2e | ||
|
|
a219fd13b0 | ||
|
|
c23672ce52 | ||
|
|
4f51f36eb3 | ||
|
|
e0606dafff | ||
|
|
ffc1aa9674 | ||
|
|
55ec9b3b89 | ||
|
|
4de8f6922a | ||
|
|
785ec30eb4 | ||
|
|
d147be83e9 | ||
|
|
8fa70367ed | ||
|
|
171b875b27 | ||
|
|
3ab3234875 | ||
|
|
3e68a5ee20 | ||
|
|
4e45161654 | ||
|
|
629e96eedc | ||
|
|
ebaa67ea32 | ||
|
|
dd830b3ffe | ||
|
|
4ede2ef523 | ||
|
|
5cda8c5e31 | ||
|
|
47b66d1d1e | ||
|
|
55ab0d396c | ||
|
|
18bc4c6114 | ||
|
|
b1079002ad | ||
|
|
3311fc0001 | ||
|
|
34d264d64e | ||
|
|
f35fd27ec6 | ||
|
|
df17d398ec | ||
|
|
cd9a318502 | ||
|
|
d2d4465548 | ||
|
|
5536ace198 | ||
|
|
5dd906beff | ||
|
|
c81e91e8ca | ||
|
|
bff7959e34 | ||
|
|
6ad658be17 | ||
|
|
7b57cba6b4 | ||
|
|
2f9e8a1172 | ||
|
|
e4ec23d7ae | ||
|
|
e795afc330 | ||
|
|
2c01200c5d | ||
|
|
ed70101da2 | ||
|
|
c78b82bbb1 | ||
|
|
886ddb1786 | ||
|
|
69bd7ed953 | ||
|
|
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 | ||
|
|
292d78e786 | ||
|
|
8f8305981b | ||
|
|
33859880e9 | ||
|
|
bbd8089297 | ||
|
|
141f26ff6d | ||
|
|
4574f01f43 | ||
|
|
ba52a3de32 | ||
|
|
240ba417aa | ||
|
|
ed581cd935 | ||
|
|
2c6b68e283 | ||
|
|
2acfb93c94 | ||
|
|
975307775c | ||
|
|
5dbd39323c | ||
|
|
0f35cd68f2 | ||
|
|
f3c3f01d23 | ||
|
|
d0004de5dd | ||
|
|
3d84668d42 | ||
|
|
951d3677eb | ||
|
|
366168aa7d | ||
|
|
f73b1dbc60 | ||
|
|
4f2216b435 | ||
|
|
0efc4858d4 | ||
|
|
c7dd191271 | ||
|
|
7c1a1789d2 | ||
|
|
cd342acf7f | ||
|
|
88ae60986e | ||
|
|
7e4eac7021 | ||
|
|
9fc018fd1a | ||
|
|
96e4e7eb60 | ||
|
|
59352195b2 | ||
|
|
b8200c6601 | ||
|
|
ea8f643c16 | ||
|
|
460dfe40e1 | ||
|
|
ae08115d4d | ||
|
|
8789a5e255 | ||
|
|
1d7faf84a0 | ||
|
|
2b121d39e7 | ||
|
|
6ab61fa1d1 | ||
|
|
fe79f56b77 | ||
|
|
fb6f5e8b01 | ||
|
|
c77783ed41 | ||
|
|
4c5a15c362 | ||
|
|
b797f70012 | ||
|
|
80d77720c3 | ||
|
|
aecee25695 | ||
|
|
70040cb7ee | ||
|
|
219e8e8f65 | ||
|
|
b0f92a1d6c | ||
|
|
77ff3bd66d | ||
|
|
00d48d7e8c | ||
|
|
9a2cf32317 | ||
|
|
6aabca86d3 | ||
|
|
379edfd815 | ||
|
|
ada6ea5105 | ||
|
|
167b5a8059 | ||
|
|
4c57ad476c | ||
|
|
04d3143a65 | ||
|
|
b34c85ea4a | ||
|
|
c4675d62e8 | ||
|
|
80acd5c4a7 | ||
|
|
5000eaa3a6 | ||
|
|
e98b061282 | ||
|
|
54288598bb | ||
|
|
81b8c0eed5 | ||
|
|
52fef34928 | ||
|
|
e821464f79 | ||
|
|
b8a7680e12 | ||
|
|
f64c5508df | ||
|
|
26b4d62a65 | ||
|
|
9c6f79e919 | ||
|
|
f60b6dd36f | ||
|
|
c43a5081ce | ||
|
|
713c451f58 | ||
|
|
2234deeeed | ||
|
|
82695cfddf | ||
|
|
42825b68d5 | ||
|
|
f2d4b47315 | ||
|
|
45dff48c9f | ||
|
|
d70047fcd2 | ||
|
|
cbf0fcc8b7 | ||
|
|
bbedb4b564 | ||
|
|
087c29e07f | ||
|
|
d92ae5df0c | ||
|
|
adf9cc942f | ||
|
|
95f4d6ef8b | ||
|
|
2ae2bd66b4 | ||
|
|
b7523059c1 | ||
|
|
b4110b65fc | ||
|
|
8ef53b102f | ||
|
|
7fbfe29c65 | ||
|
|
051f4862f9 | ||
|
|
c055c88057 | ||
|
|
85d96d4478 | ||
|
|
f36d531553 | ||
|
|
8a0e35b212 | ||
|
|
afbe48c290 | ||
|
|
98ff5507d8 | ||
|
|
3ca6dba96e | ||
|
|
aaf58dabb6 | ||
|
|
a9075a17c3 | ||
|
|
bdec995839 | ||
|
|
fa905fbf7b | ||
|
|
9aada25ced | ||
|
|
73fd604161 | ||
|
|
2f9e7c84d1 | ||
|
|
3c7199ff06 | ||
|
|
73b98acd8b | ||
|
|
bb0d170288 | ||
|
|
db84125fcb | ||
|
|
ae4221f905 | ||
|
|
674343ab14 | ||
|
|
6fac90945a | ||
|
|
01e3032354 | ||
|
|
42d62bf114 | ||
|
|
a39c970d27 | ||
|
|
12f3d0be84 | ||
|
|
2cc4f93c88 | ||
|
|
133e4af070 | ||
|
|
995eb29dc3 |
5
.gitattributes
vendored
@@ -1,4 +1,5 @@
|
|||||||
/.travis.yml export-ignore
|
|
||||||
/appveyor.yml export-ignore
|
/appveyor.yml export-ignore
|
||||||
/ci export-ignore
|
|
||||||
/.gitattributes export-ignore
|
/.gitattributes export-ignore
|
||||||
|
/.github export-ignore
|
||||||
|
*.ppm binary
|
||||||
|
/ChangeLog.md conflict-marker-size=8
|
||||||
|
|||||||
8
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
**Complete description of the bug fix or feature that this pull request implements**
|
||||||
|
|
||||||
|
|
||||||
|
**Checklist before submitting the pull request, to maximize the chances that the pull request will be accepted**
|
||||||
|
|
||||||
|
- [ ] Read CONTRIBUTING.md, a link to which appears under "Helpful resources" below. That document discusses general guidelines for contributing to libjpeg-turbo, as well as the types of contributions that will not be accepted or are unlikely to be accepted.
|
||||||
|
- [ ] Search the existing issues and pull requests (both open and closed) to ensure that a similar request has not already been submitted and rejected.
|
||||||
|
- [ ] Discuss the proposed bug fix or feature in a GitHub issue, through direct e-mail with the project maintainer, or on the libjpeg-turbo-devel mailing list.
|
||||||
324
BUILDING.md
@@ -8,40 +8,28 @@ Build Requirements
|
|||||||
|
|
||||||
### All Systems
|
### All Systems
|
||||||
|
|
||||||
- [CMake](http://www.cmake.org) v2.8.12 or later
|
- [CMake](https://cmake.org) v2.8.12 or later
|
||||||
|
|
||||||
- [NASM](http://www.nasm.us) or [YASM](http://yasm.tortall.net)
|
- [NASM](https://nasm.us) or [Yasm](https://yasm.tortall.net)
|
||||||
(if building x86 or x86-64 SIMD extensions)
|
(if building x86 or x86-64 SIMD extensions)
|
||||||
* If using NASM, 2.10 or later is required.
|
* If using NASM, 2.13 or later is required.
|
||||||
* If using NASM, 2.10 or later (except 2.11.08) is required for an x86-64 Mac
|
* If using Yasm, 1.2.0 or later is required.
|
||||||
build (2.11.08 does not work properly with libjpeg-turbo's x86-64 SIMD code
|
* NASM 2.15 or later is required if building libjpeg-turbo with Intel
|
||||||
when building macho64 objects.)
|
Control-flow Enforcement Technology (CET) support.
|
||||||
* If using YASM, 1.2.0 or later is required.
|
* If building on macOS, NASM or Yasm can be obtained from
|
||||||
* If building on macOS, NASM or YASM can be obtained from
|
[MacPorts](https://macports.org) or [Homebrew](https://brew.sh).
|
||||||
[MacPorts](http://www.macports.org/) or [Homebrew](http://brew.sh/).
|
|
||||||
- NOTE: Currently, if it is desirable to hide the SIMD function symbols in
|
- NOTE: Currently, if it is desirable to hide the SIMD function symbols in
|
||||||
Mac executables or shared libraries that statically link with
|
Mac executables or shared libraries that statically link with
|
||||||
libjpeg-turbo, then NASM 2.14 or later or YASM must be used when
|
libjpeg-turbo, then NASM 2.14 or later or Yasm must be used when
|
||||||
building libjpeg-turbo.
|
building libjpeg-turbo.
|
||||||
* If building on Windows, **nasm.exe**/**yasm.exe** should be in your `PATH`.
|
* If NASM or Yasm is not in your `PATH`, then you can specify the full path
|
||||||
* NASM and YASM are located in the CRB (Code Ready Builder) repository on
|
to the assembler by using either the `CMAKE_ASM_NASM_COMPILER` CMake
|
||||||
Red Hat Enterprise Linux 8 and in the PowerTools repository on CentOS 8,
|
variable or the `ASM_NASM` environment variable. On Windows, use forward
|
||||||
which is not enabled by default.
|
slashes rather than backslashes in the path (for example,
|
||||||
|
**c:/nasm/nasm.exe**).
|
||||||
The binary RPMs released by the NASM project do not work on older Linux
|
* NASM and Yasm are located in the CRB (Code Ready Builder) or PowerTools
|
||||||
systems, such as Red Hat Enterprise Linux 5. On such systems, you can easily
|
repository on Red Hat Enterprise Linux 8+ and derivatives, which is not
|
||||||
build and install NASM from a source RPM by downloading one of the SRPMs from
|
enabled by default.
|
||||||
|
|
||||||
<http://www.nasm.us/pub/nasm/releasebuilds>
|
|
||||||
|
|
||||||
and executing the following as root:
|
|
||||||
|
|
||||||
ARCH=`uname -m`
|
|
||||||
rpmbuild --rebuild nasm-{version}.src.rpm
|
|
||||||
rpm -Uvh /usr/src/redhat/RPMS/$ARCH/nasm-{version}.$ARCH.rpm
|
|
||||||
|
|
||||||
NOTE: the NASM build will fail if texinfo is not installed.
|
|
||||||
|
|
||||||
|
|
||||||
### Un*x Platforms (including Linux, Mac, FreeBSD, Solaris, and Cygwin)
|
### Un*x Platforms (including Linux, Mac, FreeBSD, Solaris, and Cygwin)
|
||||||
|
|
||||||
@@ -49,11 +37,9 @@ Build Requirements
|
|||||||
|
|
||||||
- If building the TurboJPEG Java wrapper, JDK or OpenJDK 1.5 or later is
|
- If building the TurboJPEG Java wrapper, JDK or OpenJDK 1.5 or later is
|
||||||
required. Most modern Linux distributions, as well as Solaris 10 and later,
|
required. Most modern Linux distributions, as well as Solaris 10 and later,
|
||||||
include JDK or OpenJDK. On OS X 10.5 and 10.6, it will be necessary to
|
include JDK or OpenJDK. For other systems, you can obtain the Oracle Java
|
||||||
install the Java Developer Package, which can be downloaded from
|
Development Kit from
|
||||||
<http://developer.apple.com/downloads> (Apple ID required.) For other
|
<https://oracle.com/java/technologies/downloads>.
|
||||||
systems, you can obtain the Oracle Java Development Kit from
|
|
||||||
<http://www.oracle.com/technetwork/java/javase/downloads>.
|
|
||||||
|
|
||||||
* If using JDK 11 or later, CMake 3.10.x or later must also be used.
|
* If using JDK 11 or later, CMake 3.10.x or later must also be used.
|
||||||
|
|
||||||
@@ -62,49 +48,64 @@ Build Requirements
|
|||||||
- Microsoft Visual C++ 2005 or later
|
- Microsoft Visual C++ 2005 or later
|
||||||
|
|
||||||
If you don't already have Visual C++, then the easiest way to get it is by
|
If you don't already have Visual C++, then the easiest way to get it is by
|
||||||
installing the
|
installing
|
||||||
[Windows SDK](http://msdn.microsoft.com/en-us/windows/bb980924.aspx).
|
[Visual Studio Community Edition](https://visualstudio.microsoft.com),
|
||||||
The Windows SDK includes both 32-bit and 64-bit Visual C++ compilers and
|
which includes everything necessary to build libjpeg-turbo.
|
||||||
everything necessary to build libjpeg-turbo.
|
|
||||||
|
|
||||||
* You can also use Microsoft Visual Studio Express/Community Edition, which
|
* You can also download and install the standalone Windows SDK (for Windows 7
|
||||||
is a free download. (NOTE: versions prior to 2012 can only be used to
|
or later), which includes command-line versions of the 32-bit and 64-bit
|
||||||
build 32-bit code.)
|
Visual C++ compilers.
|
||||||
* If you intend to build libjpeg-turbo from the command line, then add the
|
* If you intend to build libjpeg-turbo from the command line, then add the
|
||||||
appropriate compiler and SDK directories to the `INCLUDE`, `LIB`, and
|
appropriate compiler and SDK directories to the `INCLUDE`, `LIB`, and
|
||||||
`PATH` environment variables. This is generally accomplished by
|
`PATH` environment variables. This is generally accomplished by
|
||||||
executing `vcvars32.bat` or `vcvars64.bat` and `SetEnv.cmd`.
|
executing `vcvars32.bat` or `vcvars64.bat`, which are located in the same
|
||||||
`vcvars32.bat` and `vcvars64.bat` are part of Visual C++ and are located in
|
directory as the compiler.
|
||||||
the same directory as the compiler. `SetEnv.cmd` is part of the Windows
|
* If built with Visual C++ 2015 or later, the libjpeg-turbo static libraries
|
||||||
SDK. You can pass optional arguments to `SetEnv.cmd` to specify a 32-bit
|
cannot be used with earlier versions of Visual C++, and vice versa.
|
||||||
or 64-bit build environment.
|
* The libjpeg API DLL (**jpeg{version}.dll**) will depend on the C run-time
|
||||||
|
DLLs corresponding to the version of Visual C++ that was used to build it.
|
||||||
|
|
||||||
|
- Vcpkg
|
||||||
|
|
||||||
|
You need to download and install libpng using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager:
|
||||||
|
|
||||||
|
git clone https://github.com/Microsoft/vcpkg.git
|
||||||
|
cd vcpkg
|
||||||
|
./bootstrap-vcpkg.bat
|
||||||
|
./vcpkg integrate install
|
||||||
|
./vcpkg install libpng:x64-windows
|
||||||
|
./vcpkg install libpng:x64-windows-static
|
||||||
|
|
||||||
|
Actually, you can just download and install MozJPEG using vcpkg dependency manager:
|
||||||
|
|
||||||
|
./vcpkg install mozjpeg
|
||||||
|
|
||||||
|
The mozjpeg port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
|
||||||
|
|
||||||
|
|
||||||
... OR ...
|
... OR ...
|
||||||
|
|
||||||
|
|
||||||
- MinGW
|
- MinGW
|
||||||
|
|
||||||
[MSYS2](http://msys2.github.io/) or [tdm-gcc](http://tdm-gcc.tdragon.net/)
|
[MSYS2](https://msys2.org) or [tdm-gcc](https://jmeubank.github.io/tdm-gcc)
|
||||||
recommended if building on a Windows machine. Both distributions install a
|
recommended if building on a Windows machine. Both distributions install a
|
||||||
Start Menu link that can be used to launch a command prompt with the
|
Start Menu link that can be used to launch a command prompt with the
|
||||||
appropriate compiler paths automatically set.
|
appropriate compiler paths automatically set.
|
||||||
|
|
||||||
- If building the TurboJPEG Java wrapper, JDK 1.5 or later is required. This
|
- If building the TurboJPEG Java wrapper, JDK 1.5 or later is required. This
|
||||||
can be downloaded from
|
can be downloaded from
|
||||||
<http://www.oracle.com/technetwork/java/javase/downloads>.
|
<https://oracle.com/java/technologies/downloads>.
|
||||||
|
|
||||||
* If using JDK 11 or later, CMake 3.10.x or later must also be used.
|
* If using JDK 11 or later, CMake 3.10.x or later must also be used.
|
||||||
|
|
||||||
- Vcpkg
|
|
||||||
|
|
||||||
You can download and install mozjpeg using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager:
|
|
||||||
|
|
||||||
git clone https://github.com/Microsoft/vcpkg.git
|
Sub-Project Builds
|
||||||
cd vcpkg
|
------------------
|
||||||
./bootstrap-vcpkg.sh
|
|
||||||
./vcpkg integrate install
|
The libjpeg-turbo build system does not support being included as a sub-project
|
||||||
vcpkg install mozjpeg
|
using the CMake `add_subdirectory()` function. Use the CMake
|
||||||
|
`ExternalProject_Add()` function instead.
|
||||||
The mozjpeg port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
|
|
||||||
|
|
||||||
|
|
||||||
Out-of-Tree Builds
|
Out-of-Tree Builds
|
||||||
@@ -120,6 +121,14 @@ directory, whereas *{source_directory}* refers to the libjpeg-turbo source
|
|||||||
directory. For in-tree builds, these directories are the same.
|
directory. For in-tree builds, these directories are the same.
|
||||||
|
|
||||||
|
|
||||||
|
Ninja
|
||||||
|
-----
|
||||||
|
|
||||||
|
If using Ninja, then replace `make` or `nmake` with `ninja`, and replace the
|
||||||
|
CMake generator (specified with the `-G` option) with `Ninja`, in all of the
|
||||||
|
procedures and recipes below.
|
||||||
|
|
||||||
|
|
||||||
Build Procedure
|
Build Procedure
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
@@ -300,15 +309,6 @@ API/ABI-compatible with libjpeg v8. See [README.md](README.md) for more
|
|||||||
information about libjpeg v7 and v8 emulation.
|
information about libjpeg v7 and v8 emulation.
|
||||||
|
|
||||||
|
|
||||||
### In-Memory Source/Destination Managers
|
|
||||||
|
|
||||||
When using libjpeg v6b or v7 API/ABI emulation, add `-DWITH_MEM_SRCDST=0` to
|
|
||||||
the CMake command line to build a version of libjpeg-turbo that lacks the
|
|
||||||
`jpeg_mem_src()` and `jpeg_mem_dest()` functions. These functions were not
|
|
||||||
part of the original libjpeg v6b and v7 APIs, so removing them ensures strict
|
|
||||||
conformance with those APIs. See [README.md](README.md) for more information.
|
|
||||||
|
|
||||||
|
|
||||||
### Arithmetic Coding Support
|
### Arithmetic Coding Support
|
||||||
|
|
||||||
Since the patent on arithmetic coding has expired, this functionality has been
|
Since the patent on arithmetic coding has expired, this functionality has been
|
||||||
@@ -345,7 +345,7 @@ Build Recipes
|
|||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
|
||||||
### 32-bit Build on 64-bit Linux/Unix/Mac
|
### 32-bit Build on 64-bit Linux/Unix
|
||||||
|
|
||||||
Use export/setenv to set the following environment variables before running
|
Use export/setenv to set the following environment variables before running
|
||||||
CMake:
|
CMake:
|
||||||
@@ -384,9 +384,13 @@ located (usually **/usr/bin**.) Next, execute the following commands:
|
|||||||
|
|
||||||
cd {build_directory}
|
cd {build_directory}
|
||||||
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
||||||
|
-DCMAKE_INSTALL_PREFIX={install_path} \
|
||||||
[additional CMake flags] {source_directory}
|
[additional CMake flags] {source_directory}
|
||||||
make
|
make
|
||||||
|
|
||||||
|
*{install\_path}* is the path under which the libjpeg-turbo binaries should be
|
||||||
|
installed.
|
||||||
|
|
||||||
|
|
||||||
### 64-bit MinGW Build on Un*x (including Mac and Cygwin)
|
### 64-bit MinGW Build on Un*x (including Mac and Cygwin)
|
||||||
|
|
||||||
@@ -403,9 +407,13 @@ located (usually **/usr/bin**.) Next, execute the following commands:
|
|||||||
|
|
||||||
cd {build_directory}
|
cd {build_directory}
|
||||||
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
||||||
|
-DCMAKE_INSTALL_PREFIX={install_path} \
|
||||||
[additional CMake flags] {source_directory}
|
[additional CMake flags] {source_directory}
|
||||||
make
|
make
|
||||||
|
|
||||||
|
*{install\_path}* is the path under which the libjpeg-turbo binaries should be
|
||||||
|
installed.
|
||||||
|
|
||||||
|
|
||||||
Building libjpeg-turbo for iOS
|
Building libjpeg-turbo for iOS
|
||||||
------------------------------
|
------------------------------
|
||||||
@@ -417,137 +425,42 @@ compression/decompression. This section describes how to build libjpeg-turbo
|
|||||||
for these platforms.
|
for these platforms.
|
||||||
|
|
||||||
|
|
||||||
### Additional build requirements
|
|
||||||
|
|
||||||
- For configurations that require [gas-preprocessor.pl]
|
|
||||||
(https://raw.githubusercontent.com/libjpeg-turbo/gas-preprocessor/master/gas-preprocessor.pl),
|
|
||||||
it should be installed in your `PATH`.
|
|
||||||
|
|
||||||
|
|
||||||
### Armv7 (32-bit)
|
|
||||||
|
|
||||||
**gas-preprocessor.pl required**
|
|
||||||
|
|
||||||
The following scripts demonstrate how to build libjpeg-turbo to run on the
|
|
||||||
iPhone 3GS-4S/iPad 1st-3rd Generation and newer:
|
|
||||||
|
|
||||||
#### Xcode 4.2 and earlier (LLVM-GCC)
|
|
||||||
|
|
||||||
IOS_PLATFORMDIR=/Developer/Platforms/iPhoneOS.platform
|
|
||||||
IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk)
|
|
||||||
export CFLAGS="-mfloat-abi=softfp -march=armv7 -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -miphoneos-version-min=3.0"
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
|
|
||||||
cat <<EOF >toolchain.cmake
|
|
||||||
set(CMAKE_SYSTEM_NAME Darwin)
|
|
||||||
set(CMAKE_SYSTEM_PROCESSOR arm)
|
|
||||||
set(CMAKE_C_COMPILER ${IOS_PLATFORMDIR}/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
|
||||||
-DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} \
|
|
||||||
[additional CMake flags] {source_directory}
|
|
||||||
make
|
|
||||||
|
|
||||||
#### Xcode 4.3-4.6 (LLVM-GCC)
|
|
||||||
|
|
||||||
Same as above, but replace the first line with:
|
|
||||||
|
|
||||||
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
|
||||||
|
|
||||||
#### Xcode 5 and later (Clang)
|
|
||||||
|
|
||||||
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
|
||||||
IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk)
|
|
||||||
export CFLAGS="-mfloat-abi=softfp -arch armv7 -miphoneos-version-min=3.0"
|
|
||||||
export ASMFLAGS="-no-integrated-as"
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
|
|
||||||
cat <<EOF >toolchain.cmake
|
|
||||||
set(CMAKE_SYSTEM_NAME Darwin)
|
|
||||||
set(CMAKE_SYSTEM_PROCESSOR arm)
|
|
||||||
set(CMAKE_C_COMPILER /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
|
||||||
-DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} \
|
|
||||||
[additional CMake flags] {source_directory}
|
|
||||||
make
|
|
||||||
|
|
||||||
|
|
||||||
### Armv7s (32-bit)
|
|
||||||
|
|
||||||
**gas-preprocessor.pl required**
|
|
||||||
|
|
||||||
The following scripts demonstrate how to build libjpeg-turbo to run on the
|
|
||||||
iPhone 5/iPad 4th Generation and newer:
|
|
||||||
|
|
||||||
#### Xcode 4.5-4.6 (LLVM-GCC)
|
|
||||||
|
|
||||||
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
|
||||||
IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk)
|
|
||||||
export CFLAGS="-Wall -mfloat-abi=softfp -march=armv7s -mcpu=swift -mtune=swift -mfpu=neon -miphoneos-version-min=6.0"
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
|
|
||||||
cat <<EOF >toolchain.cmake
|
|
||||||
set(CMAKE_SYSTEM_NAME Darwin)
|
|
||||||
set(CMAKE_SYSTEM_PROCESSOR arm)
|
|
||||||
set(CMAKE_C_COMPILER ${IOS_PLATFORMDIR}/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
|
||||||
-DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} \
|
|
||||||
[additional CMake flags] {source_directory}
|
|
||||||
make
|
|
||||||
|
|
||||||
#### Xcode 5 and later (Clang)
|
|
||||||
|
|
||||||
Same as the Armv7 build procedure for Xcode 5 and later, except replace the
|
|
||||||
compiler flags as follows:
|
|
||||||
|
|
||||||
export CFLAGS="-Wall -mfloat-abi=softfp -arch armv7s -miphoneos-version-min=6.0"
|
|
||||||
|
|
||||||
|
|
||||||
### Armv8 (64-bit)
|
### Armv8 (64-bit)
|
||||||
|
|
||||||
**gas-preprocessor.pl required if using Xcode < 6**
|
**Xcode 5 or later required, Xcode 6.3.x or later recommended**
|
||||||
|
|
||||||
The following script demonstrates how to build libjpeg-turbo to run on the
|
The following script demonstrates how to build libjpeg-turbo to run on the
|
||||||
iPhone 5S/iPad Mini 2/iPad Air and newer.
|
iPhone 5S/iPad Mini 2/iPad Air and newer.
|
||||||
|
|
||||||
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
||||||
IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk)
|
IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk)
|
||||||
export CFLAGS="-Wall -arch arm64 -miphoneos-version-min=8.0 -funwind-tables"
|
export CFLAGS="-Wall -miphoneos-version-min=8.0 -funwind-tables"
|
||||||
|
|
||||||
cd {build_directory}
|
cd {build_directory}
|
||||||
|
|
||||||
cat <<EOF >toolchain.cmake
|
cmake -G"Unix Makefiles" \
|
||||||
set(CMAKE_SYSTEM_NAME Darwin)
|
-DCMAKE_C_COMPILER=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang \
|
||||||
set(CMAKE_SYSTEM_PROCESSOR aarch64)
|
-DCMAKE_OSX_ARCHITECTURES=arm64 \
|
||||||
set(CMAKE_C_COMPILER /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
|
||||||
-DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} \
|
-DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} \
|
||||||
[additional CMake flags] {source_directory}
|
[additional CMake flags] {source_directory}
|
||||||
make
|
make
|
||||||
|
|
||||||
Once built, lipo can be used to combine the Armv7, v7s, and/or v8 variants into
|
Replace `iPhoneOS` with `iPhoneSimulator` and `-miphoneos-version-min` with
|
||||||
a universal library.
|
`-miphonesimulator-version-min` to build libjpeg-turbo for the iOS simulator on
|
||||||
|
Macs with Apple silicon CPUs.
|
||||||
|
|
||||||
|
|
||||||
Building libjpeg-turbo for Android
|
Building libjpeg-turbo for Android
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
|
||||||
Building libjpeg-turbo for Android platforms requires v13b or later of the
|
Building libjpeg-turbo for Android platforms requires v13b or later of the
|
||||||
[Android NDK](https://developer.android.com/tools/sdk/ndk).
|
[Android NDK](https://developer.android.com/ndk).
|
||||||
|
|
||||||
|
|
||||||
### Armv7 (32-bit)
|
### Armv7 (32-bit)
|
||||||
|
|
||||||
|
**NDK r19 or later with Clang recommended**
|
||||||
|
|
||||||
The following is a general recipe script that can be modified for your specific
|
The following is a general recipe script that can be modified for your specific
|
||||||
needs.
|
needs.
|
||||||
|
|
||||||
@@ -573,6 +486,8 @@ needs.
|
|||||||
|
|
||||||
### Armv8 (64-bit)
|
### Armv8 (64-bit)
|
||||||
|
|
||||||
|
**Clang recommended**
|
||||||
|
|
||||||
The following is a general recipe script that can be modified for your specific
|
The following is a general recipe script that can be modified for your specific
|
||||||
needs.
|
needs.
|
||||||
|
|
||||||
@@ -707,15 +622,6 @@ brackets, then its final value will depend on the final value of that other
|
|||||||
variable. For instance, the default value of `CMAKE_INSTALL_MANDIR` is
|
variable. For instance, the default value of `CMAKE_INSTALL_MANDIR` is
|
||||||
**\<CMAKE\_INSTALL\_DATAROOTDIR\>/man**.
|
**\<CMAKE\_INSTALL\_DATAROOTDIR\>/man**.
|
||||||
|
|
||||||
NOTE: If setting one of these directory variables to a relative path using the
|
|
||||||
CMake command line, you must specify that the variable is of type `PATH`.
|
|
||||||
For example:
|
|
||||||
|
|
||||||
cmake -G"{generator type}" -DCMAKE_INSTALL_LIBDIR:PATH=lib {source_directory}
|
|
||||||
|
|
||||||
Otherwise, CMake will assume that the path is relative to the build directory
|
|
||||||
rather than the install directory.
|
|
||||||
|
|
||||||
|
|
||||||
Creating Distribution Packages
|
Creating Distribution Packages
|
||||||
==============================
|
==============================
|
||||||
@@ -747,44 +653,24 @@ Mac
|
|||||||
make dmg
|
make dmg
|
||||||
|
|
||||||
Create Mac package/disk image. This requires pkgbuild and productbuild, which
|
Create Mac package/disk image. This requires pkgbuild and productbuild, which
|
||||||
are installed by default on OS X 10.7 and later and which can be obtained by
|
are installed by default on OS X/macOS 10.7 and later.
|
||||||
installing Xcode 3.2.6 (with the "Unix Development" option) on OS X 10.6.
|
|
||||||
Packages built in this manner can be installed on OS X 10.5 and later, but they
|
|
||||||
must be built on OS X 10.6 or later.
|
|
||||||
|
|
||||||
make udmg
|
In order to create a Mac package/disk image that contains universal
|
||||||
|
x86-64/Arm binaries, set the following CMake variable:
|
||||||
|
|
||||||
This creates a Mac package/disk image that contains universal x86-64/i386/Arm
|
* `SECONDARY_BUILD`: Directory containing a cross-compiled x86-64 or Armv8
|
||||||
binaries. The following CMake variables control which architectures are
|
(64-bit) iOS or macOS build of libjpeg-turbo to include in the universal
|
||||||
included in the universal binaries. Setting any of these variables to an empty
|
binaries
|
||||||
string excludes that architecture from the package.
|
|
||||||
|
|
||||||
* `OSX_32BIT_BUILD`: Directory containing an i386 (32-bit) Mac build of
|
You should first use CMake to configure the cross-compiled x86-64 or Armv8
|
||||||
libjpeg-turbo (default: *{source_directory}*/osxx86)
|
secondary build of libjpeg-turbo (see "Building libjpeg-turbo for iOS" above,
|
||||||
* `IOS_ARMV7_BUILD`: Directory containing an Armv7 (32-bit) iOS build of
|
if applicable) in a build directory that matches the one specified in the
|
||||||
libjpeg-turbo (default: *{source_directory}*/iosarmv7)
|
aforementioned CMake variable. Next, configure the primary (native) build of
|
||||||
* `IOS_ARMV7S_BUILD`: Directory containing an Armv7s (32-bit) iOS build of
|
libjpeg-turbo as an out-of-tree build, specifying the aforementioned CMake
|
||||||
libjpeg-turbo (default: *{source_directory}*/iosarmv7s)
|
variable, and build it. Once the primary build has been built, run `make dmg`
|
||||||
* `IOS_ARMV8_BUILD`: Directory containing an Armv8 (64-bit) iOS build of
|
from the build directory. The packaging system will build the secondary build,
|
||||||
libjpeg-turbo (default: *{source_directory}*/iosarmv8)
|
use lipo to combine it with the primary build into a single set of universal
|
||||||
|
binaries, then package the universal binaries.
|
||||||
You should first use CMake to configure i386, Armv7, Armv7s, and/or Armv8
|
|
||||||
sub-builds of libjpeg-turbo (see "Build Recipes" and "Building libjpeg-turbo
|
|
||||||
for iOS" above) in build directories that match those specified in the
|
|
||||||
aforementioned CMake variables. Next, configure the primary build of
|
|
||||||
libjpeg-turbo as an out-of-tree build, and build it. Once the primary build
|
|
||||||
has been built, run `make udmg` from the build directory. The packaging system
|
|
||||||
will build the sub-builds, use lipo to combine them into a single set of
|
|
||||||
universal binaries, then package the universal binaries in the same manner as
|
|
||||||
`make dmg`.
|
|
||||||
|
|
||||||
|
|
||||||
Cygwin
|
|
||||||
------
|
|
||||||
|
|
||||||
make cygwinpkg
|
|
||||||
|
|
||||||
Build a Cygwin binary package.
|
|
||||||
|
|
||||||
|
|
||||||
Windows
|
Windows
|
||||||
@@ -809,7 +695,7 @@ as the configuration you built (such as *{build_directory}*\Debug\ or
|
|||||||
*{build_directory}*\Release\).
|
*{build_directory}*\Release\).
|
||||||
|
|
||||||
Building a Windows installer requires the
|
Building a Windows installer requires the
|
||||||
[Nullsoft Install System](http://nsis.sourceforge.net/). makensis.exe should
|
[Nullsoft Install System](https://nsis.sourceforge.io). makensis.exe should
|
||||||
be in your `PATH`.
|
be in your `PATH`.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
902
BUILDING.txt
@@ -1,902 +0,0 @@
|
|||||||
*******************************************************************************
|
|
||||||
** Building on Un*x Platforms (including Cygwin and OS X)
|
|
||||||
*******************************************************************************
|
|
||||||
|
|
||||||
|
|
||||||
==================
|
|
||||||
Build Requirements
|
|
||||||
==================
|
|
||||||
|
|
||||||
-- pkg-config
|
|
||||||
-- autoconf 2.56 or later
|
|
||||||
-- automake 1.7 or later
|
|
||||||
-- libtool 1.4 or later
|
|
||||||
* If using Xcode 4.3 or later on OS X, autoconf and automake are no longer
|
|
||||||
provided. The easiest way to obtain them is from MacPorts
|
|
||||||
(http://www.macports.org/).
|
|
||||||
|
|
||||||
-- NASM or YASM (if building x86 or x86-64 SIMD extensions)
|
|
||||||
* NASM 0.98, or 2.01 or later is required for an x86 build (0.99 and 2.00 do
|
|
||||||
not work properly with libjpeg-turbo's x86 SIMD code.)
|
|
||||||
* NASM 2.00 or later is required for an x86-64 build.
|
|
||||||
* NASM 2.07, or 2.11.09 or later is required for an x86-64 Mac build
|
|
||||||
(2.11.08 does not work properly with libjpeg-turbo's x86-64 SIMD code when
|
|
||||||
building macho64 objects.) NASM or YASM can be obtained from MacPorts
|
|
||||||
(http://www.macports.org/).
|
|
||||||
|
|
||||||
The binary RPMs released by the NASM project do not work on older Linux
|
|
||||||
systems, such as Red Hat Enterprise Linux 4. On such systems, you can
|
|
||||||
easily build and install NASM from a source RPM by downloading one of the
|
|
||||||
SRPMs from
|
|
||||||
|
|
||||||
http://www.nasm.us/pub/nasm/releasebuilds
|
|
||||||
|
|
||||||
and executing the following as root:
|
|
||||||
|
|
||||||
ARCH=`uname -m`
|
|
||||||
rpmbuild --rebuild nasm-{version}.src.rpm
|
|
||||||
rpm -Uvh /usr/src/redhat/RPMS/$ARCH/nasm-{version}.$ARCH.rpm
|
|
||||||
|
|
||||||
NOTE: the NASM build will fail if texinfo is not installed.
|
|
||||||
|
|
||||||
-- GCC v4.1 or later recommended for best performance
|
|
||||||
* Beginning with Xcode 4, Apple stopped distributing GCC and switched to
|
|
||||||
the LLVM compiler. Xcode v4.0 through v4.6 provides a GCC front end
|
|
||||||
called LLVM-GCC. Unfortunately, as of this writing, neither LLVM-GCC nor
|
|
||||||
the LLVM (clang) compiler produces optimal performance with libjpeg-turbo.
|
|
||||||
Building mozjpeg with LLVM-GCC v4.2 results in a 10% performance
|
|
||||||
degradation when compressing using 64-bit code, relative to building
|
|
||||||
libjpeg-turbo with GCC v4.2. Building libjpeg-turbo with LLVM (clang)
|
|
||||||
results in a 20% performance degradation when compressing using 64-bit
|
|
||||||
code, relative to building libjpeg-turbo with GCC v4.2. If you are
|
|
||||||
running Snow Leopard or earlier, it is suggested that you continue to use
|
|
||||||
Xcode v3.2.6, which provides GCC v4.2. If you are using Lion or later, it
|
|
||||||
is suggested that you install Apple GCC v4.2 or GCC v5 through MacPorts.
|
|
||||||
|
|
||||||
-- If building the TurboJPEG Java wrapper, JDK or OpenJDK 1.5 or later is
|
|
||||||
required. Some systems, such as Solaris 10 and later and Red Hat Enterprise
|
|
||||||
Linux 5 and later, have this pre-installed. On OS X 10.5 and later, it will
|
|
||||||
be necessary to install the Java Developer Package, which can be downloaded
|
|
||||||
from http://developer.apple.com/downloads (Apple ID required.) For systems
|
|
||||||
that do not have a JDK installed, you can obtain the Oracle Java Development
|
|
||||||
Kit from http://www.java.com.
|
|
||||||
|
|
||||||
|
|
||||||
==================
|
|
||||||
Out-of-Tree Builds
|
|
||||||
==================
|
|
||||||
|
|
||||||
Binary objects, libraries, and executables are generated in the same directory
|
|
||||||
from which configure was executed (the "binary directory"), and this directory
|
|
||||||
need not necessarily be the same as the mozjpeg source directory. You
|
|
||||||
can create multiple independent binary directories, in which different versions
|
|
||||||
of mozjpeg can be built from the same source tree using different
|
|
||||||
compilers or settings. In the sections below, {build_directory} refers to the
|
|
||||||
binary directory, whereas {source_directory} refers to the mozjpeg source
|
|
||||||
directory. For in-tree builds, these directories are the same.
|
|
||||||
|
|
||||||
|
|
||||||
================
|
|
||||||
Building mozjpeg
|
|
||||||
================
|
|
||||||
|
|
||||||
The following procedure will build mozjpeg on Linux, FreeBSD, Cygwin, and
|
|
||||||
Solaris/x86 systems (on Solaris, this generates a 32-bit library. See below
|
|
||||||
for 64-bit build instructions.)
|
|
||||||
|
|
||||||
Simple Release tar.gz Source Build
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
cd {source_directory}
|
|
||||||
./configure [additional configure flags]
|
|
||||||
make
|
|
||||||
|
|
||||||
Non-Release Source Build (e.g. GitHub clone)
|
|
||||||
--------------------------------------------
|
|
||||||
|
|
||||||
cd {source_directory}
|
|
||||||
autoreconf -fiv
|
|
||||||
cd {build_directory}
|
|
||||||
sh {source_directory}/configure [additional configure flags]
|
|
||||||
make
|
|
||||||
|
|
||||||
NOTE: Running autoreconf in the source directory is not necessary if building
|
|
||||||
mozjpeg from one of the official release tarballs.
|
|
||||||
|
|
||||||
This will generate the following files under .libs/
|
|
||||||
|
|
||||||
libjpeg.a
|
|
||||||
Static link library for the libjpeg API
|
|
||||||
|
|
||||||
libjpeg.so.{version} (Linux, Unix)
|
|
||||||
libjpeg.{version}.dylib (OS X)
|
|
||||||
cygjpeg-{version}.dll (Cygwin)
|
|
||||||
Shared library for the libjpeg API
|
|
||||||
|
|
||||||
By default, {version} is 62.2.0, 7.2.0, or 8.1.2, depending on whether
|
|
||||||
libjpeg v6b (default), v7, or v8 emulation is enabled. If using Cygwin,
|
|
||||||
{version} is 62, 7, or 8.
|
|
||||||
|
|
||||||
libjpeg.so (Linux, Unix)
|
|
||||||
libjpeg.dylib (OS X)
|
|
||||||
Development symlink for the libjpeg API
|
|
||||||
|
|
||||||
libjpeg.dll.a (Cygwin)
|
|
||||||
Import library for the libjpeg API
|
|
||||||
|
|
||||||
libturbojpeg.a
|
|
||||||
Static link library for the TurboJPEG API
|
|
||||||
|
|
||||||
libturbojpeg.so.0.1.0 (Linux, Unix)
|
|
||||||
libturbojpeg.0.1.0.dylib (OS X)
|
|
||||||
cygturbojpeg-0.dll (Cygwin)
|
|
||||||
Shared library for the TurboJPEG API
|
|
||||||
|
|
||||||
libturbojpeg.so (Linux, Unix)
|
|
||||||
libturbojpeg.dylib (OS X)
|
|
||||||
Development symlink for the TurboJPEG API
|
|
||||||
|
|
||||||
libturbojpeg.dll.a (Cygwin)
|
|
||||||
Import library for the TurboJPEG API
|
|
||||||
|
|
||||||
|
|
||||||
libjpeg v7 or v8 API/ABI Emulation
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
Add --with-jpeg7 to the configure command line to build a version of
|
|
||||||
mozjpeg that is API/ABI-compatible with libjpeg v7. Add --with-jpeg8 to
|
|
||||||
the configure command to build a version of mozjpeg that is
|
|
||||||
API/ABI-compatible with libjpeg v8. See README-turbo.txt for more information
|
|
||||||
on libjpeg v7 and v8 emulation.
|
|
||||||
|
|
||||||
|
|
||||||
In-Memory Source/Destination Managers
|
|
||||||
-------------------------------------
|
|
||||||
|
|
||||||
When using libjpeg v6b or v7 API/ABI emulation, add --without-mem-srcdst to the
|
|
||||||
configure command line to build a version of mozjpeg that lacks the
|
|
||||||
jpeg_mem_src() and jpeg_mem_dest() functions. These functions were not part of
|
|
||||||
the original libjpeg v6b and v7 APIs, so removing them ensures strict
|
|
||||||
conformance with those APIs. See README-turbo.txt for more information.
|
|
||||||
|
|
||||||
|
|
||||||
Arithmetic Coding Support
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
Since the patent on arithmetic coding has expired, this functionality has been
|
|
||||||
included in this release of mozjpeg. mozjpeg's implementation is
|
|
||||||
based on the implementation in libjpeg v8, but it works when emulating libjpeg
|
|
||||||
v7 or v6b as well. The default is to enable both arithmetic encoding and
|
|
||||||
decoding, but those who have philosophical objections to arithmetic coding can
|
|
||||||
add --without-arith-enc or --without-arith-dec to the configure command line to
|
|
||||||
disable encoding or decoding (respectively.)
|
|
||||||
|
|
||||||
|
|
||||||
TurboJPEG Java Wrapper
|
|
||||||
----------------------
|
|
||||||
Add --with-java to the configure command line to incorporate an optional Java
|
|
||||||
Native Interface wrapper into the TurboJPEG shared library and build the Java
|
|
||||||
front-end classes to support it. This allows the TurboJPEG shared library to
|
|
||||||
be used directly from Java applications. See java/README for more details.
|
|
||||||
|
|
||||||
You can set the JAVAC, JAR, and JAVA configure variables to specify
|
|
||||||
alternate commands for javac, jar, and java (respectively.) You can also
|
|
||||||
set the JAVACFLAGS configure variable to specify arguments that should be
|
|
||||||
passed to the Java compiler when building the front-end classes, and JNI_CFLAGS
|
|
||||||
to specify arguments that should be passed to the C compiler when building the
|
|
||||||
JNI wrapper. Run 'configure --help' for more details.
|
|
||||||
|
|
||||||
|
|
||||||
==================
|
|
||||||
Installing mozjpeg
|
|
||||||
==================
|
|
||||||
|
|
||||||
If you intend to install these libraries and the associated header files, then
|
|
||||||
replace 'make' in the instructions above with
|
|
||||||
|
|
||||||
make install prefix={base dir} libdir={library directory}
|
|
||||||
|
|
||||||
For example,
|
|
||||||
|
|
||||||
make install prefix=/usr/local libdir=/usr/local/lib64
|
|
||||||
|
|
||||||
will install the header files in /usr/local/include and the library files in
|
|
||||||
/usr/local/lib64. If 'prefix' and 'libdir' are not specified, then the default
|
|
||||||
is to install the header files in /opt/mozjpeg/include and the library
|
|
||||||
files in /opt/mozjpeg/lib32 (32-bit) or /opt/mozjpeg/lib64
|
|
||||||
(64-bit.)
|
|
||||||
|
|
||||||
NOTE: You can specify a prefix of /usr and a libdir of, for instance,
|
|
||||||
/usr/lib64 to overwrite the system's version of libjpeg. If you do this,
|
|
||||||
however, then be sure to BACK UP YOUR SYSTEM'S INSTALLATION OF LIBJPEG before
|
|
||||||
overwriting it. It is recommended that you instead install mozjpeg into
|
|
||||||
a non-system directory and manipulate the LD_LIBRARY_PATH or create symlinks
|
|
||||||
to force applications to use mozjpeg instead of libjpeg. See
|
|
||||||
README-turbo.txt for more information.
|
|
||||||
|
|
||||||
|
|
||||||
=============
|
|
||||||
Build Recipes
|
|
||||||
=============
|
|
||||||
|
|
||||||
|
|
||||||
32-bit Build on 64-bit Linux
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
Add
|
|
||||||
|
|
||||||
--host i686-pc-linux-gnu CFLAGS='-O3 -m32' LDFLAGS=-m32
|
|
||||||
|
|
||||||
to the configure command line.
|
|
||||||
|
|
||||||
|
|
||||||
64-bit Build on 64-bit OS X
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
Add
|
|
||||||
|
|
||||||
--host x86_64-apple-darwin NASM=/opt/local/bin/nasm
|
|
||||||
|
|
||||||
to the configure command line. NASM 2.07 or later from MacPorts must be
|
|
||||||
installed.
|
|
||||||
|
|
||||||
|
|
||||||
32-bit Build on 64-bit OS X
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
Add
|
|
||||||
|
|
||||||
--host i686-apple-darwin CFLAGS='-O3 -m32' LDFLAGS=-m32
|
|
||||||
|
|
||||||
to the configure command line.
|
|
||||||
|
|
||||||
|
|
||||||
64-bit Backward-Compatible Build on 64-bit OS X
|
|
||||||
-----------------------------------------------
|
|
||||||
|
|
||||||
Add
|
|
||||||
|
|
||||||
--host x86_64-apple-darwin NASM=/opt/local/bin/nasm \
|
|
||||||
CFLAGS='-isysroot /Developer/SDKs/MacOSX10.5.sdk \
|
|
||||||
-mmacosx-version-min=10.5 -O3' \
|
|
||||||
LDFLAGS='-isysroot /Developer/SDKs/MacOSX10.5.sdk \
|
|
||||||
-mmacosx-version-min=10.5'
|
|
||||||
|
|
||||||
to the configure command line. The OS X 10.5 SDK, and NASM 2.07 or later from
|
|
||||||
MacPorts, must be installed.
|
|
||||||
|
|
||||||
|
|
||||||
32-bit Backward-Compatible Build on OS X
|
|
||||||
----------------------------------------
|
|
||||||
|
|
||||||
Add
|
|
||||||
|
|
||||||
--host i686-apple-darwin \
|
|
||||||
CFLAGS='-isysroot /Developer/SDKs/MacOSX10.5.sdk \
|
|
||||||
-mmacosx-version-min=10.5 -O3 -m32' \
|
|
||||||
LDFLAGS='-isysroot /Developer/SDKs/MacOSX10.5.sdk \
|
|
||||||
-mmacosx-version-min=10.5 -m32'
|
|
||||||
|
|
||||||
to the configure command line. The OS X 10.5 SDK must be installed.
|
|
||||||
|
|
||||||
|
|
||||||
64-bit Library Build on 64-bit Solaris
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
Add
|
|
||||||
|
|
||||||
--host x86_64-pc-solaris CFLAGS='-O3 -m64' LDFLAGS=-m64
|
|
||||||
|
|
||||||
to the configure command line.
|
|
||||||
|
|
||||||
|
|
||||||
32-bit Build on 64-bit FreeBSD
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
Add
|
|
||||||
|
|
||||||
--host i386-unknown-freebsd CC='gcc -B /usr/lib32' CFLAGS='-O3 -m32' \
|
|
||||||
LDFLAGS='-B/usr/lib32'
|
|
||||||
|
|
||||||
to the configure command line. NASM 2.07 or later from FreeBSD ports must be
|
|
||||||
installed.
|
|
||||||
|
|
||||||
|
|
||||||
Oracle Solaris Studio
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
Add
|
|
||||||
|
|
||||||
CC=cc
|
|
||||||
|
|
||||||
to the configure command line. mozjpeg will automatically be built with
|
|
||||||
the maximum optimization level (-xO5) unless you override CFLAGS.
|
|
||||||
|
|
||||||
To build a 64-bit version of mozjpeg using Oracle Solaris Studio, add
|
|
||||||
|
|
||||||
--host x86_64-pc-solaris CC=cc CFLAGS='-xO5 -m64' LDFLAGS=-m64
|
|
||||||
|
|
||||||
to the configure command line.
|
|
||||||
|
|
||||||
|
|
||||||
MinGW Build on Cygwin
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
Use CMake (see recipes below)
|
|
||||||
|
|
||||||
|
|
||||||
===========
|
|
||||||
ARM Support
|
|
||||||
===========
|
|
||||||
|
|
||||||
This release of mozjpeg can use ARM NEON SIMD instructions to accelerate
|
|
||||||
JPEG compression/decompression by approximately 2-4x on ARMv7 and later
|
|
||||||
platforms. If mozjpeg is configured on an ARM Linux platform, then the
|
|
||||||
build system will automatically include the NEON SIMD routines, if they are
|
|
||||||
supported. Build instructions for other ARM-based platforms follow.
|
|
||||||
|
|
||||||
|
|
||||||
Building mozjpeg for iOS
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
iOS platforms, such as the iPhone and iPad, use ARM processors, some of which
|
|
||||||
support NEON instructions. Additional steps are required in order to build
|
|
||||||
mozjpeg for these platforms.
|
|
||||||
|
|
||||||
Additional build requirements:
|
|
||||||
|
|
||||||
gas-preprocessor.pl
|
|
||||||
(https://raw.githubusercontent.com/libjpeg-turbo/gas-preprocessor/master/gas-preprocessor.pl)
|
|
||||||
should be installed in your PATH.
|
|
||||||
|
|
||||||
|
|
||||||
ARM 32-bit Build (Xcode 4.6.x and earlier, LLVM-GCC):
|
|
||||||
|
|
||||||
Set the following shell variables for simplicity:
|
|
||||||
|
|
||||||
Xcode 4.2 and earlier:
|
|
||||||
IOS_PLATFORMDIR=/Developer/Platforms/iPhoneOS.platform
|
|
||||||
Xcode 4.3 and later:
|
|
||||||
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
|
||||||
|
|
||||||
IOS_SYSROOT=$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk
|
|
||||||
IOS_GCC=$IOS_PLATFORMDIR/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
|
|
||||||
|
|
||||||
ARMv6 (code will run on all iOS devices, not SIMD-accelerated):
|
|
||||||
[NOTE: Requires Xcode 4.4.x or earlier]
|
|
||||||
IOS_CFLAGS="-march=armv6 -mcpu=arm1176jzf-s -mfpu=vfp"
|
|
||||||
|
|
||||||
ARMv7 (code will run on iPhone 3GS-4S/iPad 1st-3rd Generation and newer):
|
|
||||||
IOS_CFLAGS="-march=armv7 -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon"
|
|
||||||
|
|
||||||
ARMv7s (code will run on iPhone 5/iPad 4th Generation and newer):
|
|
||||||
[NOTE: Requires Xcode 4.5 or later]
|
|
||||||
IOS_CFLAGS="-march=armv7s -mcpu=swift -mtune=swift -mfpu=neon"
|
|
||||||
|
|
||||||
Follow the procedure under "Building mozjpeg" above, adding
|
|
||||||
|
|
||||||
--host arm-apple-darwin10 \
|
|
||||||
CC="$IOS_GCC" LD="$IOS_GCC" \
|
|
||||||
CFLAGS="-mfloat-abi=softfp -isysroot $IOS_SYSROOT -O3 $IOS_CFLAGS" \
|
|
||||||
LDFLAGS="-mfloat-abi=softfp -isysroot $IOS_SYSROOT $IOS_CFLAGS"
|
|
||||||
|
|
||||||
to the configure command line.
|
|
||||||
|
|
||||||
|
|
||||||
ARM 32-bit Build (Xcode 5.0.x and later, Clang):
|
|
||||||
|
|
||||||
Set the following shell variables for simplicity:
|
|
||||||
|
|
||||||
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
|
||||||
IOS_SYSROOT=$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk
|
|
||||||
IOS_GCC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
|
||||||
|
|
||||||
ARMv7 (code will run on iPhone 3GS-4S/iPad 1st-3rd Generation and newer):
|
|
||||||
IOS_CFLAGS="-arch armv7"
|
|
||||||
|
|
||||||
ARMv7s (code will run on iPhone 5/iPad 4th Generation and newer):
|
|
||||||
IOS_CFLAGS="-arch armv7s"
|
|
||||||
|
|
||||||
Follow the procedure under "Building libjpeg-turbo" above, adding
|
|
||||||
|
|
||||||
--host arm-apple-darwin10 \
|
|
||||||
CC="$IOS_GCC" LD="$IOS_GCC" \
|
|
||||||
CFLAGS="-mfloat-abi=softfp -isysroot $IOS_SYSROOT -O3 $IOS_CFLAGS" \
|
|
||||||
LDFLAGS="-mfloat-abi=softfp -isysroot $IOS_SYSROOT $IOS_CFLAGS" \
|
|
||||||
CCASFLAGS="-no-integrated-as $IOS_CFLAGS"
|
|
||||||
|
|
||||||
to the configure command line.
|
|
||||||
|
|
||||||
|
|
||||||
ARMv8 64-bit Build (Xcode 5.0.x and later, Clang):
|
|
||||||
|
|
||||||
Code will run on iPhone 5S/iPad Mini 2/iPad Air and newer.
|
|
||||||
|
|
||||||
Set the following shell variables for simplicity:
|
|
||||||
|
|
||||||
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
|
||||||
IOS_SYSROOT=$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk
|
|
||||||
IOS_GCC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
|
||||||
IOS_CFLAGS="-arch arm64"
|
|
||||||
|
|
||||||
Follow the procedure under "Building libjpeg-turbo" above, adding
|
|
||||||
|
|
||||||
--host aarch64-apple-darwin \
|
|
||||||
CC="$IOS_GCC" LD="$IOS_GCC" \
|
|
||||||
CFLAGS="-isysroot $IOS_SYSROOT -O3 $IOS_CFLAGS" \
|
|
||||||
LDFLAGS="-isysroot $IOS_SYSROOT $IOS_CFLAGS"
|
|
||||||
|
|
||||||
to the configure command line.
|
|
||||||
|
|
||||||
|
|
||||||
NOTE: You can also add -miphoneos-version-min={version} to $IOS_CFLAGS above
|
|
||||||
in order to support older versions of iOS than the default version supported by
|
|
||||||
the SDK.
|
|
||||||
|
|
||||||
Once built, lipo can be used to combine the ARMv6, v7, v7s, and/or v8 variants
|
|
||||||
into a universal library.
|
|
||||||
|
|
||||||
|
|
||||||
Building libjpeg-turbo for Android
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
Building libjpeg-turbo for Android platforms requires the Android NDK
|
|
||||||
(https://developer.android.com/tools/sdk/ndk) and autotools. The following is
|
|
||||||
a general recipe script that can be modified for your specific needs.
|
|
||||||
|
|
||||||
# Set these variables to suit your needs
|
|
||||||
NDK_PATH={full path to the "ndk" directory-- for example, /opt/android/ndk}
|
|
||||||
BUILD_PLATFORM={the platform name for the NDK package you installed--
|
|
||||||
for example, "windows-x86" or "linux-x86_64" or "darwin-x86_64"}
|
|
||||||
TOOLCHAIN_VERSION={"4.8", "4.9", "clang3.5", etc. This corresponds to a
|
|
||||||
toolchain directory under ${NDK_PATH}/toolchains/.}
|
|
||||||
ANDROID_VERSION={The minimum version of Android to support-- for example,
|
|
||||||
"16", "19", etc. "21" or later is required for a 64-bit build.}
|
|
||||||
|
|
||||||
# 32-bit ARMv7 build
|
|
||||||
HOST=arm-linux-androideabi
|
|
||||||
SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm
|
|
||||||
ANDROID_CFLAGS="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays \
|
|
||||||
--sysroot=${SYSROOT}"
|
|
||||||
|
|
||||||
# 64-bit ARMv8 build
|
|
||||||
HOST=aarch64-linux-android
|
|
||||||
SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm64
|
|
||||||
ANDROID_CFLAGS="--sysroot=${SYSROOT}"
|
|
||||||
|
|
||||||
TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}
|
|
||||||
ANDROID_INCLUDES="-I${SYSROOT}/usr/include -I${TOOLCHAIN}/include"
|
|
||||||
export CPP=${TOOLCHAIN}/bin/${HOST}-cpp
|
|
||||||
export AR=${TOOLCHAIN}/bin/${HOST}-ar
|
|
||||||
export AS=${TOOLCHAIN}/bin/${HOST}-as
|
|
||||||
export NM=${TOOLCHAIN}/bin/${HOST}-nm
|
|
||||||
export CC=${TOOLCHAIN}/bin/${HOST}-gcc
|
|
||||||
export LD=${TOOLCHAIN}/bin/${HOST}-ld
|
|
||||||
export RANLIB=${TOOLCHAIN}/bin/${HOST}-ranlib
|
|
||||||
export OBJDUMP=${TOOLCHAIN}/bin/${HOST}-objdump
|
|
||||||
export STRIP=${TOOLCHAIN}/bin/${HOST}-strip
|
|
||||||
cd {build_directory}
|
|
||||||
sh {source_directory}/configure --host=${HOST} \
|
|
||||||
CFLAGS="${ANDROID_INCLUDES} ${ANDROID_CFLAGS} -O3 -fPIE" \
|
|
||||||
CPPFLAGS="${ANDROID_INCLUDES} ${ANDROID_CFLAGS}" \
|
|
||||||
LDFLAGS="${ANDROID_CFLAGS} -pie" --with-simd ${1+"$@"}
|
|
||||||
make
|
|
||||||
|
|
||||||
If building for Android 4.0.x (API level < 16) or earlier, remove -fPIE from
|
|
||||||
CFLAGS and -pie from LDFLAGS.
|
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************
|
|
||||||
** Building on Windows (Visual C++ or MinGW)
|
|
||||||
*******************************************************************************
|
|
||||||
|
|
||||||
|
|
||||||
==================
|
|
||||||
Build Requirements
|
|
||||||
==================
|
|
||||||
|
|
||||||
-- CMake (http://www.cmake.org) v2.8.8 or later
|
|
||||||
|
|
||||||
-- Microsoft Visual C++ 2005 or later
|
|
||||||
|
|
||||||
If you don't already have Visual C++, then the easiest way to get it is by
|
|
||||||
installing the Windows SDK:
|
|
||||||
|
|
||||||
http://msdn.microsoft.com/en-us/windows/bb980924.aspx
|
|
||||||
|
|
||||||
The Windows SDK includes both 32-bit and 64-bit Visual C++ compilers and
|
|
||||||
everything necessary to build mozjpeg.
|
|
||||||
|
|
||||||
* You can also use Microsoft Visual Studio Express Edition, which is a free
|
|
||||||
download. (NOTE: versions prior to 2012 can only be used to build 32-bit
|
|
||||||
code.)
|
|
||||||
* If you intend to build mozjpeg from the command line, then add the
|
|
||||||
appropriate compiler and SDK directories to the INCLUDE, LIB, and PATH
|
|
||||||
environment variables. This is generally accomplished by executing
|
|
||||||
vcvars32.bat or vcvars64.bat and SetEnv.cmd. vcvars32.bat and
|
|
||||||
vcvars64.bat are part of Visual C++ and are located in the same directory
|
|
||||||
as the compiler. SetEnv.cmd is part of the Windows SDK. You can pass
|
|
||||||
optional arguments to SetEnv.cmd to specify a 32-bit or 64-bit build
|
|
||||||
environment.
|
|
||||||
|
|
||||||
... OR ...
|
|
||||||
|
|
||||||
-- MinGW
|
|
||||||
|
|
||||||
MinGW-builds (http://sourceforge.net/projects/mingwbuilds/) or
|
|
||||||
tdm-gcc (http://tdm-gcc.tdragon.net/) recommended if building on a Windows
|
|
||||||
machine. Both distributions install a Start Menu link that can be used to
|
|
||||||
launch a command prompt with the appropriate compiler paths automatically
|
|
||||||
set.
|
|
||||||
|
|
||||||
-- NASM (http://www.nasm.us/) 0.98 or later (NASM 2.05 or later is required for
|
|
||||||
a 64-bit build)
|
|
||||||
|
|
||||||
-- If building the TurboJPEG Java wrapper, JDK 1.5 or later is required. This
|
|
||||||
can be downloaded from http://www.java.com.
|
|
||||||
|
|
||||||
|
|
||||||
==================
|
|
||||||
Out-of-Tree Builds
|
|
||||||
==================
|
|
||||||
|
|
||||||
Binary objects, libraries, and executables are generated in the same directory
|
|
||||||
from which cmake was executed (the "binary directory"), and this directory need
|
|
||||||
not necessarily be the same as the mozjpeg source directory. You can
|
|
||||||
create multiple independent binary directories, in which different versions of
|
|
||||||
mozjpeg can be built from the same source tree using different compilers
|
|
||||||
or settings. In the sections below, {build_directory} refers to the binary
|
|
||||||
directory, whereas {source_directory} refers to the mozjpeg source
|
|
||||||
directory. For in-tree builds, these directories are the same.
|
|
||||||
|
|
||||||
|
|
||||||
================
|
|
||||||
Building mozjpeg
|
|
||||||
================
|
|
||||||
|
|
||||||
|
|
||||||
Visual C++ (Command Line)
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release {source_directory}
|
|
||||||
nmake
|
|
||||||
|
|
||||||
This will build either a 32-bit or a 64-bit version of mozjpeg, depending
|
|
||||||
on which version of cl.exe is in the PATH.
|
|
||||||
|
|
||||||
The following files will be generated under {build_directory}:
|
|
||||||
|
|
||||||
jpeg-static.lib
|
|
||||||
Static link library for the libjpeg API
|
|
||||||
sharedlib/jpeg{version}.dll
|
|
||||||
DLL for the libjpeg API
|
|
||||||
sharedlib/jpeg.lib
|
|
||||||
Import library for the libjpeg API
|
|
||||||
turbojpeg-static.lib
|
|
||||||
Static link library for the TurboJPEG API
|
|
||||||
turbojpeg.dll
|
|
||||||
DLL for the TurboJPEG API
|
|
||||||
turbojpeg.lib
|
|
||||||
Import library for the TurboJPEG API
|
|
||||||
|
|
||||||
{version} is 62, 7, or 8, depending on whether libjpeg v6b (default), v7, or
|
|
||||||
v8 emulation is enabled.
|
|
||||||
|
|
||||||
|
|
||||||
Visual C++ (IDE)
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Choose the appropriate CMake generator option for your version of Visual Studio
|
|
||||||
(run "cmake" with no arguments for a list of available generators.) For
|
|
||||||
instance:
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
cmake -G "Visual Studio 10" {source_directory}
|
|
||||||
|
|
||||||
NOTE: Add "Win64" to the generator name (for example, "Visual Studio 10
|
|
||||||
Win64") to build a 64-bit version of libjpeg-turbo. Recent versions of CMake
|
|
||||||
no longer document that. A separate build directory must be used for 32-bit
|
|
||||||
and 64-bit builds.
|
|
||||||
|
|
||||||
You can then open ALL_BUILD.vcproj in Visual Studio and build one of the
|
|
||||||
configurations in that project ("Debug", "Release", etc.) to generate a full
|
|
||||||
build of mozjpeg.
|
|
||||||
|
|
||||||
This will generate the following files under {build_directory}:
|
|
||||||
|
|
||||||
{configuration}/jpeg-static.lib
|
|
||||||
Static link library for the libjpeg API
|
|
||||||
sharedlib/{configuration}/jpeg{version}.dll
|
|
||||||
DLL for the libjpeg API
|
|
||||||
sharedlib/{configuration}/jpeg.lib
|
|
||||||
Import library for the libjpeg API
|
|
||||||
{configuration}/turbojpeg-static.lib
|
|
||||||
Static link library for the TurboJPEG API
|
|
||||||
{configuration}/turbojpeg.dll
|
|
||||||
DLL for the TurboJPEG API
|
|
||||||
{configuration}/turbojpeg.lib
|
|
||||||
Import library for the TurboJPEG API
|
|
||||||
|
|
||||||
{configuration} is Debug, Release, RelWithDebInfo, or MinSizeRel, depending on
|
|
||||||
the configuration you built in the IDE, and {version} is 62, 7, or 8,
|
|
||||||
depending on whether libjpeg v6b (default), v7, or v8 emulation is enabled.
|
|
||||||
|
|
||||||
|
|
||||||
MinGW
|
|
||||||
-----
|
|
||||||
|
|
||||||
NOTE: This assumes that you are building on a Windows machine. If you are
|
|
||||||
cross-compiling on a Linux/Unix machine, then see "Build Recipes" below.
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
cmake -G "MinGW Makefiles" {source_directory}
|
|
||||||
mingw32-make
|
|
||||||
|
|
||||||
This will generate the following files under {build_directory}
|
|
||||||
|
|
||||||
libjpeg.a
|
|
||||||
Static link library for the libjpeg API
|
|
||||||
sharedlib/libjpeg-{version}.dll
|
|
||||||
DLL for the libjpeg API
|
|
||||||
sharedlib/libjpeg.dll.a
|
|
||||||
Import library for the libjpeg API
|
|
||||||
libturbojpeg.a
|
|
||||||
Static link library for the TurboJPEG API
|
|
||||||
libturbojpeg.dll
|
|
||||||
DLL for the TurboJPEG API
|
|
||||||
libturbojpeg.dll.a
|
|
||||||
Import library for the TurboJPEG API
|
|
||||||
|
|
||||||
{version} is 62, 7, or 8, depending on whether libjpeg v6b (default), v7, or
|
|
||||||
v8 emulation is enabled.
|
|
||||||
|
|
||||||
|
|
||||||
Debug Build
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Add "-DCMAKE_BUILD_TYPE=Debug" to the cmake command line. Or, if building with
|
|
||||||
NMake, remove "-DCMAKE_BUILD_TYPE=Release" (Debug builds are the default with
|
|
||||||
NMake.)
|
|
||||||
|
|
||||||
|
|
||||||
libjpeg v7 or v8 API/ABI Emulation
|
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
Add "-DWITH_JPEG7=1" to the cmake command line to build a version of
|
|
||||||
mozjpeg that is API/ABI-compatible with libjpeg v7. Add "-DWITH_JPEG8=1"
|
|
||||||
to the cmake command to build a version of mozjpeg that is
|
|
||||||
API/ABI-compatible with libjpeg v8. See README-turbo.txt for more information
|
|
||||||
on libjpeg v7 and v8 emulation.
|
|
||||||
|
|
||||||
|
|
||||||
In-Memory Source/Destination Managers
|
|
||||||
-------------------------------------
|
|
||||||
|
|
||||||
When using libjpeg v6b or v7 API/ABI emulation, add -DWITH_MEM_SRCDST=0 to the
|
|
||||||
CMake command line to build a version of mozjpeg that lacks the
|
|
||||||
jpeg_mem_src() and jpeg_mem_dest() functions. These functions were not part of
|
|
||||||
the original libjpeg v6b and v7 APIs, so removing them ensures strict
|
|
||||||
conformance with those APIs. See README-turbo.txt for more information.
|
|
||||||
|
|
||||||
|
|
||||||
Arithmetic Coding Support
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
Since the patent on arithmetic coding has expired, this functionality has been
|
|
||||||
included in this release of mozjpeg. mozjpeg's implementation is
|
|
||||||
based on the implementation in libjpeg v8, but it works when emulating libjpeg
|
|
||||||
v7 or v6b as well. The default is to enable both arithmetic encoding and
|
|
||||||
decoding, but those who have philosophical objections to arithmetic coding can
|
|
||||||
add "-DWITH_ARITH_ENC=0" or "-DWITH_ARITH_DEC=0" to the cmake command line to
|
|
||||||
disable encoding or decoding (respectively.)
|
|
||||||
|
|
||||||
|
|
||||||
TurboJPEG Java Wrapper
|
|
||||||
----------------------
|
|
||||||
Add "-DWITH_JAVA=1" to the cmake command line to incorporate an optional Java
|
|
||||||
Native Interface wrapper into the TurboJPEG shared library and build the Java
|
|
||||||
front-end classes to support it. This allows the TurboJPEG shared library to
|
|
||||||
be used directly from Java applications. See java/README for more details.
|
|
||||||
|
|
||||||
If you are using CMake 2.8, you can set the Java_JAVAC_EXECUTABLE,
|
|
||||||
Java_JAVA_EXECUTABLE, and Java_JAR_EXECUTABLE CMake variables to specify
|
|
||||||
alternate commands or locations for javac, jar, and java (respectively.) If
|
|
||||||
you are using CMake 2.6, set JAVA_COMPILE, JAVA_RUNTIME, and JAVA_ARCHIVE
|
|
||||||
instead. You can also set the JAVACFLAGS CMake variable to specify arguments
|
|
||||||
that should be passed to the Java compiler when building the front-end classes.
|
|
||||||
|
|
||||||
|
|
||||||
==================
|
|
||||||
Installing mozjpeg
|
|
||||||
==================
|
|
||||||
|
|
||||||
You can use the build system to install mozjpeg into a directory of your
|
|
||||||
choosing (as opposed to creating an installer.) To do this, add:
|
|
||||||
|
|
||||||
-DCMAKE_INSTALL_PREFIX={install_directory}
|
|
||||||
|
|
||||||
to the cmake command line.
|
|
||||||
|
|
||||||
For example,
|
|
||||||
|
|
||||||
cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=c:\mozjpeg {source_directory}
|
|
||||||
nmake install
|
|
||||||
|
|
||||||
will install the header files in c:\mozjpeg\include, the library files
|
|
||||||
in c:\mozjpeg\lib, the DLL's in c:\mozjpeg\bin, and the
|
|
||||||
documentation in c:\mozjpeg\doc.
|
|
||||||
|
|
||||||
|
|
||||||
=============
|
|
||||||
Build Recipes
|
|
||||||
=============
|
|
||||||
|
|
||||||
|
|
||||||
64-bit MinGW Build on Cygwin
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
CC=/usr/bin/x86_64-w64-mingw32-gcc \
|
|
||||||
cmake -G "Unix Makefiles" -DCMAKE_SYSTEM_NAME=Windows \
|
|
||||||
-DCMAKE_RC_COMPILER=/usr/bin/x86_64-w64-mingw32-windres.exe \
|
|
||||||
{source_directory}
|
|
||||||
make
|
|
||||||
|
|
||||||
This produces a 64-bit build of mozjpeg that does not depend on
|
|
||||||
cygwin1.dll or other Cygwin DLL's. The mingw64-x86_64-gcc-core and
|
|
||||||
mingw64-x86_64-gcc-g++ packages (and their dependencies) must be installed.
|
|
||||||
|
|
||||||
|
|
||||||
32-bit MinGW Build on Cygwin
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
CC=/usr/bin/i686-w64-mingw32-gcc \
|
|
||||||
cmake -G "Unix Makefiles" -DCMAKE_SYSTEM_NAME=Windows \
|
|
||||||
-DCMAKE_RC_COMPILER=/usr/bin/i686-w64-mingw32-windres.exe \
|
|
||||||
{source_directory}
|
|
||||||
make
|
|
||||||
|
|
||||||
This produces a 32-bit build of mozjpeg that does not depend on
|
|
||||||
cygwin1.dll or other Cygwin DLL's. The mingw64-i686-gcc-core and
|
|
||||||
mingw64-i686-gcc-g++ packages (and their dependencies) must be installed.
|
|
||||||
|
|
||||||
|
|
||||||
MinGW Build on Linux
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
CC={mingw_binary_path}/i386-mingw32-gcc \
|
|
||||||
cmake -G "Unix Makefiles" -DCMAKE_SYSTEM_NAME=Windows \
|
|
||||||
-DCMAKE_AR={mingw_binary_path}/i386-mingw32-ar \
|
|
||||||
-DCMAKE_RANLIB={mingw_binary_path}/i386-mingw32-ranlib \
|
|
||||||
{source_directory}
|
|
||||||
make
|
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************
|
|
||||||
** Creating Release Packages
|
|
||||||
*******************************************************************************
|
|
||||||
|
|
||||||
The following commands can be used to create various types of release packages:
|
|
||||||
|
|
||||||
|
|
||||||
Unix/Linux
|
|
||||||
----------
|
|
||||||
|
|
||||||
make rpm
|
|
||||||
|
|
||||||
Create Red Hat-style binary RPM package. Requires RPM v4 or later.
|
|
||||||
|
|
||||||
make srpm
|
|
||||||
|
|
||||||
This runs 'make dist' to create a pristine source tarball, then creates a
|
|
||||||
Red Hat-style source RPM package from the tarball. Requires RPM v4 or later.
|
|
||||||
|
|
||||||
make deb
|
|
||||||
|
|
||||||
Create Debian-style binary package. Requires dpkg.
|
|
||||||
|
|
||||||
make dmg
|
|
||||||
|
|
||||||
Create Macintosh package/disk image. This requires pkgbuild and
|
|
||||||
productbuild, which are installed by default on OS X 10.7 and later and which
|
|
||||||
can be obtained by installing Xcode 3.2.6 (with the "Unix Development"
|
|
||||||
option) on OS X 10.6. Packages built in this manner can be installed on OS X
|
|
||||||
10.5 and later, but they must be built on OS X 10.6 or later.
|
|
||||||
|
|
||||||
make udmg [BUILDDIR32={32-bit build directory}]
|
|
||||||
|
|
||||||
On 64-bit OS X systems, this creates a Macintosh package and disk image that
|
|
||||||
contains universal i386/x86-64 binaries. You should first configure a 32-bit
|
|
||||||
out-of-tree build of mozjpeg, then configure a 64-bit out-of-tree
|
|
||||||
build, then run 'make udmg' from the 64-bit build directory. The build
|
|
||||||
system will look for the 32-bit build under {source_directory}/osxx86 by
|
|
||||||
default, but you can override this by setting the BUILDDIR32 variable on the
|
|
||||||
make command line as shown above.
|
|
||||||
|
|
||||||
make iosdmg [BUILDDIR32={32-bit build directory}] \
|
|
||||||
[BUILDDIRARMV6={ARMv6 build directory}] \
|
|
||||||
[BUILDDIRARMV7={ARMv7 build directory}] \
|
|
||||||
[BUILDDIRARMV7S={ARMv7s build directory}] \
|
|
||||||
[BUILDDIRARMV8={ARMv8 build directory}]
|
|
||||||
|
|
||||||
On OS X systems, this creates a Macintosh package and disk image in which the
|
|
||||||
mozjpeg static libraries contain ARM architectures necessary to build
|
|
||||||
iOS applications. If building on an x86-64 system, the binaries will also
|
|
||||||
contain the i386 architecture, as with 'make udmg' above. You should first
|
|
||||||
configure ARMv6, ARMv7, ARMv7s, and/or ARMv8 out-of-tree builds of
|
|
||||||
mozjpeg (see "Building mozjpeg for iOS" above.) If you are
|
|
||||||
building an x86-64 version of mozjpeg, you should configure a 32-bit
|
|
||||||
out-of-tree build as well. Next, build mozjpeg as you would normally,
|
|
||||||
using an out-of-tree build. When it is built, run 'make iosdmg' from the
|
|
||||||
build directory. The build system will look for the ARMv6 build under
|
|
||||||
{source_directory}/iosarmv6 by default, the ARMv7 build under
|
|
||||||
{source_directory}/iosarmv7 by default, the ARMv7s build under
|
|
||||||
{source_directory}/iosarmv7s by default, the ARMv8 build under
|
|
||||||
{source_directory}/iosarmv8 by default, and (if applicable) the 32-bit build
|
|
||||||
under {source_directory}/osxx86 by default, but you can override this by
|
|
||||||
setting the BUILDDIR32, BUILDDIRARMV6, BUILDDIRARMV7, BUILDDIRARMV7S, and/or
|
|
||||||
BUILDDIRARMV8 variables on the make command line as shown above.
|
|
||||||
|
|
||||||
NOTE: If including an ARMv8 build in the package, then you may need to use
|
|
||||||
Xcode's version of lipo instead of the operating system's. To do this, pass
|
|
||||||
an argument of LIPO="xcrun lipo" on the make command line.
|
|
||||||
|
|
||||||
make cygwinpkg
|
|
||||||
|
|
||||||
Build a Cygwin binary package.
|
|
||||||
|
|
||||||
|
|
||||||
Windows
|
|
||||||
-------
|
|
||||||
|
|
||||||
If using NMake:
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
nmake installer
|
|
||||||
|
|
||||||
If using MinGW:
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
make installer
|
|
||||||
|
|
||||||
If using the Visual Studio IDE, build the "installer" project.
|
|
||||||
|
|
||||||
The installer package (mozjpeg[-gcc][64].exe) will be located under
|
|
||||||
{build_directory}. If building using the Visual Studio IDE, then the installer
|
|
||||||
package will be located in a subdirectory with the same name as the
|
|
||||||
configuration you built (such as {build_directory}\Debug\ or
|
|
||||||
{build_directory}\Release\).
|
|
||||||
|
|
||||||
Building a Windows installer requires the Nullsoft Install System
|
|
||||||
(http://nsis.sourceforge.net/.) makensis.exe should be in your PATH.
|
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************
|
|
||||||
** Regression testing
|
|
||||||
*******************************************************************************
|
|
||||||
|
|
||||||
The most common way to test mozjpeg is by invoking 'make test' on
|
|
||||||
Unix/Linux platforms or 'ctest' on Windows platforms, once the build has
|
|
||||||
completed. This runs a series of tests to ensure that mathematical
|
|
||||||
compatibility has been maintained. This also invokes the TurboJPEG unit tests,
|
|
||||||
which ensure that the colorspace extensions, YUV encoding, decompression
|
|
||||||
scaling, and other features of the TurboJPEG C and Java APIs are working
|
|
||||||
properly (and, by extension, that the equivalent features of the underlying
|
|
||||||
libjpeg API are also working.)
|
|
||||||
|
|
||||||
Invoking 'make testclean' or 'nmake testclean' (if using NMake) or building
|
|
||||||
the 'testclean' target (if using the Visual Studio IDE) will clean up the
|
|
||||||
output images generated by 'make test'.
|
|
||||||
|
|
||||||
On Unix/Linux platforms, more extensive tests of the TurboJPEG C and Java
|
|
||||||
wrappers can be run by invoking 'make tjtest'. These extended TurboJPEG tests
|
|
||||||
essentially iterate through all of the available features of the TurboJPEG APIs
|
|
||||||
that are not covered by the TurboJPEG unit tests (this includes the lossless
|
|
||||||
transform options) and compare the images generated by each feature to images
|
|
||||||
generated using the equivalent feature in the libjpeg API. The extended
|
|
||||||
TurboJPEG tests are meant to test for regressions in the TurboJPEG wrappers,
|
|
||||||
not in the underlying libjpeg API library.
|
|
||||||
1893
CMakeLists.txt
818
ChangeLog.md
@@ -1,3 +1,762 @@
|
|||||||
|
3.0.5
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 3.0.4:
|
||||||
|
|
||||||
|
1. Fixed an issue in the TurboJPEG API whereby, when generating a
|
||||||
|
12-bit-per-sample or 16-bit-per-sample lossless JPEG image, specifying a point
|
||||||
|
transform value greater than 7 resulted in an error ("Parameter value out of
|
||||||
|
range".)
|
||||||
|
|
||||||
|
2. Fixed a regression introduced by 1.4 beta1[3] that prevented
|
||||||
|
`jpeg_set_defaults()` from resetting the Huffman tables to default (baseline)
|
||||||
|
values if Huffman table optimization or progressive mode was previously enabled
|
||||||
|
in the same libjpeg instance.
|
||||||
|
|
||||||
|
3. Fixed an issue whereby lossless JPEG compression could not be disabled if it
|
||||||
|
was previously enabled in a libjpeg or TurboJPEG instance.
|
||||||
|
`jpeg_set_defaults()` now disables lossless JPEG compression in a libjpeg
|
||||||
|
instance, and setting `TJPARAM_LOSSLESS`/`TJ.PARAM_LOSSLESS` to `0` now
|
||||||
|
disables lossless JPEG compression in a TurboJPEG instance.
|
||||||
|
|
||||||
|
4. Hardened the libjpeg API against hypothetical calling applications that may
|
||||||
|
erroneously change the value of the `data_precision` field in
|
||||||
|
`jpeg_compress_struct` or `jpeg_decompress_struct` after calling
|
||||||
|
`jpeg_start_compress()` or `jpeg_start_decompress()`.
|
||||||
|
|
||||||
|
|
||||||
|
3.0.4
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 3.0.3:
|
||||||
|
|
||||||
|
1. Fixed an issue whereby the CPU usage of the default marker processor in the
|
||||||
|
decompressor grew exponentially with the number of markers. This caused an
|
||||||
|
unreasonable slow-down in `jpeg_read_header()` if an application called
|
||||||
|
`jpeg_save_markers()` to save markers of a particular type and then attempted
|
||||||
|
to decompress a JPEG image containing an excessive number of markers of that
|
||||||
|
type.
|
||||||
|
|
||||||
|
2. Hardened the default marker processor in the decompressor to guard against
|
||||||
|
an issue (exposed by 3.0 beta2[6]) whereby attempting to decompress a
|
||||||
|
specially-crafted malformed JPEG image (specifically an image with a complete
|
||||||
|
12-bit-per-sample Start Of Frame segment followed by an incomplete
|
||||||
|
8-bit-per-sample Start Of Frame segment) using buffered-image mode and input
|
||||||
|
prefetching caused a segfault if the `fill_input_buffer()` method in the
|
||||||
|
calling application's custom source manager incorrectly returned `FALSE` in
|
||||||
|
response to a prematurely-terminated JPEG data stream.
|
||||||
|
|
||||||
|
3. Fixed an issue in cjpeg whereby, when generating a 12-bit-per-sample or
|
||||||
|
16-bit-per-sample lossless JPEG image, specifying a point transform value
|
||||||
|
greater than 7 resulted in an error ("Invalid progressive/lossless parameters")
|
||||||
|
unless the `-precision` option was specified before the `-lossless` option.
|
||||||
|
|
||||||
|
4. Fixed a regression introduced by 3.0.3[3] that made it impossible for
|
||||||
|
calling applications to generate 12-bit-per-sample arithmetic-coded lossy JPEG
|
||||||
|
images using the TurboJPEG API.
|
||||||
|
|
||||||
|
5. Fixed an error ("Destination buffer is not large enough") that occurred when
|
||||||
|
attempting to generate a full-color lossless JPEG image using the TurboJPEG
|
||||||
|
Java API's `byte[] TJCompressor.compress()` method if the value of
|
||||||
|
`TJ.PARAM_SUBSAMP` was not `TJ.SAMP_444`.
|
||||||
|
|
||||||
|
6. Fixed a segfault in djpeg that occurred if a negative width was specified
|
||||||
|
with the `-crop` option. Since the cropping region width was read into an
|
||||||
|
unsigned 32-bit integer, a negative width was interpreted as a very large
|
||||||
|
value. With certain negative width and positive left boundary values, the
|
||||||
|
bounds checks in djpeg and `jpeg_crop_scanline()` overflowed and did not detect
|
||||||
|
the out-of-bounds width, which caused a buffer overrun in the upsampling or
|
||||||
|
color conversion routine. Both bounds checks now use 64-bit integers to guard
|
||||||
|
against overflow, and djpeg now checks for negative numbers when it parses the
|
||||||
|
crop specification from the command line.
|
||||||
|
|
||||||
|
7. Fixed an issue whereby the TurboJPEG lossless transformation function and
|
||||||
|
methods checked the specified cropping region against the source image
|
||||||
|
dimensions and level of chrominance subsampling rather than the destination
|
||||||
|
image dimensions and level of chrominance subsampling, which caused some
|
||||||
|
cropping regions to be unduly rejected when performing 90-degree rotation,
|
||||||
|
270-degree rotation, transposition, transverse transposition, or grayscale
|
||||||
|
conversion.
|
||||||
|
|
||||||
|
8. Fixed a regression, introduced by 3.0 beta2[4], that prevented the
|
||||||
|
`tjTransform()` backward compatibility function from copying extra markers from
|
||||||
|
the source image to the destination image.
|
||||||
|
|
||||||
|
9. Fixed an issue whereby the TurboJPEG lossless transformation function and
|
||||||
|
methods did not honor `TJXOPT_COPYNONE`/`TJTransform.OPT_COPYNONE` unless it
|
||||||
|
was specified for all lossless transforms.
|
||||||
|
|
||||||
|
|
||||||
|
3.0.3
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 3.0.2:
|
||||||
|
|
||||||
|
1. Fixed an issue in the build system, introduced in 3.0.2, that caused all
|
||||||
|
libjpeg-turbo components to depend on the Visual C++ run-time DLL when built
|
||||||
|
with Visual C++ and CMake 3.15 or later, regardless of value of the
|
||||||
|
`WITH_CRT_DLL` CMake variable.
|
||||||
|
|
||||||
|
2. The x86-64 SIMD extensions now include support for Intel Control-flow
|
||||||
|
Enforcement Technology (CET), which is enabled automatically if CET is enabled
|
||||||
|
in the C compiler.
|
||||||
|
|
||||||
|
3. Fixed a regression introduced by 3.0 beta2[6] that made it impossible for
|
||||||
|
calling applications to supply custom Huffman tables when generating
|
||||||
|
12-bit-per-component lossy JPEG images using the libjpeg API.
|
||||||
|
|
||||||
|
4. Fixed a segfault that occurred when attempting to use the jpegtran `-drop`
|
||||||
|
option with a specially-crafted malformed input image or drop image
|
||||||
|
(specifically an image in which all of the scans contain fewer components than
|
||||||
|
the number of components specified in the Start Of Frame segment.)
|
||||||
|
|
||||||
|
|
||||||
|
3.0.2
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 3.0.1:
|
||||||
|
|
||||||
|
1. Fixed a signed integer overflow in the `tj3CompressFromYUV8()`,
|
||||||
|
`tj3DecodeYUV8()`, `tj3DecompressToYUV8()`, and `tj3EncodeYUV8()` functions,
|
||||||
|
detected by the Clang and GCC undefined behavior sanitizers, that could be
|
||||||
|
triggered by setting the `align` parameter to an unreasonably large value.
|
||||||
|
This issue did not pose a security threat, but removing the warning made it
|
||||||
|
easier to detect actual security issues, should they arise in the future.
|
||||||
|
|
||||||
|
2. Introduced a new parameter (`TJPARAM_MAXMEMORY` in the TurboJPEG C API and
|
||||||
|
`TJ.PARAM_MAXMEMORY` in the TurboJPEG Java API) and a corresponding TJBench
|
||||||
|
option (`-maxmemory`) for specifying the maximum amount of memory (in
|
||||||
|
megabytes) that will be allocated for intermediate buffers, which are used with
|
||||||
|
progressive JPEG compression and decompression, Huffman table optimization,
|
||||||
|
lossless JPEG compression, and lossless transformation. The new parameter and
|
||||||
|
option serve the same purpose as the `max_memory_to_use` field in the
|
||||||
|
`jpeg_memory_mgr` struct in the libjpeg API, the `JPEGMEM` environment
|
||||||
|
variable, and the cjpeg/djpeg/jpegtran `-maxmemory` option.
|
||||||
|
|
||||||
|
3. Introduced a new parameter (`TJPARAM_MAXPIXELS` in the TurboJPEG C API and
|
||||||
|
`TJ.PARAM_MAXPIXELS` in the TurboJPEG Java API) and a corresponding TJBench
|
||||||
|
option (`-maxpixels`) for specifying the maximum number of pixels that the
|
||||||
|
decompression, lossless transformation, and packed-pixel image loading
|
||||||
|
functions/methods will process.
|
||||||
|
|
||||||
|
4. Fixed an error ("Unsupported color conversion request") that occurred when
|
||||||
|
attempting to decompress a 3-component lossless JPEG image without an Adobe
|
||||||
|
APP14 marker. The decompressor now assumes that a 3-component lossless JPEG
|
||||||
|
image without an Adobe APP14 marker uses the RGB colorspace if its component
|
||||||
|
IDs are 1, 2, and 3.
|
||||||
|
|
||||||
|
|
||||||
|
3.0.1
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 3.0.0:
|
||||||
|
|
||||||
|
1. The x86-64 SIMD functions now use a standard stack frame, prologue, and
|
||||||
|
epilogue so that debuggers and profilers can reliably capture backtraces from
|
||||||
|
within the functions.
|
||||||
|
|
||||||
|
2. Fixed two minor issues in the interblock smoothing algorithm that caused
|
||||||
|
mathematical (but not necessarily perceptible) edge block errors when
|
||||||
|
decompressing progressive JPEG images exactly two DCT blocks in width or that
|
||||||
|
use vertical chrominance subsampling.
|
||||||
|
|
||||||
|
3. Fixed a regression introduced by 3.0 beta2[6] that, in rare cases, caused
|
||||||
|
the C Huffman encoder (which is not used by default on x86 and Arm CPUs) to
|
||||||
|
generate incorrect results if the Neon SIMD extensions were explicitly disabled
|
||||||
|
at build time (by setting the `WITH_SIMD` CMake variable to `0`) in an AArch64
|
||||||
|
build of libjpeg-turbo.
|
||||||
|
|
||||||
|
|
||||||
|
3.0.0
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 3.0 beta2:
|
||||||
|
|
||||||
|
1. The TurboJPEG API now supports 4:4:1 (transposed 4:1:1) chrominance
|
||||||
|
subsampling, which allows losslessly transposed or rotated 4:1:1 JPEG images to
|
||||||
|
be losslessly cropped, partially decompressed, or decompressed to planar YUV
|
||||||
|
images.
|
||||||
|
|
||||||
|
2. Fixed various segfaults and buffer overruns (CVE-2023-2804) that occurred
|
||||||
|
when attempting to decompress various specially-crafted malformed
|
||||||
|
12-bit-per-component and 16-bit-per-component lossless JPEG images using color
|
||||||
|
quantization or merged chroma upsampling/color conversion. The underlying
|
||||||
|
cause of these issues was that the color quantization and merged chroma
|
||||||
|
upsampling/color conversion algorithms were not designed with lossless
|
||||||
|
decompression in mind. Since libjpeg-turbo explicitly does not support color
|
||||||
|
conversion when compressing or decompressing lossless JPEG images, merged
|
||||||
|
chroma upsampling/color conversion never should have been enabled for such
|
||||||
|
images. Color quantization is a legacy feature that serves little or no
|
||||||
|
purpose with lossless JPEG images, so it is also now disabled when
|
||||||
|
decompressing such images. (As a result, djpeg can no longer decompress a
|
||||||
|
lossless JPEG image into a GIF image.)
|
||||||
|
|
||||||
|
3. Fixed an oversight in 1.4 beta1[8] that caused various segfaults and buffer
|
||||||
|
overruns when attempting to decompress various specially-crafted malformed
|
||||||
|
12-bit-per-component JPEG images using djpeg with both color quantization and
|
||||||
|
RGB565 color conversion enabled.
|
||||||
|
|
||||||
|
4. Fixed an issue whereby `jpeg_crop_scanline()` sometimes miscalculated the
|
||||||
|
downsampled width for components with 4x2 or 2x4 subsampling factors if
|
||||||
|
decompression scaling was enabled. This caused the components to be upsampled
|
||||||
|
incompletely, which caused the color converter to read from uninitialized
|
||||||
|
memory. With 12-bit data precision, this caused a buffer overrun or underrun
|
||||||
|
and subsequent segfault if the sample value read from uninitialized memory was
|
||||||
|
outside of the valid sample range.
|
||||||
|
|
||||||
|
5. Fixed a long-standing issue whereby the `tj3Transform()` function, when used
|
||||||
|
with the `TJXOP_TRANSPOSE`, `TJXOP_TRANSVERSE`, `TJXOP_ROT90`, or
|
||||||
|
`TJXOP_ROT270` transform operation and without automatic JPEG destination
|
||||||
|
buffer (re)allocation or lossless cropping, computed the worst-case transformed
|
||||||
|
JPEG image size based on the source image dimensions rather than the
|
||||||
|
transformed image dimensions. If a calling program allocated the JPEG
|
||||||
|
destination buffer based on the transformed image dimensions, as the API
|
||||||
|
documentation instructs, and attempted to transform a specially-crafted 4:2:2,
|
||||||
|
4:4:0, 4:1:1, or 4:4:1 JPEG source image containing a large amount of metadata,
|
||||||
|
the issue caused `tj3Transform()` to overflow the JPEG destination buffer
|
||||||
|
rather than fail gracefully. The issue could be worked around by setting
|
||||||
|
`TJXOPT_COPYNONE`. Note that, irrespective of this issue, `tj3Transform()`
|
||||||
|
cannot reliably transform JPEG source images that contain a large amount of
|
||||||
|
metadata unless automatic JPEG destination buffer (re)allocation is used or
|
||||||
|
`TJXOPT_COPYNONE` is set.
|
||||||
|
|
||||||
|
6. Fixed a regression introduced by 3.0 beta2[6] that prevented the djpeg
|
||||||
|
`-map` option from working when decompressing 12-bit-per-component lossy JPEG
|
||||||
|
images.
|
||||||
|
|
||||||
|
7. Fixed an issue that caused the C Huffman encoder (which is not used by
|
||||||
|
default on x86 and Arm CPUs) to read from uninitialized memory when attempting
|
||||||
|
to transform a specially-crafted malformed arithmetic-coded JPEG source image
|
||||||
|
into a baseline Huffman-coded JPEG destination image.
|
||||||
|
|
||||||
|
|
||||||
|
2.1.91 (3.0 beta2)
|
||||||
|
==================
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1.5.1:
|
||||||
|
|
||||||
|
1. Significantly sped up the computation of optimal Huffman tables. This
|
||||||
|
speeds up the compression of tiny images by as much as 2x and provides a
|
||||||
|
noticeable speedup for images as large as 256x256 when using optimal Huffman
|
||||||
|
tables.
|
||||||
|
|
||||||
|
2. All deprecated fields, constructors, and methods in the TurboJPEG Java API
|
||||||
|
have been removed.
|
||||||
|
|
||||||
|
3. Arithmetic entropy coding is now supported with 12-bit-per-component JPEG
|
||||||
|
images.
|
||||||
|
|
||||||
|
4. Overhauled the TurboJPEG API to address long-standing limitations and to
|
||||||
|
make the API more extensible and intuitive:
|
||||||
|
|
||||||
|
- All C function names are now prefixed with `tj3`, and all version
|
||||||
|
suffixes have been removed from the function names. Future API overhauls will
|
||||||
|
increment the prefix to `tj4`, etc., thus retaining backward API/ABI
|
||||||
|
compatibility without versioning each individual function.
|
||||||
|
- Stateless boolean flags have been replaced with stateful integer API
|
||||||
|
parameters, the values of which persist between function calls. New
|
||||||
|
functions/methods (`tj3Set()`/`TJCompressor.set()`/`TJDecompressor.set()` and
|
||||||
|
`tj3Get()`/`TJCompressor.get()`/`TJDecompressor.get()`) can be used to set and
|
||||||
|
query the value of a particular API parameter.
|
||||||
|
- The JPEG quality and subsampling are now implemented using API
|
||||||
|
parameters rather than stateless function arguments (C) or dedicated set/get
|
||||||
|
methods (Java.)
|
||||||
|
- `tj3DecompressHeader()` now stores all relevant information about the
|
||||||
|
JPEG image, including the width, height, subsampling type, entropy coding
|
||||||
|
algorithm, etc., in API parameters rather than returning that information
|
||||||
|
through pointer arguments.
|
||||||
|
- `TJFLAG_LIMITSCANS`/`TJ.FLAG_LIMITSCANS` has been reimplemented as an
|
||||||
|
API parameter (`TJPARAM_SCANLIMIT`/`TJ.PARAM_SCANLIMIT`) that allows the number
|
||||||
|
of scans to be specified.
|
||||||
|
- Huffman table optimization can now be specified using a new API
|
||||||
|
parameter (`TJPARAM_OPTIMIZE`/`TJ.PARAM_OPTIMIZE`), a new transform option
|
||||||
|
(`TJXOPT_OPTIMIZE`/`TJTransform.OPT_OPTIMIZE`), and a new TJBench option
|
||||||
|
(`-optimize`.)
|
||||||
|
- Arithmetic entropy coding can now be specified or queried, using a new
|
||||||
|
API parameter (`TJPARAM_ARITHMETIC`/`TJ.PARAM_ARITHMETIC`), a new transform
|
||||||
|
option (`TJXOPT_ARITHMETIC`/`TJTransform.OPT_ARITHMETIC`), and a new TJBench
|
||||||
|
option (`-arithmetic`.)
|
||||||
|
- The restart marker interval can now be specified, using new API
|
||||||
|
parameters (`TJPARAM_RESTARTROWS`/`TJ.PARAM_RESTARTROWS` and
|
||||||
|
`TJPARAM_RESTARTBLOCKS`/`TJ.PARAM_RESTARTBLOCKS`) and a new TJBench option
|
||||||
|
(`-restart`.)
|
||||||
|
- Pixel density can now be specified or queried, using new API parameters
|
||||||
|
(`TJPARAM_XDENSITY`/`TJ.PARAM_XDENSITY`,
|
||||||
|
`TJPARAM_YDENSITY`/`TJ.PARAM_YDENSITY`, and
|
||||||
|
`TJPARAM_DENSITYUNITS`/`TJ.PARAM_DENSITYUNITS`.)
|
||||||
|
- The accurate DCT/IDCT algorithms are now the default for both
|
||||||
|
compression and decompression, since the "fast" algorithms are considered to be
|
||||||
|
a legacy feature. (The "fast" algorithms do not pass the ISO compliance tests,
|
||||||
|
and those algorithms are not any faster than the accurate algorithms on modern
|
||||||
|
x86 CPUs.)
|
||||||
|
- All C initialization functions have been combined into a single function
|
||||||
|
(`tj3Init()`) that accepts an integer argument specifying the subsystems to
|
||||||
|
initialize.
|
||||||
|
- All C functions now use the `const` keyword for pointer arguments that
|
||||||
|
point to unmodified buffers (and for both dimensions of pointer arguments that
|
||||||
|
point to sets of unmodified buffers.)
|
||||||
|
- All C functions now use `size_t` rather than `unsigned long` to
|
||||||
|
represent buffer sizes, for compatibility with `malloc()` and to avoid
|
||||||
|
disparities in the size of `unsigned long` between LP64 (Un*x) and LLP64
|
||||||
|
(Windows) operating systems.
|
||||||
|
- All C buffer size functions now return 0 if an error occurs, rather than
|
||||||
|
trying to awkwardly return -1 in an unsigned data type (which could easily be
|
||||||
|
misinterpreted as a very large value.)
|
||||||
|
- Decompression scaling is now enabled explicitly, using a new
|
||||||
|
function/method (`tj3SetScalingFactor()`/`TJDecompressor.setScalingFactor()`),
|
||||||
|
rather than implicitly using awkward "desired width"/"desired height"
|
||||||
|
arguments.
|
||||||
|
- Partial image decompression has been implemented, using a new
|
||||||
|
function/method (`tj3SetCroppingRegion()`/`TJDecompressor.setCroppingRegion()`)
|
||||||
|
and a new TJBench option (`-crop`.)
|
||||||
|
- The JPEG colorspace can now be specified explicitly when compressing,
|
||||||
|
using a new API parameter (`TJPARAM_COLORSPACE`/`TJ.PARAM_COLORSPACE`.) This
|
||||||
|
allows JPEG images with the RGB and CMYK colorspaces to be created.
|
||||||
|
- TJBench no longer generates error/difference images, since identical
|
||||||
|
functionality is already available in ImageMagick.
|
||||||
|
- JPEG images with unknown subsampling configurations can now be
|
||||||
|
fully decompressed into packed-pixel images or losslessly transformed (with the
|
||||||
|
exception of lossless cropping.) They cannot currently be partially
|
||||||
|
decompressed or decompressed into planar YUV images.
|
||||||
|
- `tj3Destroy()` now silently accepts a NULL handle.
|
||||||
|
- `tj3Alloc()` and `tj3Free()` now return/accept void pointers, as
|
||||||
|
`malloc()` and `free()` do.
|
||||||
|
- The C image I/O functions now accept a TurboJPEG instance handle, which
|
||||||
|
is used to transmit/receive API parameter values and to receive error
|
||||||
|
information.
|
||||||
|
|
||||||
|
5. Added support for 8-bit-per-component, 12-bit-per-component, and
|
||||||
|
16-bit-per-component lossless JPEG images. A new libjpeg API function
|
||||||
|
(`jpeg_enable_lossless()`), TurboJPEG API parameters
|
||||||
|
(`TJPARAM_LOSSLESS`/`TJ.PARAM_LOSSLESS`,
|
||||||
|
`TJPARAM_LOSSLESSPSV`/`TJ.PARAM_LOSSLESSPSV`, and
|
||||||
|
`TJPARAM_LOSSLESSPT`/`TJ.PARAM_LOSSLESSPT`), and a cjpeg/TJBench option
|
||||||
|
(`-lossless`) can be used to create a lossless JPEG image. (Decompression of
|
||||||
|
lossless JPEG images is handled automatically.) Refer to
|
||||||
|
[libjpeg.txt](libjpeg.txt), [usage.txt](usage.txt), and the TurboJPEG API
|
||||||
|
documentation for more details.
|
||||||
|
|
||||||
|
6. Added support for 12-bit-per-component (lossy and lossless) and
|
||||||
|
16-bit-per-component (lossless) JPEG images to the libjpeg and TurboJPEG APIs:
|
||||||
|
|
||||||
|
- The existing `data_precision` field in `jpeg_compress_struct` and
|
||||||
|
`jpeg_decompress_struct` has been repurposed to enable the creation of
|
||||||
|
12-bit-per-component and 16-bit-per-component JPEG images or to detect whether
|
||||||
|
a 12-bit-per-component or 16-bit-per-component JPEG image is being
|
||||||
|
decompressed.
|
||||||
|
- New 12-bit-per-component and 16-bit-per-component versions of
|
||||||
|
`jpeg_write_scanlines()` and `jpeg_read_scanlines()`, as well as new
|
||||||
|
12-bit-per-component versions of `jpeg_write_raw_data()`,
|
||||||
|
`jpeg_skip_scanlines()`, `jpeg_crop_scanline()`, and `jpeg_read_raw_data()`,
|
||||||
|
provide interfaces for compressing from/decompressing to 12-bit-per-component
|
||||||
|
and 16-bit-per-component packed-pixel and planar YUV image buffers.
|
||||||
|
- New 12-bit-per-component and 16-bit-per-component compression,
|
||||||
|
decompression, and image I/O functions/methods have been added to the TurboJPEG
|
||||||
|
API, and a new API parameter (`TJPARAM_PRECISION`/`TJ.PARAM_PRECISION`) can be
|
||||||
|
used to query the data precision of a JPEG image. (YUV functions are currently
|
||||||
|
limited to 8-bit data precision but can be expanded to accommodate 12-bit data
|
||||||
|
precision in the future, if such is deemed beneficial.)
|
||||||
|
- A new cjpeg and TJBench command-line argument (`-precision`) can be used
|
||||||
|
to create a 12-bit-per-component or 16-bit-per-component JPEG image.
|
||||||
|
(Decompression and transformation of 12-bit-per-component and
|
||||||
|
16-bit-per-component JPEG images is handled automatically.)
|
||||||
|
|
||||||
|
Refer to [libjpeg.txt](libjpeg.txt), [usage.txt](usage.txt), and the
|
||||||
|
TurboJPEG API documentation for more details.
|
||||||
|
|
||||||
|
|
||||||
|
2.1.5.1
|
||||||
|
=======
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1.5:
|
||||||
|
|
||||||
|
1. The SIMD dispatchers in libjpeg-turbo 2.1.4 and prior stored the list of
|
||||||
|
supported SIMD instruction sets in a global variable, which caused an innocuous
|
||||||
|
race condition whereby the variable could have been initialized multiple times
|
||||||
|
if `jpeg_start_*compress()` was called simultaneously in multiple threads.
|
||||||
|
libjpeg-turbo 2.1.5 included an undocumented attempt to fix this race condition
|
||||||
|
by making the SIMD support variable thread-local. However, that caused another
|
||||||
|
issue whereby, if `jpeg_start_*compress()` was called in one thread and
|
||||||
|
`jpeg_read_*()` or `jpeg_write_*()` was called in a second thread, the SIMD
|
||||||
|
support variable was never initialized in the second thread. On x86 systems,
|
||||||
|
this led the second thread to incorrectly assume that AVX2 instructions were
|
||||||
|
always available, and when it attempted to use those instructions on older x86
|
||||||
|
CPUs that do not support them, an illegal instruction error occurred. The SIMD
|
||||||
|
dispatchers now ensure that the SIMD support variable is initialized before
|
||||||
|
dispatching based on its value.
|
||||||
|
|
||||||
|
|
||||||
|
2.1.5
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1.4:
|
||||||
|
|
||||||
|
1. Fixed issues in the build system whereby, when using the Ninja Multi-Config
|
||||||
|
CMake generator, a static build of libjpeg-turbo (a build in which
|
||||||
|
`ENABLE_SHARED` is `0`) could not be installed, a Windows installer could not
|
||||||
|
be built, and the Java regression tests failed.
|
||||||
|
|
||||||
|
2. Fixed a regression introduced by 2.0 beta1[15] that caused a buffer overrun
|
||||||
|
in the progressive Huffman encoder when attempting to transform a
|
||||||
|
specially-crafted malformed 12-bit-per-component JPEG image into a progressive
|
||||||
|
12-bit-per-component JPEG image using a 12-bit-per-component build of
|
||||||
|
libjpeg-turbo (`-DWITH_12BIT=1`.) Given that the buffer overrun was fully
|
||||||
|
contained within the progressive Huffman encoder structure and did not cause a
|
||||||
|
segfault or other user-visible errant behavior, given that the lossless
|
||||||
|
transformer (unlike the decompressor) is not generally exposed to arbitrary
|
||||||
|
data exploits, and given that 12-bit-per-component builds of libjpeg-turbo are
|
||||||
|
uncommon, this issue did not likely pose a security risk.
|
||||||
|
|
||||||
|
3. Fixed an issue whereby, when using a 12-bit-per-component build of
|
||||||
|
libjpeg-turbo (`-DWITH_12BIT=1`), passing samples with values greater than 4095
|
||||||
|
or less than 0 to `jpeg_write_scanlines()` caused a buffer overrun or underrun
|
||||||
|
in the RGB-to-YCbCr color converter.
|
||||||
|
|
||||||
|
4. Fixed a floating point exception that occurred when attempting to use the
|
||||||
|
jpegtran `-drop` and `-trim` options to losslessly transform a
|
||||||
|
specially-crafted malformed JPEG image.
|
||||||
|
|
||||||
|
5. Fixed an issue in `tjBufSizeYUV2()` whereby it returned a bogus result,
|
||||||
|
rather than throwing an error, if the `align` parameter was not a power of 2.
|
||||||
|
Fixed a similar issue in `tjCompressFromYUV()` whereby it generated a corrupt
|
||||||
|
JPEG image in certain cases, rather than throwing an error, if the `align`
|
||||||
|
parameter was not a power of 2.
|
||||||
|
|
||||||
|
6. Fixed an issue whereby `tjDecompressToYUV2()`, which is a wrapper for
|
||||||
|
`tjDecompressToYUVPlanes()`, used the desired YUV image dimensions rather than
|
||||||
|
the actual scaled image dimensions when computing the plane pointers and
|
||||||
|
strides to pass to `tjDecompressToYUVPlanes()`. This caused a buffer overrun
|
||||||
|
and subsequent segfault if the desired image dimensions exceeded the scaled
|
||||||
|
image dimensions.
|
||||||
|
|
||||||
|
7. Fixed an issue whereby, when decompressing a 12-bit-per-component JPEG image
|
||||||
|
(`-DWITH_12BIT=1`) using an alpha-enabled output color space such as
|
||||||
|
`JCS_EXT_RGBA`, the alpha channel was set to 255 rather than 4095.
|
||||||
|
|
||||||
|
8. Fixed an issue whereby the Java version of TJBench did not accept a range of
|
||||||
|
quality values.
|
||||||
|
|
||||||
|
9. Fixed an issue whereby, when `-progressive` was passed to TJBench, the JPEG
|
||||||
|
input image was not transformed into a progressive JPEG image prior to
|
||||||
|
decompression.
|
||||||
|
|
||||||
|
|
||||||
|
2.1.4
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1.3:
|
||||||
|
|
||||||
|
1. Fixed a regression introduced in 2.1.3 that caused build failures with
|
||||||
|
Visual Studio 2010.
|
||||||
|
|
||||||
|
2. The `tjDecompressHeader3()` function in the TurboJPEG C API and the
|
||||||
|
`TJDecompressor.setSourceImage()` method in the TurboJPEG Java API now accept
|
||||||
|
"abbreviated table specification" (AKA "tables-only") datastreams, which can be
|
||||||
|
used to prime the decompressor with quantization and Huffman tables that can be
|
||||||
|
used when decompressing subsequent "abbreviated image" datastreams.
|
||||||
|
|
||||||
|
3. libjpeg-turbo now performs run-time detection of AltiVec instructions on
|
||||||
|
OS X/PowerPC systems if AltiVec instructions are not enabled at compile time.
|
||||||
|
This allows both AltiVec-equipped (PowerPC G4 and G5) and non-AltiVec-equipped
|
||||||
|
(PowerPC G3) CPUs to be supported using the same build of libjpeg-turbo.
|
||||||
|
|
||||||
|
4. Fixed an error ("Bogus virtual array access") that occurred when attempting
|
||||||
|
to decompress a progressive JPEG image with a height less than or equal to one
|
||||||
|
iMCU (8 * the vertical sampling factor) using buffered-image mode with
|
||||||
|
interblock smoothing enabled. This was a regression introduced by
|
||||||
|
2.1 beta1[6(b)].
|
||||||
|
|
||||||
|
5. Fixed two issues that prevented partial image decompression from working
|
||||||
|
properly with buffered-image mode:
|
||||||
|
|
||||||
|
- Attempting to call `jpeg_crop_scanline()` after
|
||||||
|
`jpeg_start_decompress()` but before `jpeg_start_output()` resulted in an error
|
||||||
|
("Improper call to JPEG library in state 207".)
|
||||||
|
- Attempting to use `jpeg_skip_scanlines()` resulted in an error ("Bogus
|
||||||
|
virtual array access") under certain circumstances.
|
||||||
|
|
||||||
|
|
||||||
|
2.1.3
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1.2:
|
||||||
|
|
||||||
|
1. Fixed a regression introduced by 2.0 beta1[7] whereby cjpeg compressed PGM
|
||||||
|
input files into full-color JPEG images unless the `-grayscale` option was
|
||||||
|
used.
|
||||||
|
|
||||||
|
2. cjpeg now automatically compresses GIF and 8-bit BMP input files into
|
||||||
|
grayscale JPEG images if the input files contain only shades of gray.
|
||||||
|
|
||||||
|
3. The build system now enables the intrinsics implementation of the AArch64
|
||||||
|
(Arm 64-bit) Neon SIMD extensions by default when using GCC 12 or later.
|
||||||
|
|
||||||
|
4. Fixed a segfault that occurred while decompressing a 4:2:0 JPEG image using
|
||||||
|
the merged (non-fancy) upsampling algorithms (that is, with
|
||||||
|
`cinfo.do_fancy_upsampling` set to `FALSE`) along with `jpeg_crop_scanline()`.
|
||||||
|
Specifically, the segfault occurred if the number of bytes remaining in the
|
||||||
|
output buffer was less than the number of bytes required to represent one
|
||||||
|
uncropped scanline of the output image. For that reason, the issue could only
|
||||||
|
be reproduced using the libjpeg API, not using djpeg.
|
||||||
|
|
||||||
|
|
||||||
|
2.1.2
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1.1:
|
||||||
|
|
||||||
|
1. Fixed a regression introduced by 2.1 beta1[13] that caused the remaining
|
||||||
|
GAS implementations of AArch64 (Arm 64-bit) Neon SIMD functions (which are used
|
||||||
|
by default with GCC for performance reasons) to be placed in the `.rodata`
|
||||||
|
section rather than in the `.text` section. This caused the GNU linker to
|
||||||
|
automatically place the `.rodata` section in an executable segment, which
|
||||||
|
prevented libjpeg-turbo from working properly with other linkers and also
|
||||||
|
represented a potential security risk.
|
||||||
|
|
||||||
|
2. Fixed an issue whereby the `tjTransform()` function incorrectly computed the
|
||||||
|
iMCU size for 4:4:4 JPEG images with non-unary sampling factors and thus unduly
|
||||||
|
rejected some cropping regions, even though those regions aligned with 8x8 iMCU
|
||||||
|
boundaries.
|
||||||
|
|
||||||
|
3. Fixed a regression introduced by 2.1 beta1[13] that caused the build system
|
||||||
|
to enable the Arm Neon SIMD extensions when targetting Armv6 and other legacy
|
||||||
|
architectures that do not support Neon instructions.
|
||||||
|
|
||||||
|
4. libjpeg-turbo now performs run-time detection of AltiVec instructions on
|
||||||
|
FreeBSD/PowerPC systems if AltiVec instructions are not enabled at compile
|
||||||
|
time. This allows both AltiVec-equipped and non-AltiVec-equipped CPUs to be
|
||||||
|
supported using the same build of libjpeg-turbo.
|
||||||
|
|
||||||
|
5. cjpeg now accepts a `-strict` argument similar to that of djpeg and
|
||||||
|
jpegtran, which causes the compressor to abort if an LZW-compressed GIF input
|
||||||
|
image contains incomplete or corrupt image data.
|
||||||
|
|
||||||
|
|
||||||
|
2.1.1
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1.0:
|
||||||
|
|
||||||
|
1. Fixed a regression introduced in 2.1.0 that caused build failures with
|
||||||
|
non-GCC-compatible compilers for Un*x/Arm platforms.
|
||||||
|
|
||||||
|
2. Fixed a regression introduced by 2.1 beta1[13] that prevented the Arm 32-bit
|
||||||
|
(AArch32) Neon SIMD extensions from building unless the C compiler flags
|
||||||
|
included `-mfloat-abi=softfp` or `-mfloat-abi=hard`.
|
||||||
|
|
||||||
|
3. Fixed an issue in the AArch32 Neon SIMD Huffman encoder whereby reliance on
|
||||||
|
undefined C compiler behavior led to crashes ("SIGBUS: illegal alignment") on
|
||||||
|
Android systems when running AArch32/Thumb builds of libjpeg-turbo built with
|
||||||
|
recent versions of Clang.
|
||||||
|
|
||||||
|
4. Added a command-line argument (`-copy icc`) to jpegtran that causes it to
|
||||||
|
copy only the ICC profile markers from the source file and discard any other
|
||||||
|
metadata.
|
||||||
|
|
||||||
|
5. libjpeg-turbo should now build and run on CHERI-enabled architectures, which
|
||||||
|
use capability pointers that are larger than the size of `size_t`.
|
||||||
|
|
||||||
|
6. Fixed a regression (CVE-2021-37972) introduced by 2.1 beta1[5] that caused a
|
||||||
|
segfault in the 64-bit SSE2 Huffman encoder when attempting to losslessly
|
||||||
|
transform a specially-crafted malformed JPEG image.
|
||||||
|
|
||||||
|
|
||||||
|
2.1.0
|
||||||
|
=====
|
||||||
|
|
||||||
|
### Significant changes relative to 2.1 beta1:
|
||||||
|
|
||||||
|
1. Fixed a regression (CVE-2021-29390) introduced by 2.1 beta1[6(b)] whereby
|
||||||
|
attempting to decompress certain progressive JPEG images with one or more
|
||||||
|
component planes of width 8 or less caused a buffer overrun.
|
||||||
|
|
||||||
|
2. Fixed a regression introduced by 2.1 beta1[6(b)] whereby attempting to
|
||||||
|
decompress a specially-crafted malformed progressive JPEG image caused the
|
||||||
|
block smoothing algorithm to read from uninitialized memory.
|
||||||
|
|
||||||
|
3. Fixed an issue in the Arm Neon SIMD Huffman encoders that caused the
|
||||||
|
encoders to generate incorrect results when using the Clang compiler with
|
||||||
|
Visual Studio.
|
||||||
|
|
||||||
|
4. Fixed a floating point exception (CVE-2021-20205) that occurred when
|
||||||
|
attempting to compress a specially-crafted malformed GIF image with a specified
|
||||||
|
image width of 0 using cjpeg.
|
||||||
|
|
||||||
|
5. Fixed a regression introduced by 2.0 beta1[15] whereby attempting to
|
||||||
|
generate a progressive JPEG image on an SSE2-capable CPU using a scan script
|
||||||
|
containing one or more scans with lengths divisible by 32 and non-zero
|
||||||
|
successive approximation low bit positions would, under certain circumstances,
|
||||||
|
result in an error ("Missing Huffman code table entry") and an invalid JPEG
|
||||||
|
image.
|
||||||
|
|
||||||
|
6. Introduced a new flag (`TJFLAG_LIMITSCANS` in the TurboJPEG C API and
|
||||||
|
`TJ.FLAG_LIMIT_SCANS` in the TurboJPEG Java API) and a corresponding TJBench
|
||||||
|
command-line argument (`-limitscans`) that causes the TurboJPEG decompression
|
||||||
|
and transform functions/operations to return/throw an error if a progressive
|
||||||
|
JPEG image contains an unreasonably large number of scans. This allows
|
||||||
|
applications that use the TurboJPEG API to guard against an exploit of the
|
||||||
|
progressive JPEG format described in the report
|
||||||
|
["Two Issues with the JPEG Standard"](https://libjpeg-turbo.org/pmwiki/uploads/About/TwoIssueswiththeJPEGStandard.pdf).
|
||||||
|
|
||||||
|
7. The PPM reader now throws an error, rather than segfaulting (due to a buffer
|
||||||
|
overrun, CVE-2021-46822) or generating incorrect pixels, if an application
|
||||||
|
attempts to use the `tjLoadImage()` function to load a 16-bit binary PPM file
|
||||||
|
(a binary PPM file with a maximum value greater than 255) into a grayscale
|
||||||
|
image buffer or to load a 16-bit binary PGM file into an RGB image buffer.
|
||||||
|
|
||||||
|
8. Fixed an issue in the PPM reader that caused incorrect pixels to be
|
||||||
|
generated when using the `tjLoadImage()` function to load a 16-bit binary PPM
|
||||||
|
file into an extended RGB image buffer.
|
||||||
|
|
||||||
|
9. Fixed an issue whereby, if a JPEG buffer was automatically re-allocated by
|
||||||
|
one of the TurboJPEG compression or transform functions and an error
|
||||||
|
subsequently occurred during compression or transformation, the JPEG buffer
|
||||||
|
pointer passed by the application was not updated when the function returned.
|
||||||
|
|
||||||
|
|
||||||
|
2.0.90 (2.1 beta1)
|
||||||
|
==================
|
||||||
|
|
||||||
|
### Significant changes relative to 2.0.6:
|
||||||
|
|
||||||
|
1. The build system, x86-64 SIMD extensions, and accelerated Huffman codec now
|
||||||
|
support the x32 ABI on Linux, which allows for using x86-64 instructions with
|
||||||
|
32-bit pointers. The x32 ABI is generally enabled by adding `-mx32` to the
|
||||||
|
compiler flags.
|
||||||
|
|
||||||
|
Caveats:
|
||||||
|
- CMake 3.9.0 or later is required in order for the build system to
|
||||||
|
automatically detect an x32 build.
|
||||||
|
- Java does not support the x32 ABI, and thus the TurboJPEG Java API will
|
||||||
|
automatically be disabled with x32 builds.
|
||||||
|
|
||||||
|
2. Added Loongson MMI SIMD implementations of the RGB-to-grayscale, 4:2:2 fancy
|
||||||
|
chroma upsampling, 4:2:2 and 4:2:0 merged chroma upsampling/color conversion,
|
||||||
|
and fast integer DCT/IDCT algorithms. Relative to libjpeg-turbo 2.0.x, this
|
||||||
|
speeds up:
|
||||||
|
|
||||||
|
- the compression of RGB source images into grayscale JPEG images by
|
||||||
|
approximately 20%
|
||||||
|
- the decompression of 4:2:2 JPEG images by approximately 40-60% when
|
||||||
|
using fancy upsampling
|
||||||
|
- the decompression of 4:2:2 and 4:2:0 JPEG images by approximately
|
||||||
|
15-20% when using merged upsampling
|
||||||
|
- the compression of RGB source images by approximately 30-45% when using
|
||||||
|
the fast integer DCT
|
||||||
|
- the decompression of JPEG images into RGB destination images by
|
||||||
|
approximately 2x when using the fast integer IDCT
|
||||||
|
|
||||||
|
The overall decompression speedup for RGB images is now approximately
|
||||||
|
2.3-3.7x (compared to 2-3.5x with libjpeg-turbo 2.0.x.)
|
||||||
|
|
||||||
|
3. 32-bit (Armv7 or Armv7s) iOS builds of libjpeg-turbo are no longer
|
||||||
|
supported, and the libjpeg-turbo build system can no longer be used to package
|
||||||
|
such builds. 32-bit iOS apps cannot run in iOS 11 and later, and the App Store
|
||||||
|
no longer allows them.
|
||||||
|
|
||||||
|
4. 32-bit (i386) OS X/macOS builds of libjpeg-turbo are no longer supported,
|
||||||
|
and the libjpeg-turbo build system can no longer be used to package such
|
||||||
|
builds. 32-bit Mac applications cannot run in macOS 10.15 "Catalina" and
|
||||||
|
later, and the App Store no longer allows them.
|
||||||
|
|
||||||
|
5. The SSE2 (x86 SIMD) and C Huffman encoding algorithms have been
|
||||||
|
significantly optimized, resulting in a measured average overall compression
|
||||||
|
speedup of 12-28% for 64-bit code and 22-52% for 32-bit code on various Intel
|
||||||
|
and AMD CPUs, as well as a measured average overall compression speedup of
|
||||||
|
0-23% on platforms that do not have a SIMD-accelerated Huffman encoding
|
||||||
|
implementation.
|
||||||
|
|
||||||
|
6. The block smoothing algorithm that is applied by default when decompressing
|
||||||
|
progressive Huffman-encoded JPEG images has been improved in the following
|
||||||
|
ways:
|
||||||
|
|
||||||
|
- The algorithm is now more fault-tolerant. Previously, if a particular
|
||||||
|
scan was incomplete, then the smoothing parameters for the incomplete scan
|
||||||
|
would be applied to the entire output image, including the parts of the image
|
||||||
|
that were generated by the prior (complete) scan. Visually, this had the
|
||||||
|
effect of removing block smoothing from lower-frequency scans if they were
|
||||||
|
followed by an incomplete higher-frequency scan. libjpeg-turbo now applies
|
||||||
|
block smoothing parameters to each iMCU row based on which scan generated the
|
||||||
|
pixels in that row, rather than always using the block smoothing parameters for
|
||||||
|
the most recent scan.
|
||||||
|
- When applying block smoothing to DC scans, a Gaussian-like kernel with a
|
||||||
|
5x5 window is used to reduce the "blocky" appearance.
|
||||||
|
|
||||||
|
7. Added SIMD acceleration for progressive Huffman encoding on Arm platforms.
|
||||||
|
This speeds up the compression of full-color progressive JPEGs by about 30-40%
|
||||||
|
on average (relative to libjpeg-turbo 2.0.x) when using modern Arm CPUs.
|
||||||
|
|
||||||
|
8. Added configure-time and run-time auto-detection of Loongson MMI SIMD
|
||||||
|
instructions, so that the Loongson MMI SIMD extensions can be included in any
|
||||||
|
MIPS64 libjpeg-turbo build.
|
||||||
|
|
||||||
|
9. Added fault tolerance features to djpeg and jpegtran, mainly to demonstrate
|
||||||
|
methods by which applications can guard against the exploits of the JPEG format
|
||||||
|
described in the report
|
||||||
|
["Two Issues with the JPEG Standard"](https://libjpeg-turbo.org/pmwiki/uploads/About/TwoIssueswiththeJPEGStandard.pdf).
|
||||||
|
|
||||||
|
- Both programs now accept a `-maxscans` argument, which can be used to
|
||||||
|
limit the number of allowable scans in the input file.
|
||||||
|
- Both programs now accept a `-strict` argument, which can be used to
|
||||||
|
treat all warnings as fatal.
|
||||||
|
|
||||||
|
10. CMake package config files are now included for both the libjpeg and
|
||||||
|
TurboJPEG API libraries. This facilitates using libjpeg-turbo with CMake's
|
||||||
|
`find_package()` function. For example:
|
||||||
|
|
||||||
|
find_package(libjpeg-turbo CONFIG REQUIRED)
|
||||||
|
|
||||||
|
add_executable(libjpeg_program libjpeg_program.c)
|
||||||
|
target_link_libraries(libjpeg_program PUBLIC libjpeg-turbo::jpeg)
|
||||||
|
|
||||||
|
add_executable(libjpeg_program_static libjpeg_program.c)
|
||||||
|
target_link_libraries(libjpeg_program_static PUBLIC
|
||||||
|
libjpeg-turbo::jpeg-static)
|
||||||
|
|
||||||
|
add_executable(turbojpeg_program turbojpeg_program.c)
|
||||||
|
target_link_libraries(turbojpeg_program PUBLIC
|
||||||
|
libjpeg-turbo::turbojpeg)
|
||||||
|
|
||||||
|
add_executable(turbojpeg_program_static turbojpeg_program.c)
|
||||||
|
target_link_libraries(turbojpeg_program_static PUBLIC
|
||||||
|
libjpeg-turbo::turbojpeg-static)
|
||||||
|
|
||||||
|
11. Since the Unisys LZW patent has long expired, cjpeg and djpeg can now
|
||||||
|
read/write both LZW-compressed and uncompressed GIF files (feature ported from
|
||||||
|
jpeg-6a and jpeg-9d.)
|
||||||
|
|
||||||
|
12. jpegtran now includes the `-wipe` and `-drop` options from jpeg-9a and
|
||||||
|
jpeg-9d, as well as the ability to expand the image size using the `-crop`
|
||||||
|
option. Refer to jpegtran.1 or usage.txt for more details.
|
||||||
|
|
||||||
|
13. Added a complete intrinsics implementation of the Arm Neon SIMD extensions,
|
||||||
|
thus providing SIMD acceleration on Arm platforms for all of the algorithms
|
||||||
|
that are SIMD-accelerated on x86 platforms. This new implementation is
|
||||||
|
significantly faster in some cases than the old GAS implementation--
|
||||||
|
depending on the algorithms used, the type of CPU core, and the compiler. GCC,
|
||||||
|
as of this writing, does not provide a full or optimal set of Neon intrinsics,
|
||||||
|
so for performance reasons, the default when building libjpeg-turbo with GCC is
|
||||||
|
to continue using the GAS implementation of the following algorithms:
|
||||||
|
|
||||||
|
- 32-bit RGB-to-YCbCr color conversion
|
||||||
|
- 32-bit fast and accurate inverse DCT
|
||||||
|
- 64-bit RGB-to-YCbCr and YCbCr-to-RGB color conversion
|
||||||
|
- 64-bit accurate forward and inverse DCT
|
||||||
|
- 64-bit Huffman encoding
|
||||||
|
|
||||||
|
A new CMake variable (`NEON_INTRINSICS`) can be used to override this
|
||||||
|
default.
|
||||||
|
|
||||||
|
Since the new intrinsics implementation includes SIMD acceleration
|
||||||
|
for merged upsampling/color conversion, 1.5.1[5] is no longer necessary and has
|
||||||
|
been reverted.
|
||||||
|
|
||||||
|
14. The Arm Neon SIMD extensions can now be built using Visual Studio.
|
||||||
|
|
||||||
|
15. The build system can now be used to generate a universal x86-64 + Armv8
|
||||||
|
libjpeg-turbo SDK package for both iOS and macOS.
|
||||||
|
|
||||||
|
|
||||||
2.0.6
|
2.0.6
|
||||||
=====
|
=====
|
||||||
|
|
||||||
@@ -9,11 +768,11 @@ methods in the TurboJPEG Java API.
|
|||||||
|
|
||||||
2. Fixed or worked around multiple issues with `jpeg_skip_scanlines()`:
|
2. Fixed or worked around multiple issues with `jpeg_skip_scanlines()`:
|
||||||
|
|
||||||
- Fixed segfaults or "Corrupt JPEG data: premature end of data segment"
|
- Fixed segfaults (CVE-2020-35538) or "Corrupt JPEG data: premature end of
|
||||||
errors in `jpeg_skip_scanlines()` that occurred when decompressing 4:2:2 or
|
data segment" errors in `jpeg_skip_scanlines()` that occurred when
|
||||||
4:2:0 JPEG images using merged (non-fancy) upsampling/color conversion (that
|
decompressing 4:2:2 or 4:2:0 JPEG images using merged (non-fancy)
|
||||||
is, when setting `cinfo.do_fancy_upsampling` to `FALSE`.) 2.0.0[6] was a
|
upsampling/color conversion (that is, when setting `cinfo.do_fancy_upsampling`
|
||||||
similar fix, but it did not cover all cases.
|
to `FALSE`.) 2.0.0[6] was a similar fix, but it did not cover all cases.
|
||||||
- `jpeg_skip_scanlines()` now throws an error if two-pass color
|
- `jpeg_skip_scanlines()` now throws an error if two-pass color
|
||||||
quantization is enabled. Two-pass color quantization never worked properly
|
quantization is enabled. Two-pass color quantization never worked properly
|
||||||
with `jpeg_skip_scanlines()`, and the issues could not readily be fixed.
|
with `jpeg_skip_scanlines()`, and the issues could not readily be fixed.
|
||||||
@@ -88,15 +847,15 @@ JPEG images. This was known to cause a buffer overflow when attempting to
|
|||||||
decompress some such images using `tjDecompressToYUV2()` or
|
decompress some such images using `tjDecompressToYUV2()` or
|
||||||
`tjDecompressToYUVPlanes()`.
|
`tjDecompressToYUVPlanes()`.
|
||||||
|
|
||||||
5. Fixed an issue, detected by ASan, whereby attempting to losslessly transform
|
5. Fixed an issue (CVE-2020-17541), detected by ASan, whereby attempting to
|
||||||
a specially-crafted malformed JPEG image containing an extremely-high-frequency
|
losslessly transform a specially-crafted malformed JPEG image containing an
|
||||||
coefficient block (junk image data that could never be generated by a
|
extremely-high-frequency coefficient block (junk image data that could never be
|
||||||
legitimate JPEG compressor) could cause the Huffman encoder's local buffer to
|
generated by a legitimate JPEG compressor) could cause the Huffman encoder's
|
||||||
be overrun. (Refer to 1.4.0[9] and 1.4beta1[15].) Given that the buffer
|
local buffer to be overrun. (Refer to 1.4.0[9] and 1.4beta1[15].) Given that
|
||||||
overrun was fully contained within the stack and did not cause a segfault or
|
the buffer overrun was fully contained within the stack and did not cause a
|
||||||
other user-visible errant behavior, and given that the lossless transformer
|
segfault or other user-visible errant behavior, and given that the lossless
|
||||||
(unlike the decompressor) is not generally exposed to arbitrary data exploits,
|
transformer (unlike the decompressor) is not generally exposed to arbitrary
|
||||||
this issue did not likely pose a security risk.
|
data exploits, this issue did not likely pose a security risk.
|
||||||
|
|
||||||
6. The Arm 64-bit (Armv8) Neon SIMD assembly code now stores constants in a
|
6. The Arm 64-bit (Armv8) Neon SIMD assembly code now stores constants in a
|
||||||
separate read-only data section rather than in the text section, to support
|
separate read-only data section rather than in the text section, to support
|
||||||
@@ -339,16 +1098,15 @@ encounters a warning from the underlying libjpeg API (the default behavior is
|
|||||||
to allow the operation to complete unless a fatal error is encountered.)
|
to allow the operation to complete unless a fatal error is encountered.)
|
||||||
|
|
||||||
5. Introduced a new flag in the TurboJPEG C and Java APIs (`TJFLAG_PROGRESSIVE`
|
5. Introduced a new flag in the TurboJPEG C and Java APIs (`TJFLAG_PROGRESSIVE`
|
||||||
and `TJ.FLAG_PROGRESSIVE`, respectively) that causes the library to use
|
and `TJ.FLAG_PROGRESSIVE`, respectively) that causes compression and transform
|
||||||
progressive entropy coding in JPEG images generated by compression and
|
operations to generate progressive JPEG images. Additionally, a new transform
|
||||||
transform operations. Additionally, a new transform option
|
option (`TJXOPT_PROGRESSIVE` in the C API and `TJTransform.OPT_PROGRESSIVE` in
|
||||||
(`TJXOPT_PROGRESSIVE` in the C API and `TJTransform.OPT_PROGRESSIVE` in the
|
the Java API) has been introduced, allowing progressive JPEG images to be
|
||||||
Java API) has been introduced, allowing progressive entropy coding to be
|
generated by selected transforms in a multi-transform operation.
|
||||||
enabled for selected transforms in a multi-transform operation.
|
|
||||||
|
|
||||||
6. Introduced a new transform option in the TurboJPEG API (`TJXOPT_COPYNONE` in
|
6. Introduced a new transform option in the TurboJPEG API (`TJXOPT_COPYNONE` in
|
||||||
the C API and `TJTransform.OPT_COPYNONE` in the Java API) that allows the
|
the C API and `TJTransform.OPT_COPYNONE` in the Java API) that allows the
|
||||||
copying of markers (including EXIF and ICC profile data) to be disabled for a
|
copying of markers (including Exif and ICC profile data) to be disabled for a
|
||||||
particular transform.
|
particular transform.
|
||||||
|
|
||||||
7. Added two functions to the TurboJPEG C API (`tjLoadImage()` and
|
7. Added two functions to the TurboJPEG C API (`tjLoadImage()` and
|
||||||
@@ -384,7 +1142,7 @@ algorithm that caused incorrect dithering in the output image. This algorithm
|
|||||||
now produces bitwise-identical results to the unmerged algorithms.
|
now produces bitwise-identical results to the unmerged algorithms.
|
||||||
|
|
||||||
12. The SIMD function symbols for x86[-64]/ELF, MIPS/ELF, macOS/x86[-64] (if
|
12. The SIMD function symbols for x86[-64]/ELF, MIPS/ELF, macOS/x86[-64] (if
|
||||||
libjpeg-turbo is built with YASM), and iOS/Arm[64] builds are now private.
|
libjpeg-turbo is built with Yasm), and iOS/Arm[64] builds are now private.
|
||||||
This prevents those symbols from being exposed in applications or shared
|
This prevents those symbols from being exposed in applications or shared
|
||||||
libraries that link statically with libjpeg-turbo.
|
libraries that link statically with libjpeg-turbo.
|
||||||
|
|
||||||
@@ -479,13 +1237,13 @@ bug that has existed since the introduction of libjpeg v7/v8 API/ABI emulation
|
|||||||
in libjpeg-turbo v1.1.
|
in libjpeg-turbo v1.1.
|
||||||
|
|
||||||
7. The lossless transform features in jpegtran and the TurboJPEG API will now
|
7. The lossless transform features in jpegtran and the TurboJPEG API will now
|
||||||
always attempt to adjust the EXIF image width and height tags if the image size
|
always attempt to adjust the Exif image width and height tags if the image size
|
||||||
changed as a result of the transform. This behavior has always existed when
|
changed as a result of the transform. This behavior has always existed when
|
||||||
using libjpeg v8 API/ABI emulation. It was supposed to be available with
|
using libjpeg v8 API/ABI emulation. It was supposed to be available with
|
||||||
libjpeg v7 API/ABI emulation as well but did not work properly due to a bug.
|
libjpeg v7 API/ABI emulation as well but did not work properly due to a bug.
|
||||||
Furthermore, there was never any good reason not to enable it with libjpeg v6b
|
Furthermore, there was never any good reason not to enable it with libjpeg v6b
|
||||||
API/ABI emulation, since the behavior is entirely internal. Note that
|
API/ABI emulation, since the behavior is entirely internal. Note that
|
||||||
`-copy all` must be passed to jpegtran in order to transfer the EXIF tags from
|
`-copy all` must be passed to jpegtran in order to transfer the Exif tags from
|
||||||
the source image to the destination image.
|
the source image to the destination image.
|
||||||
|
|
||||||
8. Fixed several memory leaks in the TurboJPEG API library that could occur
|
8. Fixed several memory leaks in the TurboJPEG API library that could occur
|
||||||
@@ -507,7 +1265,7 @@ for two reasons: it allows testers to more easily work around the 2 GB limit
|
|||||||
in libFuzzer, and it allows developers of security-sensitive applications to
|
in libFuzzer, and it allows developers of security-sensitive applications to
|
||||||
more easily defend against one of the progressive JPEG exploits (LJT-01-004)
|
more easily defend against one of the progressive JPEG exploits (LJT-01-004)
|
||||||
identified in
|
identified in
|
||||||
[this report](http://www.libjpeg-turbo.org/pmwiki/uploads/About/TwoIssueswiththeJPEGStandard.pdf).
|
[this report](https://libjpeg-turbo.org/pmwiki/uploads/About/TwoIssueswiththeJPEGStandard.pdf).
|
||||||
|
|
||||||
10. TJBench will now run each benchmark for 1 second prior to starting the
|
10. TJBench will now run each benchmark for 1 second prior to starting the
|
||||||
timer, in order to improve the consistency of the results. Furthermore, the
|
timer, in order to improve the consistency of the results. Furthermore, the
|
||||||
@@ -1048,7 +1806,7 @@ features (such as the colorspace extensions), but in general, it performs no
|
|||||||
faster than libjpeg v6b.
|
faster than libjpeg v6b.
|
||||||
|
|
||||||
14. Added ARM 64-bit SIMD acceleration for the YCC-to-RGB color conversion
|
14. Added ARM 64-bit SIMD acceleration for the YCC-to-RGB color conversion
|
||||||
and IDCT algorithms (both are used during JPEG decompression.) For unknown
|
and IDCT algorithms (both are used during JPEG decompression.) For
|
||||||
reasons (probably related to clang), this code cannot currently be compiled for
|
reasons (probably related to clang), this code cannot currently be compiled for
|
||||||
iOS.
|
iOS.
|
||||||
|
|
||||||
@@ -1269,8 +2027,8 @@ either the fast or the accurate DCT/IDCT algorithms in the underlying codec.
|
|||||||
|
|
||||||
### Significant changes relative to 1.2 beta1:
|
### Significant changes relative to 1.2 beta1:
|
||||||
|
|
||||||
1. Fixed build issue with YASM on Unix systems (the libjpeg-turbo build system
|
1. Fixed build issue with Yasm on Unix systems (the libjpeg-turbo build system
|
||||||
was not adding the current directory to the assembler include path, so YASM
|
was not adding the current directory to the assembler include path, so Yasm
|
||||||
was not able to find jsimdcfg.inc.)
|
was not able to find jsimdcfg.inc.)
|
||||||
|
|
||||||
2. Fixed out-of-bounds read in SSE2 SIMD code that occurred when decompressing
|
2. Fixed out-of-bounds read in SSE2 SIMD code that occurred when decompressing
|
||||||
@@ -1338,7 +2096,7 @@ transposed or rotated 90 degrees.
|
|||||||
8. All legacy VirtualGL code has been re-factored, and this has allowed
|
8. All legacy VirtualGL code has been re-factored, and this has allowed
|
||||||
libjpeg-turbo, in its entirety, to be re-licensed under a BSD-style license.
|
libjpeg-turbo, in its entirety, to be re-licensed under a BSD-style license.
|
||||||
|
|
||||||
9. libjpeg-turbo can now be built with YASM.
|
9. libjpeg-turbo can now be built with Yasm.
|
||||||
|
|
||||||
10. Added SIMD acceleration for ARM Linux and iOS platforms that support
|
10. Added SIMD acceleration for ARM Linux and iOS platforms that support
|
||||||
NEON instructions.
|
NEON instructions.
|
||||||
@@ -1534,7 +2292,7 @@ and unit tests now work on those architectures.
|
|||||||
0.0.93
|
0.0.93
|
||||||
======
|
======
|
||||||
|
|
||||||
### Significant changes since 0.0.91:
|
### Significant changes relative to 0.0.91:
|
||||||
|
|
||||||
1. 2982659: Fixed x86-64 build on FreeBSD systems
|
1. 2982659: Fixed x86-64 build on FreeBSD systems
|
||||||
|
|
||||||
|
|||||||
33
LICENSE.md
@@ -1,30 +1,33 @@
|
|||||||
libjpeg-turbo Licenses
|
libjpeg-turbo Licenses
|
||||||
======================
|
======================
|
||||||
|
|
||||||
libjpeg-turbo is covered by three compatible BSD-style open source licenses:
|
libjpeg-turbo is covered by two compatible BSD-style open source licenses:
|
||||||
|
|
||||||
- The IJG (Independent JPEG Group) License, which is listed in
|
- The IJG (Independent JPEG Group) License, which is listed in
|
||||||
[README.ijg](README.ijg)
|
[README.ijg](README.ijg)
|
||||||
|
|
||||||
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.)
|
including any code inherited from libjpeg and any modifications to that
|
||||||
|
code. Note that the libjpeg-turbo SIMD source code bears the
|
||||||
|
[zlib License](https://opensource.org/licenses/Zlib), but in the context of
|
||||||
|
the overall libjpeg API library, the terms of the zlib License are subsumed
|
||||||
|
by the terms of the IJG License.
|
||||||
|
|
||||||
- The Modified (3-clause) BSD License, which is listed below
|
- The Modified (3-clause) BSD License, which is listed below
|
||||||
|
|
||||||
This license covers the TurboJPEG API library and associated programs, as
|
This license applies to the TurboJPEG API library and associated programs, as
|
||||||
well as the build system.
|
well as the build system. Note that the TurboJPEG API library wraps the
|
||||||
|
libjpeg API library, so in the context of the overall TurboJPEG API library,
|
||||||
- The [zlib License](https://opensource.org/licenses/Zlib)
|
both the terms of the IJG License and the terms of the Modified (3-clause)
|
||||||
|
BSD License apply.
|
||||||
This license is a subset of the other two, and it covers the libjpeg-turbo
|
|
||||||
SIMD extensions.
|
|
||||||
|
|
||||||
|
|
||||||
Complying with the libjpeg-turbo Licenses
|
Complying with the libjpeg-turbo Licenses
|
||||||
=========================================
|
=========================================
|
||||||
|
|
||||||
This section provides a roll-up of the libjpeg-turbo licensing terms, to the
|
This section provides a roll-up of the libjpeg-turbo licensing terms, to the
|
||||||
best of our understanding.
|
best of our understanding. This is not a license in and of itself. It is
|
||||||
|
intended solely for clarification.
|
||||||
|
|
||||||
1. If you are distributing a modified version of the libjpeg-turbo source,
|
1. If you are distributing a modified version of the libjpeg-turbo source,
|
||||||
then:
|
then:
|
||||||
@@ -38,7 +41,7 @@ best of our understanding.
|
|||||||
- Clauses 1 and 3 of the zlib License
|
- Clauses 1 and 3 of the zlib License
|
||||||
|
|
||||||
2. You must add your own copyright notice to the header of each source
|
2. You must add your own copyright notice to the header of each source
|
||||||
file you modified, so others can tell that you modified that file (if
|
file you modified, so others can tell that you modified that file. (If
|
||||||
there is not an existing copyright header in that file, then you can
|
there is not an existing copyright header in that file, then you can
|
||||||
simply add a notice stating that you modified the file.)
|
simply add a notice stating that you modified the file.)
|
||||||
|
|
||||||
@@ -91,7 +94,7 @@ best of our understanding.
|
|||||||
The Modified (3-clause) BSD License
|
The Modified (3-clause) BSD License
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
Copyright (C)2009-2020 D. R. Commander. All Rights Reserved.
|
Copyright (C)2009-2024 D. R. Commander. All Rights Reserved.<br>
|
||||||
Copyright (C)2015 Viktor Szathmáry. All Rights Reserved.
|
Copyright (C)2015 Viktor Szathmáry. All Rights Reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
@@ -119,8 +122,8 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|||||||
POSSIBILITY OF SUCH DAMAGE.
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
Why Three Licenses?
|
Why Two Licenses?
|
||||||
===================
|
=================
|
||||||
|
|
||||||
The zlib License could have been used instead of the Modified (3-clause) BSD
|
The zlib License could have been used instead of the Modified (3-clause) BSD
|
||||||
License, and since the IJG License effectively subsumes the distribution
|
License, and since the IJG License effectively subsumes the distribution
|
||||||
|
|||||||
140
README-turbo.txt
@@ -1,14 +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
|
||||||
AVX2, NEON, AltiVec) to accelerate baseline JPEG compression and decompression
|
baseline JPEG compression and decompression on x86, x86-64, Arm, PowerPC, and
|
||||||
on x86, x86-64, ARM, and PowerPC systems, as well as progressive JPEG
|
MIPS systems, as well as progressive JPEG compression on x86, x86-64, and Arm
|
||||||
compression on x86 and x86-64 systems. On such systems, libjpeg-turbo is
|
systems. On such systems, libjpeg-turbo is generally 2-6x as fast as libjpeg,
|
||||||
generally 2-6x as fast as libjpeg, all else being equal. On other types of
|
all else being equal. On other types of systems, libjpeg-turbo can still
|
||||||
systems, libjpeg-turbo can still outperform libjpeg by a significant amount, by
|
outperform libjpeg by a significant amount, by virtue of its highly-optimized
|
||||||
virtue of its highly-optimized Huffman coding routines. In many cases, the
|
Huffman coding routines. In many cases, the performance of libjpeg-turbo
|
||||||
performance of libjpeg-turbo rivals that of proprietary high-speed JPEG codecs.
|
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
|
||||||
@@ -21,7 +21,26 @@ derivative of libjpeg v6b developed by Miyasaka Masaru. The TigerVNC and
|
|||||||
VirtualGL projects made numerous enhancements to the codec in 2009, and in
|
VirtualGL projects made numerous enhancements to the codec in 2009, and in
|
||||||
early 2010, libjpeg-turbo spun off into an independent project, with the goal
|
early 2010, libjpeg-turbo spun off into an independent project, with the goal
|
||||||
of making high-speed JPEG compression/decompression technology available to a
|
of making high-speed JPEG compression/decompression technology available to a
|
||||||
broader range of users and developers.
|
broader range of users and developers. libjpeg-turbo is an ISO/IEC and ITU-T
|
||||||
|
reference implementation of the JPEG standard.
|
||||||
|
|
||||||
|
More information about libjpeg-turbo can be found at
|
||||||
|
<https://libjpeg-turbo.org>.
|
||||||
|
|
||||||
|
|
||||||
|
Funding
|
||||||
|
=======
|
||||||
|
|
||||||
|
libjpeg-turbo is an independent open source project, but we rely on patronage
|
||||||
|
and funded development in order to maintain that independence. The easiest way
|
||||||
|
to ensure that libjpeg-turbo remains community-focused and free of any one
|
||||||
|
organization's agenda is to
|
||||||
|
[sponsor our project through GitHub](https://github.com/sponsors/libjpeg-turbo).
|
||||||
|
All sponsorship money goes directly toward funding the labor necessary to
|
||||||
|
maintain libjpeg-turbo, support the user community, and implement bug fixes and
|
||||||
|
strategically important features.
|
||||||
|
|
||||||
|
[](https://github.com/sponsors/libjpeg-turbo)
|
||||||
|
|
||||||
|
|
||||||
License
|
License
|
||||||
@@ -52,7 +71,8 @@ JPEG images:
|
|||||||
top of the TurboJPEG API. The TurboJPEG API is recommended for first-time
|
top of the TurboJPEG API. The TurboJPEG API is recommended for first-time
|
||||||
users of libjpeg-turbo. Refer to [tjexample.c](tjexample.c) and
|
users of libjpeg-turbo. Refer to [tjexample.c](tjexample.c) and
|
||||||
[TJExample.java](java/TJExample.java) for examples of its usage and to
|
[TJExample.java](java/TJExample.java) for examples of its usage and to
|
||||||
<http://libjpeg-turbo.org/Documentation/Documentation> for API documentation.
|
<https://libjpeg-turbo.org/Documentation/Documentation> for API
|
||||||
|
documentation.
|
||||||
|
|
||||||
- **libjpeg API**<br>
|
- **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
|
||||||
@@ -135,25 +155,24 @@ without recompiling. libjpeg-turbo does not claim to support all of the
|
|||||||
libjpeg v7+ features, nor to produce identical output to libjpeg v7+ in all
|
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**<br>
|
- **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**<br>
|
- **libjpeg API: In-memory source and destination managers**<br>
|
||||||
See notes below.
|
See notes below.
|
||||||
|
|
||||||
- **cjpeg: Separate quality settings for luminance and chrominance**<br>
|
- **cjpeg: Separate quality settings for luminance and chrominance**<br>
|
||||||
@@ -180,19 +199,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,
|
<https://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**<br>
|
- **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**<br>
|
- **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
|
||||||
@@ -205,7 +224,7 @@ 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**<br>
|
- **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.
|
||||||
|
|
||||||
@@ -246,17 +265,6 @@ programs that need them, without breaking ABI compatibility for programs that
|
|||||||
don't, and it allows those functions to be provided in the "official"
|
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
|
|
||||||
v6b or v7 API can pass an argument of `--without-mem-srcdst` to `configure` or
|
|
||||||
an argument of `-DWITH_MEM_SRCDST=0` to `cmake` prior to building
|
|
||||||
libjpeg-turbo. This will restore the pre-1.3 behavior, in which
|
|
||||||
`jpeg_mem_src()` and `jpeg_mem_dest()` are only included when emulating the
|
|
||||||
libjpeg v8 API/ABI.
|
|
||||||
|
|
||||||
On Un*x systems, including the in-memory source/destination managers changes
|
|
||||||
the dynamic library version from 62.1.0 to 62.2.0 if using libjpeg v6b API/ABI
|
|
||||||
emulation and from 7.1.0 to 7.2.0 if using libjpeg v7 API/ABI emulation.
|
|
||||||
|
|
||||||
Note that, on most Un*x systems, the dynamic linker will not look for a
|
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
|
||||||
is built against libjpeg-turbo 1.3+ and uses `jpeg_mem_src()` or
|
is built against libjpeg-turbo 1.3+ and uses `jpeg_mem_src()` or
|
||||||
@@ -276,29 +284,35 @@ Mathematical Compatibility
|
|||||||
==========================
|
==========================
|
||||||
|
|
||||||
For the most part, libjpeg-turbo should produce identical output to libjpeg
|
For the most part, libjpeg-turbo should produce identical output to libjpeg
|
||||||
v6b. The one exception to this is when using the floating point DCT/IDCT, in
|
v6b. There are two exceptions:
|
||||||
which case the outputs of libjpeg v6b and libjpeg-turbo can differ for the
|
|
||||||
following reasons:
|
|
||||||
|
|
||||||
- The SSE/SSE2 floating point DCT implementation in libjpeg-turbo is ever so
|
1. When decompressing a JPEG image that uses 4:4:0 chrominance subsampling, the
|
||||||
slightly more accurate than the implementation in libjpeg v6b, but not by
|
outputs of libjpeg v6b and libjpeg-turbo can differ because libjpeg-turbo
|
||||||
any amount perceptible to human vision (generally in the range of 0.01 to
|
implements a "fancy" (smooth) 4:4:0 upsampling algorithm and libjpeg did not.
|
||||||
0.08 dB gain in PNSR.)
|
|
||||||
|
|
||||||
- When not using the SIMD extensions, libjpeg-turbo uses the more accurate
|
2. When using the floating point DCT/IDCT, the outputs of libjpeg v6b and
|
||||||
(and slightly faster) floating point IDCT algorithm introduced in libjpeg
|
libjpeg-turbo can differ for the following reasons:
|
||||||
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
|
|
||||||
point IDCT in line with the accuracy of the slow integer IDCT. The floating
|
|
||||||
point DCT/IDCT algorithms are mainly a legacy feature, and they do not
|
|
||||||
produce significantly more accuracy than the slow integer algorithms (to put
|
|
||||||
numbers on this, the typical difference in PNSR between the two algorithms
|
|
||||||
is less than 0.10 dB, whereas changing the quality level by 1 in 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
|
- The SSE/SSE2 floating point DCT implementation in libjpeg-turbo is ever
|
||||||
SIMD instructions on a particular platform, then the accuracy of the
|
so slightly more accurate than the implementation in libjpeg v6b, but not
|
||||||
floating point DCT/IDCT can depend on the compiler settings.
|
by any amount perceptible to human vision (generally in the range of 0.01
|
||||||
|
to 0.08 dB gain in PNSR.)
|
||||||
|
|
||||||
|
- When not using the SIMD extensions, libjpeg-turbo uses the more accurate
|
||||||
|
(and slightly faster) floating point IDCT algorithm introduced in libjpeg
|
||||||
|
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 point IDCT in line with the accuracy of the accurate integer
|
||||||
|
IDCT. The floating point DCT/IDCT algorithms are mainly a legacy
|
||||||
|
feature, and they do not produce significantly more accuracy than the
|
||||||
|
accurate integer algorithms. (To put numbers on this, the typical
|
||||||
|
difference in PNSR between the two algorithms is less than 0.10 dB,
|
||||||
|
whereas changing the quality level by 1 in 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 SIMD instructions on a particular platform, then the accuracy of
|
||||||
|
the floating point DCT/IDCT can depend on the compiler settings.
|
||||||
|
|
||||||
While libjpeg-turbo does emulate the libjpeg v8 API/ABI, under the hood it is
|
While libjpeg-turbo does emulate the libjpeg v8 API/ABI, under the hood it is
|
||||||
still using the same algorithms as libjpeg v6b, so there are several specific
|
still using the same algorithms as libjpeg v6b, so there are several specific
|
||||||
@@ -331,7 +345,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.
|
||||||
|
|
||||||
@@ -342,5 +356,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.
|
||||||
|
|||||||
45
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.txt Sample code for calling the JPEG library.
|
example.c Sample code for calling the JPEG library.
|
||||||
structure.txt Overview of the JPEG library's internal structure.
|
structure.txt Overview of the JPEG library's internal structure.
|
||||||
coderules.txt Coding style rules --- please read if you contribute code.
|
coderules.txt Coding style rules --- please read if you contribute code.
|
||||||
|
|
||||||
@@ -68,17 +68,17 @@ other abrupt features may not compress well with JPEG, and a higher JPEG
|
|||||||
quality may have to be used to avoid visible compression artifacts with such
|
quality may have to be used to avoid visible compression artifacts with such
|
||||||
images.
|
images.
|
||||||
|
|
||||||
JPEG is lossy, meaning that the output pixels are not necessarily identical to
|
JPEG is normally lossy, meaning that the output pixels are not necessarily
|
||||||
the input pixels. However, on photographic content and other "smooth" images,
|
identical to the input pixels. However, on photographic content and other
|
||||||
very good compression ratios can be obtained with no visible compression
|
"smooth" images, very good compression ratios can be obtained with no visible
|
||||||
artifacts, and extremely high compression ratios are possible if you are
|
compression artifacts, and extremely high compression ratios are possible if
|
||||||
willing to sacrifice image quality (by reducing the "quality" setting in the
|
you are willing to sacrifice image quality (by reducing the "quality" setting
|
||||||
compressor.)
|
in the compressor.)
|
||||||
|
|
||||||
This software implements JPEG baseline, extended-sequential, and progressive
|
This software implements JPEG baseline, extended-sequential, progressive, and
|
||||||
compression processes. Provision is made for supporting all variants of these
|
lossless compression processes. Provision is made for supporting all variants
|
||||||
processes, although some uncommon parameter settings aren't implemented yet.
|
of these processes, although some uncommon parameter settings aren't
|
||||||
We have made no provision for supporting the hierarchical or lossless
|
implemented yet. We have made no provision for supporting the hierarchical
|
||||||
processes defined in the standard.
|
processes defined in the standard.
|
||||||
|
|
||||||
We provide a set of library routines for reading and writing JPEG image files,
|
We provide a set of library routines for reading and writing JPEG image files,
|
||||||
@@ -89,9 +89,9 @@ The library is intended to be reused in other applications.
|
|||||||
In order to support file conversion and viewing software, we have included
|
In order to support file conversion and viewing software, we have included
|
||||||
considerable functionality beyond the bare JPEG coding/decoding capability;
|
considerable functionality beyond the bare JPEG coding/decoding capability;
|
||||||
for example, the color quantization modules are not strictly part of JPEG
|
for example, the color quantization modules are not strictly part of JPEG
|
||||||
decoding, but they are essential for output to colormapped file formats or
|
decoding, but they are essential for output to colormapped file formats. These
|
||||||
colormapped displays. These extra functions can be compiled out of the
|
extra functions can be compiled out of the library if not required for a
|
||||||
library if not required for a particular application.
|
particular application.
|
||||||
|
|
||||||
We have also included "jpegtran", a utility for lossless transcoding between
|
We have also included "jpegtran", a utility for lossless transcoding between
|
||||||
different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple
|
different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple
|
||||||
@@ -128,7 +128,7 @@ with respect to this software, its quality, accuracy, merchantability, or
|
|||||||
fitness for a particular purpose. This software is provided "AS IS", and you,
|
fitness for a particular purpose. This software is provided "AS IS", and you,
|
||||||
its user, assume the entire risk as to its quality and accuracy.
|
its user, assume the entire risk as to its quality and accuracy.
|
||||||
|
|
||||||
This software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding.
|
This software is copyright (C) 1991-2020, Thomas G. Lane, Guido Vollbeding.
|
||||||
All Rights Reserved except as specified below.
|
All Rights Reserved except as specified below.
|
||||||
|
|
||||||
Permission is hereby granted to use, copy, modify, and distribute this
|
Permission is hereby granted to use, copy, modify, and distribute this
|
||||||
@@ -159,19 +159,6 @@ commercial products, provided that all warranty or liability claims are
|
|||||||
assumed by the product vendor.
|
assumed by the product vendor.
|
||||||
|
|
||||||
|
|
||||||
The IJG distribution formerly included code to read and write GIF files.
|
|
||||||
To avoid entanglement with the Unisys LZW patent (now expired), GIF reading
|
|
||||||
support has been removed altogether, and the GIF writer has been simplified
|
|
||||||
to produce "uncompressed GIFs". This technique does not use the LZW
|
|
||||||
algorithm; the resulting GIF files are larger than usual, but are readable
|
|
||||||
by all standard GIF decoders.
|
|
||||||
|
|
||||||
We are required to state that
|
|
||||||
"The Graphics Interchange Format(c) is the Copyright property of
|
|
||||||
CompuServe Incorporated. GIF(sm) is a Service Mark property of
|
|
||||||
CompuServe Incorporated."
|
|
||||||
|
|
||||||
|
|
||||||
REFERENCES
|
REFERENCES
|
||||||
==========
|
==========
|
||||||
|
|
||||||
@@ -254,7 +241,7 @@ This software implements ITU T.81 | ISO/IEC 10918 with some extensions from
|
|||||||
ITU T.871 | ISO/IEC 10918-5 (JPEG File Interchange Format-- see REFERENCES).
|
ITU T.871 | ISO/IEC 10918-5 (JPEG File Interchange Format-- see REFERENCES).
|
||||||
Informally, the term "JPEG image" or "JPEG file" most often refers to JFIF or
|
Informally, the term "JPEG image" or "JPEG file" most often refers to JFIF or
|
||||||
a subset thereof, but there are other formats containing the name "JPEG" that
|
a subset thereof, but there are other formats containing the name "JPEG" that
|
||||||
are incompatible with the DCT-based JPEG standard or with JFIF (for instance,
|
are incompatible with the original JPEG standard or with JFIF (for instance,
|
||||||
JPEG 2000 and JPEG XR). This software therefore does not support these
|
JPEG 2000 and JPEG XR). This software therefore does not support these
|
||||||
formats. Indeed, one of the original reasons for developing this free software
|
formats. Indeed, one of the original reasons for developing this free software
|
||||||
was to help force convergence on a common, interoperable format standard for
|
was to help force convergence on a common, interoperable format standard for
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Mozilla JPEG Encoder Project [](https://ci.appveyor.com/project/kornel/mozjpeg-4ekrx)
|
Mozilla JPEG Encoder Project [](https://ci.appveyor.com/project/kornel/mozjpeg-4ekrx)
|
||||||
============================
|
============================
|
||||||
|
|
||||||
MozJPEG improves JPEG compression efficiency achieving higher visual quality and smaller file sizes at the same time. It is compatible the JPEG standard, and the vast majority of the world's deployed JPEG decoders.
|
MozJPEG improves JPEG compression efficiency achieving higher visual quality and smaller file sizes at the same time. It is compatible with the JPEG standard, and the vast majority of the world's deployed JPEG decoders.
|
||||||
|
|
||||||
MozJPEG is a patch for [libjpeg-turbo](https://github.com/libjpeg-turbo/libjpeg-turbo). **Please send pull requests to libjpeg-turbo** if the changes aren't specific to newly-added MozJPEG-only compression code. This project aims to keep differences with libjpeg-turbo minimal, so whenever possible, improvements and bug fixes should go there first.
|
MozJPEG is a patch for [libjpeg-turbo](https://github.com/libjpeg-turbo/libjpeg-turbo). **Please send pull requests to libjpeg-turbo** if the changes aren't specific to newly-added MozJPEG-only compression code. This project aims to keep differences with libjpeg-turbo minimal, so whenever possible, improvements and bug fixes should go there first.
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
image: Visual Studio 2017
|
image: Visual Studio 2019
|
||||||
configuration: Release
|
configuration: Release
|
||||||
platform:
|
platform:
|
||||||
- Win32
|
- Win32
|
||||||
|
|||||||
45
cderror.h
@@ -1,9 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* cderror.h
|
* cderror.h
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1997, Thomas G. Lane.
|
* Copyright (C) 1994-1997, Thomas G. Lane.
|
||||||
* Modified 2009-2017 by Guido Vollbeding.
|
* Modified 2009-2017 by Guido Vollbeding.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* libjpeg-turbo Modifications:
|
||||||
|
* Copyright (C) 2021, 2024, 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.
|
||||||
*
|
*
|
||||||
@@ -40,9 +42,8 @@ typedef enum {
|
|||||||
|
|
||||||
JMESSAGE(JMSG_FIRSTADDONCODE = 1000, NULL) /* Must be first entry! */
|
JMESSAGE(JMSG_FIRSTADDONCODE = 1000, NULL) /* Must be first entry! */
|
||||||
|
|
||||||
#ifdef BMP_SUPPORTED
|
|
||||||
JMESSAGE(JERR_BMP_BADCMAP, "Unsupported BMP colormap format")
|
JMESSAGE(JERR_BMP_BADCMAP, "Unsupported BMP colormap format")
|
||||||
JMESSAGE(JERR_BMP_BADDEPTH, "Only 8- and 24-bit BMP files are supported")
|
JMESSAGE(JERR_BMP_BADDEPTH, "Only 8-, 24-, and 32-bit BMP files are supported")
|
||||||
JMESSAGE(JERR_BMP_BADHEADER, "Invalid BMP file: bad header length")
|
JMESSAGE(JERR_BMP_BADHEADER, "Invalid BMP file: bad header length")
|
||||||
JMESSAGE(JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1")
|
JMESSAGE(JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1")
|
||||||
JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB")
|
JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB")
|
||||||
@@ -50,16 +51,15 @@ JMESSAGE(JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported")
|
|||||||
JMESSAGE(JERR_BMP_EMPTY, "Empty BMP image")
|
JMESSAGE(JERR_BMP_EMPTY, "Empty BMP image")
|
||||||
JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM")
|
JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM")
|
||||||
JMESSAGE(JERR_BMP_OUTOFRANGE, "Numeric value out of range in BMP file")
|
JMESSAGE(JERR_BMP_OUTOFRANGE, "Numeric value out of range in BMP file")
|
||||||
JMESSAGE(JTRC_BMP, "%ux%u 24-bit BMP image")
|
JMESSAGE(JTRC_BMP, "%ux%u %d-bit BMP image")
|
||||||
JMESSAGE(JTRC_BMP_MAPPED, "%ux%u 8-bit colormapped BMP image")
|
JMESSAGE(JTRC_BMP_MAPPED, "%ux%u 8-bit colormapped BMP image")
|
||||||
JMESSAGE(JTRC_BMP_OS2, "%ux%u 24-bit OS2 BMP image")
|
JMESSAGE(JTRC_BMP_OS2, "%ux%u %d-bit OS2 BMP image")
|
||||||
JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image")
|
JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image")
|
||||||
#endif /* BMP_SUPPORTED */
|
|
||||||
|
|
||||||
#ifdef GIF_SUPPORTED
|
|
||||||
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")
|
||||||
@@ -71,46 +71,23 @@ JMESSAGE(JWRN_GIF_BADDATA, "Corrupt data in GIF file")
|
|||||||
JMESSAGE(JWRN_GIF_CHAR, "Bogus char 0x%02x in GIF file, ignoring")
|
JMESSAGE(JWRN_GIF_CHAR, "Bogus char 0x%02x in GIF file, ignoring")
|
||||||
JMESSAGE(JWRN_GIF_ENDCODE, "Premature end of GIF image")
|
JMESSAGE(JWRN_GIF_ENDCODE, "Premature end of GIF image")
|
||||||
JMESSAGE(JWRN_GIF_NOMOREDATA, "Ran out of GIF bits")
|
JMESSAGE(JWRN_GIF_NOMOREDATA, "Ran out of GIF bits")
|
||||||
#endif /* GIF_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_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(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 (maximum color value = %u)")
|
||||||
JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image")
|
JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image (maximum color value = %u)")
|
||||||
JMESSAGE(JTRC_PPM, "%ux%u PPM image")
|
JMESSAGE(JTRC_PPM, "%ux%u PPM image (maximum color value = %u)")
|
||||||
JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image")
|
JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image (maximum color value = %u)")
|
||||||
#endif /* PPM_SUPPORTED */
|
|
||||||
|
|
||||||
#ifdef RLE_SUPPORTED
|
|
||||||
JMESSAGE(JERR_RLE_BADERROR, "Bogus error code from RLE library")
|
|
||||||
JMESSAGE(JERR_RLE_COLORSPACE, "RLE output must be grayscale or RGB")
|
|
||||||
JMESSAGE(JERR_RLE_DIMENSIONS, "Image dimensions (%ux%u) too large for RLE")
|
|
||||||
JMESSAGE(JERR_RLE_EMPTY, "Empty RLE file")
|
|
||||||
JMESSAGE(JERR_RLE_EOF, "Premature EOF in RLE header")
|
|
||||||
JMESSAGE(JERR_RLE_MEM, "Insufficient memory for RLE header")
|
|
||||||
JMESSAGE(JERR_RLE_NOT, "Not an RLE file")
|
|
||||||
JMESSAGE(JERR_RLE_TOOMANYCHANNELS, "Cannot handle %d output channels for RLE")
|
|
||||||
JMESSAGE(JERR_RLE_UNSUPPORTED, "Cannot handle this RLE setup")
|
|
||||||
JMESSAGE(JTRC_RLE, "%ux%u full-color RLE file")
|
|
||||||
JMESSAGE(JTRC_RLE_FULLMAP, "%ux%u full-color RLE file with map of length %d")
|
|
||||||
JMESSAGE(JTRC_RLE_GRAY, "%ux%u grayscale RLE file")
|
|
||||||
JMESSAGE(JTRC_RLE_MAPGRAY, "%ux%u grayscale RLE file with map of length %d")
|
|
||||||
JMESSAGE(JTRC_RLE_MAPPED, "%ux%u colormapped RLE file with map of length %d")
|
|
||||||
#endif /* RLE_SUPPORTED */
|
|
||||||
|
|
||||||
#ifdef TARGA_SUPPORTED
|
|
||||||
JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format")
|
JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format")
|
||||||
JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file")
|
JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file")
|
||||||
JMESSAGE(JERR_TGA_COLORSPACE, "Targa output must be grayscale or RGB")
|
JMESSAGE(JERR_TGA_COLORSPACE, "Targa output must be grayscale or RGB")
|
||||||
JMESSAGE(JTRC_TGA, "%ux%u RGB Targa image")
|
JMESSAGE(JTRC_TGA, "%ux%u RGB Targa image")
|
||||||
JMESSAGE(JTRC_TGA_GRAY, "%ux%u grayscale Targa image")
|
JMESSAGE(JTRC_TGA_GRAY, "%ux%u grayscale Targa image")
|
||||||
JMESSAGE(JTRC_TGA_MAPPED, "%ux%u colormapped Targa image")
|
JMESSAGE(JTRC_TGA_MAPPED, "%ux%u colormapped Targa image")
|
||||||
#else
|
|
||||||
JMESSAGE(JERR_TGA_NOTCOMP, "Targa support was not compiled")
|
JMESSAGE(JERR_TGA_NOTCOMP, "Targa support was not compiled")
|
||||||
#endif /* TARGA_SUPPORTED */
|
|
||||||
|
|
||||||
JMESSAGE(JERR_BAD_CMAP_FILE,
|
JMESSAGE(JERR_BAD_CMAP_FILE,
|
||||||
"Color map file is invalid or of unsupported format")
|
"Color map file is invalid or of unsupported format")
|
||||||
|
|||||||
47
cdjpeg.c
@@ -3,8 +3,8 @@
|
|||||||
*
|
*
|
||||||
* This file was part of the Independent JPEG Group's software:
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
* It was modified by The libjpeg-turbo Project to include only code relevant
|
* libjpeg-turbo Modifications:
|
||||||
* to libjpeg-turbo.
|
* Copyright (C) 2019, 2022, D. R. Commander.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
* file.
|
* file.
|
||||||
*
|
*
|
||||||
@@ -25,26 +25,37 @@
|
|||||||
* Optional progress monitor: display a percent-done figure on stderr.
|
* Optional progress monitor: display a percent-done figure on stderr.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
|
||||||
|
|
||||||
METHODDEF(void)
|
METHODDEF(void)
|
||||||
progress_monitor(j_common_ptr cinfo)
|
progress_monitor(j_common_ptr cinfo)
|
||||||
{
|
{
|
||||||
cd_progress_ptr prog = (cd_progress_ptr)cinfo->progress;
|
cd_progress_ptr prog = (cd_progress_ptr)cinfo->progress;
|
||||||
int total_passes = prog->pub.total_passes + prog->total_extra_passes;
|
|
||||||
int percent_done =
|
|
||||||
(int)(prog->pub.pass_counter * 100L / prog->pub.pass_limit);
|
|
||||||
|
|
||||||
if (percent_done != prog->percent_done) {
|
if (prog->max_scans != 0 && cinfo->is_decompressor) {
|
||||||
prog->percent_done = percent_done;
|
int scan_no = ((j_decompress_ptr)cinfo)->input_scan_number;
|
||||||
if (total_passes > 1) {
|
|
||||||
fprintf(stderr, "\rPass %d/%d: %3d%% ",
|
if (scan_no > (int)prog->max_scans) {
|
||||||
prog->pub.completed_passes + prog->completed_extra_passes + 1,
|
fprintf(stderr, "Scan number %d exceeds maximum scans (%u)\n", scan_no,
|
||||||
total_passes, percent_done);
|
prog->max_scans);
|
||||||
} else {
|
exit(EXIT_FAILURE);
|
||||||
fprintf(stderr, "\r %3d%% ", percent_done);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prog->report) {
|
||||||
|
int total_passes = prog->pub.total_passes + prog->total_extra_passes;
|
||||||
|
int percent_done =
|
||||||
|
(int)(prog->pub.pass_counter * 100L / prog->pub.pass_limit);
|
||||||
|
|
||||||
|
if (percent_done != prog->percent_done) {
|
||||||
|
prog->percent_done = percent_done;
|
||||||
|
if (total_passes > 1) {
|
||||||
|
fprintf(stderr, "\rPass %d/%d: %3d%% ",
|
||||||
|
prog->pub.completed_passes + prog->completed_extra_passes + 1,
|
||||||
|
total_passes, percent_done);
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "\r %3d%% ", percent_done);
|
||||||
|
}
|
||||||
|
fflush(stderr);
|
||||||
}
|
}
|
||||||
fflush(stderr);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,6 +68,8 @@ start_progress_monitor(j_common_ptr cinfo, cd_progress_ptr progress)
|
|||||||
progress->pub.progress_monitor = progress_monitor;
|
progress->pub.progress_monitor = progress_monitor;
|
||||||
progress->completed_extra_passes = 0;
|
progress->completed_extra_passes = 0;
|
||||||
progress->total_extra_passes = 0;
|
progress->total_extra_passes = 0;
|
||||||
|
progress->max_scans = 0;
|
||||||
|
progress->report = FALSE;
|
||||||
progress->percent_done = -1;
|
progress->percent_done = -1;
|
||||||
cinfo->progress = &progress->pub;
|
cinfo->progress = &progress->pub;
|
||||||
}
|
}
|
||||||
@@ -73,8 +86,6 @@ end_progress_monitor(j_common_ptr cinfo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Case-insensitive matching of possibly-abbreviated keyword switches.
|
* Case-insensitive matching of possibly-abbreviated keyword switches.
|
||||||
|
|||||||
54
cdjpeg.h
@@ -3,11 +3,12 @@
|
|||||||
*
|
*
|
||||||
* This file was part of the Independent JPEG Group's software:
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1994-1997, Thomas G. Lane.
|
* Copyright (C) 1994-1997, Thomas G. Lane.
|
||||||
|
* Modified 2019 by Guido Vollbeding.
|
||||||
* libjpeg-turbo Modifications:
|
* libjpeg-turbo Modifications:
|
||||||
* Copyright (C) 2017, D. R. Commander.
|
* Copyright (C) 2017, 2019, 2021-2022, D. R. Commander.
|
||||||
* mozjpeg Modifications:
|
|
||||||
* Copyright (C) 2014, Mozilla Corporation.
|
* Copyright (C) 2014, Mozilla Corporation.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg file.
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
|
* file.
|
||||||
*
|
*
|
||||||
* This file contains common declarations for the sample applications
|
* This file contains common declarations for the sample applications
|
||||||
* cjpeg and djpeg. It is NOT used by the core JPEG library.
|
* cjpeg and djpeg. It is NOT used by the core JPEG library.
|
||||||
@@ -36,8 +37,12 @@ struct cjpeg_source_struct {
|
|||||||
FILE *input_file;
|
FILE *input_file;
|
||||||
|
|
||||||
JSAMPARRAY buffer;
|
JSAMPARRAY buffer;
|
||||||
|
J12SAMPARRAY buffer12;
|
||||||
|
#ifdef C_LOSSLESS_SUPPORTED
|
||||||
|
J16SAMPARRAY buffer16;
|
||||||
|
#endif
|
||||||
JDIMENSION buffer_height;
|
JDIMENSION buffer_height;
|
||||||
|
JDIMENSION max_pixels;
|
||||||
#if JPEG_RAW_READER
|
#if JPEG_RAW_READER
|
||||||
// For reading JPEG
|
// For reading JPEG
|
||||||
JSAMPARRAY plane_pointer[4];
|
JSAMPARRAY plane_pointer[4];
|
||||||
@@ -65,9 +70,9 @@ struct djpeg_dest_struct {
|
|||||||
void (*finish_output) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo);
|
void (*finish_output) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo);
|
||||||
/* Re-calculate buffer dimensions based on output dimensions (for use with
|
/* Re-calculate buffer dimensions based on output dimensions (for use with
|
||||||
partial image decompression.) If this is NULL, then the output format
|
partial image decompression.) If this is NULL, then the output format
|
||||||
does not support partial image decompression (BMP and RLE, in particular,
|
does not support partial image decompression (BMP, in particular, cannot
|
||||||
cannot support partial decompression because they use an inversion buffer
|
support partial decompression because it uses an inversion buffer to write
|
||||||
to write the image in bottom-up order.) */
|
the image in bottom-up order.) */
|
||||||
void (*calc_buffer_dimensions) (j_decompress_ptr cinfo,
|
void (*calc_buffer_dimensions) (j_decompress_ptr cinfo,
|
||||||
djpeg_dest_ptr dinfo);
|
djpeg_dest_ptr dinfo);
|
||||||
|
|
||||||
@@ -80,6 +85,10 @@ struct djpeg_dest_struct {
|
|||||||
* height is buffer_height.
|
* height is buffer_height.
|
||||||
*/
|
*/
|
||||||
JSAMPARRAY buffer;
|
JSAMPARRAY buffer;
|
||||||
|
J12SAMPARRAY buffer12;
|
||||||
|
#ifdef D_LOSSLESS_SUPPORTED
|
||||||
|
J16SAMPARRAY buffer16;
|
||||||
|
#endif
|
||||||
JDIMENSION buffer_height;
|
JDIMENSION buffer_height;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -96,6 +105,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;
|
||||||
};
|
};
|
||||||
@@ -112,32 +124,45 @@ EXTERN(cjpeg_source_ptr) jinit_read_bmp(j_compress_ptr cinfo,
|
|||||||
EXTERN(djpeg_dest_ptr) jinit_write_bmp(j_decompress_ptr cinfo, boolean is_os2,
|
EXTERN(djpeg_dest_ptr) jinit_write_bmp(j_decompress_ptr cinfo, boolean is_os2,
|
||||||
boolean use_inversion_array);
|
boolean use_inversion_array);
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_gif(j_compress_ptr cinfo);
|
EXTERN(cjpeg_source_ptr) jinit_read_gif(j_compress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_gif(j_decompress_ptr cinfo);
|
EXTERN(cjpeg_source_ptr) j12init_read_gif(j_compress_ptr cinfo);
|
||||||
|
#ifdef C_LOSSLESS_SUPPORTED
|
||||||
|
EXTERN(cjpeg_source_ptr) j16init_read_gif(j_compress_ptr cinfo);
|
||||||
|
#endif
|
||||||
|
EXTERN(djpeg_dest_ptr) jinit_write_gif(j_decompress_ptr cinfo, boolean is_lzw);
|
||||||
|
EXTERN(djpeg_dest_ptr) j12init_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(cjpeg_source_ptr) j12init_read_ppm(j_compress_ptr cinfo);
|
||||||
|
#ifdef C_LOSSLESS_SUPPORTED
|
||||||
|
EXTERN(cjpeg_source_ptr) j16init_read_ppm(j_compress_ptr cinfo);
|
||||||
|
#endif
|
||||||
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) j12init_write_ppm(j_decompress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_rle(j_decompress_ptr cinfo);
|
#ifdef D_LOSSLESS_SUPPORTED
|
||||||
|
EXTERN(djpeg_dest_ptr) j16init_write_ppm(j_decompress_ptr cinfo);
|
||||||
|
#endif
|
||||||
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);
|
||||||
|
|
||||||
/* cjpeg support routines (in rdswitch.c) */
|
/* cjpeg support routines (in rdswitch.c) */
|
||||||
|
|
||||||
EXTERN(boolean) read_quant_tables(j_compress_ptr cinfo, char *filename,
|
EXTERN(boolean) read_quant_tables(j_compress_ptr cinfo, char *filename,
|
||||||
boolean force_baseline);
|
boolean force_baseline);
|
||||||
EXTERN(boolean) read_scan_script(j_compress_ptr cinfo, char *filename);
|
EXTERN(boolean) read_scan_script(j_compress_ptr cinfo, char *filename);
|
||||||
EXTERN(boolean) set_quality_ratings(j_compress_ptr cinfo, char *arg,
|
EXTERN(boolean) set_quality_ratings(j_compress_ptr cinfo, char *arg,
|
||||||
boolean force_baseline);
|
boolean force_baseline);
|
||||||
EXTERN(boolean) set_quant_slots(j_compress_ptr cinfo, char *arg);
|
EXTERN(boolean) set_quant_slots(j_compress_ptr cinfo, char *arg);
|
||||||
EXTERN(boolean) set_sample_factors(j_compress_ptr cinfo, char *arg);
|
EXTERN(boolean) set_sample_factors(j_compress_ptr cinfo, char *arg);
|
||||||
|
|
||||||
/* djpeg support routines (in rdcolmap.c) */
|
/* djpeg support routines (in rdcolmap.c) */
|
||||||
|
|
||||||
EXTERN(void) read_color_map(j_decompress_ptr cinfo, FILE *infile);
|
EXTERN(void) read_color_map(j_decompress_ptr cinfo, FILE *infile);
|
||||||
|
EXTERN(void) read_color_map_12(j_decompress_ptr cinfo, FILE *infile);
|
||||||
|
|
||||||
/* common support routines (in cdjpeg.c) */
|
/* common support routines (in cdjpeg.c) */
|
||||||
|
|
||||||
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);
|
||||||
EXTERN(boolean) keymatch(char *arg, const char *keyword, int minchars);
|
EXTERN(boolean) keymatch(char *arg, const char *keyword, int minchars);
|
||||||
EXTERN(FILE *) read_stdin(void);
|
EXTERN(FILE *) read_stdin(void);
|
||||||
@@ -162,6 +187,3 @@ 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
|
||||||
|
|||||||
150
cjpeg.1
@@ -1,4 +1,4 @@
|
|||||||
.TH CJPEG 1 "4 November 2020"
|
.TH CJPEG 1 "30 August 2024"
|
||||||
.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,8 @@ 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 [legacy feature], and Targa
|
||||||
Toolkit format). (RLE is supported only if the URT library is available.)
|
[legacy feature].
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
All switch names may be abbreviated; for example,
|
All switch names may be abbreviated; for example,
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
@@ -30,7 +30,7 @@ Upper and lower case are equivalent (thus
|
|||||||
.B \-BMP
|
.B \-BMP
|
||||||
is the same as
|
is the same as
|
||||||
.BR \-bmp ).
|
.BR \-bmp ).
|
||||||
British spellings are also accepted (e.g.,
|
British spellings are also accepted (e.g.
|
||||||
.BR \-greyscale ),
|
.BR \-greyscale ),
|
||||||
though for brevity these are not mentioned below.
|
though for brevity these are not mentioned below.
|
||||||
.PP
|
.PP
|
||||||
@@ -41,17 +41,12 @@ 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 specifying
|
||||||
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
|
||||||
.B \-rgb
|
.B \-rgb
|
||||||
Create RGB JPEG file.
|
Create RGB JPEG file. Using this switch suppresses the conversion from RGB
|
||||||
Using this switch suppresses the conversion from RGB
|
|
||||||
colorspace input to the default YCbCr JPEG colorspace.
|
colorspace input to the default YCbCr JPEG colorspace.
|
||||||
.TP
|
.TP
|
||||||
.B \-optimize
|
.B \-optimize
|
||||||
@@ -65,18 +60,22 @@ decompression are unaffected by
|
|||||||
.BR \-optimize .
|
.BR \-optimize .
|
||||||
.TP
|
.TP
|
||||||
.B \-progressive
|
.B \-progressive
|
||||||
Create progressive JPEG file (see below).
|
Create progressive JPEG file (see below). Implies
|
||||||
|
.B \-optimize
|
||||||
|
unless
|
||||||
|
.B \-arithmetic
|
||||||
|
is also specified.
|
||||||
.TP
|
.TP
|
||||||
.B \-targa
|
.B \-targa
|
||||||
Input file is Targa format. Targa files that contain an "identification"
|
Input file is Targa format [legacy feature]. Targa files that contain an
|
||||||
field will not be automatically recognized by
|
"identification" field will not be automatically recognized by
|
||||||
.BR cjpeg ;
|
.BR cjpeg .
|
||||||
for such files you must specify
|
For such files, you must specify
|
||||||
.B \-targa
|
.B \-targa
|
||||||
to make
|
to make
|
||||||
.B cjpeg
|
.B cjpeg
|
||||||
treat the input as Targa format.
|
treat the input as Targa format. For most Targa files, you won't need this
|
||||||
For most Targa files, you won't need this switch.
|
switch.
|
||||||
.PP
|
.PP
|
||||||
The
|
The
|
||||||
.B \-quality
|
.B \-quality
|
||||||
@@ -154,11 +153,82 @@ about the same --- often a little smaller.
|
|||||||
.PP
|
.PP
|
||||||
Switches for advanced users:
|
Switches for advanced users:
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-precision " N"
|
||||||
|
Create JPEG file with N-bit data precision. N is 8, 12, or 16; default is 8.
|
||||||
|
If N is 16, then
|
||||||
|
.B -lossless
|
||||||
|
must also be specified. Note that only the PBMPLUS input file format supports
|
||||||
|
data precisions other than 8. (For historical reasons,
|
||||||
|
.B cjpeg
|
||||||
|
allows GIF input files to be converted into 12-bit-per-sample JPEG files, but
|
||||||
|
this is not a useful conversion.) Note also that PBMPLUS input files are
|
||||||
|
silently scaled to the target data precision, even if it is lower than the
|
||||||
|
precision of the input file. Passing an argument of
|
||||||
|
.B \-verbose
|
||||||
|
to
|
||||||
|
.B cjpeg
|
||||||
|
will cause it to print information about the precision of the input file.
|
||||||
|
.B Caution:
|
||||||
|
12-bit and 16-bit data precision is not yet widely implemented, so many
|
||||||
|
decoders will be unable to handle a 12-bit-per-sample or 16-bit-per-sample JPEG
|
||||||
|
file at all.
|
||||||
|
.IP
|
||||||
|
.B \-precision\ 12
|
||||||
|
implies
|
||||||
|
.B \-optimize
|
||||||
|
unless
|
||||||
|
.B \-arithmetic
|
||||||
|
is also specified.
|
||||||
|
.TP
|
||||||
|
.BI \-lossless " psv[,Pt]"
|
||||||
|
Create a lossless JPEG file using the specified predictor selection value
|
||||||
|
(1 through 7) and optional point transform (0 through
|
||||||
|
.nh
|
||||||
|
.I precision
|
||||||
|
.hy
|
||||||
|
- 1, where
|
||||||
|
.nh
|
||||||
|
.I precision
|
||||||
|
.hy
|
||||||
|
is the JPEG data precision in bits). A point transform value of 0 (the
|
||||||
|
default) is necessary in order to create a fully lossless JPEG file. (A
|
||||||
|
non-zero point transform value right-shifts the input samples by the specified
|
||||||
|
number of bits, which is effectively a form of lossy color quantization.)
|
||||||
|
.B Caution:
|
||||||
|
lossless JPEG is not yet widely implemented, so many decoders will be unable to
|
||||||
|
handle a lossless JPEG file at all. In most cases, compressing and
|
||||||
|
decompressing a lossless JPEG file is considerably slower than compressing and
|
||||||
|
decompressing a lossy JPEG file, and lossless JPEG files are much larger than
|
||||||
|
lossy JPEG files. Also note that the following features will be unavailable
|
||||||
|
when compressing or decompressing a lossless JPEG file:
|
||||||
|
.IP
|
||||||
|
- Quality/quantization table selection
|
||||||
|
.IP
|
||||||
|
- Color space conversion (the JPEG image will use the same color space as the
|
||||||
|
input image)
|
||||||
|
.IP
|
||||||
|
- Color quantization
|
||||||
|
.IP
|
||||||
|
- DCT/IDCT algorithm selection
|
||||||
|
.IP
|
||||||
|
- Smoothing
|
||||||
|
.IP
|
||||||
|
- Downsampling/upsampling
|
||||||
|
.IP
|
||||||
|
- IDCT scaling
|
||||||
|
.IP
|
||||||
|
- Partial image decompression
|
||||||
|
.IP
|
||||||
|
- Transformations using
|
||||||
|
.B jpegtran
|
||||||
|
.IP
|
||||||
|
Any switches used to enable or configure those features will be ignored.
|
||||||
|
.TP
|
||||||
.B \-arithmetic
|
.B \-arithmetic
|
||||||
Use arithmetic coding.
|
Use arithmetic coding.
|
||||||
.B Caution:
|
.B Caution:
|
||||||
arithmetic coded JPEG is not yet widely implemented, so many decoders will be
|
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 handle an arithmetic-coded JPEG file at all.
|
||||||
.TP
|
.TP
|
||||||
.B \-dct int
|
.B \-dct int
|
||||||
Use accurate integer DCT method (default).
|
Use accurate integer DCT method (default).
|
||||||
@@ -200,8 +270,18 @@ machines.
|
|||||||
Embed ICC color management profile contained in the specified 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 MCUs if "B" is attached
|
||||||
attached to the number.
|
to the number.
|
||||||
|
.IP
|
||||||
|
In typical JPEG images, an MCU (Minimum Coded Unit) is the minimum set of
|
||||||
|
interleaved "data units" (8x8 DCT blocks if the image is lossy or samples if
|
||||||
|
the image is lossless) necessary to represent at least one data unit per
|
||||||
|
component. (For example, an MCU in an interleaved lossy JPEG image that uses
|
||||||
|
4:2:2 subsampling consists of two luminance blocks followed by one block for
|
||||||
|
each chrominance component.) In single-component or non-interleaved JPEG
|
||||||
|
images, an MCU is the same as a data unit. An MCU row is a row of MCUs
|
||||||
|
spanning the entire width of the image.
|
||||||
|
.IP
|
||||||
.B \-restart 0
|
.B \-restart 0
|
||||||
(the default) means no restart markers.
|
(the default) means no restart markers.
|
||||||
.TP
|
.TP
|
||||||
@@ -224,6 +304,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
|
||||||
@@ -293,10 +381,10 @@ This example compresses the PPM file foo.ppm with a quality factor of
|
|||||||
.I foo.jpg
|
.I foo.jpg
|
||||||
.SH HINTS
|
.SH HINTS
|
||||||
Color GIF files are not the ideal input for JPEG; JPEG is really intended for
|
Color GIF files are not the ideal input for JPEG; JPEG is really intended for
|
||||||
compressing full-color (24-bit) images. In particular, don't try to convert
|
compressing full-color (24-bit through 48-bit) images. In particular, don't
|
||||||
cartoons, line drawings, and other images that have only a few distinct
|
try to convert cartoons, line drawings, and other images that have only a few
|
||||||
colors. GIF works great on these, JPEG does not. If you want to convert a
|
distinct colors. GIF works great on these; JPEG does not. If you want to
|
||||||
GIF to JPEG, you should experiment with
|
convert a GIF to JPEG, you should experiment with
|
||||||
.BR cjpeg 's
|
.BR cjpeg 's
|
||||||
.B \-quality
|
.B \-quality
|
||||||
and
|
and
|
||||||
@@ -350,14 +438,4 @@ 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
|
|
||||||
The
|
|
||||||
.B \-targa
|
|
||||||
switch is not a bug, it's a feature. (It would be a bug if the Targa format
|
|
||||||
designers had not been clueless.)
|
|
||||||
|
|||||||
278
cjpeg.c
@@ -4,11 +4,13 @@
|
|||||||
* This file was part of the Independent JPEG Group's software:
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1998, Thomas G. Lane.
|
* Copyright (C) 1991-1998, Thomas G. Lane.
|
||||||
* Modified 2003-2011 by Guido Vollbeding.
|
* Modified 2003-2011 by Guido Vollbeding.
|
||||||
|
* Lossless JPEG Modifications:
|
||||||
|
* Copyright (C) 1999, Ken Murchison.
|
||||||
* libjpeg-turbo Modifications:
|
* libjpeg-turbo Modifications:
|
||||||
* Copyright (C) 2010, 2013-2014, 2017, 2020, D. R. Commander.
|
* Copyright (C) 2010, 2013-2014, 2017, 2019-2022, 2024, D. R. Commander.
|
||||||
* mozjpeg Modifications:
|
|
||||||
* Copyright (C) 2014, Mozilla Corporation.
|
* Copyright (C) 2014, Mozilla Corporation.
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
|
* file.
|
||||||
*
|
*
|
||||||
* This file contains a command-line user interface for the JPEG compressor.
|
* This file contains a command-line user interface for the JPEG compressor.
|
||||||
* It should work on any system with Unix- or MS-DOS-style command lines.
|
* It should work on any system with Unix- or MS-DOS-style command lines.
|
||||||
@@ -28,25 +30,17 @@
|
|||||||
* works regardless of which command line style is used.
|
* works regardless of which command line style is used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
#define JPEG_INTERNALS
|
||||||
|
#endif
|
||||||
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
||||||
#include "jversion.h" /* for version message */
|
#include "jversion.h" /* for version message */
|
||||||
#include "jconfigint.h"
|
#include "jconfigint.h"
|
||||||
|
|
||||||
#ifndef HAVE_STDLIB_H /* <stdlib.h> should declare malloc(),free() */
|
|
||||||
extern void *malloc(size_t size);
|
|
||||||
extern void free(void *ptr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_CCOMMAND /* command-line reader for Macintosh */
|
|
||||||
#ifdef __MWERKS__
|
|
||||||
#include <SIOUX.h> /* Metrowerks needs this */
|
|
||||||
#include <console.h> /* ... and this */
|
|
||||||
#endif
|
|
||||||
#ifdef THINK_C
|
|
||||||
#include <console.h> /* Think declares it here */
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Create the add-on message string table. */
|
/* Create the add-on message string table. */
|
||||||
|
|
||||||
@@ -70,9 +64,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
|
||||||
@@ -113,21 +107,37 @@ select_file_type(j_compress_ptr cinfo, FILE *infile)
|
|||||||
#endif
|
#endif
|
||||||
#ifdef GIF_SUPPORTED
|
#ifdef GIF_SUPPORTED
|
||||||
case 'G':
|
case 'G':
|
||||||
return jinit_read_gif(cinfo);
|
if (cinfo->data_precision == 16) {
|
||||||
|
#ifdef C_LOSSLESS_SUPPORTED
|
||||||
|
return j16init_read_gif(cinfo);
|
||||||
|
#else
|
||||||
|
ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
} else if (cinfo->data_precision == 12)
|
||||||
|
return j12init_read_gif(cinfo);
|
||||||
|
else
|
||||||
|
return jinit_read_gif(cinfo);
|
||||||
#endif
|
#endif
|
||||||
#ifdef PPM_SUPPORTED
|
#ifdef PPM_SUPPORTED
|
||||||
case 'P':
|
case 'P':
|
||||||
return jinit_read_ppm(cinfo);
|
if (cinfo->data_precision == 16) {
|
||||||
|
#ifdef C_LOSSLESS_SUPPORTED
|
||||||
|
return j16init_read_ppm(cinfo);
|
||||||
|
#else
|
||||||
|
ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
} else if (cinfo->data_precision == 12)
|
||||||
|
return j12init_read_ppm(cinfo);
|
||||||
|
else
|
||||||
|
return jinit_read_ppm(cinfo);
|
||||||
#endif
|
#endif
|
||||||
#ifdef PNG_SUPPORTED
|
#ifdef PNG_SUPPORTED
|
||||||
case 0x89:
|
case 0x89:
|
||||||
copy_markers = TRUE;
|
copy_markers = TRUE;
|
||||||
return jinit_read_png(cinfo);
|
return jinit_read_png(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);
|
||||||
@@ -157,7 +167,48 @@ 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 *icc_filename; /* for -icc switch */
|
||||||
static char *outfilename; /* for -outfile switch */
|
static char *outfilename; /* for -outfile switch */
|
||||||
boolean memdst; /* for -memdst switch */
|
static boolean memdst; /* for -memdst switch */
|
||||||
|
static boolean report; /* for -report switch */
|
||||||
|
static 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)
|
||||||
@@ -177,10 +228,10 @@ usage(void)
|
|||||||
fprintf(stderr, " -grayscale Create monochrome JPEG file\n");
|
fprintf(stderr, " -grayscale Create monochrome JPEG file\n");
|
||||||
fprintf(stderr, " -rgb Create RGB JPEG file\n");
|
fprintf(stderr, " -rgb Create RGB JPEG file\n");
|
||||||
#ifdef ENTROPY_OPT_SUPPORTED
|
#ifdef ENTROPY_OPT_SUPPORTED
|
||||||
fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression, enabled by default)\n");
|
fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression)\n");
|
||||||
#endif
|
#endif
|
||||||
#ifdef C_PROGRESSIVE_SUPPORTED
|
#ifdef C_PROGRESSIVE_SUPPORTED
|
||||||
fprintf(stderr, " -progressive Create progressive JPEG file (enabled by default)\n");
|
fprintf(stderr, " -progressive Create progressive JPEG file\n");
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, " -baseline Create baseline JPEG file (disable progressive coding)\n");
|
fprintf(stderr, " -baseline Create baseline JPEG file (disable progressive coding)\n");
|
||||||
#ifdef TARGA_SUPPORTED
|
#ifdef TARGA_SUPPORTED
|
||||||
@@ -203,6 +254,16 @@ usage(void)
|
|||||||
fprintf(stderr, "Switches for advanced users:\n");
|
fprintf(stderr, "Switches for advanced users:\n");
|
||||||
fprintf(stderr, " -noovershoot Disable black-on-white deringing via overshoot\n");
|
fprintf(stderr, " -noovershoot Disable black-on-white deringing via overshoot\n");
|
||||||
fprintf(stderr, " -nojfif Do not write JFIF (reduces size by 18 bytes but breaks standards; no known problems in Web browsers)\n");
|
fprintf(stderr, " -nojfif Do not write JFIF (reduces size by 18 bytes but breaks standards; no known problems in Web browsers)\n");
|
||||||
|
fprintf(stderr, " -precision N Create JPEG file with N-bit data precision\n");
|
||||||
|
#ifdef C_LOSSLESS_SUPPORTED
|
||||||
|
fprintf(stderr, " (N is 8, 12, or 16; default is 8; if N is 16, then -lossless\n");
|
||||||
|
fprintf(stderr, " must also be specified)\n");
|
||||||
|
#else
|
||||||
|
fprintf(stderr, " (N is 8 or 12; default is 8)\n");
|
||||||
|
#endif
|
||||||
|
#ifdef C_LOSSLESS_SUPPORTED
|
||||||
|
fprintf(stderr, " -lossless psv[,Pt] Create lossless JPEG file\n");
|
||||||
|
#endif
|
||||||
#ifdef C_ARITH_CODING_SUPPORTED
|
#ifdef C_ARITH_CODING_SUPPORTED
|
||||||
fprintf(stderr, " -arithmetic Use arithmetic coding\n");
|
fprintf(stderr, " -arithmetic Use arithmetic coding\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -222,10 +283,13 @@ usage(void)
|
|||||||
fprintf(stderr, " -quant-table N Use predefined quantization table N:\n");
|
fprintf(stderr, " -quant-table N Use predefined quantization table N:\n");
|
||||||
fprintf(stderr, " - 0 JPEG Annex K\n");
|
fprintf(stderr, " - 0 JPEG Annex K\n");
|
||||||
fprintf(stderr, " - 1 Flat\n");
|
fprintf(stderr, " - 1 Flat\n");
|
||||||
fprintf(stderr, " - 2 Custom, tuned for MS-SSIM\n");
|
fprintf(stderr, " - 2 Tuned for MS-SSIM on Kodak image set\n");
|
||||||
fprintf(stderr, " - 3 ImageMagick table by N. Robidoux\n");
|
fprintf(stderr, " - 3 ImageMagick table by N. Robidoux (default)\n");
|
||||||
fprintf(stderr, " - 4 Custom, tuned for PSNR-HVS\n");
|
fprintf(stderr, " - 4 Tuned for PSNR-HVS on Kodak image set\n");
|
||||||
fprintf(stderr, " - 5 Table from paper by Klein, Silverstein and Carney\n");
|
fprintf(stderr, " - 5 Table from paper by Klein, Silverstein and Carney\n");
|
||||||
|
fprintf(stderr, " - 6 Table from paper by Watson, Taylor and Borthwick\n");
|
||||||
|
fprintf(stderr, " - 7 Table from paper by Ahumada, Watson, Peterson\n");
|
||||||
|
fprintf(stderr, " - 8 Table from paper by Peterson, Ahumada and Watson\n");
|
||||||
fprintf(stderr, " -icc FILE Embed ICC profile contained in FILE\n");
|
fprintf(stderr, " -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
|
||||||
@@ -233,9 +297,9 @@ usage(void)
|
|||||||
#endif
|
#endif
|
||||||
fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n");
|
fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n");
|
||||||
fprintf(stderr, " -outfile name Specify name for output file\n");
|
fprintf(stderr, " -outfile name Specify name for output file\n");
|
||||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
|
||||||
fprintf(stderr, " -memdst Compress to memory instead of file (useful for benchmarking)\n");
|
fprintf(stderr, " -memdst Compress to memory instead of file (useful for benchmarking)\n");
|
||||||
#endif
|
fprintf(stderr, " -report Report compression progress\n");
|
||||||
|
fprintf(stderr, " -strict Treat all warnings as fatal\n");
|
||||||
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
fprintf(stderr, " -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");
|
||||||
@@ -263,6 +327,9 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
{
|
{
|
||||||
int argn;
|
int argn;
|
||||||
char *arg;
|
char *arg;
|
||||||
|
#ifdef C_LOSSLESS_SUPPORTED
|
||||||
|
int psv = 0, pt = 0;
|
||||||
|
#endif
|
||||||
boolean force_baseline;
|
boolean force_baseline;
|
||||||
boolean simple_progressive;
|
boolean simple_progressive;
|
||||||
char *qualityarg = NULL; /* saves -quality parm if any */
|
char *qualityarg = NULL; /* saves -quality parm if any */
|
||||||
@@ -283,6 +350,8 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
icc_filename = NULL;
|
icc_filename = NULL;
|
||||||
outfilename = NULL;
|
outfilename = NULL;
|
||||||
memdst = FALSE;
|
memdst = FALSE;
|
||||||
|
report = FALSE;
|
||||||
|
strict = FALSE;
|
||||||
cinfo->err->trace_level = 0;
|
cinfo->err->trace_level = 0;
|
||||||
|
|
||||||
/* Scan command line options, adjust parameters */
|
/* Scan command line options, adjust parameters */
|
||||||
@@ -345,7 +414,8 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
if (!printed_version) {
|
if (!printed_version) {
|
||||||
fprintf(stderr, "%s version %s (build %s)\n",
|
fprintf(stderr, "%s version %s (build %s)\n",
|
||||||
PACKAGE_NAME, VERSION, BUILD);
|
PACKAGE_NAME, VERSION, BUILD);
|
||||||
fprintf(stderr, "%s\n\n", JCOPYRIGHT);
|
fprintf(stderr, JCOPYRIGHT1);
|
||||||
|
fprintf(stderr, JCOPYRIGHT2 "\n");
|
||||||
fprintf(stderr, "Emulating The Independent JPEG Group's software, version %s\n\n",
|
fprintf(stderr, "Emulating The Independent JPEG Group's software, version %s\n\n",
|
||||||
JVERSION);
|
JVERSION);
|
||||||
printed_version = TRUE;
|
printed_version = TRUE;
|
||||||
@@ -386,6 +456,28 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
usage();
|
usage();
|
||||||
icc_filename = argv[argn];
|
icc_filename = argv[argn];
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "lossless", 1)) {
|
||||||
|
/* Enable lossless mode. */
|
||||||
|
#ifdef C_LOSSLESS_SUPPORTED
|
||||||
|
char ch = ',', *ptr;
|
||||||
|
|
||||||
|
if (++argn >= argc) /* advance to next argument */
|
||||||
|
usage();
|
||||||
|
if (sscanf(argv[argn], "%d%c", &psv, &ch) < 1 || ch != ',')
|
||||||
|
usage();
|
||||||
|
ptr = argv[argn];
|
||||||
|
while (*ptr && *ptr++ != ','); /* advance to next segment of arg
|
||||||
|
string */
|
||||||
|
if (*ptr)
|
||||||
|
sscanf(ptr, "%d", &pt);
|
||||||
|
|
||||||
|
/* We must postpone execution until data_precision is known. */
|
||||||
|
#else
|
||||||
|
fprintf(stderr, "%s: sorry, lossless output was not compiled\n",
|
||||||
|
progname);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
#endif
|
||||||
|
|
||||||
} 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;
|
||||||
@@ -424,6 +516,22 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
}
|
}
|
||||||
outfilename = argv[argn]; /* save it away for later use */
|
outfilename = argv[argn]; /* save it away for later use */
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "precision", 3)) {
|
||||||
|
/* Set data precision. */
|
||||||
|
int val;
|
||||||
|
|
||||||
|
if (++argn >= argc) /* advance to next argument */
|
||||||
|
usage();
|
||||||
|
if (sscanf(argv[argn], "%d", &val) != 1)
|
||||||
|
usage();
|
||||||
|
#ifdef C_LOSSLESS_SUPPORTED
|
||||||
|
if (val != 8 && val != 12 && val != 16)
|
||||||
|
#else
|
||||||
|
if (val != 8 && val != 12)
|
||||||
|
#endif
|
||||||
|
usage();
|
||||||
|
cinfo->data_precision = val;
|
||||||
|
|
||||||
} else if (keymatch(arg, "progressive", 1)) {
|
} else if (keymatch(arg, "progressive", 1)) {
|
||||||
/* Select simple progressive mode. */
|
/* Select simple progressive mode. */
|
||||||
#ifdef C_PROGRESSIVE_SUPPORTED
|
#ifdef C_PROGRESSIVE_SUPPORTED
|
||||||
@@ -437,13 +545,7 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
|
|
||||||
} else if (keymatch(arg, "memdst", 2)) {
|
} else if (keymatch(arg, "memdst", 2)) {
|
||||||
/* Use in-memory destination manager */
|
/* Use in-memory destination manager */
|
||||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
|
||||||
memdst = TRUE;
|
memdst = TRUE;
|
||||||
#else
|
|
||||||
fprintf(stderr, "%s: sorry, in-memory destination manager was not compiled in\n",
|
|
||||||
progname);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} else if (keymatch(arg, "quality", 1)) {
|
} else if (keymatch(arg, "quality", 1)) {
|
||||||
/* Quality ratings (quantization table scaling factors). */
|
/* Quality ratings (quantization table scaling factors). */
|
||||||
@@ -470,6 +572,8 @@ 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, "quant-table", 7)) {
|
} else if (keymatch(arg, "quant-table", 7)) {
|
||||||
int val;
|
int val;
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
@@ -485,7 +589,7 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
} else if (keymatch(arg, "quant-baseline", 7)) {
|
} else if (keymatch(arg, "quant-baseline", 7)) {
|
||||||
/* Force quantization table to meet baseline requirements */
|
/* Force quantization table to meet baseline requirements */
|
||||||
force_baseline = TRUE;
|
force_baseline = 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;
|
||||||
@@ -520,7 +624,7 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
* default sampling factors.
|
* default sampling factors.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
} else if (keymatch(arg, "scans", 4)) {
|
} else if (keymatch(arg, "scans", 2)) {
|
||||||
/* Set scan script. */
|
/* Set scan script. */
|
||||||
#ifdef C_MULTISCAN_FILES_SUPPORTED
|
#ifdef C_MULTISCAN_FILES_SUPPORTED
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
@@ -545,6 +649,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;
|
||||||
@@ -642,6 +749,11 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
jpeg_simple_progression(cinfo);
|
jpeg_simple_progression(cinfo);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef C_LOSSLESS_SUPPORTED
|
||||||
|
if (psv != 0) /* process -lossless */
|
||||||
|
jpeg_enable_lossless(cinfo, psv, pt);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef C_MULTISCAN_FILES_SUPPORTED
|
#ifdef C_MULTISCAN_FILES_SUPPORTED
|
||||||
if (scansarg != NULL) /* process -scans if it was present */
|
if (scansarg != NULL) /* process -scans if it was present */
|
||||||
if (!read_scan_script(cinfo, scansarg))
|
if (!read_scan_script(cinfo, scansarg))
|
||||||
@@ -653,6 +765,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.
|
||||||
*/
|
*/
|
||||||
@@ -661,13 +786,16 @@ int
|
|||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct jpeg_compress_struct cinfo;
|
struct jpeg_compress_struct cinfo;
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
struct my_error_mgr myerr;
|
||||||
|
struct jpeg_error_mgr &jerr = myerr.pub;
|
||||||
|
#else
|
||||||
struct jpeg_error_mgr jerr;
|
struct jpeg_error_mgr jerr;
|
||||||
#ifdef PROGRESS_REPORT
|
|
||||||
struct cdjpeg_progress_mgr progress;
|
|
||||||
#endif
|
#endif
|
||||||
|
struct cdjpeg_progress_mgr progress;
|
||||||
int file_index;
|
int file_index;
|
||||||
cjpeg_source_ptr src_mgr;
|
cjpeg_source_ptr src_mgr;
|
||||||
FILE *input_file;
|
FILE *input_file = NULL;
|
||||||
FILE *icc_file;
|
FILE *icc_file;
|
||||||
JOCTET *icc_profile = NULL;
|
JOCTET *icc_profile = NULL;
|
||||||
long icc_len = 0;
|
long icc_len = 0;
|
||||||
@@ -676,11 +804,6 @@ main(int argc, char **argv)
|
|||||||
unsigned long outsize = 0;
|
unsigned long outsize = 0;
|
||||||
JDIMENSION num_scanlines;
|
JDIMENSION num_scanlines;
|
||||||
|
|
||||||
/* On Mac, fetch a command line. */
|
|
||||||
#ifdef USE_CCOMMAND
|
|
||||||
argc = ccommand(&argv);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
progname = argv[0];
|
progname = argv[0];
|
||||||
if (progname == NULL || progname[0] == 0)
|
if (progname == NULL || progname[0] == 0)
|
||||||
progname = "cjpeg"; /* in case C library doesn't provide it */
|
progname = "cjpeg"; /* in case C library doesn't provide it */
|
||||||
@@ -710,6 +833,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 */
|
||||||
@@ -785,13 +911,24 @@ main(int argc, char **argv)
|
|||||||
fclose(icc_file);
|
fclose(icc_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
#ifdef CJPEG_FUZZER
|
||||||
start_progress_monitor((j_common_ptr)&cinfo, &progress);
|
jerr.error_exit = my_error_exit;
|
||||||
|
jerr.emit_message = my_emit_message_fuzzer;
|
||||||
|
if (setjmp(myerr.setjmp_buffer))
|
||||||
|
HANDLE_ERROR()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (report) {
|
||||||
|
start_progress_monitor((j_common_ptr)&cinfo, &progress);
|
||||||
|
progress.report = report;
|
||||||
|
}
|
||||||
|
|
||||||
/* Figure out the input file format, and set up to read it. */
|
/* Figure out the input file format, and set up to read it. */
|
||||||
src_mgr = select_file_type(&cinfo, input_file);
|
src_mgr = select_file_type(&cinfo, input_file);
|
||||||
src_mgr->input_file = input_file;
|
src_mgr->input_file = input_file;
|
||||||
|
#ifdef CJPEG_FUZZER
|
||||||
|
src_mgr->max_pixels = 1048576;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Read the input file header to obtain file size & colorspace. */
|
/* Read the input file header to obtain file size & colorspace. */
|
||||||
(*src_mgr->start_input) (&cinfo, src_mgr);
|
(*src_mgr->start_input) (&cinfo, src_mgr);
|
||||||
@@ -806,13 +943,16 @@ main(int argc, char **argv)
|
|||||||
file_index = parse_switches(&cinfo, argc, argv, 0, TRUE);
|
file_index = parse_switches(&cinfo, argc, argv, 0, TRUE);
|
||||||
|
|
||||||
/* Specify data destination for compression */
|
/* Specify data destination for compression */
|
||||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
|
||||||
if (memdst)
|
if (memdst)
|
||||||
jpeg_mem_dest(&cinfo, &outbuffer, &outsize);
|
jpeg_mem_dest(&cinfo, &outbuffer, &outsize);
|
||||||
else
|
else
|
||||||
#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);
|
||||||
|
|
||||||
@@ -852,6 +992,21 @@ main(int argc, char **argv)
|
|||||||
jpeg_write_icc_profile(&cinfo, icc_profile, (unsigned int)icc_len);
|
jpeg_write_icc_profile(&cinfo, icc_profile, (unsigned int)icc_len);
|
||||||
|
|
||||||
/* Process data */
|
/* Process data */
|
||||||
|
if (cinfo.data_precision == 16) {
|
||||||
|
#ifdef C_LOSSLESS_SUPPORTED
|
||||||
|
while (cinfo.next_scanline < cinfo.image_height) {
|
||||||
|
num_scanlines = (*src_mgr->get_pixel_rows) (&cinfo, src_mgr);
|
||||||
|
(void)jpeg16_write_scanlines(&cinfo, src_mgr->buffer16, num_scanlines);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
ERREXIT1(&cinfo, JERR_BAD_PRECISION, cinfo.data_precision);
|
||||||
|
#endif
|
||||||
|
} else if (cinfo.data_precision == 12) {
|
||||||
|
while (cinfo.next_scanline < cinfo.image_height) {
|
||||||
|
num_scanlines = (*src_mgr->get_pixel_rows) (&cinfo, src_mgr);
|
||||||
|
(void)jpeg12_write_scanlines(&cinfo, src_mgr->buffer12, num_scanlines);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
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);
|
||||||
#if JPEG_RAW_READER
|
#if JPEG_RAW_READER
|
||||||
@@ -859,7 +1014,8 @@ main(int argc, char **argv)
|
|||||||
(void) jpeg_write_raw_data(&cinfo, src_mgr->plane_pointer, num_scanlines);
|
(void) jpeg_write_raw_data(&cinfo, src_mgr->plane_pointer, num_scanlines);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
(void) jpeg_write_scanlines(&cinfo, src_mgr->buffer, num_scanlines);
|
(void)jpeg_write_scanlines(&cinfo, src_mgr->buffer, num_scanlines);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Finish compression and release memory */
|
/* Finish compression and release memory */
|
||||||
@@ -873,18 +1029,18 @@ main(int argc, char **argv)
|
|||||||
if (output_file != stdout && output_file != NULL)
|
if (output_file != stdout && output_file != NULL)
|
||||||
fclose(output_file);
|
fclose(output_file);
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
if (report)
|
||||||
end_progress_monitor((j_common_ptr)&cinfo);
|
end_progress_monitor((j_common_ptr)&cinfo);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (memdst) {
|
if (memdst) {
|
||||||
|
#ifndef CJPEG_FUZZER
|
||||||
fprintf(stderr, "Compressed size: %lu bytes\n", outsize);
|
fprintf(stderr, "Compressed size: %lu bytes\n", outsize);
|
||||||
|
#endif
|
||||||
free(outbuffer);
|
free(outbuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(icc_profile);
|
free(icc_profile);
|
||||||
|
|
||||||
/* All done. */
|
/* All done. */
|
||||||
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
return (jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
||||||
return 0; /* suppress no-return-value warnings */
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,6 @@
|
|||||||
# This file is included from the top-level CMakeLists.txt. We just store it
|
# This file is included from the top-level CMakeLists.txt. We just store it
|
||||||
# here to avoid cluttering up that file.
|
# here to avoid cluttering up that file.
|
||||||
|
|
||||||
set(PKGNAME ${CMAKE_PROJECT_NAME} CACHE STRING
|
|
||||||
"Distribution package name (default: ${CMAKE_PROJECT_NAME})")
|
|
||||||
set(PKGVENDOR "The ${CMAKE_PROJECT_NAME} Project" CACHE STRING
|
|
||||||
"Vendor name to be included in distribution package descriptions (default: The ${CMAKE_PROJECT_NAME} Project)")
|
|
||||||
set(PKGURL "http://www.${CMAKE_PROJECT_NAME}.org" CACHE STRING
|
|
||||||
"URL of project web site to be included in distribution package descriptions (default: http://www.${CMAKE_PROJECT_NAME}.org)")
|
|
||||||
set(PKGEMAIL "information@${CMAKE_PROJECT_NAME}.org" CACHE STRING
|
|
||||||
"E-mail of project maintainer to be included in distribution package descriptions (default: information@${CMAKE_PROJECT_NAME}.org")
|
|
||||||
set(PKGID "com.${CMAKE_PROJECT_NAME}.${PKGNAME}" CACHE STRING
|
|
||||||
"Globally unique package identifier (reverse DNS notation) (default: com.${CMAKE_PROJECT_NAME}.${PKGNAME})")
|
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Linux RPM and DEB
|
# Linux RPM and DEB
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@@ -22,13 +10,15 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|||||||
set(RPMARCH ${CMAKE_SYSTEM_PROCESSOR})
|
set(RPMARCH ${CMAKE_SYSTEM_PROCESSOR})
|
||||||
if(CPU_TYPE STREQUAL "x86_64")
|
if(CPU_TYPE STREQUAL "x86_64")
|
||||||
set(DEBARCH amd64)
|
set(DEBARCH amd64)
|
||||||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "armv7*")
|
|
||||||
set(RPMARCH armv7hl)
|
|
||||||
set(DEBARCH armhf)
|
|
||||||
elseif(CPU_TYPE STREQUAL "arm64")
|
elseif(CPU_TYPE STREQUAL "arm64")
|
||||||
set(DEBARCH ${CPU_TYPE})
|
set(DEBARCH ${CPU_TYPE})
|
||||||
elseif(CPU_TYPE STREQUAL "arm")
|
elseif(CPU_TYPE STREQUAL "arm")
|
||||||
if(CMAKE_C_COMPILER MATCHES "gnueabihf")
|
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(RPMARCH armv7hl)
|
||||||
set(DEBARCH armhf)
|
set(DEBARCH armhf)
|
||||||
else()
|
else()
|
||||||
@@ -76,14 +66,16 @@ endif() # Linux
|
|||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC_LIKE)
|
||||||
set(INST_PLATFORM "Visual C++")
|
set(INST_PLATFORM "Visual C++")
|
||||||
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-vc)
|
set(INST_ID vc)
|
||||||
|
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-${INST_ID})
|
||||||
set(INST_REG_NAME ${CMAKE_PROJECT_NAME})
|
set(INST_REG_NAME ${CMAKE_PROJECT_NAME})
|
||||||
elseif(MINGW)
|
elseif(MINGW)
|
||||||
set(INST_PLATFORM GCC)
|
set(INST_PLATFORM GCC)
|
||||||
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-gcc)
|
set(INST_ID gcc)
|
||||||
set(INST_REG_NAME ${CMAKE_PROJECT_NAME}-gcc)
|
set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-${INST_ID})
|
||||||
|
set(INST_REG_NAME ${CMAKE_PROJECT_NAME}-${INST_ID})
|
||||||
set(INST_DEFS -DGCC)
|
set(INST_DEFS -DGCC)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -98,7 +90,7 @@ if(WITH_JAVA)
|
|||||||
set(INST_DEFS ${INST_DEFS} -DJAVA)
|
set(INST_DEFS ${INST_DEFS} -DJAVA)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC_IDE)
|
if(GENERATOR_IS_MULTI_CONFIG)
|
||||||
set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=${CMAKE_CFG_INTDIR}\\")
|
set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=${CMAKE_CFG_INTDIR}\\")
|
||||||
else()
|
else()
|
||||||
set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=")
|
set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=")
|
||||||
@@ -107,66 +99,50 @@ endif()
|
|||||||
string(REGEX REPLACE "/" "\\\\" INST_DIR ${CMAKE_INSTALL_PREFIX})
|
string(REGEX REPLACE "/" "\\\\" INST_DIR ${CMAKE_INSTALL_PREFIX})
|
||||||
|
|
||||||
configure_file(release/installer.nsi.in installer.nsi @ONLY)
|
configure_file(release/installer.nsi.in installer.nsi @ONLY)
|
||||||
|
# TODO: It would be nice to eventually switch to CPack and eliminate this mess,
|
||||||
|
# but not today.
|
||||||
|
configure_file(win/projectTargets.cmake.in
|
||||||
|
win/${CMAKE_PROJECT_NAME}Targets.cmake @ONLY)
|
||||||
|
configure_file(win/${INST_ID}/projectTargets-release.cmake.in
|
||||||
|
win/${CMAKE_PROJECT_NAME}Targets-release.cmake @ONLY)
|
||||||
|
|
||||||
if(WITH_JAVA)
|
if(WITH_JAVA)
|
||||||
set(JAVA_DEPEND turbojpeg-java)
|
set(JAVA_DEPEND turbojpeg-java)
|
||||||
endif()
|
endif()
|
||||||
|
if(WITH_TURBOJPEG)
|
||||||
|
set(TURBOJPEG_DEPEND turbojpeg turbojpeg-static tjbench)
|
||||||
|
endif()
|
||||||
add_custom_target(installer
|
add_custom_target(installer
|
||||||
makensis -nocd ${INST_DEFS} installer.nsi
|
makensis -nocd ${INST_DEFS} installer.nsi
|
||||||
DEPENDS jpeg jpeg-static turbojpeg turbojpeg-static rdjpgcom wrjpgcom
|
DEPENDS jpeg jpeg-static rdjpgcom wrjpgcom cjpeg djpeg jpegtran
|
||||||
cjpeg djpeg jpegtran tjbench ${JAVA_DEPEND}
|
${JAVA_DEPEND} ${TURBOJPEG_DEPEND}
|
||||||
SOURCES installer.nsi)
|
SOURCES installer.nsi)
|
||||||
|
|
||||||
endif() # WIN32
|
endif() # WIN32
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# Cygwin Package
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
if(CYGWIN)
|
|
||||||
|
|
||||||
configure_file(release/makecygwinpkg.in pkgscripts/makecygwinpkg)
|
|
||||||
|
|
||||||
add_custom_target(cygwinpkg pkgscripts/makecygwinpkg)
|
|
||||||
|
|
||||||
endif() # CYGWIN
|
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Mac DMG
|
# Mac DMG
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
|
|
||||||
set(DEFAULT_OSX_32BIT_BUILD ${CMAKE_SOURCE_DIR}/osxx86)
|
set(SECONDARY_BUILD "" CACHE PATH
|
||||||
set(OSX_32BIT_BUILD ${DEFAULT_OSX_32BIT_BUILD} CACHE PATH
|
"Directory containing cross-compiled x86-64 or Armv8 (64-bit) iOS or macOS build to include in universal binaries")
|
||||||
"Directory containing 32-bit (i386) Mac build to include in universal binaries (default: ${DEFAULT_OSX_32BIT_BUILD})")
|
|
||||||
set(DEFAULT_IOS_ARMV7_BUILD ${CMAKE_SOURCE_DIR}/iosarmv7)
|
|
||||||
set(IOS_ARMV7_BUILD ${DEFAULT_IOS_ARMV7_BUILD} CACHE PATH
|
|
||||||
"Directory containing Armv7 iOS build to include in universal binaries (default: ${DEFAULT_IOS_ARMV7_BUILD})")
|
|
||||||
set(DEFAULT_IOS_ARMV7S_BUILD ${CMAKE_SOURCE_DIR}/iosarmv7s)
|
|
||||||
set(IOS_ARMV7S_BUILD ${DEFAULT_IOS_ARMV7S_BUILD} CACHE PATH
|
|
||||||
"Directory containing Armv7s iOS build to include in universal binaries (default: ${DEFAULT_IOS_ARMV7S_BUILD})")
|
|
||||||
set(DEFAULT_IOS_ARMV8_BUILD ${CMAKE_SOURCE_DIR}/iosarmv8)
|
|
||||||
set(IOS_ARMV8_BUILD ${DEFAULT_IOS_ARMV8_BUILD} CACHE PATH
|
|
||||||
"Directory containing Armv8 iOS build to include in universal binaries (default: ${DEFAULT_IOS_ARMV8_BUILD})")
|
|
||||||
|
|
||||||
set(OSX_APP_CERT_NAME "" CACHE STRING
|
set(MACOS_APP_CERT_NAME "" CACHE STRING
|
||||||
"Name of the Developer ID Application certificate (in the macOS keychain) that should be used to sign the libjpeg-turbo DMG. Leave this blank to generate an unsigned DMG.")
|
"Name of the Developer ID Application certificate (in the macOS keychain) that should be used to sign the libjpeg-turbo DMG. Leave this blank to generate an unsigned DMG.")
|
||||||
set(OSX_INST_CERT_NAME "" CACHE STRING
|
set(MACOS_INST_CERT_NAME "" CACHE STRING
|
||||||
"Name of the Developer ID Installer certificate (in the macOS keychain) that should be used to sign the libjpeg-turbo installer package. Leave this blank to generate an unsigned package.")
|
"Name of the Developer ID Installer certificate (in the macOS keychain) that should be used to sign the libjpeg-turbo installer package. Leave this blank to generate an unsigned package.")
|
||||||
|
|
||||||
configure_file(release/makemacpkg.in pkgscripts/makemacpkg)
|
configure_file(release/makemacpkg.in pkgscripts/makemacpkg)
|
||||||
configure_file(release/Distribution.xml.in pkgscripts/Distribution.xml)
|
configure_file(release/Distribution.xml.in pkgscripts/Distribution.xml)
|
||||||
|
configure_file(release/Welcome.rtf.in pkgscripts/Welcome.rtf)
|
||||||
configure_file(release/uninstall.in pkgscripts/uninstall)
|
configure_file(release/uninstall.in pkgscripts/uninstall)
|
||||||
|
|
||||||
add_custom_target(dmg pkgscripts/makemacpkg
|
add_custom_target(dmg pkgscripts/makemacpkg
|
||||||
SOURCES pkgscripts/makemacpkg)
|
SOURCES pkgscripts/makemacpkg)
|
||||||
|
|
||||||
add_custom_target(udmg pkgscripts/makemacpkg universal
|
|
||||||
SOURCES pkgscripts/makemacpkg)
|
|
||||||
|
|
||||||
endif() # APPLE
|
endif() # APPLE
|
||||||
|
|
||||||
|
|
||||||
@@ -186,4 +162,15 @@ add_custom_target(tarball pkgscripts/maketarball
|
|||||||
|
|
||||||
configure_file(release/libjpeg.pc.in pkgscripts/libjpeg.pc @ONLY)
|
configure_file(release/libjpeg.pc.in pkgscripts/libjpeg.pc @ONLY)
|
||||||
|
|
||||||
configure_file(release/libturbojpeg.pc.in pkgscripts/libturbojpeg.pc @ONLY)
|
if(WITH_TURBOJPEG)
|
||||||
|
configure_file(release/libturbojpeg.pc.in pkgscripts/libturbojpeg.pc @ONLY)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(CMakePackageConfigHelpers)
|
||||||
|
write_basic_package_version_file(
|
||||||
|
pkgscripts/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
|
||||||
|
VERSION ${VERSION} COMPATIBILITY AnyNewerVersion)
|
||||||
|
|
||||||
|
configure_package_config_file(release/Config.cmake.in
|
||||||
|
pkgscripts/${CMAKE_PROJECT_NAME}Config.cmake
|
||||||
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME})
|
||||||
|
|||||||
@@ -118,8 +118,10 @@
|
|||||||
# absolute paths where necessary, using the same logic.
|
# absolute paths where necessary, using the same logic.
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
# Copyright 2016, 2019 D. R. Commander
|
# Copyright 2018 Tobias C. Berner
|
||||||
# Copyright 2016 Dmitry Marakasov
|
# Copyright 2018 Matthias Räncker
|
||||||
|
# Copyright 2016, 2019, 2024 D. R. Commander
|
||||||
|
# Copyright 2016, 2021 Dmitry Marakasov
|
||||||
# Copyright 2016 Roger Leigh
|
# Copyright 2016 Roger Leigh
|
||||||
# Copyright 2015 Alex Turbov
|
# Copyright 2015 Alex Turbov
|
||||||
# Copyright 2014 Rolf Eike Beer
|
# Copyright 2014 Rolf Eike Beer
|
||||||
@@ -180,6 +182,10 @@ macro(GNUInstallDirs_set_install_dir var docstring)
|
|||||||
set(_GNUInstallDirs_CMAKE_INSTALL_FORCE_${var} "FORCE")
|
set(_GNUInstallDirs_CMAKE_INSTALL_FORCE_${var} "FORCE")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(DEFINED CMAKE_INSTALL_${var} AND NOT CMAKE_INSTALL_${var} MATCHES "^/")
|
||||||
|
set_property(CACHE CMAKE_INSTALL_${var} PROPERTY TYPE PATH)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_INSTALL_${var} "${CMAKE_INSTALL_DEFAULT_${var}}" CACHE PATH
|
set(CMAKE_INSTALL_${var} "${CMAKE_INSTALL_DEFAULT_${var}}" CACHE PATH
|
||||||
"${docstring} (Default: ${CMAKE_INSTALL_DEFAULT_${var}})"
|
"${docstring} (Default: ${CMAKE_INSTALL_DEFAULT_${var}})"
|
||||||
${_GNUInstallDirs_CMAKE_INSTALL_FORCE_${var}})
|
${_GNUInstallDirs_CMAKE_INSTALL_FORCE_${var}})
|
||||||
@@ -259,6 +265,8 @@ if(NOT DEFINED CMAKE_INSTALL_DEFAULT_LIBDIR)
|
|||||||
else()
|
else()
|
||||||
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
||||||
set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib64")
|
set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib64")
|
||||||
|
elseif(CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
|
||||||
|
set(CMAKE_INSTALL_DEFAULT_LIBDIR "libx32")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@@ -297,7 +305,7 @@ GNUInstallDirs_set_install_dir(DATADIR
|
|||||||
"The directory under which read-only architecture-independent data files should be installed")
|
"The directory under which read-only architecture-independent data files should be installed")
|
||||||
|
|
||||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_INFODIR)
|
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_INFODIR)
|
||||||
if(CMAKE_SYSTEM_NAME MATCHES "^(.*BSD|DragonFly)$")
|
if(CMAKE_SYSTEM_NAME MATCHES "^(([^kF].*)?BSD|DragonFly)$")
|
||||||
set(CMAKE_INSTALL_DEFAULT_INFODIR "info")
|
set(CMAKE_INSTALL_DEFAULT_INFODIR "info")
|
||||||
else()
|
else()
|
||||||
set(CMAKE_INSTALL_DEFAULT_INFODIR "<CMAKE_INSTALL_DATAROOTDIR>/info")
|
set(CMAKE_INSTALL_DEFAULT_INFODIR "<CMAKE_INSTALL_DATAROOTDIR>/info")
|
||||||
@@ -307,7 +315,7 @@ GNUInstallDirs_set_install_dir(INFODIR
|
|||||||
"The directory into which info documentation files should be installed")
|
"The directory into which info documentation files should be installed")
|
||||||
|
|
||||||
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_MANDIR)
|
if(NOT DEFINED CMAKE_INSTALL_DEFAULT_MANDIR)
|
||||||
if(CMAKE_SYSTEM_NAME MATCHES "^(.*BSD|DragonFly)$")
|
if(CMAKE_SYSTEM_NAME MATCHES "^(([^k].*)?BSD|DragonFly)$" AND NOT CMAKE_SYSTEM_NAME MATCHES "^(FreeBSD)$")
|
||||||
set(CMAKE_INSTALL_DEFAULT_MANDIR "man")
|
set(CMAKE_INSTALL_DEFAULT_MANDIR "man")
|
||||||
else()
|
else()
|
||||||
set(CMAKE_INSTALL_DEFAULT_MANDIR "<CMAKE_INSTALL_DATAROOTDIR>/man")
|
set(CMAKE_INSTALL_DEFAULT_MANDIR "<CMAKE_INSTALL_DATAROOTDIR>/man")
|
||||||
|
|||||||
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 "https://${CMAKE_PROJECT_NAME}.org" CACHE STRING
|
||||||
|
"URL of project web site to be included in distribution package descriptions (default: https://${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})")
|
||||||
@@ -30,6 +30,15 @@ file(GLOB FILES
|
|||||||
*_411_*.ppm
|
*_411_*.ppm
|
||||||
*_411_*.jpg
|
*_411_*.jpg
|
||||||
*_411.yuv
|
*_411.yuv
|
||||||
|
*_441_*.bmp
|
||||||
|
*_441_*.png
|
||||||
|
*_441_*.ppm
|
||||||
|
*_441_*.jpg
|
||||||
|
*_441.yuv
|
||||||
|
*_LOSSL*S_*.bmp
|
||||||
|
*_LOSSL*S_*.ppm
|
||||||
|
*_LOSSL*S_*.jpg
|
||||||
|
croptest.log
|
||||||
tjbenchtest*.log
|
tjbenchtest*.log
|
||||||
tjexampletest*.log)
|
tjexampletest*.log)
|
||||||
|
|
||||||
|
|||||||
77
cmakescripts/tjbenchtest.cmake
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
if(NOT DEFINED PRECISION)
|
||||||
|
message(FATAL_ERROR "PRECISION must be specified")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT DEFINED WITH_JAVA)
|
||||||
|
message(FATAL_ERROR "WITH_JAVA must be specified")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
macro(check_error program)
|
||||||
|
if(NOT RESULT EQUAL 0)
|
||||||
|
message(FATAL_ERROR "${program} failed.")
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
macro(run_test PROG ARGS)
|
||||||
|
string(REPLACE ";" " " SPACED_ARGS "${ARGS}")
|
||||||
|
message(STATUS "${PROG} ${SPACED_ARGS}")
|
||||||
|
execute_process(COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${PROG} ${ARGS}
|
||||||
|
RESULT_VARIABLE RESULT)
|
||||||
|
check_error("${PROG} ${SPACED_ARGS}")
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
if(NOT PRECISION EQUAL 16)
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION}")
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION};-alloc")
|
||||||
|
endif()
|
||||||
|
if(PRECISION EQUAL 8)
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION};-yuv")
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION};-yuv;-alloc")
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION};-optimize")
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION};-optimize;-yuv")
|
||||||
|
endif()
|
||||||
|
if(NOT PRECISION EQUAL 16)
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION};-progressive")
|
||||||
|
endif()
|
||||||
|
if(PRECISION EQUAL 8)
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION};-progressive;-yuv")
|
||||||
|
endif()
|
||||||
|
if(NOT PRECISION EQUAL 16)
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION};-arithmetic")
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION};-progressive;-arithmetic")
|
||||||
|
endif()
|
||||||
|
if(PRECISION EQUAL 8)
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION};-arithmetic;-yuv")
|
||||||
|
endif()
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION};-lossless")
|
||||||
|
run_test(tjbenchtest "-precision;${PRECISION};-lossless;-alloc")
|
||||||
|
if(PRECISION EQUAL 8)
|
||||||
|
run_test(tjexampletest "")
|
||||||
|
endif()
|
||||||
|
if(WITH_JAVA)
|
||||||
|
if(NOT PRECISION EQUAL 16)
|
||||||
|
run_test(tjbenchtest "-java;-precision;${PRECISION}")
|
||||||
|
endif()
|
||||||
|
if(PRECISION EQUAL 8)
|
||||||
|
run_test(tjbenchtest "-java;-precision;${PRECISION};-yuv")
|
||||||
|
run_test(tjbenchtest "-java;-precision;${PRECISION};-optimize")
|
||||||
|
run_test(tjbenchtest "-java;-precision;${PRECISION};-optimize;-yuv")
|
||||||
|
endif()
|
||||||
|
if(NOT PRECISION EQUAL 16)
|
||||||
|
run_test(tjbenchtest "-java;-precision;${PRECISION};-progressive")
|
||||||
|
endif()
|
||||||
|
if(PRECISION EQUAL 8)
|
||||||
|
run_test(tjbenchtest "-java;-precision;${PRECISION};-progressive;-yuv")
|
||||||
|
endif()
|
||||||
|
if(NOT PRECISION EQUAL 16)
|
||||||
|
run_test(tjbenchtest "-java;-precision;${PRECISION};-arithmetic")
|
||||||
|
run_test(tjbenchtest "-java;-precision;${PRECISION};-progressive;-arithmetic")
|
||||||
|
endif()
|
||||||
|
if(PRECISION EQUAL 8)
|
||||||
|
run_test(tjbenchtest "-java;-precision;${PRECISION};-arithmetic;-yuv")
|
||||||
|
endif()
|
||||||
|
run_test(tjbenchtest "-java;-precision;${PRECISION};-lossless")
|
||||||
|
if(PRECISION EQUAL 8)
|
||||||
|
run_test(tjexampletest "-java")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
32
cmyk.h
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* cmyk.h
|
* cmyk.h
|
||||||
*
|
*
|
||||||
* Copyright (C) 2017-2018, D. R. Commander.
|
* Copyright (C) 2017-2018, 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.
|
||||||
*
|
*
|
||||||
@@ -17,19 +17,19 @@
|
|||||||
#include <jinclude.h>
|
#include <jinclude.h>
|
||||||
#define JPEG_INTERNALS
|
#define JPEG_INTERNALS
|
||||||
#include <jpeglib.h>
|
#include <jpeglib.h>
|
||||||
#include "jconfigint.h"
|
#include "jsamplecomp.h"
|
||||||
|
|
||||||
|
|
||||||
/* Fully reversible */
|
/* Fully reversible */
|
||||||
|
|
||||||
INLINE
|
INLINE
|
||||||
LOCAL(void)
|
LOCAL(void)
|
||||||
rgb_to_cmyk(JSAMPLE r, JSAMPLE g, JSAMPLE b, JSAMPLE *c, JSAMPLE *m,
|
rgb_to_cmyk(_JSAMPLE r, _JSAMPLE g, _JSAMPLE b,
|
||||||
JSAMPLE *y, JSAMPLE *k)
|
_JSAMPLE *c, _JSAMPLE *m, _JSAMPLE *y, _JSAMPLE *k)
|
||||||
{
|
{
|
||||||
double ctmp = 1.0 - ((double)r / 255.0);
|
double ctmp = 1.0 - ((double)r / (double)_MAXJSAMPLE);
|
||||||
double mtmp = 1.0 - ((double)g / 255.0);
|
double mtmp = 1.0 - ((double)g / (double)_MAXJSAMPLE);
|
||||||
double ytmp = 1.0 - ((double)b / 255.0);
|
double ytmp = 1.0 - ((double)b / (double)_MAXJSAMPLE);
|
||||||
double ktmp = MIN(MIN(ctmp, mtmp), ytmp);
|
double ktmp = MIN(MIN(ctmp, mtmp), ytmp);
|
||||||
|
|
||||||
if (ktmp == 1.0) ctmp = mtmp = ytmp = 0.0;
|
if (ktmp == 1.0) ctmp = mtmp = ytmp = 0.0;
|
||||||
@@ -38,10 +38,10 @@ rgb_to_cmyk(JSAMPLE r, JSAMPLE g, JSAMPLE b, JSAMPLE *c, JSAMPLE *m,
|
|||||||
mtmp = (mtmp - ktmp) / (1.0 - ktmp);
|
mtmp = (mtmp - ktmp) / (1.0 - ktmp);
|
||||||
ytmp = (ytmp - ktmp) / (1.0 - ktmp);
|
ytmp = (ytmp - ktmp) / (1.0 - ktmp);
|
||||||
}
|
}
|
||||||
*c = (JSAMPLE)(255.0 - ctmp * 255.0 + 0.5);
|
*c = (_JSAMPLE)((double)_MAXJSAMPLE - ctmp * (double)_MAXJSAMPLE + 0.5);
|
||||||
*m = (JSAMPLE)(255.0 - mtmp * 255.0 + 0.5);
|
*m = (_JSAMPLE)((double)_MAXJSAMPLE - mtmp * (double)_MAXJSAMPLE + 0.5);
|
||||||
*y = (JSAMPLE)(255.0 - ytmp * 255.0 + 0.5);
|
*y = (_JSAMPLE)((double)_MAXJSAMPLE - ytmp * (double)_MAXJSAMPLE + 0.5);
|
||||||
*k = (JSAMPLE)(255.0 - ktmp * 255.0 + 0.5);
|
*k = (_JSAMPLE)((double)_MAXJSAMPLE - ktmp * (double)_MAXJSAMPLE + 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -49,12 +49,12 @@ rgb_to_cmyk(JSAMPLE r, JSAMPLE g, JSAMPLE b, JSAMPLE *c, JSAMPLE *m,
|
|||||||
|
|
||||||
INLINE
|
INLINE
|
||||||
LOCAL(void)
|
LOCAL(void)
|
||||||
cmyk_to_rgb(JSAMPLE c, JSAMPLE m, JSAMPLE y, JSAMPLE k, JSAMPLE *r, JSAMPLE *g,
|
cmyk_to_rgb(_JSAMPLE c, _JSAMPLE m, _JSAMPLE y, _JSAMPLE k,
|
||||||
JSAMPLE *b)
|
_JSAMPLE *r, _JSAMPLE *g, _JSAMPLE *b)
|
||||||
{
|
{
|
||||||
*r = (JSAMPLE)((double)c * (double)k / 255.0 + 0.5);
|
*r = (_JSAMPLE)((double)c * (double)k / (double)_MAXJSAMPLE + 0.5);
|
||||||
*g = (JSAMPLE)((double)m * (double)k / 255.0 + 0.5);
|
*g = (_JSAMPLE)((double)m * (double)k / (double)_MAXJSAMPLE + 0.5);
|
||||||
*b = (JSAMPLE)((double)y * (double)k / 255.0 + 0.5);
|
*b = (_JSAMPLE)((double)y * (double)k / (double)_MAXJSAMPLE + 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
167
djpeg.1
@@ -1,4 +1,4 @@
|
|||||||
.TH DJPEG 1 "4 November 2020"
|
.TH DJPEG 1 "17 June 2024"
|
||||||
.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
|
||||||
@@ -29,47 +28,46 @@ Upper and lower case are equivalent (thus
|
|||||||
.B \-BMP
|
.B \-BMP
|
||||||
is the same as
|
is the same as
|
||||||
.BR \-bmp ).
|
.BR \-bmp ).
|
||||||
British spellings are also accepted (e.g.,
|
British spellings are also accepted (e.g.
|
||||||
.BR \-greyscale ),
|
.BR \-greyscale ),
|
||||||
though for brevity these are not mentioned below.
|
though for brevity these are not mentioned below.
|
||||||
.PP
|
.PP
|
||||||
The basic switches are:
|
The basic switches are:
|
||||||
.TP
|
.TP
|
||||||
.BI \-colors " N"
|
.BI \-colors " N"
|
||||||
Reduce image to at most N colors. This reduces the number of colors used in
|
Reduce image to at most N colors [legacy feature]. This reduces the number of
|
||||||
the output image, so that it can be displayed on a colormapped display or
|
colors used in the output image so that it can be stored in a colormapped file
|
||||||
stored in a colormapped file format. For example, if you have an 8-bit
|
format. This feature cannot be used when decompressing lossless JPEG images.
|
||||||
display, you'd need to reduce to 256 or fewer colors.
|
|
||||||
.TP
|
.TP
|
||||||
.BI \-quantize " N"
|
.BI \-quantize " N"
|
||||||
Same as
|
Same as
|
||||||
.BR \-colors .
|
.BR \-colors .
|
||||||
.B \-colors
|
.B \-colors
|
||||||
is the recommended name,
|
is the recommended name.
|
||||||
.B \-quantize
|
.B \-quantize
|
||||||
is provided only for backwards compatibility.
|
is provided only for backward compatibility.
|
||||||
.TP
|
.TP
|
||||||
.B \-fast
|
.B \-fast
|
||||||
Select recommended processing options for fast, low quality output. (The
|
Select recommended processing options for low-quality output [legacy feature].
|
||||||
default options are chosen for highest quality output.) Currently, this is
|
(The default options are chosen for highest-quality output.) Currently, this
|
||||||
equivalent to \fB\-dct fast \-nosmooth \-onepass \-dither ordered\fR.
|
is equivalent to \fB\-dct fast \-nosmooth \-onepass \-dither ordered\fR. On
|
||||||
|
modern CPUs, these settings have little or no performance benefit and are
|
||||||
|
retained solely for backward compatibility.
|
||||||
.TP
|
.TP
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
Force grayscale output even if JPEG file is color. Useful for viewing on
|
Force grayscale output even if JPEG file is full-color. This feature cannot be
|
||||||
monochrome displays; also,
|
used when decompressing full-color lossless JPEG images.
|
||||||
.B djpeg
|
|
||||||
runs noticeably faster in this mode.
|
|
||||||
.TP
|
.TP
|
||||||
.B \-rgb
|
.B \-rgb
|
||||||
Force RGB output even if JPEG file is grayscale.
|
Force RGB output even if JPEG file is grayscale. This feature cannot be used
|
||||||
|
when decompressing grayscale lossless JPEG images.
|
||||||
.TP
|
.TP
|
||||||
.BI \-scale " M/N"
|
.BI \-scale " M/N"
|
||||||
Scale the output image by a factor M/N. Currently the scale factor must be
|
Scale the output image by a factor M/N. Currently the scale factor must be
|
||||||
M/8, where M is an integer between 1 and 16 inclusive, or any reduced fraction
|
M/8, where M is an integer between 1 and 16 inclusive, or any reduced fraction
|
||||||
thereof (such as 1/2, 3/4, etc.) Scaling is handy if the image is larger than
|
thereof (such as 1/2, 3/4, etc.) Scaling is handy if the image is larger than
|
||||||
your screen; also,
|
your screen. This feature cannot be used when decompressing lossless JPEG
|
||||||
.B djpeg
|
images.
|
||||||
runs much faster when scaling down the output.
|
|
||||||
.TP
|
.TP
|
||||||
.B \-bmp
|
.B \-bmp
|
||||||
Select BMP output format (Windows flavor). 8-bit colormapped format is
|
Select BMP output format (Windows flavor). 8-bit colormapped format is
|
||||||
@@ -78,21 +76,36 @@ emitted if
|
|||||||
or
|
or
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
is specified, or if the JPEG file is grayscale; otherwise, 24-bit full-color
|
is specified, or if the JPEG file is grayscale; otherwise, 24-bit full-color
|
||||||
format is emitted.
|
format is emitted. This format can only be used when decompressing
|
||||||
|
8-bit-per-sample JPEG images.
|
||||||
.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) [legacy feature]. 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. This format can only be used when
|
||||||
|
decompressing 8-bit-per-sample or 12-bit-per-sample lossy JPEG images.
|
||||||
|
.TP
|
||||||
|
.B \-gif0
|
||||||
|
Select GIF output format (uncompressed) [legacy feature]. 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. This format can only be used when
|
||||||
|
decompressing 8-bit-per-sample or 12-bit-per-sample lossy JPEG images.
|
||||||
.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) [legacy feature]. 8-bit colormapped
|
||||||
emitted if
|
format is emitted if
|
||||||
.B \-colors
|
.B \-colors
|
||||||
or
|
or
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
is specified, or if the JPEG file is grayscale; otherwise, 24-bit full-color
|
is specified, or if the JPEG file is grayscale; otherwise, 24-bit full-color
|
||||||
format is emitted.
|
format is emitted. This format can only be used when decompressing
|
||||||
|
8-bit-per-sample JPEG images.
|
||||||
.TP
|
.TP
|
||||||
.B \-pnm
|
.B \-pnm
|
||||||
Select PBMPLUS (PPM/PGM) output format (this is the default format).
|
Select PBMPLUS (PPM/PGM) output format (this is the default format).
|
||||||
@@ -100,16 +113,14 @@ 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 [legacy feature]. Grayscale format is emitted if
|
||||||
grayscale or if
|
the JPEG file is grayscale or if
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
is specified; otherwise, colormapped format is emitted if
|
is specified; otherwise, colormapped format is emitted if
|
||||||
.B \-colors
|
.B \-colors
|
||||||
is specified; otherwise, 24-bit full-color format is emitted.
|
is specified; otherwise, 24-bit full-color format is emitted. This format can
|
||||||
|
only be used when decompressing 8-bit-per-sample JPEG images.
|
||||||
.PP
|
.PP
|
||||||
Switches for advanced users:
|
Switches for advanced users:
|
||||||
.TP
|
.TP
|
||||||
@@ -150,18 +161,18 @@ behavior, whereas the integer methods should give the same results on all
|
|||||||
machines.
|
machines.
|
||||||
.TP
|
.TP
|
||||||
.B \-dither fs
|
.B \-dither fs
|
||||||
Use Floyd-Steinberg dithering in color quantization.
|
Use Floyd-Steinberg dithering when quantizing colors [legacy feature].
|
||||||
.TP
|
.TP
|
||||||
.B \-dither ordered
|
.B \-dither ordered
|
||||||
Use ordered dithering in color quantization.
|
Use ordered dithering when quantizing colors [legacy feature].
|
||||||
.TP
|
.TP
|
||||||
.B \-dither none
|
.B \-dither none
|
||||||
Do not use dithering in color quantization.
|
Do not use dithering when quantizing colors [legacy feature]. By default,
|
||||||
By default, Floyd-Steinberg dithering is applied when quantizing colors; this
|
Floyd-Steinberg dithering is applied when quantizing colors. This is slower
|
||||||
is slow but usually produces the best results. Ordered dither is a compromise
|
but usually produces the best results. Ordered dithering is a compromise
|
||||||
between speed and quality; no dithering is fast but usually looks awful. Note
|
between speed and quality. No dithering is faster but usually looks awful.
|
||||||
that these switches have no effect unless color quantization is being done.
|
Note that these switches have no effect unless color quantization is being
|
||||||
Ordered dither is only available in
|
done. Ordered dithering is only available in
|
||||||
.B \-onepass
|
.B \-onepass
|
||||||
mode.
|
mode.
|
||||||
.TP
|
.TP
|
||||||
@@ -169,9 +180,9 @@ mode.
|
|||||||
Extract ICC color management profile to the specified file.
|
Extract ICC color management profile to the specified file.
|
||||||
.TP
|
.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 [legacy feature]. This
|
||||||
producing multiple files with identical color maps, or for forcing a
|
is useful for producing multiple files with identical color maps, or for
|
||||||
predefined set of colors to be used. The
|
forcing a predefined set of colors to be used. The
|
||||||
.I file
|
.I file
|
||||||
must be a GIF or PPM file. This option overrides
|
must be a GIF or PPM file. This option overrides
|
||||||
.B \-colors
|
.B \-colors
|
||||||
@@ -182,14 +193,14 @@ and
|
|||||||
Use a faster, lower-quality upsampling routine.
|
Use a faster, lower-quality upsampling routine.
|
||||||
.TP
|
.TP
|
||||||
.B \-onepass
|
.B \-onepass
|
||||||
Use one-pass instead of two-pass color quantization. The one-pass method is
|
Use one-pass instead of two-pass color quantization [legacy feature]. The
|
||||||
faster and needs less memory, but it produces a lower-quality image.
|
one-pass method needs less memory, but it produces a lower-quality image.
|
||||||
.B \-onepass
|
.B \-onepass
|
||||||
is ignored unless you also say
|
is ignored unless you also specify
|
||||||
.B \-colors
|
.B \-colors
|
||||||
.IR N .
|
.IR N .
|
||||||
Also, the one-pass method is always used for grayscale output (the two-pass
|
Also, the one-pass method is always used for grayscale output. (The two-pass
|
||||||
method is no improvement then).
|
method has no improvement in that case.)
|
||||||
.TP
|
.TP
|
||||||
.BI \-maxmemory " N"
|
.BI \-maxmemory " N"
|
||||||
Set limit for amount of memory to use in processing large images. Value is
|
Set limit for amount of memory to use in processing large images. Value is
|
||||||
@@ -198,6 +209,19 @@ number. For example,
|
|||||||
.B \-max 4m
|
.B \-max 4m
|
||||||
selects 4000000 bytes. If more space is needed, an error will occur.
|
selects 4000000 bytes. If more space is needed, an error will occur.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-maxscans " N"
|
||||||
|
Abort if the JPEG image contains more than
|
||||||
|
.I N
|
||||||
|
scans. This feature demonstrates a method by which applications can guard
|
||||||
|
against denial-of-service attacks instigated by specially-crafted malformed
|
||||||
|
JPEG images containing numerous scans with missing image data or image data
|
||||||
|
consisting only of "EOB runs" (a feature of progressive JPEG images that allows
|
||||||
|
potentially hundreds of thousands of adjoining zero-value pixels to be
|
||||||
|
represented using only a few bytes.) Attempting to decompress such malformed
|
||||||
|
JPEG images can cause excessive CPU activity, since the decompressor must fully
|
||||||
|
process each scan (even if the scan is corrupt) before it can proceed to the
|
||||||
|
next scan.
|
||||||
|
.TP
|
||||||
.BI \-outfile " name"
|
.BI \-outfile " name"
|
||||||
Send output image to the named file, not to standard output.
|
Send output image to the named file, not to standard output.
|
||||||
.TP
|
.TP
|
||||||
@@ -205,6 +229,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
|
||||||
@@ -218,6 +245,12 @@ decompression scaling is being used, then X, Y, W, and H are relative to the
|
|||||||
scaled image dimensions. Currently this option only works with the
|
scaled image dimensions. Currently this option only works with the
|
||||||
PBMPLUS (PPM/PGM), GIF, and Targa output formats.
|
PBMPLUS (PPM/PGM), GIF, and Targa output formats.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-strict
|
||||||
|
Treat all warnings as fatal. This feature also demonstrates a method by which
|
||||||
|
applications can guard against attacks instigated by specially-crafted
|
||||||
|
malformed JPEG images. Enabling this option will cause the decompressor to
|
||||||
|
abort if the JPEG image contains incomplete or corrupt image data.
|
||||||
|
.TP
|
||||||
.B \-verbose
|
.B \-verbose
|
||||||
Enable debug printout. More
|
Enable debug printout. More
|
||||||
.BR \-v 's
|
.BR \-v 's
|
||||||
@@ -231,36 +264,13 @@ Same as
|
|||||||
Print version information and exit.
|
Print version information and exit.
|
||||||
.SH EXAMPLES
|
.SH EXAMPLES
|
||||||
.LP
|
.LP
|
||||||
This example decompresses the JPEG file foo.jpg, quantizes it to
|
This example decompresses the JPEG file foo.jpg and saves the output in 8-bit
|
||||||
256 colors, and saves the output in 8-bit BMP format in foo.bmp:
|
BMP format in foo.bmp:
|
||||||
.IP
|
.IP
|
||||||
.B djpeg \-colors 256 \-bmp
|
.B djpeg \-bmp
|
||||||
.I foo.jpg
|
.I foo.jpg
|
||||||
.B >
|
.B >
|
||||||
.I foo.bmp
|
.I foo.bmp
|
||||||
.SH HINTS
|
|
||||||
To get a quick preview of an image, use the
|
|
||||||
.B \-grayscale
|
|
||||||
and/or
|
|
||||||
.B \-scale
|
|
||||||
switches.
|
|
||||||
.B \-grayscale \-scale 1/8
|
|
||||||
is the fastest case.
|
|
||||||
.PP
|
|
||||||
Several options are available that trade off image quality to gain speed.
|
|
||||||
.B \-fast
|
|
||||||
turns on the recommended settings.
|
|
||||||
.PP
|
|
||||||
.B \-dct fast
|
|
||||||
and/or
|
|
||||||
.B \-nosmooth
|
|
||||||
gain speed at a small sacrifice in quality.
|
|
||||||
When producing a color-quantized image,
|
|
||||||
.B \-onepass \-dither ordered
|
|
||||||
is fast but much lower quality than the default behavior.
|
|
||||||
.B \-dither none
|
|
||||||
may give acceptable results in two-pass mode, but is seldom tolerable in
|
|
||||||
one-pass mode.
|
|
||||||
.SH ENVIRONMENT
|
.SH ENVIRONMENT
|
||||||
.TP
|
.TP
|
||||||
.B JPEGMEM
|
.B JPEGMEM
|
||||||
@@ -289,10 +299,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.
|
|
||||||
|
|||||||
367
djpeg.c
@@ -3,9 +3,9 @@
|
|||||||
*
|
*
|
||||||
* This file was part of the Independent JPEG Group's software:
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
* Modified 2013 by Guido Vollbeding.
|
* Modified 2013-2019 by Guido Vollbeding.
|
||||||
* libjpeg-turbo Modifications:
|
* libjpeg-turbo Modifications:
|
||||||
* Copyright (C) 2010-2011, 2013-2017, 2020, D. R. Commander.
|
* Copyright (C) 2010-2011, 2013-2017, 2019-2020, 2022-2024, D. R. Commander.
|
||||||
* Copyright (C) 2015, Google, Inc.
|
* Copyright (C) 2015, Google, Inc.
|
||||||
* For conditions of distribution and use, see the accompanying README.ijg
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
* file.
|
* file.
|
||||||
@@ -28,26 +28,16 @@
|
|||||||
* works regardless of which command line style is used.
|
* works regardless of which command line style is used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
||||||
#include "jversion.h" /* for version message */
|
#include "jversion.h" /* for version message */
|
||||||
#include "jconfigint.h"
|
#include "jconfigint.h"
|
||||||
|
|
||||||
#ifndef HAVE_STDLIB_H /* <stdlib.h> should declare free() */
|
|
||||||
extern void free(void *ptr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <ctype.h> /* to declare isprint() */
|
#include <ctype.h> /* to declare isprint() */
|
||||||
|
|
||||||
#ifdef USE_CCOMMAND /* command-line reader for Macintosh */
|
|
||||||
#ifdef __MWERKS__
|
|
||||||
#include <SIOUX.h> /* Metrowerks needs this */
|
|
||||||
#include <console.h> /* ... and this */
|
|
||||||
#endif
|
|
||||||
#ifdef THINK_C
|
|
||||||
#include <console.h> /* Think declares it here */
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Create the add-on message string table. */
|
/* Create the add-on message string table. */
|
||||||
|
|
||||||
@@ -68,10 +58,10 @@ static const char * const cdjpeg_message_table[] = {
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FMT_BMP, /* BMP format (Windows flavor) */
|
FMT_BMP, /* BMP format (Windows flavor) */
|
||||||
FMT_GIF, /* GIF format */
|
FMT_GIF, /* GIF format (LZW-compressed) */
|
||||||
|
FMT_GIF0, /* GIF format (uncompressed) */
|
||||||
FMT_OS2, /* BMP format (OS/2 flavor) */
|
FMT_OS2, /* BMP format (OS/2 flavor) */
|
||||||
FMT_PPM, /* PPM/PGM (PBMPLUS formats) */
|
FMT_PPM, /* PPM/PGM (PBMPLUS formats) */
|
||||||
FMT_RLE, /* RLE format */
|
|
||||||
FMT_TARGA, /* Targa format */
|
FMT_TARGA, /* Targa format */
|
||||||
FMT_TIFF /* TIFF format */
|
FMT_TIFF /* TIFF format */
|
||||||
} IMAGE_FORMATS;
|
} IMAGE_FORMATS;
|
||||||
@@ -94,11 +84,14 @@ static IMAGE_FORMATS requested_fmt;
|
|||||||
|
|
||||||
static const char *progname; /* program name for error messages */
|
static const char *progname; /* program name for error messages */
|
||||||
static char *icc_filename; /* for -icc switch */
|
static char *icc_filename; /* for -icc switch */
|
||||||
|
static JDIMENSION max_scans; /* for -maxscans switch */
|
||||||
static char *outfilename; /* for -outfile switch */
|
static char *outfilename; /* for -outfile switch */
|
||||||
boolean memsrc; /* for -memsrc switch */
|
static boolean memsrc; /* for -memsrc switch */
|
||||||
boolean skip, crop;
|
static boolean report; /* for -report switch */
|
||||||
JDIMENSION skip_start, skip_end;
|
static boolean skip, crop;
|
||||||
JDIMENSION crop_x, crop_y, crop_width, crop_height;
|
static JDIMENSION skip_start, skip_end;
|
||||||
|
static JDIMENSION crop_x, crop_y, crop_width, crop_height;
|
||||||
|
static boolean strict; /* for -strict switch */
|
||||||
#define INPUT_BUF_SIZE 4096
|
#define INPUT_BUF_SIZE 4096
|
||||||
|
|
||||||
|
|
||||||
@@ -114,8 +107,8 @@ usage(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
fprintf(stderr, "Switches (names may be abbreviated):\n");
|
fprintf(stderr, "Switches (names may be abbreviated):\n");
|
||||||
fprintf(stderr, " -colors N Reduce image to no more than N colors\n");
|
fprintf(stderr, " -colors N Reduce image to no more than N colors [legacy feature]\n");
|
||||||
fprintf(stderr, " -fast Fast, low-quality processing\n");
|
fprintf(stderr, " -fast Low-quality processing [legacy feature]\n");
|
||||||
fprintf(stderr, " -grayscale Force grayscale output\n");
|
fprintf(stderr, " -grayscale Force grayscale output\n");
|
||||||
fprintf(stderr, " -rgb Force RGB output\n");
|
fprintf(stderr, " -rgb Force RGB output\n");
|
||||||
fprintf(stderr, " -rgb565 Force RGB565 output\n");
|
fprintf(stderr, " -rgb565 Force RGB565 output\n");
|
||||||
@@ -127,23 +120,21 @@ 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 [legacy feature]\n",
|
||||||
(DEFAULT_FMT == FMT_GIF ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_GIF ? " (default)" : ""));
|
||||||
|
fprintf(stderr, " -gif0 Select GIF output format (uncompressed)%s [legacy feature]\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 [legacy feature]\n",
|
||||||
(DEFAULT_FMT == FMT_OS2 ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_OS2 ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef PPM_SUPPORTED
|
#ifdef PPM_SUPPORTED
|
||||||
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 [legacy feature]\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");
|
||||||
@@ -159,26 +150,28 @@ usage(void)
|
|||||||
fprintf(stderr, " -dct float Use floating-point DCT method [legacy feature]%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 Floyd-Steinberg dithering when quantizing colors (default)\n");
|
||||||
fprintf(stderr, " -dither none Don't use dithering in quantization\n");
|
fprintf(stderr, " [legacy feature]\n");
|
||||||
fprintf(stderr, " -dither ordered Use ordered dither (medium speed, quality)\n");
|
fprintf(stderr, " -dither none Don't use dithering when quantizing colors [legacy feature]\n");
|
||||||
|
fprintf(stderr, " -dither ordered Use ordered dithering when quantizing colors\n");
|
||||||
|
fprintf(stderr, " [legacy feature]\n");
|
||||||
fprintf(stderr, " -icc FILE Extract ICC profile to FILE\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 Quantize to colors used in named image file [legacy feature]\n");
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, " -nosmooth Don't use high-quality upsampling\n");
|
fprintf(stderr, " -nosmooth Use faster, lower-quality upsampling\n");
|
||||||
#ifdef QUANT_1PASS_SUPPORTED
|
#ifdef QUANT_1PASS_SUPPORTED
|
||||||
fprintf(stderr, " -onepass Use 1-pass quantization (fast, low quality)\n");
|
fprintf(stderr, " -onepass Use 1-pass color quantization (low quality) [legacy feature]\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)
|
|
||||||
fprintf(stderr, " -memsrc Load input file into memory before decompressing\n");
|
fprintf(stderr, " -memsrc Load input file into memory before decompressing\n");
|
||||||
#endif
|
fprintf(stderr, " -report Report decompression progress\n");
|
||||||
|
|
||||||
fprintf(stderr, " -skip Y0,Y1 Decompress all rows except those between Y0 and Y1 (inclusive)\n");
|
fprintf(stderr, " -skip Y0,Y1 Decompress all rows except those between Y0 and Y1 (inclusive)\n");
|
||||||
fprintf(stderr, " -crop WxH+X+Y Decompress only a rectangular subregion of the image\n");
|
fprintf(stderr, " -crop WxH+X+Y Decompress only a rectangular subregion of the image\n");
|
||||||
fprintf(stderr, " [requires PBMPLUS (PPM/PGM), GIF, or Targa output format]\n");
|
fprintf(stderr, " [requires PBMPLUS (PPM/PGM), GIF, or Targa output format]\n");
|
||||||
|
fprintf(stderr, " -strict Treat all warnings as fatal\n");
|
||||||
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
fprintf(stderr, " -verbose or -debug Emit debug output\n");
|
||||||
fprintf(stderr, " -version Print version information and exit\n");
|
fprintf(stderr, " -version Print version information and exit\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
@@ -203,10 +196,13 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
/* Set up default JPEG parameters. */
|
/* Set up default JPEG parameters. */
|
||||||
requested_fmt = DEFAULT_FMT; /* set default output file format */
|
requested_fmt = DEFAULT_FMT; /* set default output file format */
|
||||||
icc_filename = NULL;
|
icc_filename = NULL;
|
||||||
|
max_scans = 0;
|
||||||
outfilename = NULL;
|
outfilename = NULL;
|
||||||
memsrc = FALSE;
|
memsrc = FALSE;
|
||||||
|
report = FALSE;
|
||||||
skip = FALSE;
|
skip = FALSE;
|
||||||
crop = FALSE;
|
crop = FALSE;
|
||||||
|
strict = FALSE;
|
||||||
cinfo->err->trace_level = 0;
|
cinfo->err->trace_level = 0;
|
||||||
|
|
||||||
/* Scan command line options, adjust parameters */
|
/* Scan command line options, adjust parameters */
|
||||||
@@ -224,7 +220,7 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
arg++; /* advance past switch marker character */
|
arg++; /* advance past switch marker character */
|
||||||
|
|
||||||
if (keymatch(arg, "bmp", 1)) {
|
if (keymatch(arg, "bmp", 1)) {
|
||||||
/* BMP output format. */
|
/* BMP output format (Windows flavor). */
|
||||||
requested_fmt = FMT_BMP;
|
requested_fmt = FMT_BMP;
|
||||||
|
|
||||||
} else if (keymatch(arg, "colors", 1) || keymatch(arg, "colours", 1) ||
|
} else if (keymatch(arg, "colors", 1) || keymatch(arg, "colours", 1) ||
|
||||||
@@ -273,7 +269,8 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
if (!printed_version) {
|
if (!printed_version) {
|
||||||
fprintf(stderr, "%s version %s (build %s)\n",
|
fprintf(stderr, "%s version %s (build %s)\n",
|
||||||
PACKAGE_NAME, VERSION, BUILD);
|
PACKAGE_NAME, VERSION, BUILD);
|
||||||
fprintf(stderr, "%s\n\n", JCOPYRIGHT);
|
fprintf(stderr, JCOPYRIGHT1);
|
||||||
|
fprintf(stderr, JCOPYRIGHT2 "\n");
|
||||||
fprintf(stderr, "Emulating The Independent JPEG Group's software, version %s\n\n",
|
fprintf(stderr, "Emulating The Independent JPEG Group's software, version %s\n\n",
|
||||||
JVERSION);
|
JVERSION);
|
||||||
printed_version = TRUE;
|
printed_version = TRUE;
|
||||||
@@ -295,9 +292,13 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
cinfo->do_fancy_upsampling = FALSE;
|
cinfo->do_fancy_upsampling = FALSE;
|
||||||
|
|
||||||
} else if (keymatch(arg, "gif", 1)) {
|
} else if (keymatch(arg, "gif", 1)) {
|
||||||
/* GIF output format. */
|
/* GIF output format (LZW-compressed). */
|
||||||
requested_fmt = FMT_GIF;
|
requested_fmt = FMT_GIF;
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "gif0", 4)) {
|
||||||
|
/* GIF output format (uncompressed). */
|
||||||
|
requested_fmt = FMT_GIF0;
|
||||||
|
|
||||||
} else if (keymatch(arg, "grayscale", 2) ||
|
} else if (keymatch(arg, "grayscale", 2) ||
|
||||||
keymatch(arg, "greyscale", 2)) {
|
keymatch(arg, "greyscale", 2)) {
|
||||||
/* Force monochrome output. */
|
/* Force monochrome output. */
|
||||||
@@ -316,7 +317,9 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
icc_filename = argv[argn];
|
icc_filename = argv[argn];
|
||||||
|
#ifdef SAVE_MARKERS_SUPPORTED
|
||||||
jpeg_save_markers(cinfo, JPEG_APP0 + 2, 0xFFFF);
|
jpeg_save_markers(cinfo, JPEG_APP0 + 2, 0xFFFF);
|
||||||
|
#endif
|
||||||
|
|
||||||
} 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. */
|
||||||
@@ -330,7 +333,10 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]);
|
fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
read_color_map(cinfo, mapfile);
|
if (cinfo->data_precision == 12)
|
||||||
|
read_color_map_12(cinfo, mapfile);
|
||||||
|
else
|
||||||
|
read_color_map(cinfo, mapfile);
|
||||||
fclose(mapfile);
|
fclose(mapfile);
|
||||||
cinfo->quantize_colors = TRUE;
|
cinfo->quantize_colors = TRUE;
|
||||||
#else
|
#else
|
||||||
@@ -351,6 +357,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;
|
||||||
@@ -371,23 +383,16 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
|
|
||||||
} else if (keymatch(arg, "memsrc", 2)) {
|
} else if (keymatch(arg, "memsrc", 2)) {
|
||||||
/* Use in-memory source manager */
|
/* Use in-memory source manager */
|
||||||
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
|
|
||||||
memsrc = TRUE;
|
memsrc = TRUE;
|
||||||
#else
|
|
||||||
fprintf(stderr, "%s: sorry, in-memory source manager was not compiled in\n",
|
|
||||||
progname);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} else if (keymatch(arg, "pnm", 1) || keymatch(arg, "ppm", 1)) {
|
} else if (keymatch(arg, "pnm", 1) || keymatch(arg, "ppm", 1)) {
|
||||||
/* PPM/PGM output format. */
|
/* PPM/PGM output format. */
|
||||||
requested_fmt = FMT_PPM;
|
requested_fmt = FMT_PPM;
|
||||||
|
|
||||||
} 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", 1)) {
|
||||||
/* Scale the output image by a fraction M/N. */
|
/* Scale the output image by a fraction M/N. */
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
@@ -396,22 +401,34 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
usage();
|
usage();
|
||||||
|
|
||||||
} else if (keymatch(arg, "skip", 2)) {
|
} else if (keymatch(arg, "skip", 2)) {
|
||||||
|
int temp_start = -1, temp_end = -1;
|
||||||
if (++argn >= argc)
|
if (++argn >= argc)
|
||||||
usage();
|
usage();
|
||||||
if (sscanf(argv[argn], "%u,%u", &skip_start, &skip_end) != 2 ||
|
if (sscanf(argv[argn], "%d,%d", &temp_start, &temp_end) != 2 ||
|
||||||
skip_start > skip_end)
|
temp_start < 0 || temp_end < 0 || temp_start > temp_end)
|
||||||
usage();
|
usage();
|
||||||
skip = TRUE;
|
skip = TRUE;
|
||||||
|
skip_start = temp_start;
|
||||||
|
skip_end = temp_end;
|
||||||
|
|
||||||
} else if (keymatch(arg, "crop", 2)) {
|
} else if (keymatch(arg, "crop", 2)) {
|
||||||
|
int temp_width = -1, temp_height = -1, temp_x = -1, temp_y = -1;
|
||||||
char c;
|
char c;
|
||||||
if (++argn >= argc)
|
if (++argn >= argc)
|
||||||
usage();
|
usage();
|
||||||
if (sscanf(argv[argn], "%u%c%u+%u+%u", &crop_width, &c, &crop_height,
|
if (sscanf(argv[argn], "%d%c%d+%d+%d", &temp_width, &c, &temp_height,
|
||||||
&crop_x, &crop_y) != 5 ||
|
&temp_x, &temp_y) != 5 ||
|
||||||
(c != 'X' && c != 'x') || crop_width < 1 || crop_height < 1)
|
(c != 'X' && c != 'x') || temp_width < 1 || temp_height < 1 ||
|
||||||
|
temp_x < 0 || temp_y < 0)
|
||||||
usage();
|
usage();
|
||||||
crop = TRUE;
|
crop = TRUE;
|
||||||
|
crop_width = temp_width;
|
||||||
|
crop_height = temp_height;
|
||||||
|
crop_x = temp_x;
|
||||||
|
crop_y = temp_y;
|
||||||
|
|
||||||
|
} 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. */
|
||||||
@@ -444,7 +461,7 @@ jpeg_getc(j_decompress_ptr cinfo)
|
|||||||
ERREXIT(cinfo, JERR_CANT_SUSPEND);
|
ERREXIT(cinfo, JERR_CANT_SUSPEND);
|
||||||
}
|
}
|
||||||
datasrc->bytes_in_buffer--;
|
datasrc->bytes_in_buffer--;
|
||||||
return GETJOCTET(*datasrc->next_input_byte++);
|
return *datasrc->next_input_byte++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -499,6 +516,19 @@ print_text_marker(j_decompress_ptr cinfo)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
METHODDEF(void)
|
||||||
|
my_emit_message(j_common_ptr cinfo, int msg_level)
|
||||||
|
{
|
||||||
|
if (msg_level < 0) {
|
||||||
|
/* Treat warning as fatal */
|
||||||
|
cinfo->err->error_exit(cinfo);
|
||||||
|
} else {
|
||||||
|
if (cinfo->err->trace_level >= msg_level)
|
||||||
|
cinfo->err->output_message(cinfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The main program.
|
* The main program.
|
||||||
*/
|
*/
|
||||||
@@ -508,24 +538,15 @@ 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;
|
||||||
#endif
|
|
||||||
JDIMENSION num_scanlines;
|
JDIMENSION num_scanlines;
|
||||||
|
|
||||||
/* On Mac, fetch a command line. */
|
|
||||||
#ifdef USE_CCOMMAND
|
|
||||||
argc = ccommand(&argv);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
progname = argv[0];
|
progname = argv[0];
|
||||||
if (progname == NULL || progname[0] == 0)
|
if (progname == NULL || progname[0] == 0)
|
||||||
progname = "djpeg"; /* in case C library doesn't provide it */
|
progname = "djpeg"; /* in case C library doesn't provide it */
|
||||||
@@ -557,6 +578,9 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
file_index = parse_switches(&cinfo, argc, argv, 0, FALSE);
|
||||||
|
|
||||||
|
if (strict)
|
||||||
|
jerr.emit_message = my_emit_message;
|
||||||
|
|
||||||
#ifdef TWO_FILE_COMMANDLINE
|
#ifdef TWO_FILE_COMMANDLINE
|
||||||
/* Must have either -outfile switch or explicit output file name */
|
/* Must have either -outfile switch or explicit output file name */
|
||||||
if (outfilename == NULL) {
|
if (outfilename == NULL) {
|
||||||
@@ -603,12 +627,13 @@ 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 (memsrc) {
|
if (memsrc) {
|
||||||
size_t nbytes;
|
size_t nbytes;
|
||||||
do {
|
do {
|
||||||
@@ -617,7 +642,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,
|
||||||
@@ -630,7 +655,6 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr, "Compressed size: %lu bytes\n", insize);
|
fprintf(stderr, "Compressed size: %lu bytes\n", insize);
|
||||||
jpeg_mem_src(&cinfo, inbuffer, insize);
|
jpeg_mem_src(&cinfo, inbuffer, insize);
|
||||||
} else
|
} else
|
||||||
#endif
|
|
||||||
jpeg_stdio_src(&cinfo, input_file);
|
jpeg_stdio_src(&cinfo, input_file);
|
||||||
|
|
||||||
/* Read file header, set default decompression parameters */
|
/* Read file header, set default decompression parameters */
|
||||||
@@ -653,17 +677,29 @@ main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
#ifdef GIF_SUPPORTED
|
#ifdef GIF_SUPPORTED
|
||||||
case FMT_GIF:
|
case FMT_GIF:
|
||||||
dest_mgr = jinit_write_gif(&cinfo);
|
if (cinfo.data_precision == 16)
|
||||||
|
ERREXIT1(&cinfo, JERR_BAD_PRECISION, cinfo.data_precision);
|
||||||
|
else if (cinfo.data_precision == 12)
|
||||||
|
dest_mgr = j12init_write_gif(&cinfo, TRUE);
|
||||||
|
else
|
||||||
|
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
|
||||||
case FMT_PPM:
|
case FMT_PPM:
|
||||||
dest_mgr = jinit_write_ppm(&cinfo);
|
if (cinfo.data_precision == 16)
|
||||||
break;
|
#ifdef D_LOSSLESS_SUPPORTED
|
||||||
|
dest_mgr = j16init_write_ppm(&cinfo);
|
||||||
|
#else
|
||||||
|
ERREXIT1(&cinfo, JERR_BAD_PRECISION, cinfo.data_precision);
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLE_SUPPORTED
|
else if (cinfo.data_precision == 12)
|
||||||
case FMT_RLE:
|
dest_mgr = j12init_write_ppm(&cinfo);
|
||||||
dest_mgr = jinit_write_rle(&cinfo);
|
else
|
||||||
|
dest_mgr = jinit_write_ppm(&cinfo);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef TARGA_SUPPORTED
|
#ifdef TARGA_SUPPORTED
|
||||||
@@ -689,7 +725,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);
|
||||||
}
|
}
|
||||||
@@ -702,22 +738,44 @@ main(int argc, char **argv)
|
|||||||
(*dest_mgr->start_output) (&cinfo, dest_mgr);
|
(*dest_mgr->start_output) (&cinfo, dest_mgr);
|
||||||
cinfo.output_height = tmp;
|
cinfo.output_height = tmp;
|
||||||
|
|
||||||
/* Process data */
|
if (cinfo.data_precision == 16)
|
||||||
while (cinfo.output_scanline < skip_start) {
|
ERREXIT(&cinfo, JERR_NOTIMPL);
|
||||||
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
else if (cinfo.data_precision == 12) {
|
||||||
dest_mgr->buffer_height);
|
/* Process data */
|
||||||
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
while (cinfo.output_scanline < skip_start) {
|
||||||
}
|
num_scanlines = jpeg12_read_scanlines(&cinfo, dest_mgr->buffer12,
|
||||||
if ((tmp = jpeg_skip_scanlines(&cinfo, skip_end - skip_start + 1)) !=
|
dest_mgr->buffer_height);
|
||||||
skip_end - skip_start + 1) {
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
fprintf(stderr, "%s: jpeg_skip_scanlines() returned %d rather than %d\n",
|
}
|
||||||
progname, tmp, skip_end - skip_start + 1);
|
if ((tmp = jpeg12_skip_scanlines(&cinfo, skip_end - skip_start + 1)) !=
|
||||||
exit(EXIT_FAILURE);
|
skip_end - skip_start + 1) {
|
||||||
}
|
fprintf(stderr, "%s: jpeg12_skip_scanlines() returned %u rather than %u\n",
|
||||||
while (cinfo.output_scanline < cinfo.output_height) {
|
progname, tmp, skip_end - skip_start + 1);
|
||||||
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
exit(EXIT_FAILURE);
|
||||||
dest_mgr->buffer_height);
|
}
|
||||||
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
while (cinfo.output_scanline < cinfo.output_height) {
|
||||||
|
num_scanlines = jpeg12_read_scanlines(&cinfo, dest_mgr->buffer12,
|
||||||
|
dest_mgr->buffer_height);
|
||||||
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Process data */
|
||||||
|
while (cinfo.output_scanline < skip_start) {
|
||||||
|
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
||||||
|
dest_mgr->buffer_height);
|
||||||
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
|
}
|
||||||
|
if ((tmp = jpeg_skip_scanlines(&cinfo, skip_end - skip_start + 1)) !=
|
||||||
|
skip_end - skip_start + 1) {
|
||||||
|
fprintf(stderr, "%s: jpeg_skip_scanlines() returned %u rather than %u\n",
|
||||||
|
progname, tmp, skip_end - skip_start + 1);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
while (cinfo.output_scanline < cinfo.output_height) {
|
||||||
|
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
||||||
|
dest_mgr->buffer_height);
|
||||||
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Decompress a subregion */
|
/* Decompress a subregion */
|
||||||
@@ -727,14 +785,19 @@ main(int argc, char **argv)
|
|||||||
/* Check for valid crop dimensions. We cannot check these values until
|
/* Check for valid crop dimensions. We cannot check these values until
|
||||||
* after jpeg_start_decompress() is called.
|
* after jpeg_start_decompress() is called.
|
||||||
*/
|
*/
|
||||||
if (crop_x + crop_width > cinfo.output_width ||
|
if ((unsigned long long)crop_x + crop_width > cinfo.output_width ||
|
||||||
crop_y + crop_height > cinfo.output_height) {
|
(unsigned long long)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);
|
if (cinfo.data_precision == 16)
|
||||||
|
ERREXIT(&cinfo, JERR_NOTIMPL);
|
||||||
|
else if (cinfo.data_precision == 12)
|
||||||
|
jpeg12_crop_scanline(&cinfo, &crop_x, &crop_width);
|
||||||
|
else
|
||||||
|
jpeg_crop_scanline(&cinfo, &crop_x, &crop_width);
|
||||||
if (dest_mgr->calc_buffer_dimensions)
|
if (dest_mgr->calc_buffer_dimensions)
|
||||||
(*dest_mgr->calc_buffer_dimensions) (&cinfo, dest_mgr);
|
(*dest_mgr->calc_buffer_dimensions) (&cinfo, dest_mgr);
|
||||||
else
|
else
|
||||||
@@ -748,24 +811,48 @@ main(int argc, char **argv)
|
|||||||
(*dest_mgr->start_output) (&cinfo, dest_mgr);
|
(*dest_mgr->start_output) (&cinfo, dest_mgr);
|
||||||
cinfo.output_height = tmp;
|
cinfo.output_height = tmp;
|
||||||
|
|
||||||
/* Process data */
|
if (cinfo.data_precision == 16)
|
||||||
if ((tmp = jpeg_skip_scanlines(&cinfo, crop_y)) != crop_y) {
|
ERREXIT(&cinfo, JERR_NOTIMPL);
|
||||||
fprintf(stderr, "%s: jpeg_skip_scanlines() returned %d rather than %d\n",
|
else if (cinfo.data_precision == 12) {
|
||||||
progname, tmp, crop_y);
|
/* Process data */
|
||||||
exit(EXIT_FAILURE);
|
if ((tmp = jpeg12_skip_scanlines(&cinfo, crop_y)) != crop_y) {
|
||||||
}
|
fprintf(stderr, "%s: jpeg12_skip_scanlines() returned %u rather than %u\n",
|
||||||
while (cinfo.output_scanline < crop_y + crop_height) {
|
progname, tmp, crop_y);
|
||||||
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
exit(EXIT_FAILURE);
|
||||||
dest_mgr->buffer_height);
|
}
|
||||||
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
while (cinfo.output_scanline < crop_y + crop_height) {
|
||||||
}
|
num_scanlines = jpeg12_read_scanlines(&cinfo, dest_mgr->buffer12,
|
||||||
if ((tmp =
|
dest_mgr->buffer_height);
|
||||||
jpeg_skip_scanlines(&cinfo,
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
cinfo.output_height - crop_y - crop_height)) !=
|
}
|
||||||
cinfo.output_height - crop_y - crop_height) {
|
if ((tmp =
|
||||||
fprintf(stderr, "%s: jpeg_skip_scanlines() returned %d rather than %d\n",
|
jpeg12_skip_scanlines(&cinfo, cinfo.output_height - crop_y -
|
||||||
progname, tmp, cinfo.output_height - crop_y - crop_height);
|
crop_height)) !=
|
||||||
exit(EXIT_FAILURE);
|
cinfo.output_height - crop_y - crop_height) {
|
||||||
|
fprintf(stderr, "%s: jpeg12_skip_scanlines() returned %u rather than %u\n",
|
||||||
|
progname, tmp, cinfo.output_height - crop_y - crop_height);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Process data */
|
||||||
|
if ((tmp = jpeg_skip_scanlines(&cinfo, crop_y)) != crop_y) {
|
||||||
|
fprintf(stderr, "%s: jpeg_skip_scanlines() returned %u rather than %u\n",
|
||||||
|
progname, tmp, crop_y);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
while (cinfo.output_scanline < crop_y + crop_height) {
|
||||||
|
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
||||||
|
dest_mgr->buffer_height);
|
||||||
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
|
}
|
||||||
|
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 */
|
||||||
@@ -773,20 +860,39 @@ main(int argc, char **argv)
|
|||||||
/* Write output file header */
|
/* Write output file header */
|
||||||
(*dest_mgr->start_output) (&cinfo, dest_mgr);
|
(*dest_mgr->start_output) (&cinfo, dest_mgr);
|
||||||
|
|
||||||
/* Process data */
|
if (cinfo.data_precision == 16) {
|
||||||
while (cinfo.output_scanline < cinfo.output_height) {
|
#ifdef D_LOSSLESS_SUPPORTED
|
||||||
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
/* Process data */
|
||||||
dest_mgr->buffer_height);
|
while (cinfo.output_scanline < cinfo.output_height) {
|
||||||
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
num_scanlines = jpeg16_read_scanlines(&cinfo, dest_mgr->buffer16,
|
||||||
|
dest_mgr->buffer_height);
|
||||||
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
ERREXIT1(&cinfo, JERR_BAD_PRECISION, cinfo.data_precision);
|
||||||
|
#endif
|
||||||
|
} else if (cinfo.data_precision == 12) {
|
||||||
|
/* Process data */
|
||||||
|
while (cinfo.output_scanline < cinfo.output_height) {
|
||||||
|
num_scanlines = jpeg12_read_scanlines(&cinfo, dest_mgr->buffer12,
|
||||||
|
dest_mgr->buffer_height);
|
||||||
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Process data */
|
||||||
|
while (cinfo.output_scanline < cinfo.output_height) {
|
||||||
|
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
||||||
|
dest_mgr->buffer_height);
|
||||||
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
|
||||||
/* Hack: count final pass as done in case finish_output does an extra pass.
|
/* Hack: count final pass as done in case finish_output does an extra pass.
|
||||||
* The library won't have updated completed_passes.
|
* The library won't have updated completed_passes.
|
||||||
*/
|
*/
|
||||||
progress.pub.completed_passes = progress.pub.total_passes;
|
if (report || max_scans != 0)
|
||||||
#endif
|
progress.pub.completed_passes = progress.pub.total_passes;
|
||||||
|
|
||||||
if (icc_filename != NULL) {
|
if (icc_filename != NULL) {
|
||||||
FILE *icc_file;
|
FILE *icc_file;
|
||||||
@@ -825,9 +931,8 @@ main(int argc, char **argv)
|
|||||||
if (output_file != stdout)
|
if (output_file != stdout)
|
||||||
fclose(output_file);
|
fclose(output_file);
|
||||||
|
|
||||||
#ifdef PROGRESS_REPORT
|
if (report || max_scans != 0)
|
||||||
end_progress_monitor((j_common_ptr)&cinfo);
|
end_progress_monitor((j_common_ptr)&cinfo);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (memsrc)
|
if (memsrc)
|
||||||
free(inbuffer);
|
free(inbuffer);
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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" lang="en-US">
|
||||||
<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=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.20"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<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"/>
|
||||||
@@ -20,10 +20,9 @@
|
|||||||
<div id="titlearea">
|
<div id="titlearea">
|
||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr id="projectrow">
|
||||||
<td id="projectalign" style="padding-left: 0.5em;">
|
<td id="projectalign">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG<span id="projectnumber"> 3.0.1</span>
|
||||||
 <span id="projectnumber">2.0</span>
|
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -31,21 +30,22 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.20 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<script type="text/javascript" src="menu.js"></script>
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
$(function() {
|
$(function() {
|
||||||
initMenu('',true,false,'search.php','Search');
|
initMenu('',true,false,'search.php','Search');
|
||||||
$(document).ready(function() { init_search(); });
|
$(document).ready(function() { init_search(); });
|
||||||
});
|
});
|
||||||
/* @license-end */</script>
|
/* @license-end */
|
||||||
|
</script>
|
||||||
<div id="main-nav"></div>
|
<div id="main-nav"></div>
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
@@ -57,27 +57,33 @@ $(function() {
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="headertitle">
|
<div class="headertitle"><div class="title">Data Structures</div></div>
|
||||||
<div class="title">Data Structures</div> </div>
|
|
||||||
</div><!--header-->
|
</div><!--header-->
|
||||||
<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"><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_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtjregion.html" target="_self">tjregion</a></td><td class="desc">Cropping region </td></tr>
|
||||||
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtjscalingfactor.html" target="_self">tjscalingfactor</a></td><td class="desc">Scaling factor </td></tr>
|
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtjscalingfactor.html" target="_self">tjscalingfactor</a></td><td class="desc">Scaling factor </td></tr>
|
||||||
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtjtransform.html" target="_self">tjtransform</a></td><td class="desc">Lossless transform </td></tr>
|
<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"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
BIN
doc/html/bc_sd.png
Normal file
|
After Width: | Height: | Size: 635 B |
|
Before Width: | Height: | Size: 147 B |
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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" lang="en-US">
|
||||||
<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=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.20"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<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"/>
|
||||||
@@ -20,10 +20,9 @@
|
|||||||
<div id="titlearea">
|
<div id="titlearea">
|
||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr id="projectrow">
|
||||||
<td id="projectalign" style="padding-left: 0.5em;">
|
<td id="projectalign">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG<span id="projectnumber"> 3.0.1</span>
|
||||||
 <span id="projectnumber">2.0</span>
|
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -31,21 +30,22 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.20 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<script type="text/javascript" src="menu.js"></script>
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
$(function() {
|
$(function() {
|
||||||
initMenu('',true,false,'search.php','Search');
|
initMenu('',true,false,'search.php','Search');
|
||||||
$(document).ready(function() { init_search(); });
|
$(document).ready(function() { init_search(); });
|
||||||
});
|
});
|
||||||
/* @license-end */</script>
|
/* @license-end */
|
||||||
|
</script>
|
||||||
<div id="main-nav"></div>
|
<div id="main-nav"></div>
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
@@ -57,33 +57,32 @@ $(function() {
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="headertitle">
|
<div class="headertitle"><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 class="classindex">
|
<div 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>
|
<dl class="classindex even">
|
||||||
</td>
|
<dt class="alphachar"><a id="letter_T" name="letter_T">T</a></dt>
|
||||||
<td valign="top"><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a>   </td>
|
<dd><a class="el" href="structtjregion.html">tjregion</a></dd><dd><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a></dd><dd><a class="el" href="structtjtransform.html">tjtransform</a></dd></dl>
|
||||||
<td valign="top"><a class="el" href="structtjtransform.html">tjtransform</a>   </td>
|
</div>
|
||||||
<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></td><td></td><td></td><td></td></tr>
|
|
||||||
</table>
|
|
||||||
<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"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
BIN
doc/html/doc.png
|
Before Width: | Height: | Size: 746 B |
12
doc/html/doc.svg
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||||
|
<g style="fill:#4665A2">
|
||||||
|
<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/>
|
||||||
|
</g>
|
||||||
|
<g style="fill:#D8DFEE;stroke-width:0">
|
||||||
|
<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
|
||||||
|
<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
12
doc/html/docd.svg
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||||
|
<g style="fill:#C4CFE5">
|
||||||
|
<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/>
|
||||||
|
</g>
|
||||||
|
<g style="fill:#4665A2;stroke-width:0">
|
||||||
|
<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
|
||||||
|
<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -1,3 +1,7 @@
|
|||||||
code {
|
code {
|
||||||
color: #4665A2;
|
color: #4665A2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
th.markdownTableHeadNone {
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|||||||
1163
doc/html/doxygen.css
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -47,6 +47,8 @@ function updateStripes()
|
|||||||
{
|
{
|
||||||
$('table.directory tr').
|
$('table.directory tr').
|
||||||
removeClass('even').filter(':visible:even').addClass('even');
|
removeClass('even').filter(':visible:even').addClass('even');
|
||||||
|
$('table.directory tr').
|
||||||
|
removeClass('odd').filter(':visible:odd').addClass('odd');
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleLevel(level)
|
function toggleLevel(level)
|
||||||
@@ -118,4 +120,73 @@ 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');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var opened=true;
|
||||||
|
// in case HTML_COLORSTYLE is LIGHT or DARK the vars will be replaced, so we write them out explicitly and use double quotes
|
||||||
|
var plusImg = [ "var(--fold-plus-image)", "var(--fold-plus-image-relpath)" ];
|
||||||
|
var minusImg = [ "var(--fold-minus-image)", "var(--fold-minus-image-relpath)" ];
|
||||||
|
|
||||||
|
// toggle all folding blocks
|
||||||
|
function codefold_toggle_all(relPath) {
|
||||||
|
if (opened) {
|
||||||
|
$('#fold_all').css('background-image',plusImg[relPath]);
|
||||||
|
$('div[id^=foldopen]').hide();
|
||||||
|
$('div[id^=foldclosed]').show();
|
||||||
|
} else {
|
||||||
|
$('#fold_all').css('background-image',minusImg[relPath]);
|
||||||
|
$('div[id^=foldopen]').show();
|
||||||
|
$('div[id^=foldclosed]').hide();
|
||||||
|
}
|
||||||
|
opened=!opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
// toggle single folding block
|
||||||
|
function codefold_toggle(id) {
|
||||||
|
$('#foldopen'+id).toggle();
|
||||||
|
$('#foldclosed'+id).toggle();
|
||||||
|
}
|
||||||
|
function init_codefold(relPath) {
|
||||||
|
$('span[class=lineno]').css(
|
||||||
|
{'padding-right':'4px',
|
||||||
|
'margin-right':'2px',
|
||||||
|
'display':'inline-block',
|
||||||
|
'width':'54px',
|
||||||
|
'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%'
|
||||||
|
});
|
||||||
|
// add global toggle to first line
|
||||||
|
$('span[class=lineno]:first').append('<span class="fold" id="fold_all" '+
|
||||||
|
'onclick="javascript:codefold_toggle_all('+relPath+');" '+
|
||||||
|
'style="background-image:'+minusImg[relPath]+';"></span>');
|
||||||
|
// add vertical lines to other rows
|
||||||
|
$('span[class=lineno]').not(':eq(0)').append('<span class="fold"></span>');
|
||||||
|
// add toggle controls to lines with fold divs
|
||||||
|
$('div[class=foldopen]').each(function() {
|
||||||
|
// extract specific id to use
|
||||||
|
var id = $(this).attr('id').replace('foldopen','');
|
||||||
|
// extract start and end foldable fragment attributes
|
||||||
|
var start = $(this).attr('data-start');
|
||||||
|
var end = $(this).attr('data-end');
|
||||||
|
// replace normal fold span with controls for the first line of a foldable fragment
|
||||||
|
$(this).find('span[class=fold]:first').replaceWith('<span class="fold" '+
|
||||||
|
'onclick="javascript:codefold_toggle(\''+id+'\');" '+
|
||||||
|
'style="background-image:'+minusImg[relPath]+';"></span>');
|
||||||
|
// append div for folded (closed) representation
|
||||||
|
$(this).after('<div id="foldclosed'+id+'" class="foldclosed" style="display:none;"></div>');
|
||||||
|
// extract the first line from the "open" section to represent closed content
|
||||||
|
var line = $(this).children().first().clone();
|
||||||
|
// remove any glow that might still be active on the original line
|
||||||
|
$(line).removeClass('glow');
|
||||||
|
if (start) {
|
||||||
|
// if line already ends with a start marker (e.g. trailing {), remove it
|
||||||
|
$(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),''));
|
||||||
|
}
|
||||||
|
// replace minus with plus symbol
|
||||||
|
$(line).find('span[class=fold]').css('background-image',plusImg[relPath]);
|
||||||
|
// append ellipsis
|
||||||
|
$(line).append(' '+start+'<a href="javascript:codefold_toggle(\''+id+'\')">…</a>'+end);
|
||||||
|
// insert constructed line into closed div
|
||||||
|
$('#foldclosed'+id).html(line);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 616 B |
11
doc/html/folderclosed.svg
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||||
|
<g style="fill:#4665A2;">
|
||||||
|
<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/>
|
||||||
|
</g>
|
||||||
|
<g style="fill:#D8DFEE;stroke-width:0;">
|
||||||
|
<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
11
doc/html/folderclosedd.svg
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||||
|
<g style="fill:#C4CFE5;">
|
||||||
|
<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/>
|
||||||
|
</g>
|
||||||
|
<g style="fill:#4665A2;stroke-width:0;">
|
||||||
|
<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 597 B |
17
doc/html/folderopen.svg
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||||
|
<g style="fill:#4665A2;">
|
||||||
|
<path
|
||||||
|
d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"
|
||||||
|
id="path2" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#D8DFEE;stroke-width:0;">
|
||||||
|
<path
|
||||||
|
d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z"
|
||||||
|
id="path199" /><path
|
||||||
|
d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z"
|
||||||
|
id="path201" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.2 KiB |
12
doc/html/folderopend.svg
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||||
|
<g style="fill:#C4CFE5;">
|
||||||
|
<path d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"/>
|
||||||
|
</g>
|
||||||
|
<g style="fill:#4665A2;stroke-width:0;">
|
||||||
|
<path d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z" />
|
||||||
|
<path d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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" lang="en-US">
|
||||||
<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=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.20"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<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"/>
|
||||||
@@ -20,10 +20,9 @@
|
|||||||
<div id="titlearea">
|
<div id="titlearea">
|
||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr id="projectrow">
|
||||||
<td id="projectalign" style="padding-left: 0.5em;">
|
<td id="projectalign">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG<span id="projectnumber"> 3.0.1</span>
|
||||||
 <span id="projectnumber">2.0</span>
|
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -31,21 +30,22 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.20 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<script type="text/javascript" src="menu.js"></script>
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
$(function() {
|
$(function() {
|
||||||
initMenu('',true,false,'search.php','Search');
|
initMenu('',true,false,'search.php','Search');
|
||||||
$(document).ready(function() { init_search(); });
|
$(document).ready(function() { init_search(); });
|
||||||
});
|
});
|
||||||
/* @license-end */</script>
|
/* @license-end */
|
||||||
|
</script>
|
||||||
<div id="main-nav"></div>
|
<div id="main-nav"></div>
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
@@ -57,51 +57,36 @@ $(function() {
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<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#a0dc7697d59a7abe48afc629e96cbc1d2">tjtransform</a></li>
|
||||||
: <a class="el" href="structtjtransform.html#afd7fc262df33f741e120ef4183202ef5">tjtransform</a>
|
<li>data : <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a></li>
|
||||||
</li>
|
<li>denom : <a class="el" href="structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3">tjscalingfactor</a></li>
|
||||||
<li>data
|
<li>h : <a class="el" href="structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115">tjregion</a></li>
|
||||||
: <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a>
|
<li>num : <a class="el" href="structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec">tjscalingfactor</a></li>
|
||||||
</li>
|
<li>op : <a class="el" href="structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498">tjtransform</a></li>
|
||||||
<li>denom
|
<li>options : <a class="el" href="structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6">tjtransform</a></li>
|
||||||
: <a class="el" href="structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3">tjscalingfactor</a>
|
<li>r : <a class="el" href="structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf">tjtransform</a></li>
|
||||||
</li>
|
<li>w : <a class="el" href="structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42">tjregion</a></li>
|
||||||
<li>h
|
<li>x : <a class="el" href="structtjregion.html#a4b6a37a93997091b26a75831fa291ad9">tjregion</a></li>
|
||||||
: <a class="el" href="structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115">tjregion</a>
|
<li>y : <a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">tjregion</a></li>
|
||||||
</li>
|
|
||||||
<li>num
|
|
||||||
: <a class="el" href="structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec">tjscalingfactor</a>
|
|
||||||
</li>
|
|
||||||
<li>op
|
|
||||||
: <a class="el" href="structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498">tjtransform</a>
|
|
||||||
</li>
|
|
||||||
<li>options
|
|
||||||
: <a class="el" href="structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6">tjtransform</a>
|
|
||||||
</li>
|
|
||||||
<li>r
|
|
||||||
: <a class="el" href="structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf">tjtransform</a>
|
|
||||||
</li>
|
|
||||||
<li>w
|
|
||||||
: <a class="el" href="structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42">tjregion</a>
|
|
||||||
</li>
|
|
||||||
<li>x
|
|
||||||
: <a class="el" href="structtjregion.html#a4b6a37a93997091b26a75831fa291ad9">tjregion</a>
|
|
||||||
</li>
|
|
||||||
<li>y
|
|
||||||
: <a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">tjregion</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</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"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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" lang="en-US">
|
||||||
<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=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.20"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<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"/>
|
||||||
@@ -20,10 +20,9 @@
|
|||||||
<div id="titlearea">
|
<div id="titlearea">
|
||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr id="projectrow">
|
||||||
<td id="projectalign" style="padding-left: 0.5em;">
|
<td id="projectalign">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG<span id="projectnumber"> 3.0.1</span>
|
||||||
 <span id="projectnumber">2.0</span>
|
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -31,21 +30,22 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.20 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<script type="text/javascript" src="menu.js"></script>
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
$(function() {
|
$(function() {
|
||||||
initMenu('',true,false,'search.php','Search');
|
initMenu('',true,false,'search.php','Search');
|
||||||
$(document).ready(function() { init_search(); });
|
$(document).ready(function() { init_search(); });
|
||||||
});
|
});
|
||||||
/* @license-end */</script>
|
/* @license-end */
|
||||||
|
</script>
|
||||||
<div id="main-nav"></div>
|
<div id="main-nav"></div>
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
@@ -57,51 +57,36 @@ $(function() {
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="contents">
|
<div class="contents">
|
||||||
 <ul>
|
<div class="textblock">Here is a list of all documented variables with links to the struct/union documentation for each field:</div><ul>
|
||||||
<li>customFilter
|
<li>customFilter : <a class="el" href="structtjtransform.html#a0dc7697d59a7abe48afc629e96cbc1d2">tjtransform</a></li>
|
||||||
: <a class="el" href="structtjtransform.html#afd7fc262df33f741e120ef4183202ef5">tjtransform</a>
|
<li>data : <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a></li>
|
||||||
</li>
|
<li>denom : <a class="el" href="structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3">tjscalingfactor</a></li>
|
||||||
<li>data
|
<li>h : <a class="el" href="structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115">tjregion</a></li>
|
||||||
: <a class="el" href="structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3">tjtransform</a>
|
<li>num : <a class="el" href="structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec">tjscalingfactor</a></li>
|
||||||
</li>
|
<li>op : <a class="el" href="structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498">tjtransform</a></li>
|
||||||
<li>denom
|
<li>options : <a class="el" href="structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6">tjtransform</a></li>
|
||||||
: <a class="el" href="structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3">tjscalingfactor</a>
|
<li>r : <a class="el" href="structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf">tjtransform</a></li>
|
||||||
</li>
|
<li>w : <a class="el" href="structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42">tjregion</a></li>
|
||||||
<li>h
|
<li>x : <a class="el" href="structtjregion.html#a4b6a37a93997091b26a75831fa291ad9">tjregion</a></li>
|
||||||
: <a class="el" href="structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115">tjregion</a>
|
<li>y : <a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">tjregion</a></li>
|
||||||
</li>
|
|
||||||
<li>num
|
|
||||||
: <a class="el" href="structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec">tjscalingfactor</a>
|
|
||||||
</li>
|
|
||||||
<li>op
|
|
||||||
: <a class="el" href="structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498">tjtransform</a>
|
|
||||||
</li>
|
|
||||||
<li>options
|
|
||||||
: <a class="el" href="structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6">tjtransform</a>
|
|
||||||
</li>
|
|
||||||
<li>r
|
|
||||||
: <a class="el" href="structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf">tjtransform</a>
|
|
||||||
</li>
|
|
||||||
<li>w
|
|
||||||
: <a class="el" href="structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42">tjregion</a>
|
|
||||||
</li>
|
|
||||||
<li>x
|
|
||||||
: <a class="el" href="structtjregion.html#a4b6a37a93997091b26a75831fa291ad9">tjregion</a>
|
|
||||||
</li>
|
|
||||||
<li>y
|
|
||||||
: <a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">tjregion</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</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"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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" lang="en-US">
|
||||||
<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=11"/>
|
||||||
<meta name="generator" content="Doxygen 1.8.20"/>
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
<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"/>
|
||||||
@@ -20,10 +20,9 @@
|
|||||||
<div id="titlearea">
|
<div id="titlearea">
|
||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr id="projectrow">
|
||||||
<td id="projectalign" style="padding-left: 0.5em;">
|
<td id="projectalign">
|
||||||
<div id="projectname">TurboJPEG
|
<div id="projectname">TurboJPEG<span id="projectnumber"> 3.0.1</span>
|
||||||
 <span id="projectnumber">2.0</span>
|
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -31,21 +30,22 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- end header part -->
|
<!-- end header part -->
|
||||||
<!-- Generated by Doxygen 1.8.20 -->
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="menudata.js"></script>
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
<script type="text/javascript" src="menu.js"></script>
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
$(function() {
|
$(function() {
|
||||||
initMenu('',true,false,'search.php','Search');
|
initMenu('',true,false,'search.php','Search');
|
||||||
$(document).ready(function() { init_search(); });
|
$(document).ready(function() { init_search(); });
|
||||||
});
|
});
|
||||||
/* @license-end */</script>
|
/* @license-end */
|
||||||
|
</script>
|
||||||
<div id="main-nav"></div>
|
<div id="main-nav"></div>
|
||||||
</div><!-- top -->
|
</div><!-- top -->
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
@@ -57,20 +57,26 @@ $(function() {
|
|||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
<div id="MSearchResults">
|
||||||
name="MSearchResults" id="MSearchResults">
|
<div class="SRPage">
|
||||||
</iframe>
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="headertitle">
|
<div class="headertitle"><div class="title">TurboJPEG Documentation</div></div>
|
||||||
<div class="title">TurboJPEG Documentation</div> </div>
|
|
||||||
</div><!--header-->
|
</div><!--header-->
|
||||||
<div class="contents">
|
<div class="contents">
|
||||||
</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"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
</small></address>
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
11
doc/html/jquery.js
vendored
@@ -28,7 +28,15 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
|
|||||||
if ('children' in data) {
|
if ('children' in data) {
|
||||||
result+='<ul>';
|
result+='<ul>';
|
||||||
for (var i in data.children) {
|
for (var i in data.children) {
|
||||||
result+='<li><a href="'+relPath+data.children[i].url+'">'+
|
var url;
|
||||||
|
var link;
|
||||||
|
link = data.children[i].url;
|
||||||
|
if (link.substring(0,1)=='^') {
|
||||||
|
url = link.substring(1);
|
||||||
|
} else {
|
||||||
|
url = relPath+link;
|
||||||
|
}
|
||||||
|
result+='<li><a href="'+url+'">'+
|
||||||
data.children[i].text+'</a>'+
|
data.children[i].text+'</a>'+
|
||||||
makeTree(data.children[i],relPath)+'</li>';
|
makeTree(data.children[i],relPath)+'</li>';
|
||||||
}
|
}
|
||||||
@@ -36,16 +44,93 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
var searchBoxHtml;
|
||||||
$('#main-nav').append(makeTree(menudata,relPath));
|
|
||||||
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
|
|
||||||
if (searchEnabled) {
|
if (searchEnabled) {
|
||||||
if (serverSide) {
|
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>');
|
searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
|
||||||
|
'<div class="left">'+
|
||||||
|
'<form id="FSearchBox" action="'+relPath+searchPage+
|
||||||
|
'" method="get"><span id="MSearchSelectExt"> </span>'+
|
||||||
|
'<input type="text" id="MSearchField" name="query" value="" placeholder="'+search+
|
||||||
|
'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)"'+
|
||||||
|
' onblur="searchBox.OnSearchFieldFocus(false)"/>'+
|
||||||
|
'</form>'+
|
||||||
|
'</div>'+
|
||||||
|
'<div class="right"></div>'+
|
||||||
|
'</div>';
|
||||||
} else {
|
} 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>');
|
searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
|
||||||
|
'<span class="left">'+
|
||||||
|
'<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()"'+
|
||||||
|
' onmouseout="return searchBox.OnSearchSelectHide()"> </span>'+
|
||||||
|
'<input type="text" id="MSearchField" value="" placeholder="'+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>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$('#main-nav').before('<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>'+
|
||||||
|
'<label class="main-menu-btn" for="main-menu-state">'+
|
||||||
|
'<span class="main-menu-btn-icon"></span> '+
|
||||||
|
'Toggle main menu visibility</label>'+
|
||||||
|
'<span id="searchBoxPos1" style="position:absolute;right:8px;top:8px;height:36px;"></span>'+
|
||||||
|
'</div>');
|
||||||
|
$('#main-nav').append(makeTree(menudata,relPath));
|
||||||
|
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
|
||||||
|
if (searchBoxHtml) {
|
||||||
|
$('#main-menu').append('<li id="searchBoxPos2" style="float:right"></li>');
|
||||||
|
}
|
||||||
|
var $mainMenuState = $('#main-menu-state');
|
||||||
|
var prevWidth = 0;
|
||||||
|
if ($mainMenuState.length) {
|
||||||
|
function initResizableIfExists() {
|
||||||
|
if (typeof initResizable==='function') initResizable();
|
||||||
|
}
|
||||||
|
// animate mobile menu
|
||||||
|
$mainMenuState.change(function(e) {
|
||||||
|
var $menu = $('#main-menu');
|
||||||
|
var options = { duration: 250, step: initResizableIfExists };
|
||||||
|
if (this.checked) {
|
||||||
|
options['complete'] = function() { $menu.css('display', 'block') };
|
||||||
|
$menu.hide().slideDown(options);
|
||||||
|
} else {
|
||||||
|
options['complete'] = function() { $menu.css('display', 'none') };
|
||||||
|
$menu.show().slideUp(options);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// set default menu visibility
|
||||||
|
function resetState() {
|
||||||
|
var $menu = $('#main-menu');
|
||||||
|
var $mainMenuState = $('#main-menu-state');
|
||||||
|
var newWidth = $(window).outerWidth();
|
||||||
|
if (newWidth!=prevWidth) {
|
||||||
|
if ($(window).outerWidth()<768) {
|
||||||
|
$mainMenuState.prop('checked',false); $menu.hide();
|
||||||
|
$('#searchBoxPos1').html(searchBoxHtml);
|
||||||
|
$('#searchBoxPos2').hide();
|
||||||
|
} else {
|
||||||
|
$menu.show();
|
||||||
|
$('#searchBoxPos1').empty();
|
||||||
|
$('#searchBoxPos2').html(searchBoxHtml);
|
||||||
|
$('#searchBoxPos2').show();
|
||||||
|
}
|
||||||
|
if (typeof searchBox!=='undefined') {
|
||||||
|
searchBox.CloseResultsWindow();
|
||||||
|
}
|
||||||
|
prevWidth = newWidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$(window).ready(function() { resetState(); initResizableIfExists(); });
|
||||||
|
$(window).resize(resetState);
|
||||||
|
}
|
||||||
$('#main-menu').smartmenus();
|
$('#main-menu').smartmenus();
|
||||||
}
|
}
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
var menudata={children:[
|
var menudata={children:[
|
||||||
{text:"Main Page",url:"index.html"},
|
{text:"Main Page",url:"index.html"},
|
||||||
{text:"Modules",url:"modules.html"},
|
{text:"Topics",url:"topics.html"},
|
||||||
{text:"Data Structures",url:"annotated.html",children:[
|
{text:"Data Structures",url:"annotated.html",children:[
|
||||||
{text:"Data Structures",url:"annotated.html"},
|
{text:"Data Structures",url:"annotated.html"},
|
||||||
{text:"Data Structure Index",url:"classes.html"},
|
{text:"Data Structure Index",url:"classes.html"},
|
||||||
|
|||||||
8
doc/html/minus.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<g>
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
|
||||||
|
<rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 582 B |
8
doc/html/minusd.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<g>
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
|
||||||
|
<rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 582 B |
BIN
doc/html/nav_fd.png
Normal file
|
After Width: | Height: | Size: 169 B |
BIN
doc/html/nav_hd.png
Normal file
|
After Width: | Height: | Size: 114 B |
9
doc/html/plus.svg
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<g>
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
|
||||||
|
<rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="15.874998" height="52.916668" x="44.979168" y="26.458332" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 696 B |
9
doc/html/plusd.svg
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<g>
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
|
||||||
|
<rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="15.874998" height="52.916668" x="44.979168" y="26.458332" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 696 B |
@@ -1,36 +0,0 @@
|
|||||||
<!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_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>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['customfilter_0',['customFilter',['../structtjtransform.html#afd7fc262df33f741e120ef4183202ef5',1,'tjtransform']]]
|
['customfilter_0',['customFilter',['../structtjtransform.html#a0dc7697d59a7abe48afc629e96cbc1d2',1,'tjtransform']]]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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_1.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>
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['data_1',['data',['../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3',1,'tjtransform']]],
|
['data_0',['data',['../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3',1,'tjtransform']]],
|
||||||
['denom_2',['denom',['../structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3',1,'tjscalingfactor']]]
|
['denom_1',['denom',['../structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3',1,'tjscalingfactor']]]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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_2.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>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['h_3',['h',['../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115',1,'tjregion']]]
|
['format_20notes_0',['YUV Image Format Notes',['../group___turbo_j_p_e_g.html#autotoc_md0',1,'']]]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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_3.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>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['num_4',['num',['../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec',1,'tjscalingfactor']]]
|
['h_0',['h',['../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115',1,'tjregion']]]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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>
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['op_5',['op',['../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498',1,'tjtransform']]],
|
['image_20format_20notes_0',['YUV Image Format Notes',['../group___turbo_j_p_e_g.html#autotoc_md0',1,'']]]
|
||||||
['options_6',['options',['../structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6',1,'tjtransform']]]
|
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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>
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['r_7',['r',['../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf',1,'tjtransform']]]
|
['notes_0',['YUV Image Format Notes',['../group___turbo_j_p_e_g.html#autotoc_md0',1,'']]],
|
||||||
|
['num_1',['num',['../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec',1,'tjscalingfactor']]]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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>
|
|
||||||
@@ -1,102 +1,5 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['tj_5fnumcs_8',['TJ_NUMCS',['../group___turbo_j_p_e_g.html#ga39f57a6fb02d9cf32e7b6890099b5a71',1,'turbojpeg.h']]],
|
['op_0',['op',['../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498',1,'tjtransform']]],
|
||||||
['tj_5fnumerr_9',['TJ_NUMERR',['../group___turbo_j_p_e_g.html#ga79bde1b4a3e2351e00887e47781b966e',1,'turbojpeg.h']]],
|
['options_1',['options',['../structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6',1,'tjtransform']]]
|
||||||
['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_5fnorealloc_43',['TJFLAG_NOREALLOC',['../group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963',1,'turbojpeg.h']]],
|
|
||||||
['tjflag_5fprogressive_44',['TJFLAG_PROGRESSIVE',['../group___turbo_j_p_e_g.html#ga43b426750b46190a25d34a67ef76df1b',1,'turbojpeg.h']]],
|
|
||||||
['tjflag_5fstoponwarning_45',['TJFLAG_STOPONWARNING',['../group___turbo_j_p_e_g.html#ga519cfa4ef6c18d9e5b455fdf59306a3a',1,'turbojpeg.h']]],
|
|
||||||
['tjfree_46',['tjFree',['../group___turbo_j_p_e_g.html#gaea863d2da0cdb609563aabdf9196514b',1,'turbojpeg.h']]],
|
|
||||||
['tjgeterrorcode_47',['tjGetErrorCode',['../group___turbo_j_p_e_g.html#ga414feeffbf860ebd31c745df203de410',1,'turbojpeg.h']]],
|
|
||||||
['tjgeterrorstr2_48',['tjGetErrorStr2',['../group___turbo_j_p_e_g.html#ga1ead8574f9f39fbafc6b497124e7aafa',1,'turbojpeg.h']]],
|
|
||||||
['tjgetscalingfactors_49',['tjGetScalingFactors',['../group___turbo_j_p_e_g.html#gac3854476006b10787bd128f7ede48057',1,'turbojpeg.h']]],
|
|
||||||
['tjgreenoffset_50',['tjGreenOffset',['../group___turbo_j_p_e_g.html#ga82d6e35da441112a411da41923c0ba2f',1,'turbojpeg.h']]],
|
|
||||||
['tjhandle_51',['tjhandle',['../group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763',1,'turbojpeg.h']]],
|
|
||||||
['tjinitcompress_52',['tjInitCompress',['../group___turbo_j_p_e_g.html#ga9d63a05fc6d813f4aae06107041a37e8',1,'turbojpeg.h']]],
|
|
||||||
['tjinitdecompress_53',['tjInitDecompress',['../group___turbo_j_p_e_g.html#ga52300eac3f3d9ef4bab303bc244f62d3',1,'turbojpeg.h']]],
|
|
||||||
['tjinittransform_54',['tjInitTransform',['../group___turbo_j_p_e_g.html#ga928beff6ac248ceadf01089fc6b41957',1,'turbojpeg.h']]],
|
|
||||||
['tjloadimage_55',['tjLoadImage',['../group___turbo_j_p_e_g.html#gaffbd83c375e79f5db4b5c5d8ad4466e7',1,'turbojpeg.h']]],
|
|
||||||
['tjmcuheight_56',['tjMCUHeight',['../group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf',1,'turbojpeg.h']]],
|
|
||||||
['tjmcuwidth_57',['tjMCUWidth',['../group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c',1,'turbojpeg.h']]],
|
|
||||||
['tjpad_58',['TJPAD',['../group___turbo_j_p_e_g.html#ga0aba955473315e405295d978f0c16511',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_59',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fabgr_60',['TJPF_ABGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fargb_61',['TJPF_ARGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fbgr_62',['TJPF_BGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fbgra_63',['TJPF_BGRA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fbgrx_64',['TJPF_BGRX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fcmyk_65',['TJPF_CMYK',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7f5100ec44c91994e243f1cf55553f8b',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fgray_66',['TJPF_GRAY',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5frgb_67',['TJPF_RGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5frgba_68',['TJPF_RGBA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5frgbx_69',['TJPF_RGBX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5funknown_70',['TJPF_UNKNOWN',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa84c1a6cead7952998e2fb895844a21ed',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fxbgr_71',['TJPF_XBGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af',1,'turbojpeg.h']]],
|
|
||||||
['tjpf_5fxrgb_72',['TJPF_XRGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84',1,'turbojpeg.h']]],
|
|
||||||
['tjpixelsize_73',['tjPixelSize',['../group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c',1,'turbojpeg.h']]],
|
|
||||||
['tjplaneheight_74',['tjPlaneHeight',['../group___turbo_j_p_e_g.html#ga1a209696c6a80748f20e134b3c64789f',1,'turbojpeg.h']]],
|
|
||||||
['tjplanesizeyuv_75',['tjPlaneSizeYUV',['../group___turbo_j_p_e_g.html#gab4ab7b24f6e797d79abaaa670373961d',1,'turbojpeg.h']]],
|
|
||||||
['tjplanewidth_76',['tjPlaneWidth',['../group___turbo_j_p_e_g.html#ga63fb66bb1e36c74008c4634360becbb1',1,'turbojpeg.h']]],
|
|
||||||
['tjredoffset_77',['tjRedOffset',['../group___turbo_j_p_e_g.html#gadd9b446742ac8a3923f7992c7988fea8',1,'turbojpeg.h']]],
|
|
||||||
['tjregion_78',['tjregion',['../structtjregion.html',1,'']]],
|
|
||||||
['tjsamp_79',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp_5f411_80',['TJSAMP_411',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a28ec62575e5ea295c3fde3001dc628e2',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp_5f420_81',['TJSAMP_420',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp_5f422_82',['TJSAMP_422',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp_5f440_83',['TJSAMP_440',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp_5f444_84',['TJSAMP_444',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3',1,'turbojpeg.h']]],
|
|
||||||
['tjsamp_5fgray_85',['TJSAMP_GRAY',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248',1,'turbojpeg.h']]],
|
|
||||||
['tjsaveimage_86',['tjSaveImage',['../group___turbo_j_p_e_g.html#ga6f445b22d8933ae4815b3370a538d879',1,'turbojpeg.h']]],
|
|
||||||
['tjscaled_87',['TJSCALED',['../group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df',1,'turbojpeg.h']]],
|
|
||||||
['tjscalingfactor_88',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
|
|
||||||
['tjtransform_89',['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_90',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5fhflip_91',['TJXOP_HFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5fnone_92',['TJXOP_NONE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5frot180_93',['TJXOP_ROT180',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5frot270_94',['TJXOP_ROT270',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5frot90_95',['TJXOP_ROT90',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5ftranspose_96',['TJXOP_TRANSPOSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5ftransverse_97',['TJXOP_TRANSVERSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4',1,'turbojpeg.h']]],
|
|
||||||
['tjxop_5fvflip_98',['TJXOP_VFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5fcopynone_99',['TJXOPT_COPYNONE',['../group___turbo_j_p_e_g.html#ga153b468cfb905d0de61706c838986fe8',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5fcrop_100',['TJXOPT_CROP',['../group___turbo_j_p_e_g.html#ga9c771a757fc1294add611906b89ab2d2',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5fgray_101',['TJXOPT_GRAY',['../group___turbo_j_p_e_g.html#ga3acee7b48ade1b99e5588736007c2589',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5fnooutput_102',['TJXOPT_NOOUTPUT',['../group___turbo_j_p_e_g.html#gafbf992bbf6e006705886333703ffab31',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5fperfect_103',['TJXOPT_PERFECT',['../group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5fprogressive_104',['TJXOPT_PROGRESSIVE',['../group___turbo_j_p_e_g.html#gad2371c80674584ecc1a7d75e564cf026',1,'turbojpeg.h']]],
|
|
||||||
['tjxopt_5ftrim_105',['TJXOPT_TRIM',['../group___turbo_j_p_e_g.html#ga319826b7eb1583c0595bbe7b95428709',1,'turbojpeg.h']]],
|
|
||||||
['turbojpeg_106',['TurboJPEG',['../group___turbo_j_p_e_g.html',1,'']]]
|
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['w_107',['w',['../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42',1,'tjregion']]]
|
['r_0',['r',['../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf',1,'tjtransform']]]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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>
|
|
||||||
@@ -1,4 +1,142 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['x_108',['x',['../structtjregion.html#a4b6a37a93997091b26a75831fa291ad9',1,'tjregion']]]
|
['tj3alloc_0',['tj3Alloc',['../group___turbo_j_p_e_g.html#ga1a2c96d8b47530b6e6050ba6f10b7c57',1,'turbojpeg.h']]],
|
||||||
|
['tj3compress12_1',['tj3Compress12',['../group___turbo_j_p_e_g.html#ga9a1968c384ec7abb6122830253ebf570',1,'turbojpeg.h']]],
|
||||||
|
['tj3compress16_2',['tj3Compress16',['../group___turbo_j_p_e_g.html#ga77901b71d0471784f318ada31ff4e7bd',1,'turbojpeg.h']]],
|
||||||
|
['tj3compress8_3',['tj3Compress8',['../group___turbo_j_p_e_g.html#ga2cc418a2dab709ad7f30f5b25905f138',1,'turbojpeg.h']]],
|
||||||
|
['tj3compressfromyuv8_4',['tj3CompressFromYUV8',['../group___turbo_j_p_e_g.html#ga041c870d9c669eb3f385c78f4346c43f',1,'turbojpeg.h']]],
|
||||||
|
['tj3compressfromyuvplanes8_5',['tj3CompressFromYUVPlanes8',['../group___turbo_j_p_e_g.html#gac9f5ace3e73805b476c95dda9f8d0cd0',1,'turbojpeg.h']]],
|
||||||
|
['tj3decodeyuv8_6',['tj3DecodeYUV8',['../group___turbo_j_p_e_g.html#gaa1eb574f38b1c1de43a6c7aafcf68d8c',1,'turbojpeg.h']]],
|
||||||
|
['tj3decodeyuvplanes8_7',['tj3DecodeYUVPlanes8',['../group___turbo_j_p_e_g.html#gad366f1915f82c1ad4e7e37ebe073ca89',1,'turbojpeg.h']]],
|
||||||
|
['tj3decompress12_8',['tj3Decompress12',['../group___turbo_j_p_e_g.html#ga39b848f01781ad74a5b3941c012b6199',1,'turbojpeg.h']]],
|
||||||
|
['tj3decompress16_9',['tj3Decompress16',['../group___turbo_j_p_e_g.html#gaa074e63f9beb0b3ff42b833a4049df6e',1,'turbojpeg.h']]],
|
||||||
|
['tj3decompress8_10',['tj3Decompress8',['../group___turbo_j_p_e_g.html#ga1169c7c1a26ec18c9e6122cb8ae64013',1,'turbojpeg.h']]],
|
||||||
|
['tj3decompressheader_11',['tj3DecompressHeader',['../group___turbo_j_p_e_g.html#ga96d2c4b3432f9d88ad14758ae240b8d1',1,'turbojpeg.h']]],
|
||||||
|
['tj3decompresstoyuv8_12',['tj3DecompressToYUV8',['../group___turbo_j_p_e_g.html#ga1e6bf6a19fec3f9fa7534348879d8320',1,'turbojpeg.h']]],
|
||||||
|
['tj3decompresstoyuvplanes8_13',['tj3DecompressToYUVPlanes8',['../group___turbo_j_p_e_g.html#ga934373482dbbf257f2280505b6ff4fb5',1,'turbojpeg.h']]],
|
||||||
|
['tj3destroy_14',['tj3Destroy',['../group___turbo_j_p_e_g.html#ga53fbadf4560e95a65b8f5ab81703fe82',1,'turbojpeg.h']]],
|
||||||
|
['tj3encodeyuv8_15',['tj3EncodeYUV8',['../group___turbo_j_p_e_g.html#ga2a8d50f130bde10f0a04030f8cc59936',1,'turbojpeg.h']]],
|
||||||
|
['tj3encodeyuvplanes8_16',['tj3EncodeYUVPlanes8',['../group___turbo_j_p_e_g.html#gae2e9df38790e9bddc249d04cb158a4cf',1,'turbojpeg.h']]],
|
||||||
|
['tj3free_17',['tj3Free',['../group___turbo_j_p_e_g.html#gaddb84fb6c81769e9faa0f5a63b296606',1,'turbojpeg.h']]],
|
||||||
|
['tj3get_18',['tj3Get',['../group___turbo_j_p_e_g.html#ga34af9ba3183bdf0ec7c8f47bb9a4c84f',1,'turbojpeg.h']]],
|
||||||
|
['tj3geterrorcode_19',['tj3GetErrorCode',['../group___turbo_j_p_e_g.html#gab8c8279f1415fe425ff30dbbc56013bd',1,'turbojpeg.h']]],
|
||||||
|
['tj3geterrorstr_20',['tj3GetErrorStr',['../group___turbo_j_p_e_g.html#ga5a23ad0776c5333cda0d7c6d826e9d29',1,'turbojpeg.h']]],
|
||||||
|
['tj3getscalingfactors_21',['tj3GetScalingFactors',['../group___turbo_j_p_e_g.html#gaf9253e0c2e9f464142d389673da085fa',1,'turbojpeg.h']]],
|
||||||
|
['tj3init_22',['tj3Init',['../group___turbo_j_p_e_g.html#ga69c09d39f97ec30250ad3605ace7e5df',1,'turbojpeg.h']]],
|
||||||
|
['tj3jpegbufsize_23',['tj3JPEGBufSize',['../group___turbo_j_p_e_g.html#gac6285e58e35a35d871d7162ec5a929c4',1,'turbojpeg.h']]],
|
||||||
|
['tj3loadimage12_24',['tj3LoadImage12',['../group___turbo_j_p_e_g.html#gaa1d3772cfdb53afa21aae3c606238d44',1,'turbojpeg.h']]],
|
||||||
|
['tj3loadimage16_25',['tj3LoadImage16',['../group___turbo_j_p_e_g.html#gace4240b665dc47742cbb3b76b03dfd69',1,'turbojpeg.h']]],
|
||||||
|
['tj3loadimage8_26',['tj3LoadImage8',['../group___turbo_j_p_e_g.html#ga884023536e70985616126a073f662001',1,'turbojpeg.h']]],
|
||||||
|
['tj3saveimage12_27',['tj3SaveImage12',['../group___turbo_j_p_e_g.html#ga7c64b5106d04267a46aad85f9714ad90',1,'turbojpeg.h']]],
|
||||||
|
['tj3saveimage16_28',['tj3SaveImage16',['../group___turbo_j_p_e_g.html#ga0fd87851f4266aca24bf4594dd0c0e71',1,'turbojpeg.h']]],
|
||||||
|
['tj3saveimage8_29',['tj3SaveImage8',['../group___turbo_j_p_e_g.html#gaa4ec838988e469cc15618e4690cc8722',1,'turbojpeg.h']]],
|
||||||
|
['tj3set_30',['tj3Set',['../group___turbo_j_p_e_g.html#gaddf92640bfee3e8622218c713e77e7db',1,'turbojpeg.h']]],
|
||||||
|
['tj3setcroppingregion_31',['tj3SetCroppingRegion',['../group___turbo_j_p_e_g.html#gaa49c7bd4c9431667a043cfc93388ba1c',1,'turbojpeg.h']]],
|
||||||
|
['tj3setscalingfactor_32',['tj3SetScalingFactor',['../group___turbo_j_p_e_g.html#ga89da17ee1e43ff423382cbc145803c75',1,'turbojpeg.h']]],
|
||||||
|
['tj3transform_33',['tj3Transform',['../group___turbo_j_p_e_g.html#gaff23ba1dcabed456794b844791613920',1,'turbojpeg.h']]],
|
||||||
|
['tj3yuvbufsize_34',['tj3YUVBufSize',['../group___turbo_j_p_e_g.html#gaaebaa16973a0f550a66eca5765ed0546',1,'turbojpeg.h']]],
|
||||||
|
['tj3yuvplaneheight_35',['tj3YUVPlaneHeight',['../group___turbo_j_p_e_g.html#ga969767ec8180cc3edd99cf507f87299b',1,'turbojpeg.h']]],
|
||||||
|
['tj3yuvplanesize_36',['tj3YUVPlaneSize',['../group___turbo_j_p_e_g.html#gacc19d265edce76b46146f59579f9438d',1,'turbojpeg.h']]],
|
||||||
|
['tj3yuvplanewidth_37',['tj3YUVPlaneWidth',['../group___turbo_j_p_e_g.html#gac99d1933ede1d59fcada9a826e88eb2d',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumcs_38',['TJ_NUMCS',['../group___turbo_j_p_e_g.html#ga39f57a6fb02d9cf32e7b6890099b5a71',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumerr_39',['TJ_NUMERR',['../group___turbo_j_p_e_g.html#ga79bde1b4a3e2351e00887e47781b966e',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnuminit_40',['TJ_NUMINIT',['../group___turbo_j_p_e_g.html#ga5e0e8c784295c636f0bf8dab93c4bddf',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumpf_41',['TJ_NUMPF',['../group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumsamp_42',['TJ_NUMSAMP',['../group___turbo_j_p_e_g.html#ga5ef3d169162ce77ce348e292a0b7477c',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumxop_43',['TJ_NUMXOP',['../group___turbo_j_p_e_g.html#ga0f6dbd18adf38b7d46ac547f0f4d562c',1,'turbojpeg.h']]],
|
||||||
|
['tjalphaoffset_44',['tjAlphaOffset',['../group___turbo_j_p_e_g.html#ga5af0ab065feefd526debf1e20c43e837',1,'turbojpeg.h']]],
|
||||||
|
['tjblueoffset_45',['tjBlueOffset',['../group___turbo_j_p_e_g.html#ga84e2e35d3f08025f976ec1ec53693dea',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_46',['TJCS',['../group___turbo_j_p_e_g.html#ga4f83ad3368e0e29d1957be0efa7c3720',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fcmyk_47',['TJCS_CMYK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a6c8b636152ac8195b869587db315ee53',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fgray_48',['TJCS_GRAY',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720ab3e7d6a87f695e45b81c1b5262b5a50a',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5frgb_49',['TJCS_RGB',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a677cb7ccb85c4038ac41964a2e09e555',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fycbcr_50',['TJCS_YCbCr',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a7389b8f65bb387ffedce3efd0d78ec75',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fycck_51',['TJCS_YCCK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a53839e0fe867b76b58d16b0a1a7c598e',1,'turbojpeg.h']]],
|
||||||
|
['tjerr_52',['TJERR',['../group___turbo_j_p_e_g.html#gafbc17cfa57d0d5d11fea35ac025950fe',1,'turbojpeg.h']]],
|
||||||
|
['tjerr_5ffatal_53',['TJERR_FATAL',['../group___turbo_j_p_e_g.html#ggafbc17cfa57d0d5d11fea35ac025950feafc9cceeada13122b09e4851e3788039a',1,'turbojpeg.h']]],
|
||||||
|
['tjerr_5fwarning_54',['TJERR_WARNING',['../group___turbo_j_p_e_g.html#ggafbc17cfa57d0d5d11fea35ac025950fea342dd6e2aedb47bb257b4e7568329b59',1,'turbojpeg.h']]],
|
||||||
|
['tjgreenoffset_55',['tjGreenOffset',['../group___turbo_j_p_e_g.html#ga82d6e35da441112a411da41923c0ba2f',1,'turbojpeg.h']]],
|
||||||
|
['tjhandle_56',['tjhandle',['../group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763',1,'turbojpeg.h']]],
|
||||||
|
['tjinit_57',['TJINIT',['../group___turbo_j_p_e_g.html#ga3850bbee1313e752e667b4eb08b1e086',1,'turbojpeg.h']]],
|
||||||
|
['tjinit_5fcompress_58',['TJINIT_COMPRESS',['../group___turbo_j_p_e_g.html#gga3850bbee1313e752e667b4eb08b1e086aa45ac279e3dc6ffabc4b0f45864da796',1,'turbojpeg.h']]],
|
||||||
|
['tjinit_5fdecompress_59',['TJINIT_DECOMPRESS',['../group___turbo_j_p_e_g.html#gga3850bbee1313e752e667b4eb08b1e086a4b8ca1ef700699b71350700bf95c2167',1,'turbojpeg.h']]],
|
||||||
|
['tjinit_5ftransform_60',['TJINIT_TRANSFORM',['../group___turbo_j_p_e_g.html#gga3850bbee1313e752e667b4eb08b1e086a8d58a2a4c45b3e0cd349746544a6e0c2',1,'turbojpeg.h']]],
|
||||||
|
['tjmcuheight_61',['tjMCUHeight',['../group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf',1,'turbojpeg.h']]],
|
||||||
|
['tjmcuwidth_62',['tjMCUWidth',['../group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_63',['TJPARAM',['../group___turbo_j_p_e_g.html#gaa0f6be63ba78278299c9f5c12031fe82',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5farithmetic_64',['TJPARAM_ARITHMETIC',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a1c756757384308145602c040524aebf7',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fbottomup_65',['TJPARAM_BOTTOMUP',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a924657172695ed6cb0b128219546fcce',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fcolorspace_66',['TJPARAM_COLORSPACE',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a46a10d46309514907d0c39fcd86c324c',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fdensityunits_67',['TJPARAM_DENSITYUNITS',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a4c045981bd8a303521a401dbbe1df208',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5ffastdct_68',['TJPARAM_FASTDCT',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a6914692ac6ec5567787d592b7563f627',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5ffastupsample_69',['TJPARAM_FASTUPSAMPLE',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a0e051ac106f7b7402b690a5daf4869c0',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fjpegheight_70',['TJPARAM_JPEGHEIGHT',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a8f76673be73f2b659440a9572a65a95f',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fjpegwidth_71',['TJPARAM_JPEGWIDTH',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a02ab77fb294a0c9061a78cd424c82dd8',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5flossless_72',['TJPARAM_LOSSLESS',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a249f35f0770792b19f995e603bb17c6f',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5flosslesspsv_73',['TJPARAM_LOSSLESSPSV',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82abcc997d40e5bec84817c12b76ef84159',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5flosslesspt_74',['TJPARAM_LOSSLESSPT',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a4a6c6f25764ecaf4231a36bff844e46a',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fmaxmemory_75',['TJPARAM_MAXMEMORY',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a0de0a8281da45d1fc984edc8918f7dd2',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fmaxpixels_76',['TJPARAM_MAXPIXELS',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82ac4e95dd2ecd766854feee579406eae68',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fnorealloc_77',['TJPARAM_NOREALLOC',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82ae64ffb358bc7b194fd48e0f27750b29b',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5foptimize_78',['TJPARAM_OPTIMIZE',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a8f0af9afc0b36443751f9ee82b760aa6',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fprecision_79',['TJPARAM_PRECISION',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a781db82741934e8cd008d308597c59d8',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fprogressive_80',['TJPARAM_PROGRESSIVE',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a1716f242b3859905b4a317dae8cfb75f',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fquality_81',['TJPARAM_QUALITY',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a0467e8792621f2d817dc2af563d3186c',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5frestartblocks_82',['TJPARAM_RESTARTBLOCKS',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a343c72883b7160f23f3ef46fc548a0ec',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5frestartrows_83',['TJPARAM_RESTARTROWS',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a714367585952fe5c863f0dba5bd37e5c',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fscanlimit_84',['TJPARAM_SCANLIMIT',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82ac478910e20ecf61b914f9824d80f8167',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fstoponwarning_85',['TJPARAM_STOPONWARNING',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a555e2212079fa49b30bcd2879c6c8ddb',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fsubsamp_86',['TJPARAM_SUBSAMP',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a2a3494a8215d3de4fdbaeb2ba6f6b03a',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fxdensity_87',['TJPARAM_XDENSITY',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a4de5c9d7cab5be806143a43c3b0e0877',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fydensity_88',['TJPARAM_YDENSITY',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82abda48f2df7eb9b88e2b7621efb017eba',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_89',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fabgr_90',['TJPF_ABGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fargb_91',['TJPF_ARGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgr_92',['TJPF_BGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgra_93',['TJPF_BGRA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgrx_94',['TJPF_BGRX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fcmyk_95',['TJPF_CMYK',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7f5100ec44c91994e243f1cf55553f8b',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fgray_96',['TJPF_GRAY',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgb_97',['TJPF_RGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgba_98',['TJPF_RGBA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgbx_99',['TJPF_RGBX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5funknown_100',['TJPF_UNKNOWN',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa84c1a6cead7952998e2fb895844a21ed',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fxbgr_101',['TJPF_XBGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fxrgb_102',['TJPF_XRGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84',1,'turbojpeg.h']]],
|
||||||
|
['tjpixelsize_103',['tjPixelSize',['../group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c',1,'turbojpeg.h']]],
|
||||||
|
['tjredoffset_104',['tjRedOffset',['../group___turbo_j_p_e_g.html#gadd9b446742ac8a3923f7992c7988fea8',1,'turbojpeg.h']]],
|
||||||
|
['tjregion_105',['tjregion',['../structtjregion.html',1,'']]],
|
||||||
|
['tjsamp_106',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f411_107',['TJSAMP_411',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a28ec62575e5ea295c3fde3001dc628e2',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f420_108',['TJSAMP_420',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f422_109',['TJSAMP_422',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f440_110',['TJSAMP_440',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f441_111',['TJSAMP_441',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3351696e1dd34a083a35b6be8b90122d',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f444_112',['TJSAMP_444',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5fgray_113',['TJSAMP_GRAY',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5funknown_114',['TJSAMP_UNKNOWN',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074ac124fa8f6cb41147e3d670dfbdfb7173',1,'turbojpeg.h']]],
|
||||||
|
['tjscaled_115',['TJSCALED',['../group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df',1,'turbojpeg.h']]],
|
||||||
|
['tjscalingfactor_116',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
|
||||||
|
['tjtransform_117',['tjtransform',['../structtjtransform.html',1,'tjtransform'],['../group___turbo_j_p_e_g.html#ga504805ec0161f1b505397ca0118bf8fd',1,'tjtransform: turbojpeg.h']]],
|
||||||
|
['tjuncropped_118',['TJUNCROPPED',['../group___turbo_j_p_e_g.html#ga6f192ad58a5a5802e145149d83c643bf',1,'turbojpeg.h']]],
|
||||||
|
['tjunscaled_119',['TJUNSCALED',['../group___turbo_j_p_e_g.html#ga7880644a0849161ad20933536169ee19',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_120',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fhflip_121',['TJXOP_HFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fnone_122',['TJXOP_NONE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot180_123',['TJXOP_ROT180',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot270_124',['TJXOP_ROT270',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot90_125',['TJXOP_ROT90',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5ftranspose_126',['TJXOP_TRANSPOSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5ftransverse_127',['TJXOP_TRANSVERSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fvflip_128',['TJXOP_VFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5farithmetic_129',['TJXOPT_ARITHMETIC',['../group___turbo_j_p_e_g.html#gaecaaa3b7e2af812592c015d83207f010',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fcopynone_130',['TJXOPT_COPYNONE',['../group___turbo_j_p_e_g.html#ga153b468cfb905d0de61706c838986fe8',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fcrop_131',['TJXOPT_CROP',['../group___turbo_j_p_e_g.html#ga9c771a757fc1294add611906b89ab2d2',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fgray_132',['TJXOPT_GRAY',['../group___turbo_j_p_e_g.html#ga3acee7b48ade1b99e5588736007c2589',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fnooutput_133',['TJXOPT_NOOUTPUT',['../group___turbo_j_p_e_g.html#gafbf992bbf6e006705886333703ffab31',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5foptimize_134',['TJXOPT_OPTIMIZE',['../group___turbo_j_p_e_g.html#ga6bedf37aa9e1122f3ec9f7302ca59117',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fperfect_135',['TJXOPT_PERFECT',['../group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fprogressive_136',['TJXOPT_PROGRESSIVE',['../group___turbo_j_p_e_g.html#gad2371c80674584ecc1a7d75e564cf026',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5ftrim_137',['TJXOPT_TRIM',['../group___turbo_j_p_e_g.html#ga319826b7eb1583c0595bbe7b95428709',1,'turbojpeg.h']]],
|
||||||
|
['turbojpeg_138',['TurboJPEG',['../group___turbo_j_p_e_g.html',1,'']]]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['y_109',['y',['../structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2',1,'tjregion']]]
|
['w_0',['w',['../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42',1,'tjregion']]]
|
||||||
];
|
];
|
||||||
|
|||||||
4
doc/html/search/all_a.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['x_0',['x',['../structtjregion.html#a4b6a37a93997091b26a75831fa291ad9',1,'tjregion']]]
|
||||||
|
];
|
||||||
5
doc/html/search/all_b.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['y_0',['y',['../structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2',1,'tjregion']]],
|
||||||
|
['yuv_20image_20format_20notes_1',['YUV Image Format Notes',['../group___turbo_j_p_e_g.html#autotoc_md0',1,'']]]
|
||||||
|
];
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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>
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['tjregion_110',['tjregion',['../structtjregion.html',1,'']]],
|
['tjregion_0',['tjregion',['../structtjregion.html',1,'']]],
|
||||||
['tjscalingfactor_111',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
|
['tjscalingfactor_1',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
|
||||||
['tjtransform_112',['tjtransform',['../structtjtransform.html',1,'']]]
|
['tjtransform_2',['tjtransform',['../structtjtransform.html',1,'']]]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,27 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg
|
<svg
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
viewBox="0 0 11 11"
|
viewBox="0 0 11 11"
|
||||||
height="11"
|
height="11"
|
||||||
width="11"
|
width="11"
|
||||||
id="svg2"
|
id="svg2"
|
||||||
version="1.1">
|
version="1.1">
|
||||||
<metadata
|
|
||||||
id="metadata8">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<defs
|
<defs
|
||||||
id="defs6" />
|
id="defs6" />
|
||||||
<path
|
<path
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 947 B |
@@ -1,36 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html><head><title></title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
||||||
<meta name="generator" content="Doxygen 1.8.20"/>
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="enums_0.js"></script>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
|
||||||
<div id="SRResults"></div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
||||||
createResults();
|
|
||||||
/* @license-end */
|
|
||||||
--></script>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
||||||
document.getElementById("Loading").style.display="none";
|
|
||||||
document.getElementById("NoMatches").style.display="none";
|
|
||||||
var searchResults = new SearchResults("searchResults");
|
|
||||||
searchResults.Search();
|
|
||||||
window.addEventListener("message", function(event) {
|
|
||||||
if (event.data == "take_focus") {
|
|
||||||
var elem = searchResults.NavNext(0);
|
|
||||||
if (elem) elem.focus();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
/* @license-end */
|
|
||||||
--></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['tjcs_161',['TJCS',['../group___turbo_j_p_e_g.html#ga4f83ad3368e0e29d1957be0efa7c3720',1,'turbojpeg.h']]],
|
['tjcs_0',['TJCS',['../group___turbo_j_p_e_g.html#ga4f83ad3368e0e29d1957be0efa7c3720',1,'turbojpeg.h']]],
|
||||||
['tjerr_162',['TJERR',['../group___turbo_j_p_e_g.html#gafbc17cfa57d0d5d11fea35ac025950fe',1,'turbojpeg.h']]],
|
['tjerr_1',['TJERR',['../group___turbo_j_p_e_g.html#gafbc17cfa57d0d5d11fea35ac025950fe',1,'turbojpeg.h']]],
|
||||||
['tjpf_163',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
|
['tjinit_2',['TJINIT',['../group___turbo_j_p_e_g.html#ga3850bbee1313e752e667b4eb08b1e086',1,'turbojpeg.h']]],
|
||||||
['tjsamp_164',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
|
['tjparam_3',['TJPARAM',['../group___turbo_j_p_e_g.html#gaa0f6be63ba78278299c9f5c12031fe82',1,'turbojpeg.h']]],
|
||||||
['tjxop_165',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]]
|
['tjpf_4',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_6',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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="enumvalues_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>
|
|
||||||
@@ -1,37 +1,67 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['tjcs_5fcmyk_166',['TJCS_CMYK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a6c8b636152ac8195b869587db315ee53',1,'turbojpeg.h']]],
|
['tjcs_5fcmyk_0',['TJCS_CMYK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a6c8b636152ac8195b869587db315ee53',1,'turbojpeg.h']]],
|
||||||
['tjcs_5fgray_167',['TJCS_GRAY',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720ab3e7d6a87f695e45b81c1b5262b5a50a',1,'turbojpeg.h']]],
|
['tjcs_5fgray_1',['TJCS_GRAY',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720ab3e7d6a87f695e45b81c1b5262b5a50a',1,'turbojpeg.h']]],
|
||||||
['tjcs_5frgb_168',['TJCS_RGB',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a677cb7ccb85c4038ac41964a2e09e555',1,'turbojpeg.h']]],
|
['tjcs_5frgb_2',['TJCS_RGB',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a677cb7ccb85c4038ac41964a2e09e555',1,'turbojpeg.h']]],
|
||||||
['tjcs_5fycbcr_169',['TJCS_YCbCr',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a7389b8f65bb387ffedce3efd0d78ec75',1,'turbojpeg.h']]],
|
['tjcs_5fycbcr_3',['TJCS_YCbCr',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a7389b8f65bb387ffedce3efd0d78ec75',1,'turbojpeg.h']]],
|
||||||
['tjcs_5fycck_170',['TJCS_YCCK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a53839e0fe867b76b58d16b0a1a7c598e',1,'turbojpeg.h']]],
|
['tjcs_5fycck_4',['TJCS_YCCK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a53839e0fe867b76b58d16b0a1a7c598e',1,'turbojpeg.h']]],
|
||||||
['tjerr_5ffatal_171',['TJERR_FATAL',['../group___turbo_j_p_e_g.html#ggafbc17cfa57d0d5d11fea35ac025950feafc9cceeada13122b09e4851e3788039a',1,'turbojpeg.h']]],
|
['tjerr_5ffatal_5',['TJERR_FATAL',['../group___turbo_j_p_e_g.html#ggafbc17cfa57d0d5d11fea35ac025950feafc9cceeada13122b09e4851e3788039a',1,'turbojpeg.h']]],
|
||||||
['tjerr_5fwarning_172',['TJERR_WARNING',['../group___turbo_j_p_e_g.html#ggafbc17cfa57d0d5d11fea35ac025950fea342dd6e2aedb47bb257b4e7568329b59',1,'turbojpeg.h']]],
|
['tjerr_5fwarning_6',['TJERR_WARNING',['../group___turbo_j_p_e_g.html#ggafbc17cfa57d0d5d11fea35ac025950fea342dd6e2aedb47bb257b4e7568329b59',1,'turbojpeg.h']]],
|
||||||
['tjpf_5fabgr_173',['TJPF_ABGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081',1,'turbojpeg.h']]],
|
['tjinit_5fcompress_7',['TJINIT_COMPRESS',['../group___turbo_j_p_e_g.html#gga3850bbee1313e752e667b4eb08b1e086aa45ac279e3dc6ffabc4b0f45864da796',1,'turbojpeg.h']]],
|
||||||
['tjpf_5fargb_174',['TJPF_ARGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c',1,'turbojpeg.h']]],
|
['tjinit_5fdecompress_8',['TJINIT_DECOMPRESS',['../group___turbo_j_p_e_g.html#gga3850bbee1313e752e667b4eb08b1e086a4b8ca1ef700699b71350700bf95c2167',1,'turbojpeg.h']]],
|
||||||
['tjpf_5fbgr_175',['TJPF_BGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839',1,'turbojpeg.h']]],
|
['tjinit_5ftransform_9',['TJINIT_TRANSFORM',['../group___turbo_j_p_e_g.html#gga3850bbee1313e752e667b4eb08b1e086a8d58a2a4c45b3e0cd349746544a6e0c2',1,'turbojpeg.h']]],
|
||||||
['tjpf_5fbgra_176',['TJPF_BGRA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4',1,'turbojpeg.h']]],
|
['tjparam_5farithmetic_10',['TJPARAM_ARITHMETIC',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a1c756757384308145602c040524aebf7',1,'turbojpeg.h']]],
|
||||||
['tjpf_5fbgrx_177',['TJPF_BGRX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8',1,'turbojpeg.h']]],
|
['tjparam_5fbottomup_11',['TJPARAM_BOTTOMUP',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a924657172695ed6cb0b128219546fcce',1,'turbojpeg.h']]],
|
||||||
['tjpf_5fcmyk_178',['TJPF_CMYK',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7f5100ec44c91994e243f1cf55553f8b',1,'turbojpeg.h']]],
|
['tjparam_5fcolorspace_12',['TJPARAM_COLORSPACE',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a46a10d46309514907d0c39fcd86c324c',1,'turbojpeg.h']]],
|
||||||
['tjpf_5fgray_179',['TJPF_GRAY',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a',1,'turbojpeg.h']]],
|
['tjparam_5fdensityunits_13',['TJPARAM_DENSITYUNITS',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a4c045981bd8a303521a401dbbe1df208',1,'turbojpeg.h']]],
|
||||||
['tjpf_5frgb_180',['TJPF_RGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c',1,'turbojpeg.h']]],
|
['tjparam_5ffastdct_14',['TJPARAM_FASTDCT',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a6914692ac6ec5567787d592b7563f627',1,'turbojpeg.h']]],
|
||||||
['tjpf_5frgba_181',['TJPF_RGBA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12',1,'turbojpeg.h']]],
|
['tjparam_5ffastupsample_15',['TJPARAM_FASTUPSAMPLE',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a0e051ac106f7b7402b690a5daf4869c0',1,'turbojpeg.h']]],
|
||||||
['tjpf_5frgbx_182',['TJPF_RGBX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01',1,'turbojpeg.h']]],
|
['tjparam_5fjpegheight_16',['TJPARAM_JPEGHEIGHT',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a8f76673be73f2b659440a9572a65a95f',1,'turbojpeg.h']]],
|
||||||
['tjpf_5funknown_183',['TJPF_UNKNOWN',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa84c1a6cead7952998e2fb895844a21ed',1,'turbojpeg.h']]],
|
['tjparam_5fjpegwidth_17',['TJPARAM_JPEGWIDTH',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a02ab77fb294a0c9061a78cd424c82dd8',1,'turbojpeg.h']]],
|
||||||
['tjpf_5fxbgr_184',['TJPF_XBGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af',1,'turbojpeg.h']]],
|
['tjparam_5flossless_18',['TJPARAM_LOSSLESS',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a249f35f0770792b19f995e603bb17c6f',1,'turbojpeg.h']]],
|
||||||
['tjpf_5fxrgb_185',['TJPF_XRGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84',1,'turbojpeg.h']]],
|
['tjparam_5flosslesspsv_19',['TJPARAM_LOSSLESSPSV',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82abcc997d40e5bec84817c12b76ef84159',1,'turbojpeg.h']]],
|
||||||
['tjsamp_5f411_186',['TJSAMP_411',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a28ec62575e5ea295c3fde3001dc628e2',1,'turbojpeg.h']]],
|
['tjparam_5flosslesspt_20',['TJPARAM_LOSSLESSPT',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a4a6c6f25764ecaf4231a36bff844e46a',1,'turbojpeg.h']]],
|
||||||
['tjsamp_5f420_187',['TJSAMP_420',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737',1,'turbojpeg.h']]],
|
['tjparam_5fmaxmemory_21',['TJPARAM_MAXMEMORY',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a0de0a8281da45d1fc984edc8918f7dd2',1,'turbojpeg.h']]],
|
||||||
['tjsamp_5f422_188',['TJSAMP_422',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404',1,'turbojpeg.h']]],
|
['tjparam_5fmaxpixels_22',['TJPARAM_MAXPIXELS',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82ac4e95dd2ecd766854feee579406eae68',1,'turbojpeg.h']]],
|
||||||
['tjsamp_5f440_189',['TJSAMP_440',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974',1,'turbojpeg.h']]],
|
['tjparam_5fnorealloc_23',['TJPARAM_NOREALLOC',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82ae64ffb358bc7b194fd48e0f27750b29b',1,'turbojpeg.h']]],
|
||||||
['tjsamp_5f444_190',['TJSAMP_444',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3',1,'turbojpeg.h']]],
|
['tjparam_5foptimize_24',['TJPARAM_OPTIMIZE',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a8f0af9afc0b36443751f9ee82b760aa6',1,'turbojpeg.h']]],
|
||||||
['tjsamp_5fgray_191',['TJSAMP_GRAY',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248',1,'turbojpeg.h']]],
|
['tjparam_5fprecision_25',['TJPARAM_PRECISION',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a781db82741934e8cd008d308597c59d8',1,'turbojpeg.h']]],
|
||||||
['tjxop_5fhflip_192',['TJXOP_HFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce',1,'turbojpeg.h']]],
|
['tjparam_5fprogressive_26',['TJPARAM_PROGRESSIVE',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a1716f242b3859905b4a317dae8cfb75f',1,'turbojpeg.h']]],
|
||||||
['tjxop_5fnone_193',['TJXOP_NONE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27',1,'turbojpeg.h']]],
|
['tjparam_5fquality_27',['TJPARAM_QUALITY',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a0467e8792621f2d817dc2af563d3186c',1,'turbojpeg.h']]],
|
||||||
['tjxop_5frot180_194',['TJXOP_ROT180',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692',1,'turbojpeg.h']]],
|
['tjparam_5frestartblocks_28',['TJPARAM_RESTARTBLOCKS',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a343c72883b7160f23f3ef46fc548a0ec',1,'turbojpeg.h']]],
|
||||||
['tjxop_5frot270_195',['TJXOP_ROT270',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08',1,'turbojpeg.h']]],
|
['tjparam_5frestartrows_29',['TJPARAM_RESTARTROWS',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a714367585952fe5c863f0dba5bd37e5c',1,'turbojpeg.h']]],
|
||||||
['tjxop_5frot90_196',['TJXOP_ROT90',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128',1,'turbojpeg.h']]],
|
['tjparam_5fscanlimit_30',['TJPARAM_SCANLIMIT',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82ac478910e20ecf61b914f9824d80f8167',1,'turbojpeg.h']]],
|
||||||
['tjxop_5ftranspose_197',['TJXOP_TRANSPOSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d',1,'turbojpeg.h']]],
|
['tjparam_5fstoponwarning_31',['TJPARAM_STOPONWARNING',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a555e2212079fa49b30bcd2879c6c8ddb',1,'turbojpeg.h']]],
|
||||||
['tjxop_5ftransverse_198',['TJXOP_TRANSVERSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4',1,'turbojpeg.h']]],
|
['tjparam_5fsubsamp_32',['TJPARAM_SUBSAMP',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a2a3494a8215d3de4fdbaeb2ba6f6b03a',1,'turbojpeg.h']]],
|
||||||
['tjxop_5fvflip_199',['TJXOP_VFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d',1,'turbojpeg.h']]]
|
['tjparam_5fxdensity_33',['TJPARAM_XDENSITY',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82a4de5c9d7cab5be806143a43c3b0e0877',1,'turbojpeg.h']]],
|
||||||
|
['tjparam_5fydensity_34',['TJPARAM_YDENSITY',['../group___turbo_j_p_e_g.html#ggaa0f6be63ba78278299c9f5c12031fe82abda48f2df7eb9b88e2b7621efb017eba',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fabgr_35',['TJPF_ABGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fargb_36',['TJPF_ARGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgr_37',['TJPF_BGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgra_38',['TJPF_BGRA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgrx_39',['TJPF_BGRX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fcmyk_40',['TJPF_CMYK',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7f5100ec44c91994e243f1cf55553f8b',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fgray_41',['TJPF_GRAY',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgb_42',['TJPF_RGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgba_43',['TJPF_RGBA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgbx_44',['TJPF_RGBX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5funknown_45',['TJPF_UNKNOWN',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa84c1a6cead7952998e2fb895844a21ed',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fxbgr_46',['TJPF_XBGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fxrgb_47',['TJPF_XRGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f411_48',['TJSAMP_411',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a28ec62575e5ea295c3fde3001dc628e2',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f420_49',['TJSAMP_420',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f422_50',['TJSAMP_422',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f440_51',['TJSAMP_440',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f441_52',['TJSAMP_441',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3351696e1dd34a083a35b6be8b90122d',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f444_53',['TJSAMP_444',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5fgray_54',['TJSAMP_GRAY',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5funknown_55',['TJSAMP_UNKNOWN',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074ac124fa8f6cb41147e3d670dfbdfb7173',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fhflip_56',['TJXOP_HFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fnone_57',['TJXOP_NONE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot180_58',['TJXOP_ROT180',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot270_59',['TJXOP_ROT270',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot90_60',['TJXOP_ROT90',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5ftranspose_61',['TJXOP_TRANSPOSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5ftransverse_62',['TJXOP_TRANSVERSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fvflip_63',['TJXOP_VFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d',1,'turbojpeg.h']]]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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="functions_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>
|
|
||||||
@@ -1,31 +1,41 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['tjalloc_113',['tjAlloc',['../group___turbo_j_p_e_g.html#gaec627dd4c5f30b7a775a7aea3bec5d83',1,'turbojpeg.h']]],
|
['tj3alloc_0',['tj3Alloc',['../group___turbo_j_p_e_g.html#ga1a2c96d8b47530b6e6050ba6f10b7c57',1,'turbojpeg.h']]],
|
||||||
['tjbufsize_114',['tjBufSize',['../group___turbo_j_p_e_g.html#ga67ac12fee79073242cb216e07c9f1f90',1,'turbojpeg.h']]],
|
['tj3compress12_1',['tj3Compress12',['../group___turbo_j_p_e_g.html#ga9a1968c384ec7abb6122830253ebf570',1,'turbojpeg.h']]],
|
||||||
['tjbufsizeyuv2_115',['tjBufSizeYUV2',['../group___turbo_j_p_e_g.html#ga2be2b9969d4df9ecce9b05deed273194',1,'turbojpeg.h']]],
|
['tj3compress16_2',['tj3Compress16',['../group___turbo_j_p_e_g.html#ga77901b71d0471784f318ada31ff4e7bd',1,'turbojpeg.h']]],
|
||||||
['tjcompress2_116',['tjCompress2',['../group___turbo_j_p_e_g.html#gafbdce0112fd78fd38efae841443a9bcf',1,'turbojpeg.h']]],
|
['tj3compress8_3',['tj3Compress8',['../group___turbo_j_p_e_g.html#ga2cc418a2dab709ad7f30f5b25905f138',1,'turbojpeg.h']]],
|
||||||
['tjcompressfromyuv_117',['tjCompressFromYUV',['../group___turbo_j_p_e_g.html#ga7622a459b79aa1007e005b58783f875b',1,'turbojpeg.h']]],
|
['tj3compressfromyuv8_4',['tj3CompressFromYUV8',['../group___turbo_j_p_e_g.html#ga041c870d9c669eb3f385c78f4346c43f',1,'turbojpeg.h']]],
|
||||||
['tjcompressfromyuvplanes_118',['tjCompressFromYUVPlanes',['../group___turbo_j_p_e_g.html#ga29ec5dfbd2d84b8724e951d6fa0d5d9e',1,'turbojpeg.h']]],
|
['tj3compressfromyuvplanes8_5',['tj3CompressFromYUVPlanes8',['../group___turbo_j_p_e_g.html#gac9f5ace3e73805b476c95dda9f8d0cd0',1,'turbojpeg.h']]],
|
||||||
['tjdecodeyuv_119',['tjDecodeYUV',['../group___turbo_j_p_e_g.html#ga70abbf38f77a26fd6da8813bef96f695',1,'turbojpeg.h']]],
|
['tj3decodeyuv8_6',['tj3DecodeYUV8',['../group___turbo_j_p_e_g.html#gaa1eb574f38b1c1de43a6c7aafcf68d8c',1,'turbojpeg.h']]],
|
||||||
['tjdecodeyuvplanes_120',['tjDecodeYUVPlanes',['../group___turbo_j_p_e_g.html#ga10e837c07fa9d25770565b237d3898d9',1,'turbojpeg.h']]],
|
['tj3decodeyuvplanes8_7',['tj3DecodeYUVPlanes8',['../group___turbo_j_p_e_g.html#gad366f1915f82c1ad4e7e37ebe073ca89',1,'turbojpeg.h']]],
|
||||||
['tjdecompress2_121',['tjDecompress2',['../group___turbo_j_p_e_g.html#gae9eccef8b682a48f43a9117c231ed013',1,'turbojpeg.h']]],
|
['tj3decompress12_8',['tj3Decompress12',['../group___turbo_j_p_e_g.html#ga39b848f01781ad74a5b3941c012b6199',1,'turbojpeg.h']]],
|
||||||
['tjdecompressheader3_122',['tjDecompressHeader3',['../group___turbo_j_p_e_g.html#ga0595681096bba7199cc6f3533cb25f77',1,'turbojpeg.h']]],
|
['tj3decompress16_9',['tj3Decompress16',['../group___turbo_j_p_e_g.html#gaa074e63f9beb0b3ff42b833a4049df6e',1,'turbojpeg.h']]],
|
||||||
['tjdecompresstoyuv2_123',['tjDecompressToYUV2',['../group___turbo_j_p_e_g.html#ga04d1e839ff9a0860dd1475cff78d3364',1,'turbojpeg.h']]],
|
['tj3decompress8_10',['tj3Decompress8',['../group___turbo_j_p_e_g.html#ga1169c7c1a26ec18c9e6122cb8ae64013',1,'turbojpeg.h']]],
|
||||||
['tjdecompresstoyuvplanes_124',['tjDecompressToYUVPlanes',['../group___turbo_j_p_e_g.html#gaa59f901a5258ada5bd0185ad59368540',1,'turbojpeg.h']]],
|
['tj3decompressheader_11',['tj3DecompressHeader',['../group___turbo_j_p_e_g.html#ga96d2c4b3432f9d88ad14758ae240b8d1',1,'turbojpeg.h']]],
|
||||||
['tjdestroy_125',['tjDestroy',['../group___turbo_j_p_e_g.html#ga75f355fa27225ba1a4ee392c852394d2',1,'turbojpeg.h']]],
|
['tj3decompresstoyuv8_12',['tj3DecompressToYUV8',['../group___turbo_j_p_e_g.html#ga1e6bf6a19fec3f9fa7534348879d8320',1,'turbojpeg.h']]],
|
||||||
['tjencodeyuv3_126',['tjEncodeYUV3',['../group___turbo_j_p_e_g.html#gac519b922cdf446e97d0cdcba513636bf',1,'turbojpeg.h']]],
|
['tj3decompresstoyuvplanes8_13',['tj3DecompressToYUVPlanes8',['../group___turbo_j_p_e_g.html#ga934373482dbbf257f2280505b6ff4fb5',1,'turbojpeg.h']]],
|
||||||
['tjencodeyuvplanes_127',['tjEncodeYUVPlanes',['../group___turbo_j_p_e_g.html#gae2d04c72457fe7f4d60cf78ab1b1feb1',1,'turbojpeg.h']]],
|
['tj3destroy_14',['tj3Destroy',['../group___turbo_j_p_e_g.html#ga53fbadf4560e95a65b8f5ab81703fe82',1,'turbojpeg.h']]],
|
||||||
['tjfree_128',['tjFree',['../group___turbo_j_p_e_g.html#gaea863d2da0cdb609563aabdf9196514b',1,'turbojpeg.h']]],
|
['tj3encodeyuv8_15',['tj3EncodeYUV8',['../group___turbo_j_p_e_g.html#ga2a8d50f130bde10f0a04030f8cc59936',1,'turbojpeg.h']]],
|
||||||
['tjgeterrorcode_129',['tjGetErrorCode',['../group___turbo_j_p_e_g.html#ga414feeffbf860ebd31c745df203de410',1,'turbojpeg.h']]],
|
['tj3encodeyuvplanes8_16',['tj3EncodeYUVPlanes8',['../group___turbo_j_p_e_g.html#gae2e9df38790e9bddc249d04cb158a4cf',1,'turbojpeg.h']]],
|
||||||
['tjgeterrorstr2_130',['tjGetErrorStr2',['../group___turbo_j_p_e_g.html#ga1ead8574f9f39fbafc6b497124e7aafa',1,'turbojpeg.h']]],
|
['tj3free_17',['tj3Free',['../group___turbo_j_p_e_g.html#gaddb84fb6c81769e9faa0f5a63b296606',1,'turbojpeg.h']]],
|
||||||
['tjgetscalingfactors_131',['tjGetScalingFactors',['../group___turbo_j_p_e_g.html#gac3854476006b10787bd128f7ede48057',1,'turbojpeg.h']]],
|
['tj3get_18',['tj3Get',['../group___turbo_j_p_e_g.html#ga34af9ba3183bdf0ec7c8f47bb9a4c84f',1,'turbojpeg.h']]],
|
||||||
['tjinitcompress_132',['tjInitCompress',['../group___turbo_j_p_e_g.html#ga9d63a05fc6d813f4aae06107041a37e8',1,'turbojpeg.h']]],
|
['tj3geterrorcode_19',['tj3GetErrorCode',['../group___turbo_j_p_e_g.html#gab8c8279f1415fe425ff30dbbc56013bd',1,'turbojpeg.h']]],
|
||||||
['tjinitdecompress_133',['tjInitDecompress',['../group___turbo_j_p_e_g.html#ga52300eac3f3d9ef4bab303bc244f62d3',1,'turbojpeg.h']]],
|
['tj3geterrorstr_20',['tj3GetErrorStr',['../group___turbo_j_p_e_g.html#ga5a23ad0776c5333cda0d7c6d826e9d29',1,'turbojpeg.h']]],
|
||||||
['tjinittransform_134',['tjInitTransform',['../group___turbo_j_p_e_g.html#ga928beff6ac248ceadf01089fc6b41957',1,'turbojpeg.h']]],
|
['tj3getscalingfactors_21',['tj3GetScalingFactors',['../group___turbo_j_p_e_g.html#gaf9253e0c2e9f464142d389673da085fa',1,'turbojpeg.h']]],
|
||||||
['tjloadimage_135',['tjLoadImage',['../group___turbo_j_p_e_g.html#gaffbd83c375e79f5db4b5c5d8ad4466e7',1,'turbojpeg.h']]],
|
['tj3init_22',['tj3Init',['../group___turbo_j_p_e_g.html#ga69c09d39f97ec30250ad3605ace7e5df',1,'turbojpeg.h']]],
|
||||||
['tjplaneheight_136',['tjPlaneHeight',['../group___turbo_j_p_e_g.html#ga1a209696c6a80748f20e134b3c64789f',1,'turbojpeg.h']]],
|
['tj3jpegbufsize_23',['tj3JPEGBufSize',['../group___turbo_j_p_e_g.html#gac6285e58e35a35d871d7162ec5a929c4',1,'turbojpeg.h']]],
|
||||||
['tjplanesizeyuv_137',['tjPlaneSizeYUV',['../group___turbo_j_p_e_g.html#gab4ab7b24f6e797d79abaaa670373961d',1,'turbojpeg.h']]],
|
['tj3loadimage12_24',['tj3LoadImage12',['../group___turbo_j_p_e_g.html#gaa1d3772cfdb53afa21aae3c606238d44',1,'turbojpeg.h']]],
|
||||||
['tjplanewidth_138',['tjPlaneWidth',['../group___turbo_j_p_e_g.html#ga63fb66bb1e36c74008c4634360becbb1',1,'turbojpeg.h']]],
|
['tj3loadimage16_25',['tj3LoadImage16',['../group___turbo_j_p_e_g.html#gace4240b665dc47742cbb3b76b03dfd69',1,'turbojpeg.h']]],
|
||||||
['tjsaveimage_139',['tjSaveImage',['../group___turbo_j_p_e_g.html#ga6f445b22d8933ae4815b3370a538d879',1,'turbojpeg.h']]],
|
['tj3loadimage8_26',['tj3LoadImage8',['../group___turbo_j_p_e_g.html#ga884023536e70985616126a073f662001',1,'turbojpeg.h']]],
|
||||||
['tjtransform_140',['tjTransform',['../group___turbo_j_p_e_g.html#ga9cb8abf4cc91881e04a0329b2270be25',1,'turbojpeg.h']]]
|
['tj3saveimage12_27',['tj3SaveImage12',['../group___turbo_j_p_e_g.html#ga7c64b5106d04267a46aad85f9714ad90',1,'turbojpeg.h']]],
|
||||||
|
['tj3saveimage16_28',['tj3SaveImage16',['../group___turbo_j_p_e_g.html#ga0fd87851f4266aca24bf4594dd0c0e71',1,'turbojpeg.h']]],
|
||||||
|
['tj3saveimage8_29',['tj3SaveImage8',['../group___turbo_j_p_e_g.html#gaa4ec838988e469cc15618e4690cc8722',1,'turbojpeg.h']]],
|
||||||
|
['tj3set_30',['tj3Set',['../group___turbo_j_p_e_g.html#gaddf92640bfee3e8622218c713e77e7db',1,'turbojpeg.h']]],
|
||||||
|
['tj3setcroppingregion_31',['tj3SetCroppingRegion',['../group___turbo_j_p_e_g.html#gaa49c7bd4c9431667a043cfc93388ba1c',1,'turbojpeg.h']]],
|
||||||
|
['tj3setscalingfactor_32',['tj3SetScalingFactor',['../group___turbo_j_p_e_g.html#ga89da17ee1e43ff423382cbc145803c75',1,'turbojpeg.h']]],
|
||||||
|
['tj3transform_33',['tj3Transform',['../group___turbo_j_p_e_g.html#gaff23ba1dcabed456794b844791613920',1,'turbojpeg.h']]],
|
||||||
|
['tj3yuvbufsize_34',['tj3YUVBufSize',['../group___turbo_j_p_e_g.html#gaaebaa16973a0f550a66eca5765ed0546',1,'turbojpeg.h']]],
|
||||||
|
['tj3yuvplaneheight_35',['tj3YUVPlaneHeight',['../group___turbo_j_p_e_g.html#ga969767ec8180cc3edd99cf507f87299b',1,'turbojpeg.h']]],
|
||||||
|
['tj3yuvplanesize_36',['tj3YUVPlaneSize',['../group___turbo_j_p_e_g.html#gacc19d265edce76b46146f59579f9438d',1,'turbojpeg.h']]],
|
||||||
|
['tj3yuvplanewidth_37',['tj3YUVPlaneWidth',['../group___turbo_j_p_e_g.html#gac99d1933ede1d59fcada9a826e88eb2d',1,'turbojpeg.h']]]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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="groups_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>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
var searchData=
|
var searchData=
|
||||||
[
|
[
|
||||||
['turbojpeg_200',['TurboJPEG',['../group___turbo_j_p_e_g.html',1,'']]]
|
['turbojpeg_0',['TurboJPEG',['../group___turbo_j_p_e_g.html',1,'']]]
|
||||||
];
|
];
|
||||||
|
|||||||
24
doc/html/search/mag.svg
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 20 19"
|
||||||
|
height="19"
|
||||||
|
width="20"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1">
|
||||||
|
<defs
|
||||||
|
id="defs6" />
|
||||||
|
<circle
|
||||||
|
r="3.5"
|
||||||
|
cy="8.5"
|
||||||
|
cx="5.5"
|
||||||
|
id="path4611"
|
||||||
|
style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
id="path4630"
|
||||||
|
d="m 8.1085854,11.109059 2.7823556,2.782356"
|
||||||
|
style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 804 B |
24
doc/html/search/mag_d.svg
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 20 19"
|
||||||
|
height="19"
|
||||||
|
width="20"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1">
|
||||||
|
<defs
|
||||||
|
id="defs6" />
|
||||||
|
<circle
|
||||||
|
r="3.5"
|
||||||
|
cy="8.5"
|
||||||
|
cx="5.5"
|
||||||
|
id="path4611"
|
||||||
|
style="fill:#000000;fill-opacity:0;stroke:#C5C5C5;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
id="path4630"
|
||||||
|
d="m 8.1085854,11.109059 2.7823556,2.782356"
|
||||||
|
style="fill:none;stroke:#C5C5C5;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 804 B |
@@ -1,59 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg
|
<svg
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg2"
|
id="svg2"
|
||||||
width="20"
|
width="20"
|
||||||
height="19"
|
height="19"
|
||||||
viewBox="0 0 20 19"
|
viewBox="0 0 20 19"
|
||||||
sodipodi:docname="mag_sel.svg"
|
>
|
||||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
|
|
||||||
<metadata
|
|
||||||
id="metadata8">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<defs
|
<defs
|
||||||
id="defs6" />
|
id="defs6" />
|
||||||
<sodipodi:namedview
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1"
|
|
||||||
objecttolerance="10"
|
|
||||||
gridtolerance="10"
|
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="2096"
|
|
||||||
id="namedview4"
|
|
||||||
showgrid="false"
|
|
||||||
fit-margin-top="0"
|
|
||||||
fit-margin-left="0"
|
|
||||||
fit-margin-right="0"
|
|
||||||
fit-margin-bottom="0"
|
|
||||||
inkscape:zoom="32"
|
|
||||||
inkscape:cx="5.9792688"
|
|
||||||
inkscape:cy="1.1436277"
|
|
||||||
inkscape:window-x="1920"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="0"
|
|
||||||
inkscape:current-layer="svg2" />
|
|
||||||
<circle
|
<circle
|
||||||
style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
id="path4611"
|
id="path4611"
|
||||||
@@ -64,11 +22,10 @@
|
|||||||
style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
d="M 11,7 13.5,10 16,7 Z"
|
d="M 11,7 13.5,10 16,7 Z"
|
||||||
id="path4609"
|
id="path4609"
|
||||||
inkscape:connector-curvature="0"
|
/>
|
||||||
sodipodi:nodetypes="cccc" />
|
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
d="m 8.1085854,11.109059 2.7823556,2.782356"
|
d="m 8.1085854,11.109059 2.7823556,2.782356"
|
||||||
id="path4630"
|
id="path4630"
|
||||||
inkscape:connector-curvature="0" />
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1019 B |
31
doc/html/search/mag_seld.svg
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
width="20"
|
||||||
|
height="19"
|
||||||
|
viewBox="0 0 20 19"
|
||||||
|
>
|
||||||
|
<defs
|
||||||
|
id="defs6" />
|
||||||
|
<circle
|
||||||
|
style="fill:#000000;fill-opacity:0;stroke:#c5C5C5;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="path4611"
|
||||||
|
cx="5.5"
|
||||||
|
cy="8.5"
|
||||||
|
r="3.5" />
|
||||||
|
<path
|
||||||
|
style="fill:#c5C5C5;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 11,7 13.5,10 16,7 Z"
|
||||||
|
id="path4609"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#c5C5C5;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 8.1085854,11.109059 2.7823556,2.782356"
|
||||||
|
id="path4630"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1019 B |
@@ -1,12 +0,0 @@
|
|||||||
<!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"/>
|
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
|
||||||
<script type="text/javascript" src="search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body class="SRPage">
|
|
||||||
<div id="SRIndex">
|
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,10 +1,33 @@
|
|||||||
/*---------------- Search Box */
|
/*---------------- Search Box positioning */
|
||||||
|
|
||||||
|
#main-menu > li:last-child {
|
||||||
|
/* This <li> object is the parent of the search bar */
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 36px;
|
||||||
|
margin-right: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------- Search box styling */
|
||||||
|
|
||||||
|
.SRPage * {
|
||||||
|
font-weight: normal;
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
dark-mode-toggle {
|
||||||
|
margin-left: 5px;
|
||||||
|
display: flex;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
#MSearchBox {
|
#MSearchBox {
|
||||||
|
display: inline-block;
|
||||||
white-space : nowrap;
|
white-space : nowrap;
|
||||||
background: white;
|
background: var(--search-background-color);
|
||||||
border-radius: 0.65em;
|
border-radius: 0.65em;
|
||||||
box-shadow: inset 0.5px 0.5px 3px 0px #555;
|
box-shadow: var(--search-box-shadow);
|
||||||
z-index: 102;
|
z-index: 102;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,28 +40,47 @@
|
|||||||
#MSearchSelect {
|
#MSearchSelect {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
height: 1.4em;
|
width: 20px;
|
||||||
padding: 0 0 0 0.3em;
|
height: 19px;
|
||||||
margin: 0;
|
background-image: var(--search-magnification-select-image);
|
||||||
|
margin: 0 0 0 0.3em;
|
||||||
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#MSearchSelectExt {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 10px;
|
||||||
|
height: 19px;
|
||||||
|
background-image: var(--search-magnification-image);
|
||||||
|
margin: 0 0 0 0.5em;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#MSearchField {
|
#MSearchField {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
width: 7.5em;
|
width: 7.5em;
|
||||||
height: 1.1em;
|
height: 19px;
|
||||||
margin: 0 0.15em;
|
margin: 0 0.15em;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
line-height: 1em;
|
line-height: 1em;
|
||||||
border:none;
|
border:none;
|
||||||
color: #909090;
|
color: var(--search-foreground-color);
|
||||||
outline: none;
|
outline: none;
|
||||||
font-family: Arial, Verdana, sans-serif;
|
font-family: var(--font-family-search);
|
||||||
-webkit-border-radius: 0px;
|
-webkit-border-radius: 0px;
|
||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
background: none;
|
background: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media(hover: none) {
|
||||||
|
/* to avoid zooming on iOS */
|
||||||
|
#MSearchField {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#MSearchBox .right {
|
#MSearchBox .right {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@@ -59,23 +101,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#MSearchCloseImg {
|
#MSearchCloseImg {
|
||||||
height: 1.4em;
|
|
||||||
padding: 0.3em;
|
padding: 0.3em;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.MSearchBoxActive #MSearchField {
|
.MSearchBoxActive #MSearchField {
|
||||||
color: #000000;
|
color: var(--search-active-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#main-menu > li:last-child {
|
|
||||||
/* This <li> object is the parent of the search bar */
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
height: 36px;
|
|
||||||
margin-right: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------- Search filter selection */
|
/*---------------- Search filter selection */
|
||||||
|
|
||||||
@@ -83,8 +117,8 @@
|
|||||||
display: none;
|
display: none;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0; top: 0;
|
left: 0; top: 0;
|
||||||
border: 1px solid #90A5CE;
|
border: 1px solid var(--search-filter-border-color);
|
||||||
background-color: #F9FAFC;
|
background-color: var(--search-filter-background-color);
|
||||||
z-index: 10001;
|
z-index: 10001;
|
||||||
padding-top: 4px;
|
padding-top: 4px;
|
||||||
padding-bottom: 4px;
|
padding-bottom: 4px;
|
||||||
@@ -97,7 +131,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.SelectItem {
|
.SelectItem {
|
||||||
font: 8pt Arial, Verdana, sans-serif;
|
font: 8pt var(--font-family-search);
|
||||||
padding-left: 2px;
|
padding-left: 2px;
|
||||||
padding-right: 12px;
|
padding-right: 12px;
|
||||||
border: 0px;
|
border: 0px;
|
||||||
@@ -105,7 +139,7 @@
|
|||||||
|
|
||||||
span.SelectionMark {
|
span.SelectionMark {
|
||||||
margin-right: 4px;
|
margin-right: 4px;
|
||||||
font-family: monospace;
|
font-family: var(--font-family-monospace);
|
||||||
outline-style: none;
|
outline-style: none;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
@@ -113,7 +147,7 @@ span.SelectionMark {
|
|||||||
a.SelectItem {
|
a.SelectItem {
|
||||||
display: block;
|
display: block;
|
||||||
outline-style: none;
|
outline-style: none;
|
||||||
color: #000000;
|
color: var(--search-filter-foreground-color);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
padding-left: 6px;
|
padding-left: 6px;
|
||||||
padding-right: 12px;
|
padding-right: 12px;
|
||||||
@@ -121,14 +155,14 @@ a.SelectItem {
|
|||||||
|
|
||||||
a.SelectItem:focus,
|
a.SelectItem:focus,
|
||||||
a.SelectItem:active {
|
a.SelectItem:active {
|
||||||
color: #000000;
|
color: var(--search-filter-foreground-color);
|
||||||
outline-style: none;
|
outline-style: none;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.SelectItem:hover {
|
a.SelectItem:hover {
|
||||||
color: #FFFFFF;
|
color: var(--search-filter-highlight-text-color);
|
||||||
background-color: #3D578C;
|
background-color: var(--search-filter-highlight-bg-color);
|
||||||
outline-style: none;
|
outline-style: none;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -138,7 +172,7 @@ a.SelectItem:hover {
|
|||||||
/*---------------- Search results window */
|
/*---------------- Search results window */
|
||||||
|
|
||||||
iframe#MSearchResults {
|
iframe#MSearchResults {
|
||||||
width: 60ex;
|
/*width: 60ex;*/
|
||||||
height: 15em;
|
height: 15em;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,9 +180,12 @@ iframe#MSearchResults {
|
|||||||
display: none;
|
display: none;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0; top: 0;
|
left: 0; top: 0;
|
||||||
border: 1px solid #000;
|
border: 1px solid var(--search-results-border-color);
|
||||||
background-color: #EEF1F7;
|
background-color: var(--search-results-background-color);
|
||||||
z-index:10000;
|
z-index:10000;
|
||||||
|
width: 300px;
|
||||||
|
height: 400px;
|
||||||
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------- */
|
/* ----------------------------------- */
|
||||||
@@ -156,7 +193,6 @@ iframe#MSearchResults {
|
|||||||
|
|
||||||
#SRIndex {
|
#SRIndex {
|
||||||
clear:both;
|
clear:both;
|
||||||
padding-bottom: 15px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.SREntry {
|
.SREntry {
|
||||||
@@ -169,8 +205,9 @@ iframe#MSearchResults {
|
|||||||
padding: 1px 5px;
|
padding: 1px 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.SRPage {
|
div.SRPage {
|
||||||
margin: 5px 2px;
|
margin: 5px 2px;
|
||||||
|
background-color: var(--search-results-background-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.SRChildren {
|
.SRChildren {
|
||||||
@@ -182,17 +219,18 @@ body.SRPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.SRSymbol {
|
.SRSymbol {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #425E97;
|
color: var(--search-results-foreground-color);
|
||||||
font-family: Arial, Verdana, sans-serif;
|
font-family: var(--font-family-search);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.SRScope {
|
a.SRScope {
|
||||||
display: block;
|
display: block;
|
||||||
color: #425E97;
|
color: var(--search-results-foreground-color);
|
||||||
font-family: Arial, Verdana, sans-serif;
|
font-family: var(--font-family-search);
|
||||||
|
font-size: 8pt;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
@@ -204,33 +242,31 @@ a.SRScope:focus, a.SRScope:active {
|
|||||||
|
|
||||||
span.SRScope {
|
span.SRScope {
|
||||||
padding-left: 4px;
|
padding-left: 4px;
|
||||||
|
font-family: var(--font-family-search);
|
||||||
}
|
}
|
||||||
|
|
||||||
.SRPage .SRStatus {
|
.SRPage .SRStatus {
|
||||||
padding: 2px 5px;
|
padding: 2px 5px;
|
||||||
font-size: 8pt;
|
font-size: 8pt;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
|
font-family: var(--font-family-search);
|
||||||
}
|
}
|
||||||
|
|
||||||
.SRResult {
|
.SRResult {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
DIV.searchresults {
|
div.searchresults {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------- External search page results */
|
/*---------------- External search page results */
|
||||||
|
|
||||||
.searchresult {
|
|
||||||
background-color: #F0F3F8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pages b {
|
.pages b {
|
||||||
color: white;
|
color: white;
|
||||||
padding: 5px 5px 3px 5px;
|
padding: 5px 5px 3px 5px;
|
||||||
background-image: url("../tab_a.png");
|
background-image: var(--nav-gradient-active-image-parent);
|
||||||
background-repeat: repeat-x;
|
background-repeat: repeat-x;
|
||||||
text-shadow: 0 1px 1px #000000;
|
text-shadow: 0 1px 1px #000000;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ function getYPos(item)
|
|||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
|
||||||
/* A class handling everything associated with the search panel.
|
/* A class handling everything associated with the search panel.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
@@ -80,9 +82,10 @@ function getYPos(item)
|
|||||||
storing this instance. Is needed to be able to set timeouts.
|
storing this instance. Is needed to be able to set timeouts.
|
||||||
resultPath - path to use for external files
|
resultPath - path to use for external files
|
||||||
*/
|
*/
|
||||||
function SearchBox(name, resultsPath, inFrame, label)
|
function SearchBox(name, resultsPath, extension)
|
||||||
{
|
{
|
||||||
if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
|
if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
|
||||||
|
if (!extension || extension == "") { extension = ".html"; }
|
||||||
|
|
||||||
// ---------- Instance variables
|
// ---------- Instance variables
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@@ -95,8 +98,7 @@ function SearchBox(name, resultsPath, inFrame, label)
|
|||||||
this.hideTimeout = 0;
|
this.hideTimeout = 0;
|
||||||
this.searchIndex = 0;
|
this.searchIndex = 0;
|
||||||
this.searchActive = false;
|
this.searchActive = false;
|
||||||
this.insideFrame = inFrame;
|
this.extension = extension;
|
||||||
this.searchLabel = label;
|
|
||||||
|
|
||||||
// ----------- DOM Elements
|
// ----------- DOM Elements
|
||||||
|
|
||||||
@@ -134,30 +136,14 @@ function SearchBox(name, resultsPath, inFrame, label)
|
|||||||
var searchSelectWindow = this.DOMSearchSelectWindow();
|
var searchSelectWindow = this.DOMSearchSelectWindow();
|
||||||
var searchField = this.DOMSearchSelect();
|
var searchField = this.DOMSearchSelect();
|
||||||
|
|
||||||
if (this.insideFrame)
|
var left = getXPos(searchField);
|
||||||
{
|
var top = getYPos(searchField);
|
||||||
var left = getXPos(searchField);
|
top += searchField.offsetHeight;
|
||||||
var top = getYPos(searchField);
|
|
||||||
left += searchField.offsetWidth + 6;
|
|
||||||
top += searchField.offsetHeight;
|
|
||||||
|
|
||||||
// show search selection popup
|
// show search selection popup
|
||||||
searchSelectWindow.style.display='block';
|
searchSelectWindow.style.display='block';
|
||||||
left -= searchSelectWindow.offsetWidth;
|
searchSelectWindow.style.left = left + 'px';
|
||||||
searchSelectWindow.style.left = left + 'px';
|
searchSelectWindow.style.top = top + 'px';
|
||||||
searchSelectWindow.style.top = top + 'px';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getXPos(searchField);
|
|
||||||
var top = getYPos(searchField);
|
|
||||||
top += searchField.offsetHeight;
|
|
||||||
|
|
||||||
// show search selection popup
|
|
||||||
searchSelectWindow.style.display='block';
|
|
||||||
searchSelectWindow.style.left = left + 'px';
|
|
||||||
searchSelectWindow.style.top = top + 'px';
|
|
||||||
}
|
|
||||||
|
|
||||||
// stop selection hide timer
|
// stop selection hide timer
|
||||||
if (this.hideTimeout)
|
if (this.hideTimeout)
|
||||||
@@ -170,7 +156,7 @@ function SearchBox(name, resultsPath, inFrame, label)
|
|||||||
|
|
||||||
this.OnSearchSelectHide = function()
|
this.OnSearchSelectHide = function()
|
||||||
{
|
{
|
||||||
this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
|
this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this),
|
||||||
this.closeSelectionTimeout);
|
this.closeSelectionTimeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,11 +189,13 @@ function SearchBox(name, resultsPath, inFrame, label)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
window.frames.MSearchResults.postMessage("take_focus", "*");
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (e.keyCode==27) // Escape out of the search field
|
else if (e.keyCode==27) // Escape out of the search field
|
||||||
{
|
{
|
||||||
|
e.stopPropagation();
|
||||||
this.DOMSearchField().blur();
|
this.DOMSearchField().blur();
|
||||||
this.DOMPopupSearchResultsWindow().style.display = 'none';
|
this.DOMPopupSearchResultsWindow().style.display = 'none';
|
||||||
this.DOMSearchClose().style.display = 'none';
|
this.DOMSearchClose().style.display = 'none';
|
||||||
@@ -224,7 +212,7 @@ function SearchBox(name, resultsPath, inFrame, label)
|
|||||||
if (searchValue != "") // non-empty search
|
if (searchValue != "") // non-empty search
|
||||||
{
|
{
|
||||||
// set timer for search update
|
// set timer for search update
|
||||||
this.keyTimeout = setTimeout(this.name + '.Search()',
|
this.keyTimeout = setTimeout(this.Search.bind(this),
|
||||||
this.keyTimeoutLength);
|
this.keyTimeoutLength);
|
||||||
}
|
}
|
||||||
else // empty search field
|
else // empty search field
|
||||||
@@ -302,6 +290,7 @@ function SearchBox(name, resultsPath, inFrame, label)
|
|||||||
}
|
}
|
||||||
else if (e.keyCode==13 || e.keyCode==27)
|
else if (e.keyCode==13 || e.keyCode==27)
|
||||||
{
|
{
|
||||||
|
e.stopPropagation();
|
||||||
this.OnSelectItem(this.searchIndex);
|
this.OnSelectItem(this.searchIndex);
|
||||||
this.CloseSelectionWindow();
|
this.CloseSelectionWindow();
|
||||||
this.DOMSearchField().focus();
|
this.DOMSearchField().focus();
|
||||||
@@ -339,55 +328,70 @@ function SearchBox(name, resultsPath, inFrame, label)
|
|||||||
idxChar = searchValue.substr(0, 2);
|
idxChar = searchValue.substr(0, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
var resultsPage;
|
var jsFile;
|
||||||
var resultsPageWithSearch;
|
|
||||||
var hasResultsPage;
|
|
||||||
|
|
||||||
var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
|
var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
|
||||||
if (idx!=-1)
|
if (idx!=-1)
|
||||||
{
|
{
|
||||||
var hexCode=idx.toString(16);
|
var hexCode=idx.toString(16);
|
||||||
resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
|
jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js';
|
||||||
resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
|
}
|
||||||
hasResultsPage = true;
|
|
||||||
}
|
var loadJS = function(url, impl, loc){
|
||||||
else // nothing available for this search term
|
var scriptTag = document.createElement('script');
|
||||||
{
|
scriptTag.src = url;
|
||||||
resultsPage = this.resultsPath + '/nomatches.html';
|
scriptTag.onload = impl;
|
||||||
resultsPageWithSearch = resultsPage;
|
scriptTag.onreadystatechange = impl;
|
||||||
hasResultsPage = false;
|
loc.appendChild(scriptTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.frames.MSearchResults.location = resultsPageWithSearch;
|
|
||||||
var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
|
var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
|
||||||
|
var domSearchBox = this.DOMSearchBox();
|
||||||
|
var domPopupSearchResults = this.DOMPopupSearchResults();
|
||||||
|
var domSearchClose = this.DOMSearchClose();
|
||||||
|
var resultsPath = this.resultsPath;
|
||||||
|
|
||||||
if (domPopupSearchResultsWindow.style.display!='block')
|
var handleResults = function() {
|
||||||
{
|
document.getElementById("Loading").style.display="none";
|
||||||
var domSearchBox = this.DOMSearchBox();
|
if (typeof searchData !== 'undefined') {
|
||||||
this.DOMSearchClose().style.display = 'inline-block';
|
createResults(resultsPath);
|
||||||
if (this.insideFrame)
|
document.getElementById("NoMatches").style.display="none";
|
||||||
{
|
}
|
||||||
var domPopupSearchResults = this.DOMPopupSearchResults();
|
|
||||||
domPopupSearchResultsWindow.style.position = 'relative';
|
if (idx!=-1) {
|
||||||
domPopupSearchResultsWindow.style.display = 'block';
|
searchResults.Search(searchValue);
|
||||||
var width = document.body.clientWidth - 8; // the -8 is for IE :-(
|
} else { // no file with search results => force empty search results
|
||||||
domPopupSearchResultsWindow.style.width = width + 'px';
|
searchResults.Search('====');
|
||||||
domPopupSearchResults.style.width = width + 'px';
|
}
|
||||||
}
|
|
||||||
else
|
if (domPopupSearchResultsWindow.style.display!='block')
|
||||||
{
|
{
|
||||||
var domPopupSearchResults = this.DOMPopupSearchResults();
|
domSearchClose.style.display = 'inline-block';
|
||||||
var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
|
var left = getXPos(domSearchBox) + 150;
|
||||||
var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
|
var top = getYPos(domSearchBox) + 20;
|
||||||
domPopupSearchResultsWindow.style.display = 'block';
|
domPopupSearchResultsWindow.style.display = 'block';
|
||||||
left -= domPopupSearchResults.offsetWidth;
|
left -= domPopupSearchResults.offsetWidth;
|
||||||
domPopupSearchResultsWindow.style.top = top + 'px';
|
var maxWidth = document.body.clientWidth;
|
||||||
domPopupSearchResultsWindow.style.left = left + 'px';
|
var maxHeight = document.body.clientHeight;
|
||||||
}
|
var width = 300;
|
||||||
|
if (left<10) left=10;
|
||||||
|
if (width+left+8>maxWidth) width=maxWidth-left-8;
|
||||||
|
var height = 400;
|
||||||
|
if (height+top+8>maxHeight) height=maxHeight-top-8;
|
||||||
|
domPopupSearchResultsWindow.style.top = top + 'px';
|
||||||
|
domPopupSearchResultsWindow.style.left = left + 'px';
|
||||||
|
domPopupSearchResultsWindow.style.width = width + 'px';
|
||||||
|
domPopupSearchResultsWindow.style.height = height + 'px';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsFile) {
|
||||||
|
loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow());
|
||||||
|
} else {
|
||||||
|
handleResults();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.lastSearchValue = searchValue;
|
this.lastSearchValue = searchValue;
|
||||||
this.lastResultsPage = resultsPage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------- Activation Functions
|
// -------- Activation Functions
|
||||||
@@ -401,22 +405,15 @@ function SearchBox(name, resultsPath, inFrame, label)
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.DOMSearchBox().className = 'MSearchBoxActive';
|
this.DOMSearchBox().className = 'MSearchBoxActive';
|
||||||
|
this.searchActive = true;
|
||||||
var searchField = this.DOMSearchField();
|
|
||||||
|
|
||||||
if (searchField.value == this.searchLabel) // clear "Search" term upon entry
|
|
||||||
{
|
|
||||||
searchField.value = '';
|
|
||||||
this.searchActive = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (!isActive) // directly remove the panel
|
else if (!isActive) // directly remove the panel
|
||||||
{
|
{
|
||||||
this.DOMSearchBox().className = 'MSearchBoxInactive';
|
this.DOMSearchBox().className = 'MSearchBoxInactive';
|
||||||
this.DOMSearchField().value = this.searchLabel;
|
|
||||||
this.searchActive = false;
|
this.searchActive = false;
|
||||||
this.lastSearchValue = ''
|
this.lastSearchValue = ''
|
||||||
this.lastResultsPage = '';
|
this.lastResultsPage = '';
|
||||||
|
this.DOMSearchField().value = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -439,12 +436,12 @@ function SearchResults(name)
|
|||||||
|
|
||||||
while (element && element!=parentElement)
|
while (element && element!=parentElement)
|
||||||
{
|
{
|
||||||
if (element.nodeName == 'DIV' && element.className == 'SRChildren')
|
if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren')
|
||||||
{
|
{
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (element.nodeName == 'DIV' && element.hasChildNodes())
|
if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes())
|
||||||
{
|
{
|
||||||
element = element.firstChild;
|
element = element.firstChild;
|
||||||
}
|
}
|
||||||
@@ -645,7 +642,7 @@ function SearchResults(name)
|
|||||||
}
|
}
|
||||||
else // return focus to search field
|
else // return focus to search field
|
||||||
{
|
{
|
||||||
parent.document.getElementById("MSearchField").focus();
|
document.getElementById("MSearchField").focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (this.lastKey==40) // Down
|
else if (this.lastKey==40) // Down
|
||||||
@@ -675,8 +672,9 @@ function SearchResults(name)
|
|||||||
}
|
}
|
||||||
else if (this.lastKey==27) // Escape
|
else if (this.lastKey==27) // Escape
|
||||||
{
|
{
|
||||||
parent.searchBox.CloseResultsWindow();
|
e.stopPropagation();
|
||||||
parent.document.getElementById("MSearchField").focus();
|
searchBox.CloseResultsWindow();
|
||||||
|
document.getElementById("MSearchField").focus();
|
||||||
}
|
}
|
||||||
else if (this.lastKey==13) // Enter
|
else if (this.lastKey==13) // Enter
|
||||||
{
|
{
|
||||||
@@ -718,8 +716,9 @@ function SearchResults(name)
|
|||||||
}
|
}
|
||||||
else if (this.lastKey==27) // Escape
|
else if (this.lastKey==27) // Escape
|
||||||
{
|
{
|
||||||
parent.searchBox.CloseResultsWindow();
|
e.stopPropagation();
|
||||||
parent.document.getElementById("MSearchField").focus();
|
searchBox.CloseResultsWindow();
|
||||||
|
document.getElementById("MSearchField").focus();
|
||||||
}
|
}
|
||||||
else if (this.lastKey==13) // Enter
|
else if (this.lastKey==13) // Enter
|
||||||
{
|
{
|
||||||
@@ -742,9 +741,10 @@ function setClassAttr(elem,attr)
|
|||||||
elem.setAttribute('className',attr);
|
elem.setAttribute('className',attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createResults()
|
function createResults(resultsPath)
|
||||||
{
|
{
|
||||||
var results = document.getElementById("SRResults");
|
var results = document.getElementById("SRResults");
|
||||||
|
results.innerHTML = '';
|
||||||
for (var e=0; e<searchData.length; e++)
|
for (var e=0; e<searchData.length; e++)
|
||||||
{
|
{
|
||||||
var id = searchData[e][0];
|
var id = searchData[e][0];
|
||||||
@@ -761,11 +761,16 @@ function createResults()
|
|||||||
srEntry.appendChild(srLink);
|
srEntry.appendChild(srLink);
|
||||||
if (searchData[e][1].length==2) // single result
|
if (searchData[e][1].length==2) // single result
|
||||||
{
|
{
|
||||||
srLink.setAttribute('href',searchData[e][1][1][0]);
|
srLink.setAttribute('href',resultsPath+searchData[e][1][1][0]);
|
||||||
|
srLink.setAttribute('onclick','searchBox.CloseResultsWindow()');
|
||||||
if (searchData[e][1][1][1])
|
if (searchData[e][1][1][1])
|
||||||
{
|
{
|
||||||
srLink.setAttribute('target','_parent');
|
srLink.setAttribute('target','_parent');
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
srLink.setAttribute('target','_blank');
|
||||||
|
}
|
||||||
var srScope = document.createElement('span');
|
var srScope = document.createElement('span');
|
||||||
setClassAttr(srScope,'SRScope');
|
setClassAttr(srScope,'SRScope');
|
||||||
srScope.innerHTML = searchData[e][1][1][2];
|
srScope.innerHTML = searchData[e][1][1][2];
|
||||||
@@ -782,11 +787,16 @@ function createResults()
|
|||||||
srChild.setAttribute('id','Item'+e+'_c'+c);
|
srChild.setAttribute('id','Item'+e+'_c'+c);
|
||||||
setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
|
setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
|
||||||
setClassAttr(srChild,'SRScope');
|
setClassAttr(srChild,'SRScope');
|
||||||
srChild.setAttribute('href',searchData[e][1][c+1][0]);
|
srChild.setAttribute('href',resultsPath+searchData[e][1][c+1][0]);
|
||||||
|
srChild.setAttribute('onclick','searchBox.CloseResultsWindow()');
|
||||||
if (searchData[e][1][c+1][1])
|
if (searchData[e][1][c+1][1])
|
||||||
{
|
{
|
||||||
srChild.setAttribute('target','_parent');
|
srChild.setAttribute('target','_parent');
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
srChild.setAttribute('target','_blank');
|
||||||
|
}
|
||||||
srChild.innerHTML = searchData[e][1][c+1][2];
|
srChild.innerHTML = searchData[e][1][c+1][2];
|
||||||
srChildren.appendChild(srChild);
|
srChildren.appendChild(srChild);
|
||||||
}
|
}
|
||||||
@@ -800,6 +810,7 @@ function createResults()
|
|||||||
function init_search()
|
function init_search()
|
||||||
{
|
{
|
||||||
var results = document.getElementById("MSearchSelectWindow");
|
var results = document.getElementById("MSearchSelectWindow");
|
||||||
|
results.tabIndex=0;
|
||||||
for (var key in indexSectionLabels)
|
for (var key in indexSectionLabels)
|
||||||
{
|
{
|
||||||
var link = document.createElement('a');
|
var link = document.createElement('a');
|
||||||
@@ -810,5 +821,20 @@ function init_search()
|
|||||||
results.appendChild(link);
|
results.appendChild(link);
|
||||||
}
|
}
|
||||||
searchBox.OnSelectItem(0);
|
searchBox.OnSelectItem(0);
|
||||||
|
|
||||||
|
var input = document.getElementById("MSearchSelect");
|
||||||
|
var searchSelectWindow = document.getElementById("MSearchSelectWindow");
|
||||||
|
input.tabIndex=0;
|
||||||
|
input.addEventListener("keydown", function(event) {
|
||||||
|
if (event.keyCode==13 || event.keyCode==40) {
|
||||||
|
event.preventDefault();
|
||||||
|
if (searchSelectWindow.style.display == 'block') {
|
||||||
|
searchBox.CloseSelectionWindow();
|
||||||
|
} else {
|
||||||
|
searchBox.OnSearchSelectShow();
|
||||||
|
searchBox.DOMSearchSelectWindow().focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
/* @license-end */
|
/* @license-end */
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 567 B |
|
Before Width: | Height: | Size: 158 B |
|
Before Width: | Height: | Size: 553 B |
@@ -1,6 +1,6 @@
|
|||||||
var indexSectionsWithContent =
|
var indexSectionsWithContent =
|
||||||
{
|
{
|
||||||
0: "cdhnortwxy",
|
0: "cdfhinortwxy",
|
||||||
1: "t",
|
1: "t",
|
||||||
2: "t",
|
2: "t",
|
||||||
3: "cdhnortwxy",
|
3: "cdhnortwxy",
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
<!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="typedefs_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>
|
|
||||||