Compare commits
764 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf6c774305 | ||
|
|
c308d43416 | ||
|
|
773040f9d9 | ||
|
|
a831b5a986 | ||
|
|
19b393b624 | ||
|
|
9d9d8fe658 | ||
|
|
78e97e38cb | ||
|
|
468f2fed27 | ||
|
|
5abf2536f6 | ||
|
|
5fce2e9421 | ||
|
|
907dd683a4 | ||
|
|
f008876cc1 | ||
|
|
5bc43c7821 | ||
|
|
f3ad13e3d8 | ||
|
|
94e152b186 | ||
|
|
073b0e88a1 | ||
|
|
1b385f37f3 | ||
|
|
fd778bba46 | ||
|
|
8d403aeb6a | ||
|
|
01b74c101e | ||
|
|
db0dec3c5a | ||
|
|
ba6e9d8a11 | ||
|
|
5426a4cb16 | ||
|
|
d0bac69a8a | ||
|
|
59322e0973 | ||
|
|
4ded4dfac6 | ||
|
|
02fa8f244e | ||
|
|
32120054c2 | ||
|
|
1478361204 | ||
|
|
e5c1613ccd | ||
|
|
b0971e47d7 | ||
|
|
e248d430e2 | ||
|
|
acb634931a | ||
|
|
1db1ce45da | ||
|
|
d0c3aa900b | ||
|
|
6a2b067428 | ||
|
|
11eec4a398 | ||
|
|
301ba4f305 | ||
|
|
70f236ddd7 | ||
|
|
2a4f189444 | ||
|
|
9d64f3c60b | ||
|
|
da2a27ef05 | ||
|
|
c082dc039d | ||
|
|
d4c41fe0da | ||
|
|
a0b7de9a47 | ||
|
|
2252795571 | ||
|
|
eb38b61bfe | ||
|
|
47b29e8cd9 | ||
|
|
e1e816e665 | ||
|
|
6441018150 | ||
|
|
fcfc6c5eed | ||
|
|
786b649331 | ||
|
|
f4ba09b33a | ||
|
|
0f4fcced0a | ||
|
|
82bf7f5858 | ||
|
|
3582ce90bb | ||
|
|
d6d7b53968 | ||
|
|
f9f0c75bb8 | ||
|
|
3da94de248 | ||
|
|
ab664e35fc | ||
|
|
ce26e83f47 | ||
|
|
74e4c793cd | ||
|
|
a280fa630c | ||
|
|
6aae007745 | ||
|
|
4ad94b2963 | ||
|
|
2d4b2f14d0 | ||
|
|
9366cf0bca | ||
|
|
13e6b151b0 | ||
|
|
1ee329d617 | ||
|
|
b47c5e737f | ||
|
|
ce262eb5d7 | ||
|
|
27f817cd11 | ||
|
|
0df2e2188b | ||
|
|
6d22430a3a | ||
|
|
e9e3a2edd7 | ||
|
|
211c69f317 | ||
|
|
1625253d49 | ||
|
|
a0047bdea4 | ||
|
|
7bfb22af12 | ||
|
|
ac4a899511 | ||
|
|
dfefba7752 | ||
|
|
4cf67f2363 | ||
|
|
9407cf7f47 | ||
|
|
cb88e5da80 | ||
|
|
e9d9c31fd2 | ||
|
|
077e5bb4e0 | ||
|
|
a1dd35680d | ||
|
|
a09ba29a55 | ||
|
|
8ce2c9119a | ||
|
|
db04435165 | ||
|
|
7723d7f7d0 | ||
|
|
628c168c86 | ||
|
|
1120ff29a1 | ||
|
|
1945ad961b | ||
|
|
6e9d43e085 | ||
|
|
9055fb408d | ||
|
|
9e6c6a14f8 | ||
|
|
3ff13e651b | ||
|
|
1d50a8cd08 | ||
|
|
123f7258a8 | ||
|
|
e5091f2cf3 | ||
|
|
8f1c0a681c | ||
|
|
68cf83db56 | ||
|
|
f06cc1200f | ||
|
|
5c064de10d | ||
|
|
2e480fa2a3 | ||
|
|
5e576386b5 | ||
|
|
0d61e80ab0 | ||
|
|
ee681aa304 | ||
|
|
346837cad3 | ||
|
|
eb7962a02b | ||
|
|
3c67d4f7c0 | ||
|
|
1959e28b49 | ||
|
|
dec79952d6 | ||
|
|
2628c562bc | ||
|
|
28d1a1300c | ||
|
|
1a3aebd88e | ||
|
|
1e81b0c3ea | ||
|
|
b2817f5251 | ||
|
|
6f241d4d42 | ||
|
|
1385f8b281 | ||
|
|
742fb37dde | ||
|
|
a839a7a964 | ||
|
|
3f56bd597c | ||
|
|
e5f280c4c4 | ||
|
|
4f58123130 | ||
|
|
622d6678a8 | ||
|
|
b3247c7d71 | ||
|
|
a572622dd6 | ||
|
|
7cb8de4ae0 | ||
|
|
056536f660 | ||
|
|
7c202f76e7 | ||
|
|
fa722636be | ||
|
|
2354810a43 | ||
|
|
45c1e3a887 | ||
|
|
f57bae0ddd | ||
|
|
025c1f66de | ||
|
|
3ab68cf563 | ||
|
|
5f972324ee | ||
|
|
f76c01d0bd | ||
|
|
d4be42360c | ||
|
|
e621dfc508 | ||
|
|
9100b67a75 | ||
|
|
bd49803f92 | ||
|
|
ae41128845 | ||
|
|
54e6b8e806 | ||
|
|
83aeb7b28c | ||
|
|
a560e4b423 | ||
|
|
fc11193e7a | ||
|
|
e7f88aec23 | ||
|
|
aefd8b7942 | ||
|
|
18dcac4632 | ||
|
|
03841e6e89 | ||
|
|
d123c125c5 | ||
|
|
8632f1b262 | ||
|
|
bba7978981 | ||
|
|
28f00bf235 | ||
|
|
ab80273b61 | ||
|
|
53c635b8e8 | ||
|
|
46ecffa324 | ||
|
|
219470d6ac | ||
|
|
15aaa7f7e2 | ||
|
|
45bbe06ec5 | ||
|
|
2d62325754 | ||
|
|
f9134384b7 | ||
|
|
ce0dd949b2 | ||
|
|
8ff67fdb24 | ||
|
|
55a18d4007 | ||
|
|
2d56acb840 | ||
|
|
c454c595dc | ||
|
|
0463f7c9aa | ||
|
|
04dd34c14e | ||
|
|
3ee3d8799a | ||
|
|
6c8a71efa7 | ||
|
|
271b0bf033 | ||
|
|
6e053525ee | ||
|
|
fe11699d90 | ||
|
|
cf888486d1 | ||
|
|
cb49bb00d9 | ||
|
|
cbfa696fc1 | ||
|
|
f5cd71c5cf | ||
|
|
da047e8b14 | ||
|
|
6c3fc97b1a | ||
|
|
3128061382 | ||
|
|
8af3f8a9cb | ||
|
|
d38b4f21ec | ||
|
|
e8aa5fa934 | ||
|
|
ec6941f7bc | ||
|
|
499c470b63 | ||
|
|
9c8cee8c29 | ||
|
|
4e356a92dc | ||
|
|
93eaa37a3b | ||
|
|
f3a8684cd1 | ||
|
|
eb59b6e72d | ||
|
|
368cd52d38 | ||
|
|
e7f1418525 | ||
|
|
2111c5acda | ||
|
|
5a3b4fed4b | ||
|
|
5f2cbbd039 | ||
|
|
fbe5007fbc | ||
|
|
71e971fb35 | ||
|
|
6fa5ebdc10 | ||
|
|
d70a5c12fc | ||
|
|
aa769febf2 | ||
|
|
d65e768b2e | ||
|
|
1e32fe3113 | ||
|
|
250c887763 | ||
|
|
e42032ba62 | ||
|
|
17de518357 | ||
|
|
7e3acc0e0a | ||
|
|
ac85335cd8 | ||
|
|
bf04316e63 | ||
|
|
d8da49effe | ||
|
|
30ebafda2a | ||
|
|
60efb896e0 | ||
|
|
8e9cef2e6f | ||
|
|
870b4f28b4 | ||
|
|
b961f0bfce | ||
|
|
54792ba340 | ||
|
|
498d9bc92f | ||
|
|
b4922b42e7 | ||
|
|
465a9fe0cb | ||
|
|
00d82c425e | ||
|
|
b5a55e6dd7 | ||
|
|
f62dbccf5f | ||
|
|
b657631953 | ||
|
|
58ae401e50 | ||
|
|
333f3cf756 | ||
|
|
73befdb148 | ||
|
|
6709e4a0cf | ||
|
|
82923eb93a | ||
|
|
a3ef34c626 | ||
|
|
6fa14b37ee | ||
|
|
ce4ff407ff | ||
|
|
b1682fb7c8 | ||
|
|
b2db23c449 | ||
|
|
7222ec2717 | ||
|
|
8fb37b8171 | ||
|
|
b3b3b29e4c | ||
|
|
7170d9e0e5 | ||
|
|
57e206662a | ||
|
|
939e466082 | ||
|
|
7c726a4515 | ||
|
|
a61fd32137 | ||
|
|
944aa8e3c4 | ||
|
|
2a0b4ac337 | ||
|
|
cf0e58de53 | ||
|
|
b6590d67b3 | ||
|
|
22eb6c2bf3 | ||
|
|
9a2a42d8ee | ||
|
|
8c4c6d29e6 | ||
|
|
9993410e44 | ||
|
|
b3b9a213bf | ||
|
|
9bbf2b8551 | ||
|
|
45a2369b44 | ||
|
|
99f0289606 | ||
|
|
03e755bbd3 | ||
|
|
74b9f609a2 | ||
|
|
739edeb8a6 | ||
|
|
a3deac158b | ||
|
|
10dc5cfeff | ||
|
|
b3817dab86 | ||
|
|
1a4778f8f0 | ||
|
|
c23e36e800 | ||
|
|
65c5ec2f0f | ||
|
|
9cc597221e | ||
|
|
6ed4d9d110 | ||
|
|
306e1d2d77 | ||
|
|
162c9985d6 | ||
|
|
7a7da9460a | ||
|
|
ac09954b1d | ||
|
|
6a25894472 | ||
|
|
ecc583682a | ||
|
|
07afe8a50f | ||
|
|
eb32cc1e6d | ||
|
|
691cd93383 | ||
|
|
54014d9c2a | ||
|
|
06bf10d19e | ||
|
|
89b5e06df5 | ||
|
|
eea6424596 | ||
|
|
7a8c53e4bd | ||
|
|
db6d8fca59 | ||
|
|
f15ef33768 | ||
|
|
1f79c7c8c8 | ||
|
|
bec45b162b | ||
|
|
80bbd3908f | ||
|
|
665c96edaa | ||
|
|
3ebcc3206f | ||
|
|
44320a210b | ||
|
|
a8b6ea2f8d | ||
|
|
96869f4b6e | ||
|
|
f64b36fd57 | ||
|
|
89a3f970da | ||
|
|
feccdcf8c8 | ||
|
|
c69a1cd7a0 | ||
|
|
3b7015d5d8 | ||
|
|
cab2a8503e | ||
|
|
771ab19437 | ||
|
|
eb319ed8a4 | ||
|
|
3f7608348d | ||
|
|
2e429094a4 | ||
|
|
dcf9f15d6e | ||
|
|
8b5a0093ee | ||
|
|
0e94025ac7 | ||
|
|
c60d662ee4 | ||
|
|
3af282df3c | ||
|
|
dd7f03be56 | ||
|
|
cbc4b53169 | ||
|
|
ffd9d052f6 | ||
|
|
cbc9970ecb | ||
|
|
2b7a391672 | ||
|
|
2e2ea8e02c | ||
|
|
246b01bb0a | ||
|
|
c4e3c361d7 | ||
|
|
2ab5ea6c48 | ||
|
|
c641cddb80 | ||
|
|
86af36aebc | ||
|
|
11c4010c3c | ||
|
|
2517ef72ed | ||
|
|
9ab2c1071b | ||
|
|
cbcb53617b | ||
|
|
ada430bb3d | ||
|
|
406bb01ca2 | ||
|
|
a6a24c270e | ||
|
|
52a4ec6c8a | ||
|
|
8f7f49a014 | ||
|
|
cf78941db4 | ||
|
|
51eba06011 | ||
|
|
d71a6e0c25 | ||
|
|
f0abd46c3b | ||
|
|
ac4daa7716 | ||
|
|
af69295d3f | ||
|
|
6aed11293d | ||
|
|
a5005751a3 | ||
|
|
25347882ed | ||
|
|
8de75d0f57 | ||
|
|
22048207ea | ||
|
|
2b223a034b | ||
|
|
c4930d8b0d | ||
|
|
577ecd93f1 | ||
|
|
ff30c63934 | ||
|
|
45453085e7 | ||
|
|
b1fec4ff98 | ||
|
|
5976e42550 | ||
|
|
62bae204f4 | ||
|
|
8163aad6cc | ||
|
|
99f125ec07 | ||
|
|
13af139624 | ||
|
|
87fd253bd0 | ||
|
|
bf8a5feb79 | ||
|
|
535674b1b8 | ||
|
|
c9da78525b | ||
|
|
0691162a8b | ||
|
|
9cb418d221 | ||
|
|
935d1d6398 | ||
|
|
86ae5913b1 | ||
|
|
d51e6c2f6b | ||
|
|
6842c7c023 | ||
|
|
6e6b28c3ce | ||
|
|
b9c4b58ab2 | ||
|
|
62999d7708 | ||
|
|
ceb552a9c9 | ||
|
|
e59196dbdf | ||
|
|
6cb7f40a18 | ||
|
|
040435afb9 | ||
|
|
fb0c394037 | ||
|
|
e1ac40104c | ||
|
|
3f764b7253 | ||
|
|
1e2f49619e | ||
|
|
4c773cff16 | ||
|
|
a29d6b4113 | ||
|
|
b329697ded | ||
|
|
2a6b8316fc | ||
|
|
e2dd3e3e5c | ||
|
|
0f4469c52f | ||
|
|
bb383b4175 | ||
|
|
402a715f82 | ||
|
|
306add8b78 | ||
|
|
9665f5e3f9 | ||
|
|
ef263e3e83 | ||
|
|
0426cd3441 | ||
|
|
ea1eea4742 | ||
|
|
3ebcf7cf86 | ||
|
|
803b5d24a8 | ||
|
|
eca0637c81 | ||
|
|
55620c6ef2 | ||
|
|
2240974d5d | ||
|
|
7affbfc241 | ||
|
|
cd2d8e1cc7 | ||
|
|
f72f1f2e94 | ||
|
|
bbd9b71171 | ||
|
|
c0a8256a92 | ||
|
|
1d4c51a0ac | ||
|
|
72a3cc0ecd | ||
|
|
339589f3cd | ||
|
|
eb8d096ba6 | ||
|
|
fe77fa22d9 | ||
|
|
88b6c97568 | ||
|
|
0a9a252654 | ||
|
|
de26249a99 | ||
|
|
a6efae1488 | ||
|
|
e947139c7c | ||
|
|
bdc7650b9e | ||
|
|
d729f4da9c | ||
|
|
eb66974f3a | ||
|
|
f5644c3498 | ||
|
|
55e328ecb8 | ||
|
|
3d5189891b | ||
|
|
bdb36e1a14 | ||
|
|
022a9016df | ||
|
|
e408761dda | ||
|
|
9b012bd026 | ||
|
|
0713c1bb54 | ||
|
|
2e2ce5a1da | ||
|
|
684ace1924 | ||
|
|
d92949b0ac | ||
|
|
43513893f0 | ||
|
|
a1a920cc51 | ||
|
|
88b90bdc07 | ||
|
|
cce13c767e | ||
|
|
fe80ec2275 | ||
|
|
2261e1e408 | ||
|
|
eddc355d18 | ||
|
|
29823fa9a6 | ||
|
|
9c168ad23b | ||
|
|
f6d7b7768b | ||
|
|
bc3c1685a7 | ||
|
|
19224b2252 | ||
|
|
40dd3146cd | ||
|
|
5d87f6ddff | ||
|
|
d2a7495012 | ||
|
|
b7c8c86d6a | ||
|
|
e31e49478c | ||
|
|
80cb26444a | ||
|
|
a4940d1396 | ||
|
|
32760451fe | ||
|
|
fa8bcb825c | ||
|
|
580f391537 | ||
|
|
46a0392cf3 | ||
|
|
26dd86bd89 | ||
|
|
927a10db05 | ||
|
|
cdcac99f6d | ||
|
|
8951cf01fe | ||
|
|
f7c11051de | ||
|
|
9d77dad4c9 | ||
|
|
aecea388c7 | ||
|
|
493be61707 | ||
|
|
779bd68d20 | ||
|
|
d13df21341 | ||
|
|
c71ab2f7c2 | ||
|
|
983503eddf | ||
|
|
aee4f72160 | ||
|
|
8a74848a23 | ||
|
|
a8ab3424c7 | ||
|
|
3728aa01d8 | ||
|
|
821455542c | ||
|
|
d762c19b98 | ||
|
|
2472bc7119 | ||
|
|
a81f542726 | ||
|
|
3da10338c6 | ||
|
|
73821bff78 | ||
|
|
23843313eb | ||
|
|
b7d6e84d6a | ||
|
|
a8fb48b528 | ||
|
|
88c7e30045 | ||
|
|
d7a25595ce | ||
|
|
cf55f0b533 | ||
|
|
fced14c7b4 | ||
|
|
495e43426e | ||
|
|
5ef463056a | ||
|
|
c728cfd8f2 | ||
|
|
5de454b291 | ||
|
|
5033f3e19a | ||
|
|
7f4a81b769 | ||
|
|
da13af6b8d | ||
|
|
d88f7ddfbe | ||
|
|
bc56b754e1 | ||
|
|
52ded87680 | ||
|
|
64086281b3 | ||
|
|
1419852c42 | ||
|
|
1b3fd7eead | ||
|
|
a3c3bbc2f4 | ||
|
|
0bf325b8ba | ||
|
|
6a61c1e6dc | ||
|
|
1e9cbbad8a | ||
|
|
3b489c3af7 | ||
|
|
976fd9687e | ||
|
|
b844eaa360 | ||
|
|
3402a66a22 | ||
|
|
78df2e6115 | ||
|
|
6e8220eddc | ||
|
|
90d6c3824b | ||
|
|
2a9f0cf36c | ||
|
|
333e9187c8 | ||
|
|
e3cb4eb05d | ||
|
|
05524e671e | ||
|
|
715bb41ead | ||
|
|
a758460175 | ||
|
|
8940e6ca86 | ||
|
|
b775351012 | ||
|
|
e47364ac56 | ||
|
|
24e92e9fc0 | ||
|
|
72130be99f | ||
|
|
1a45b81fa2 | ||
|
|
e5eaf37440 | ||
|
|
771886c192 | ||
|
|
a32b3eca99 | ||
|
|
29d30cb855 | ||
|
|
35db75ea3c | ||
|
|
393bac6de4 | ||
|
|
b0a9cca1e3 | ||
|
|
425c5a57cf | ||
|
|
dab6b8a1a3 | ||
|
|
343478622d | ||
|
|
f57b8a6357 | ||
|
|
66129dc660 | ||
|
|
06296e80c9 | ||
|
|
61976bd8a9 | ||
|
|
4dae78f498 | ||
|
|
230d09dbed | ||
|
|
6887f05d19 | ||
|
|
ff6961f3d2 | ||
|
|
714839d402 | ||
|
|
beb0b33764 | ||
|
|
b1398cba43 | ||
|
|
ac9a92ebbd | ||
|
|
06fa20d407 | ||
|
|
0816d086b5 | ||
|
|
fe9c907b45 | ||
|
|
d76ba910e9 | ||
|
|
d0c9f0cffd | ||
|
|
8666f4f94c | ||
|
|
4d2ff7dad7 | ||
|
|
9e5b681195 | ||
|
|
0c989d9e90 | ||
|
|
4186162665 | ||
|
|
c2caad07bc | ||
|
|
72a8ca0d8e | ||
|
|
9fe22dac31 | ||
|
|
ffb2b6e200 | ||
|
|
9a341f803f | ||
|
|
241ad88b7d | ||
|
|
990342cd57 | ||
|
|
fdd625efa5 | ||
|
|
ef9a4e05ba | ||
|
|
0cfc4c17b7 | ||
|
|
51d6bb30cf | ||
|
|
8bad4251a9 | ||
|
|
26c6606772 | ||
|
|
0d0705f445 | ||
|
|
377955e606 | ||
|
|
79241e3415 | ||
|
|
b1068fa2da | ||
|
|
832b1fc5d3 | ||
|
|
6f92ff617a | ||
|
|
f67c04c05e | ||
|
|
de23dd8068 | ||
|
|
c8b0226d91 | ||
|
|
79df67debb | ||
|
|
7a9faaefb4 | ||
|
|
d794360250 | ||
|
|
3064cf7410 | ||
|
|
fc9995e4c9 | ||
|
|
2b03fe2710 | ||
|
|
17882fd8cc | ||
|
|
506a742193 | ||
|
|
b52f3e69cb | ||
|
|
ad64b5a4c9 | ||
|
|
3c8238322f | ||
|
|
c7e10b21e8 | ||
|
|
7a6ed075ea | ||
|
|
dd5fcdd007 | ||
|
|
6e11d6899c | ||
|
|
2ae7918a8e | ||
|
|
4dafea685d | ||
|
|
88f260c78c | ||
|
|
6ffed933d7 | ||
|
|
ee44371925 | ||
|
|
fc26b6577a | ||
|
|
40a0a023fa | ||
|
|
695b6e8680 | ||
|
|
aa255e2946 | ||
|
|
bcb5f02392 | ||
|
|
c33347c0aa | ||
|
|
1909c59bad | ||
|
|
12c29c9a7f | ||
|
|
b14813947e | ||
|
|
d772f9ac45 | ||
|
|
4f7b7b339c | ||
|
|
78b227e251 | ||
|
|
b53f410228 | ||
|
|
823fbed414 | ||
|
|
ce6891f048 | ||
|
|
f9baac9585 | ||
|
|
df42b3cdf5 | ||
|
|
adf5551ba9 | ||
|
|
e1efc8a0ef | ||
|
|
95e4cb2060 | ||
|
|
0e9bf6442b | ||
|
|
dd59233dd4 | ||
|
|
a15f19f2d2 | ||
|
|
d4b453c26e | ||
|
|
db0e2791e0 | ||
|
|
aa367580e8 | ||
|
|
5eb1efa3d2 | ||
|
|
3bf21e05e1 | ||
|
|
d45c54992b | ||
|
|
05d24e826d | ||
|
|
42aeac3ee2 | ||
|
|
7d9f758e52 | ||
|
|
15c0876191 | ||
|
|
c90144950f | ||
|
|
20e158dcb7 | ||
|
|
f27f38b02d | ||
|
|
4798b7e806 | ||
|
|
2bdc0425df | ||
|
|
4d82ddb0c9 | ||
|
|
50cfc464b8 | ||
|
|
84c25cbec9 | ||
|
|
ea657b2f74 | ||
|
|
f9c2dd2684 | ||
|
|
895fd6d0d3 | ||
|
|
34dca05227 | ||
|
|
2bdadb44a7 | ||
|
|
54918b37fc | ||
|
|
e2ce3b5eb0 | ||
|
|
ffa5e59218 | ||
|
|
5aec4afc62 | ||
|
|
c7a32466a6 | ||
|
|
006bc58dd6 | ||
|
|
6f75a351a3 | ||
|
|
cccfdcb8ab | ||
|
|
c56cb476f6 | ||
|
|
693f4a5600 | ||
|
|
2c0c807fcc | ||
|
|
ad2f618f0b | ||
|
|
38c9970b95 | ||
|
|
68550a7e99 | ||
|
|
2885cf5830 | ||
|
|
d9712ed14b | ||
|
|
d4ab63d191 | ||
|
|
88dee5863a | ||
|
|
e26c687b21 | ||
|
|
e189ec7a48 | ||
|
|
9397469012 | ||
|
|
2d07ee519d | ||
|
|
ba55b2cdfe | ||
|
|
3e00f03aea | ||
|
|
edc846f4fe | ||
|
|
cc0733ad78 | ||
|
|
a113506d17 | ||
|
|
8d55c88cda | ||
|
|
a2f06448c8 | ||
|
|
7db5273ea7 | ||
|
|
b3a028e356 | ||
|
|
5a7e9e5baa | ||
|
|
43d8cf4d45 | ||
|
|
7ebf2941a9 | ||
|
|
9f9436ae23 | ||
|
|
cb92dccf0d | ||
|
|
b10aafb889 | ||
|
|
62eeefcb3d | ||
|
|
e163653f99 | ||
|
|
c44750e50e | ||
|
|
4b509280ce | ||
|
|
5430aa1863 | ||
|
|
4ac8700537 | ||
|
|
5aa6c9a553 | ||
|
|
dbbef06227 | ||
|
|
2e8ff4b084 | ||
|
|
c6501f7f5f | ||
|
|
19eeaa7908 | ||
|
|
07e982d9b4 | ||
|
|
1e67274bd7 | ||
|
|
faa868bbb6 | ||
|
|
b51ee895d8 | ||
|
|
fe739656f9 | ||
|
|
910a35725c | ||
|
|
eaa31f52b3 | ||
|
|
e2f8e694d0 | ||
|
|
6cef2b1059 | ||
|
|
f57a22de55 | ||
|
|
596b96623f | ||
|
|
c45653e471 | ||
|
|
490c7f955a | ||
|
|
fff6c23a65 | ||
|
|
3d72728169 | ||
|
|
d64e23e6f8 | ||
|
|
d3131c1b3d | ||
|
|
71e06a7d81 | ||
|
|
a6b7fbd352 | ||
|
|
a6ef282a49 | ||
|
|
ecc9560822 | ||
|
|
982e2099a4 | ||
|
|
cadabd4239 | ||
|
|
e8be2c612a | ||
|
|
56e017d71a | ||
|
|
e500591710 | ||
|
|
2ccf4d1a70 | ||
|
|
49eaa7572d | ||
|
|
7308ffee43 | ||
|
|
94b6c02d7d | ||
|
|
922b14b8d8 | ||
|
|
f369f17f8a | ||
|
|
8ca34d4b33 | ||
|
|
5d2514b86f | ||
|
|
2c63c003be | ||
|
|
27df2a4c03 | ||
|
|
1370f10326 | ||
|
|
216cc641c9 | ||
|
|
24f11a73f2 | ||
|
|
3a25f7b1d7 | ||
|
|
6eb29ddb6f | ||
|
|
ae8d0dc35f | ||
|
|
4d877931ab | ||
|
|
7ef26165cc | ||
|
|
371b420ecf | ||
|
|
ce84fc8eed | ||
|
|
aba7ceda4f | ||
|
|
b2c4745aa3 | ||
|
|
38cb1ec2a7 | ||
|
|
cd7c3e6672 | ||
|
|
7185b719cc | ||
|
|
a5830628b9 | ||
|
|
ae92418cc1 | ||
|
|
f82b9f968b | ||
|
|
1f3635c496 | ||
|
|
7bd24b26e0 | ||
|
|
ca866c48f0 | ||
|
|
3b21982b60 | ||
|
|
7657726d38 | ||
|
|
d081fd728c | ||
|
|
07796da4e5 | ||
|
|
bcda6834d6 | ||
|
|
71ccb39d1e | ||
|
|
a4a48ed06c | ||
|
|
1520ee2986 | ||
|
|
8cda1c32ec | ||
|
|
96573d05b5 | ||
|
|
dadebe97e4 | ||
|
|
c32e0c23c0 | ||
|
|
16962c1132 | ||
|
|
6f2d3c2c97 | ||
|
|
86fbf35fb6 | ||
|
|
0be9fa5735 | ||
|
|
b92710377b | ||
|
|
822c8507bb | ||
|
|
d3eb40b97a | ||
|
|
c8843a0b14 | ||
|
|
418fe286c2 | ||
|
|
b7c41932ed | ||
|
|
fca3e72600 | ||
|
|
9495a94490 | ||
|
|
fef9852da3 | ||
|
|
d0ad5a9447 | ||
|
|
24211153fa | ||
|
|
d6c06349ed | ||
|
|
ee20edd645 | ||
|
|
7a2f3a4edf | ||
|
|
fc5c0c645a | ||
|
|
f610d61fcc | ||
|
|
c49694a34a | ||
|
|
17c3755f9a | ||
|
|
17745ddd86 |
14
.gitignore
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
.DS_Store
|
||||||
|
Makefile.in
|
||||||
|
aclocal.m4
|
||||||
|
ar-lib
|
||||||
|
autom4te.cache
|
||||||
|
compile
|
||||||
|
config.guess
|
||||||
|
config.h.in
|
||||||
|
config.sub
|
||||||
|
configure
|
||||||
|
depcomp
|
||||||
|
install-sh
|
||||||
|
ltmain.sh
|
||||||
|
missing
|
||||||
131
.travis.yml
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
language: c
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- os: linux
|
||||||
|
env: BUILD_OFFICIAL=1
|
||||||
|
sudo: required
|
||||||
|
services:
|
||||||
|
- docker
|
||||||
|
- os: osx
|
||||||
|
env: BUILD_OFFICIAL=1
|
||||||
|
osx_image: xcode7.3
|
||||||
|
- os: linux
|
||||||
|
compiler: clang
|
||||||
|
env:
|
||||||
|
CFLAGS="-O1 -g -fsanitize=address -fno-omit-frame-pointer"
|
||||||
|
CONFIGURE_FLAGS="--disable-shared"
|
||||||
|
ASAN_OPTIONS="detect_leaks=1 symbolize=1"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- nasm
|
||||||
|
- os: linux
|
||||||
|
compiler: gcc
|
||||||
|
env: CONFIGURE_FLAGS="--with-12bit"
|
||||||
|
- os: linux
|
||||||
|
compiler: gcc
|
||||||
|
env: CONFIGURE_FLAGS="--with-jpeg7"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- nasm
|
||||||
|
- os: linux
|
||||||
|
compiler: gcc
|
||||||
|
env: CONFIGURE_FLAGS="--with-jpeg8"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- nasm
|
||||||
|
- os: linux
|
||||||
|
compiler: gcc
|
||||||
|
env: CONFIGURE_FLAGS="--without-simd"
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||||
|
brew update &&
|
||||||
|
brew install nasm homebrew/versions/gcc5 md5sha1sum Caskroom/versions/java6 &&
|
||||||
|
ln -fs /usr/local/bin/gpg1 /usr/local/bin/gpg &&
|
||||||
|
git clone --depth=1 https://github.com/libjpeg-turbo/gas-preprocessor.git ~/src/gas-preprocessor &&
|
||||||
|
ln -fs /Applications/Xcode.app /Applications/Xcode72.app;
|
||||||
|
fi
|
||||||
|
- if [ "${BUILD_OFFICIAL:-}" != "" ]; then
|
||||||
|
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
||||||
|
docker pull dcommander/buildljt;
|
||||||
|
fi &&
|
||||||
|
git clone --depth=1 https://github.com/libjpeg-turbo/buildscripts.git -b $TRAVIS_BRANCH ~/src/buildscripts &&
|
||||||
|
openssl aes-256-cbc -K $encrypted_f92e8533f6f1_key -iv $encrypted_f92e8533f6f1_iv -in ci/keys.enc -out ci/keys -d &&
|
||||||
|
tar xf ci/keys &&
|
||||||
|
rm ci/keys &&
|
||||||
|
mv ci/gpgsign ~/src/buildscripts &&
|
||||||
|
gpg --import ci/sign_ljt &&
|
||||||
|
rm ci/sign_ljt;
|
||||||
|
fi
|
||||||
|
|
||||||
|
script:
|
||||||
|
- if [ "${BUILD_OFFICIAL:-}" != "" ]; then
|
||||||
|
mkdir -p ~/src/ljt.nightly &&
|
||||||
|
if [ -f .git/shallow ]; then
|
||||||
|
mv .git/shallow .git/shallow.bak;
|
||||||
|
fi &&
|
||||||
|
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
||||||
|
docker run -v $HOME/src/ljt.nightly:/root/src/ljt.nightly -v $HOME/src/buildscripts:/root/src/buildscripts -v $TRAVIS_BUILD_DIR:/root/src/libjpeg-turbo -v $HOME/.gnupg:/root/.gnupg -t dcommander/buildljt:latest bash -c "rpm --import http://pgp.mit.edu/pks/lookup?op=get\&search=0x0575F26BD5B3FDB1 && ~/src/buildscripts/buildljt -r file:///root/src/libjpeg-turbo $TRAVIS_BRANCH -v" &&
|
||||||
|
sudo chown -R travis:travis ~/src/ljt.nightly &&
|
||||||
|
mv ~/src/ljt.nightly/latest/log-$TRAVIS_OS_NAME.txt ~/src/ljt.nightly/latest/files/;
|
||||||
|
else
|
||||||
|
PATH=$PATH:~/src/gas-preprocessor ~/src/buildscripts/buildljt -r file://$TRAVIS_BUILD_DIR $TRAVIS_BRANCH -v &&
|
||||||
|
mv ~/src/ljt.nightly/latest/log-$TRAVIS_OS_NAME.txt ~/src/ljt.nightly/latest/files/;
|
||||||
|
fi &&
|
||||||
|
if [ -f .git/shallow.bak ]; then
|
||||||
|
mv .git/shallow.bak .git/shallow;
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
- if [ "${BUILD_OFFICIAL:-}" == "" ]; then
|
||||||
|
autoreconf -fiv &&
|
||||||
|
mkdir build &&
|
||||||
|
pushd build &&
|
||||||
|
../configure ${CONFIGURE_FLAGS} &&
|
||||||
|
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo` &&
|
||||||
|
make -j$NUMCPUS --load-average=$NUMCPUS &&
|
||||||
|
if [[ "${CONFIGURE_FLAGS}" =~ "with-12bit" ||
|
||||||
|
"${CONFIGURE_FLAGS}" =~ "without-simd" ]]; then
|
||||||
|
make test FLOATTEST=32bit;
|
||||||
|
else
|
||||||
|
make test FLOATTEST=sse &&
|
||||||
|
JSIMD_FORCENONE=1 make test FLOATTEST=32bit;
|
||||||
|
fi &&
|
||||||
|
popd;
|
||||||
|
fi
|
||||||
|
|
||||||
|
after_failure:
|
||||||
|
- if [ "${BUILD_OFFICIAL:-}" == "" ]; then
|
||||||
|
if [ -f $TRAVIS_BUILD_DIR/build/config.log ]; then
|
||||||
|
cat $TRAVIS_BUILD_DIR/build/config.log;
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
- provider: s3
|
||||||
|
bucket: libjpeg-turbo-pr
|
||||||
|
access_key_id:
|
||||||
|
secure: bmFEt4H90/oR/LiN9XI+G26Pd6hiyrTw3+Vg3lS4ynwAYk33weApaVM8CyzQTgIhGSPzFStqVm9fTrb3RmrYP/PnNS+/surOeWLkH2DMRxvc0qmetBuNx1+vAN7FUkY8MO/u5uE9WXHAdp4e64pXcLXEbKmh+wgDm72b35WmMxErtHsGbpqy+j47rQkY4BJGi7XQzjjafaamfm4PzitsjkYYsgX8KLI16jyJEIirvyDHCPTn9wKR/jSjelDl+xTlgZGuCqmLCBW8f6JgycIspWjcYfO4WpWvkbnnI2sl3rCMPvOYc4wHe8SwzG0l4tM1PblZZDRcU7vjE15PmNf1Xfq9Vx3RpgBJv+UBNL/Vn0rKdpUCeEcfC12hxrske8DWpV6waBiDivjQJreE+YRXqa5YBhV/EdkoKYCqafnJvRASlOko9evje8F9KXTNsIGTT1HPmU9QM9WoJwLs/Xa3t09EmA2IjhcuAvvUmwCTuBBQVAlDjExiTT3Zhc9IYZDD92JgpAYLgridtzR87ElOxKhTkR4PowdI6UiLYArPjMFTjoz5Rivb9qNpbLaQC8HCYgLWxpWtUTzlW/9rM8izHpF8ySFHjO6E2aA9OJFc0tcbEGwAs2jLGD01OduU+DbBfsIkW0EgfXCPbD3FVgHsn3tkuzgO/bg20SM7uuCEYKQ=
|
||||||
|
secret_access_key:
|
||||||
|
secure: mrkOpEtqd2dEmi/qNJyX9vkME+6xgVBnXaRETKF7jT+flcQCQ0ayQkRkMV7lzGqq44XFg+n6Cpfn6oW0gH9RNdcC8YQvFP+kgzPx6nw6V/M31Vz6ySapJf59HBzVevf0NJkr0/1JoWsp1iq4IoN10WPzsCXZB55Io3Cf7DgpR+yiyBlWOctDfNdjJ97Juw3ENE80MHDf0fVqdUOIknQka1p68yAGkjar9kc2Oe7o94RzzmoqEn8tuFumiBQjIcuVRALsKqz+eIxBNgkL3BF9shVyRjOWLAeBhMPVFxZs5Dgd4ECbvU0i33gfmje3d6qqcw78N2lZaLefoVvWol3pOzVO133ewOSY9/lmpqEiRUU2ohEe8T4aSoS7posBW42itUTO4Y5w+eVOnHsm4sRQaI+/AXWTe7GPel+P8Qbe8Ya10A5gnpoag7o3raRDcHx+/qaZw1Af/u4XiAOYz3be3U90Qc+YMc/kS5i8BH0GXBbSfaWQ00CwRFlZQ3n1xUqmjC2CmjZTki3W/p7mEt0DjhcH9ZIXscK603sCC+mF6pEd9019k5fG/8fr2Y4Ptai9kd3BxZJCX9/jSoMfWOBbgkA5bRgHU0xrAj+p49qD6Ej9Xr8GE3+uebz3sEuhSFRnCKwKoOHOemfgevfO2y/jQXP677WPf3xQX7bVDfTFSHU=
|
||||||
|
acl: public_read
|
||||||
|
local-dir: $HOME/src/ljt.nightly/latest/files
|
||||||
|
upload-dir: $TRAVIS_BRANCH/$TRAVIS_OS_NAME
|
||||||
|
on:
|
||||||
|
branch: master
|
||||||
|
condition: -n "$BUILD_OFFICIAL"
|
||||||
|
- provider: s3
|
||||||
|
bucket: libjpeg-turbo-pr
|
||||||
|
access_key_id:
|
||||||
|
secure: bmFEt4H90/oR/LiN9XI+G26Pd6hiyrTw3+Vg3lS4ynwAYk33weApaVM8CyzQTgIhGSPzFStqVm9fTrb3RmrYP/PnNS+/surOeWLkH2DMRxvc0qmetBuNx1+vAN7FUkY8MO/u5uE9WXHAdp4e64pXcLXEbKmh+wgDm72b35WmMxErtHsGbpqy+j47rQkY4BJGi7XQzjjafaamfm4PzitsjkYYsgX8KLI16jyJEIirvyDHCPTn9wKR/jSjelDl+xTlgZGuCqmLCBW8f6JgycIspWjcYfO4WpWvkbnnI2sl3rCMPvOYc4wHe8SwzG0l4tM1PblZZDRcU7vjE15PmNf1Xfq9Vx3RpgBJv+UBNL/Vn0rKdpUCeEcfC12hxrske8DWpV6waBiDivjQJreE+YRXqa5YBhV/EdkoKYCqafnJvRASlOko9evje8F9KXTNsIGTT1HPmU9QM9WoJwLs/Xa3t09EmA2IjhcuAvvUmwCTuBBQVAlDjExiTT3Zhc9IYZDD92JgpAYLgridtzR87ElOxKhTkR4PowdI6UiLYArPjMFTjoz5Rivb9qNpbLaQC8HCYgLWxpWtUTzlW/9rM8izHpF8ySFHjO6E2aA9OJFc0tcbEGwAs2jLGD01OduU+DbBfsIkW0EgfXCPbD3FVgHsn3tkuzgO/bg20SM7uuCEYKQ=
|
||||||
|
secret_access_key:
|
||||||
|
secure: mrkOpEtqd2dEmi/qNJyX9vkME+6xgVBnXaRETKF7jT+flcQCQ0ayQkRkMV7lzGqq44XFg+n6Cpfn6oW0gH9RNdcC8YQvFP+kgzPx6nw6V/M31Vz6ySapJf59HBzVevf0NJkr0/1JoWsp1iq4IoN10WPzsCXZB55Io3Cf7DgpR+yiyBlWOctDfNdjJ97Juw3ENE80MHDf0fVqdUOIknQka1p68yAGkjar9kc2Oe7o94RzzmoqEn8tuFumiBQjIcuVRALsKqz+eIxBNgkL3BF9shVyRjOWLAeBhMPVFxZs5Dgd4ECbvU0i33gfmje3d6qqcw78N2lZaLefoVvWol3pOzVO133ewOSY9/lmpqEiRUU2ohEe8T4aSoS7posBW42itUTO4Y5w+eVOnHsm4sRQaI+/AXWTe7GPel+P8Qbe8Ya10A5gnpoag7o3raRDcHx+/qaZw1Af/u4XiAOYz3be3U90Qc+YMc/kS5i8BH0GXBbSfaWQ00CwRFlZQ3n1xUqmjC2CmjZTki3W/p7mEt0DjhcH9ZIXscK603sCC+mF6pEd9019k5fG/8fr2Y4Ptai9kd3BxZJCX9/jSoMfWOBbgkA5bRgHU0xrAj+p49qD6Ej9Xr8GE3+uebz3sEuhSFRnCKwKoOHOemfgevfO2y/jQXP677WPf3xQX7bVDfTFSHU=
|
||||||
|
acl: public_read
|
||||||
|
local-dir: $HOME/src/ljt.nightly/latest/files
|
||||||
|
upload-dir: $TRAVIS_BRANCH/$TRAVIS_OS_NAME
|
||||||
|
on:
|
||||||
|
branch: dev
|
||||||
|
condition: -n "$BUILD_OFFICIAL"
|
||||||
964
BUILDING.md
Normal file
@@ -0,0 +1,964 @@
|
|||||||
|
Un*x Platforms (including Mac and Cygwin)
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
|
||||||
|
Build Requirements
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- 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) or [Homebrew](http://brew.sh/).
|
||||||
|
|
||||||
|
- [NASM](http://www.nasm.us) or [YASM](http://yasm.tortall.net)
|
||||||
|
(if building x86 or x86-64 SIMD extensions)
|
||||||
|
* If using 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.)
|
||||||
|
* If using NASM, 2.00 or later is required for an x86-64 build.
|
||||||
|
* If using NASM, 2.07 or later (except 2.11.08) 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/) or [Homebrew](http://brew.sh/).
|
||||||
|
|
||||||
|
The binary RPMs released by the NASM project do not work on older Linux
|
||||||
|
systems, such as Red Hat Enterprise Linux 5. 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) or Clang recommended for best performance
|
||||||
|
|
||||||
|
- 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,
|
||||||
|
include JDK or OpenJDK. On OS X 10.5 and 10.6, it will be necessary to
|
||||||
|
install the Java Developer Package, which can be downloaded from
|
||||||
|
<http://developer.apple.com/downloads> (Apple ID required.) For other
|
||||||
|
systems, 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 directory from
|
||||||
|
which `configure` is executed (the "binary directory"), and this directory need
|
||||||
|
not necessarily be the same as the libjpeg-turbo source directory. You can
|
||||||
|
create multiple independent binary directories, in which different versions of
|
||||||
|
libjpeg-turbo 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 libjpeg-turbo source
|
||||||
|
directory. For in-tree builds, these directories are the same.
|
||||||
|
|
||||||
|
|
||||||
|
Build Procedure
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The following procedure will build libjpeg-turbo on Unix and Unix-like systems.
|
||||||
|
(On Solaris, this generates a 32-bit build. See "Build Recipes" below for
|
||||||
|
64-bit build instructions.)
|
||||||
|
|
||||||
|
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
|
||||||
|
libjpeg-turbo from one of the official release tarballs.
|
||||||
|
|
||||||
|
This will generate the following files under **.libs/**:
|
||||||
|
|
||||||
|
**libjpeg.a**<br>
|
||||||
|
Static link library for the libjpeg API
|
||||||
|
|
||||||
|
**libjpeg.so.{version}** (Linux, Unix)<br>
|
||||||
|
**libjpeg.{version}.dylib** (Mac)<br>
|
||||||
|
**cygjpeg-{version}.dll** (Cygwin)<br>
|
||||||
|
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)<br>
|
||||||
|
**libjpeg.dylib** (Mac)<br>
|
||||||
|
Development symlink for the libjpeg API
|
||||||
|
|
||||||
|
**libjpeg.dll.a** (Cygwin)<br>
|
||||||
|
Import library for the libjpeg API
|
||||||
|
|
||||||
|
**libturbojpeg.a**<br>
|
||||||
|
Static link library for the TurboJPEG API
|
||||||
|
|
||||||
|
**libturbojpeg.so.0.1.0** (Linux, Unix)<br>
|
||||||
|
**libturbojpeg.0.1.0.dylib** (Mac)<br>
|
||||||
|
**cygturbojpeg-0.dll** (Cygwin)<br>
|
||||||
|
Shared library for the TurboJPEG API
|
||||||
|
|
||||||
|
**libturbojpeg.so** (Linux, Unix)<br>
|
||||||
|
**libturbojpeg.dylib** (Mac)<br>
|
||||||
|
Development symlink for the TurboJPEG API
|
||||||
|
|
||||||
|
**libturbojpeg.dll.a** (Cygwin)<br>
|
||||||
|
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
|
||||||
|
libjpeg-turbo that is API/ABI-compatible with libjpeg v7. Add `--with-jpeg8`
|
||||||
|
to the `configure` command to build a version of libjpeg-turbo that is
|
||||||
|
API/ABI-compatible with libjpeg v8. See [README.md](README.md) for more
|
||||||
|
information about libjpeg v7 and v8 emulation.
|
||||||
|
|
||||||
|
|
||||||
|
### In-Memory Source/Destination Managers
|
||||||
|
|
||||||
|
When using libjpeg v6b or v7 API/ABI emulation, add `--without-mem-srcdst` to
|
||||||
|
the `configure` command line to build a version of libjpeg-turbo that lacks the
|
||||||
|
`jpeg_mem_src()` and `jpeg_mem_dest()` functions. These functions were not
|
||||||
|
part of the original libjpeg v6b and v7 APIs, so removing them ensures strict
|
||||||
|
conformance with those APIs. See [README.md](README.md) for more information.
|
||||||
|
|
||||||
|
|
||||||
|
### Arithmetic Coding Support
|
||||||
|
|
||||||
|
Since the patent on arithmetic coding has expired, this functionality has been
|
||||||
|
included in this release of libjpeg-turbo. libjpeg-turbo'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 (JNI) 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](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 TurboJPEG 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.
|
||||||
|
|
||||||
|
|
||||||
|
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 or Homebrew
|
||||||
|
must be installed. If using Homebrew, then replace `/opt/local` with
|
||||||
|
`/usr/local`.
|
||||||
|
|
||||||
|
|
||||||
|
### 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='-mmacosx-version-min=10.5 -O3' \
|
||||||
|
LDFLAGS='-mmacosx-version-min=10.5'
|
||||||
|
|
||||||
|
to the `configure` command line. NASM 2.07 or later from MacPorts or Homebrew
|
||||||
|
must be installed. If using Homebrew, then replace `/opt/local` with
|
||||||
|
`/usr/local`.
|
||||||
|
|
||||||
|
|
||||||
|
### 32-bit Backward-Compatible Build on OS X
|
||||||
|
|
||||||
|
Add
|
||||||
|
|
||||||
|
--host i686-apple-darwin \
|
||||||
|
CFLAGS='-mmacosx-version-min=10.5 -O3 -m32' \
|
||||||
|
LDFLAGS='-mmacosx-version-min=10.5 -m32'
|
||||||
|
|
||||||
|
to the `configure` command line.
|
||||||
|
|
||||||
|
|
||||||
|
### 64-bit 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 CFLAGS='-O3 -m32' LDFLAGS=-m32
|
||||||
|
|
||||||
|
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. libjpeg-turbo will automatically be built
|
||||||
|
with the maximum optimization level (-xO5) unless you override `CFLAGS`.
|
||||||
|
|
||||||
|
To build a 64-bit version of libjpeg-turbo 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)
|
||||||
|
|
||||||
|
|
||||||
|
Building libjpeg-turbo for iOS
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
iOS platforms, such as the iPhone and iPad, use ARM processors, and all
|
||||||
|
currently supported models include NEON instructions. Thus, they can take
|
||||||
|
advantage of libjpeg-turbo's SIMD extensions to significantly accelerate JPEG
|
||||||
|
compression/decompression. This section describes how to build libjpeg-turbo
|
||||||
|
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 host_alias=arm-apple-darwin10
|
||||||
|
export CC=${IOS_PLATFORMDIR}/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
|
||||||
|
export CFLAGS="-mfloat-abi=softfp -isysroot ${IOS_SYSROOT[0]} -O3 -march=armv7 -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -miphoneos-version-min=3.0"
|
||||||
|
|
||||||
|
cd {build_directory}
|
||||||
|
sh {source_directory}/configure [additional configure flags]
|
||||||
|
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 host_alias=arm-apple-darwin10
|
||||||
|
export CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
||||||
|
export CFLAGS="-mfloat-abi=softfp -isysroot ${IOS_SYSROOT[0]} -O3 -arch armv7 -miphoneos-version-min=3.0"
|
||||||
|
export CCASFLAGS="$CFLAGS -no-integrated-as"
|
||||||
|
|
||||||
|
cd {build_directory}
|
||||||
|
sh {source_directory}/configure [additional configure flags]
|
||||||
|
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 host_alias=arm-apple-darwin10
|
||||||
|
export CC=${IOS_PLATFORMDIR}/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
|
||||||
|
export CFLAGS="-mfloat-abi=softfp -isysroot ${IOS_SYSROOT[0]} -O3 -march=armv7s -mcpu=swift -mtune=swift -mfpu=neon -miphoneos-version-min=6.0"
|
||||||
|
|
||||||
|
cd {build_directory}
|
||||||
|
sh {source_directory}/configure [additional configure flags]
|
||||||
|
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="-mfloat-abi=softfp -isysroot ${IOS_SYSROOT[0]} -O3 -arch armv7s -miphoneos-version-min=6.0"
|
||||||
|
|
||||||
|
|
||||||
|
### ARMv8 (64-bit)
|
||||||
|
|
||||||
|
**gas-preprocessor.pl required if using Xcode < 6**
|
||||||
|
|
||||||
|
The following script demonstrates how to build libjpeg-turbo to run on the
|
||||||
|
iPhone 5S/iPad Mini 2/iPad Air and newer.
|
||||||
|
|
||||||
|
IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
|
||||||
|
IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk)
|
||||||
|
|
||||||
|
export host_alias=aarch64-apple-darwin
|
||||||
|
export CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
||||||
|
export CFLAGS="-isysroot ${IOS_SYSROOT[0]} -O3 -arch arm64 -miphoneos-version-min=7.0 -funwind-tables"
|
||||||
|
|
||||||
|
cd {build_directory}
|
||||||
|
sh {source_directory}/configure [additional configure flags]
|
||||||
|
make
|
||||||
|
|
||||||
|
Once built, lipo can be used to combine the ARMv7, v7s, and/or v8 variants into
|
||||||
|
a universal library.
|
||||||
|
|
||||||
|
|
||||||
|
Building libjpeg-turbo for Android
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
Building libjpeg-turbo for Android platforms requires the
|
||||||
|
[Android NDK](https://developer.android.com/tools/sdk/ndk) and autotools.
|
||||||
|
|
||||||
|
|
||||||
|
### ARMv7 (32-bit)
|
||||||
|
|
||||||
|
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/sdk/ndk-bundle}
|
||||||
|
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.}
|
||||||
|
|
||||||
|
# It should not be necessary to modify the rest
|
||||||
|
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}"
|
||||||
|
|
||||||
|
TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}
|
||||||
|
export CPP=${TOOLCHAIN}/bin/${HOST}-cpp
|
||||||
|
export AR=${TOOLCHAIN}/bin/${HOST}-ar
|
||||||
|
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_CFLAGS} -O3 -fPIE" \
|
||||||
|
CPPFLAGS="${ANDROID_CFLAGS}" \
|
||||||
|
LDFLAGS="${ANDROID_CFLAGS} -pie" --with-simd ${1+"$@"}
|
||||||
|
make
|
||||||
|
|
||||||
|
|
||||||
|
### ARMv8 (64-bit)
|
||||||
|
|
||||||
|
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/sdk/ndk-bundle}
|
||||||
|
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. "21" or later
|
||||||
|
is required for a 64-bit build.}
|
||||||
|
|
||||||
|
# It should not be necessary to modify the rest
|
||||||
|
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}
|
||||||
|
export CPP=${TOOLCHAIN}/bin/${HOST}-cpp
|
||||||
|
export AR=${TOOLCHAIN}/bin/${HOST}-ar
|
||||||
|
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_CFLAGS} -O3 -fPIE" \
|
||||||
|
CPPFLAGS="${ANDROID_CFLAGS}" \
|
||||||
|
LDFLAGS="${ANDROID_CFLAGS} -pie" --with-simd ${1+"$@"}
|
||||||
|
make
|
||||||
|
|
||||||
|
|
||||||
|
### x86 (32-bit)
|
||||||
|
|
||||||
|
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/sdk/ndk-bundle}
|
||||||
|
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.}
|
||||||
|
|
||||||
|
# It should not be necessary to modify the rest
|
||||||
|
HOST=i686-linux-android
|
||||||
|
SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-x86
|
||||||
|
ANDROID_CFLAGS="--sysroot=${SYSROOT}"
|
||||||
|
|
||||||
|
TOOLCHAIN=${NDK_PATH}/toolchains/x86-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}
|
||||||
|
export CPP=${TOOLCHAIN}/bin/${HOST}-cpp
|
||||||
|
export AR=${TOOLCHAIN}/bin/${HOST}-ar
|
||||||
|
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_CFLAGS} -O3 -fPIE" \
|
||||||
|
CPPFLAGS="${ANDROID_CFLAGS}" \
|
||||||
|
LDFLAGS="${ANDROID_CFLAGS} -pie" --with-simd ${1+"$@"}
|
||||||
|
make
|
||||||
|
|
||||||
|
|
||||||
|
### x86-64 (64-bit)
|
||||||
|
|
||||||
|
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/sdk/ndk-bundle}
|
||||||
|
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. "21" or later
|
||||||
|
is required for a 64-bit build.}
|
||||||
|
|
||||||
|
# It should not be necessary to modify the rest
|
||||||
|
HOST=x86_64-linux-android
|
||||||
|
SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-x86_64
|
||||||
|
ANDROID_CFLAGS="--sysroot=${SYSROOT}"
|
||||||
|
|
||||||
|
TOOLCHAIN=${NDK_PATH}/toolchains/x86_64-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}
|
||||||
|
export CPP=${TOOLCHAIN}/bin/${HOST}-cpp
|
||||||
|
export AR=${TOOLCHAIN}/bin/${HOST}-ar
|
||||||
|
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_CFLAGS} -O3 -fPIE" \
|
||||||
|
CPPFLAGS="${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`.
|
||||||
|
|
||||||
|
|
||||||
|
Installing libjpeg-turbo
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
To install libjpeg-turbo after it is built, replace `make` in the build
|
||||||
|
instructions with `make install`.
|
||||||
|
|
||||||
|
The `--prefix` argument to configure (or the `prefix` configure variable) can
|
||||||
|
be used to specify an installation directory of your choosing. If you don't
|
||||||
|
specify an installation directory, then the default is to install libjpeg-turbo
|
||||||
|
under **/opt/libjpeg-turbo** and to place the libraries in
|
||||||
|
**/opt/libjpeg-turbo/lib32** (32-bit) or **/opt/libjpeg-turbo/lib64** (64-bit.)
|
||||||
|
|
||||||
|
The `bindir`, `datadir`, `docdir`, `includedir`, `libdir`, and `mandir`
|
||||||
|
configure variables allow a finer degree of control over where specific files in
|
||||||
|
the libjpeg-turbo distribution should be installed. These variables can either
|
||||||
|
be specified at configure time or passed as arguments to `make install`.
|
||||||
|
|
||||||
|
|
||||||
|
Windows (Visual C++ or MinGW)
|
||||||
|
=============================
|
||||||
|
|
||||||
|
|
||||||
|
Build Requirements
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- [CMake](http://www.cmake.org) v2.8.11 or later
|
||||||
|
|
||||||
|
- [NASM](http://www.nasm.us) or [YASM](http://yasm.tortall.net)
|
||||||
|
* If using NASM, 0.98 or later is required for an x86 build.
|
||||||
|
* If using NASM, 2.05 or later is required for an x86-64 build.
|
||||||
|
* **nasm.exe**/**yasm.exe** should be in your `PATH`.
|
||||||
|
|
||||||
|
- 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 libjpeg-turbo.
|
||||||
|
|
||||||
|
* You can also use Microsoft Visual Studio Express/Community 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 libjpeg-turbo 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
|
||||||
|
|
||||||
|
[MSYS2](http://msys2.github.io/) 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.
|
||||||
|
|
||||||
|
- 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 directory from
|
||||||
|
which CMake is executed (the "binary directory"), and this directory need not
|
||||||
|
necessarily be the same as the libjpeg-turbo source directory. You can create
|
||||||
|
multiple independent binary directories, in which different versions of
|
||||||
|
libjpeg-turbo 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 libjpeg-turbo source
|
||||||
|
directory. For in-tree builds, these directories are the same.
|
||||||
|
|
||||||
|
|
||||||
|
Build Procedure
|
||||||
|
---------------
|
||||||
|
|
||||||
|
NOTE: The build procedures below assume that CMake is invoked from the command
|
||||||
|
line, but all of these procedures can be adapted to the CMake GUI as
|
||||||
|
well.
|
||||||
|
|
||||||
|
|
||||||
|
### Visual C++ (Command Line)
|
||||||
|
|
||||||
|
cd {build_directory}
|
||||||
|
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release [additional CMake flags] {source_directory}
|
||||||
|
nmake
|
||||||
|
|
||||||
|
This will build either a 32-bit or a 64-bit version of libjpeg-turbo, depending
|
||||||
|
on which version of **cl.exe** is in the `PATH`.
|
||||||
|
|
||||||
|
The following files will be generated under *{build_directory}*:
|
||||||
|
|
||||||
|
**jpeg-static.lib**<br>
|
||||||
|
Static link library for the libjpeg API
|
||||||
|
|
||||||
|
**sharedlib/jpeg{version}.dll**<br>
|
||||||
|
DLL for the libjpeg API
|
||||||
|
|
||||||
|
**sharedlib/jpeg.lib**<br>
|
||||||
|
Import library for the libjpeg API
|
||||||
|
|
||||||
|
**turbojpeg-static.lib**<br>
|
||||||
|
Static link library for the TurboJPEG API
|
||||||
|
|
||||||
|
**turbojpeg.dll**<br>
|
||||||
|
DLL for the TurboJPEG API
|
||||||
|
|
||||||
|
**turbojpeg.lib**<br>
|
||||||
|
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" [additional CMake flags] {source_directory}
|
||||||
|
|
||||||
|
NOTE: Add "Win64" to the generator name (for example, "Visual Studio 10
|
||||||
|
Win64") to build a 64-bit version of libjpeg-turbo. 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 libjpeg-turbo.
|
||||||
|
|
||||||
|
This will generate the following files under *{build_directory}*:
|
||||||
|
|
||||||
|
**{configuration}/jpeg-static.lib**<br>
|
||||||
|
Static link library for the libjpeg API
|
||||||
|
|
||||||
|
**sharedlib/{configuration}/jpeg{version}.dll**<br>
|
||||||
|
DLL for the libjpeg API
|
||||||
|
|
||||||
|
**sharedlib/{configuration}/jpeg.lib**<br>
|
||||||
|
Import library for the libjpeg API
|
||||||
|
|
||||||
|
**{configuration}/turbojpeg-static.lib**<br>
|
||||||
|
Static link library for the TurboJPEG API
|
||||||
|
|
||||||
|
**{configuration}/turbojpeg.dll**<br>
|
||||||
|
DLL for the TurboJPEG API
|
||||||
|
|
||||||
|
**{configuration}/turbojpeg.lib**<br>
|
||||||
|
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 using the MSYS
|
||||||
|
environment. If you are cross-compiling on a Un*x platform (including Mac and
|
||||||
|
Cygwin), then see "Build Recipes" below.
|
||||||
|
|
||||||
|
cd {build_directory}
|
||||||
|
cmake -G"MSYS Makefiles" [additional CMake flags] {source_directory}
|
||||||
|
make
|
||||||
|
|
||||||
|
This will generate the following files under *{build_directory}*:
|
||||||
|
|
||||||
|
**libjpeg.a**<br>
|
||||||
|
Static link library for the libjpeg API
|
||||||
|
|
||||||
|
**sharedlib/libjpeg-{version}.dll**<br>
|
||||||
|
DLL for the libjpeg API
|
||||||
|
|
||||||
|
**sharedlib/libjpeg.dll.a**<br>
|
||||||
|
Import library for the libjpeg API
|
||||||
|
|
||||||
|
**libturbojpeg.a**<br>
|
||||||
|
Static link library for the TurboJPEG API
|
||||||
|
|
||||||
|
**libturbojpeg.dll**<br>
|
||||||
|
DLL for the TurboJPEG API
|
||||||
|
|
||||||
|
**libturbojpeg.dll.a**<br>
|
||||||
|
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
|
||||||
|
libjpeg-turbo that is API/ABI-compatible with libjpeg v7. Add `-DWITH_JPEG8=1`
|
||||||
|
to the CMake command line to build a version of libjpeg-turbo that is
|
||||||
|
API/ABI-compatible with libjpeg v8. See [README.md](README.md) for more
|
||||||
|
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
|
||||||
|
|
||||||
|
Since the patent on arithmetic coding has expired, this functionality has been
|
||||||
|
included in this release of libjpeg-turbo. libjpeg-turbo'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 (JNI) 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](java/README) for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
If Java is not in your `PATH`, or if you wish to use an alternate JDK to
|
||||||
|
build/test libjpeg-turbo, then (prior to running CMake) set the `JAVA_HOME`
|
||||||
|
environment variable to the location of the JDK that you wish to use. The
|
||||||
|
`Java_JAVAC_EXECUTABLE`, `Java_JAVA_EXECUTABLE`, and `Java_JAR_EXECUTABLE`
|
||||||
|
CMake variables can also be used to specify alternate commands or locations for
|
||||||
|
javac, jar, and java (respectively.) You can also set the `JAVACFLAGS` CMake
|
||||||
|
variable to specify arguments that should be passed to the Java compiler when
|
||||||
|
building the TurboJPEG classes.
|
||||||
|
|
||||||
|
|
||||||
|
Build Recipes
|
||||||
|
-------------
|
||||||
|
|
||||||
|
|
||||||
|
### 32-bit MinGW Build on Un*x (including Mac and Cygwin)
|
||||||
|
|
||||||
|
Create a file called **toolchain.cmake** under *{build_directory}*, with the
|
||||||
|
following contents:
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR X86)
|
||||||
|
set(CMAKE_C_COMPILER {mingw_binary_path}/i686-w64-mingw32-gcc)
|
||||||
|
set(CMAKE_RC_COMPILER {mingw_binary_path}/i686-w64-mingw32-windres)
|
||||||
|
|
||||||
|
*{mingw\_binary\_path}* is the directory under which the MinGW binaries are
|
||||||
|
located (usually **/usr/bin**.) Next, execute the following commands:
|
||||||
|
|
||||||
|
cd {build_directory}
|
||||||
|
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
||||||
|
[additional CMake flags] {source_directory}
|
||||||
|
make
|
||||||
|
|
||||||
|
|
||||||
|
### 64-bit MinGW Build on Un*x (including Mac and Cygwin)
|
||||||
|
|
||||||
|
Create a file called **toolchain.cmake** under *{build_directory}*, with the
|
||||||
|
following contents:
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR AMD64)
|
||||||
|
set(CMAKE_C_COMPILER {mingw_binary_path}/x86_64-w64-mingw32-gcc)
|
||||||
|
set(CMAKE_RC_COMPILER {mingw_binary_path}/x86_64-w64-mingw32-windres)
|
||||||
|
|
||||||
|
*{mingw\_binary\_path}* is the directory under which the MinGW binaries are
|
||||||
|
located (usually **/usr/bin**.) Next, execute the following commands:
|
||||||
|
|
||||||
|
cd {build_directory}
|
||||||
|
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
|
||||||
|
[additional CMake flags] {source_directory}
|
||||||
|
make
|
||||||
|
|
||||||
|
|
||||||
|
Installing libjpeg-turbo
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
You can use the build system to install libjpeg-turbo (as opposed to creating
|
||||||
|
an installer package.) To do this, run `make install` or `nmake install`
|
||||||
|
(or build the "install" target in the Visual Studio IDE.) Running
|
||||||
|
`make uninstall` or `nmake uninstall` (or building the "uninstall" target in
|
||||||
|
the Visual Studio IDE) will uninstall libjpeg-turbo.
|
||||||
|
|
||||||
|
The `CMAKE_INSTALL_PREFIX` CMake variable can be modified in order to install
|
||||||
|
libjpeg-turbo into a directory of your choosing. If you don't specify
|
||||||
|
`CMAKE_INSTALL_PREFIX`, then the default is:
|
||||||
|
|
||||||
|
**c:\libjpeg-turbo**<br>
|
||||||
|
Visual Studio 32-bit build
|
||||||
|
|
||||||
|
**c:\libjpeg-turbo64**<br>
|
||||||
|
Visual Studio 64-bit build
|
||||||
|
|
||||||
|
**c:\libjpeg-turbo-gcc**<br>
|
||||||
|
MinGW 32-bit build
|
||||||
|
|
||||||
|
**c:\libjpeg-turbo-gcc64**<br>
|
||||||
|
MinGW 64-bit build
|
||||||
|
|
||||||
|
|
||||||
|
Creating Distribution Packages
|
||||||
|
==============================
|
||||||
|
|
||||||
|
The following commands can be used to create various types of distribution
|
||||||
|
packages:
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
Mac
|
||||||
|
---
|
||||||
|
|
||||||
|
make dmg
|
||||||
|
|
||||||
|
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
|
||||||
|
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 Mac package/disk image that contains
|
||||||
|
universal i386/x86-64 binaries. You should first configure a 32-bit
|
||||||
|
out-of-tree build of libjpeg-turbo, then configure a 64-bit out-of-tree build,
|
||||||
|
then run `make 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}] \
|
||||||
|
[BUILDDIRARMV7={ARMv7 build directory}] \
|
||||||
|
[BUILDDIRARMV7S={ARMv7s build directory}] \
|
||||||
|
[BUILDDIRARMV8={ARMv8 build directory}]
|
||||||
|
|
||||||
|
This creates a Mac package/disk image in which the libjpeg-turbo 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 ARMv7, ARMv7s, and/or ARMv8
|
||||||
|
out-of-tree builds of libjpeg-turbo (see "Building libjpeg-turbo for iOS"
|
||||||
|
above.) If you are building an x86-64 version of libjpeg-turbo, you should
|
||||||
|
configure a 32-bit out-of-tree build as well. Next, build libjpeg-turbo as you
|
||||||
|
would normally, using an out-of-tree build. When it is built, run `make
|
||||||
|
iosdmg` from the build directory. The build system will look for 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`, `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" target.
|
||||||
|
|
||||||
|
The installer package (libjpeg-turbo-*{version}*[-gcc|-vc][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 libjpeg-turbo is by invoking `make test` (Un*x) or
|
||||||
|
`nmake test` (Windows command line) or by building the "RUN_TESTS" target
|
||||||
|
(Visual Studio IDE), once the build has completed. This runs a series of tests
|
||||||
|
to ensure that mathematical compatibility has been maintained between
|
||||||
|
libjpeg-turbo and libjpeg v6b. 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` (Un*x) or `nmake testclean` (Windows command line) or
|
||||||
|
building the "testclean" target (Visual Studio IDE) will clean up the output
|
||||||
|
images generated by the tests.
|
||||||
|
|
||||||
|
On Un*x 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 (including 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.
|
||||||
790
BUILDING.txt
@@ -1,790 +0,0 @@
|
|||||||
*******************************************************************************
|
|
||||||
** Building on Un*x Platforms (including Cygwin and OS X)
|
|
||||||
*******************************************************************************
|
|
||||||
|
|
||||||
|
|
||||||
==================
|
|
||||||
Build Requirements
|
|
||||||
==================
|
|
||||||
|
|
||||||
-- 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 (if building x86 or x86-64 SIMD extensions)
|
|
||||||
* 0.98, or 2.01 or later is required for a 32-bit build
|
|
||||||
* NASM 2.00 or later is required for a 64-bit build
|
|
||||||
* NASM 2.07 or later is required for a 64-bit build on OS X. This 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 libjpeg-turbo with LLVM-GCC v4.2 results in a 10% performance
|
|
||||||
degradation when compressing using 64-bit code, relative to building
|
|
||||||
libjpeg-turbo with GCC v4.2. Building libjpeg-turbo with LLVM (clang)
|
|
||||||
results in a 20% performance degradation when compressing using 64-bit
|
|
||||||
code, relative to building libjpeg-turbo with GCC v4.2. If you are
|
|
||||||
running Snow Leopard or earlier, it is suggested that you continue to use
|
|
||||||
Xcode v3.2.6, which provides GCC v4.2. If you are using Lion or later, it
|
|
||||||
is suggested that you install Apple GCC v4.2 through MacPorts.
|
|
||||||
|
|
||||||
-- If building the TurboJPEG Java wrapper, JDK or OpenJDK 1.5 or later is
|
|
||||||
required. Some systems, such as OS X 10.4, Solaris 10 and later, and Red
|
|
||||||
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://connect.apple.com. 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 libjpeg-turbo source directory. You
|
|
||||||
can create multiple independent binary directories, in which different versions
|
|
||||||
of libjpeg-turbo 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 libjpeg-turbo source
|
|
||||||
directory. For in-tree builds, these directories are the same.
|
|
||||||
|
|
||||||
|
|
||||||
======================
|
|
||||||
Building libjpeg-turbo
|
|
||||||
======================
|
|
||||||
|
|
||||||
The following procedure will build libjpeg-turbo on Linux, FreeBSD, Cygwin, and
|
|
||||||
Solaris/x86 systems (on Solaris, this generates a 32-bit library. See below
|
|
||||||
for 64-bit build instructions.)
|
|
||||||
|
|
||||||
cd {source_directory}
|
|
||||||
autoreconf -fiv
|
|
||||||
cd {build_directory}
|
|
||||||
sh {source_directory}/configure [additional configure flags]
|
|
||||||
make
|
|
||||||
|
|
||||||
NOTE: Running autoreconf in the source directory is usually only necessary if
|
|
||||||
building libjpeg-turbo from the SVN repository.
|
|
||||||
|
|
||||||
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.1.0, 7.1.0, or 8.0.2, depending on whether
|
|
||||||
libjpeg v6b (default), v7, or v8 emulation is enabled. If using Cygwin,
|
|
||||||
{version} is 62, 7, or 8.
|
|
||||||
|
|
||||||
libjpeg.so (Linux, Unix)
|
|
||||||
libjpeg.dylib (OS X)
|
|
||||||
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.0.0 (Linux, Unix)
|
|
||||||
libturbojpeg.0.0.0.dylib (OS X)
|
|
||||||
cygturbojpeg-0.dll (Cygwin)
|
|
||||||
Shared library for the TurboJPEG API
|
|
||||||
|
|
||||||
libturbojpeg.so (Linux, Unix)
|
|
||||||
libturbojpeg.dylib (OS X)
|
|
||||||
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
|
|
||||||
libjpeg-turbo that is API/ABI-compatible with libjpeg v7. Add --with-jpeg8 to
|
|
||||||
the configure command to build a version of libjpeg-turbo 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 libjpeg-turbo that lacks the
|
|
||||||
jpeg_mem_src() and jpeg_mem_dest() functions. These functions were not part of
|
|
||||||
the original libjpeg v6b and v7 APIs, so removing them ensures strict
|
|
||||||
conformance with those APIs. See README-turbo.txt for more information.
|
|
||||||
|
|
||||||
|
|
||||||
Arithmetic Coding Support
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
Since the patent on arithmetic coding has expired, this functionality has been
|
|
||||||
included in this release of libjpeg-turbo. libjpeg-turbo'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 libjpeg-turbo
|
|
||||||
========================
|
|
||||||
|
|
||||||
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/libjpeg-turbo/include and the library
|
|
||||||
files in /opt/libjpeg-turbo/lib32 (32-bit) or /opt/libjpeg-turbo/lib64
|
|
||||||
(64-bit.)
|
|
||||||
|
|
||||||
NOTE: You can specify a prefix of /usr and a libdir of, for instance,
|
|
||||||
/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 libjpeg-turbo into
|
|
||||||
a non-system directory and manipulate the LD_LIBRARY_PATH or create symlinks
|
|
||||||
to force applications to use libjpeg-turbo 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.4u.sdk \
|
|
||||||
-mmacosx-version-min=10.4 -O3' \
|
|
||||||
LDFLAGS='-isysroot /Developer/SDKs/MacOSX10.4u.sdk \
|
|
||||||
-mmacosx-version-min=10.4'
|
|
||||||
|
|
||||||
to the configure command line. The OS X 10.4 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.4u.sdk \
|
|
||||||
-mmacosx-version-min=10.4 -O3 -m32' \
|
|
||||||
LDFLAGS='-isysroot /Developer/SDKs/MacOSX10.4u.sdk \
|
|
||||||
-mmacosx-version-min=10.4 -m32'
|
|
||||||
|
|
||||||
to the configure command line. The OS X 10.4 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. libjpeg-turbo will automatically be built with
|
|
||||||
the maximum optimization level (-xO5) unless you override CFLAGS.
|
|
||||||
|
|
||||||
To build a 64-bit version of libjpeg-turbo 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 libjpeg-turbo can use ARM NEON SIMD instructions to accelerate
|
|
||||||
JPEG compression/decompression by approximately 2-4x on ARMv7 and later
|
|
||||||
platforms. If libjpeg-turbo is configured on an ARM Linux platform, then the
|
|
||||||
build system will automatically include the NEON SIMD routines, if they are
|
|
||||||
supported.
|
|
||||||
|
|
||||||
|
|
||||||
Building libjpeg-turbo for iOS
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
iOS platforms, such as the iPhone and iPad, also use ARM processors, some of
|
|
||||||
which support NEON instructions. Additional steps are required to build
|
|
||||||
libjpeg-turbo for these platforms. The steps below assume iOS SDK v4.3. If
|
|
||||||
you are using a different SDK version, then you will need to modify the
|
|
||||||
examples accordingly.
|
|
||||||
|
|
||||||
Additional build requirements:
|
|
||||||
|
|
||||||
gas-preprocessor.pl (https://github.com/yuvi/gas-preprocessor) should be
|
|
||||||
installed in your PATH.
|
|
||||||
|
|
||||||
Set the following shell variables for simplicity:
|
|
||||||
|
|
||||||
Xcode 3.2.x / iOS 4.3 SDK:
|
|
||||||
IOS_PLATFORMDIR="/Developer/Platforms/iPhoneOS.platform"
|
|
||||||
IOS_SYSROOT="$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS4.3.sdk"
|
|
||||||
IOS_GCC="$IOS_PLATFORMDIR/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2"
|
|
||||||
|
|
||||||
Xcode 4.5.x / iOS 6.0 SDK:
|
|
||||||
IOS_PLATFORMDIR="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform"
|
|
||||||
IOS_SYSROOT="$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS6.0.sdk"
|
|
||||||
IOS_GCC="$IOS_PLATFORMDIR/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2"
|
|
||||||
|
|
||||||
ARM v6 only (up to and including iPhone 3G):
|
|
||||||
[NOTE: Requires Xcode 4.4.x or earlier]
|
|
||||||
IOS_CFLAGS="-march=armv6 -mcpu=arm1176jzf-s -mfpu=vfp"
|
|
||||||
|
|
||||||
ARM v7 only (iPhone 3GS-4S, iPad 1st-3rd Generation):
|
|
||||||
IOS_CFLAGS="-march=armv7 -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon"
|
|
||||||
|
|
||||||
ARM v7s only (iPhone 5, iPad 4th Generation):
|
|
||||||
[NOTE: Requires Xcode 4.5 or later]
|
|
||||||
IOS_CFLAGS="-march=armv7s -mcpu=swift -mtune=swift -mfpu=neon"
|
|
||||||
|
|
||||||
Follow the procedure under "Building libjpeg-turbo" above, adding
|
|
||||||
|
|
||||||
--host arm-apple-darwin10 --enable-static --disable-shared \
|
|
||||||
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.
|
|
||||||
|
|
||||||
Once built, lipo can be used to combine the ARM v6, v7, and/or v7s variants
|
|
||||||
into a universal library.
|
|
||||||
|
|
||||||
NOTE: If you are building libjpeg-turbo from the "official" project tarball,
|
|
||||||
then it is highly likely that you will need to run 'autoreconf -fiv' in the
|
|
||||||
source tree prior to building ARM v7 or v7s iOS binaries using the techniques
|
|
||||||
described above. Otherwise, you may get a libtool error such as "unable to
|
|
||||||
infer tagged configuration."
|
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************
|
|
||||||
** Building on Windows (Visual C++ or MinGW)
|
|
||||||
*******************************************************************************
|
|
||||||
|
|
||||||
|
|
||||||
==================
|
|
||||||
Build Requirements
|
|
||||||
==================
|
|
||||||
|
|
||||||
-- CMake (http://www.cmake.org) v2.6 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 libjpeg-turbo.
|
|
||||||
|
|
||||||
* For 32-bit builds, you can also use Microsoft Visual C++ Express
|
|
||||||
Edition. Visual C++ Express Edition is a free download.
|
|
||||||
* If you intend to build libjpeg-turbo 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
|
|
||||||
|
|
||||||
GCC v4.1 or later recommended for best performance
|
|
||||||
|
|
||||||
-- 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 libjpeg-turbo source directory. You can
|
|
||||||
create multiple independent binary directories, in which different versions of
|
|
||||||
libjpeg-turbo 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 libjpeg-turbo source
|
|
||||||
directory. For in-tree builds, these directories are the same.
|
|
||||||
|
|
||||||
|
|
||||||
======================
|
|
||||||
Building libjpeg-turbo
|
|
||||||
======================
|
|
||||||
|
|
||||||
|
|
||||||
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 libjpeg-turbo, 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 9 2008" {source_directory}
|
|
||||||
|
|
||||||
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 libjpeg-turbo.
|
|
||||||
|
|
||||||
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
|
|
||||||
-----
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
cmake -G "MSYS Makefiles" {source_directory}
|
|
||||||
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
|
|
||||||
libjpeg-turbo that is API/ABI-compatible with libjpeg v7. Add "-DWITH_JPEG8=1"
|
|
||||||
to the cmake command to build a version of libjpeg-turbo 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 libjpeg-turbo that lacks the
|
|
||||||
jpeg_mem_src() and jpeg_mem_dest() functions. These functions were not part of
|
|
||||||
the original libjpeg v6b and v7 APIs, so removing them ensures strict
|
|
||||||
conformance with those APIs. See README-turbo.txt for more information.
|
|
||||||
|
|
||||||
|
|
||||||
Arithmetic Coding Support
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
Since the patent on arithmetic coding has expired, this functionality has been
|
|
||||||
included in this release of libjpeg-turbo. libjpeg-turbo'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 libjpeg-turbo
|
|
||||||
========================
|
|
||||||
|
|
||||||
You can use the build system to install libjpeg-turbo 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:\libjpeg-turbo {source_directory}
|
|
||||||
nmake install
|
|
||||||
|
|
||||||
will install the header files in c:\libjpeg-turbo\include, the library files
|
|
||||||
in c:\libjpeg-turbo\lib, the DLL's in c:\libjpeg-turbo\bin, and the
|
|
||||||
documentation in c:\libjpeg-turbo\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_AR=/usr/bin/x86_64-w64-mingw32-ar \
|
|
||||||
-DCMAKE_RANLIB=/usr/bin/x86_64-w64-mingw32-ranlib {source_directory}
|
|
||||||
make
|
|
||||||
|
|
||||||
This produces a 64-bit build of libjpeg-turbo 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 \
|
|
||||||
-DDCMAKE_AR=/usr/bin/i686-w64-mingw32-ar \
|
|
||||||
-DCMAKE_RANLIB=/usr/bin/i686-w64-mingw32-ranlib {source_directory}
|
|
||||||
make
|
|
||||||
|
|
||||||
This produces a 32-bit build of libjpeg-turbo 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-w64 Build on Windows
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
This produces a 64-bit build of libjpeg-turbo using the "native" MinGW-w64
|
|
||||||
toolchain (which is faster than the Cygwin version):
|
|
||||||
|
|
||||||
cd {build_directory}
|
|
||||||
CC={mingw-w64_binary_path}/x86_64-w64-mingw32-gcc \
|
|
||||||
cmake -G "MSYS Makefiles" \
|
|
||||||
-DCMAKE_AR={mingw-w64_binary_path}/x86_64-w64-mingw32-ar \
|
|
||||||
-DCMAKE_RANLIB={mingw-w64_binary_path}/x86_64-w64-mingw32-ranlib \
|
|
||||||
{source_directory}
|
|
||||||
make
|
|
||||||
|
|
||||||
|
|
||||||
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 the PackageMaker
|
|
||||||
application, which must be installed in /Developer/Applications/Utilities.
|
|
||||||
Note that PackageMaker is not included in recent releases of Xcode, but it
|
|
||||||
can be obtained by downloading the "Auxiliary Tools for Xcode" package from
|
|
||||||
http://developer.apple.com/downloads.
|
|
||||||
|
|
||||||
make udmg [BUILDDIR32={32-bit build directory}]
|
|
||||||
|
|
||||||
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 libjpeg-turbo, 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={ARM v6 build directory}] \
|
|
||||||
[BUILDDIRARMV7={ARM v7 build directory}] \
|
|
||||||
[BUILDDIRARMV7S={ARM v7s build directory}]
|
|
||||||
|
|
||||||
On OS X systems, this creates a Macintosh package and disk image in which the
|
|
||||||
libjpeg-turbo 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 ARM v6, ARM v7, and/or ARM v7s out-of-tree builds of libjpeg-turbo
|
|
||||||
(see "Building libjpeg-turbo for iOS" above.) If you are building an x86-64
|
|
||||||
version of libjpeg-turbo, you should configure a 32-bit out-of-tree build as
|
|
||||||
well. Next, build libjpeg-turbo as you would normally, using an out-of-tree
|
|
||||||
build. When it is built, run 'make iosdmg' from the build directory. The
|
|
||||||
build system will look for the ARM v6 build under {source_directory}/iosarmv6
|
|
||||||
by default, the ARM v7 build under {source_directory}/iosarmv7 by default,
|
|
||||||
the ARM v7s build under {source_directory}/iosarmv7s 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, and/or BUILDDIRARMV7S variables on the make command line as
|
|
||||||
shown above.
|
|
||||||
|
|
||||||
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 (libjpeg-turbo[-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 libjpeg-turbo 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 between libjpeg-turbo and libjpeg v6b. 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.
|
|
||||||
935
CMakeLists.txt
1151
ChangeLog.md
Normal file
418
ChangeLog.txt
@@ -1,418 +0,0 @@
|
|||||||
1.3.0
|
|
||||||
=====
|
|
||||||
|
|
||||||
[1] 'make test' now works properly on FreeBSD, and it no longer requires the
|
|
||||||
md5sum executable to be present on other Un*x platforms.
|
|
||||||
|
|
||||||
[2] Overhauled the packaging system:
|
|
||||||
-- To avoid conflict with vendor-supplied libjpeg-turbo packages, the
|
|
||||||
official RPMs and DEBs for libjpeg-turbo have been renamed to
|
|
||||||
"libjpeg-turbo-official".
|
|
||||||
-- The TurboJPEG libraries are now located under /opt/libjpeg-turbo in the
|
|
||||||
official Linux and Mac packages, to avoid conflict with vendor-supplied
|
|
||||||
packages and also to streamline the packaging system.
|
|
||||||
-- Release packages are now created with the directory structure defined
|
|
||||||
by the configure variables "prefix", "bindir", "libdir", etc. (Un*x) or by the
|
|
||||||
CMAKE_INSTALL_PREFIX variable (Windows.) The exception is that the docs are
|
|
||||||
always located under the system default documentation directory on Un*x and Mac
|
|
||||||
systems, and on Windows, the TurboJPEG DLL is always located in the Windows
|
|
||||||
system directory.
|
|
||||||
-- To avoid confusion, official libjpeg-turbo packages on Linux/Unix platforms
|
|
||||||
(except for Mac) will always install the 32-bit libraries in
|
|
||||||
/opt/libjpeg-turbo/lib32 and the 64-bit libraries in /opt/libjpeg-turbo/lib64.
|
|
||||||
-- Fixed an issue whereby, in some cases, the libjpeg-turbo executables on Un*x
|
|
||||||
systems were not properly linking with the shared libraries installed by the
|
|
||||||
same package.
|
|
||||||
-- Fixed an issue whereby building the "installer" target on Windows when
|
|
||||||
WITH_JAVA=1 would fail if the TurboJPEG JAR had not been previously built.
|
|
||||||
-- Building the "install" target on Windows now installs files into the same
|
|
||||||
places that the installer does.
|
|
||||||
|
|
||||||
[3] Fixed a Huffman encoder bug that prevented I/O suspension from working
|
|
||||||
properly.
|
|
||||||
|
|
||||||
|
|
||||||
1.2.90 (1.3 beta1)
|
|
||||||
==================
|
|
||||||
|
|
||||||
[1] Added support for additional scaling factors (3/8, 5/8, 3/4, 7/8, 9/8, 5/4,
|
|
||||||
11/8, 3/2, 13/8, 7/4, 15/8, and 2) when decompressing. Note that the IDCT will
|
|
||||||
not be SIMD-accelerated when using any of these new scaling factors.
|
|
||||||
|
|
||||||
[2] The TurboJPEG dynamic library is now versioned. It was not strictly
|
|
||||||
necessary to do so, because TurboJPEG uses versioned symbols, and if a function
|
|
||||||
changes in an ABI-incompatible way, that function is renamed and a legacy
|
|
||||||
function is provided to maintain backward compatibility. However, certain
|
|
||||||
Linux distro maintainers have a policy against accepting any library that isn't
|
|
||||||
versioned.
|
|
||||||
|
|
||||||
[3] Extended the TurboJPEG Java API so that it can be used to compress a JPEG
|
|
||||||
image from and decompress a JPEG image to an arbitrary position in a large
|
|
||||||
image buffer.
|
|
||||||
|
|
||||||
[4] The tjDecompressToYUV() function now supports the TJFLAG_FASTDCT flag.
|
|
||||||
|
|
||||||
[5] The 32-bit supplementary package for amd64 Debian systems now provides
|
|
||||||
symlinks in /usr/lib/i386-linux-gnu for the TurboJPEG libraries in /usr/lib32.
|
|
||||||
This allows those libraries to be used on MultiArch-compatible systems (such as
|
|
||||||
Ubuntu 11 and later) without setting the linker path.
|
|
||||||
|
|
||||||
[6] The TurboJPEG Java wrapper should now find the JNI library on Mac systems
|
|
||||||
without having to pass -Djava.library.path=/usr/lib to java.
|
|
||||||
|
|
||||||
[7] TJBench has been ported to Java to provide a convenient way of validating
|
|
||||||
the performance of the TurboJPEG Java API. It can be run with
|
|
||||||
'java -cp turbojpeg.jar TJBench'.
|
|
||||||
|
|
||||||
[8] cjpeg can now be used to generate JPEG files with the RGB colorspace
|
|
||||||
(feature ported from jpeg-8d.)
|
|
||||||
|
|
||||||
[9] The width and height in the -crop argument passed to jpegtran can now be
|
|
||||||
suffixed with "f" to indicate that, when the upper left corner of the cropping
|
|
||||||
region is automatically moved to the nearest iMCU boundary, the bottom right
|
|
||||||
corner should be moved by the same amount. In other words, this feature causes
|
|
||||||
jpegtran to strictly honor the specified width/height rather than the specified
|
|
||||||
bottom right corner (feature ported from jpeg-8d.)
|
|
||||||
|
|
||||||
[10] JPEG files using the RGB colorspace can now be decompressed into grayscale
|
|
||||||
images (feature ported from jpeg-8d.)
|
|
||||||
|
|
||||||
[11] Fixed a regression caused by 1.2.1[7] whereby the build would fail with
|
|
||||||
multiple "Mismatch in operand sizes" errors when attempting to build the x86
|
|
||||||
SIMD code with NASM 0.98.
|
|
||||||
|
|
||||||
[12] The in-memory source/destination managers (jpeg_mem_src() and
|
|
||||||
jpeg_mem_dest()) are now included by default when building libjpeg-turbo with
|
|
||||||
libjpeg v6b or v7 emulation, so that programs can take advantage of these
|
|
||||||
functions without requiring the use of the backward-incompatible libjpeg v8
|
|
||||||
ABI. The "age number" of the libjpeg-turbo library on Un*x systems has been
|
|
||||||
incremented by 1 to reflect this. You can disable this feature with a
|
|
||||||
configure/CMake switch in order to retain strict API/ABI compatibility with the
|
|
||||||
libjpeg v6b or v7 API/ABI (or with previous versions of libjpeg-turbo.) See
|
|
||||||
README-turbo.txt for more details.
|
|
||||||
|
|
||||||
[13] Added ARM v7s architecture to libjpeg.a and libturbojpeg.a in the official
|
|
||||||
libjpeg-turbo binary package for OS X, so that those libraries can be used to
|
|
||||||
build applications that leverage the faster CPUs in the iPhone 5 and iPad 4.
|
|
||||||
|
|
||||||
|
|
||||||
1.2.1
|
|
||||||
=====
|
|
||||||
|
|
||||||
[1] Creating or decoding a JPEG file that uses the RGB colorspace should now
|
|
||||||
properly work when the input or output colorspace is one of the libjpeg-turbo
|
|
||||||
colorspace extensions.
|
|
||||||
|
|
||||||
[2] When libjpeg-turbo was built without SIMD support and merged (non-fancy)
|
|
||||||
upsampling was used along with an alpha-enabled colorspace during
|
|
||||||
decompression, the unused byte of the decompressed pixels was not being set to
|
|
||||||
0xFF. This has been fixed. TJUnitTest has also been extended to test for the
|
|
||||||
correct behavior of the colorspace extensions when merged upsampling is used.
|
|
||||||
|
|
||||||
[3] Fixed a bug whereby the libjpeg-turbo SSE2 SIMD code would not preserve the
|
|
||||||
upper 64 bits of xmm6 and xmm7 on Win64 platforms, which violated the Win64
|
|
||||||
calling conventions.
|
|
||||||
|
|
||||||
[4] Fixed a regression caused by 1.2.0[6] whereby decompressing corrupt JPEG
|
|
||||||
images (specifically, images in which the component count was erroneously set
|
|
||||||
to a large value) would cause libjpeg-turbo to segfault.
|
|
||||||
|
|
||||||
[5] Worked around a severe performance issue with "Bobcat" (AMD Embedded APU)
|
|
||||||
processors. The MASKMOVDQU instruction, which was used by the libjpeg-turbo
|
|
||||||
SSE2 SIMD code, is apparently implemented in microcode on AMD processors, and
|
|
||||||
it is painfully slow on Bobcat processors in particular. Eliminating the use
|
|
||||||
of this instruction improved performance by an order of magnitude on Bobcat
|
|
||||||
processors and by a small amount (typically 5%) on AMD desktop processors.
|
|
||||||
|
|
||||||
[6] Added SIMD acceleration for performing 4:2:2 upsampling on NEON-capable ARM
|
|
||||||
platforms. This speeds up the decompression of 4:2:2 JPEGs by 20-25% on such
|
|
||||||
platforms.
|
|
||||||
|
|
||||||
[7] Fixed a regression caused by 1.2.0[2] whereby, on Linux/x86 platforms
|
|
||||||
running the 32-bit SSE2 SIMD code in libjpeg-turbo, decompressing a 4:2:0 or
|
|
||||||
4:2:2 JPEG image into a 32-bit (RGBX, BGRX, etc.) buffer without using fancy
|
|
||||||
upsampling would produce several incorrect columns of pixels at the right-hand
|
|
||||||
side of the output image if each row in the output image was not evenly
|
|
||||||
divisible by 16 bytes.
|
|
||||||
|
|
||||||
[8] Fixed an issue whereby attempting to build the SIMD extensions with Xcode
|
|
||||||
4.3 on OS X platforms would cause NASM to return numerous errors of the form
|
|
||||||
"'%define' expects a macro identifier".
|
|
||||||
|
|
||||||
[9] Added flags to the TurboJPEG API that allow the caller to force the use of
|
|
||||||
either the fast or the accurate DCT/IDCT algorithms in the underlying codec.
|
|
||||||
|
|
||||||
|
|
||||||
1.2.0
|
|
||||||
=====
|
|
||||||
|
|
||||||
[1] Fixed build issue with YASM on Unix systems (the libjpeg-turbo build system
|
|
||||||
was not adding the current directory to the assembler include path, so YASM
|
|
||||||
was not able to find jsimdcfg.inc.)
|
|
||||||
|
|
||||||
[2] Fixed out-of-bounds read in SSE2 SIMD code that occurred when decompressing
|
|
||||||
a JPEG image to a bitmap buffer whose size was not a multiple of 16 bytes.
|
|
||||||
This was more of an annoyance than an actual bug, since it did not cause any
|
|
||||||
actual run-time problems, but the issue showed up when running libjpeg-turbo in
|
|
||||||
valgrind. See http://crbug.com/72399 for more information.
|
|
||||||
|
|
||||||
[3] Added a compile-time macro (LIBJPEG_TURBO_VERSION) that can be used to
|
|
||||||
check the version of libjpeg-turbo against which an application was compiled.
|
|
||||||
|
|
||||||
[4] Added new RGBA/BGRA/ABGR/ARGB colorspace extension constants (libjpeg API)
|
|
||||||
and pixel formats (TurboJPEG API), which allow applications to specify that,
|
|
||||||
when decompressing to a 4-component RGB buffer, the unused byte should be set
|
|
||||||
to 0xFF so that it can be interpreted as an opaque alpha channel.
|
|
||||||
|
|
||||||
[5] Fixed regression issue whereby DevIL failed to build against libjpeg-turbo
|
|
||||||
because libjpeg-turbo's distributed version of jconfig.h contained an INLINE
|
|
||||||
macro, which conflicted with a similar macro in DevIL. This macro is used only
|
|
||||||
internally when building libjpeg-turbo, so it was moved into config.h.
|
|
||||||
|
|
||||||
[6] libjpeg-turbo will now correctly decompress erroneous CMYK/YCCK JPEGs whose
|
|
||||||
K component is assigned a component ID of 1 instead of 4. Although these files
|
|
||||||
are in violation of the spec, other JPEG implementations handle them
|
|
||||||
correctly.
|
|
||||||
|
|
||||||
[7] Added ARM v6 and ARM v7 architectures to libjpeg.a and libturbojpeg.a in
|
|
||||||
the official libjpeg-turbo binary package for OS X, so that those libraries can
|
|
||||||
be used to build both OS X and iOS applications.
|
|
||||||
|
|
||||||
|
|
||||||
1.1.90 (1.2 beta1)
|
|
||||||
==================
|
|
||||||
|
|
||||||
[1] Added a Java wrapper for the TurboJPEG API. See java/README for more
|
|
||||||
details.
|
|
||||||
|
|
||||||
[2] The TurboJPEG API can now be used to scale down images during
|
|
||||||
decompression.
|
|
||||||
|
|
||||||
[3] Added SIMD routines for RGB-to-grayscale color conversion, which
|
|
||||||
significantly improves the performance of grayscale JPEG compression from an
|
|
||||||
RGB source image.
|
|
||||||
|
|
||||||
[4] Improved the performance of the C color conversion routines, which are used
|
|
||||||
on platforms for which SIMD acceleration is not available.
|
|
||||||
|
|
||||||
[5] Added a function to the TurboJPEG API that performs lossless transforms.
|
|
||||||
This function is implemented using the same back end as jpegtran, but it
|
|
||||||
performs transcoding entirely in memory and allows multiple transforms and/or
|
|
||||||
crop operations to be batched together, so the source coefficients only need to
|
|
||||||
be read once. This is useful when generating image tiles from a single source
|
|
||||||
JPEG.
|
|
||||||
|
|
||||||
[6] Added tests for the new TurboJPEG scaled decompression and lossless
|
|
||||||
transform features to tjbench (the TurboJPEG benchmark, formerly called
|
|
||||||
"jpgtest".)
|
|
||||||
|
|
||||||
[7] Added support for 4:4:0 (transposed 4:2:2) subsampling in TurboJPEG, which
|
|
||||||
was necessary in order for it to read 4:2:2 JPEG files that had been losslessly
|
|
||||||
transposed or rotated 90 degrees.
|
|
||||||
|
|
||||||
[8] All legacy VirtualGL code has been re-factored, and this has allowed
|
|
||||||
libjpeg-turbo, in its entirety, to be re-licensed under a BSD-style license.
|
|
||||||
|
|
||||||
[9] libjpeg-turbo can now be built with YASM.
|
|
||||||
|
|
||||||
[10] Added SIMD acceleration for ARM Linux and iOS platforms that support
|
|
||||||
NEON instructions.
|
|
||||||
|
|
||||||
[11] Refactored the TurboJPEG C API and documented it using Doxygen. The
|
|
||||||
TurboJPEG 1.2 API uses pixel formats to define the size and component order of
|
|
||||||
the uncompressed source/destination images, and it includes a more efficient
|
|
||||||
version of TJBUFSIZE() that computes a worst-case JPEG size based on the level
|
|
||||||
of chrominance subsampling. The refactored implementation of the TurboJPEG API
|
|
||||||
now uses the libjpeg memory source and destination managers, which allows the
|
|
||||||
TurboJPEG compressor to grow the JPEG buffer as necessary.
|
|
||||||
|
|
||||||
[12] Eliminated errors in the output of jpegtran on Windows that occurred when
|
|
||||||
the application was invoked using I/O redirection
|
|
||||||
(jpegtran <input.jpg >output.jpg).
|
|
||||||
|
|
||||||
[13] The inclusion of libjpeg v7 and v8 emulation as well as arithmetic coding
|
|
||||||
support in libjpeg-turbo v1.1.0 introduced several new error constants in
|
|
||||||
jerror.h, and these were mistakenly enabled for all emulation modes, causing
|
|
||||||
the error enum in libjpeg-turbo to sometimes have different values than the
|
|
||||||
same enum in libjpeg. This represents an ABI incompatibility, and it caused
|
|
||||||
problems with rare applications that took specific action based on a particular
|
|
||||||
error value. The fix was to include the new error constants conditionally
|
|
||||||
based on whether libjpeg v7 or v8 emulation was enabled.
|
|
||||||
|
|
||||||
[14] Fixed an issue whereby Windows applications that used libjpeg-turbo would
|
|
||||||
fail to compile if the Windows system headers were included before jpeglib.h.
|
|
||||||
This issue was caused by a conflict in the definition of the INT32 type.
|
|
||||||
|
|
||||||
[15] Fixed 32-bit supplementary package for amd64 Debian systems, which was
|
|
||||||
broken by enhancements to the packaging system in 1.1.
|
|
||||||
|
|
||||||
[16] When decompressing a JPEG image using an output colorspace of
|
|
||||||
JCS_EXT_RGBX, JCS_EXT_BGRX, JCS_EXT_XBGR, or JCS_EXT_XRGB, libjpeg-turbo will
|
|
||||||
now set the unused byte to 0xFF, which allows applications to interpret that
|
|
||||||
byte as an alpha channel (0xFF = opaque).
|
|
||||||
|
|
||||||
|
|
||||||
1.1.1
|
|
||||||
=====
|
|
||||||
|
|
||||||
[1] Fixed a 1-pixel error in row 0, column 21 of the luminance plane generated
|
|
||||||
by tjEncodeYUV().
|
|
||||||
|
|
||||||
[2] libjpeg-turbo's accelerated Huffman decoder previously ignored unexpected
|
|
||||||
markers found in the middle of the JPEG data stream during decompression. It
|
|
||||||
will now hand off decoding of a particular block to the unaccelerated Huffman
|
|
||||||
decoder if an unexpected marker is found, so that the unaccelerated Huffman
|
|
||||||
decoder can generate an appropriate warning.
|
|
||||||
|
|
||||||
[3] Older versions of MinGW64 prefixed symbol names with underscores by
|
|
||||||
default, which differed from the behavior of 64-bit Visual C++. MinGW64 1.0
|
|
||||||
has adopted the behavior of 64-bit Visual C++ as the default, so to accommodate
|
|
||||||
this, the libjpeg-turbo SIMD function names are no longer prefixed with an
|
|
||||||
underscore when building with MinGW64. This means that, when building
|
|
||||||
libjpeg-turbo with older versions of MinGW64, you will now have to add
|
|
||||||
-fno-leading-underscore to the CFLAGS.
|
|
||||||
|
|
||||||
[4] Fixed a regression bug in the NSIS script that caused the Windows installer
|
|
||||||
build to fail when using the Visual Studio IDE.
|
|
||||||
|
|
||||||
[5] Fixed a bug in jpeg_read_coefficients() whereby it would not initialize
|
|
||||||
cinfo->image_width and cinfo->image_height if libjpeg v7 or v8 emulation was
|
|
||||||
enabled. This specifically caused the jpegoptim program to fail if it was
|
|
||||||
linked against a version of libjpeg-turbo that was built with libjpeg v7 or v8
|
|
||||||
emulation.
|
|
||||||
|
|
||||||
[6] Eliminated excessive I/O overhead that occurred when reading BMP files in
|
|
||||||
cjpeg.
|
|
||||||
|
|
||||||
[7] Eliminated errors in the output of cjpeg on Windows that occurred when the
|
|
||||||
application was invoked using I/O redirection (cjpeg <inputfile >output.jpg).
|
|
||||||
|
|
||||||
|
|
||||||
1.1.0
|
|
||||||
=====
|
|
||||||
|
|
||||||
[1] The algorithm used by the SIMD quantization function cannot produce correct
|
|
||||||
results when the JPEG quality is >= 98 and the fast integer forward DCT is
|
|
||||||
used. Thus, the non-SIMD quantization function is now used for those cases,
|
|
||||||
and libjpeg-turbo should now produce identical output to libjpeg v6b in all
|
|
||||||
cases.
|
|
||||||
|
|
||||||
[2] Despite the above, the fast integer forward DCT still degrades somewhat for
|
|
||||||
JPEG qualities greater than 95, so the TurboJPEG wrapper will now automatically
|
|
||||||
use the slow integer forward DCT when generating JPEG images of quality 96 or
|
|
||||||
greater. This reduces compression performance by as much as 15% for these
|
|
||||||
high-quality images but is necessary to ensure that the images are perceptually
|
|
||||||
lossless. It also ensures that the library can avoid the performance pitfall
|
|
||||||
created by [1].
|
|
||||||
|
|
||||||
[3] Ported jpgtest.cxx to pure C to avoid the need for a C++ compiler.
|
|
||||||
|
|
||||||
[4] Fixed visual artifacts in grayscale JPEG compression caused by a typo in
|
|
||||||
the RGB-to-luminance lookup tables.
|
|
||||||
|
|
||||||
[5] The Windows distribution packages now include the libjpeg run-time programs
|
|
||||||
(cjpeg, etc.)
|
|
||||||
|
|
||||||
[6] All packages now include jpgtest.
|
|
||||||
|
|
||||||
[7] The TurboJPEG dynamic library now uses versioned symbols.
|
|
||||||
|
|
||||||
[8] Added two new TurboJPEG API functions, tjEncodeYUV() and
|
|
||||||
tjDecompressToYUV(), to replace the somewhat hackish TJ_YUV flag.
|
|
||||||
|
|
||||||
|
|
||||||
1.0.90 (1.1 beta1)
|
|
||||||
==================
|
|
||||||
|
|
||||||
[1] Added emulation of the libjpeg v7 and v8 APIs and ABIs. See
|
|
||||||
README-turbo.txt for more details. This feature was sponsored by CamTrace SAS.
|
|
||||||
|
|
||||||
[2] Created a new CMake-based build system for the Visual C++ and MinGW builds.
|
|
||||||
|
|
||||||
[3] Grayscale bitmaps can now be compressed from/decompressed to using the
|
|
||||||
TurboJPEG API.
|
|
||||||
|
|
||||||
[4] jpgtest can now be used to test decompression performance with existing
|
|
||||||
JPEG images.
|
|
||||||
|
|
||||||
[5] If the default install prefix (/opt/libjpeg-turbo) is used, then
|
|
||||||
'make install' now creates /opt/libjpeg-turbo/lib32 and
|
|
||||||
/opt/libjpeg-turbo/lib64 sym links to duplicate the behavior of the binary
|
|
||||||
packages.
|
|
||||||
|
|
||||||
[6] All symbols in the libjpeg-turbo dynamic library are now versioned, even
|
|
||||||
when the library is built with libjpeg v6b emulation.
|
|
||||||
|
|
||||||
[7] Added arithmetic encoding and decoding support (can be disabled with
|
|
||||||
configure or CMake options)
|
|
||||||
|
|
||||||
[8] Added a TJ_YUV flag to the TurboJPEG API, which causes both the compressor
|
|
||||||
and decompressor to output planar YUV images.
|
|
||||||
|
|
||||||
[9] Added an extended version of tjDecompressHeader() to the TurboJPEG API,
|
|
||||||
which allows the caller to determine the type of subsampling used in a JPEG
|
|
||||||
image.
|
|
||||||
|
|
||||||
[10] Added further protections against invalid Huffman codes.
|
|
||||||
|
|
||||||
|
|
||||||
1.0.1
|
|
||||||
=====
|
|
||||||
|
|
||||||
[1] The Huffman decoder will now handle erroneous Huffman codes (for instance,
|
|
||||||
from a corrupt JPEG image.) Previously, these would cause libjpeg-turbo to
|
|
||||||
crash under certain circumstances.
|
|
||||||
|
|
||||||
[2] Fixed typo in SIMD dispatch routines that was causing 4:2:2 upsampling to
|
|
||||||
be used instead of 4:2:0 when decompressing JPEG images using SSE2 code.
|
|
||||||
|
|
||||||
[3] configure script will now automatically determine whether the
|
|
||||||
INCOMPLETE_TYPES_BROKEN macro should be defined.
|
|
||||||
|
|
||||||
|
|
||||||
1.0.0
|
|
||||||
=====
|
|
||||||
|
|
||||||
[1] 2983700: Further FreeBSD build tweaks (no longer necessary to specify
|
|
||||||
--host when configuring on a 64-bit system)
|
|
||||||
|
|
||||||
[2] Created symlinks in the Unix/Linux packages so that the TurboJPEG
|
|
||||||
include file can always be found in /opt/libjpeg-turbo/include, the 32-bit
|
|
||||||
static libraries can always be found in /opt/libjpeg-turbo/lib32, and the
|
|
||||||
64-bit static libraries can always be found in /opt/libjpeg-turbo/lib64.
|
|
||||||
|
|
||||||
[3] The Unix/Linux distribution packages now include the libjpeg run-time
|
|
||||||
programs (cjpeg, etc.) and man pages.
|
|
||||||
|
|
||||||
[4] Created a 32-bit supplementary package for amd64 Debian systems, which
|
|
||||||
contains just the 32-bit libjpeg-turbo libraries.
|
|
||||||
|
|
||||||
[5] Moved the libraries from */lib32 to */lib in the i386 Debian package.
|
|
||||||
|
|
||||||
[6] Include distribution package for Cygwin
|
|
||||||
|
|
||||||
[7] No longer necessary to specify --without-simd on non-x86 architectures, and
|
|
||||||
unit tests now work on those architectures.
|
|
||||||
|
|
||||||
|
|
||||||
0.0.93
|
|
||||||
======
|
|
||||||
|
|
||||||
[1] 2982659, Fixed x86-64 build on FreeBSD systems
|
|
||||||
|
|
||||||
[2] 2988188: Added support for Windows 64-bit systems
|
|
||||||
|
|
||||||
|
|
||||||
0.0.91
|
|
||||||
======
|
|
||||||
|
|
||||||
[1] Added documentation to .deb packages
|
|
||||||
|
|
||||||
[2] 2968313: Fixed data corruption issues when decompressing large JPEG images
|
|
||||||
and/or using buffered I/O with the libjpeg-turbo decompressor
|
|
||||||
|
|
||||||
|
|
||||||
0.0.90
|
|
||||||
======
|
|
||||||
|
|
||||||
Initial release
|
|
||||||
139
LICENSE.md
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
libjpeg-turbo Licenses
|
||||||
|
======================
|
||||||
|
|
||||||
|
libjpeg-turbo is covered by three compatible BSD-style open source licenses:
|
||||||
|
|
||||||
|
- The IJG (Independent JPEG Group) License, which is listed in
|
||||||
|
[README.ijg](README.ijg)
|
||||||
|
|
||||||
|
This license applies to the libjpeg API library and associated programs
|
||||||
|
(any code inherited from libjpeg, and any modifications to that code.)
|
||||||
|
|
||||||
|
- The Modified (3-clause) BSD License, which is listed below
|
||||||
|
|
||||||
|
This license covers the TurboJPEG API library and associated programs.
|
||||||
|
|
||||||
|
- The zlib License, which is listed below
|
||||||
|
|
||||||
|
This license is a subset of the other two, and it covers the libjpeg-turbo
|
||||||
|
SIMD extensions.
|
||||||
|
|
||||||
|
|
||||||
|
Complying with the libjpeg-turbo Licenses
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
This section provides a roll-up of the libjpeg-turbo licensing terms, to the
|
||||||
|
best of our understanding.
|
||||||
|
|
||||||
|
1. If you are distributing a modified version of the libjpeg-turbo source,
|
||||||
|
then:
|
||||||
|
|
||||||
|
1. You cannot alter or remove any existing copyright or license notices
|
||||||
|
from the source.
|
||||||
|
|
||||||
|
**Origin**
|
||||||
|
- Clause 1 of the IJG License
|
||||||
|
- Clause 1 of the Modified BSD License
|
||||||
|
- Clauses 1 and 3 of the zlib License
|
||||||
|
|
||||||
|
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
|
||||||
|
there is not an existing copyright header in that file, then you can
|
||||||
|
simply add a notice stating that you modified the file.)
|
||||||
|
|
||||||
|
**Origin**
|
||||||
|
- Clause 1 of the IJG License
|
||||||
|
- Clause 2 of the zlib License
|
||||||
|
|
||||||
|
3. You must include the IJG README file, and you must not alter any of the
|
||||||
|
copyright or license text in that file.
|
||||||
|
|
||||||
|
**Origin**
|
||||||
|
- Clause 1 of the IJG License
|
||||||
|
|
||||||
|
2. If you are distributing only libjpeg-turbo binaries without the source, or
|
||||||
|
if you are distributing an application that statically links with
|
||||||
|
libjpeg-turbo, then:
|
||||||
|
|
||||||
|
1. Your product documentation must include a message stating:
|
||||||
|
|
||||||
|
This software is based in part on the work of the Independent JPEG
|
||||||
|
Group.
|
||||||
|
|
||||||
|
**Origin**
|
||||||
|
- Clause 2 of the IJG license
|
||||||
|
|
||||||
|
2. If your binary distribution includes or uses the TurboJPEG API, then
|
||||||
|
your product documentation must include the text of the Modified BSD
|
||||||
|
License.
|
||||||
|
|
||||||
|
**Origin**
|
||||||
|
- Clause 2 of the Modified BSD License
|
||||||
|
|
||||||
|
3. You cannot use the name of the IJG or The libjpeg-turbo Project or the
|
||||||
|
contributors thereof in advertising, publicity, etc.
|
||||||
|
|
||||||
|
**Origin**
|
||||||
|
- IJG License
|
||||||
|
- Clause 3 of the Modified BSD License
|
||||||
|
|
||||||
|
4. The IJG and The libjpeg-turbo Project do not warrant libjpeg-turbo to be
|
||||||
|
free of defects, nor do we accept any liability for undesirable
|
||||||
|
consequences resulting from your use of the software.
|
||||||
|
|
||||||
|
**Origin**
|
||||||
|
- IJG License
|
||||||
|
- Modified BSD License
|
||||||
|
- zlib License
|
||||||
|
|
||||||
|
|
||||||
|
The Modified (3-clause) BSD License
|
||||||
|
===================================
|
||||||
|
|
||||||
|
Copyright (C)\<YEAR\> \<AUTHOR\>. All Rights Reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
- Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
- Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
- Neither the name of the libjpeg-turbo Project nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from this
|
||||||
|
software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
The zlib License
|
||||||
|
================
|
||||||
|
|
||||||
|
Copyright (C) \<YEAR\>, \<AUTHOR\>.
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
626
Makefile.am
@@ -4,15 +4,21 @@ include_HEADERS = jerror.h jmorecfg.h jpeglib.h
|
|||||||
|
|
||||||
if WITH_TURBOJPEG
|
if WITH_TURBOJPEG
|
||||||
lib_LTLIBRARIES += libturbojpeg.la
|
lib_LTLIBRARIES += libturbojpeg.la
|
||||||
libturbojpeg_la_LDFLAGS = -version-info 0:0 -no-undefined
|
libturbojpeg_la_LDFLAGS = -version-info 1:0:1 -no-undefined
|
||||||
include_HEADERS += turbojpeg.h
|
include_HEADERS += turbojpeg.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
nodist_include_HEADERS = jconfig.h
|
nodist_include_HEADERS = jconfig.h
|
||||||
|
|
||||||
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
|
pkgconfig_DATA = pkgscripts/libjpeg.pc
|
||||||
|
if WITH_TURBOJPEG
|
||||||
|
pkgconfig_DATA += pkgscripts/libturbojpeg.pc
|
||||||
|
endif
|
||||||
|
|
||||||
HDRS = jchuff.h jdct.h jdhuff.h jerror.h jinclude.h jmemsys.h jmorecfg.h \
|
HDRS = jchuff.h jdct.h jdhuff.h jerror.h jinclude.h jmemsys.h jmorecfg.h \
|
||||||
jpegint.h jpeglib.h jversion.h jsimd.h jsimddct.h jpegcomp.h
|
jpegint.h jpeglib.h jversion.h jsimd.h jsimddct.h jpegcomp.h \
|
||||||
|
jpeg_nbits_table.h
|
||||||
|
|
||||||
libjpeg_la_SOURCES = $(HDRS) jcapimin.c jcapistd.c jccoefct.c jccolor.c \
|
libjpeg_la_SOURCES = $(HDRS) jcapimin.c jcapistd.c jccoefct.c jccolor.c \
|
||||||
jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \
|
jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \
|
||||||
@@ -107,21 +113,34 @@ tjunittest_LDADD = libturbojpeg.la
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
cjpeg_SOURCES = cdjpeg.h cderror.h cdjpeg.c cjpeg.c rdbmp.c rdgif.c \
|
cjpeg_SOURCES = cdjpeg.h cderror.h cdjpeg.c cjpeg.c rdgif.c rdppm.c rdswitch.c
|
||||||
rdppm.c rdswitch.c rdtarga.c
|
if WITH_12BIT
|
||||||
|
else
|
||||||
|
cjpeg_SOURCES += rdbmp.c rdtarga.c
|
||||||
|
endif
|
||||||
|
|
||||||
cjpeg_LDADD = libjpeg.la
|
cjpeg_LDADD = libjpeg.la
|
||||||
|
|
||||||
cjpeg_CFLAGS = -DBMP_SUPPORTED -DGIF_SUPPORTED -DPPM_SUPPORTED \
|
cjpeg_CFLAGS = -DGIF_SUPPORTED -DPPM_SUPPORTED
|
||||||
-DTARGA_SUPPORTED
|
if WITH_12BIT
|
||||||
|
else
|
||||||
|
cjpeg_CFLAGS += -DBMP_SUPPORTED -DTARGA_SUPPORTED
|
||||||
|
endif
|
||||||
|
|
||||||
djpeg_SOURCES = cdjpeg.h cderror.h cdjpeg.c djpeg.c rdcolmap.c rdswitch.c \
|
djpeg_SOURCES = cdjpeg.h cderror.h cdjpeg.c djpeg.c rdcolmap.c rdswitch.c \
|
||||||
wrbmp.c wrgif.c wrppm.c wrtarga.c
|
wrgif.c wrppm.c
|
||||||
|
if WITH_12BIT
|
||||||
|
else
|
||||||
|
djpeg_SOURCES += wrbmp.c wrtarga.c
|
||||||
|
endif
|
||||||
|
|
||||||
djpeg_LDADD = libjpeg.la
|
djpeg_LDADD = libjpeg.la
|
||||||
|
|
||||||
djpeg_CFLAGS = -DBMP_SUPPORTED -DGIF_SUPPORTED -DPPM_SUPPORTED \
|
djpeg_CFLAGS = -DGIF_SUPPORTED -DPPM_SUPPORTED
|
||||||
-DTARGA_SUPPORTED
|
if WITH_12BIT
|
||||||
|
else
|
||||||
|
djpeg_CFLAGS += -DBMP_SUPPORTED -DTARGA_SUPPORTED
|
||||||
|
endif
|
||||||
|
|
||||||
jpegtran_SOURCES = jpegtran.c rdswitch.c cdjpeg.c transupp.c transupp.h
|
jpegtran_SOURCES = jpegtran.c rdswitch.c cdjpeg.c transupp.c transupp.h
|
||||||
|
|
||||||
@@ -141,20 +160,21 @@ jcstest_LDADD = libjpeg.la
|
|||||||
|
|
||||||
dist_man1_MANS = cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1
|
dist_man1_MANS = cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1
|
||||||
|
|
||||||
DOCS= coderules.txt jconfig.txt change.log rdrle.c wrrle.c BUILDING.txt \
|
DOCS= coderules.txt jconfig.txt change.log rdrle.c wrrle.c BUILDING.md \
|
||||||
ChangeLog.txt
|
ChangeLog.md
|
||||||
|
|
||||||
docdir = $(datadir)/doc
|
dist_doc_DATA = README.ijg README.md libjpeg.txt structure.txt usage.txt \
|
||||||
dist_doc_DATA = README README-turbo.txt libjpeg.txt structure.txt usage.txt \
|
wizard.txt LICENSE.md
|
||||||
wizard.txt
|
|
||||||
|
|
||||||
exampledir = $(datadir)/doc
|
exampledir = $(docdir)
|
||||||
dist_example_DATA = example.c
|
dist_example_DATA = example.c
|
||||||
|
|
||||||
|
|
||||||
EXTRA_DIST = win release $(DOCS) testimages CMakeLists.txt \
|
EXTRA_DIST = win release $(DOCS) testimages CMakeLists.txt \
|
||||||
sharedlib/CMakeLists.txt cmakescripts libjpeg.map.in doc doxygen.config \
|
sharedlib/CMakeLists.txt cmakescripts libjpeg.map.in doc doxygen.config \
|
||||||
jccolext.c jdcolext.c jdmrgext.c
|
doxygen-extra.css jccolext.c jdcolext.c jdcol565.c jdmrgext.c jdmrg565.c \
|
||||||
|
jstdhuff.c jdcoefct.h jdmainct.h jdmaster.h jdsample.h \
|
||||||
|
md5/CMakeLists.txt
|
||||||
|
|
||||||
dist-hook:
|
dist-hook:
|
||||||
rm -rf `find $(distdir) -name .svn`
|
rm -rf `find $(distdir) -name .svn`
|
||||||
@@ -162,126 +182,487 @@ dist-hook:
|
|||||||
|
|
||||||
SUBDIRS += md5
|
SUBDIRS += md5
|
||||||
|
|
||||||
MD5_JPEG_INT = 9a68f56bc76e466aa7e52f415d0f4a5f
|
if WITH_12BIT
|
||||||
MD5_JPEG_FAST = 0e1502e7fa421835e376a314fac2a39f
|
|
||||||
MD5_JPEG_FAST_100 = 7bf72a8e741d64eecb960c97323af77c
|
TESTORIG = testorig12.jpg
|
||||||
MD5_JPEG_FLOAT = d1623885ffafcd40c684af09e3d65cd5
|
MD5_JPEG_RGB_ISLOW = 9620f424569594bb9242b48498ad801f
|
||||||
MD5_JPEG_FLOAT_NOSIMD = fb4884c35f8273f498cb32879de5c455
|
MD5_PPM_RGB_ISLOW = f3301d2219783b8b3d942b7239fa50c0
|
||||||
MD5_JPEG_INT_GRAY = 72b51f894b8f4a10b3ee3066770aa38d
|
MD5_JPEG_422_IFAST_OPT = 7322e3bd2f127f7de4b40d4480ce60e4
|
||||||
MD5_PPM_INT = d1ed0d11f076b842525271647716aeb8
|
MD5_PPM_422_IFAST = 79807fa552899e66a04708f533e16950
|
||||||
MD5_PPM_FAST = 048298a2d2410261c0533cb97bcfef23
|
MD5_PPM_422M_IFAST = 07737bfe8a7c1c87aaa393a0098d16b0
|
||||||
MD5_PPM_FLOAT = 7f5b446ee36b2630e06785b8d42af15f
|
MD5_JPEG_420_IFAST_Q100_PROG = a1da220b5604081863a504297ed59e55
|
||||||
MD5_PPM_FLOAT_NOSIMD = 64072f1dbdc5b3a187777788604971a5
|
MD5_PPM_420_Q100_IFAST = 1b3730122709f53d007255e8dfd3305e
|
||||||
MD5_PPM_INT_2_1 = 9f9de8c0612f8d06869b960b05abf9c9
|
MD5_PPM_420M_Q100_IFAST = 980a1a3c5bf9510022869d30b7d26566
|
||||||
MD5_PPM_INT_15_8 = b6875bc070720b899566cc06459b63b7
|
MD5_JPEG_GRAY_ISLOW = 235c90707b16e2e069f37c888b2636d9
|
||||||
MD5_PPM_INT_7_4 = 06a177eae05f164fac57f7a2c346ee87
|
MD5_PPM_GRAY_ISLOW = 7213c10af507ad467da5578ca5ee1fca
|
||||||
MD5_PPM_INT_13_8 = bc3452573c8152f6ae552939ee19f82f
|
MD5_PPM_GRAY_ISLOW_RGB = e96ee81c30a6ed422d466338bd3de65d
|
||||||
MD5_PPM_INT_3_2 = f5a8b88a8a7f96016f04d259cf82ed67
|
MD5_JPEG_420S_IFAST_OPT = 7af8e60be4d9c227ec63ac9b6630855e
|
||||||
MD5_PPM_INT_11_8 = d8cc73c0aaacd4556569b59437ba00a5
|
MD5_JPEG_3x2_FLOAT_PROG_SSE = a8c17daf77b457725ec929e215b603f8
|
||||||
MD5_PPM_INT_5_4 = 32775dd9ad2ab90f4c5b219b53e0c86c
|
MD5_PPM_3x2_FLOAT_SSE = 42876ab9e5c2f76a87d08db5fbd57956
|
||||||
MD5_PPM_INT_9_8 = d25e61bc7eac0002f5b393aa223747b6
|
MD5_JPEG_3x2_FLOAT_PROG_32BIT = a8c17daf77b457725ec929e215b603f8
|
||||||
MD5_PPM_INT_7_8 = ddb564b7c74a09494016d6cd7502a946
|
MD5_PPM_3x2_FLOAT_32BIT = 42876ab9e5c2f76a87d08db5fbd57956
|
||||||
MD5_PPM_INT_3_4 = 8ed8e68808c3fbc4ea764fc9d2968646
|
MD5_PPM_3x2_FLOAT_64BIT = d6fbc71153b3d8ded484dbc17c7b9cf4
|
||||||
MD5_PPM_INT_5_8 = a3363274999da2366a024efae6d16c9b
|
MD5_JPEG_3x2_FLOAT_PROG_387 = bc6dbbefac2872f6b9d6c4a0ae60c3c0
|
||||||
MD5_PPM_INT_1_2 = e692a315cea26b988c8e8b29a5dbcd81
|
MD5_PPM_3x2_FLOAT_387 = bcc5723c61560463ac60f772e742d092
|
||||||
MD5_PPM_INT_3_8 = 79eca9175652ced755155c90e785a996
|
MD5_JPEG_3x2_IFAST_PROG = 1396cc2b7185cfe943d408c9d305339e
|
||||||
MD5_PPM_INT_1_4 = 79cd778f8bf1a117690052cacdd54eca
|
MD5_PPM_3x2_IFAST = 3975985ef6eeb0a2cdc58daa651ccc00
|
||||||
MD5_PPM_INT_1_8 = 391b3d4aca640c8567d6f8745eb2142f
|
MD5_PPM_420M_ISLOW_2_1 = 4ca6be2a6f326ff9eaab63e70a8259c0
|
||||||
MD5_PPM_FAST_1_2 = f30bcf6d32ccd44cbdd9aeaacbd9454f
|
MD5_PPM_420M_ISLOW_15_8 = 12aa9f9534c1b3d7ba047322226365eb
|
||||||
MD5_BMP_256 = 4980185e3776e89bd931736e1cddeee6
|
MD5_PPM_420M_ISLOW_13_8 = f7e22817c7b25e1393e4ec101e9d4e96
|
||||||
MD5_JPEG_ARI = e986fb0a637a8d833d96e8a6d6d84ea1
|
MD5_PPM_420M_ISLOW_11_8 = 800a16f9f4dc9b293197bfe11be10a82
|
||||||
MD5_PPM_ARI = 72b59a99bcf1de24c5b27d151bde2437
|
MD5_PPM_420M_ISLOW_9_8 = 06b7a92a9bc69f4dc36ec40f1937d55c
|
||||||
MD5_JPEG_PROG = 1c4afddc05c0a43489ee54438a482d92
|
MD5_PPM_420M_ISLOW_7_8 = 3ec444a14a4ab4eab88ffc49c48eca43
|
||||||
|
MD5_PPM_420M_ISLOW_3_4 = 3e726b7ea872445b19437d1c1d4f0d93
|
||||||
|
MD5_PPM_420M_ISLOW_5_8 = a8a771abdc94301d20ffac119b2caccd
|
||||||
|
MD5_PPM_420M_ISLOW_1_2 = b419124dd5568b085787234866102866
|
||||||
|
MD5_PPM_420M_ISLOW_3_8 = 343d19015531b7bbe746124127244fa8
|
||||||
|
MD5_PPM_420M_ISLOW_1_4 = 35fd59d866e44659edfa3c18db2a3edb
|
||||||
|
MD5_PPM_420M_ISLOW_1_8 = ccaed48ac0aedefda5d4abe4013f4ad7
|
||||||
|
MD5_PPM_420_ISLOW_SKIP15_31 = 86664cd9dc956536409e44e244d20a97
|
||||||
|
MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 = 452a21656115a163029cfba5c04fa76a
|
||||||
|
MD5_PPM_444_ISLOW_SKIP1_6 = ef63901f71ef7a75cd78253fc0914f84
|
||||||
|
MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 = 15b173fb5872d9575572fbcc1b05956f
|
||||||
|
MD5_JPEG_CROP = cdb35ff4b4519392690ea040c56ea99c
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
TESTORIG = testorig.jpg
|
||||||
|
MD5_JPEG_RGB_ISLOW = 768e970dd57b340ff1b83c9d3d47c77b
|
||||||
|
MD5_PPM_RGB_ISLOW = 00a257f5393fef8821f2b88ac7421291
|
||||||
|
MD5_BMP_RGB_ISLOW_565 = f07d2e75073e4bb10f6c6f4d36e2e3be
|
||||||
|
MD5_BMP_RGB_ISLOW_565D = 4cfa0928ef3e6bb626d7728c924cfda4
|
||||||
|
MD5_JPEG_422_IFAST_OPT = 2540287b79d913f91665e660303ab2c8
|
||||||
|
MD5_PPM_422_IFAST = 35bd6b3f833bad23de82acea847129fa
|
||||||
|
MD5_PPM_422M_IFAST = 8dbc65323d62cca7c91ba02dd1cfa81d
|
||||||
|
MD5_BMP_422M_IFAST_565 = 3294bd4d9a1f2b3d08ea6020d0db7065
|
||||||
|
MD5_BMP_422M_IFAST_565D = da98c9c7b6039511be4a79a878a9abc1
|
||||||
|
MD5_JPEG_420_IFAST_Q100_PROG = 990cbe0329c882420a2094da7e5adade
|
||||||
|
MD5_PPM_420_Q100_IFAST = 5a732542015c278ff43635e473a8a294
|
||||||
|
MD5_PPM_420M_Q100_IFAST = ff692ee9323a3b424894862557c092f1
|
||||||
|
MD5_JPEG_GRAY_ISLOW = 72b51f894b8f4a10b3ee3066770aa38d
|
||||||
|
MD5_PPM_GRAY_ISLOW = 8d3596c56eace32f205deccc229aa5ed
|
||||||
|
MD5_PPM_GRAY_ISLOW_RGB = 116424ac07b79e5e801f00508eab48ec
|
||||||
|
MD5_BMP_GRAY_ISLOW_565 = 12f78118e56a2f48b966f792fedf23cc
|
||||||
|
MD5_BMP_GRAY_ISLOW_565D = bdbbd616441a24354c98553df5dc82db
|
||||||
|
MD5_JPEG_420S_IFAST_OPT = 388708217ac46273ca33086b22827ed8
|
||||||
|
# See README.md for more details on why this next bit is necessary.
|
||||||
|
MD5_JPEG_3x2_FLOAT_PROG_SSE = 343e3f8caf8af5986ebaf0bdc13b5c71
|
||||||
|
MD5_PPM_3x2_FLOAT_SSE = 1a75f36e5904d6fc3a85a43da9ad89bb
|
||||||
|
MD5_JPEG_3x2_FLOAT_PROG_32BIT = 9bca803d2042bd1eb03819e2bf92b3e5
|
||||||
|
MD5_PPM_3x2_FLOAT_32BIT = f6bfab038438ed8f5522fbd33595dcdc
|
||||||
|
MD5_PPM_3x2_FLOAT_64BIT = 0e917a34193ef976b679a6b069b1be26
|
||||||
|
MD5_JPEG_3x2_FLOAT_PROG_387 = 1657664a410e0822c924b54f6f65e6e9
|
||||||
|
MD5_PPM_3x2_FLOAT_387 = cb0a1f027f3d2917c902b5640214e025
|
||||||
|
MD5_JPEG_3x2_IFAST_PROG = 1ee5d2c1a77f2da495f993c8c7cceca5
|
||||||
|
MD5_PPM_3x2_IFAST = fd283664b3b49127984af0a7f118fccd
|
||||||
|
MD5_JPEG_420_ISLOW_ARI = e986fb0a637a8d833d96e8a6d6d84ea1
|
||||||
|
MD5_JPEG_444_ISLOW_PROGARI = 0a8f1c8f66e113c3cf635df0a475a617
|
||||||
|
MD5_PPM_420M_IFAST_ARI = 72b59a99bcf1de24c5b27d151bde2437
|
||||||
|
MD5_JPEG_420_ISLOW = 9a68f56bc76e466aa7e52f415d0f4a5f
|
||||||
|
MD5_PPM_420M_ISLOW_2_1 = 9f9de8c0612f8d06869b960b05abf9c9
|
||||||
|
MD5_PPM_420M_ISLOW_15_8 = b6875bc070720b899566cc06459b63b7
|
||||||
|
MD5_PPM_420M_ISLOW_13_8 = bc3452573c8152f6ae552939ee19f82f
|
||||||
|
MD5_PPM_420M_ISLOW_11_8 = d8cc73c0aaacd4556569b59437ba00a5
|
||||||
|
MD5_PPM_420M_ISLOW_9_8 = d25e61bc7eac0002f5b393aa223747b6
|
||||||
|
MD5_PPM_420M_ISLOW_7_8 = ddb564b7c74a09494016d6cd7502a946
|
||||||
|
MD5_PPM_420M_ISLOW_3_4 = 8ed8e68808c3fbc4ea764fc9d2968646
|
||||||
|
MD5_PPM_420M_ISLOW_5_8 = a3363274999da2366a024efae6d16c9b
|
||||||
|
MD5_PPM_420M_ISLOW_1_2 = e692a315cea26b988c8e8b29a5dbcd81
|
||||||
|
MD5_PPM_420M_ISLOW_3_8 = 79eca9175652ced755155c90e785a996
|
||||||
|
MD5_PPM_420M_ISLOW_1_4 = 79cd778f8bf1a117690052cacdd54eca
|
||||||
|
MD5_PPM_420M_ISLOW_1_8 = 391b3d4aca640c8567d6f8745eb2142f
|
||||||
|
MD5_BMP_420_ISLOW_256 = 4980185e3776e89bd931736e1cddeee6
|
||||||
|
MD5_BMP_420_ISLOW_565 = bf9d13e16c4923b92e1faa604d7922cb
|
||||||
|
MD5_BMP_420_ISLOW_565D = 6bde71526acc44bcff76f696df8638d2
|
||||||
|
MD5_BMP_420M_ISLOW_565 = 8dc0185245353cfa32ad97027342216f
|
||||||
|
MD5_BMP_420M_ISLOW_565D =d1be3a3339166255e76fa50a0d70d73e
|
||||||
|
MD5_PPM_420_ISLOW_SKIP15_31 = c4c65c1e43d7275cd50328a61e6534f0
|
||||||
|
MD5_PPM_420_ISLOW_ARI_SKIP16_139 = 087c6b123db16ac00cb88c5b590bb74a
|
||||||
|
MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 = 26eb36ccc7d1f0cb80cdabb0ac8b5d99
|
||||||
|
MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4 = 886c6775af22370257122f8b16207e6d
|
||||||
|
MD5_PPM_444_ISLOW_SKIP1_6 = 5606f86874cf26b8fcee1117a0a436a6
|
||||||
|
MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 = db87dc7ce26bcdc7a6b56239ce2b9d6c
|
||||||
|
MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0 = cb57b32bd6d03e35432362f7bf184b6d
|
||||||
MD5_JPEG_CROP = b4197f377e621c4e9b1d20471432610d
|
MD5_JPEG_CROP = b4197f377e621c4e9b1d20471432610d
|
||||||
|
|
||||||
test: testclean all
|
endif
|
||||||
|
|
||||||
|
.PHONY: test
|
||||||
|
test: tjquicktest tjbittest bittest
|
||||||
|
|
||||||
|
if CROSS_COMPILING
|
||||||
|
tjquicktest: testclean
|
||||||
|
else
|
||||||
|
tjquicktest: testclean all
|
||||||
|
endif
|
||||||
|
|
||||||
if WITH_TURBOJPEG
|
if WITH_TURBOJPEG
|
||||||
if WITH_JAVA
|
if WITH_JAVA
|
||||||
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest
|
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest
|
||||||
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -bi
|
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -bi
|
||||||
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv
|
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv
|
||||||
|
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv -noyuvpad
|
||||||
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv -bi
|
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv -bi
|
||||||
|
$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv -bi -noyuvpad
|
||||||
endif
|
endif
|
||||||
./tjunittest
|
./tjunittest
|
||||||
./tjunittest -alloc
|
./tjunittest -alloc
|
||||||
./tjunittest -yuv
|
./tjunittest -yuv
|
||||||
|
./tjunittest -yuv -alloc
|
||||||
|
./tjunittest -yuv -noyuvpad
|
||||||
endif
|
endif
|
||||||
./cjpeg -dct int -outfile testoutint.jpg $(srcdir)/testimages/testorig.ppm
|
echo GREAT SUCCESS!
|
||||||
md5/md5cmp $(MD5_JPEG_INT) testoutint.jpg
|
|
||||||
./cjpeg -dct fast -opt -outfile testoutfst.jpg $(srcdir)/testimages/testorig.ppm
|
if CROSS_COMPILING
|
||||||
md5/md5cmp $(MD5_JPEG_FAST) testoutfst.jpg
|
tjbittest: testclean
|
||||||
./cjpeg -dct fast -quality 100 -opt -outfile testoutfst100.jpg $(srcdir)/testimages/testorig.ppm
|
|
||||||
md5/md5cmp $(MD5_JPEG_FAST_100) testoutfst100.jpg
|
|
||||||
./cjpeg -dct float -outfile testoutflt.jpg $(srcdir)/testimages/testorig.ppm
|
|
||||||
if WITH_SSE_FLOAT_DCT
|
|
||||||
md5/md5cmp $(MD5_JPEG_FLOAT) testoutflt.jpg
|
|
||||||
else
|
else
|
||||||
md5/md5cmp $(MD5_JPEG_FLOAT_NOSIMD) testoutflt.jpg
|
tjbittest: testclean all
|
||||||
endif
|
endif
|
||||||
./cjpeg -dct int -grayscale -outfile testoutgray.jpg $(srcdir)/testimages/testorig.ppm
|
|
||||||
md5/md5cmp $(MD5_JPEG_INT_GRAY) testoutgray.jpg
|
if WITH_TURBOJPEG
|
||||||
./djpeg -dct int -fast -ppm -outfile testoutint.ppm $(srcdir)/testimages/testorig.jpg
|
|
||||||
md5/md5cmp $(MD5_PPM_INT) testoutint.ppm
|
MD5_PPM_GRAY_TILE = 89d3ca21213d9d864b50b4e4e7de4ca6
|
||||||
./djpeg -dct fast -ppm -outfile testoutfst.ppm $(srcdir)/testimages/testorig.jpg
|
MD5_PPM_420_8x8_TILE = 847fceab15c5b7b911cb986cf0f71de3
|
||||||
md5/md5cmp $(MD5_PPM_FAST) testoutfst.ppm
|
MD5_PPM_420_16x16_TILE = ca45552a93687e078f7137cc4126a7b0
|
||||||
./djpeg -dct float -ppm -outfile testoutflt.ppm $(srcdir)/testimages/testorig.jpg
|
MD5_PPM_420_32x32_TILE = d8676f1d6b68df358353bba9844f4a00
|
||||||
if WITH_SSE_FLOAT_DCT
|
MD5_PPM_420_64x64_TILE = 4e4c1a3d7ea4bace4f868bcbe83b7050
|
||||||
md5/md5cmp $(MD5_PPM_FLOAT) testoutflt.ppm
|
MD5_PPM_420_128x128_TILE = f24c3429c52265832beab9df72a0ceae
|
||||||
|
MD5_PPM_420M_8x8_TILE = bc25320e1f4c31ce2e610e43e9fd173c
|
||||||
|
MD5_PPM_420M_TILE = 75ffdf14602258c5c189522af57fa605
|
||||||
|
MD5_PPM_422_8x8_TILE = d83dacd9fc73b0a6f10c09acad64eb1e
|
||||||
|
MD5_PPM_422_16x16_TILE = 35077fb610d72dd743b1eb0cbcfe10fb
|
||||||
|
MD5_PPM_422_32x32_TILE = e6902ed8a449ecc0f0d6f2bf945f65f7
|
||||||
|
MD5_PPM_422_64x64_TILE = 2b4502a8f316cedbde1da7bce3d2231e
|
||||||
|
MD5_PPM_422_128x128_TILE = f0b5617d578f5e13c8eee215d64d4877
|
||||||
|
MD5_PPM_422M_8x8_TILE = 828941d7f41cd6283abd6beffb7fd51d
|
||||||
|
MD5_PPM_422M_TILE = e877ae1324c4a280b95376f7f018172f
|
||||||
|
MD5_PPM_444_TILE = 7964e41e67cfb8d0a587c0aa4798f9c3
|
||||||
|
|
||||||
|
# Test compressing from/decompressing to an arbitrary subregion of a larger
|
||||||
|
# image buffer
|
||||||
|
cp $(srcdir)/testimages/testorig.ppm testout_tile.ppm
|
||||||
|
./tjbench testout_tile.ppm 95 -rgb -quiet -tile -benchtime 0.01 -warmup 0 >/dev/null 2>&1
|
||||||
|
for i in 8 16 32 64 128; do \
|
||||||
|
md5/md5cmp $(MD5_PPM_GRAY_TILE) testout_tile_GRAY_Q95_$$i\x$$i.ppm; \
|
||||||
|
done
|
||||||
|
md5/md5cmp $(MD5_PPM_420_8x8_TILE) testout_tile_420_Q95_8x8.ppm
|
||||||
|
md5/md5cmp $(MD5_PPM_420_16x16_TILE) testout_tile_420_Q95_16x16.ppm
|
||||||
|
md5/md5cmp $(MD5_PPM_420_32x32_TILE) testout_tile_420_Q95_32x32.ppm
|
||||||
|
md5/md5cmp $(MD5_PPM_420_64x64_TILE) testout_tile_420_Q95_64x64.ppm
|
||||||
|
md5/md5cmp $(MD5_PPM_420_128x128_TILE) testout_tile_420_Q95_128x128.ppm
|
||||||
|
md5/md5cmp $(MD5_PPM_422_8x8_TILE) testout_tile_422_Q95_8x8.ppm
|
||||||
|
md5/md5cmp $(MD5_PPM_422_16x16_TILE) testout_tile_422_Q95_16x16.ppm
|
||||||
|
md5/md5cmp $(MD5_PPM_422_32x32_TILE) testout_tile_422_Q95_32x32.ppm
|
||||||
|
md5/md5cmp $(MD5_PPM_422_64x64_TILE) testout_tile_422_Q95_64x64.ppm
|
||||||
|
md5/md5cmp $(MD5_PPM_422_128x128_TILE) testout_tile_422_Q95_128x128.ppm
|
||||||
|
for i in 8 16 32 64 128; do \
|
||||||
|
md5/md5cmp $(MD5_PPM_444_TILE) testout_tile_444_Q95_$$i\x$$i.ppm; \
|
||||||
|
done
|
||||||
|
rm -f testout_tile_GRAY_* testout_tile_420_* testout_tile_422_* testout_tile_444_*
|
||||||
|
|
||||||
|
./tjbench testout_tile.ppm 95 -rgb -fastupsample -quiet -tile -benchtime 0.01 -warmup 0 >/dev/null 2>&1
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_8x8_TILE) testout_tile_420_Q95_8x8.ppm
|
||||||
|
for i in 16 32 64 128; do \
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_TILE) testout_tile_420_Q95_$$i\x$$i.ppm; \
|
||||||
|
done
|
||||||
|
md5/md5cmp $(MD5_PPM_422M_8x8_TILE) testout_tile_422_Q95_8x8.ppm
|
||||||
|
for i in 16 32 64 128; do \
|
||||||
|
md5/md5cmp $(MD5_PPM_422M_TILE) testout_tile_422_Q95_$$i\x$$i.ppm; \
|
||||||
|
done
|
||||||
|
rm -f testout_tile_GRAY_* testout_tile_420_* testout_tile_422_* testout_tile_444_* testout_tile.ppm
|
||||||
|
echo GREAT SUCCESS!
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
if CROSS_COMPILING
|
||||||
|
bittest: testclean
|
||||||
else
|
else
|
||||||
md5/md5cmp $(MD5_PPM_FLOAT_NOSIMD) testoutflt.ppm
|
bittest: testclean all
|
||||||
endif
|
endif
|
||||||
./djpeg -dct int -nosmooth -scale 2/1 -ppm -outfile testoutint2_1.ppm $(srcdir)/testimages/testorig.jpg;
|
|
||||||
md5/md5cmp $(MD5_PPM_INT_2_1) testoutint2_1.ppm;
|
# These tests are carefully crafted to provide full coverage of as many of the
|
||||||
./djpeg -dct int -nosmooth -scale 15/8 -ppm -outfile testoutint15_8.ppm $(srcdir)/testimages/testorig.jpg;
|
# underlying algorithms as possible (including all of the SIMD-accelerated
|
||||||
md5/md5cmp $(MD5_PPM_INT_15_8) testoutint15_8.ppm;
|
# ones.)
|
||||||
./djpeg -dct int -nosmooth -scale 7/4 -ppm -outfile testoutint7_4.ppm $(srcdir)/testimages/testorig.jpg;
|
|
||||||
md5/md5cmp $(MD5_PPM_INT_7_4) testoutint7_4.ppm;
|
# CC: null SAMP: fullsize FDCT: islow ENT: huff
|
||||||
./djpeg -dct int -nosmooth -scale 13/8 -ppm -outfile testoutint13_8.ppm $(srcdir)/testimages/testorig.jpg;
|
./cjpeg -rgb -dct int -outfile testout_rgb_islow.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
md5/md5cmp $(MD5_PPM_INT_13_8) testoutint13_8.ppm;
|
md5/md5cmp $(MD5_JPEG_RGB_ISLOW) testout_rgb_islow.jpg
|
||||||
./djpeg -dct int -nosmooth -scale 3/2 -ppm -outfile testoutint3_2.ppm $(srcdir)/testimages/testorig.jpg;
|
# CC: null SAMP: fullsize IDCT: islow ENT: huff
|
||||||
md5/md5cmp $(MD5_PPM_INT_3_2) testoutint3_2.ppm;
|
./djpeg -dct int -ppm -outfile testout_rgb_islow.ppm testout_rgb_islow.jpg
|
||||||
./djpeg -dct int -nosmooth -scale 11/8 -ppm -outfile testoutint11_8.ppm $(srcdir)/testimages/testorig.jpg;
|
md5/md5cmp $(MD5_PPM_RGB_ISLOW) testout_rgb_islow.ppm
|
||||||
md5/md5cmp $(MD5_PPM_INT_11_8) testoutint11_8.ppm;
|
rm -f testout_rgb_islow.ppm
|
||||||
./djpeg -dct int -nosmooth -scale 5/4 -ppm -outfile testoutint5_4.ppm $(srcdir)/testimages/testorig.jpg;
|
if WITH_12BIT
|
||||||
md5/md5cmp $(MD5_PPM_INT_5_4) testoutint5_4.ppm;
|
rm -f testout_rgb_islow.jpg
|
||||||
./djpeg -dct int -nosmooth -scale 9/8 -ppm -outfile testoutint9_8.ppm $(srcdir)/testimages/testorig.jpg;
|
else
|
||||||
md5/md5cmp $(MD5_PPM_INT_9_8) testoutint9_8.ppm;
|
# CC: RGB->RGB565 SAMP: fullsize IDCT: islow ENT: huff
|
||||||
./djpeg -dct int -nosmooth -scale 7/8 -ppm -outfile testoutint7_8.ppm $(srcdir)/testimages/testorig.jpg;
|
./djpeg -dct int -rgb565 -dither none -bmp -outfile testout_rgb_islow_565.bmp testout_rgb_islow.jpg
|
||||||
md5/md5cmp $(MD5_PPM_INT_7_8) testoutint7_8.ppm;
|
md5/md5cmp $(MD5_BMP_RGB_ISLOW_565) testout_rgb_islow_565.bmp
|
||||||
./djpeg -dct int -nosmooth -scale 3/4 -ppm -outfile testoutint3_4.ppm $(srcdir)/testimages/testorig.jpg;
|
rm -f testout_rgb_islow_565.bmp
|
||||||
md5/md5cmp $(MD5_PPM_INT_3_4) testoutint3_4.ppm;
|
# CC: RGB->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff
|
||||||
./djpeg -dct int -nosmooth -scale 5/8 -ppm -outfile testoutint5_8.ppm $(srcdir)/testimages/testorig.jpg;
|
./djpeg -dct int -rgb565 -bmp -outfile testout_rgb_islow_565D.bmp testout_rgb_islow.jpg
|
||||||
md5/md5cmp $(MD5_PPM_INT_5_8) testoutint5_8.ppm;
|
md5/md5cmp $(MD5_BMP_RGB_ISLOW_565D) testout_rgb_islow_565D.bmp
|
||||||
./djpeg -dct int -nosmooth -scale 1/2 -ppm -outfile testoutint1_2.ppm $(srcdir)/testimages/testorig.jpg;
|
rm -f testout_rgb_islow_565D.bmp testout_rgb_islow.jpg
|
||||||
md5/md5cmp $(MD5_PPM_INT_1_2) testoutint1_2.ppm;
|
endif
|
||||||
./djpeg -dct int -nosmooth -scale 3/8 -ppm -outfile testoutint3_8.ppm $(srcdir)/testimages/testorig.jpg;
|
|
||||||
md5/md5cmp $(MD5_PPM_INT_3_8) testoutint3_8.ppm;
|
# CC: RGB->YCC SAMP: fullsize/h2v1 FDCT: ifast ENT: 2-pass huff
|
||||||
./djpeg -dct int -nosmooth -scale 1/4 -ppm -outfile testoutint1_4.ppm $(srcdir)/testimages/testorig.jpg;
|
./cjpeg -sample 2x1 -dct fast -opt -outfile testout_422_ifast_opt.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
md5/md5cmp $(MD5_PPM_INT_1_4) testoutint1_4.ppm;
|
md5/md5cmp $(MD5_JPEG_422_IFAST_OPT) testout_422_ifast_opt.jpg
|
||||||
./djpeg -dct int -nosmooth -scale 1/8 -ppm -outfile testoutint1_8.ppm $(srcdir)/testimages/testorig.jpg;
|
# CC: YCC->RGB SAMP: fullsize/h2v1 fancy IDCT: ifast ENT: huff
|
||||||
md5/md5cmp $(MD5_PPM_INT_1_8) testoutint1_8.ppm;
|
./djpeg -dct fast -outfile testout_422_ifast.ppm testout_422_ifast_opt.jpg
|
||||||
./djpeg -dct fast -scale 1/2 -ppm -outfile testoutfst1_2.ppm $(srcdir)/testimages/testorig.jpg
|
md5/md5cmp $(MD5_PPM_422_IFAST) testout_422_ifast.ppm
|
||||||
md5/md5cmp $(MD5_PPM_FAST_1_2) testoutfst1_2.ppm
|
rm -f testout_422_ifast.ppm
|
||||||
./djpeg -dct int -bmp -colors 256 -outfile testout.bmp $(srcdir)/testimages/testorig.jpg
|
# CC: YCC->RGB SAMP: h2v1 merged IDCT: ifast ENT: huff
|
||||||
md5/md5cmp $(MD5_BMP_256) testout.bmp
|
./djpeg -dct fast -nosmooth -outfile testout_422m_ifast.ppm testout_422_ifast_opt.jpg
|
||||||
|
md5/md5cmp $(MD5_PPM_422M_IFAST) testout_422m_ifast.ppm
|
||||||
|
rm -f testout_422m_ifast.ppm
|
||||||
|
if WITH_12BIT
|
||||||
|
rm -f testout_422_ifast_opt.jpg
|
||||||
|
else
|
||||||
|
# CC: YCC->RGB565 SAMP: h2v1 merged IDCT: ifast ENT: huff
|
||||||
|
./djpeg -dct int -nosmooth -rgb565 -dither none -bmp -outfile testout_422m_ifast_565.bmp testout_422_ifast_opt.jpg
|
||||||
|
md5/md5cmp $(MD5_BMP_422M_IFAST_565) testout_422m_ifast_565.bmp
|
||||||
|
rm -f testout_422m_ifast_565.bmp
|
||||||
|
# CC: YCC->RGB565 (dithered) SAMP: h2v1 merged IDCT: ifast ENT: huff
|
||||||
|
./djpeg -dct int -nosmooth -rgb565 -bmp -outfile testout_422m_ifast_565D.bmp testout_422_ifast_opt.jpg
|
||||||
|
md5/md5cmp $(MD5_BMP_422M_IFAST_565D) testout_422m_ifast_565D.bmp
|
||||||
|
rm -f testout_422m_ifast_565D.bmp testout_422_ifast_opt.jpg
|
||||||
|
endif
|
||||||
|
|
||||||
|
# CC: RGB->YCC SAMP: fullsize/h2v2 FDCT: ifast ENT: prog huff
|
||||||
|
./cjpeg -sample 2x2 -quality 100 -dct fast -prog -outfile testout_420_q100_ifast_prog.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
|
md5/md5cmp $(MD5_JPEG_420_IFAST_Q100_PROG) testout_420_q100_ifast_prog.jpg
|
||||||
|
# CC: YCC->RGB SAMP: fullsize/h2v2 fancy IDCT: ifast ENT: prog huff
|
||||||
|
./djpeg -dct fast -outfile testout_420_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
|
||||||
|
md5/md5cmp $(MD5_PPM_420_Q100_IFAST) testout_420_q100_ifast.ppm
|
||||||
|
rm -f testout_420_q100_ifast.ppm
|
||||||
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: ifast ENT: prog huff
|
||||||
|
./djpeg -dct fast -nosmooth -outfile testout_420m_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_Q100_IFAST) testout_420m_q100_ifast.ppm
|
||||||
|
rm -f testout_420m_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
|
||||||
|
|
||||||
|
# CC: RGB->Gray SAMP: fullsize FDCT: islow ENT: huff
|
||||||
|
./cjpeg -gray -dct int -outfile testout_gray_islow.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
|
md5/md5cmp $(MD5_JPEG_GRAY_ISLOW) testout_gray_islow.jpg
|
||||||
|
# CC: Gray->Gray SAMP: fullsize IDCT: islow ENT: huff
|
||||||
|
./djpeg -dct int -outfile testout_gray_islow.ppm testout_gray_islow.jpg
|
||||||
|
md5/md5cmp $(MD5_PPM_GRAY_ISLOW) testout_gray_islow.ppm
|
||||||
|
rm -f testout_gray_islow.ppm
|
||||||
|
# CC: Gray->RGB SAMP: fullsize IDCT: islow ENT: huff
|
||||||
|
./djpeg -dct int -rgb -outfile testout_gray_islow_rgb.ppm testout_gray_islow.jpg
|
||||||
|
md5/md5cmp $(MD5_PPM_GRAY_ISLOW_RGB) testout_gray_islow_rgb.ppm
|
||||||
|
rm -f testout_gray_islow_rgb.ppm
|
||||||
|
if WITH_12BIT
|
||||||
|
rm -f testout_gray_islow.jpg
|
||||||
|
else
|
||||||
|
# CC: Gray->RGB565 SAMP: fullsize IDCT: islow ENT: huff
|
||||||
|
./djpeg -dct int -rgb565 -dither none -bmp -outfile testout_gray_islow_565.bmp testout_gray_islow.jpg
|
||||||
|
md5/md5cmp $(MD5_BMP_GRAY_ISLOW_565) testout_gray_islow_565.bmp
|
||||||
|
rm -f testout_gray_islow_565.bmp
|
||||||
|
# CC: Gray->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff
|
||||||
|
./djpeg -dct int -rgb565 -bmp -outfile testout_gray_islow_565D.bmp testout_gray_islow.jpg
|
||||||
|
md5/md5cmp $(MD5_BMP_GRAY_ISLOW_565D) testout_gray_islow_565D.bmp
|
||||||
|
rm -f testout_gray_islow_565D.bmp testout_gray_islow.jpg
|
||||||
|
endif
|
||||||
|
|
||||||
|
# CC: RGB->YCC SAMP: fullsize smooth/h2v2 smooth FDCT: islow
|
||||||
|
# ENT: 2-pass huff
|
||||||
|
./cjpeg -sample 2x2 -smooth 1 -dct int -opt -outfile testout_420s_ifast_opt.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
|
md5/md5cmp $(MD5_JPEG_420S_IFAST_OPT) testout_420s_ifast_opt.jpg
|
||||||
|
rm -f testout_420s_ifast_opt.jpg
|
||||||
|
|
||||||
|
# The output of the floating point tests is not validated by default, because
|
||||||
|
# the output differs depending on the type of floating point math used, and
|
||||||
|
# this is only deterministic if the DCT/IDCT are implemented using SIMD
|
||||||
|
# instructions on a particular platform. Pass one of the following on the make
|
||||||
|
# command line to validate the floating point tests against one of the expected
|
||||||
|
# results:
|
||||||
|
#
|
||||||
|
# FLOATTEST=sse validate against the expected results from the libjpeg-turbo
|
||||||
|
# SSE SIMD extensions
|
||||||
|
# FLOATTEST=32bit validate against the expected results from the C code
|
||||||
|
# when running on a 32-bit FPU (or when SSE is being used for
|
||||||
|
# floating point math, which is generally the default with
|
||||||
|
# x86-64 compilers)
|
||||||
|
# FLOATTEST=64bit validate against the exepected results from the C code
|
||||||
|
# when running on a 64-bit FPU
|
||||||
|
# FLOATTEST=387 validate against the expected results from the C code when
|
||||||
|
# the 387 FPU is being used for floating point math (which is
|
||||||
|
# generally the default with x86 compilers)
|
||||||
|
|
||||||
|
# CC: RGB->YCC SAMP: fullsize/int FDCT: float ENT: prog huff
|
||||||
|
./cjpeg -sample 3x2 -dct float -prog -outfile testout_3x2_float_prog.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
|
if [ "${FLOATTEST}" = "sse" ]; then \
|
||||||
|
md5/md5cmp $(MD5_JPEG_3x2_FLOAT_PROG_SSE) testout_3x2_float_prog.jpg; \
|
||||||
|
elif [ "${FLOATTEST}" = "32bit" -o "${FLOATTEST}" = "64bit" ]; then \
|
||||||
|
md5/md5cmp $(MD5_JPEG_3x2_FLOAT_PROG_32BIT) testout_3x2_float_prog.jpg; \
|
||||||
|
elif [ "${FLOATTEST}" = "387" ]; then \
|
||||||
|
md5/md5cmp $(MD5_JPEG_3x2_FLOAT_PROG_387) testout_3x2_float_prog.jpg; \
|
||||||
|
fi
|
||||||
|
# CC: YCC->RGB SAMP: fullsize/int IDCT: float ENT: prog huff
|
||||||
|
./djpeg -dct float -outfile testout_3x2_float.ppm testout_3x2_float_prog.jpg
|
||||||
|
if [ "${FLOATTEST}" = "sse" ]; then \
|
||||||
|
md5/md5cmp $(MD5_PPM_3x2_FLOAT_SSE) testout_3x2_float.ppm; \
|
||||||
|
elif [ "${FLOATTEST}" = "32bit" ]; then \
|
||||||
|
md5/md5cmp $(MD5_PPM_3x2_FLOAT_32BIT) testout_3x2_float.ppm; \
|
||||||
|
elif [ "${FLOATTEST}" = "64bit" ]; then \
|
||||||
|
md5/md5cmp $(MD5_PPM_3x2_FLOAT_64BIT) testout_3x2_float.ppm; \
|
||||||
|
elif [ "${FLOATTEST}" = "387" ]; then \
|
||||||
|
md5/md5cmp $(MD5_PPM_3x2_FLOAT_387) testout_3x2_float.ppm; \
|
||||||
|
fi
|
||||||
|
rm -f testout_3x2_float.ppm testout_3x2_float_prog.jpg
|
||||||
|
|
||||||
|
# CC: RGB->YCC SAMP: fullsize/int FDCT: ifast ENT: prog huff
|
||||||
|
./cjpeg -sample 3x2 -dct fast -prog -outfile testout_3x2_ifast_prog.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
|
md5/md5cmp $(MD5_JPEG_3x2_IFAST_PROG) testout_3x2_ifast_prog.jpg
|
||||||
|
# CC: YCC->RGB SAMP: fullsize/int IDCT: ifast ENT: prog huff
|
||||||
|
./djpeg -dct fast -outfile testout_3x2_ifast.ppm testout_3x2_ifast_prog.jpg
|
||||||
|
md5/md5cmp $(MD5_PPM_3x2_IFAST) testout_3x2_ifast.ppm
|
||||||
|
rm -f testout_3x2_ifast.ppm testout_3x2_ifast_prog.jpg
|
||||||
|
|
||||||
if WITH_ARITH_ENC
|
if WITH_ARITH_ENC
|
||||||
./cjpeg -dct int -arithmetic -outfile testoutari.jpg $(srcdir)/testimages/testorig.ppm
|
# CC: YCC->RGB SAMP: fullsize/h2v2 FDCT: islow ENT: arith
|
||||||
md5/md5cmp $(MD5_JPEG_ARI) testoutari.jpg
|
./cjpeg -dct int -arithmetic -outfile testout_420_islow_ari.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
./jpegtran -arithmetic -outfile testouta.jpg $(srcdir)/testimages/testimgint.jpg
|
md5/md5cmp $(MD5_JPEG_420_ISLOW_ARI) testout_420_islow_ari.jpg
|
||||||
md5/md5cmp $(MD5_JPEG_ARI) testouta.jpg
|
rm -f testout_420_islow_ari.jpg
|
||||||
|
./jpegtran -arithmetic -outfile testout_420_islow_ari.jpg $(srcdir)/testimages/testimgint.jpg
|
||||||
|
md5/md5cmp $(MD5_JPEG_420_ISLOW_ARI) testout_420_islow_ari.jpg
|
||||||
|
rm -f testout_420_islow_ari.jpg
|
||||||
|
# CC: YCC->RGB SAMP: fullsize FDCT: islow ENT: prog arith
|
||||||
|
./cjpeg -sample 1x1 -dct int -prog -arithmetic -outfile testout_444_islow_progari.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
|
md5/md5cmp $(MD5_JPEG_444_ISLOW_PROGARI) testout_444_islow_progari.jpg
|
||||||
|
rm -f testout_444_islow_progari.jpg
|
||||||
endif
|
endif
|
||||||
if WITH_ARITH_DEC
|
if WITH_ARITH_DEC
|
||||||
./djpeg -dct int -fast -ppm -outfile testoutari.ppm $(srcdir)/testimages/testimgari.jpg
|
# CC: RGB->YCC SAMP: h2v2 merged IDCT: ifast ENT: arith
|
||||||
md5/md5cmp $(MD5_PPM_ARI) testoutari.ppm
|
./djpeg -fast -ppm -outfile testout_420m_ifast_ari.ppm $(srcdir)/testimages/testimgari.jpg
|
||||||
./jpegtran -outfile testouta.jpg $(srcdir)/testimages/testimgari.jpg
|
md5/md5cmp $(MD5_PPM_420M_IFAST_ARI) testout_420m_ifast_ari.ppm
|
||||||
md5/md5cmp $(MD5_JPEG_INT) testouta.jpg
|
rm -f testout_420m_ifast_ari.ppm
|
||||||
|
./jpegtran -outfile testout_420_islow.jpg $(srcdir)/testimages/testimgari.jpg
|
||||||
|
md5/md5cmp $(MD5_JPEG_420_ISLOW) testout_420_islow.jpg
|
||||||
|
rm -f testout_420_islow.jpg
|
||||||
endif
|
endif
|
||||||
./cjpeg -dct int -progressive -outfile testoutp.jpg $(srcdir)/testimages/testorig.ppm
|
|
||||||
md5/md5cmp $(MD5_JPEG_PROG) testoutp.jpg
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 16x16 islow ENT: huff
|
||||||
./jpegtran -outfile testoutt.jpg testoutp.jpg
|
./djpeg -dct int -scale 2/1 -nosmooth -ppm -outfile testout_420m_islow_2_1.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
md5/md5cmp $(MD5_JPEG_INT) testoutt.jpg
|
md5/md5cmp $(MD5_PPM_420M_ISLOW_2_1) testout_420m_islow_2_1.ppm
|
||||||
./jpegtran -crop 120x90+20+50 -transpose -perfect -outfile testoutcrop.jpg $(srcdir)/testimages/testorig.jpg
|
rm -f testout_420m_islow_2_1.ppm
|
||||||
md5/md5cmp $(MD5_JPEG_CROP) testoutcrop.jpg
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 15x15 islow ENT: huff
|
||||||
|
./djpeg -dct int -scale 15/8 -nosmooth -ppm -outfile testout_420m_islow_15_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_ISLOW_15_8) testout_420m_islow_15_8.ppm
|
||||||
|
rm -f testout_420m_islow_15_8.ppm
|
||||||
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 13x13 islow ENT: huff
|
||||||
|
./djpeg -dct int -scale 13/8 -nosmooth -ppm -outfile testout_420m_islow_13_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_ISLOW_13_8) testout_420m_islow_13_8.ppm
|
||||||
|
rm -f testout_420m_islow_13_8.ppm
|
||||||
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 11x11 islow ENT: huff
|
||||||
|
./djpeg -dct int -scale 11/8 -nosmooth -ppm -outfile testout_420m_islow_11_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_ISLOW_11_8) testout_420m_islow_11_8.ppm
|
||||||
|
rm -f testout_420m_islow_11_8.ppm
|
||||||
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 9x9 islow ENT: huff
|
||||||
|
./djpeg -dct int -scale 9/8 -nosmooth -ppm -outfile testout_420m_islow_9_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_ISLOW_9_8) testout_420m_islow_9_8.ppm
|
||||||
|
rm -f testout_420m_islow_9_8.ppm
|
||||||
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 7x7 islow/14x14 islow ENT: huff
|
||||||
|
./djpeg -dct int -scale 7/8 -nosmooth -ppm -outfile testout_420m_islow_7_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_ISLOW_7_8) testout_420m_islow_7_8.ppm
|
||||||
|
rm -f testout_420m_islow_7_8.ppm
|
||||||
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 6x6 islow/12x12 islow ENT: huff
|
||||||
|
./djpeg -dct int -scale 3/4 -nosmooth -ppm -outfile testout_420m_islow_3_4.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_ISLOW_3_4) testout_420m_islow_3_4.ppm
|
||||||
|
rm -f testout_420m_islow_3_4.ppm
|
||||||
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 5x5 islow/10x10 islow ENT: huff
|
||||||
|
./djpeg -dct int -scale 5/8 -nosmooth -ppm -outfile testout_420m_islow_5_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_ISLOW_5_8) testout_420m_islow_5_8.ppm
|
||||||
|
rm -f testout_420m_islow_5_8.ppm
|
||||||
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 4x4 islow/8x8 islow ENT: huff
|
||||||
|
./djpeg -dct int -scale 1/2 -nosmooth -ppm -outfile testout_420m_islow_1_2.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_ISLOW_1_2) testout_420m_islow_1_2.ppm
|
||||||
|
rm -f testout_420m_islow_1_2.ppm
|
||||||
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 3x3 islow/6x6 islow ENT: huff
|
||||||
|
./djpeg -dct int -scale 3/8 -nosmooth -ppm -outfile testout_420m_islow_3_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_ISLOW_3_8) testout_420m_islow_3_8.ppm
|
||||||
|
rm -f testout_420m_islow_3_8.ppm
|
||||||
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 2x2 islow/4x4 islow ENT: huff
|
||||||
|
./djpeg -dct int -scale 1/4 -nosmooth -ppm -outfile testout_420m_islow_1_4.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_ISLOW_1_4) testout_420m_islow_1_4.ppm
|
||||||
|
rm -f testout_420m_islow_1_4.ppm
|
||||||
|
# CC: YCC->RGB SAMP: h2v2 merged IDCT: 1x1 islow/2x2 islow ENT: huff
|
||||||
|
./djpeg -dct int -scale 1/8 -nosmooth -ppm -outfile testout_420m_islow_1_8.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_PPM_420M_ISLOW_1_8) testout_420m_islow_1_8.ppm
|
||||||
|
rm -f testout_420m_islow_1_8.ppm
|
||||||
|
if WITH_12BIT
|
||||||
|
else
|
||||||
|
# CC: YCC->RGB (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff
|
||||||
|
./djpeg -dct int -colors 256 -bmp -outfile testout_420_islow_256.bmp $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_BMP_420_ISLOW_256) testout_420_islow_256.bmp
|
||||||
|
rm -f testout_420_islow_256.bmp
|
||||||
|
# CC: YCC->RGB565 SAMP: h2v2 fancy IDCT: islow ENT: huff
|
||||||
|
./djpeg -dct int -rgb565 -dither none -bmp -outfile testout_420_islow_565.bmp $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_BMP_420_ISLOW_565) testout_420_islow_565.bmp
|
||||||
|
rm -f testout_420_islow_565.bmp
|
||||||
|
# CC: YCC->RGB565 (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff
|
||||||
|
./djpeg -dct int -rgb565 -bmp -outfile testout_420_islow_565D.bmp $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_BMP_420_ISLOW_565D) testout_420_islow_565D.bmp
|
||||||
|
rm -f testout_420_islow_565D.bmp
|
||||||
|
# CC: YCC->RGB565 SAMP: h2v2 merged IDCT: islow ENT: huff
|
||||||
|
./djpeg -dct int -nosmooth -rgb565 -dither none -bmp -outfile testout_420m_islow_565.bmp $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_BMP_420M_ISLOW_565) testout_420m_islow_565.bmp
|
||||||
|
rm -f testout_420m_islow_565.bmp
|
||||||
|
# CC: YCC->RGB565 (dithered) SAMP: h2v2 merged IDCT: islow ENT: huff
|
||||||
|
./djpeg -dct int -nosmooth -rgb565 -bmp -outfile testout_420m_islow_565D.bmp $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_BMP_420M_ISLOW_565D) testout_420m_islow_565D.bmp
|
||||||
|
rm -f testout_420m_islow_565D.bmp
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Partial decode tests. These tests are designed to cover all of the possible
|
||||||
|
# code paths in jpeg_skip_scanlines().
|
||||||
|
|
||||||
|
# Context rows: Yes Intra-iMCU row: Yes iMCU row prefetch: No ENT: huff
|
||||||
|
./djpeg -dct int -skip 15,31 -ppm -outfile testout_420_islow_skip15,31.ppm $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_PPM_420_ISLOW_SKIP15_31) testout_420_islow_skip15,31.ppm
|
||||||
|
rm -f testout_420_islow_skip15,31.ppm
|
||||||
|
# Context rows: Yes Intra-iMCU row: No iMCU row prefetch: Yes ENT: arith
|
||||||
|
if WITH_ARITH_DEC
|
||||||
|
./djpeg -dct int -skip 16,139 -ppm -outfile testout_420_islow_ari_skip16,139.ppm $(srcdir)/testimages/testimgari.jpg
|
||||||
|
md5/md5cmp $(MD5_PPM_420_ISLOW_ARI_SKIP16_139) testout_420_islow_ari_skip16,139.ppm
|
||||||
|
rm -f testout_420_islow_ari_skip16,139.ppm
|
||||||
|
endif
|
||||||
|
# Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: prog huff
|
||||||
|
./cjpeg -dct int -prog -outfile testout_420_islow_prog.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
|
./djpeg -dct int -crop 62x62+71+71 -ppm -outfile testout_420_islow_prog_crop62x62,71,71.ppm testout_420_islow_prog.jpg
|
||||||
|
md5/md5cmp $(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71) testout_420_islow_prog_crop62x62,71,71.ppm
|
||||||
|
rm -f testout_420_islow_prog_crop62x62,71,71.ppm testout_420_islow_prog.jpg
|
||||||
|
# Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: arith
|
||||||
|
if WITH_ARITH_DEC
|
||||||
|
./djpeg -dct int -crop 53x53+4+4 -ppm -outfile testout_420_islow_ari_crop53x53,4,4.ppm $(srcdir)/testimages/testimgari.jpg
|
||||||
|
md5/md5cmp $(MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4) testout_420_islow_ari_crop53x53,4,4.ppm
|
||||||
|
rm -f testout_420_islow_ari_crop53x53,4,4.ppm
|
||||||
|
endif
|
||||||
|
# Context rows: No Intra-iMCU row: Yes ENT: huff
|
||||||
|
./cjpeg -dct int -sample 1x1 -outfile testout_444_islow.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
|
./djpeg -dct int -skip 1,6 -ppm -outfile testout_444_islow_skip1,6.ppm testout_444_islow.jpg
|
||||||
|
md5/md5cmp $(MD5_PPM_444_ISLOW_SKIP1_6) testout_444_islow_skip1,6.ppm
|
||||||
|
rm -f testout_444_islow_skip1,6.ppm testout_444_islow.jpg
|
||||||
|
# Context rows: No Intra-iMCU row: No ENT: prog huff
|
||||||
|
./cjpeg -dct int -prog -sample 1x1 -outfile testout_444_islow_prog.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
|
./djpeg -dct int -crop 98x98+13+13 -ppm -outfile testout_444_islow_prog_crop98x98,13,13.ppm testout_444_islow_prog.jpg
|
||||||
|
md5/md5cmp $(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13) testout_444_islow_prog_crop98x98,13,13.ppm
|
||||||
|
rm -f testout_444_islow_prog_crop98x98,13,13.ppm testout_444_islow_prog.jpg
|
||||||
|
# Context rows: No Intra-iMCU row: No ENT: arith
|
||||||
|
if WITH_ARITH_ENC
|
||||||
|
./cjpeg -dct int -arithmetic -sample 1x1 -outfile testout_444_islow_ari.jpg $(srcdir)/testimages/testorig.ppm
|
||||||
|
if WITH_ARITH_DEC
|
||||||
|
./djpeg -dct int -crop 37x37+0+0 -ppm -outfile testout_444_islow_ari_crop37x37,0,0.ppm testout_444_islow_ari.jpg
|
||||||
|
md5/md5cmp $(MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0) testout_444_islow_ari_crop37x37,0,0.ppm
|
||||||
|
rm -f testout_444_islow_ari_crop37x37,0,0.ppm
|
||||||
|
endif
|
||||||
|
rm -f testout_444_islow_ari.jpg
|
||||||
|
endif
|
||||||
|
|
||||||
|
./jpegtran -crop 120x90+20+50 -transpose -perfect -outfile testout_crop.jpg $(srcdir)/testimages/$(TESTORIG)
|
||||||
|
md5/md5cmp $(MD5_JPEG_CROP) testout_crop.jpg
|
||||||
|
rm -f testout_crop.jpg
|
||||||
|
echo GREAT SUCCESS!
|
||||||
|
|
||||||
|
|
||||||
testclean:
|
testclean:
|
||||||
@@ -311,12 +692,23 @@ testclean:
|
|||||||
rm -f *_440_*.ppm
|
rm -f *_440_*.ppm
|
||||||
rm -f *_440_*.jpg
|
rm -f *_440_*.jpg
|
||||||
rm -f *_440.yuv
|
rm -f *_440.yuv
|
||||||
|
rm -f *_411_*.bmp
|
||||||
|
rm -f *_411_*.png
|
||||||
|
rm -f *_411_*.ppm
|
||||||
|
rm -f *_411_*.jpg
|
||||||
|
rm -f *_411.yuv
|
||||||
|
rm -f tjbenchtest*.log
|
||||||
|
rm -f tjexampletest*.log
|
||||||
|
|
||||||
|
|
||||||
tjtest:
|
tjtest:
|
||||||
sh ./tjbenchtest
|
sh ./tjbenchtest
|
||||||
|
sh ./tjbenchtest -alloc
|
||||||
|
sh ./tjbenchtest -yuv
|
||||||
|
sh ./tjbenchtest -yuv -alloc
|
||||||
if WITH_JAVA
|
if WITH_JAVA
|
||||||
sh ./tjbenchtest.java
|
sh ./tjbenchtest.java
|
||||||
|
sh ./tjbenchtest.java -yuv
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
@@ -381,12 +773,12 @@ udmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
|||||||
sh pkgscripts/makemacpkg -build32 ${BUILDDIR32}
|
sh pkgscripts/makemacpkg -build32 ${BUILDDIR32}
|
||||||
|
|
||||||
iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
||||||
sh pkgscripts/makemacpkg -build32 ${BUILDDIR32} -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S}
|
sh pkgscripts/makemacpkg -build32 ${BUILDDIR32} -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S} -buildarmv8 ${BUILDDIRARMV8} -lipo "${LIPO}"
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
|
||||||
sh pkgscripts/makemacpkg -buildarmv6 ${BUILDDIRARMV6} -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S}
|
sh pkgscripts/makemacpkg -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S} -buildarmv8 ${BUILDDIRARMV8} -lipo "${LIPO}"
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
475
README-turbo.txt
@@ -1,475 +0,0 @@
|
|||||||
*******************************************************************************
|
|
||||||
** Background
|
|
||||||
*******************************************************************************
|
|
||||||
|
|
||||||
libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2,
|
|
||||||
NEON) to accelerate baseline JPEG compression and decompression on x86, x86-64,
|
|
||||||
and ARM systems. On such systems, libjpeg-turbo is generally 2-4x as fast as
|
|
||||||
libjpeg, all else being equal. On other types of systems, libjpeg-turbo can
|
|
||||||
still outperform libjpeg by a significant amount, by virtue of its
|
|
||||||
highly-optimized Huffman coding routines. In many cases, the performance of
|
|
||||||
libjpeg-turbo rivals that of proprietary high-speed JPEG codecs.
|
|
||||||
|
|
||||||
libjpeg-turbo implements both the traditional libjpeg API as well as the less
|
|
||||||
powerful but more straightforward TurboJPEG API. libjpeg-turbo also features
|
|
||||||
colorspace extensions that allow it to compress from/decompress to 32-bit and
|
|
||||||
big-endian pixel buffers (RGBX, XBGR, etc.), as well as a full-featured Java
|
|
||||||
interface.
|
|
||||||
|
|
||||||
libjpeg-turbo was originally based on libjpeg/SIMD, an MMX-accelerated
|
|
||||||
derivative of libjpeg v6b developed by Miyasaka Masaru. The TigerVNC and
|
|
||||||
VirtualGL projects made numerous enhancements to the codec in 2009, and in
|
|
||||||
early 2010, libjpeg-turbo spun off into an independent project, with the goal
|
|
||||||
of making high-speed JPEG compression/decompression technology available to a
|
|
||||||
broader range of users and developers.
|
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************
|
|
||||||
** License
|
|
||||||
*******************************************************************************
|
|
||||||
|
|
||||||
Most of libjpeg-turbo inherits the non-restrictive, BSD-style license used by
|
|
||||||
libjpeg (see README.) The TurboJPEG wrapper (both C and Java versions) and
|
|
||||||
associated test programs bear a similar license, which is reproduced below:
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
- Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
- Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
- Neither the name of the libjpeg-turbo Project nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from this
|
|
||||||
software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************
|
|
||||||
** Using libjpeg-turbo
|
|
||||||
*******************************************************************************
|
|
||||||
|
|
||||||
libjpeg-turbo includes two APIs that can be used to compress and decompress
|
|
||||||
JPEG images:
|
|
||||||
|
|
||||||
TurboJPEG API: This API provides an easy-to-use interface for compressing
|
|
||||||
and decompressing JPEG images in memory. It also provides some functionality
|
|
||||||
that would not be straightforward to achieve using the underlying libjpeg
|
|
||||||
API, such as generating planar YUV images and performing multiple
|
|
||||||
simultaneous lossless transforms on an image. The Java interface for
|
|
||||||
libjpeg-turbo is written on top of the TurboJPEG API.
|
|
||||||
|
|
||||||
libjpeg API: This is the de facto industry-standard API for compressing and
|
|
||||||
decompressing JPEG images. It is more difficult to use than the TurboJPEG
|
|
||||||
API but also more powerful. The libjpeg API implementation in libjpeg-turbo
|
|
||||||
is both API/ABI-compatible and mathematically compatible with libjpeg v6b.
|
|
||||||
It can also optionally be configured to be API/ABI-compatible with libjpeg v7
|
|
||||||
and v8 (see below.)
|
|
||||||
|
|
||||||
There is no significant performance advantage to either API when both are used
|
|
||||||
to perform similar operations.
|
|
||||||
|
|
||||||
======================
|
|
||||||
Installation Directory
|
|
||||||
======================
|
|
||||||
|
|
||||||
This document assumes that libjpeg-turbo will be installed in the default
|
|
||||||
directory (/opt/libjpeg-turbo on Un*x and Mac systems and
|
|
||||||
c:\libjpeg-turbo[-gcc][64] on Windows systems. If your installation of
|
|
||||||
libjpeg-turbo resides in a different directory, then adjust the instructions
|
|
||||||
accordingly.
|
|
||||||
|
|
||||||
=============================
|
|
||||||
Replacing libjpeg at Run Time
|
|
||||||
=============================
|
|
||||||
|
|
||||||
Un*x
|
|
||||||
----
|
|
||||||
|
|
||||||
If a Un*x application is dynamically linked with libjpeg, then you can replace
|
|
||||||
libjpeg with libjpeg-turbo at run time by manipulating LD_LIBRARY_PATH.
|
|
||||||
For instance:
|
|
||||||
|
|
||||||
[Using libjpeg]
|
|
||||||
> time cjpeg <vgl_5674_0098.ppm >vgl_5674_0098.jpg
|
|
||||||
real 0m0.392s
|
|
||||||
user 0m0.074s
|
|
||||||
sys 0m0.020s
|
|
||||||
|
|
||||||
[Using libjpeg-turbo]
|
|
||||||
> export LD_LIBRARY_PATH=/opt/libjpeg-turbo/{lib}:$LD_LIBRARY_PATH
|
|
||||||
> time cjpeg <vgl_5674_0098.ppm >vgl_5674_0098.jpg
|
|
||||||
real 0m0.109s
|
|
||||||
user 0m0.029s
|
|
||||||
sys 0m0.010s
|
|
||||||
|
|
||||||
({lib} = lib32 or lib64, depending on whether you wish to use the 32-bit or the
|
|
||||||
64-bit version of libjpeg-turbo.)
|
|
||||||
|
|
||||||
System administrators can also replace the libjpeg symlinks in /usr/lib* with
|
|
||||||
links to the libjpeg-turbo dynamic library located in /opt/libjpeg-turbo/{lib}.
|
|
||||||
This will effectively accelerate every application that uses the libjpeg
|
|
||||||
dynamic library on the system.
|
|
||||||
|
|
||||||
Windows
|
|
||||||
-------
|
|
||||||
|
|
||||||
If a Windows application is dynamically linked with libjpeg, then you can
|
|
||||||
replace libjpeg with libjpeg-turbo at run time by backing up the application's
|
|
||||||
copy of jpeg62.dll, jpeg7.dll, or jpeg8.dll (assuming the application has its
|
|
||||||
own local copy of this library) and copying the corresponding DLL from
|
|
||||||
libjpeg-turbo into the application's install directory. The official
|
|
||||||
libjpeg-turbo binary packages only provide jpeg62.dll. If the application uses
|
|
||||||
jpeg7.dll or jpeg8.dll instead, then it will be necessary to build
|
|
||||||
libjpeg-turbo from source (see "libjpeg v7 and v8 API/ABI Emulation" below.)
|
|
||||||
|
|
||||||
The following information is specific to the official libjpeg-turbo binary
|
|
||||||
packages for Visual C++:
|
|
||||||
|
|
||||||
-- jpeg62.dll requires the Visual C++ 2008 C run-time DLL (msvcr90.dll).
|
|
||||||
msvcr90.dll ships with more recent versions of Windows, but users of older
|
|
||||||
Windows releases can obtain it from the Visual C++ 2008 Redistributable
|
|
||||||
Package, which is available as a free download from Microsoft's web site.
|
|
||||||
|
|
||||||
-- Features of the libjpeg API that require passing a C run-time structure,
|
|
||||||
such as a file handle, from an application to the library will probably not
|
|
||||||
work with jpeg62.dll, unless the application is also built to use the Visual
|
|
||||||
C++ 2008 C run-time DLL. In particular, this affects jpeg_stdio_dest() and
|
|
||||||
jpeg_stdio_src().
|
|
||||||
|
|
||||||
Mac
|
|
||||||
---
|
|
||||||
|
|
||||||
Mac applications typically embed their own copies of the libjpeg dylib inside
|
|
||||||
the (hidden) application bundle, so it is not possible to globally replace
|
|
||||||
libjpeg on OS X systems. Replacing the application's version of the libjpeg
|
|
||||||
dylib would generally involve copying libjpeg.*.dylib from libjpeg-turbo into
|
|
||||||
the appropriate place in the application bundle and using install_name_tool to
|
|
||||||
repoint the libjpeg-turbo dylib to its new directory. This requires an
|
|
||||||
advanced knowledge of OS X and would not survive an upgrade or a re-install of
|
|
||||||
the application. Thus, it is not recommended for most users.
|
|
||||||
|
|
||||||
========================================
|
|
||||||
Using libjpeg-turbo in Your Own Programs
|
|
||||||
========================================
|
|
||||||
|
|
||||||
For the most part, libjpeg-turbo should work identically to libjpeg, so in
|
|
||||||
most cases, an application can be built against libjpeg and then run against
|
|
||||||
libjpeg-turbo. On Un*x systems and Cygwin, you can build against libjpeg-turbo
|
|
||||||
instead of libjpeg by setting
|
|
||||||
|
|
||||||
CPATH=/opt/libjpeg-turbo/include
|
|
||||||
and
|
|
||||||
LIBRARY_PATH=/opt/libjpeg-turbo/{lib}
|
|
||||||
|
|
||||||
({lib} = lib32 or lib64, depending on whether you are building a 32-bit or a
|
|
||||||
64-bit application.)
|
|
||||||
|
|
||||||
If using MinGW, then set
|
|
||||||
|
|
||||||
CPATH=/c/libjpeg-turbo-gcc[64]/include
|
|
||||||
and
|
|
||||||
LIBRARY_PATH=/c/libjpeg-turbo-gcc[64]/lib
|
|
||||||
|
|
||||||
Building against libjpeg-turbo is useful, for instance, if you want to build an
|
|
||||||
application that leverages the libjpeg-turbo colorspace extensions (see below.)
|
|
||||||
On Un*x systems, you would still need to manipulate LD_LIBRARY_PATH or create
|
|
||||||
appropriate symlinks to use libjpeg-turbo at run time. On such systems, you
|
|
||||||
can pass -R /opt/libjpeg-turbo/{lib} to the linker to force the use of
|
|
||||||
libjpeg-turbo at run time rather than libjpeg (also useful if you want to
|
|
||||||
leverage the colorspace extensions), or you can link against the libjpeg-turbo
|
|
||||||
static library.
|
|
||||||
|
|
||||||
To force a Un*x or MinGW application to link against the static version of
|
|
||||||
libjpeg-turbo, you can use the following linker options:
|
|
||||||
|
|
||||||
-Wl,-Bstatic -ljpeg -Wl,-Bdynamic
|
|
||||||
|
|
||||||
On OS X, simply add /opt/libjpeg-turbo/lib/libjpeg.a to the linker command
|
|
||||||
line.
|
|
||||||
|
|
||||||
To build Visual C++ applications using libjpeg-turbo, add
|
|
||||||
c:\libjpeg-turbo[64]\include to the system or user INCLUDE environment
|
|
||||||
variable and c:\libjpeg-turbo[64]\lib to the system or user LIB environment
|
|
||||||
variable, and then link against either jpeg.lib (to use the DLL version of
|
|
||||||
libjpeg-turbo) or jpeg-static.lib (to use the static version of libjpeg-turbo.)
|
|
||||||
|
|
||||||
=====================
|
|
||||||
Colorspace Extensions
|
|
||||||
=====================
|
|
||||||
|
|
||||||
libjpeg-turbo includes extensions that allow JPEG images to be compressed
|
|
||||||
directly from (and decompressed directly to) buffers that use BGR, BGRX,
|
|
||||||
RGBX, XBGR, and XRGB pixel ordering. This is implemented with ten new
|
|
||||||
colorspace constants:
|
|
||||||
|
|
||||||
JCS_EXT_RGB /* red/green/blue */
|
|
||||||
JCS_EXT_RGBX /* red/green/blue/x */
|
|
||||||
JCS_EXT_BGR /* blue/green/red */
|
|
||||||
JCS_EXT_BGRX /* blue/green/red/x */
|
|
||||||
JCS_EXT_XBGR /* x/blue/green/red */
|
|
||||||
JCS_EXT_XRGB /* x/red/green/blue */
|
|
||||||
JCS_EXT_RGBA /* red/green/blue/alpha */
|
|
||||||
JCS_EXT_BGRA /* blue/green/red/alpha */
|
|
||||||
JCS_EXT_ABGR /* alpha/blue/green/red */
|
|
||||||
JCS_EXT_ARGB /* alpha/red/green/blue */
|
|
||||||
|
|
||||||
Setting cinfo.in_color_space (compression) or cinfo.out_color_space
|
|
||||||
(decompression) to one of these values will cause libjpeg-turbo to read the
|
|
||||||
red, green, and blue values from (or write them to) the appropriate position in
|
|
||||||
the pixel when compressing from/decompressing to an RGB buffer.
|
|
||||||
|
|
||||||
Your application can check for the existence of these extensions at compile
|
|
||||||
time with:
|
|
||||||
|
|
||||||
#ifdef JCS_EXTENSIONS
|
|
||||||
|
|
||||||
At run time, attempting to use these extensions with a libjpeg implementation
|
|
||||||
that does not support them will result in a "Bogus input colorspace" error.
|
|
||||||
Applications can trap this error in order to test whether run-time support is
|
|
||||||
available for the colorspace extensions.
|
|
||||||
|
|
||||||
When using the RGBX, BGRX, XBGR, and XRGB colorspaces during decompression, the
|
|
||||||
X byte is undefined, and in order to ensure the best performance, libjpeg-turbo
|
|
||||||
can set that byte to whatever value it wishes. If an application expects the X
|
|
||||||
byte to be used as an alpha channel, then it should specify JCS_EXT_RGBA,
|
|
||||||
JCS_EXT_BGRA, JCS_EXT_ABGR, or JCS_EXT_ARGB. When these colorspace constants
|
|
||||||
are used, the X byte is guaranteed to be 0xFF, which is interpreted as opaque.
|
|
||||||
|
|
||||||
Your application can check for the existence of the alpha channel colorspace
|
|
||||||
extensions at compile time with:
|
|
||||||
|
|
||||||
#ifdef JCS_ALPHA_EXTENSIONS
|
|
||||||
|
|
||||||
jcstest.c, located in the libjpeg-turbo source tree, demonstrates how to check
|
|
||||||
for the existence of the colorspace extensions at compile time and run time.
|
|
||||||
|
|
||||||
===================================
|
|
||||||
libjpeg v7 and v8 API/ABI Emulation
|
|
||||||
===================================
|
|
||||||
|
|
||||||
With libjpeg v7 and v8, new features were added that necessitated extending the
|
|
||||||
compression and decompression structures. Unfortunately, due to the exposed
|
|
||||||
nature of those structures, extending them also necessitated breaking backward
|
|
||||||
ABI compatibility with previous libjpeg releases. Thus, programs that were
|
|
||||||
built to use libjpeg v7 or v8 did not work with libjpeg-turbo, since it is
|
|
||||||
based on the libjpeg v6b code base. Although libjpeg v7 and v8 are still not
|
|
||||||
as widely used as v6b, enough programs (including a few Linux distros) made
|
|
||||||
the switch that there was a demand to emulate the libjpeg v7 and v8 ABIs
|
|
||||||
in libjpeg-turbo. It should be noted, however, that this feature was added
|
|
||||||
primarily so that applications that had already been compiled to use libjpeg
|
|
||||||
v7+ could take advantage of accelerated baseline JPEG encoding/decoding
|
|
||||||
without recompiling. libjpeg-turbo does not claim to support all of the
|
|
||||||
libjpeg v7+ features, nor to produce identical output to libjpeg v7+ in all
|
|
||||||
cases (see below.)
|
|
||||||
|
|
||||||
By passing an argument of --with-jpeg7 or --with-jpeg8 to configure, or an
|
|
||||||
argument of -DWITH_JPEG7=1 or -DWITH_JPEG8=1 to cmake, you can build a version
|
|
||||||
of libjpeg-turbo that emulates the libjpeg v7 or v8 ABI, so that programs
|
|
||||||
that are built against libjpeg v7 or v8 can be run with libjpeg-turbo. The
|
|
||||||
following section describes which libjpeg v7+ features are supported and which
|
|
||||||
aren't.
|
|
||||||
|
|
||||||
Support for libjpeg v7 and v8 Features:
|
|
||||||
---------------------------------------
|
|
||||||
|
|
||||||
Fully supported:
|
|
||||||
|
|
||||||
-- libjpeg: IDCT scaling extensions in decompressor
|
|
||||||
libjpeg-turbo supports IDCT scaling with scaling factors of 1/8, 1/4, 3/8,
|
|
||||||
1/2, 5/8, 3/4, 7/8, 9/8, 5/4, 11/8, 3/2, 13/8, 7/4, 15/8, and 2/1 (only 1/4
|
|
||||||
and 1/2 are SIMD-accelerated.)
|
|
||||||
|
|
||||||
-- libjpeg: arithmetic coding
|
|
||||||
|
|
||||||
-- libjpeg: In-memory source and destination managers
|
|
||||||
See notes below.
|
|
||||||
|
|
||||||
-- cjpeg: Separate quality settings for luminance and chrominance
|
|
||||||
Note that the libpjeg v7+ API was extended to accommodate this feature only
|
|
||||||
for convenience purposes. It has always been possible to implement this
|
|
||||||
feature with libjpeg v6b (see rdswitch.c for an example.)
|
|
||||||
|
|
||||||
-- cjpeg: 32-bit BMP support
|
|
||||||
|
|
||||||
-- cjpeg: -rgb option
|
|
||||||
|
|
||||||
-- jpegtran: lossless cropping
|
|
||||||
|
|
||||||
-- jpegtran: -perfect option
|
|
||||||
|
|
||||||
-- jpegtran: forcing width/height when performing lossless crop
|
|
||||||
|
|
||||||
-- rdjpgcom: -raw option
|
|
||||||
|
|
||||||
-- rdjpgcom: locale awareness
|
|
||||||
|
|
||||||
|
|
||||||
Not supported:
|
|
||||||
|
|
||||||
NOTE: As of this writing, extensive research has been conducted into the
|
|
||||||
usefulness of DCT scaling as a means of data reduction and SmartScale as a
|
|
||||||
means of quality improvement. The reader is invited to peruse the research at
|
|
||||||
http://www.libjpeg-turbo.org/About/SmartScale and draw his/her own conclusions,
|
|
||||||
but it is the general belief of our project that these features have not
|
|
||||||
demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
|
|
||||||
|
|
||||||
-- libjpeg: DCT scaling in compressor
|
|
||||||
cinfo.scale_num and cinfo.scale_denom are silently ignored.
|
|
||||||
There is no technical reason why DCT scaling could not be supported when
|
|
||||||
emulating the libjpeg v7+ API/ABI, but without the SmartScale extension (see
|
|
||||||
below), only scaling factors of 1/2, 8/15, 4/7, 8/13, 2/3, 8/11, 4/5, and
|
|
||||||
8/9 would be available, which is of limited usefulness.
|
|
||||||
|
|
||||||
-- libjpeg: SmartScale
|
|
||||||
cinfo.block_size is silently ignored.
|
|
||||||
SmartScale is an extension to the JPEG format that allows for DCT block
|
|
||||||
sizes other than 8x8. Providing support for this new format would be
|
|
||||||
feasible (particularly without full acceleration.) However, until/unless
|
|
||||||
the format becomes either an official industry standard or, at minimum, an
|
|
||||||
accepted solution in the community, we are hesitant to implement it, as
|
|
||||||
there is no sense of whether or how it might change in the future. It is
|
|
||||||
our belief that SmartScale has not demonstrated sufficient usefulness as a
|
|
||||||
lossless format nor as a means of quality enhancement, and thus, our primary
|
|
||||||
interest in providing this feature would be as a means of supporting
|
|
||||||
additional DCT scaling factors.
|
|
||||||
|
|
||||||
-- libjpeg: Fancy downsampling in compressor
|
|
||||||
cinfo.do_fancy_downsampling is silently ignored.
|
|
||||||
This requires the DCT scaling feature, which is not supported.
|
|
||||||
|
|
||||||
-- jpegtran: Scaling
|
|
||||||
This requires both the DCT scaling and SmartScale features, which are not
|
|
||||||
supported.
|
|
||||||
|
|
||||||
-- Lossless RGB JPEG files
|
|
||||||
This requires the SmartScale feature, which is not supported.
|
|
||||||
|
|
||||||
What About libjpeg v9?
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
libjpeg v9 introduced yet another field to the JPEG compression structure
|
|
||||||
(color_transform), thus making the ABI backward incompatible with that of
|
|
||||||
libjpeg v8. This new field was introduced solely for the purpose of supporting
|
|
||||||
lossless SmartScale encoding. Further, there was actually no reason to extend
|
|
||||||
the API in this manner, as the color transform could have just as easily been
|
|
||||||
activated by way of a new JPEG colorspace constant, thus preserving backward
|
|
||||||
ABI compatibility.
|
|
||||||
|
|
||||||
Our research (see link above) has shown that lossless SmartScale does not
|
|
||||||
generally accomplish anything that can't already be accomplished better with
|
|
||||||
existing, standard lossless formats. Thus, at this time, it is our belief that
|
|
||||||
there is not sufficient technical justification for software to upgrade from
|
|
||||||
libjpeg v8 to libjpeg v9, and therefore, not sufficient technical justification
|
|
||||||
for us to emulate the libjpeg v9 ABI.
|
|
||||||
|
|
||||||
=====================================
|
|
||||||
In-Memory Source/Destination Managers
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
By default, libjpeg-turbo 1.3 and later includes the jpeg_mem_src() and
|
|
||||||
jpeg_mem_dest() functions, even when not emulating the libjpeg v8 API/ABI.
|
|
||||||
Previously, it was necessary to build libjpeg-turbo from source with libjpeg v8
|
|
||||||
API/ABI emulation in order to use the in-memory source/destination managers,
|
|
||||||
but several projects requested that those functions be included when emulating
|
|
||||||
the libjpeg v6b API/ABI as well. This allows the use of those functions by
|
|
||||||
programs that need them without breaking ABI compatibility for programs that
|
|
||||||
don't, and it allows those functions to be provided in the "official"
|
|
||||||
libjpeg-turbo binaries.
|
|
||||||
|
|
||||||
Those who are concerned about maintaining strict conformance with the libjpeg
|
|
||||||
v6b or v7 API can pass an argument of --without-mem-srcdst to configure or
|
|
||||||
an argument of -DWITH_MEM_SRCDST=0 to CMake prior to building libjpeg-turbo.
|
|
||||||
This will restore the pre-1.3 behavior, in which jpeg_mem_src() and
|
|
||||||
jpeg_mem_dest() are only included when emulating the libjpeg v8 API/ABI.
|
|
||||||
|
|
||||||
On Un*x systems, including the in-memory source/destination managers changes
|
|
||||||
the dynamic library version from 62.0.0 to 62.1.0 if using libjpeg v6b API/ABI
|
|
||||||
emulation and from 7.0.0 to 7.1.0 if using libjpeg v7 API/ABI emulation.
|
|
||||||
|
|
||||||
Note that, on most Un*x systems, the dynamic linker will not look for a
|
|
||||||
function in a library until that function is actually used. Thus, if a program
|
|
||||||
is built against libjpeg-turbo 1.3+ and uses jpeg_mem_src() or jpeg_mem_dest(),
|
|
||||||
that program will not fail if run against an older version of libjpeg-turbo or
|
|
||||||
against libjpeg v7- until the program actually tries to call jpeg_mem_src() or
|
|
||||||
jpeg_mem_dest(). Such is not the case on Windows. If a program is built
|
|
||||||
against the libjpeg-turbo 1.3+ DLL and uses jpeg_mem_src() or jpeg_mem_dest(),
|
|
||||||
then it must use the libjpeg-turbo 1.3+ DLL at run time.
|
|
||||||
|
|
||||||
Both cjpeg and djpeg have been extended to allow testing the in-memory
|
|
||||||
source/destination manager functions. See their respective man pages for more
|
|
||||||
details.
|
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************
|
|
||||||
** Mathematical Compatibility
|
|
||||||
*******************************************************************************
|
|
||||||
|
|
||||||
For the most part, libjpeg-turbo should produce identical output to libjpeg
|
|
||||||
v6b. The one exception to this is when using the floating point DCT/IDCT, in
|
|
||||||
which case the outputs of libjpeg v6b and libjpeg-turbo are not guaranteed to
|
|
||||||
be identical (the accuracy of the floating point DCT/IDCT is constant when
|
|
||||||
using libjpeg-turbo's SIMD extensions, but otherwise, it can depend heavily on
|
|
||||||
the compiler and compiler settings.)
|
|
||||||
|
|
||||||
While libjpeg-turbo does emulate the libjpeg v8 API/ABI, under the hood, it is
|
|
||||||
still using the same algorithms as libjpeg v6b, so there are several specific
|
|
||||||
cases in which libjpeg-turbo cannot be expected to produce the same output as
|
|
||||||
libjpeg v8:
|
|
||||||
|
|
||||||
-- When decompressing using scaling factors of 1/2 and 1/4, because libjpeg v8
|
|
||||||
implements those scaling algorithms a bit differently than libjpeg v6b does,
|
|
||||||
and libjpeg-turbo's SIMD extensions are based on the libjpeg v6b behavior.
|
|
||||||
|
|
||||||
-- When using chrominance subsampling, because libjpeg v8 implements this
|
|
||||||
with its DCT/IDCT scaling algorithms rather than with a separate
|
|
||||||
downsampling/upsampling algorithm.
|
|
||||||
|
|
||||||
-- When using the floating point IDCT, for the reasons stated above and also
|
|
||||||
because the floating point IDCT algorithm was modified in libjpeg v8a to
|
|
||||||
improve accuracy.
|
|
||||||
|
|
||||||
-- When decompressing using a scaling factor > 1 and merged (AKA "non-fancy" or
|
|
||||||
"non-smooth") chrominance upsampling, because libjpeg v8 does not support
|
|
||||||
merged upsampling with scaling factors > 1.
|
|
||||||
|
|
||||||
|
|
||||||
*******************************************************************************
|
|
||||||
** Performance Pitfalls
|
|
||||||
*******************************************************************************
|
|
||||||
|
|
||||||
===============
|
|
||||||
Restart Markers
|
|
||||||
===============
|
|
||||||
|
|
||||||
The optimized Huffman decoder in libjpeg-turbo does not handle restart markers
|
|
||||||
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
|
|
||||||
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
|
|
||||||
libjpeg. Many consumer packages, such as PhotoShop, use restart markers when
|
|
||||||
generating JPEG images, so images generated by those programs will experience
|
|
||||||
this issue.
|
|
||||||
|
|
||||||
===============================================
|
|
||||||
Fast Integer Forward DCT at High Quality Levels
|
|
||||||
===============================================
|
|
||||||
|
|
||||||
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
|
|
||||||
quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
|
|
||||||
function in those cases. This causes performance to drop by as much as 40%.
|
|
||||||
It is therefore strongly advised that you use the slow integer forward DCT
|
|
||||||
whenever encoding images with a JPEG quality of 98 or higher.
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
libjpeg-turbo note: This file has been modified by The libjpeg-turbo Project
|
libjpeg-turbo note: This file has been modified by The libjpeg-turbo Project
|
||||||
to include only information relevant to libjpeg-turbo, to wordsmith certain
|
to include only information relevant to libjpeg-turbo, to wordsmith certain
|
||||||
sections, and to remove impolitic language that existed in the libjpeg v8
|
sections, and to remove impolitic language that existed in the libjpeg v8
|
||||||
README. It is included only for reference. Please see README-turbo.txt for
|
README. It is included only for reference. Please see README.md for
|
||||||
information specific to libjpeg-turbo.
|
information specific to libjpeg-turbo.
|
||||||
|
|
||||||
|
|
||||||
@@ -36,7 +36,6 @@ TO DO Plans for future IJG releases.
|
|||||||
Other documentation files in the distribution are:
|
Other documentation files in the distribution are:
|
||||||
|
|
||||||
User documentation:
|
User documentation:
|
||||||
install.txt How to configure and install the IJG software.
|
|
||||||
usage.txt Usage instructions for cjpeg, djpeg, jpegtran,
|
usage.txt Usage instructions for cjpeg, djpeg, jpegtran,
|
||||||
rdjpgcom, and wrjpgcom.
|
rdjpgcom, and wrjpgcom.
|
||||||
*.1 Unix-style man pages for programs (same info as usage.txt).
|
*.1 Unix-style man pages for programs (same info as usage.txt).
|
||||||
@@ -48,9 +47,9 @@ Programmer and internal documentation:
|
|||||||
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.
|
||||||
|
|
||||||
Please read at least the files install.txt and usage.txt. Some information
|
Please read at least usage.txt. Some information can also be found in the JPEG
|
||||||
can also be found in the JPEG FAQ (Frequently Asked Questions) article. See
|
FAQ (Frequently Asked Questions) article. See ARCHIVE LOCATIONS below to find
|
||||||
ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
|
out where to obtain the FAQ article.
|
||||||
|
|
||||||
If you want to understand how the JPEG code works, we suggest reading one or
|
If you want to understand how the JPEG code works, we suggest reading one or
|
||||||
more of the REFERENCES, then looking at the documentation files (in roughly
|
more of the REFERENCES, then looking at the documentation files (in roughly
|
||||||
@@ -62,7 +61,7 @@ OVERVIEW
|
|||||||
|
|
||||||
This package contains C software to implement JPEG image encoding, decoding,
|
This package contains C software to implement JPEG image encoding, decoding,
|
||||||
and transcoding. JPEG (pronounced "jay-peg") is a standardized compression
|
and transcoding. JPEG (pronounced "jay-peg") is a standardized compression
|
||||||
method for full-color and gray-scale images. JPEG's strong suit is compressing
|
method for full-color and grayscale images. JPEG's strong suit is compressing
|
||||||
photographic images or other types of images that have smooth color and
|
photographic images or other types of images that have smooth color and
|
||||||
brightness transitions between neighboring pixels. Images with sharp lines or
|
brightness transitions between neighboring pixels. Images with sharp lines or
|
||||||
other abrupt features may not compress well with JPEG, and a higher JPEG
|
other abrupt features may not compress well with JPEG, and a higher JPEG
|
||||||
@@ -129,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-2012, Thomas G. Lane, Guido Vollbeding.
|
This software is copyright (C) 1991-2016, 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
|
||||||
@@ -167,11 +166,11 @@ ltmain.sh). Another support script, install-sh, is copyright by X Consortium
|
|||||||
but is also freely distributable.
|
but is also freely distributable.
|
||||||
|
|
||||||
The IJG distribution formerly included code to read and write GIF files.
|
The IJG distribution formerly included code to read and write GIF files.
|
||||||
To avoid entanglement with the Unisys LZW patent, GIF reading support has
|
To avoid entanglement with the Unisys LZW patent (now expired), GIF reading
|
||||||
been removed altogether, and the GIF writer has been simplified to produce
|
support has been removed altogether, and the GIF writer has been simplified
|
||||||
"uncompressed GIFs". This technique does not use the LZW algorithm; the
|
to produce "uncompressed GIFs". This technique does not use the LZW
|
||||||
resulting GIF files are larger than usual, but are readable by all standard
|
algorithm; the resulting GIF files are larger than usual, but are readable
|
||||||
GIF decoders.
|
by all standard GIF decoders.
|
||||||
|
|
||||||
We are required to state that
|
We are required to state that
|
||||||
"The Graphics Interchange Format(c) is the Copyright property of
|
"The Graphics Interchange Format(c) is the Copyright property of
|
||||||
@@ -190,8 +189,8 @@ The best short technical introduction to the JPEG compression algorithm is
|
|||||||
Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
|
Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
|
||||||
(Adjacent articles in that issue discuss MPEG motion picture compression,
|
(Adjacent articles in that issue discuss MPEG motion picture compression,
|
||||||
applications of JPEG, and related topics.) If you don't have the CACM issue
|
applications of JPEG, and related topics.) If you don't have the CACM issue
|
||||||
handy, a PostScript file containing a revised version of Wallace's article is
|
handy, a PDF file containing a revised version of Wallace's article is
|
||||||
available at http://www.ijg.org/files/wallace.ps.gz. The file (actually
|
available at http://www.ijg.org/files/Wallace.JPEG.pdf. The file (actually
|
||||||
a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
|
a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
|
||||||
omits the sample images that appeared in CACM, but it includes corrections
|
omits the sample images that appeared in CACM, but it includes corrections
|
||||||
and some added material. Note: the Wallace article is copyright ACM and IEEE,
|
and some added material. Note: the Wallace article is copyright ACM and IEEE,
|
||||||
@@ -247,9 +246,7 @@ ARCHIVE LOCATIONS
|
|||||||
|
|
||||||
The "official" archive site for this software is www.ijg.org.
|
The "official" archive site for this software is www.ijg.org.
|
||||||
The most recent released version can always be found there in
|
The most recent released version can always be found there in
|
||||||
directory "files". This particular version will be archived as
|
directory "files".
|
||||||
http://www.ijg.org/files/jpegsrc.v8d.tar.gz, and in Windows-compatible
|
|
||||||
"zip" archive format as http://www.ijg.org/files/jpegsr8d.zip.
|
|
||||||
|
|
||||||
The JPEG FAQ (Frequently Asked Questions) article is a source of some
|
The JPEG FAQ (Frequently Asked Questions) article is a source of some
|
||||||
general information about JPEG.
|
general information about JPEG.
|
||||||
341
README.md
Executable file
@@ -0,0 +1,341 @@
|
|||||||
|
Background
|
||||||
|
==========
|
||||||
|
|
||||||
|
libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2,
|
||||||
|
NEON, AltiVec) to accelerate baseline JPEG compression and decompression on
|
||||||
|
x86, x86-64, ARM, and PowerPC systems. On such systems, libjpeg-turbo is
|
||||||
|
generally 2-6x as fast as libjpeg, all else being equal. On other types of
|
||||||
|
systems, libjpeg-turbo can still outperform libjpeg by a significant amount, by
|
||||||
|
virtue of its highly-optimized Huffman coding routines. In many cases, the
|
||||||
|
performance of libjpeg-turbo rivals that of proprietary high-speed JPEG codecs.
|
||||||
|
|
||||||
|
libjpeg-turbo implements both the traditional libjpeg API as well as the less
|
||||||
|
powerful but more straightforward TurboJPEG API. libjpeg-turbo also features
|
||||||
|
colorspace extensions that allow it to compress from/decompress to 32-bit and
|
||||||
|
big-endian pixel buffers (RGBX, XBGR, etc.), as well as a full-featured Java
|
||||||
|
interface.
|
||||||
|
|
||||||
|
libjpeg-turbo was originally based on libjpeg/SIMD, an MMX-accelerated
|
||||||
|
derivative of libjpeg v6b developed by Miyasaka Masaru. The TigerVNC and
|
||||||
|
VirtualGL projects made numerous enhancements to the codec in 2009, and in
|
||||||
|
early 2010, libjpeg-turbo spun off into an independent project, with the goal
|
||||||
|
of making high-speed JPEG compression/decompression technology available to a
|
||||||
|
broader range of users and developers.
|
||||||
|
|
||||||
|
|
||||||
|
License
|
||||||
|
=======
|
||||||
|
|
||||||
|
libjpeg-turbo is covered by three compatible BSD-style open source licenses.
|
||||||
|
Refer to [LICENSE.md](LICENSE.md) for a roll-up of license terms.
|
||||||
|
|
||||||
|
|
||||||
|
Building libjpeg-turbo
|
||||||
|
======================
|
||||||
|
|
||||||
|
Refer to [BUILDING.md](BUILDING.md) for complete instructions.
|
||||||
|
|
||||||
|
|
||||||
|
Using libjpeg-turbo
|
||||||
|
===================
|
||||||
|
|
||||||
|
libjpeg-turbo includes two APIs that can be used to compress and decompress
|
||||||
|
JPEG images:
|
||||||
|
|
||||||
|
- **TurboJPEG API**<br>
|
||||||
|
This API provides an easy-to-use interface for compressing and decompressing
|
||||||
|
JPEG images in memory. It also provides some functionality that would not be
|
||||||
|
straightforward to achieve using the underlying libjpeg API, such as
|
||||||
|
generating planar YUV images and performing multiple simultaneous lossless
|
||||||
|
transforms on an image. The Java interface for libjpeg-turbo is written on
|
||||||
|
top of the TurboJPEG API.
|
||||||
|
|
||||||
|
- **libjpeg API**<br>
|
||||||
|
This is the de facto industry-standard API for compressing and decompressing
|
||||||
|
JPEG images. It is more difficult to use than the TurboJPEG API but also
|
||||||
|
more powerful. The libjpeg API implementation in libjpeg-turbo is both
|
||||||
|
API/ABI-compatible and mathematically compatible with libjpeg v6b. It can
|
||||||
|
also optionally be configured to be API/ABI-compatible with libjpeg v7 and v8
|
||||||
|
(see below.)
|
||||||
|
|
||||||
|
There is no significant performance advantage to either API when both are used
|
||||||
|
to perform similar operations.
|
||||||
|
|
||||||
|
Colorspace Extensions
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
libjpeg-turbo includes extensions that allow JPEG images to be compressed
|
||||||
|
directly from (and decompressed directly to) buffers that use BGR, BGRX,
|
||||||
|
RGBX, XBGR, and XRGB pixel ordering. This is implemented with ten new
|
||||||
|
colorspace constants:
|
||||||
|
|
||||||
|
JCS_EXT_RGB /* red/green/blue */
|
||||||
|
JCS_EXT_RGBX /* red/green/blue/x */
|
||||||
|
JCS_EXT_BGR /* blue/green/red */
|
||||||
|
JCS_EXT_BGRX /* blue/green/red/x */
|
||||||
|
JCS_EXT_XBGR /* x/blue/green/red */
|
||||||
|
JCS_EXT_XRGB /* x/red/green/blue */
|
||||||
|
JCS_EXT_RGBA /* red/green/blue/alpha */
|
||||||
|
JCS_EXT_BGRA /* blue/green/red/alpha */
|
||||||
|
JCS_EXT_ABGR /* alpha/blue/green/red */
|
||||||
|
JCS_EXT_ARGB /* alpha/red/green/blue */
|
||||||
|
|
||||||
|
Setting `cinfo.in_color_space` (compression) or `cinfo.out_color_space`
|
||||||
|
(decompression) to one of these values will cause libjpeg-turbo to read the
|
||||||
|
red, green, and blue values from (or write them to) the appropriate position in
|
||||||
|
the pixel when compressing from/decompressing to an RGB buffer.
|
||||||
|
|
||||||
|
Your application can check for the existence of these extensions at compile
|
||||||
|
time with:
|
||||||
|
|
||||||
|
#ifdef JCS_EXTENSIONS
|
||||||
|
|
||||||
|
At run time, attempting to use these extensions with a libjpeg implementation
|
||||||
|
that does not support them will result in a "Bogus input colorspace" error.
|
||||||
|
Applications can trap this error in order to test whether run-time support is
|
||||||
|
available for the colorspace extensions.
|
||||||
|
|
||||||
|
When using the RGBX, BGRX, XBGR, and XRGB colorspaces during decompression, the
|
||||||
|
X byte is undefined, and in order to ensure the best performance, libjpeg-turbo
|
||||||
|
can set that byte to whatever value it wishes. If an application expects the X
|
||||||
|
byte to be used as an alpha channel, then it should specify `JCS_EXT_RGBA`,
|
||||||
|
`JCS_EXT_BGRA`, `JCS_EXT_ABGR`, or `JCS_EXT_ARGB`. When these colorspace
|
||||||
|
constants are used, the X byte is guaranteed to be 0xFF, which is interpreted
|
||||||
|
as opaque.
|
||||||
|
|
||||||
|
Your application can check for the existence of the alpha channel colorspace
|
||||||
|
extensions at compile time with:
|
||||||
|
|
||||||
|
#ifdef JCS_ALPHA_EXTENSIONS
|
||||||
|
|
||||||
|
[jcstest.c](jcstest.c), located in the libjpeg-turbo source tree, demonstrates
|
||||||
|
how to check for the existence of the colorspace extensions at compile time and
|
||||||
|
run time.
|
||||||
|
|
||||||
|
libjpeg v7 and v8 API/ABI Emulation
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
With libjpeg v7 and v8, new features were added that necessitated extending the
|
||||||
|
compression and decompression structures. Unfortunately, due to the exposed
|
||||||
|
nature of those structures, extending them also necessitated breaking backward
|
||||||
|
ABI compatibility with previous libjpeg releases. Thus, programs that were
|
||||||
|
built to use libjpeg v7 or v8 did not work with libjpeg-turbo, since it is
|
||||||
|
based on the libjpeg v6b code base. Although libjpeg v7 and v8 are not
|
||||||
|
as widely used as v6b, enough programs (including a few Linux distros) made
|
||||||
|
the switch that there was a demand to emulate the libjpeg v7 and v8 ABIs
|
||||||
|
in libjpeg-turbo. It should be noted, however, that this feature was added
|
||||||
|
primarily so that applications that had already been compiled to use libjpeg
|
||||||
|
v7+ could take advantage of accelerated baseline JPEG encoding/decoding
|
||||||
|
without recompiling. libjpeg-turbo does not claim to support all of the
|
||||||
|
libjpeg v7+ features, nor to produce identical output to libjpeg v7+ in all
|
||||||
|
cases (see below.)
|
||||||
|
|
||||||
|
By passing an argument of `--with-jpeg7` or `--with-jpeg8` to `configure`, or
|
||||||
|
an argument of `-DWITH_JPEG7=1` or `-DWITH_JPEG8=1` to `cmake`, you can build a
|
||||||
|
version of libjpeg-turbo that emulates the libjpeg v7 or v8 ABI, so that
|
||||||
|
programs that are built against libjpeg v7 or v8 can be run with libjpeg-turbo.
|
||||||
|
The following section describes which libjpeg v7+ features are supported and
|
||||||
|
which aren't.
|
||||||
|
|
||||||
|
### Support for libjpeg v7 and v8 Features
|
||||||
|
|
||||||
|
#### Fully supported
|
||||||
|
|
||||||
|
- **libjpeg: IDCT scaling extensions in decompressor**<br>
|
||||||
|
libjpeg-turbo supports IDCT scaling with scaling factors of 1/8, 1/4, 3/8,
|
||||||
|
1/2, 5/8, 3/4, 7/8, 9/8, 5/4, 11/8, 3/2, 13/8, 7/4, 15/8, and 2/1 (only 1/4
|
||||||
|
and 1/2 are SIMD-accelerated.)
|
||||||
|
|
||||||
|
- **libjpeg: Arithmetic coding**
|
||||||
|
|
||||||
|
- **libjpeg: In-memory source and destination managers**<br>
|
||||||
|
See notes below.
|
||||||
|
|
||||||
|
- **cjpeg: Separate quality settings for luminance and chrominance**<br>
|
||||||
|
Note that the libpjeg v7+ API was extended to accommodate this feature only
|
||||||
|
for convenience purposes. It has always been possible to implement this
|
||||||
|
feature with libjpeg v6b (see rdswitch.c for an example.)
|
||||||
|
|
||||||
|
- **cjpeg: 32-bit BMP support**
|
||||||
|
|
||||||
|
- **cjpeg: `-rgb` option**
|
||||||
|
|
||||||
|
- **jpegtran: Lossless cropping**
|
||||||
|
|
||||||
|
- **jpegtran: `-perfect` option**
|
||||||
|
|
||||||
|
- **jpegtran: Forcing width/height when performing lossless crop**
|
||||||
|
|
||||||
|
- **rdjpgcom: `-raw` option**
|
||||||
|
|
||||||
|
- **rdjpgcom: Locale awareness**
|
||||||
|
|
||||||
|
|
||||||
|
#### Not supported
|
||||||
|
|
||||||
|
NOTE: As of this writing, extensive research has been conducted into the
|
||||||
|
usefulness of DCT scaling as a means of data reduction and SmartScale as a
|
||||||
|
means of quality improvement. The reader is invited to peruse the research at
|
||||||
|
<http://www.libjpeg-turbo.org/About/SmartScale> and draw his/her own conclusions,
|
||||||
|
but it is the general belief of our project that these features have not
|
||||||
|
demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
|
||||||
|
|
||||||
|
- **libjpeg: DCT scaling in compressor**<br>
|
||||||
|
`cinfo.scale_num` and `cinfo.scale_denom` are silently ignored.
|
||||||
|
There is no technical reason why DCT scaling could not be supported when
|
||||||
|
emulating the libjpeg v7+ API/ABI, but without the SmartScale extension (see
|
||||||
|
below), only scaling factors of 1/2, 8/15, 4/7, 8/13, 2/3, 8/11, 4/5, and
|
||||||
|
8/9 would be available, which is of limited usefulness.
|
||||||
|
|
||||||
|
- **libjpeg: SmartScale**<br>
|
||||||
|
`cinfo.block_size` is silently ignored.
|
||||||
|
SmartScale is an extension to the JPEG format that allows for DCT block
|
||||||
|
sizes other than 8x8. Providing support for this new format would be
|
||||||
|
feasible (particularly without full acceleration.) However, until/unless
|
||||||
|
the format becomes either an official industry standard or, at minimum, an
|
||||||
|
accepted solution in the community, we are hesitant to implement it, as
|
||||||
|
there is no sense of whether or how it might change in the future. It is
|
||||||
|
our belief that SmartScale has not demonstrated sufficient usefulness as a
|
||||||
|
lossless format nor as a means of quality enhancement, and thus our primary
|
||||||
|
interest in providing this feature would be as a means of supporting
|
||||||
|
additional DCT scaling factors.
|
||||||
|
|
||||||
|
- **libjpeg: Fancy downsampling in compressor**<br>
|
||||||
|
`cinfo.do_fancy_downsampling` is silently ignored.
|
||||||
|
This requires the DCT scaling feature, which is not supported.
|
||||||
|
|
||||||
|
- **jpegtran: Scaling**<br>
|
||||||
|
This requires both the DCT scaling and SmartScale features, which are not
|
||||||
|
supported.
|
||||||
|
|
||||||
|
- **Lossless RGB JPEG files**<br>
|
||||||
|
This requires the SmartScale feature, which is not supported.
|
||||||
|
|
||||||
|
### What About libjpeg v9?
|
||||||
|
|
||||||
|
libjpeg v9 introduced yet another field to the JPEG compression structure
|
||||||
|
(`color_transform`), thus making the ABI backward incompatible with that of
|
||||||
|
libjpeg v8. This new field was introduced solely for the purpose of supporting
|
||||||
|
lossless SmartScale encoding. Furthermore, there was actually no reason to
|
||||||
|
extend the API in this manner, as the color transform could have just as easily
|
||||||
|
been activated by way of a new JPEG colorspace constant, thus preserving
|
||||||
|
backward ABI compatibility.
|
||||||
|
|
||||||
|
Our research (see link above) has shown that lossless SmartScale does not
|
||||||
|
generally accomplish anything that can't already be accomplished better with
|
||||||
|
existing, standard lossless formats. Therefore, at this time it is our belief
|
||||||
|
that there is not sufficient technical justification for software projects to
|
||||||
|
upgrade from libjpeg v8 to libjpeg v9, and thus there is not sufficient
|
||||||
|
technical justification for us to emulate the libjpeg v9 ABI.
|
||||||
|
|
||||||
|
In-Memory Source/Destination Managers
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
By default, libjpeg-turbo 1.3 and later includes the `jpeg_mem_src()` and
|
||||||
|
`jpeg_mem_dest()` functions, even when not emulating the libjpeg v8 API/ABI.
|
||||||
|
Previously, it was necessary to build libjpeg-turbo from source with libjpeg v8
|
||||||
|
API/ABI emulation in order to use the in-memory source/destination managers,
|
||||||
|
but several projects requested that those functions be included when emulating
|
||||||
|
the libjpeg v6b API/ABI as well. This allows the use of those functions by
|
||||||
|
programs that need them, without breaking ABI compatibility for programs that
|
||||||
|
don't, and it allows those functions to be provided in the "official"
|
||||||
|
libjpeg-turbo binaries.
|
||||||
|
|
||||||
|
Those who are concerned about maintaining strict conformance with the libjpeg
|
||||||
|
v6b or v7 API can pass an argument of `--without-mem-srcdst` to `configure` or
|
||||||
|
an argument of `-DWITH_MEM_SRCDST=0` to `cmake` prior to building
|
||||||
|
libjpeg-turbo. This will restore the pre-1.3 behavior, in which
|
||||||
|
`jpeg_mem_src()` and `jpeg_mem_dest()` are only included when emulating the
|
||||||
|
libjpeg v8 API/ABI.
|
||||||
|
|
||||||
|
On Un*x systems, including the in-memory source/destination managers changes
|
||||||
|
the dynamic library version from 62.1.0 to 62.2.0 if using libjpeg v6b API/ABI
|
||||||
|
emulation and from 7.1.0 to 7.2.0 if using libjpeg v7 API/ABI emulation.
|
||||||
|
|
||||||
|
Note that, on most Un*x systems, the dynamic linker will not look for a
|
||||||
|
function in a library until that function is actually used. Thus, if a program
|
||||||
|
is built against libjpeg-turbo 1.3+ and uses `jpeg_mem_src()` or
|
||||||
|
`jpeg_mem_dest()`, that program will not fail if run against an older version
|
||||||
|
of libjpeg-turbo or against libjpeg v7- until the program actually tries to
|
||||||
|
call `jpeg_mem_src()` or `jpeg_mem_dest()`. Such is not the case on Windows.
|
||||||
|
If a program is built against the libjpeg-turbo 1.3+ DLL and uses
|
||||||
|
`jpeg_mem_src()` or `jpeg_mem_dest()`, then it must use the libjpeg-turbo 1.3+
|
||||||
|
DLL at run time.
|
||||||
|
|
||||||
|
Both cjpeg and djpeg have been extended to allow testing the in-memory
|
||||||
|
source/destination manager functions. See their respective man pages for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
|
||||||
|
Mathematical Compatibility
|
||||||
|
==========================
|
||||||
|
|
||||||
|
For the most part, libjpeg-turbo should produce identical output to libjpeg
|
||||||
|
v6b. The one exception to this is when using the floating point DCT/IDCT, in
|
||||||
|
which case the outputs of libjpeg v6b and libjpeg-turbo can differ for the
|
||||||
|
following reasons:
|
||||||
|
|
||||||
|
- The SSE/SSE2 floating point DCT implementation in libjpeg-turbo is ever so
|
||||||
|
slightly more accurate than the implementation in libjpeg v6b, but not 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 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
|
||||||
|
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
|
||||||
|
still using the same algorithms as libjpeg v6b, so there are several specific
|
||||||
|
cases in which libjpeg-turbo cannot be expected to produce the same output as
|
||||||
|
libjpeg v8:
|
||||||
|
|
||||||
|
- When decompressing using scaling factors of 1/2 and 1/4, because libjpeg v8
|
||||||
|
implements those scaling algorithms differently than libjpeg v6b does, and
|
||||||
|
libjpeg-turbo's SIMD extensions are based on the libjpeg v6b behavior.
|
||||||
|
|
||||||
|
- When using chrominance subsampling, because libjpeg v8 implements this
|
||||||
|
with its DCT/IDCT scaling algorithms rather than with a separate
|
||||||
|
downsampling/upsampling algorithm. In our testing, the subsampled/upsampled
|
||||||
|
output of libjpeg v8 is less accurate than that of libjpeg v6b for this
|
||||||
|
reason.
|
||||||
|
|
||||||
|
- When decompressing using a scaling factor > 1 and merged (AKA "non-fancy" or
|
||||||
|
"non-smooth") chrominance upsampling, because libjpeg v8 does not support
|
||||||
|
merged upsampling with scaling factors > 1.
|
||||||
|
|
||||||
|
|
||||||
|
Performance Pitfalls
|
||||||
|
====================
|
||||||
|
|
||||||
|
Restart Markers
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The optimized Huffman decoder in libjpeg-turbo does not handle restart markers
|
||||||
|
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
|
||||||
|
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
|
||||||
|
libjpeg. Many consumer packages, such as PhotoShop, use restart markers when
|
||||||
|
generating JPEG images, so images generated by those programs will experience
|
||||||
|
this issue.
|
||||||
|
|
||||||
|
Fast Integer Forward DCT at High Quality Levels
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
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
|
||||||
|
quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
|
||||||
|
function in those cases. This causes performance to drop by as much as 40%.
|
||||||
|
It is therefore strongly advised that you use the slow integer forward DCT
|
||||||
|
whenever encoding images with a JPEG quality of 98 or higher.
|
||||||
119
acinclude.m4
@@ -3,8 +3,11 @@
|
|||||||
# Check that NASM exists and determine flags
|
# Check that NASM exists and determine flags
|
||||||
AC_DEFUN([AC_PROG_NASM],[
|
AC_DEFUN([AC_PROG_NASM],[
|
||||||
|
|
||||||
AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
|
AC_ARG_VAR(NASM, [NASM command (used to build the x86/x86-64 SIMD code)])
|
||||||
test -z "$NASM" && AC_MSG_ERROR([no nasm (Netwide Assembler) found])
|
if test "x$NASM" = "x"; then
|
||||||
|
AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
|
||||||
|
test -z "$NASM" && AC_MSG_ERROR([no nasm (Netwide Assembler) found])
|
||||||
|
fi
|
||||||
|
|
||||||
AC_MSG_CHECKING([for object file format of host system])
|
AC_MSG_CHECKING([for object file format of host system])
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
@@ -40,7 +43,7 @@ case "$host_os" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
freebsd* | netbsd* | openbsd*)
|
kfreebsd* | freebsd* | netbsd* | openbsd*)
|
||||||
if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
|
if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
|
||||||
objfmt='BSD-a.out'
|
objfmt='BSD-a.out'
|
||||||
else
|
else
|
||||||
@@ -144,26 +147,26 @@ AC_DEFUN([AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE],[
|
|||||||
ac_save_CFLAGS="$CFLAGS"
|
ac_save_CFLAGS="$CFLAGS"
|
||||||
CFLAGS="$CCASFLAGS -x assembler-with-cpp"
|
CFLAGS="$CCASFLAGS -x assembler-with-cpp"
|
||||||
CC="$CCAS"
|
CC="$CCAS"
|
||||||
AC_COMPILE_IFELSE([[
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||||
.text
|
.text
|
||||||
.fpu neon
|
.fpu neon
|
||||||
.arch armv7a
|
.arch armv7a
|
||||||
.object_arch armv4
|
.object_arch armv4
|
||||||
.arm
|
.arm
|
||||||
pld [r0]
|
pld [r0]
|
||||||
vmovn.u16 d0, q0]], ac_good_gnu_arm_assembler=yes)
|
vmovn.u16 d0, q0]])], ac_good_gnu_arm_assembler=yes)
|
||||||
|
|
||||||
ac_use_gas_preprocessor=no
|
ac_use_gas_preprocessor=no
|
||||||
if test "x$ac_good_gnu_arm_assembler" = "xno" ; then
|
if test "x$ac_good_gnu_arm_assembler" = "xno" ; then
|
||||||
CC="gas-preprocessor.pl $CCAS"
|
CC="gas-preprocessor.pl $CCAS"
|
||||||
AC_COMPILE_IFELSE([[
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||||
.text
|
.text
|
||||||
.fpu neon
|
.fpu neon
|
||||||
.arch armv7a
|
.arch armv7a
|
||||||
.object_arch armv4
|
.object_arch armv4
|
||||||
.arm
|
.arm
|
||||||
pld [r0]
|
pld [r0]
|
||||||
vmovn.u16 d0, q0]], ac_use_gas_preprocessor=yes)
|
vmovn.u16 d0, q0]])], ac_use_gas_preprocessor=yes)
|
||||||
fi
|
fi
|
||||||
CFLAGS="$ac_save_CFLAGS"
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
CC="$ac_save_CC"
|
CC="$ac_save_CC"
|
||||||
@@ -180,3 +183,105 @@ AC_DEFUN([AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE],[
|
|||||||
$2
|
$2
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
# AC_CHECK_COMPATIBLE_MIPSEL_ASSEMBLER_IFELSE
|
||||||
|
# --------------------------
|
||||||
|
# Test whether the assembler is suitable and supports MIPS instructions
|
||||||
|
AC_DEFUN([AC_CHECK_COMPATIBLE_MIPS_ASSEMBLER_IFELSE],[
|
||||||
|
have_mips_dspr2=no
|
||||||
|
ac_save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CCASFLAGS -mdspr2"
|
||||||
|
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||||
|
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
int c = 0, a = 0, b = 0;
|
||||||
|
__asm__ __volatile__ (
|
||||||
|
"precr.qb.ph %[c], %[a], %[b] \n\t"
|
||||||
|
: [c] "=r" (c)
|
||||||
|
: [a] "r" (a), [b] "r" (b)
|
||||||
|
);
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
]])], have_mips_dspr2=yes)
|
||||||
|
CFLAGS=$ac_save_CFLAGS
|
||||||
|
|
||||||
|
if test "x$have_mips_dspr2" = "xyes" ; then
|
||||||
|
$1
|
||||||
|
else
|
||||||
|
$2
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([AC_CHECK_COMPATIBLE_ARM64_ASSEMBLER_IFELSE],[
|
||||||
|
ac_good_gnu_arm_assembler=no
|
||||||
|
ac_save_CC="$CC"
|
||||||
|
ac_save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CCASFLAGS -x assembler-with-cpp"
|
||||||
|
CC="$CCAS"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||||
|
.text
|
||||||
|
MYVAR .req x0
|
||||||
|
movi v0.16b, #100
|
||||||
|
mov MYVAR, #100
|
||||||
|
.unreq MYVAR]])], ac_good_gnu_arm_assembler=yes)
|
||||||
|
|
||||||
|
ac_use_gas_preprocessor=no
|
||||||
|
if test "x$ac_good_gnu_arm_assembler" = "xno" ; then
|
||||||
|
CC="gas-preprocessor.pl $CCAS"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||||
|
.text
|
||||||
|
MYVAR .req x0
|
||||||
|
movi v0.16b, #100
|
||||||
|
mov MYVAR, #100
|
||||||
|
.unreq MYVAR]])], ac_use_gas_preprocessor=yes)
|
||||||
|
fi
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
CC="$ac_save_CC"
|
||||||
|
|
||||||
|
if test "x$ac_use_gas_preprocessor" = "xyes" ; then
|
||||||
|
CCAS="gas-preprocessor.pl $CCAS"
|
||||||
|
AC_SUBST([CCAS])
|
||||||
|
ac_good_gnu_arm_assembler=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$ac_good_gnu_arm_assembler" = "xyes" ; then
|
||||||
|
$1
|
||||||
|
else
|
||||||
|
$2
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
# AC_CHECK_ALTIVEC
|
||||||
|
# ----------------
|
||||||
|
# Test whether AltiVec intrinsics are supported
|
||||||
|
AC_DEFUN([AC_CHECK_ALTIVEC],[
|
||||||
|
ac_save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS -maltivec"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||||
|
#include <altivec.h>
|
||||||
|
int main(void) {
|
||||||
|
__vector int vi = { 0, 0, 0, 0 };
|
||||||
|
int i[4];
|
||||||
|
vec_st(vi, 0, i);
|
||||||
|
return i[0];
|
||||||
|
}]])], ac_has_altivec=yes)
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
if test "x$ac_has_altivec" = "xyes" ; then
|
||||||
|
$1
|
||||||
|
else
|
||||||
|
$2
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([AC_NO_SIMD],[
|
||||||
|
AC_MSG_RESULT([no ("$1")])
|
||||||
|
with_simd=no;
|
||||||
|
if test "x${require_simd}" = "xyes"; then
|
||||||
|
AC_MSG_ERROR([SIMD support not available for this CPU.])
|
||||||
|
else
|
||||||
|
AC_MSG_WARN([SIMD support not available for this CPU. Performance will\
|
||||||
|
suffer.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|||||||
57
appveyor.yml
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
install:
|
||||||
|
- cmd: >-
|
||||||
|
mkdir c:\installers
|
||||||
|
|
||||||
|
mkdir c:\temp
|
||||||
|
|
||||||
|
curl -fSL -o c:\installers\nasm-2.10.01-win32.zip http://www.nasm.us/pub/nasm/releasebuilds/2.10.01/win32/nasm-2.10.01-win32.zip
|
||||||
|
|
||||||
|
7z x c:\installers\nasm-2.10.01-win32.zip -oc:\ > c:\installers\nasm.install.log
|
||||||
|
|
||||||
|
set INCLUDE=c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include;c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include
|
||||||
|
|
||||||
|
set LIB=c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64;c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\lib\x64
|
||||||
|
|
||||||
|
set PATH=c:\nasm-2.10.01;c:\Program Files (x86)\NSIS;c:\msys64\mingw32\bin;c:\msys64\usr\bin;c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE;c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\bin\x64;c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\bin;%PATH%
|
||||||
|
|
||||||
|
set MSYSTEM=MINGW32
|
||||||
|
|
||||||
|
bash -c "pacman --noconfirm -S autoconf automake libtool zip"
|
||||||
|
|
||||||
|
mklink /d "%ProgramData%\Oracle\Java32" "c:\Program Files (x86)\Java\jdk1.6.0"
|
||||||
|
|
||||||
|
git clone --depth=1 https://github.com/libjpeg-turbo/buildscripts.git c:/buildscripts
|
||||||
|
|
||||||
|
build_script:
|
||||||
|
- cmd: >-
|
||||||
|
for /f %%i in ('"cygpath %CD%"') do set MINGWPATH=%%i
|
||||||
|
|
||||||
|
bash c:/buildscripts/buildljt -r file://%MINGWPATH% -b /c/ljt.nightly %APPVEYOR_REPO_BRANCH% -v
|
||||||
|
|
||||||
|
move c:\ljt.nightly\files\*.tar.gz .
|
||||||
|
|
||||||
|
move c:\ljt.nightly\files\*.exe .
|
||||||
|
|
||||||
|
move c:\ljt.nightly\files\*.zip .
|
||||||
|
|
||||||
|
move c:\ljt.nightly\log-windows.txt .
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
- path: '*.tar.gz'
|
||||||
|
name: Source tarball
|
||||||
|
|
||||||
|
- path: '*-gcc*.exe'
|
||||||
|
name: SDK for MinGW
|
||||||
|
|
||||||
|
- path: '*-vc*.exe'
|
||||||
|
name: SDK for Visual C++
|
||||||
|
|
||||||
|
- path: '*.zip'
|
||||||
|
name: Windows JNI JARs
|
||||||
|
|
||||||
|
- path: 'log-windows.txt'
|
||||||
|
name: Build log
|
||||||
|
|
||||||
|
test: off
|
||||||
|
|
||||||
|
deploy: off
|
||||||
97
bmp.c
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C)2011 D. R. Commander. All Rights Reserved.
|
* Copyright (C)2011, 2015 D. R. Commander. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@@ -75,30 +75,97 @@ static void my_output_message(j_common_ptr cinfo)
|
|||||||
static void pixelconvert(unsigned char *srcbuf, int srcpf, int srcbottomup,
|
static void pixelconvert(unsigned char *srcbuf, int srcpf, int srcbottomup,
|
||||||
unsigned char *dstbuf, int dstpf, int dstbottomup, int w, int h)
|
unsigned char *dstbuf, int dstpf, int dstbottomup, int w, int h)
|
||||||
{
|
{
|
||||||
unsigned char *srcptr=srcbuf, *srcptr2;
|
unsigned char *srcrowptr=srcbuf, *srccolptr;
|
||||||
int srcps=tjPixelSize[srcpf];
|
int srcps=tjPixelSize[srcpf];
|
||||||
int srcstride=srcbottomup? -w*srcps:w*srcps;
|
int srcstride=srcbottomup? -w*srcps:w*srcps;
|
||||||
unsigned char *dstptr=dstbuf, *dstptr2;
|
unsigned char *dstrowptr=dstbuf, *dstcolptr;
|
||||||
int dstps=tjPixelSize[dstpf];
|
int dstps=tjPixelSize[dstpf];
|
||||||
int dststride=dstbottomup? -w*dstps:w*dstps;
|
int dststride=dstbottomup? -w*dstps:w*dstps;
|
||||||
int row, col;
|
int row, col;
|
||||||
|
|
||||||
if(srcbottomup) srcptr=&srcbuf[w*srcps*(h-1)];
|
if(srcbottomup) srcrowptr=&srcbuf[w*srcps*(h-1)];
|
||||||
if(dstbottomup) dstptr=&dstbuf[w*dstps*(h-1)];
|
if(dstbottomup) dstrowptr=&dstbuf[w*dstps*(h-1)];
|
||||||
for(row=0; row<h; row++, srcptr+=srcstride, dstptr+=dststride)
|
|
||||||
|
/* NOTE: These quick & dirty CMYK<->RGB conversion routines are for testing
|
||||||
|
purposes only. Properly converting between CMYK and RGB requires a color
|
||||||
|
management system. */
|
||||||
|
|
||||||
|
if(dstpf==TJPF_CMYK)
|
||||||
{
|
{
|
||||||
for(col=0, srcptr2=srcptr, dstptr2=dstptr; col<w; col++, srcptr2+=srcps,
|
for(row=0; row<h; row++, srcrowptr+=srcstride, dstrowptr+=dststride)
|
||||||
dstptr2+=dstps)
|
|
||||||
{
|
{
|
||||||
dstptr2[tjRedOffset[dstpf]]=srcptr2[tjRedOffset[srcpf]];
|
for(col=0, srccolptr=srcrowptr, dstcolptr=dstrowptr;
|
||||||
dstptr2[tjGreenOffset[dstpf]]=srcptr2[tjGreenOffset[srcpf]];
|
col<w; col++, srccolptr+=srcps)
|
||||||
dstptr2[tjBlueOffset[dstpf]]=srcptr2[tjBlueOffset[srcpf]];
|
{
|
||||||
|
double c=1.0-((double)(srccolptr[tjRedOffset[srcpf]])/255.);
|
||||||
|
double m=1.0-((double)(srccolptr[tjGreenOffset[srcpf]])/255.);
|
||||||
|
double y=1.0-((double)(srccolptr[tjBlueOffset[srcpf]])/255.);
|
||||||
|
double k=min(min(c,m),min(y,1.0));
|
||||||
|
if(k==1.0) c=m=y=0.0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
c=(c-k)/(1.0-k);
|
||||||
|
m=(m-k)/(1.0-k);
|
||||||
|
y=(y-k)/(1.0-k);
|
||||||
|
}
|
||||||
|
if(c>1.0) c=1.0;
|
||||||
|
if(c<0.) c=0.;
|
||||||
|
if(m>1.0) m=1.0;
|
||||||
|
if(m<0.) m=0.;
|
||||||
|
if(y>1.0) y=1.0;
|
||||||
|
if(y<0.) y=0.;
|
||||||
|
if(k>1.0) k=1.0;
|
||||||
|
if(k<0.) k=0.;
|
||||||
|
*dstcolptr++=(unsigned char)(255.0-c*255.0+0.5);
|
||||||
|
*dstcolptr++=(unsigned char)(255.0-m*255.0+0.5);
|
||||||
|
*dstcolptr++=(unsigned char)(255.0-y*255.0+0.5);
|
||||||
|
*dstcolptr++=(unsigned char)(255.0-k*255.0+0.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(srcpf==TJPF_CMYK)
|
||||||
|
{
|
||||||
|
for(row=0; row<h; row++, srcrowptr+=srcstride, dstrowptr+=dststride)
|
||||||
|
{
|
||||||
|
for(col=0, srccolptr=srcrowptr, dstcolptr=dstrowptr;
|
||||||
|
col<w; col++, dstcolptr+=dstps)
|
||||||
|
{
|
||||||
|
double c=(double)(*srccolptr++);
|
||||||
|
double m=(double)(*srccolptr++);
|
||||||
|
double y=(double)(*srccolptr++);
|
||||||
|
double k=(double)(*srccolptr++);
|
||||||
|
double r=c*k/255.;
|
||||||
|
double g=m*k/255.;
|
||||||
|
double b=y*k/255.;
|
||||||
|
if(r>255.0) r=255.0;
|
||||||
|
if(r<0.) r=0.;
|
||||||
|
if(g>255.0) g=255.0;
|
||||||
|
if(g<0.) g=0.;
|
||||||
|
if(b>255.0) b=255.0;
|
||||||
|
if(b<0.) b=0.;
|
||||||
|
dstcolptr[tjRedOffset[dstpf]]=(unsigned char)(r+0.5);
|
||||||
|
dstcolptr[tjGreenOffset[dstpf]]=(unsigned char)(g+0.5);
|
||||||
|
dstcolptr[tjBlueOffset[dstpf]]=(unsigned char)(b+0.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(row=0; row<h; row++, srcrowptr+=srcstride, dstrowptr+=dststride)
|
||||||
|
{
|
||||||
|
for(col=0, srccolptr=srcrowptr, dstcolptr=dstrowptr;
|
||||||
|
col<w; col++, srccolptr+=srcps, dstcolptr+=dstps)
|
||||||
|
{
|
||||||
|
dstcolptr[tjRedOffset[dstpf]]=srccolptr[tjRedOffset[srcpf]];
|
||||||
|
dstcolptr[tjGreenOffset[dstpf]]=srccolptr[tjGreenOffset[srcpf]];
|
||||||
|
dstcolptr[tjBlueOffset[dstpf]]=srccolptr[tjBlueOffset[srcpf]];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int loadbmp(char *filename, unsigned char **buf, int *w, int *h,
|
int loadbmp(char *filename, unsigned char **buf, int *w, int *h,
|
||||||
int dstpf, int bottomup)
|
int dstpf, int bottomup)
|
||||||
{
|
{
|
||||||
int retval=0, dstps, srcpf, tempc;
|
int retval=0, dstps, srcpf, tempc;
|
||||||
@@ -169,7 +236,7 @@ int loadbmp(char *filename, unsigned char **buf, int *w, int *h,
|
|||||||
nlines);
|
nlines);
|
||||||
}
|
}
|
||||||
cinfo.next_scanline+=nlines;
|
cinfo.next_scanline+=nlines;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*src->finish_input)(&cinfo, src);
|
(*src->finish_input)(&cinfo, src);
|
||||||
|
|
||||||
@@ -236,7 +303,7 @@ int savebmp(char *filename, unsigned char *buf, int w, int h, int srcpf,
|
|||||||
_throw("savebmp(): Could not initialize PPM writer");
|
_throw("savebmp(): Could not initialize PPM writer");
|
||||||
}
|
}
|
||||||
|
|
||||||
dst->output_file=file;
|
dst->output_file=file;
|
||||||
(*dst->start_output)(&dinfo, dst);
|
(*dst->start_output)(&dinfo, dst);
|
||||||
(*dinfo.mem->realize_virt_arrays)((j_common_ptr)&dinfo);
|
(*dinfo.mem->realize_virt_arrays)((j_common_ptr)&dinfo);
|
||||||
|
|
||||||
@@ -258,7 +325,7 @@ int savebmp(char *filename, unsigned char *buf, int w, int h, int srcpf,
|
|||||||
}
|
}
|
||||||
(*dst->put_pixel_rows)(&dinfo, dst, nlines);
|
(*dst->put_pixel_rows)(&dinfo, dst, nlines);
|
||||||
dinfo.output_scanline+=nlines;
|
dinfo.output_scanline+=nlines;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*dst->finish_output)(&dinfo, dst);
|
(*dst->finish_output)(&dinfo, dst);
|
||||||
|
|
||||||
|
|||||||
4
bmp.h
@@ -39,8 +39,4 @@ int savebmp(char *filename, unsigned char *buf, int w, int h, int pf,
|
|||||||
|
|
||||||
const char *bmpgeterr(void);
|
const char *bmpgeterr(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
14
cderror.h
@@ -4,7 +4,8 @@
|
|||||||
* Copyright (C) 1994-1997, Thomas G. Lane.
|
* Copyright (C) 1994-1997, Thomas G. Lane.
|
||||||
* Modified 2009 by Guido Vollbeding.
|
* Modified 2009 by Guido Vollbeding.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* This file is part of the Independent JPEG Group's software.
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
|
* file.
|
||||||
*
|
*
|
||||||
* This file defines the error and message codes for the cjpeg/djpeg
|
* This file defines the error and message codes for the cjpeg/djpeg
|
||||||
* applications. These strings are not needed as part of the JPEG library
|
* applications. These strings are not needed as part of the JPEG library
|
||||||
@@ -33,7 +34,7 @@
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
||||||
#define JMESSAGE(code,string) code ,
|
#define JMESSAGE(code,string) code ,
|
||||||
|
|
||||||
#endif /* JMAKE_ENUM_LIST */
|
#endif /* JMAKE_ENUM_LIST */
|
||||||
|
|
||||||
@@ -62,7 +63,7 @@ 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")
|
||||||
JMESSAGE(JTRC_GIF_BADVERSION,
|
JMESSAGE(JTRC_GIF_BADVERSION,
|
||||||
"Warning: unexpected GIF version number '%c%c%c'")
|
"Warning: unexpected GIF version number '%c%c%c'")
|
||||||
JMESSAGE(JTRC_GIF_EXTENSION, "Ignoring GIF extension block of type 0x%02x")
|
JMESSAGE(JTRC_GIF_EXTENSION, "Ignoring GIF extension block of type 0x%02x")
|
||||||
JMESSAGE(JTRC_GIF_NONSQUARE, "Caution: nonsquare pixels in input")
|
JMESSAGE(JTRC_GIF_NONSQUARE, "Caution: nonsquare pixels in input")
|
||||||
JMESSAGE(JWRN_GIF_BADDATA, "Corrupt data in GIF file")
|
JMESSAGE(JWRN_GIF_BADDATA, "Corrupt data in GIF file")
|
||||||
@@ -74,6 +75,7 @@ JMESSAGE(JWRN_GIF_NOMOREDATA, "Ran out of GIF bits")
|
|||||||
#ifdef PPM_SUPPORTED
|
#ifdef PPM_SUPPORTED
|
||||||
JMESSAGE(JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB")
|
JMESSAGE(JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB")
|
||||||
JMESSAGE(JERR_PPM_NONNUMERIC, "Nonnumeric data in PPM file")
|
JMESSAGE(JERR_PPM_NONNUMERIC, "Nonnumeric data in PPM file")
|
||||||
|
JMESSAGE(JERR_PPM_TOOLARGE, "Integer value too large in PPM file")
|
||||||
JMESSAGE(JERR_PPM_NOT, "Not a PPM/PGM file")
|
JMESSAGE(JERR_PPM_NOT, "Not a PPM/PGM file")
|
||||||
JMESSAGE(JTRC_PGM, "%ux%u PGM image")
|
JMESSAGE(JTRC_PGM, "%ux%u PGM image")
|
||||||
JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image")
|
JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image")
|
||||||
@@ -110,13 +112,13 @@ JMESSAGE(JERR_TGA_NOTCOMP, "Targa support was not compiled")
|
|||||||
#endif /* TARGA_SUPPORTED */
|
#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")
|
||||||
JMESSAGE(JERR_TOO_MANY_COLORS,
|
JMESSAGE(JERR_TOO_MANY_COLORS,
|
||||||
"Output file format cannot handle %d colormap entries")
|
"Output file format cannot handle %d colormap entries")
|
||||||
JMESSAGE(JERR_UNGETC_FAILED, "ungetc failed")
|
JMESSAGE(JERR_UNGETC_FAILED, "ungetc failed")
|
||||||
#ifdef TARGA_SUPPORTED
|
#ifdef TARGA_SUPPORTED
|
||||||
JMESSAGE(JERR_UNKNOWN_FORMAT,
|
JMESSAGE(JERR_UNKNOWN_FORMAT,
|
||||||
"Unrecognized input file format --- perhaps you need -targa")
|
"Unrecognized input file format --- perhaps you need -targa")
|
||||||
#else
|
#else
|
||||||
JMESSAGE(JERR_UNKNOWN_FORMAT, "Unrecognized input file format")
|
JMESSAGE(JERR_UNKNOWN_FORMAT, "Unrecognized input file format")
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
79
cdjpeg.c
@@ -1,60 +1,23 @@
|
|||||||
/*
|
/*
|
||||||
* cdjpeg.c
|
* cdjpeg.c
|
||||||
*
|
*
|
||||||
|
* This file was part of the Independent JPEG Group's software:
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* It was modified by The libjpeg-turbo Project to include only code relevant
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* to libjpeg-turbo.
|
||||||
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
|
* file.
|
||||||
*
|
*
|
||||||
* This file contains common support routines used by the IJG application
|
* This file contains common support routines used by the IJG application
|
||||||
* programs (cjpeg, djpeg, jpegtran).
|
* programs (cjpeg, djpeg, jpegtran).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
|
||||||
#include <ctype.h> /* to declare isupper(), tolower() */
|
#include <ctype.h> /* to declare isupper(), tolower() */
|
||||||
#ifdef NEED_SIGNAL_CATCHER
|
|
||||||
#include <signal.h> /* to declare signal() */
|
|
||||||
#endif
|
|
||||||
#ifdef USE_SETMODE
|
#ifdef USE_SETMODE
|
||||||
#include <fcntl.h> /* to declare setmode()'s parameter macros */
|
#include <fcntl.h> /* to declare setmode()'s parameter macros */
|
||||||
/* If you have setmode() but not <io.h>, just delete this line: */
|
/* If you have setmode() but not <io.h>, just delete this line: */
|
||||||
#include <io.h> /* to declare setmode() */
|
#include <io.h> /* to declare setmode() */
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Signal catcher to ensure that temporary files are removed before aborting.
|
|
||||||
* NB: for Amiga Manx C this is actually a global routine named _abort();
|
|
||||||
* we put "#define signal_catcher _abort" in jconfig.h. Talk about bogus...
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef NEED_SIGNAL_CATCHER
|
|
||||||
|
|
||||||
static j_common_ptr sig_cinfo;
|
|
||||||
|
|
||||||
void /* must be global for Manx C */
|
|
||||||
signal_catcher (int signum)
|
|
||||||
{
|
|
||||||
if (sig_cinfo != NULL) {
|
|
||||||
if (sig_cinfo->err != NULL) /* turn off trace output */
|
|
||||||
sig_cinfo->err->trace_level = 0;
|
|
||||||
jpeg_destroy(sig_cinfo); /* clean up memory allocation & temp files */
|
|
||||||
}
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
GLOBAL(void)
|
|
||||||
enable_signal_catcher (j_common_ptr cinfo)
|
|
||||||
{
|
|
||||||
sig_cinfo = cinfo;
|
|
||||||
#ifdef SIGINT /* not all systems have SIGINT */
|
|
||||||
signal(SIGINT, signal_catcher);
|
|
||||||
#endif
|
|
||||||
#ifdef SIGTERM /* not all systems have SIGTERM */
|
|
||||||
signal(SIGTERM, signal_catcher);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@@ -75,8 +38,8 @@ progress_monitor (j_common_ptr cinfo)
|
|||||||
prog->percent_done = percent_done;
|
prog->percent_done = percent_done;
|
||||||
if (total_passes > 1) {
|
if (total_passes > 1) {
|
||||||
fprintf(stderr, "\rPass %d/%d: %3d%% ",
|
fprintf(stderr, "\rPass %d/%d: %3d%% ",
|
||||||
prog->pub.completed_passes + prog->completed_extra_passes + 1,
|
prog->pub.completed_passes + prog->completed_extra_passes + 1,
|
||||||
total_passes, percent_done);
|
total_passes, percent_done);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "\r %3d%% ", percent_done);
|
fprintf(stderr, "\r %3d%% ", percent_done);
|
||||||
}
|
}
|
||||||
@@ -119,24 +82,24 @@ end_progress_monitor (j_common_ptr cinfo)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
GLOBAL(boolean)
|
GLOBAL(boolean)
|
||||||
keymatch (char * arg, const char * keyword, int minchars)
|
keymatch (char *arg, const char *keyword, int minchars)
|
||||||
{
|
{
|
||||||
register int ca, ck;
|
register int ca, ck;
|
||||||
register int nmatched = 0;
|
register int nmatched = 0;
|
||||||
|
|
||||||
while ((ca = *arg++) != '\0') {
|
while ((ca = *arg++) != '\0') {
|
||||||
if ((ck = *keyword++) == '\0')
|
if ((ck = *keyword++) == '\0')
|
||||||
return FALSE; /* arg longer than keyword, no good */
|
return FALSE; /* arg longer than keyword, no good */
|
||||||
if (isupper(ca)) /* force arg to lcase (assume ck is already) */
|
if (isupper(ca)) /* force arg to lcase (assume ck is already) */
|
||||||
ca = tolower(ca);
|
ca = tolower(ca);
|
||||||
if (ca != ck)
|
if (ca != ck)
|
||||||
return FALSE; /* no good */
|
return FALSE; /* no good */
|
||||||
nmatched++; /* count matched characters */
|
nmatched++; /* count matched characters */
|
||||||
}
|
}
|
||||||
/* reached end of argument; fail if it's too short for unique abbrev */
|
/* reached end of argument; fail if it's too short for unique abbrev */
|
||||||
if (nmatched < minchars)
|
if (nmatched < minchars)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
return TRUE; /* A-OK */
|
return TRUE; /* A-OK */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -150,10 +113,10 @@ read_stdin (void)
|
|||||||
{
|
{
|
||||||
FILE * input_file = stdin;
|
FILE * input_file = stdin;
|
||||||
|
|
||||||
#ifdef USE_SETMODE /* need to hack file mode? */
|
#ifdef USE_SETMODE /* need to hack file mode? */
|
||||||
setmode(fileno(stdin), O_BINARY);
|
setmode(fileno(stdin), O_BINARY);
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_FDOPEN /* need to re-open in binary mode? */
|
#ifdef USE_FDOPEN /* need to re-open in binary mode? */
|
||||||
if ((input_file = fdopen(fileno(stdin), READ_BINARY)) == NULL) {
|
if ((input_file = fdopen(fileno(stdin), READ_BINARY)) == NULL) {
|
||||||
fprintf(stderr, "Cannot reopen stdin\n");
|
fprintf(stderr, "Cannot reopen stdin\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
@@ -168,10 +131,10 @@ write_stdout (void)
|
|||||||
{
|
{
|
||||||
FILE * output_file = stdout;
|
FILE * output_file = stdout;
|
||||||
|
|
||||||
#ifdef USE_SETMODE /* need to hack file mode? */
|
#ifdef USE_SETMODE /* need to hack file mode? */
|
||||||
setmode(fileno(stdout), O_BINARY);
|
setmode(fileno(stdout), O_BINARY);
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_FDOPEN /* need to re-open in binary mode? */
|
#ifdef USE_FDOPEN /* need to re-open in binary mode? */
|
||||||
if ((output_file = fdopen(fileno(stdout), WRITE_BINARY)) == NULL) {
|
if ((output_file = fdopen(fileno(stdout), WRITE_BINARY)) == NULL) {
|
||||||
fprintf(stderr, "Cannot reopen stdout\n");
|
fprintf(stderr, "Cannot reopen stdout\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
|||||||
160
cdjpeg.h
@@ -1,35 +1,35 @@
|
|||||||
/*
|
/*
|
||||||
* cdjpeg.h
|
* cdjpeg.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.
|
||||||
* This file is part of the Independent JPEG Group's software.
|
* libjpeg-turbo Modifications:
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* Copyright (C) 2017, D. R. Commander.
|
||||||
|
* 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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */
|
#define JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */
|
||||||
#define JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */
|
#define JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */
|
||||||
#include "jinclude.h"
|
#include "jinclude.h"
|
||||||
#include "jpeglib.h"
|
#include "jpeglib.h"
|
||||||
#include "jerror.h" /* get library error codes too */
|
#include "jerror.h" /* get library error codes too */
|
||||||
#include "cderror.h" /* get application-specific error codes */
|
#include "cderror.h" /* get application-specific error codes */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Object interface for cjpeg's source file decoding modules
|
* Object interface for cjpeg's source file decoding modules
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct cjpeg_source_struct * cjpeg_source_ptr;
|
typedef struct cjpeg_source_struct *cjpeg_source_ptr;
|
||||||
|
|
||||||
struct cjpeg_source_struct {
|
struct cjpeg_source_struct {
|
||||||
JMETHOD(void, start_input, (j_compress_ptr cinfo,
|
void (*start_input) (j_compress_ptr cinfo, cjpeg_source_ptr sinfo);
|
||||||
cjpeg_source_ptr sinfo));
|
JDIMENSION (*get_pixel_rows) (j_compress_ptr cinfo, cjpeg_source_ptr sinfo);
|
||||||
JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo,
|
void (*finish_input) (j_compress_ptr cinfo, cjpeg_source_ptr sinfo);
|
||||||
cjpeg_source_ptr sinfo));
|
|
||||||
JMETHOD(void, finish_input, (j_compress_ptr cinfo,
|
|
||||||
cjpeg_source_ptr sinfo));
|
|
||||||
|
|
||||||
FILE *input_file;
|
FILE *input_file;
|
||||||
|
|
||||||
@@ -42,24 +42,29 @@ struct cjpeg_source_struct {
|
|||||||
* Object interface for djpeg's output file encoding modules
|
* Object interface for djpeg's output file encoding modules
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct djpeg_dest_struct * djpeg_dest_ptr;
|
typedef struct djpeg_dest_struct *djpeg_dest_ptr;
|
||||||
|
|
||||||
struct djpeg_dest_struct {
|
struct djpeg_dest_struct {
|
||||||
/* start_output is called after jpeg_start_decompress finishes.
|
/* start_output is called after jpeg_start_decompress finishes.
|
||||||
* The color map will be ready at this time, if one is needed.
|
* The color map will be ready at this time, if one is needed.
|
||||||
*/
|
*/
|
||||||
JMETHOD(void, start_output, (j_decompress_ptr cinfo,
|
void (*start_output) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo);
|
||||||
djpeg_dest_ptr dinfo));
|
|
||||||
/* Emit the specified number of pixel rows from the buffer. */
|
/* Emit the specified number of pixel rows from the buffer. */
|
||||||
JMETHOD(void, put_pixel_rows, (j_decompress_ptr cinfo,
|
void (*put_pixel_rows) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo,
|
||||||
djpeg_dest_ptr dinfo,
|
JDIMENSION rows_supplied);
|
||||||
JDIMENSION rows_supplied));
|
|
||||||
/* Finish up at the end of the image. */
|
/* Finish up at the end of the image. */
|
||||||
JMETHOD(void, finish_output, (j_decompress_ptr cinfo,
|
void (*finish_output) (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo);
|
||||||
djpeg_dest_ptr dinfo));
|
/* Re-calculate buffer dimensions based on output dimensions (for use with
|
||||||
|
partial image decompression.) If this is NULL, then the output format
|
||||||
|
does not support partial image decompression (BMP and RLE, in particular,
|
||||||
|
cannot support partial decompression because they use an inversion buffer
|
||||||
|
to write the image in bottom-up order.) */
|
||||||
|
void (*calc_buffer_dimensions) (j_decompress_ptr cinfo,
|
||||||
|
djpeg_dest_ptr dinfo);
|
||||||
|
|
||||||
|
|
||||||
/* Target file spec; filled in by djpeg.c after object is created. */
|
/* Target file spec; filled in by djpeg.c after object is created. */
|
||||||
FILE * output_file;
|
FILE *output_file;
|
||||||
|
|
||||||
/* Output pixel-row buffer. Created by module init or start_output.
|
/* Output pixel-row buffer. Created by module init or start_output.
|
||||||
* Width is cinfo->output_width * cinfo->output_components;
|
* Width is cinfo->output_width * cinfo->output_components;
|
||||||
@@ -79,109 +84,70 @@ struct djpeg_dest_struct {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
struct cdjpeg_progress_mgr {
|
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 */
|
||||||
/* last printed percentage stored here to avoid multiple printouts */
|
/* last printed percentage stored here to avoid multiple printouts */
|
||||||
int percent_done;
|
int percent_done;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct cdjpeg_progress_mgr * cd_progress_ptr;
|
typedef struct cdjpeg_progress_mgr *cd_progress_ptr;
|
||||||
|
|
||||||
|
|
||||||
/* Short forms of external names for systems with brain-damaged linkers. */
|
|
||||||
|
|
||||||
#ifdef NEED_SHORT_EXTERNAL_NAMES
|
|
||||||
#define jinit_read_bmp jIRdBMP
|
|
||||||
#define jinit_write_bmp jIWrBMP
|
|
||||||
#define jinit_read_gif jIRdGIF
|
|
||||||
#define jinit_write_gif jIWrGIF
|
|
||||||
#define jinit_read_ppm jIRdPPM
|
|
||||||
#define jinit_write_ppm jIWrPPM
|
|
||||||
#define jinit_read_rle jIRdRLE
|
|
||||||
#define jinit_write_rle jIWrRLE
|
|
||||||
#define jinit_read_targa jIRdTarga
|
|
||||||
#define jinit_write_targa jIWrTarga
|
|
||||||
#define read_quant_tables RdQTables
|
|
||||||
#define read_scan_script RdScnScript
|
|
||||||
#define set_quality_ratings SetQRates
|
|
||||||
#define set_quant_slots SetQSlots
|
|
||||||
#define set_sample_factors SetSFacts
|
|
||||||
#define read_color_map RdCMap
|
|
||||||
#define enable_signal_catcher EnSigCatcher
|
|
||||||
#define start_progress_monitor StProgMon
|
|
||||||
#define end_progress_monitor EnProgMon
|
|
||||||
#define read_stdin RdStdin
|
|
||||||
#define write_stdout WrStdout
|
|
||||||
#endif /* NEED_SHORT_EXTERNAL_NAMES */
|
|
||||||
|
|
||||||
/* Module selection routines for I/O modules. */
|
/* Module selection routines for I/O modules. */
|
||||||
|
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_bmp JPP((j_compress_ptr cinfo));
|
EXTERN(cjpeg_source_ptr) jinit_read_bmp (j_compress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_bmp JPP((j_decompress_ptr cinfo,
|
EXTERN(djpeg_dest_ptr) jinit_write_bmp (j_decompress_ptr cinfo,
|
||||||
boolean is_os2));
|
boolean is_os2);
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_gif JPP((j_compress_ptr cinfo));
|
EXTERN(cjpeg_source_ptr) jinit_read_gif (j_compress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_gif JPP((j_decompress_ptr cinfo));
|
EXTERN(djpeg_dest_ptr) jinit_write_gif (j_decompress_ptr cinfo);
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_ppm JPP((j_compress_ptr cinfo));
|
EXTERN(cjpeg_source_ptr) jinit_read_ppm (j_compress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_ppm JPP((j_decompress_ptr cinfo));
|
EXTERN(djpeg_dest_ptr) jinit_write_ppm (j_decompress_ptr cinfo);
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_rle JPP((j_compress_ptr cinfo));
|
EXTERN(cjpeg_source_ptr) jinit_read_rle (j_compress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_rle JPP((j_decompress_ptr cinfo));
|
EXTERN(djpeg_dest_ptr) jinit_write_rle (j_decompress_ptr cinfo);
|
||||||
EXTERN(cjpeg_source_ptr) jinit_read_targa JPP((j_compress_ptr cinfo));
|
EXTERN(cjpeg_source_ptr) jinit_read_targa (j_compress_ptr cinfo);
|
||||||
EXTERN(djpeg_dest_ptr) jinit_write_targa JPP((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 JPP((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 JPP((j_compress_ptr cinfo, char * filename));
|
EXTERN(boolean) read_scan_script (j_compress_ptr cinfo, char *filename);
|
||||||
EXTERN(boolean) set_quality_ratings JPP((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 JPP((j_compress_ptr cinfo, char *arg));
|
EXTERN(boolean) set_quant_slots (j_compress_ptr cinfo, char *arg);
|
||||||
EXTERN(boolean) set_sample_factors JPP((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 JPP((j_decompress_ptr cinfo, FILE * infile));
|
EXTERN(void) read_color_map (j_decompress_ptr cinfo, FILE *infile);
|
||||||
|
|
||||||
/* common support routines (in cdjpeg.c) */
|
/* common support routines (in cdjpeg.c) */
|
||||||
|
|
||||||
EXTERN(void) enable_signal_catcher JPP((j_common_ptr cinfo));
|
EXTERN(void) enable_signal_catcher (j_common_ptr cinfo);
|
||||||
EXTERN(void) start_progress_monitor JPP((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 JPP((j_common_ptr cinfo));
|
EXTERN(void) end_progress_monitor (j_common_ptr cinfo);
|
||||||
EXTERN(boolean) keymatch JPP((char * arg, const char * keyword, int minchars));
|
EXTERN(boolean) keymatch (char *arg, const char *keyword, int minchars);
|
||||||
EXTERN(FILE *) read_stdin JPP((void));
|
EXTERN(FILE *) read_stdin (void);
|
||||||
EXTERN(FILE *) write_stdout JPP((void));
|
EXTERN(FILE *) write_stdout (void);
|
||||||
|
|
||||||
/* miscellaneous useful macros */
|
/* miscellaneous useful macros */
|
||||||
|
|
||||||
#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */
|
#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */
|
||||||
#define READ_BINARY "r"
|
#define READ_BINARY "r"
|
||||||
#define WRITE_BINARY "w"
|
#define WRITE_BINARY "w"
|
||||||
#else
|
#else
|
||||||
#ifdef VMS /* VMS is very nonstandard */
|
#define READ_BINARY "rb"
|
||||||
#define READ_BINARY "rb", "ctx=stm"
|
#define WRITE_BINARY "wb"
|
||||||
#define WRITE_BINARY "wb", "ctx=stm"
|
|
||||||
#else /* standard ANSI-compliant case */
|
|
||||||
#define READ_BINARY "rb"
|
|
||||||
#define WRITE_BINARY "wb"
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef EXIT_FAILURE /* define exit() codes if not provided */
|
#ifndef EXIT_FAILURE /* define exit() codes if not provided */
|
||||||
#define EXIT_FAILURE 1
|
#define EXIT_FAILURE 1
|
||||||
#endif
|
#endif
|
||||||
#ifndef EXIT_SUCCESS
|
#ifndef EXIT_SUCCESS
|
||||||
#ifdef VMS
|
|
||||||
#define EXIT_SUCCESS 1 /* VMS is very nonstandard */
|
|
||||||
#else
|
|
||||||
#define EXIT_SUCCESS 0
|
#define EXIT_SUCCESS 0
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
#ifndef EXIT_WARNING
|
#ifndef EXIT_WARNING
|
||||||
#ifdef VMS
|
|
||||||
#define EXIT_WARNING 1 /* VMS is very nonstandard */
|
|
||||||
#else
|
|
||||||
#define EXIT_WARNING 2
|
#define EXIT_WARNING 2
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|||||||
23
change.log
@@ -1,9 +1,28 @@
|
|||||||
NOTE: This file was modified by The libjpeg-turbo Project to include only
|
libjpeg-turbo note: This file has been modified by The libjpeg-turbo Project
|
||||||
information relevant to libjpeg-turbo.
|
to include only information relevant to libjpeg-turbo. It is included only for
|
||||||
|
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 9b 17-Jan-2016
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Document 'f' specifier for jpegtran -crop specification.
|
||||||
|
Thank to Michele Martone for suggestion.
|
||||||
|
|
||||||
|
|
||||||
|
Version 9 13-Jan-2013
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Add remark for jpeg_mem_dest() in jdatadst.c.
|
||||||
|
Thank to Elie-Gregoire Khoury for the hint.
|
||||||
|
|
||||||
|
Correct argument type in format string, avoid compiler warnings.
|
||||||
|
Thank to Vincent Torri for hint.
|
||||||
|
|
||||||
|
|
||||||
Version 8d 15-Jan-2012
|
Version 8d 15-Jan-2012
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
|
|||||||
BIN
ci/keys.enc
Normal file
49
cjpeg.1
@@ -1,4 +1,4 @@
|
|||||||
.TH CJPEG 1 "18 January 2013"
|
.TH CJPEG 1 "18 March 2017"
|
||||||
.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,7 +16,7 @@ cjpeg \- compress an image file to a JPEG file
|
|||||||
compresses the named image file, or the standard input if no file is
|
compresses the named image file, or the standard input if no file is
|
||||||
named, and produces a JPEG/JFIF file on the standard output.
|
named, and produces a JPEG/JFIF file on the standard output.
|
||||||
The currently supported input file formats are: PPM (PBMPLUS color
|
The currently supported input file formats are: PPM (PBMPLUS color
|
||||||
format), PGM (PBMPLUS gray-scale format), BMP, Targa, and RLE (Utah Raster
|
format), PGM (PBMPLUS grayscale format), BMP, Targa, and RLE (Utah Raster
|
||||||
Toolkit format). (RLE is supported only if the URT library is available.)
|
Toolkit format). (RLE is supported only if the URT library is available.)
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
All switch names may be abbreviated; for example,
|
All switch names may be abbreviated; for example,
|
||||||
@@ -85,8 +85,8 @@ reconstructed image: the higher the quality setting, the larger the JPEG file,
|
|||||||
and the closer the output image will be to the original input. Normally you
|
and the closer the output image will be to the original input. Normally you
|
||||||
want to use the lowest quality setting (smallest file) that decompresses into
|
want to use the lowest quality setting (smallest file) that decompresses into
|
||||||
something visually indistinguishable from the original image. For this
|
something visually indistinguishable from the original image. For this
|
||||||
purpose the quality setting should be between 50 and 95; the default of 75 is
|
purpose the quality setting should generally be between 50 and 95 (the default
|
||||||
often about right. If you see defects at
|
is 75) for photographic images. If you see defects at
|
||||||
.B \-quality
|
.B \-quality
|
||||||
75, then go up 5 or 10 counts at a time until you are happy with the output
|
75, then go up 5 or 10 counts at a time until you are happy with the output
|
||||||
image. (The optimal setting will vary from one image to another.)
|
image. (The optimal setting will vary from one image to another.)
|
||||||
@@ -94,11 +94,10 @@ image. (The optimal setting will vary from one image to another.)
|
|||||||
.B \-quality
|
.B \-quality
|
||||||
100 will generate a quantization table of all 1's, minimizing loss in the
|
100 will generate a quantization table of all 1's, minimizing loss in the
|
||||||
quantization step (but there is still information loss in subsampling, as well
|
quantization step (but there is still information loss in subsampling, as well
|
||||||
as roundoff error). This setting is mainly of interest for experimental
|
as roundoff error.) For most images, specifying a quality value above
|
||||||
purposes. Quality values above about 95 are
|
about 95 will increase the size of the compressed file dramatically, and while
|
||||||
.B not
|
the quality gain from these higher quality values is measurable (using metrics
|
||||||
recommended for normal use; the compressed file size goes up dramatically for
|
such as PSNR or SSIM), it is rarely perceivable by human vision.
|
||||||
hardly any gain in output image quality.
|
|
||||||
.PP
|
.PP
|
||||||
In the other direction, quality values below 50 will produce very small files
|
In the other direction, quality values below 50 will produce very small files
|
||||||
of low image quality. Settings around 5 to 10 might be useful in preparing an
|
of low image quality. Settings around 5 to 10 might be useful in preparing an
|
||||||
@@ -166,14 +165,27 @@ Use integer DCT method (default).
|
|||||||
.TP
|
.TP
|
||||||
.B \-dct fast
|
.B \-dct fast
|
||||||
Use fast integer DCT (less accurate).
|
Use fast integer DCT (less accurate).
|
||||||
|
In libjpeg-turbo, the fast method is generally about 5-15% faster than the int
|
||||||
|
method when using the x86/x86-64 SIMD extensions (results may vary with other
|
||||||
|
SIMD implementations, or when using libjpeg-turbo without SIMD extensions.)
|
||||||
|
For quality levels of 90 and below, there should be little or no perceptible
|
||||||
|
difference between the two algorithms. For quality levels above 90, however,
|
||||||
|
the difference between the fast and the int methods becomes more pronounced.
|
||||||
|
With quality=97, for instance, the fast method incurs generally about a 1-3 dB
|
||||||
|
loss (in PSNR) relative to the int method, but this can be larger for some
|
||||||
|
images. Do not use the fast method with quality levels above 97. The
|
||||||
|
algorithm often degenerates at quality=98 and above and can actually produce a
|
||||||
|
more lossy image than if lower quality levels had been used. Also, in
|
||||||
|
libjpeg-turbo, the fast method is not fully accelerated for quality levels
|
||||||
|
above 97, so it will be slower than the int method.
|
||||||
.TP
|
.TP
|
||||||
.B \-dct float
|
.B \-dct float
|
||||||
Use floating-point DCT method.
|
Use floating-point DCT method.
|
||||||
The float method is very slightly more accurate than the int method, but is
|
The float method is mainly a legacy feature. It does not produce significantly
|
||||||
much slower unless your machine has very fast floating-point hardware. Also
|
more accurate results than the int method, and it is much slower. The float
|
||||||
note that results of the floating-point method may vary slightly across
|
method may also give different results on different machines due to varying
|
||||||
machines, while the integer methods should give the same results everywhere.
|
roundoff behavior, whereas the integer methods should give the same results on
|
||||||
The fast integer method is much less accurate than the other two.
|
all machines.
|
||||||
.TP
|
.TP
|
||||||
.BI \-restart " N"
|
.BI \-restart " N"
|
||||||
Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is
|
Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is
|
||||||
@@ -190,7 +202,7 @@ Set limit for amount of memory to use in processing large images. Value is
|
|||||||
in thousands of bytes, or millions of bytes if "M" is attached to the
|
in thousands of bytes, or millions of bytes if "M" is attached to the
|
||||||
number. For example,
|
number. For example,
|
||||||
.B \-max 4m
|
.B \-max 4m
|
||||||
selects 4000000 bytes. If more space is needed, temporary files will be used.
|
selects 4000000 bytes. If more space is needed, an error will occur.
|
||||||
.TP
|
.TP
|
||||||
.BI \-outfile " name"
|
.BI \-outfile " name"
|
||||||
Send output image to the named file, not to standard output.
|
Send output image to the named file, not to standard output.
|
||||||
@@ -208,6 +220,9 @@ give more output. Also, version information is printed at startup.
|
|||||||
.B \-debug
|
.B \-debug
|
||||||
Same as
|
Same as
|
||||||
.BR \-verbose .
|
.BR \-verbose .
|
||||||
|
.TP
|
||||||
|
.B \-version
|
||||||
|
Print version information and exit.
|
||||||
.PP
|
.PP
|
||||||
The
|
The
|
||||||
.B \-restart
|
.B \-restart
|
||||||
@@ -322,11 +337,11 @@ 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 BUGS
|
.SH ISSUES
|
||||||
Support for GIF input files was removed in cjpeg v6b due to concerns over
|
Support for GIF input files was removed in cjpeg v6b due to concerns over
|
||||||
the Unisys LZW patent. Although this patent expired in 2006, cjpeg still
|
the Unisys LZW patent. Although this patent expired in 2006, cjpeg still
|
||||||
lacks GIF support, for these historical reasons. (Conversion of GIF files to
|
lacks GIF support, for these historical reasons. (Conversion of GIF files to
|
||||||
JPEG is usually a bad idea anyway.)
|
JPEG is usually a bad idea anyway, since GIF is a 256-color format.)
|
||||||
.PP
|
.PP
|
||||||
Not all variants of BMP and Targa file formats are supported.
|
Not all variants of BMP and Targa file formats are supported.
|
||||||
.PP
|
.PP
|
||||||
|
|||||||
211
cjpeg.c
@@ -4,17 +4,18 @@
|
|||||||
* 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.
|
||||||
* Modifications:
|
* libjpeg-turbo Modifications:
|
||||||
* Copyright (C) 2010, 2013, D. R. Commander.
|
* Copyright (C) 2010, 2013-2014, 2017, D. R. Commander.
|
||||||
* 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.
|
||||||
*
|
*
|
||||||
* Two different command line styles are permitted, depending on the
|
* Two different command line styles are permitted, depending on the
|
||||||
* compile-time switch TWO_FILE_COMMANDLINE:
|
* compile-time switch TWO_FILE_COMMANDLINE:
|
||||||
* cjpeg [options] inputfile outputfile
|
* cjpeg [options] inputfile outputfile
|
||||||
* cjpeg [options] [inputfile]
|
* cjpeg [options] [inputfile]
|
||||||
* In the second style, output is always to standard output, which you'd
|
* In the second style, output is always to standard output, which you'd
|
||||||
* normally redirect to a file or pipe to some other program. Input is
|
* normally redirect to a file or pipe to some other program. Input is
|
||||||
* either from a named file or from standard input (typically redirected).
|
* either from a named file or from standard input (typically redirected).
|
||||||
@@ -22,28 +23,28 @@
|
|||||||
* don't support pipes. Also, you MUST use the first style if your system
|
* don't support pipes. Also, you MUST use the first style if your system
|
||||||
* doesn't do binary I/O to stdin/stdout.
|
* doesn't do binary I/O to stdin/stdout.
|
||||||
* To simplify script writing, the "-outfile" switch is provided. The syntax
|
* To simplify script writing, the "-outfile" switch is provided. The syntax
|
||||||
* cjpeg [options] -outfile outputfile inputfile
|
* cjpeg [options] -outfile outputfile inputfile
|
||||||
* works regardless of which command line style is used.
|
* works regardless of which command line style is used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#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 "config.h"
|
#include "jconfigint.h"
|
||||||
|
|
||||||
#ifdef USE_CCOMMAND /* command-line reader for Macintosh */
|
#ifdef USE_CCOMMAND /* command-line reader for Macintosh */
|
||||||
#ifdef __MWERKS__
|
#ifdef __MWERKS__
|
||||||
#include <SIOUX.h> /* Metrowerks needs this */
|
#include <SIOUX.h> /* Metrowerks needs this */
|
||||||
#include <console.h> /* ... and this */
|
#include <console.h> /* ... and this */
|
||||||
#endif
|
#endif
|
||||||
#ifdef THINK_C
|
#ifdef THINK_C
|
||||||
#include <console.h> /* Think declares it here */
|
#include <console.h> /* Think declares it here */
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Create the add-on message string table. */
|
/* Create the add-on message string table. */
|
||||||
|
|
||||||
#define JMESSAGE(code,string) string ,
|
#define JMESSAGE(code,string) string ,
|
||||||
|
|
||||||
static const char * const cdjpeg_message_table[] = {
|
static const char * const cdjpeg_message_table[] = {
|
||||||
#include "cderror.h"
|
#include "cderror.h"
|
||||||
@@ -77,11 +78,11 @@ static const char * const cdjpeg_message_table[] = {
|
|||||||
* seldom-used ID field), so we provide a switch to force Targa input mode.
|
* seldom-used ID field), so we provide a switch to force Targa input mode.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static boolean is_targa; /* records user -targa switch */
|
static boolean is_targa; /* records user -targa switch */
|
||||||
|
|
||||||
|
|
||||||
LOCAL(cjpeg_source_ptr)
|
LOCAL(cjpeg_source_ptr)
|
||||||
select_file_type (j_compress_ptr cinfo, FILE * infile)
|
select_file_type (j_compress_ptr cinfo, FILE *infile)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
@@ -124,7 +125,7 @@ select_file_type (j_compress_ptr cinfo, FILE * infile)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL; /* suppress compiler warnings */
|
return NULL; /* suppress compiler warnings */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -137,9 +138,9 @@ select_file_type (j_compress_ptr cinfo, FILE * infile)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
static const char * progname; /* program name for error messages */
|
static const char *progname; /* program name for error messages */
|
||||||
static char * outfilename; /* for -outfile switch */
|
static char *outfilename; /* for -outfile switch */
|
||||||
boolean memdst; /* for -memdst switch */
|
boolean memdst; /* for -memdst switch */
|
||||||
|
|
||||||
|
|
||||||
LOCAL(void)
|
LOCAL(void)
|
||||||
@@ -154,7 +155,8 @@ usage (void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
fprintf(stderr, "Switches (names may be abbreviated):\n");
|
fprintf(stderr, "Switches (names may be abbreviated):\n");
|
||||||
fprintf(stderr, " -quality N[,...] Compression quality (0..100; 5-95 is useful range)\n");
|
fprintf(stderr, " -quality N[,...] Compression quality (0..100; 5-95 is most useful range,\n");
|
||||||
|
fprintf(stderr, " default is 75)\n");
|
||||||
fprintf(stderr, " -grayscale Create monochrome JPEG file\n");
|
fprintf(stderr, " -grayscale Create monochrome JPEG file\n");
|
||||||
fprintf(stderr, " -rgb Create RGB JPEG file\n");
|
fprintf(stderr, " -rgb Create RGB JPEG file\n");
|
||||||
#ifdef ENTROPY_OPT_SUPPORTED
|
#ifdef ENTROPY_OPT_SUPPORTED
|
||||||
@@ -172,15 +174,15 @@ usage (void)
|
|||||||
#endif
|
#endif
|
||||||
#ifdef DCT_ISLOW_SUPPORTED
|
#ifdef DCT_ISLOW_SUPPORTED
|
||||||
fprintf(stderr, " -dct int Use integer DCT method%s\n",
|
fprintf(stderr, " -dct int Use integer DCT method%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_IFAST_SUPPORTED
|
#ifdef DCT_IFAST_SUPPORTED
|
||||||
fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n",
|
fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_FLOAT_SUPPORTED
|
#ifdef DCT_FLOAT_SUPPORTED
|
||||||
fprintf(stderr, " -dct float Use floating-point DCT method%s\n",
|
fprintf(stderr, " -dct float Use floating-point DCT method%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
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
|
||||||
@@ -192,13 +194,14 @@ usage (void)
|
|||||||
fprintf(stderr, " -memdst Compress to memory instead of file (useful for benchmarking)\n");
|
fprintf(stderr, " -memdst Compress to memory instead of file (useful for benchmarking)\n");
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, " -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, "Switches for wizards:\n");
|
fprintf(stderr, "Switches for wizards:\n");
|
||||||
fprintf(stderr, " -baseline Force baseline quantization tables\n");
|
fprintf(stderr, " -baseline Force baseline quantization tables\n");
|
||||||
fprintf(stderr, " -qtables file Use quantization tables given in file\n");
|
fprintf(stderr, " -qtables FILE Use quantization tables given in FILE\n");
|
||||||
fprintf(stderr, " -qslots N[,...] Set component quantization tables\n");
|
fprintf(stderr, " -qslots N[,...] Set component quantization tables\n");
|
||||||
fprintf(stderr, " -sample HxV[,...] Set component sampling factors\n");
|
fprintf(stderr, " -sample HxV[,...] Set component sampling factors\n");
|
||||||
#ifdef C_MULTISCAN_FILES_SUPPORTED
|
#ifdef C_MULTISCAN_FILES_SUPPORTED
|
||||||
fprintf(stderr, " -scans file Create multi-scan JPEG per script file\n");
|
fprintf(stderr, " -scans FILE Create multi-scan JPEG per script FILE\n");
|
||||||
#endif
|
#endif
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@@ -206,7 +209,7 @@ usage (void)
|
|||||||
|
|
||||||
LOCAL(int)
|
LOCAL(int)
|
||||||
parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
||||||
int last_file_arg_seen, boolean for_real)
|
int last_file_arg_seen, boolean for_real)
|
||||||
/* Parse optional switches.
|
/* Parse optional switches.
|
||||||
* Returns argv[] index of first file-name argument (== argc if none).
|
* Returns argv[] index of first file-name argument (== argc if none).
|
||||||
* Any file names with indexes <= last_file_arg_seen are ignored;
|
* Any file names with indexes <= last_file_arg_seen are ignored;
|
||||||
@@ -217,18 +220,18 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
int argn;
|
int argn;
|
||||||
char * arg;
|
char *arg;
|
||||||
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 */
|
||||||
char * qtablefile = NULL; /* saves -qtables filename if any */
|
char *qtablefile = NULL; /* saves -qtables filename if any */
|
||||||
char * qslotsarg = NULL; /* saves -qslots parm if any */
|
char *qslotsarg = NULL; /* saves -qslots parm if any */
|
||||||
char * samplearg = NULL; /* saves -sample parm if any */
|
char *samplearg = NULL; /* saves -sample parm if any */
|
||||||
char * scansarg = NULL; /* saves -scans parm if any */
|
char *scansarg = NULL; /* saves -scans parm if any */
|
||||||
|
|
||||||
/* Set up default JPEG parameters. */
|
/* Set up default JPEG parameters. */
|
||||||
|
|
||||||
force_baseline = FALSE; /* by default, allow 16-bit quantizers */
|
force_baseline = FALSE; /* by default, allow 16-bit quantizers */
|
||||||
simple_progressive = FALSE;
|
simple_progressive = FALSE;
|
||||||
is_targa = FALSE;
|
is_targa = FALSE;
|
||||||
outfilename = NULL;
|
outfilename = NULL;
|
||||||
@@ -242,12 +245,12 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
if (*arg != '-') {
|
if (*arg != '-') {
|
||||||
/* Not a switch, must be a file name argument */
|
/* Not a switch, must be a file name argument */
|
||||||
if (argn <= last_file_arg_seen) {
|
if (argn <= last_file_arg_seen) {
|
||||||
outfilename = NULL; /* -outfile applies to just one input file */
|
outfilename = NULL; /* -outfile applies to just one input file */
|
||||||
continue; /* ignore this name if previously processed */
|
continue; /* ignore this name if previously processed */
|
||||||
}
|
}
|
||||||
break; /* else done parsing switches */
|
break; /* else done parsing switches */
|
||||||
}
|
}
|
||||||
arg++; /* advance past switch marker character */
|
arg++; /* advance past switch marker character */
|
||||||
|
|
||||||
if (keymatch(arg, "arithmetic", 1)) {
|
if (keymatch(arg, "arithmetic", 1)) {
|
||||||
/* Use arithmetic coding. */
|
/* Use arithmetic coding. */
|
||||||
@@ -255,7 +258,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
cinfo->arith_code = TRUE;
|
cinfo->arith_code = TRUE;
|
||||||
#else
|
#else
|
||||||
fprintf(stderr, "%s: sorry, arithmetic coding not supported\n",
|
fprintf(stderr, "%s: sorry, arithmetic coding not supported\n",
|
||||||
progname);
|
progname);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -265,16 +268,16 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
|
|
||||||
} else if (keymatch(arg, "dct", 2)) {
|
} else if (keymatch(arg, "dct", 2)) {
|
||||||
/* Select DCT algorithm. */
|
/* Select DCT algorithm. */
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
if (keymatch(argv[argn], "int", 1)) {
|
if (keymatch(argv[argn], "int", 1)) {
|
||||||
cinfo->dct_method = JDCT_ISLOW;
|
cinfo->dct_method = JDCT_ISLOW;
|
||||||
} else if (keymatch(argv[argn], "fast", 2)) {
|
} else if (keymatch(argv[argn], "fast", 2)) {
|
||||||
cinfo->dct_method = JDCT_IFAST;
|
cinfo->dct_method = JDCT_IFAST;
|
||||||
} else if (keymatch(argv[argn], "float", 2)) {
|
} else if (keymatch(argv[argn], "float", 2)) {
|
||||||
cinfo->dct_method = JDCT_FLOAT;
|
cinfo->dct_method = JDCT_FLOAT;
|
||||||
} else
|
} else
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
} else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) {
|
} else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) {
|
||||||
/* Enable debug printouts. */
|
/* Enable debug printouts. */
|
||||||
@@ -282,15 +285,20 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
static boolean printed_version = FALSE;
|
static boolean printed_version = FALSE;
|
||||||
|
|
||||||
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, "%s\n\n", JCOPYRIGHT);
|
||||||
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;
|
||||||
}
|
}
|
||||||
cinfo->err->trace_level++;
|
cinfo->err->trace_level++;
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "version", 4)) {
|
||||||
|
fprintf(stderr, "%s version %s (build %s)\n",
|
||||||
|
PACKAGE_NAME, VERSION, BUILD);
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
|
||||||
} else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) {
|
} else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) {
|
||||||
/* Force a monochrome JPEG file to be generated. */
|
/* Force a monochrome JPEG file to be generated. */
|
||||||
jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
|
jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
|
||||||
@@ -304,12 +312,12 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
long lval;
|
long lval;
|
||||||
char ch = 'x';
|
char ch = 'x';
|
||||||
|
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1)
|
if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1)
|
||||||
usage();
|
usage();
|
||||||
if (ch == 'm' || ch == 'M')
|
if (ch == 'm' || ch == 'M')
|
||||||
lval *= 1000L;
|
lval *= 1000L;
|
||||||
cinfo->mem->max_memory_to_use = lval * 1000L;
|
cinfo->mem->max_memory_to_use = lval * 1000L;
|
||||||
|
|
||||||
} else if (keymatch(arg, "optimize", 1) || keymatch(arg, "optimise", 1)) {
|
} else if (keymatch(arg, "optimize", 1) || keymatch(arg, "optimise", 1)) {
|
||||||
@@ -318,15 +326,15 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
cinfo->optimize_coding = TRUE;
|
cinfo->optimize_coding = TRUE;
|
||||||
#else
|
#else
|
||||||
fprintf(stderr, "%s: sorry, entropy optimization was not compiled in\n",
|
fprintf(stderr, "%s: sorry, entropy optimization was not compiled in\n",
|
||||||
progname);
|
progname);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} else if (keymatch(arg, "outfile", 4)) {
|
} else if (keymatch(arg, "outfile", 4)) {
|
||||||
/* Set output file name. */
|
/* Set output file name. */
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
outfilename = argv[argn]; /* save it away for later use */
|
outfilename = argv[argn]; /* save it away for later use */
|
||||||
|
|
||||||
} else if (keymatch(arg, "progressive", 1)) {
|
} else if (keymatch(arg, "progressive", 1)) {
|
||||||
/* Select simple progressive mode. */
|
/* Select simple progressive mode. */
|
||||||
@@ -335,7 +343,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
/* We must postpone execution until num_components is known. */
|
/* We must postpone execution until num_components is known. */
|
||||||
#else
|
#else
|
||||||
fprintf(stderr, "%s: sorry, progressive output was not compiled in\n",
|
fprintf(stderr, "%s: sorry, progressive output was not compiled in\n",
|
||||||
progname);
|
progname);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -351,14 +359,14 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
|
|
||||||
} else if (keymatch(arg, "quality", 1)) {
|
} else if (keymatch(arg, "quality", 1)) {
|
||||||
/* Quality ratings (quantization table scaling factors). */
|
/* Quality ratings (quantization table scaling factors). */
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
qualityarg = argv[argn];
|
qualityarg = argv[argn];
|
||||||
|
|
||||||
} else if (keymatch(arg, "qslots", 2)) {
|
} else if (keymatch(arg, "qslots", 2)) {
|
||||||
/* Quantization table slot numbers. */
|
/* Quantization table slot numbers. */
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
qslotsarg = argv[argn];
|
qslotsarg = argv[argn];
|
||||||
/* Must delay setting qslots until after we have processed any
|
/* Must delay setting qslots until after we have processed any
|
||||||
* colorspace-determining switches, since jpeg_set_colorspace sets
|
* colorspace-determining switches, since jpeg_set_colorspace sets
|
||||||
@@ -367,8 +375,8 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
|
|
||||||
} else if (keymatch(arg, "qtables", 2)) {
|
} else if (keymatch(arg, "qtables", 2)) {
|
||||||
/* Quantization tables fetched from file. */
|
/* Quantization tables fetched from file. */
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
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. */
|
||||||
|
|
||||||
@@ -377,24 +385,24 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
long lval;
|
long lval;
|
||||||
char ch = 'x';
|
char ch = 'x';
|
||||||
|
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1)
|
if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1)
|
||||||
usage();
|
usage();
|
||||||
if (lval < 0 || lval > 65535L)
|
if (lval < 0 || lval > 65535L)
|
||||||
usage();
|
usage();
|
||||||
if (ch == 'b' || ch == 'B') {
|
if (ch == 'b' || ch == 'B') {
|
||||||
cinfo->restart_interval = (unsigned int) lval;
|
cinfo->restart_interval = (unsigned int) lval;
|
||||||
cinfo->restart_in_rows = 0; /* else prior '-restart n' overrides me */
|
cinfo->restart_in_rows = 0; /* else prior '-restart n' overrides me */
|
||||||
} else {
|
} else {
|
||||||
cinfo->restart_in_rows = (int) lval;
|
cinfo->restart_in_rows = (int) lval;
|
||||||
/* restart_interval will be computed during startup */
|
/* restart_interval will be computed during startup */
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (keymatch(arg, "sample", 2)) {
|
} else if (keymatch(arg, "sample", 2)) {
|
||||||
/* Set sampling factors. */
|
/* Set sampling factors. */
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
samplearg = argv[argn];
|
samplearg = argv[argn];
|
||||||
/* Must delay setting sample factors until after we have processed any
|
/* Must delay setting sample factors until after we have processed any
|
||||||
* colorspace-determining switches, since jpeg_set_colorspace sets
|
* colorspace-determining switches, since jpeg_set_colorspace sets
|
||||||
@@ -404,13 +412,13 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
} else if (keymatch(arg, "scans", 4)) {
|
} else if (keymatch(arg, "scans", 4)) {
|
||||||
/* 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 */
|
||||||
usage();
|
usage();
|
||||||
scansarg = argv[argn];
|
scansarg = argv[argn];
|
||||||
/* We must postpone reading the file in case -progressive appears. */
|
/* We must postpone reading the file in case -progressive appears. */
|
||||||
#else
|
#else
|
||||||
fprintf(stderr, "%s: sorry, multi-scan output was not compiled in\n",
|
fprintf(stderr, "%s: sorry, multi-scan output was not compiled in\n",
|
||||||
progname);
|
progname);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -418,12 +426,12 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
/* Set input smoothing factor. */
|
/* Set input smoothing factor. */
|
||||||
int val;
|
int val;
|
||||||
|
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
if (sscanf(argv[argn], "%d", &val) != 1)
|
if (sscanf(argv[argn], "%d", &val) != 1)
|
||||||
usage();
|
usage();
|
||||||
if (val < 0 || val > 100)
|
if (val < 0 || val > 100)
|
||||||
usage();
|
usage();
|
||||||
cinfo->smoothing_factor = val;
|
cinfo->smoothing_factor = val;
|
||||||
|
|
||||||
} else if (keymatch(arg, "targa", 1)) {
|
} else if (keymatch(arg, "targa", 1)) {
|
||||||
@@ -431,7 +439,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
is_targa = TRUE;
|
is_targa = TRUE;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
usage(); /* bogus switch */
|
usage(); /* bogus switch */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -441,35 +449,35 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv,
|
|||||||
|
|
||||||
/* Set quantization tables for selected quality. */
|
/* Set quantization tables for selected quality. */
|
||||||
/* Some or all may be overridden if -qtables is present. */
|
/* Some or all may be overridden if -qtables is present. */
|
||||||
if (qualityarg != NULL) /* process -quality if it was present */
|
if (qualityarg != NULL) /* process -quality if it was present */
|
||||||
if (! set_quality_ratings(cinfo, qualityarg, force_baseline))
|
if (! set_quality_ratings(cinfo, qualityarg, force_baseline))
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
if (qtablefile != NULL) /* process -qtables if it was present */
|
if (qtablefile != NULL) /* process -qtables if it was present */
|
||||||
if (! read_quant_tables(cinfo, qtablefile, force_baseline))
|
if (! read_quant_tables(cinfo, qtablefile, force_baseline))
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
if (qslotsarg != NULL) /* process -qslots if it was present */
|
if (qslotsarg != NULL) /* process -qslots if it was present */
|
||||||
if (! set_quant_slots(cinfo, qslotsarg))
|
if (! set_quant_slots(cinfo, qslotsarg))
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
if (samplearg != NULL) /* process -sample if it was present */
|
if (samplearg != NULL) /* process -sample if it was present */
|
||||||
if (! set_sample_factors(cinfo, samplearg))
|
if (! set_sample_factors(cinfo, samplearg))
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
#ifdef C_PROGRESSIVE_SUPPORTED
|
#ifdef C_PROGRESSIVE_SUPPORTED
|
||||||
if (simple_progressive) /* process -progressive; -scans can override */
|
if (simple_progressive) /* process -progressive; -scans can override */
|
||||||
jpeg_simple_progression(cinfo);
|
jpeg_simple_progression(cinfo);
|
||||||
#endif
|
#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))
|
||||||
usage();
|
usage();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return argn; /* return index of next arg (file name) */
|
return argn; /* return index of next arg (file name) */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -487,8 +495,8 @@ main (int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
int file_index;
|
int file_index;
|
||||||
cjpeg_source_ptr src_mgr;
|
cjpeg_source_ptr src_mgr;
|
||||||
FILE * input_file;
|
FILE *input_file;
|
||||||
FILE * output_file = NULL;
|
FILE *output_file = NULL;
|
||||||
unsigned char *outbuffer = NULL;
|
unsigned char *outbuffer = NULL;
|
||||||
unsigned long outsize = 0;
|
unsigned long outsize = 0;
|
||||||
JDIMENSION num_scanlines;
|
JDIMENSION num_scanlines;
|
||||||
@@ -500,7 +508,7 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
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 */
|
||||||
|
|
||||||
/* Initialize the JPEG compression object with default error handling. */
|
/* Initialize the JPEG compression object with default error handling. */
|
||||||
cinfo.err = jpeg_std_error(&jerr);
|
cinfo.err = jpeg_std_error(&jerr);
|
||||||
@@ -510,11 +518,6 @@ main (int argc, char **argv)
|
|||||||
jerr.first_addon_message = JMSG_FIRSTADDONCODE;
|
jerr.first_addon_message = JMSG_FIRSTADDONCODE;
|
||||||
jerr.last_addon_message = JMSG_LASTADDONCODE;
|
jerr.last_addon_message = JMSG_LASTADDONCODE;
|
||||||
|
|
||||||
/* Now safe to enable signal catcher. */
|
|
||||||
#ifdef NEED_SIGNAL_CATCHER
|
|
||||||
enable_signal_catcher((j_common_ptr) &cinfo);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Initialize JPEG parameters.
|
/* Initialize JPEG parameters.
|
||||||
* Much of this may be overridden later.
|
* Much of this may be overridden later.
|
||||||
* In particular, we don't yet know the input file's color space,
|
* In particular, we don't yet know the input file's color space,
|
||||||
@@ -637,5 +640,5 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
/* All done. */
|
/* All done. */
|
||||||
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
||||||
return 0; /* suppress no-return-value warnings */
|
return 0; /* suppress no-return-value warnings */
|
||||||
}
|
}
|
||||||
|
|||||||
24
cmakescripts/cmake_uninstall.cmake.in
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# This code is from the CMake FAQ
|
||||||
|
|
||||||
|
if (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||||
|
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
|
||||||
|
endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||||
|
|
||||||
|
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
|
||||||
|
string(REGEX REPLACE "\n" ";" files "${files}")
|
||||||
|
list(REVERSE files)
|
||||||
|
foreach (file ${files})
|
||||||
|
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
|
||||||
|
if (EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
execute_process(
|
||||||
|
COMMAND "@CMAKE_COMMAND@" -E remove "$ENV{DESTDIR}${file}"
|
||||||
|
OUTPUT_VARIABLE rm_out
|
||||||
|
RESULT_VARIABLE rm_retval
|
||||||
|
)
|
||||||
|
if(NOT ${rm_retval} EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
|
||||||
|
endif (NOT ${rm_retval} EQUAL 0)
|
||||||
|
else (EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
|
||||||
|
endif (EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
endforeach(file)
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
if(NOT MD5)
|
|
||||||
message(FATAL_ERROR "MD5 not specified")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT FILE)
|
|
||||||
message(FATAL_ERROR "FILE not specified")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
file(MD5 ${FILE} MD5FILE)
|
|
||||||
|
|
||||||
if(NOT MD5 STREQUAL MD5FILE)
|
|
||||||
message(FATAL_ERROR "MD5 of ${FILE} should be ${MD5}, not ${MD5FILE}.")
|
|
||||||
else()
|
|
||||||
message(STATUS "${MD5}: OK")
|
|
||||||
endif()
|
|
||||||
@@ -24,7 +24,12 @@ file(GLOB FILES
|
|||||||
*_440_*.png
|
*_440_*.png
|
||||||
*_440_*.ppm
|
*_440_*.ppm
|
||||||
*_440_*.jpg
|
*_440_*.jpg
|
||||||
*_440.yuv)
|
*_440.yuv
|
||||||
|
*_411_*.bmp
|
||||||
|
*_411_*.png
|
||||||
|
*_411_*.ppm
|
||||||
|
*_411_*.jpg
|
||||||
|
*_411.yuv)
|
||||||
|
|
||||||
if(NOT FILES STREQUAL "")
|
if(NOT FILES STREQUAL "")
|
||||||
message(STATUS "Removing test files")
|
message(STATUS "Removing test files")
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
IJG JPEG LIBRARY: CODING RULES
|
IJG JPEG LIBRARY: CODING RULES
|
||||||
|
|
||||||
|
This file was part of the Independent JPEG Group's software:
|
||||||
Copyright (C) 1991-1996, Thomas G. Lane.
|
Copyright (C) 1991-1996, Thomas G. Lane.
|
||||||
This file is part of the Independent JPEG Group's software.
|
It was modified by The libjpeg-turbo Project to include only information
|
||||||
For conditions of distribution and use, see the accompanying README file.
|
relevant to libjpeg-turbo.
|
||||||
|
For conditions of distribution and use, see the accompanying README.ijg file.
|
||||||
|
|
||||||
|
|
||||||
Since numerous people will be contributing code and bug fixes, it's important
|
Since numerous people will be contributing code and bug fixes, it's important
|
||||||
@@ -21,33 +23,18 @@ Block comments should be laid out thusly:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
We indent statements in K&R style, e.g.,
|
We indent statements in K&R style, e.g.,
|
||||||
if (test) {
|
if (test) {
|
||||||
then-part;
|
then-part;
|
||||||
} else {
|
} else {
|
||||||
else-part;
|
else-part;
|
||||||
}
|
}
|
||||||
with two spaces per indentation level. (This indentation convention is
|
with two spaces per indentation level. (This indentation convention is
|
||||||
handled automatically by GNU Emacs and many other text editors.)
|
handled automatically by GNU Emacs and many other text editors.)
|
||||||
|
|
||||||
Multi-word names should be written in lower case with underscores, e.g.,
|
Multi-word names should be written in lower case with underscores, e.g.,
|
||||||
multi_word_name (not multiWordName). Preprocessor symbols and enum constants
|
multi_word_name (not multiWordName). Preprocessor symbols and enum constants
|
||||||
are similar but upper case (MULTI_WORD_NAME). Names should be unique within
|
are similar but upper case (MULTI_WORD_NAME). Names should be unique within
|
||||||
the first fifteen characters. (On some older systems, global names must be
|
the first fifteen characters.
|
||||||
unique within six characters. We accommodate this without cluttering the
|
|
||||||
source code by using macros to substitute shorter names.)
|
|
||||||
|
|
||||||
We use function prototypes everywhere; we rely on automatic source code
|
|
||||||
transformation to feed prototype-less C compilers. Transformation is done
|
|
||||||
by the simple and portable tool 'ansi2knr.c' (courtesy of Ghostscript).
|
|
||||||
ansi2knr is not very bright, so it imposes a format requirement on function
|
|
||||||
declarations: the function name MUST BEGIN IN COLUMN 1. Thus all functions
|
|
||||||
should be written in the following style:
|
|
||||||
|
|
||||||
LOCAL(int *)
|
|
||||||
function_name (int a, char *b)
|
|
||||||
{
|
|
||||||
code...
|
|
||||||
}
|
|
||||||
|
|
||||||
Note that each function definition must begin with GLOBAL(type), LOCAL(type),
|
Note that each function definition must begin with GLOBAL(type), LOCAL(type),
|
||||||
or METHODDEF(type). These macros expand to "static type" or just "type" as
|
or METHODDEF(type). These macros expand to "static type" or just "type" as
|
||||||
@@ -55,32 +42,8 @@ appropriate. They provide a readable indication of the routine's usage and
|
|||||||
can readily be changed for special needs. (For instance, special linkage
|
can readily be changed for special needs. (For instance, special linkage
|
||||||
keywords can be inserted for use in Windows DLLs.)
|
keywords can be inserted for use in Windows DLLs.)
|
||||||
|
|
||||||
ansi2knr does not transform method declarations (function pointers in
|
A similar solution is used for external function declarations (see the EXTERN
|
||||||
structs). We handle these with a macro JMETHOD, defined as
|
macro.)
|
||||||
#ifdef HAVE_PROTOTYPES
|
|
||||||
#define JMETHOD(type,methodname,arglist) type (*methodname) arglist
|
|
||||||
#else
|
|
||||||
#define JMETHOD(type,methodname,arglist) type (*methodname) ()
|
|
||||||
#endif
|
|
||||||
which is used like this:
|
|
||||||
struct function_pointers {
|
|
||||||
JMETHOD(void, init_entropy_encoder, (int somearg, jparms *jp));
|
|
||||||
JMETHOD(void, term_entropy_encoder, (void));
|
|
||||||
};
|
|
||||||
Note the set of parentheses surrounding the parameter list.
|
|
||||||
|
|
||||||
A similar solution is used for forward and external function declarations
|
|
||||||
(see the EXTERN and JPP macros).
|
|
||||||
|
|
||||||
If the code is to work on non-ANSI compilers, we cannot rely on a prototype
|
|
||||||
declaration to coerce actual parameters into the right types. Therefore, use
|
|
||||||
explicit casts on actual parameters whenever the actual parameter type is not
|
|
||||||
identical to the formal parameter. Beware of implicit conversions to "int".
|
|
||||||
|
|
||||||
It seems there are some non-ANSI compilers in which the sizeof() operator
|
|
||||||
is defined to return int, yet size_t is defined as long. Needless to say,
|
|
||||||
this is brain-damaged. Always use the SIZEOF() macro in place of sizeof(),
|
|
||||||
so that the result is guaranteed to be of type size_t.
|
|
||||||
|
|
||||||
|
|
||||||
The JPEG library is intended to be used within larger programs. Furthermore,
|
The JPEG library is intended to be used within larger programs. Furthermore,
|
||||||
@@ -94,9 +57,7 @@ pass these through the common routines provided.
|
|||||||
wherever possible. (Note that our method-based calling conventions help this
|
wherever possible. (Note that our method-based calling conventions help this
|
||||||
a lot: in many modules only the initialization function will ever need to be
|
a lot: in many modules only the initialization function will ever need to be
|
||||||
called directly, so only that function need be externally visible.) All
|
called directly, so only that function need be externally visible.) All
|
||||||
global function names should begin with "jpeg_", and should have an
|
global function names should begin with "jpeg_".
|
||||||
abbreviated name (unique in the first six characters) substituted by macro
|
|
||||||
when NEED_SHORT_EXTERNAL_NAMES is set.
|
|
||||||
|
|
||||||
3. Don't use global variables; anything that must be used in another module
|
3. Don't use global variables; anything that must be used in another module
|
||||||
should be in the common data structures.
|
should be in the common data structures.
|
||||||
@@ -107,10 +68,9 @@ the system architecture document, structure.txt).
|
|||||||
|
|
||||||
5. Source file names should begin with "j" for files that are part of the
|
5. Source file names should begin with "j" for files that are part of the
|
||||||
library proper; source files that are not part of the library, such as cjpeg.c
|
library proper; source files that are not part of the library, such as cjpeg.c
|
||||||
and djpeg.c, do not begin with "j". Keep source file names to eight
|
and djpeg.c, do not begin with "j". Keep compression and decompression code in
|
||||||
characters (plus ".c" or ".h", etc) to make life easy for MS-DOSers. Keep
|
separate source files --- some applications may want only one half of the
|
||||||
compression and decompression code in separate source files --- some
|
library.
|
||||||
applications may want only one half of the library.
|
|
||||||
|
|
||||||
Note: these rules (particularly #4) are not followed religiously in the
|
Note: these rules (particularly #4) are not followed religiously in the
|
||||||
modules that are used in cjpeg/djpeg but are not part of the JPEG library
|
modules that are used in cjpeg/djpeg but are not part of the JPEG library
|
||||||
|
|||||||
217
configure.ac
@@ -2,25 +2,31 @@
|
|||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_PREREQ([2.56])
|
AC_PREREQ([2.56])
|
||||||
AC_INIT([libjpeg-turbo], [1.3.0])
|
AC_INIT([libjpeg-turbo], [1.5.3])
|
||||||
BUILD=`date +%Y%m%d`
|
|
||||||
|
|
||||||
AM_INIT_AUTOMAKE([-Wall foreign dist-bzip2])
|
AM_INIT_AUTOMAKE([-Wall foreign dist-bzip2])
|
||||||
AC_PREFIX_DEFAULT(/opt/libjpeg-turbo)
|
AC_PREFIX_DEFAULT(/opt/libjpeg-turbo)
|
||||||
|
|
||||||
# Always build with prototypes
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||||
AC_DEFINE([HAVE_PROTOTYPES], 1, [Define if your compiler supports prototypes])
|
|
||||||
|
|
||||||
# Checks for programs.
|
# Checks for programs.
|
||||||
SAVED_CFLAGS=${CFLAGS}
|
SAVED_CFLAGS=${CFLAGS}
|
||||||
SAVED_CPPFLAGS=${CPPFLAGS}
|
SAVED_CPPFLAGS=${CPPFLAGS}
|
||||||
AC_PROG_CPP
|
AC_PROG_CPP
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
|
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
||||||
AM_PROG_AS
|
AM_PROG_AS
|
||||||
|
AM_PROG_CC_C_O
|
||||||
AC_PROG_INSTALL
|
AC_PROG_INSTALL
|
||||||
AC_PROG_LIBTOOL
|
AC_PROG_LIBTOOL
|
||||||
AC_PROG_LN_S
|
AC_PROG_LN_S
|
||||||
|
|
||||||
|
AC_ARG_WITH([build-date], [Use custom build string to enable reproducible builds (default: YYMMDD)],
|
||||||
|
[BUILD="$with_build_date"],
|
||||||
|
[BUILD=`date +%Y%m%d`])
|
||||||
|
|
||||||
|
PKG_PROG_PKG_CONFIG
|
||||||
|
|
||||||
# When the prefix is /opt/libjpeg-turbo, we assume that an "official" binary is
|
# When the prefix is /opt/libjpeg-turbo, we assume that an "official" binary is
|
||||||
# being created, and thus we install things into specific locations.
|
# being created, and thus we install things into specific locations.
|
||||||
|
|
||||||
@@ -38,12 +44,19 @@ DATADIR=`eval echo $DATADIR`
|
|||||||
if test "$DATADIR" = "/opt/libjpeg-turbo/share"; then
|
if test "$DATADIR" = "/opt/libjpeg-turbo/share"; then
|
||||||
datarootdir='${prefix}'
|
datarootdir='${prefix}'
|
||||||
fi
|
fi
|
||||||
|
DOCDIR=`eval echo ${docdir}`
|
||||||
|
DOCDIR=`eval echo $DOCDIR`
|
||||||
|
if test "$DOCDIR" = "/opt/libjpeg-turbo/doc/libjpeg-turbo"; then
|
||||||
|
docdir='${datadir}/doc'
|
||||||
|
fi
|
||||||
|
|
||||||
old_exec_prefix=${exec_prefix}
|
old_exec_prefix=${exec_prefix}
|
||||||
if test "x$exec_prefix" = "xNONE"; then
|
if test "x$exec_prefix" = "xNONE"; then
|
||||||
exec_prefix=${prefix}
|
exec_prefix=${prefix}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AC_CHECK_SIZEOF(size_t)
|
||||||
|
|
||||||
if test "x${libdir}" = 'x${exec_prefix}/lib' -o "x${libdir}" = 'x${prefix}/lib'; then
|
if test "x${libdir}" = 'x${exec_prefix}/lib' -o "x${libdir}" = 'x${prefix}/lib'; then
|
||||||
LIBDIR=`eval echo ${libdir}`
|
LIBDIR=`eval echo ${libdir}`
|
||||||
LIBDIR=`eval echo $LIBDIR`
|
LIBDIR=`eval echo $LIBDIR`
|
||||||
@@ -52,14 +65,11 @@ if test "x${libdir}" = 'x${exec_prefix}/lib' -o "x${libdir}" = 'x${prefix}/lib';
|
|||||||
darwin*)
|
darwin*)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
case "$host_cpu" in
|
if test "${ac_cv_sizeof_size_t}" = "8"; then
|
||||||
x86_64 | amd64)
|
libdir='${exec_prefix}/lib64'
|
||||||
libdir='${exec_prefix}/lib64'
|
elif test "${ac_cv_sizeof_size_t}" = "4"; then
|
||||||
;;
|
libdir='${exec_prefix}/lib32'
|
||||||
i*86 | x86 | ia32)
|
fi
|
||||||
libdir='${exec_prefix}/lib32'
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
@@ -69,7 +79,7 @@ prefix=${old_prefix}
|
|||||||
|
|
||||||
# Check whether compiler supports pointers to undefined structures
|
# Check whether compiler supports pointers to undefined structures
|
||||||
AC_MSG_CHECKING(whether compiler supports pointers to undefined structures)
|
AC_MSG_CHECKING(whether compiler supports pointers to undefined structures)
|
||||||
AC_TRY_COMPILE([ typedef struct undefined_structure * undef_struct_ptr; ], ,
|
AC_TRY_COMPILE([ typedef struct undefined_structure *undef_struct_ptr; ], ,
|
||||||
AC_MSG_RESULT(yes),
|
AC_MSG_RESULT(yes),
|
||||||
[AC_MSG_RESULT(no)
|
[AC_MSG_RESULT(no)
|
||||||
AC_DEFINE([INCOMPLETE_TYPES_BROKEN], [1],
|
AC_DEFINE([INCOMPLETE_TYPES_BROKEN], [1],
|
||||||
@@ -95,9 +105,9 @@ fi
|
|||||||
|
|
||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
|
AC_CHECK_HEADERS([stddef.h stdlib.h locale.h string.h])
|
||||||
AC_CHECK_HEADER([sys/types.h],
|
AC_CHECK_HEADER([sys/types.h],
|
||||||
AC_DEFINE([NEED_SYS_TYPES_H], 1, [Define if you have sys/types.h]))
|
AC_DEFINE([NEED_SYS_TYPES_H], 1, [Define if you need to include <sys/types.h> to get size_t.]))
|
||||||
|
|
||||||
# Checks for typedefs, structures, and compiler characteristics.
|
# Checks for typedefs, structures, and compiler characteristics.
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
@@ -129,24 +139,15 @@ AC_TRY_RUN(
|
|||||||
exit(is_shifting_signed(-0x7F7E80B1L));
|
exit(is_shifting_signed(-0x7F7E80B1L));
|
||||||
}],
|
}],
|
||||||
[AC_MSG_RESULT(no)
|
[AC_MSG_RESULT(no)
|
||||||
AC_DEFINE([RIGHT_SHIFT_IS_UNSIGNED], 1, [Define if shift is unsigned])],
|
AC_DEFINE([RIGHT_SHIFT_IS_UNSIGNED], 1,
|
||||||
|
[Define if your (broken) compiler shifts signed values as if they were unsigned.])],
|
||||||
[AC_MSG_RESULT(yes)],
|
[AC_MSG_RESULT(yes)],
|
||||||
[AC_MSG_RESULT(Assuming that right shift is signed on target machine.)])
|
[AC_MSG_RESULT(Assuming that right shift is signed on target machine.)])
|
||||||
|
|
||||||
# test whether global names are unique to at least 15 chars
|
|
||||||
AC_MSG_CHECKING([for short external names])
|
|
||||||
AC_TRY_LINK(
|
|
||||||
[int possibly_duplicate_function () { return 0; }
|
|
||||||
int possibly_dupli_function () { return 1; }], [ ],
|
|
||||||
[AC_MSG_RESULT(ok)],
|
|
||||||
[AC_MSG_RESULT(short)
|
|
||||||
AC_DEFINE([NEED_SHORT_EXTERNAL_NAMES], 1,
|
|
||||||
[Define if you need short function names])])
|
|
||||||
|
|
||||||
# Checks for library functions.
|
# Checks for library functions.
|
||||||
AC_CHECK_FUNCS([memset memcpy], [],
|
AC_CHECK_FUNCS([memset memcpy], [],
|
||||||
[AC_DEFINE([NEED_BSD_STRINGS], 1,
|
[AC_DEFINE([NEED_BSD_STRINGS], 1,
|
||||||
[Define if you have BSD-like bzero and bcopy])])
|
[Define if you have BSD-like bzero and bcopy in <strings.h> rather than memset/memcpy in <string.h>.])])
|
||||||
|
|
||||||
AC_MSG_CHECKING([libjpeg API version])
|
AC_MSG_CHECKING([libjpeg API version])
|
||||||
AC_ARG_VAR(JPEG_LIB_VERSION, [libjpeg API version (62, 70, or 80)])
|
AC_ARG_VAR(JPEG_LIB_VERSION, [libjpeg API version (62, 70, or 80)])
|
||||||
@@ -193,7 +194,7 @@ fi
|
|||||||
RPM_CONFIG_ARGS=
|
RPM_CONFIG_ARGS=
|
||||||
|
|
||||||
# Memory source/destination managers
|
# Memory source/destination managers
|
||||||
SO_AGE=0
|
SO_AGE=1
|
||||||
MEM_SRCDST_FUNCTIONS=
|
MEM_SRCDST_FUNCTIONS=
|
||||||
if test "x${with_jpeg8}" != "xyes"; then
|
if test "x${with_jpeg8}" != "xyes"; then
|
||||||
AC_MSG_CHECKING([whether to include in-memory source/destination managers])
|
AC_MSG_CHECKING([whether to include in-memory source/destination managers])
|
||||||
@@ -204,7 +205,7 @@ if test "x${with_jpeg8}" != "xyes"; then
|
|||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE([MEM_SRCDST_SUPPORTED], [1],
|
AC_DEFINE([MEM_SRCDST_SUPPORTED], [1],
|
||||||
[Support in-memory source/destination managers])
|
[Support in-memory source/destination managers])
|
||||||
SO_AGE=1
|
SO_AGE=2
|
||||||
MEM_SRCDST_FUNCTIONS="global: jpeg_mem_dest; jpeg_mem_src;";
|
MEM_SRCDST_FUNCTIONS="global: jpeg_mem_dest; jpeg_mem_src;";
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -223,6 +224,16 @@ AC_SUBST(MEM_SRCDST_FUNCTIONS)
|
|||||||
|
|
||||||
AC_DEFINE_UNQUOTED(LIBJPEG_TURBO_VERSION, [$VERSION], [libjpeg-turbo version])
|
AC_DEFINE_UNQUOTED(LIBJPEG_TURBO_VERSION, [$VERSION], [libjpeg-turbo version])
|
||||||
|
|
||||||
|
m4_define(version_triplet,m4_split(AC_PACKAGE_VERSION,[[.]]))
|
||||||
|
m4_define(version_major,m4_car(m4_shiftn(1,[],version_triplet)))
|
||||||
|
m4_define(version_minor,m4_car(m4_shiftn(2,[],version_triplet)))
|
||||||
|
m4_define(version_revision,m4_car(m4_shiftn(3,[],version_triplet)))
|
||||||
|
VERSION_MAJOR=version_major
|
||||||
|
VERSION_MINOR=version_minor
|
||||||
|
VERSION_REVISION=version_revision
|
||||||
|
LIBJPEG_TURBO_VERSION_NUMBER=`printf "%d%03d%03d" $VERSION_MAJOR $VERSION_MINOR $VERSION_REVISION`
|
||||||
|
AC_DEFINE_UNQUOTED(LIBJPEG_TURBO_VERSION_NUMBER, [$LIBJPEG_TURBO_VERSION_NUMBER], [libjpeg-turbo version in integer form])
|
||||||
|
|
||||||
VERSION_SCRIPT=yes
|
VERSION_SCRIPT=yes
|
||||||
AC_ARG_ENABLE([ld-version-script],
|
AC_ARG_ENABLE([ld-version-script],
|
||||||
AS_HELP_STRING([--disable-ld-version-script],
|
AS_HELP_STRING([--disable-ld-version-script],
|
||||||
@@ -237,13 +248,13 @@ VERS_1 {
|
|||||||
global: *;
|
global: *;
|
||||||
};
|
};
|
||||||
EOF
|
EOF
|
||||||
AC_LINK_IFELSE(AC_LANG_PROGRAM([], []),
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
|
||||||
[VERSION_SCRIPT_FLAG=-Wl,--version-script,;
|
[VERSION_SCRIPT_FLAG=-Wl,--version-script,;
|
||||||
AC_MSG_RESULT([yes (GNU style)])],
|
AC_MSG_RESULT([yes (GNU style)])],
|
||||||
[])
|
[])
|
||||||
if test "x$VERSION_SCRIPT_FLAG" = "x"; then
|
if test "x$VERSION_SCRIPT_FLAG" = "x"; then
|
||||||
LDFLAGS="$SAVED_LDFLAGS -Wl,-M,conftest.map"
|
LDFLAGS="$SAVED_LDFLAGS -Wl,-M,conftest.map"
|
||||||
AC_LINK_IFELSE(AC_LANG_PROGRAM([], []),
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
|
||||||
[VERSION_SCRIPT_FLAG=-Wl,-M,;
|
[VERSION_SCRIPT_FLAG=-Wl,-M,;
|
||||||
AC_MSG_RESULT([yes (Sun style)])],
|
AC_MSG_RESULT([yes (Sun style)])],
|
||||||
[])
|
[])
|
||||||
@@ -263,8 +274,8 @@ AC_SUBST(VERSION_SCRIPT_FLAG)
|
|||||||
# Check for non-broken inline under various spellings
|
# Check for non-broken inline under various spellings
|
||||||
AC_MSG_CHECKING(for inline)
|
AC_MSG_CHECKING(for inline)
|
||||||
ljt_cv_inline=""
|
ljt_cv_inline=""
|
||||||
AC_TRY_COMPILE(, [} __attribute__((always_inline)) int foo() { return 0; }
|
AC_TRY_COMPILE(, [} inline __attribute__((always_inline)) int foo() { return 0; }
|
||||||
int bar() { return foo();], ljt_cv_inline="__attribute__((always_inline))",
|
int bar() { return foo();], ljt_cv_inline="inline __attribute__((always_inline))",
|
||||||
AC_TRY_COMPILE(, [} __inline__ int foo() { return 0; }
|
AC_TRY_COMPILE(, [} __inline__ int foo() { return 0; }
|
||||||
int bar() { return foo();], ljt_cv_inline="__inline__",
|
int bar() { return foo();], ljt_cv_inline="__inline__",
|
||||||
AC_TRY_COMPILE(, [} __inline int foo() { return 0; }
|
AC_TRY_COMPILE(, [} __inline int foo() { return 0; }
|
||||||
@@ -278,7 +289,13 @@ AC_DEFINE_UNQUOTED([INLINE],[$ljt_cv_inline],[How to obtain function inlining.])
|
|||||||
AC_MSG_CHECKING([whether to include arithmetic encoding support])
|
AC_MSG_CHECKING([whether to include arithmetic encoding support])
|
||||||
AC_ARG_WITH([arith-enc],
|
AC_ARG_WITH([arith-enc],
|
||||||
AC_HELP_STRING([--without-arith-enc],
|
AC_HELP_STRING([--without-arith-enc],
|
||||||
[Do not include arithmetic encoding support]))
|
[Do not include arithmetic encoding support when emulating the libjpeg v6b API/ABI]))
|
||||||
|
if test "x$with_12bit" = "xyes"; then
|
||||||
|
with_arith_enc=no
|
||||||
|
fi
|
||||||
|
if test "x${with_jpeg8}" = "xyes" -o "x${with_jpeg7}" = "xyes"; then
|
||||||
|
with_arith_enc=yes
|
||||||
|
fi
|
||||||
if test "x$with_arith_enc" = "xno"; then
|
if test "x$with_arith_enc" = "xno"; then
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-enc"
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-enc"
|
||||||
@@ -291,7 +308,13 @@ AM_CONDITIONAL([WITH_ARITH_ENC], [test "x$with_arith_enc" != "xno"])
|
|||||||
AC_MSG_CHECKING([whether to include arithmetic decoding support])
|
AC_MSG_CHECKING([whether to include arithmetic decoding support])
|
||||||
AC_ARG_WITH([arith-dec],
|
AC_ARG_WITH([arith-dec],
|
||||||
AC_HELP_STRING([--without-arith-dec],
|
AC_HELP_STRING([--without-arith-dec],
|
||||||
[Do not include arithmetic decoding support]))
|
[Do not include arithmetic decoding support when emulating the libjpeg v6b API/ABI]))
|
||||||
|
if test "x$with_12bit" = "xyes"; then
|
||||||
|
with_arith_dec=no
|
||||||
|
fi
|
||||||
|
if test "x${with_jpeg8}" = "xyes" -o "x${with_jpeg7}" = "xyes"; then
|
||||||
|
with_arith_dec=yes
|
||||||
|
fi
|
||||||
if test "x$with_arith_dec" = "xno"; then
|
if test "x$with_arith_dec" = "xno"; then
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-dec"
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-dec"
|
||||||
@@ -304,11 +327,26 @@ AM_CONDITIONAL([WITH_ARITH_DEC], [test "x$with_arith_dec" != "xno"])
|
|||||||
AM_CONDITIONAL([WITH_ARITH],
|
AM_CONDITIONAL([WITH_ARITH],
|
||||||
[test "x$with_arith_dec" != "xno" -o "x$with_arith_enc" != "xno"])
|
[test "x$with_arith_dec" != "xno" -o "x$with_arith_enc" != "xno"])
|
||||||
|
|
||||||
|
# 12-bit component support
|
||||||
|
AC_MSG_CHECKING([whether to use 12-bit samples])
|
||||||
|
AC_ARG_WITH([12bit],
|
||||||
|
AC_HELP_STRING([--with-12bit], [Encode/decode JPEG images with 12-bit samples (implies --without-simd --without-turbojpeg --without-arith-dec --without-arith-enc)]))
|
||||||
|
if test "x$with_12bit" = "xyes"; then
|
||||||
|
AC_DEFINE([BITS_IN_JSAMPLE], [12], [use 8 or 12])
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL([WITH_12BIT], [test "x$with_12bit" = "xyes"])
|
||||||
|
|
||||||
# TurboJPEG support
|
# TurboJPEG support
|
||||||
AC_MSG_CHECKING([whether to build TurboJPEG C wrapper])
|
AC_MSG_CHECKING([whether to build TurboJPEG C wrapper])
|
||||||
AC_ARG_WITH([turbojpeg],
|
AC_ARG_WITH([turbojpeg],
|
||||||
AC_HELP_STRING([--without-turbojpeg],
|
AC_HELP_STRING([--without-turbojpeg],
|
||||||
[Do not include the TurboJPEG wrapper library and associated test programs]))
|
[Do not include the TurboJPEG wrapper library and associated test programs]))
|
||||||
|
if test "x$with_12bit" = "xyes"; then
|
||||||
|
with_turbojpeg=no
|
||||||
|
fi
|
||||||
if test "x$with_turbojpeg" = "xno"; then
|
if test "x$with_turbojpeg" = "xno"; then
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-turbojpeg"
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-turbojpeg"
|
||||||
@@ -323,6 +361,7 @@ if test "x$JAVAC" = "x"; then
|
|||||||
fi
|
fi
|
||||||
AC_SUBST(JAVAC)
|
AC_SUBST(JAVAC)
|
||||||
AC_ARG_VAR(JAVACFLAGS, [Java compiler flags])
|
AC_ARG_VAR(JAVACFLAGS, [Java compiler flags])
|
||||||
|
JAVACFLAGS="$JAVACFLAGS -J-Dfile.encoding=UTF8"
|
||||||
AC_SUBST(JAVACFLAGS)
|
AC_SUBST(JAVACFLAGS)
|
||||||
AC_ARG_VAR(JAR, [Java archive command (default: jar)])
|
AC_ARG_VAR(JAR, [Java archive command (default: jar)])
|
||||||
if test "x$JAR" = "x"; then
|
if test "x$JAR" = "x"; then
|
||||||
@@ -340,7 +379,7 @@ AC_ARG_VAR(JNI_CFLAGS,
|
|||||||
AC_MSG_CHECKING([whether to build TurboJPEG Java wrapper])
|
AC_MSG_CHECKING([whether to build TurboJPEG Java wrapper])
|
||||||
AC_ARG_WITH([java],
|
AC_ARG_WITH([java],
|
||||||
AC_HELP_STRING([--with-java], [Build Java wrapper for the TurboJPEG library]))
|
AC_HELP_STRING([--with-java], [Build Java wrapper for the TurboJPEG library]))
|
||||||
if test "x$with_turbojpeg" = "xno"; then
|
if test "x$with_12bit" = "xyes" -o "x$with_turbojpeg" = "xno"; then
|
||||||
with_java=no
|
with_java=no
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -401,7 +440,14 @@ fi
|
|||||||
# SIMD is optional
|
# SIMD is optional
|
||||||
AC_ARG_WITH([simd],
|
AC_ARG_WITH([simd],
|
||||||
AC_HELP_STRING([--without-simd], [Do not include SIMD extensions]))
|
AC_HELP_STRING([--without-simd], [Do not include SIMD extensions]))
|
||||||
|
if test "x$with_12bit" = "xyes"; then
|
||||||
|
with_simd=no
|
||||||
|
fi
|
||||||
if test "x${with_simd}" != "xno"; then
|
if test "x${with_simd}" != "xno"; then
|
||||||
|
require_simd=no
|
||||||
|
if test "x${with_simd}" = "xyes"; then
|
||||||
|
require_simd=yes
|
||||||
|
fi
|
||||||
# Check if we're on a supported CPU
|
# Check if we're on a supported CPU
|
||||||
AC_MSG_CHECKING([if we have SIMD optimisations for cpu type])
|
AC_MSG_CHECKING([if we have SIMD optimisations for cpu type])
|
||||||
case "$host_cpu" in
|
case "$host_cpu" in
|
||||||
@@ -419,16 +465,66 @@ if test "x${with_simd}" != "xno"; then
|
|||||||
AC_MSG_RESULT([yes (arm)])
|
AC_MSG_RESULT([yes (arm)])
|
||||||
AC_MSG_CHECKING([if the assembler is GNU-compatible and can be used])
|
AC_MSG_CHECKING([if the assembler is GNU-compatible and can be used])
|
||||||
AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE(
|
AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE(
|
||||||
[AC_MSG_RESULT([yes])
|
[if test "x$ac_use_gas_preprocessor" = "xyes"; then
|
||||||
|
AC_MSG_RESULT([yes (with gas-preprocessor)])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
fi
|
||||||
simd_arch=arm],
|
simd_arch=arm],
|
||||||
[AC_MSG_RESULT([no])
|
[AC_MSG_RESULT([no])
|
||||||
with_simd=no
|
with_simd=no])
|
||||||
AC_MSG_WARN([SIMD support can't be enabled. Performance will suffer.])])
|
if test "x${with_simd}" = "xno"; then
|
||||||
|
if test "x${require_simd}" = "xyes"; then
|
||||||
|
AC_MSG_ERROR([SIMD support can't be enabled.])
|
||||||
|
else
|
||||||
|
AC_MSG_WARN([SIMD support can't be enabled. Performance will suffer.])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
aarch64*)
|
||||||
|
AC_MSG_RESULT([yes (arm64)])
|
||||||
|
AC_MSG_CHECKING([if the assembler is GNU-compatible and can be used])
|
||||||
|
AC_CHECK_COMPATIBLE_ARM64_ASSEMBLER_IFELSE(
|
||||||
|
[if test "x$ac_use_gas_preprocessor" = "xyes"; then
|
||||||
|
AC_MSG_RESULT([yes (with gas-preprocessor)])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
fi
|
||||||
|
simd_arch=aarch64],
|
||||||
|
[AC_MSG_RESULT([no])
|
||||||
|
with_simd=no])
|
||||||
|
if test "x${with_simd}" = "xno"; then
|
||||||
|
if test "x${require_simd}" = "xyes"; then
|
||||||
|
AC_MSG_ERROR([SIMD support can't be enabled.])
|
||||||
|
else
|
||||||
|
AC_MSG_WARN([SIMD support can't be enabled. Performance will suffer.])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
mips*)
|
||||||
|
AC_MSG_RESULT([yes (mips)])
|
||||||
|
AC_MSG_CHECKING([if the assembler is GNU-compatible and can be used])
|
||||||
|
AC_CHECK_COMPATIBLE_MIPS_ASSEMBLER_IFELSE(
|
||||||
|
[AC_MSG_RESULT([yes])
|
||||||
|
simd_arch=mips],
|
||||||
|
[AC_MSG_RESULT([no])
|
||||||
|
with_simd=no])
|
||||||
|
if test "x${with_simd}" = "xno"; then
|
||||||
|
if test "x${require_simd}" = "xyes"; then
|
||||||
|
AC_MSG_ERROR([SIMD support can't be enabled.])
|
||||||
|
else
|
||||||
|
AC_MSG_WARN([SIMD support can't be enabled. Performance will suffer.])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
powerpc*)
|
||||||
|
AC_CHECK_ALTIVEC(
|
||||||
|
[AC_MSG_RESULT([yes (powerpc)])
|
||||||
|
simd_arch=powerpc],
|
||||||
|
[AC_NO_SIMD(PowerPC SPE)])
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
AC_MSG_RESULT([no ("$host_cpu")])
|
AC_NO_SIMD($host_cpu)
|
||||||
AC_MSG_WARN([SIMD support not available for this CPU. Performance will suffer.])
|
|
||||||
with_simd=no;
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@@ -444,8 +540,12 @@ AM_CONDITIONAL([WITH_SSE_FLOAT_DCT], [test "x$simd_arch" = "xx86_64" -o "x$simd_
|
|||||||
AM_CONDITIONAL([SIMD_I386], [test "x$simd_arch" = "xi386"])
|
AM_CONDITIONAL([SIMD_I386], [test "x$simd_arch" = "xi386"])
|
||||||
AM_CONDITIONAL([SIMD_X86_64], [test "x$simd_arch" = "xx86_64"])
|
AM_CONDITIONAL([SIMD_X86_64], [test "x$simd_arch" = "xx86_64"])
|
||||||
AM_CONDITIONAL([SIMD_ARM], [test "x$simd_arch" = "xarm"])
|
AM_CONDITIONAL([SIMD_ARM], [test "x$simd_arch" = "xarm"])
|
||||||
|
AM_CONDITIONAL([SIMD_ARM_64], [test "x$simd_arch" = "xaarch64"])
|
||||||
|
AM_CONDITIONAL([SIMD_MIPS], [test "x$simd_arch" = "xmips"])
|
||||||
|
AM_CONDITIONAL([SIMD_POWERPC], [test "x$simd_arch" = "xpowerpc"])
|
||||||
AM_CONDITIONAL([X86_64], [test "x$host_cpu" = "xx86_64" -o "x$host_cpu" = "xamd64"])
|
AM_CONDITIONAL([X86_64], [test "x$host_cpu" = "xx86_64" -o "x$host_cpu" = "xamd64"])
|
||||||
AM_CONDITIONAL([WITH_TURBOJPEG], [test "x$with_turbojpeg" != "xno"])
|
AM_CONDITIONAL([WITH_TURBOJPEG], [test "x$with_turbojpeg" != "xno"])
|
||||||
|
AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = "xyes"])
|
||||||
|
|
||||||
AC_ARG_VAR(PKGNAME, [distribution package name (default: libjpeg-turbo)])
|
AC_ARG_VAR(PKGNAME, [distribution package name (default: libjpeg-turbo)])
|
||||||
if test "x$PKGNAME" = "x"; then
|
if test "x$PKGNAME" = "x"; then
|
||||||
@@ -462,27 +562,46 @@ case "$host_cpu" in
|
|||||||
RPMARCH=i386
|
RPMARCH=i386
|
||||||
DEBARCH=i386
|
DEBARCH=i386
|
||||||
;;
|
;;
|
||||||
|
powerpc64le)
|
||||||
|
RPMARCH=`uname -m`
|
||||||
|
DEBARCH=ppc64el
|
||||||
|
;;
|
||||||
|
powerpc)
|
||||||
|
RPMARCH=ppc
|
||||||
|
DEBARCH=ppc
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
RPMARCH=`uname -m`
|
||||||
|
DEBARCH=$RPMARCH
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if test "${docdir}" = ""; then
|
||||||
|
docdir=${datadir}/doc
|
||||||
|
AC_SUBST(docdir)
|
||||||
|
fi
|
||||||
|
|
||||||
AC_SUBST(RPMARCH)
|
AC_SUBST(RPMARCH)
|
||||||
AC_SUBST(RPM_CONFIG_ARGS)
|
AC_SUBST(RPM_CONFIG_ARGS)
|
||||||
AC_SUBST(DEBARCH)
|
AC_SUBST(DEBARCH)
|
||||||
AC_SUBST(BUILD)
|
AC_SUBST(BUILD)
|
||||||
AC_DEFINE_UNQUOTED([BUILD], "$BUILD", [Build number])
|
AC_DEFINE_UNQUOTED([BUILD], "$BUILD", [libjpeg-turbo build number])
|
||||||
|
|
||||||
# jconfig.h is the file we use, but we have another before that to
|
# NOTE: autoheader automatically modifies the input file of the first
|
||||||
# fool autoheader. the reason is that we include this header in our
|
# invocation of AC_CONFIG_HEADERS, so we put config.h first to prevent
|
||||||
# API headers, which can screw things up for users of the lib.
|
# jconfig.h.in from being clobbered. config.h is used only internally, whereas
|
||||||
# jconfig.h is a minimal version that allows this package to be built
|
# jconfig.h contains macros that are relevant to external programs (macros that
|
||||||
|
# specify which features were built into the library.)
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_HEADERS([jconfig.h])
|
AC_CONFIG_HEADERS([jconfig.h])
|
||||||
|
AC_CONFIG_HEADERS([jconfigint.h])
|
||||||
AC_CONFIG_FILES([pkgscripts/libjpeg-turbo.spec.tmpl:release/libjpeg-turbo.spec.in])
|
AC_CONFIG_FILES([pkgscripts/libjpeg-turbo.spec.tmpl:release/libjpeg-turbo.spec.in])
|
||||||
AC_CONFIG_FILES([pkgscripts/makecygwinpkg.tmpl:release/makecygwinpkg.in])
|
AC_CONFIG_FILES([pkgscripts/makecygwinpkg.tmpl:release/makecygwinpkg.in])
|
||||||
AC_CONFIG_FILES([pkgscripts/makedpkg.tmpl:release/makedpkg.in])
|
AC_CONFIG_FILES([pkgscripts/makedpkg.tmpl:release/makedpkg.in])
|
||||||
AC_CONFIG_FILES([pkgscripts/makemacpkg.tmpl:release/makemacpkg.in])
|
AC_CONFIG_FILES([pkgscripts/makemacpkg.tmpl:release/makemacpkg.in])
|
||||||
AC_CONFIG_FILES([pkgscripts/Description.plist:release/Description.plist.in])
|
|
||||||
AC_CONFIG_FILES([pkgscripts/Info.plist:release/Info.plist.in])
|
|
||||||
AC_CONFIG_FILES([pkgscripts/uninstall.tmpl:release/uninstall.in])
|
AC_CONFIG_FILES([pkgscripts/uninstall.tmpl:release/uninstall.in])
|
||||||
|
AC_CONFIG_FILES([pkgscripts/libjpeg.pc:release/libjpeg.pc.in])
|
||||||
|
AC_CONFIG_FILES([pkgscripts/libturbojpeg.pc:release/libturbojpeg.pc.in])
|
||||||
if test "x$with_turbojpeg" != "xno"; then
|
if test "x$with_turbojpeg" != "xno"; then
|
||||||
AC_CONFIG_FILES([tjbenchtest])
|
AC_CONFIG_FILES([tjbenchtest])
|
||||||
fi
|
fi
|
||||||
|
|||||||
73
djpeg.1
@@ -1,4 +1,4 @@
|
|||||||
.TH DJPEG 1 "18 January 2013"
|
.TH DJPEG 1 "13 November 2017"
|
||||||
.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
|
||||||
@@ -55,11 +55,14 @@ default options are chosen for highest quality output.) Currently, this is
|
|||||||
equivalent to \fB\-dct fast \-nosmooth \-onepass \-dither ordered\fR.
|
equivalent to \fB\-dct fast \-nosmooth \-onepass \-dither ordered\fR.
|
||||||
.TP
|
.TP
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
Force gray-scale output even if JPEG file is color. Useful for viewing on
|
Force grayscale output even if JPEG file is color. Useful for viewing on
|
||||||
monochrome displays; also,
|
monochrome displays; also,
|
||||||
.B djpeg
|
.B djpeg
|
||||||
runs noticeably faster in this mode.
|
runs noticeably faster in this mode.
|
||||||
.TP
|
.TP
|
||||||
|
.B \-rgb
|
||||||
|
Force RGB output even if JPEG file is grayscale.
|
||||||
|
.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
|
||||||
@@ -74,7 +77,7 @@ emitted if
|
|||||||
.B \-colors
|
.B \-colors
|
||||||
or
|
or
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
is specified, or if the JPEG file is gray-scale; 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.
|
||||||
.TP
|
.TP
|
||||||
.B \-gif
|
.B \-gif
|
||||||
@@ -88,12 +91,12 @@ emitted if
|
|||||||
.B \-colors
|
.B \-colors
|
||||||
or
|
or
|
||||||
.B \-grayscale
|
.B \-grayscale
|
||||||
is specified, or if the JPEG file is gray-scale; 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.
|
||||||
.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).
|
||||||
PGM is emitted if the JPEG file is gray-scale or if
|
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
|
||||||
@@ -101,8 +104,8 @@ is specified; otherwise PPM is emitted.
|
|||||||
Select RLE output format. (Requires URT library.)
|
Select RLE output format. (Requires URT library.)
|
||||||
.TP
|
.TP
|
||||||
.B \-targa
|
.B \-targa
|
||||||
Select Targa output format. Gray-scale format is emitted if the JPEG file is
|
Select Targa output format. Grayscale format is emitted if the JPEG file is
|
||||||
gray-scale or if
|
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
|
||||||
@@ -115,14 +118,28 @@ Use integer DCT method (default).
|
|||||||
.TP
|
.TP
|
||||||
.B \-dct fast
|
.B \-dct fast
|
||||||
Use fast integer DCT (less accurate).
|
Use fast integer DCT (less accurate).
|
||||||
|
In libjpeg-turbo, the fast method is generally about 5-15% faster than the int
|
||||||
|
method when using the x86/x86-64 SIMD extensions (results may vary with other
|
||||||
|
SIMD implementations, or when using libjpeg-turbo without SIMD extensions.) If
|
||||||
|
the JPEG image was compressed using a quality level of 85 or below, then there
|
||||||
|
should be little or no perceptible difference between the two algorithms. When
|
||||||
|
decompressing images that were compressed using quality levels above 85,
|
||||||
|
however, the difference between the fast and int methods becomes more
|
||||||
|
pronounced. With images compressed using quality=97, for instance, the fast
|
||||||
|
method incurs generally about a 4-6 dB loss (in PSNR) relative to the int
|
||||||
|
method, but this can be larger for some images. If you can avoid it, do not
|
||||||
|
use the fast method when decompressing images that were compressed using
|
||||||
|
quality levels above 97. The algorithm often degenerates for such images and
|
||||||
|
can actually produce a more lossy output image than if the JPEG image had been
|
||||||
|
compressed using lower quality levels.
|
||||||
.TP
|
.TP
|
||||||
.B \-dct float
|
.B \-dct float
|
||||||
Use floating-point DCT method.
|
Use floating-point DCT method.
|
||||||
The float method is very slightly more accurate than the int method, but is
|
The float method is mainly a legacy feature. It does not produce significantly
|
||||||
much slower unless your machine has very fast floating-point hardware. Also
|
more accurate results than the int method, and it is much slower. The float
|
||||||
note that results of the floating-point method may vary slightly across
|
method may also give different results on different machines due to varying
|
||||||
machines, while the integer methods should give the same results everywhere.
|
roundoff behavior, whereas the integer methods should give the same results on
|
||||||
The fast integer method is much less accurate than the other two.
|
all machines.
|
||||||
.TP
|
.TP
|
||||||
.B \-dither fs
|
.B \-dither fs
|
||||||
Use Floyd-Steinberg dithering in color quantization.
|
Use Floyd-Steinberg dithering in color quantization.
|
||||||
@@ -160,7 +177,7 @@ faster and needs less memory, but it produces a lower-quality image.
|
|||||||
is ignored unless you also say
|
is ignored unless you also say
|
||||||
.B \-colors
|
.B \-colors
|
||||||
.IR N .
|
.IR N .
|
||||||
Also, the one-pass method is always used for gray-scale output (the two-pass
|
Also, the one-pass method is always used for grayscale output (the two-pass
|
||||||
method is no improvement then).
|
method is no improvement then).
|
||||||
.TP
|
.TP
|
||||||
.BI \-maxmemory " N"
|
.BI \-maxmemory " N"
|
||||||
@@ -168,7 +185,7 @@ Set limit for amount of memory to use in processing large images. Value is
|
|||||||
in thousands of bytes, or millions of bytes if "M" is attached to the
|
in thousands of bytes, or millions of bytes if "M" is attached to the
|
||||||
number. For example,
|
number. For example,
|
||||||
.B \-max 4m
|
.B \-max 4m
|
||||||
selects 4000000 bytes. If more space is needed, temporary files will be used.
|
selects 4000000 bytes. If more space is needed, an error will occur.
|
||||||
.TP
|
.TP
|
||||||
.BI \-outfile " name"
|
.BI \-outfile " name"
|
||||||
Send output image to the named file, not to standard output.
|
Send output image to the named file, not to standard output.
|
||||||
@@ -177,6 +194,19 @@ 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 \-skip " Y0,Y1"
|
||||||
|
Decompress all rows of the JPEG image except those between Y0 and Y1
|
||||||
|
(inclusive.) Note that if decompression scaling is being used, then Y0 and Y1
|
||||||
|
are relative to the scaled image dimensions.
|
||||||
|
.TP
|
||||||
|
.BI \-crop " WxH+X+Y"
|
||||||
|
Decompress only a rectangular subregion of the image, starting at point X,Y
|
||||||
|
with width W and height H. If necessary, X will be shifted left to the nearest
|
||||||
|
iMCU boundary, and the width will be increased accordingly. Note that if
|
||||||
|
decompression scaling is being used, then X, Y, W, and H are relative to the
|
||||||
|
scaled image dimensions. Currently this option only works with the
|
||||||
|
PBMPLUS (PPM/PGM), GIF, and Targa output formats.
|
||||||
|
.TP
|
||||||
.B \-verbose
|
.B \-verbose
|
||||||
Enable debug printout. More
|
Enable debug printout. More
|
||||||
.BR \-v 's
|
.BR \-v 's
|
||||||
@@ -185,6 +215,9 @@ give more output. Also, version information is printed at startup.
|
|||||||
.B \-debug
|
.B \-debug
|
||||||
Same as
|
Same as
|
||||||
.BR \-verbose .
|
.BR \-verbose .
|
||||||
|
.TP
|
||||||
|
.B \-version
|
||||||
|
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, quantizes it to
|
||||||
@@ -251,8 +284,10 @@ 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 BUGS
|
.SH ISSUES
|
||||||
To avoid the Unisys LZW patent,
|
Support for compressed GIF output files was removed in djpeg v6b due to
|
||||||
.B djpeg
|
concerns over the Unisys LZW patent. Although this patent expired in 2006,
|
||||||
produces uncompressed GIF files. These are larger than they should be, but
|
djpeg still lacks compressed GIF support, for these historical reasons.
|
||||||
are readable by standard GIF decoders.
|
(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.
|
||||||
|
|||||||
356
djpeg.c
@@ -3,17 +3,20 @@
|
|||||||
*
|
*
|
||||||
* 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.
|
||||||
* Modifications:
|
* Modified 2013 by Guido Vollbeding.
|
||||||
* Copyright (C) 2010-2011, 2013, D. R. Commander.
|
* libjpeg-turbo Modifications:
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
* Copyright (C) 2010-2011, 2013-2017, D. R. Commander.
|
||||||
|
* Copyright (C) 2015, Google, Inc.
|
||||||
|
* For conditions of distribution and use, see the accompanying README.ijg
|
||||||
|
* file.
|
||||||
*
|
*
|
||||||
* This file contains a command-line user interface for the JPEG decompressor.
|
* This file contains a command-line user interface for the JPEG decompressor.
|
||||||
* 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.
|
||||||
*
|
*
|
||||||
* Two different command line styles are permitted, depending on the
|
* Two different command line styles are permitted, depending on the
|
||||||
* compile-time switch TWO_FILE_COMMANDLINE:
|
* compile-time switch TWO_FILE_COMMANDLINE:
|
||||||
* djpeg [options] inputfile outputfile
|
* djpeg [options] inputfile outputfile
|
||||||
* djpeg [options] [inputfile]
|
* djpeg [options] [inputfile]
|
||||||
* In the second style, output is always to standard output, which you'd
|
* In the second style, output is always to standard output, which you'd
|
||||||
* normally redirect to a file or pipe to some other program. Input is
|
* normally redirect to a file or pipe to some other program. Input is
|
||||||
* either from a named file or from standard input (typically redirected).
|
* either from a named file or from standard input (typically redirected).
|
||||||
@@ -21,30 +24,30 @@
|
|||||||
* don't support pipes. Also, you MUST use the first style if your system
|
* don't support pipes. Also, you MUST use the first style if your system
|
||||||
* doesn't do binary I/O to stdin/stdout.
|
* doesn't do binary I/O to stdin/stdout.
|
||||||
* To simplify script writing, the "-outfile" switch is provided. The syntax
|
* To simplify script writing, the "-outfile" switch is provided. The syntax
|
||||||
* djpeg [options] -outfile outputfile inputfile
|
* djpeg [options] -outfile outputfile inputfile
|
||||||
* works regardless of which command line style is used.
|
* works regardless of which command line style is used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#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 "config.h"
|
#include "jconfigint.h"
|
||||||
|
|
||||||
#include <ctype.h> /* to declare isprint() */
|
#include <ctype.h> /* to declare isprint() */
|
||||||
|
|
||||||
#ifdef USE_CCOMMAND /* command-line reader for Macintosh */
|
#ifdef USE_CCOMMAND /* command-line reader for Macintosh */
|
||||||
#ifdef __MWERKS__
|
#ifdef __MWERKS__
|
||||||
#include <SIOUX.h> /* Metrowerks needs this */
|
#include <SIOUX.h> /* Metrowerks needs this */
|
||||||
#include <console.h> /* ... and this */
|
#include <console.h> /* ... and this */
|
||||||
#endif
|
#endif
|
||||||
#ifdef THINK_C
|
#ifdef THINK_C
|
||||||
#include <console.h> /* Think declares it here */
|
#include <console.h> /* Think declares it here */
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Create the add-on message string table. */
|
/* Create the add-on message string table. */
|
||||||
|
|
||||||
#define JMESSAGE(code,string) string ,
|
#define JMESSAGE(code,string) string ,
|
||||||
|
|
||||||
static const char * const cdjpeg_message_table[] = {
|
static const char * const cdjpeg_message_table[] = {
|
||||||
#include "cderror.h"
|
#include "cderror.h"
|
||||||
@@ -60,17 +63,17 @@ 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 */
|
||||||
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_RLE, /* RLE format */
|
||||||
FMT_TARGA, /* Targa format */
|
FMT_TARGA, /* Targa format */
|
||||||
FMT_TIFF /* TIFF format */
|
FMT_TIFF /* TIFF format */
|
||||||
} IMAGE_FORMATS;
|
} IMAGE_FORMATS;
|
||||||
|
|
||||||
#ifndef DEFAULT_FMT /* so can override from CFLAGS in Makefile */
|
#ifndef DEFAULT_FMT /* so can override from CFLAGS in Makefile */
|
||||||
#define DEFAULT_FMT FMT_PPM
|
#define DEFAULT_FMT FMT_PPM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static IMAGE_FORMATS requested_fmt;
|
static IMAGE_FORMATS requested_fmt;
|
||||||
@@ -85,9 +88,12 @@ static IMAGE_FORMATS requested_fmt;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
static const char * progname; /* program name for error messages */
|
static const char *progname; /* program name for error messages */
|
||||||
static char * outfilename; /* for -outfile switch */
|
static char *outfilename; /* for -outfile switch */
|
||||||
boolean memsrc; /* for -memsrc switch */
|
boolean memsrc; /* for -memsrc switch */
|
||||||
|
boolean skip, crop;
|
||||||
|
JDIMENSION skip_start, skip_end;
|
||||||
|
JDIMENSION crop_x, crop_y, crop_width, crop_height;
|
||||||
#define INPUT_BUF_SIZE 4096
|
#define INPUT_BUF_SIZE 4096
|
||||||
|
|
||||||
|
|
||||||
@@ -107,45 +113,46 @@ usage (void)
|
|||||||
fprintf(stderr, " -fast Fast, low-quality processing\n");
|
fprintf(stderr, " -fast Fast, low-quality processing\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");
|
||||||
#ifdef IDCT_SCALING_SUPPORTED
|
#ifdef IDCT_SCALING_SUPPORTED
|
||||||
fprintf(stderr, " -scale M/N Scale output image by fraction M/N, eg, 1/8\n");
|
fprintf(stderr, " -scale M/N Scale output image by fraction M/N, eg, 1/8\n");
|
||||||
#endif
|
#endif
|
||||||
#ifdef BMP_SUPPORTED
|
#ifdef BMP_SUPPORTED
|
||||||
fprintf(stderr, " -bmp Select BMP output format (Windows style)%s\n",
|
fprintf(stderr, " -bmp Select BMP output format (Windows style)%s\n",
|
||||||
(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%s\n",
|
||||||
(DEFAULT_FMT == FMT_GIF ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_GIF ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef BMP_SUPPORTED
|
#ifdef BMP_SUPPORTED
|
||||||
fprintf(stderr, " -os2 Select BMP output format (OS/2 style)%s\n",
|
fprintf(stderr, " -os2 Select BMP output format (OS/2 style)%s\n",
|
||||||
(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
|
#ifdef RLE_SUPPORTED
|
||||||
fprintf(stderr, " -rle Select Utah RLE output format%s\n",
|
fprintf(stderr, " -rle Select Utah RLE output format%s\n",
|
||||||
(DEFAULT_FMT == FMT_RLE ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_RLE ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef TARGA_SUPPORTED
|
#ifdef TARGA_SUPPORTED
|
||||||
fprintf(stderr, " -targa Select Targa output format%s\n",
|
fprintf(stderr, " -targa Select Targa output format%s\n",
|
||||||
(DEFAULT_FMT == FMT_TARGA ? " (default)" : ""));
|
(DEFAULT_FMT == FMT_TARGA ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, "Switches for advanced users:\n");
|
fprintf(stderr, "Switches for advanced users:\n");
|
||||||
#ifdef DCT_ISLOW_SUPPORTED
|
#ifdef DCT_ISLOW_SUPPORTED
|
||||||
fprintf(stderr, " -dct int Use integer DCT method%s\n",
|
fprintf(stderr, " -dct int Use integer DCT method%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_IFAST_SUPPORTED
|
#ifdef DCT_IFAST_SUPPORTED
|
||||||
fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n",
|
fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
#ifdef DCT_FLOAT_SUPPORTED
|
#ifdef DCT_FLOAT_SUPPORTED
|
||||||
fprintf(stderr, " -dct float Use floating-point DCT method%s\n",
|
fprintf(stderr, " -dct float Use floating-point DCT method%s\n",
|
||||||
(JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));
|
(JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, " -dither fs Use F-S dithering (default)\n");
|
fprintf(stderr, " -dither fs Use F-S dithering (default)\n");
|
||||||
fprintf(stderr, " -dither none Don't use dithering in quantization\n");
|
fprintf(stderr, " -dither none Don't use dithering in quantization\n");
|
||||||
@@ -163,14 +170,18 @@ usage (void)
|
|||||||
fprintf(stderr, " -memsrc Load input file into memory before decompressing\n");
|
fprintf(stderr, " -memsrc Load input file into memory before decompressing\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
fprintf(stderr, " -skip Y0,Y1 Decompress all rows except those between Y0 and Y1 (inclusive)\n");
|
||||||
|
fprintf(stderr, " -crop WxH+X+Y Decompress only a rectangular subregion of the image\n");
|
||||||
|
fprintf(stderr, " [requires PBMPLUS (PPM/PGM), GIF, or Targa output format]\n");
|
||||||
fprintf(stderr, " -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");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LOCAL(int)
|
LOCAL(int)
|
||||||
parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
||||||
int last_file_arg_seen, boolean for_real)
|
int last_file_arg_seen, boolean for_real)
|
||||||
/* Parse optional switches.
|
/* Parse optional switches.
|
||||||
* Returns argv[] index of first file-name argument (== argc if none).
|
* Returns argv[] index of first file-name argument (== argc if none).
|
||||||
* Any file names with indexes <= last_file_arg_seen are ignored;
|
* Any file names with indexes <= last_file_arg_seen are ignored;
|
||||||
@@ -181,12 +192,14 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
int argn;
|
int argn;
|
||||||
char * arg;
|
char *arg;
|
||||||
|
|
||||||
/* Set up default JPEG parameters. */
|
/* Set up default JPEG parameters. */
|
||||||
requested_fmt = DEFAULT_FMT; /* set default output file format */
|
requested_fmt = DEFAULT_FMT; /* set default output file format */
|
||||||
outfilename = NULL;
|
outfilename = NULL;
|
||||||
memsrc = FALSE;
|
memsrc = FALSE;
|
||||||
|
skip = FALSE;
|
||||||
|
crop = FALSE;
|
||||||
cinfo->err->trace_level = 0;
|
cinfo->err->trace_level = 0;
|
||||||
|
|
||||||
/* Scan command line options, adjust parameters */
|
/* Scan command line options, adjust parameters */
|
||||||
@@ -196,54 +209,54 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
if (*arg != '-') {
|
if (*arg != '-') {
|
||||||
/* Not a switch, must be a file name argument */
|
/* Not a switch, must be a file name argument */
|
||||||
if (argn <= last_file_arg_seen) {
|
if (argn <= last_file_arg_seen) {
|
||||||
outfilename = NULL; /* -outfile applies to just one input file */
|
outfilename = NULL; /* -outfile applies to just one input file */
|
||||||
continue; /* ignore this name if previously processed */
|
continue; /* ignore this name if previously processed */
|
||||||
}
|
}
|
||||||
break; /* else done parsing switches */
|
break; /* else done parsing switches */
|
||||||
}
|
}
|
||||||
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. */
|
||||||
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) ||
|
||||||
keymatch(arg, "quantize", 1) || keymatch(arg, "quantise", 1)) {
|
keymatch(arg, "quantize", 1) || keymatch(arg, "quantise", 1)) {
|
||||||
/* Do color quantization. */
|
/* Do color quantization. */
|
||||||
int val;
|
int val;
|
||||||
|
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
if (sscanf(argv[argn], "%d", &val) != 1)
|
if (sscanf(argv[argn], "%d", &val) != 1)
|
||||||
usage();
|
usage();
|
||||||
cinfo->desired_number_of_colors = val;
|
cinfo->desired_number_of_colors = val;
|
||||||
cinfo->quantize_colors = TRUE;
|
cinfo->quantize_colors = TRUE;
|
||||||
|
|
||||||
} else if (keymatch(arg, "dct", 2)) {
|
} else if (keymatch(arg, "dct", 2)) {
|
||||||
/* Select IDCT algorithm. */
|
/* Select IDCT algorithm. */
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
if (keymatch(argv[argn], "int", 1)) {
|
if (keymatch(argv[argn], "int", 1)) {
|
||||||
cinfo->dct_method = JDCT_ISLOW;
|
cinfo->dct_method = JDCT_ISLOW;
|
||||||
} else if (keymatch(argv[argn], "fast", 2)) {
|
} else if (keymatch(argv[argn], "fast", 2)) {
|
||||||
cinfo->dct_method = JDCT_IFAST;
|
cinfo->dct_method = JDCT_IFAST;
|
||||||
} else if (keymatch(argv[argn], "float", 2)) {
|
} else if (keymatch(argv[argn], "float", 2)) {
|
||||||
cinfo->dct_method = JDCT_FLOAT;
|
cinfo->dct_method = JDCT_FLOAT;
|
||||||
} else
|
} else
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
} else if (keymatch(arg, "dither", 2)) {
|
} else if (keymatch(arg, "dither", 2)) {
|
||||||
/* Select dithering algorithm. */
|
/* Select dithering algorithm. */
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
if (keymatch(argv[argn], "fs", 2)) {
|
if (keymatch(argv[argn], "fs", 2)) {
|
||||||
cinfo->dither_mode = JDITHER_FS;
|
cinfo->dither_mode = JDITHER_FS;
|
||||||
} else if (keymatch(argv[argn], "none", 2)) {
|
} else if (keymatch(argv[argn], "none", 2)) {
|
||||||
cinfo->dither_mode = JDITHER_NONE;
|
cinfo->dither_mode = JDITHER_NONE;
|
||||||
} else if (keymatch(argv[argn], "ordered", 2)) {
|
} else if (keymatch(argv[argn], "ordered", 2)) {
|
||||||
cinfo->dither_mode = JDITHER_ORDERED;
|
cinfo->dither_mode = JDITHER_ORDERED;
|
||||||
} else
|
} else
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
} else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) {
|
} else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) {
|
||||||
/* Enable debug printouts. */
|
/* Enable debug printouts. */
|
||||||
@@ -251,21 +264,26 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
static boolean printed_version = FALSE;
|
static boolean printed_version = FALSE;
|
||||||
|
|
||||||
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, "%s\n\n", JCOPYRIGHT);
|
||||||
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;
|
||||||
}
|
}
|
||||||
cinfo->err->trace_level++;
|
cinfo->err->trace_level++;
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "version", 4)) {
|
||||||
|
fprintf(stderr, "%s version %s (build %s)\n",
|
||||||
|
PACKAGE_NAME, VERSION, BUILD);
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
|
||||||
} else if (keymatch(arg, "fast", 1)) {
|
} else if (keymatch(arg, "fast", 1)) {
|
||||||
/* Select recommended processing options for quick-and-dirty output. */
|
/* Select recommended processing options for quick-and-dirty output. */
|
||||||
cinfo->two_pass_quantize = FALSE;
|
cinfo->two_pass_quantize = FALSE;
|
||||||
cinfo->dither_mode = JDITHER_ORDERED;
|
cinfo->dither_mode = JDITHER_ORDERED;
|
||||||
if (! cinfo->quantize_colors) /* don't override an earlier -colors */
|
if (! cinfo->quantize_colors) /* don't override an earlier -colors */
|
||||||
cinfo->desired_number_of_colors = 216;
|
cinfo->desired_number_of_colors = 216;
|
||||||
cinfo->dct_method = JDCT_FASTEST;
|
cinfo->dct_method = JDCT_FASTEST;
|
||||||
cinfo->do_fancy_upsampling = FALSE;
|
cinfo->do_fancy_upsampling = FALSE;
|
||||||
|
|
||||||
@@ -281,23 +299,27 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
/* Force RGB output. */
|
/* Force RGB output. */
|
||||||
cinfo->out_color_space = JCS_RGB;
|
cinfo->out_color_space = JCS_RGB;
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "rgb565", 2)) {
|
||||||
|
/* Force RGB565 output. */
|
||||||
|
cinfo->out_color_space = JCS_RGB565;
|
||||||
|
|
||||||
} else if (keymatch(arg, "map", 3)) {
|
} else if (keymatch(arg, "map", 3)) {
|
||||||
/* Quantize to a color map taken from an input file. */
|
/* Quantize to a color map taken from an input file. */
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
if (for_real) { /* too expensive to do twice! */
|
if (for_real) { /* too expensive to do twice! */
|
||||||
#ifdef QUANT_2PASS_SUPPORTED /* otherwise can't quantize to supplied map */
|
#ifdef QUANT_2PASS_SUPPORTED /* otherwise can't quantize to supplied map */
|
||||||
FILE * mapfile;
|
FILE *mapfile;
|
||||||
|
|
||||||
if ((mapfile = fopen(argv[argn], READ_BINARY)) == NULL) {
|
if ((mapfile = fopen(argv[argn], READ_BINARY)) == NULL) {
|
||||||
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);
|
read_color_map(cinfo, mapfile);
|
||||||
fclose(mapfile);
|
fclose(mapfile);
|
||||||
cinfo->quantize_colors = TRUE;
|
cinfo->quantize_colors = TRUE;
|
||||||
#else
|
#else
|
||||||
ERREXIT(cinfo, JERR_NOT_COMPILED);
|
ERREXIT(cinfo, JERR_NOT_COMPILED);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,12 +328,12 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
long lval;
|
long lval;
|
||||||
char ch = 'x';
|
char ch = 'x';
|
||||||
|
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1)
|
if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1)
|
||||||
usage();
|
usage();
|
||||||
if (ch == 'm' || ch == 'M')
|
if (ch == 'm' || ch == 'M')
|
||||||
lval *= 1000L;
|
lval *= 1000L;
|
||||||
cinfo->mem->max_memory_to_use = lval * 1000L;
|
cinfo->mem->max_memory_to_use = lval * 1000L;
|
||||||
|
|
||||||
} else if (keymatch(arg, "nosmooth", 3)) {
|
} else if (keymatch(arg, "nosmooth", 3)) {
|
||||||
@@ -328,9 +350,9 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
|
|
||||||
} else if (keymatch(arg, "outfile", 4)) {
|
} else if (keymatch(arg, "outfile", 4)) {
|
||||||
/* Set output file name. */
|
/* Set output file name. */
|
||||||
if (++argn >= argc) /* advance to next argument */
|
if (++argn >= argc) /* advance to next argument */
|
||||||
usage();
|
usage();
|
||||||
outfilename = argv[argn]; /* save it away for later use */
|
outfilename = argv[argn]; /* save it away for later use */
|
||||||
|
|
||||||
} else if (keymatch(arg, "memsrc", 2)) {
|
} else if (keymatch(arg, "memsrc", 2)) {
|
||||||
/* Use in-memory source manager */
|
/* Use in-memory source manager */
|
||||||
@@ -350,24 +372,42 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
|
|||||||
/* RLE output format. */
|
/* RLE output format. */
|
||||||
requested_fmt = FMT_RLE;
|
requested_fmt = FMT_RLE;
|
||||||
|
|
||||||
} else if (keymatch(arg, "scale", 1)) {
|
} else if (keymatch(arg, "scale", 2)) {
|
||||||
/* 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();
|
||||||
if (sscanf(argv[argn], "%d/%d",
|
if (sscanf(argv[argn], "%u/%u",
|
||||||
&cinfo->scale_num, &cinfo->scale_denom) != 2)
|
&cinfo->scale_num, &cinfo->scale_denom) != 2)
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "skip", 2)) {
|
||||||
|
if (++argn >= argc)
|
||||||
|
usage();
|
||||||
|
if (sscanf(argv[argn], "%u,%u", &skip_start, &skip_end) != 2 ||
|
||||||
|
skip_start > skip_end)
|
||||||
|
usage();
|
||||||
|
skip = TRUE;
|
||||||
|
|
||||||
|
} else if (keymatch(arg, "crop", 2)) {
|
||||||
|
char c;
|
||||||
|
if (++argn >= argc)
|
||||||
|
usage();
|
||||||
|
if (sscanf(argv[argn], "%u%c%u+%u+%u", &crop_width, &c, &crop_height,
|
||||||
|
&crop_x, &crop_y) != 5 ||
|
||||||
|
(c != 'X' && c != 'x') || crop_width < 1 || crop_height < 1)
|
||||||
|
usage();
|
||||||
|
crop = TRUE;
|
||||||
|
|
||||||
} else if (keymatch(arg, "targa", 1)) {
|
} else if (keymatch(arg, "targa", 1)) {
|
||||||
/* Targa output format. */
|
/* Targa output format. */
|
||||||
requested_fmt = FMT_TARGA;
|
requested_fmt = FMT_TARGA;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
usage(); /* bogus switch */
|
usage(); /* bogus switch */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return argn; /* return index of next arg (file name) */
|
return argn; /* return index of next arg (file name) */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -382,7 +422,7 @@ LOCAL(unsigned int)
|
|||||||
jpeg_getc (j_decompress_ptr cinfo)
|
jpeg_getc (j_decompress_ptr cinfo)
|
||||||
/* Read next byte */
|
/* Read next byte */
|
||||||
{
|
{
|
||||||
struct jpeg_source_mgr * datasrc = cinfo->src;
|
struct jpeg_source_mgr *datasrc = cinfo->src;
|
||||||
|
|
||||||
if (datasrc->bytes_in_buffer == 0) {
|
if (datasrc->bytes_in_buffer == 0) {
|
||||||
if (! (*datasrc->fill_input_buffer) (cinfo))
|
if (! (*datasrc->fill_input_buffer) (cinfo))
|
||||||
@@ -397,20 +437,20 @@ METHODDEF(boolean)
|
|||||||
print_text_marker (j_decompress_ptr cinfo)
|
print_text_marker (j_decompress_ptr cinfo)
|
||||||
{
|
{
|
||||||
boolean traceit = (cinfo->err->trace_level >= 1);
|
boolean traceit = (cinfo->err->trace_level >= 1);
|
||||||
INT32 length;
|
long length;
|
||||||
unsigned int ch;
|
unsigned int ch;
|
||||||
unsigned int lastch = 0;
|
unsigned int lastch = 0;
|
||||||
|
|
||||||
length = jpeg_getc(cinfo) << 8;
|
length = jpeg_getc(cinfo) << 8;
|
||||||
length += jpeg_getc(cinfo);
|
length += jpeg_getc(cinfo);
|
||||||
length -= 2; /* discount the length word itself */
|
length -= 2; /* discount the length word itself */
|
||||||
|
|
||||||
if (traceit) {
|
if (traceit) {
|
||||||
if (cinfo->unread_marker == JPEG_COM)
|
if (cinfo->unread_marker == JPEG_COM)
|
||||||
fprintf(stderr, "Comment, length %ld:\n", (long) length);
|
fprintf(stderr, "Comment, length %ld:\n", (long) length);
|
||||||
else /* assume it is an APPn otherwise */
|
else /* assume it is an APPn otherwise */
|
||||||
fprintf(stderr, "APP%d, length %ld:\n",
|
fprintf(stderr, "APP%d, length %ld:\n",
|
||||||
cinfo->unread_marker - JPEG_APP0, (long) length);
|
cinfo->unread_marker - JPEG_APP0, (long) length);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (--length >= 0) {
|
while (--length >= 0) {
|
||||||
@@ -422,16 +462,16 @@ print_text_marker (j_decompress_ptr cinfo)
|
|||||||
* Newlines in CR, CR/LF, or LF form will be printed as one newline.
|
* Newlines in CR, CR/LF, or LF form will be printed as one newline.
|
||||||
*/
|
*/
|
||||||
if (ch == '\r') {
|
if (ch == '\r') {
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
} else if (ch == '\n') {
|
} else if (ch == '\n') {
|
||||||
if (lastch != '\r')
|
if (lastch != '\r')
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
} else if (ch == '\\') {
|
} else if (ch == '\\') {
|
||||||
fprintf(stderr, "\\\\");
|
fprintf(stderr, "\\\\");
|
||||||
} else if (isprint(ch)) {
|
} else if (isprint(ch)) {
|
||||||
putc(ch, stderr);
|
putc(ch, stderr);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "\\%03o", ch);
|
fprintf(stderr, "\\%03o", ch);
|
||||||
}
|
}
|
||||||
lastch = ch;
|
lastch = ch;
|
||||||
}
|
}
|
||||||
@@ -458,8 +498,8 @@ main (int argc, char **argv)
|
|||||||
#endif
|
#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;
|
||||||
unsigned long insize = 0;
|
unsigned long insize = 0;
|
||||||
JDIMENSION num_scanlines;
|
JDIMENSION num_scanlines;
|
||||||
@@ -471,7 +511,7 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
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 */
|
||||||
|
|
||||||
/* Initialize the JPEG decompression object with default error handling. */
|
/* Initialize the JPEG decompression object with default error handling. */
|
||||||
cinfo.err = jpeg_std_error(&jerr);
|
cinfo.err = jpeg_std_error(&jerr);
|
||||||
@@ -490,11 +530,6 @@ main (int argc, char **argv)
|
|||||||
jpeg_set_marker_processor(&cinfo, JPEG_COM, print_text_marker);
|
jpeg_set_marker_processor(&cinfo, JPEG_COM, print_text_marker);
|
||||||
jpeg_set_marker_processor(&cinfo, JPEG_APP0+12, print_text_marker);
|
jpeg_set_marker_processor(&cinfo, JPEG_APP0+12, print_text_marker);
|
||||||
|
|
||||||
/* Now safe to enable signal catcher. */
|
|
||||||
#ifdef NEED_SIGNAL_CATCHER
|
|
||||||
enable_signal_catcher((j_common_ptr) &cinfo);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Scan command line to find file names. */
|
/* Scan command line to find file names. */
|
||||||
/* It is convenient to use just one switch-parsing routine, but the switch
|
/* It is convenient to use just one switch-parsing routine, but the switch
|
||||||
* values read here are ignored; we will rescan the switches after opening
|
* values read here are ignored; we will rescan the switches after opening
|
||||||
@@ -510,14 +545,14 @@ main (int argc, char **argv)
|
|||||||
if (outfilename == NULL) {
|
if (outfilename == NULL) {
|
||||||
if (file_index != argc-2) {
|
if (file_index != argc-2) {
|
||||||
fprintf(stderr, "%s: must name one input and one output file\n",
|
fprintf(stderr, "%s: must name one input and one output file\n",
|
||||||
progname);
|
progname);
|
||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
outfilename = argv[file_index+1];
|
outfilename = argv[file_index+1];
|
||||||
} else {
|
} else {
|
||||||
if (file_index != argc-1) {
|
if (file_index != argc-1) {
|
||||||
fprintf(stderr, "%s: must name one input and one output file\n",
|
fprintf(stderr, "%s: must name one input and one output file\n",
|
||||||
progname);
|
progname);
|
||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -566,7 +601,7 @@ main (int argc, char **argv)
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
nbytes = JFREAD(input_file, &inbuffer[insize], INPUT_BUF_SIZE);
|
nbytes = JFREAD(input_file, &inbuffer[insize], INPUT_BUF_SIZE);
|
||||||
if (nbytes < 0) {
|
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,
|
||||||
argv[file_index]);
|
argv[file_index]);
|
||||||
@@ -628,14 +663,89 @@ main (int argc, char **argv)
|
|||||||
/* Start decompressor */
|
/* Start decompressor */
|
||||||
(void) jpeg_start_decompress(&cinfo);
|
(void) jpeg_start_decompress(&cinfo);
|
||||||
|
|
||||||
/* Write output file header */
|
/* Skip rows */
|
||||||
(*dest_mgr->start_output) (&cinfo, dest_mgr);
|
if (skip) {
|
||||||
|
JDIMENSION tmp;
|
||||||
|
|
||||||
/* Process data */
|
/* Check for valid skip_end. We cannot check this value until after
|
||||||
while (cinfo.output_scanline < cinfo.output_height) {
|
* jpeg_start_decompress() is called. Note that we have already verified
|
||||||
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
* that skip_start <= skip_end.
|
||||||
dest_mgr->buffer_height);
|
*/
|
||||||
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
if (skip_end > cinfo.output_height - 1) {
|
||||||
|
fprintf(stderr, "%s: skip region exceeds image height %d\n", progname,
|
||||||
|
cinfo.output_height);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write output file header. This is a hack to ensure that the destination
|
||||||
|
* manager creates an output image of the proper size.
|
||||||
|
*/
|
||||||
|
tmp = cinfo.output_height;
|
||||||
|
cinfo.output_height -= (skip_end - skip_start + 1);
|
||||||
|
(*dest_mgr->start_output) (&cinfo, dest_mgr);
|
||||||
|
cinfo.output_height = tmp;
|
||||||
|
|
||||||
|
/* 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);
|
||||||
|
}
|
||||||
|
jpeg_skip_scanlines(&cinfo, skip_end - skip_start + 1);
|
||||||
|
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 */
|
||||||
|
} else if (crop) {
|
||||||
|
JDIMENSION tmp;
|
||||||
|
|
||||||
|
/* Check for valid crop dimensions. We cannot check these values until
|
||||||
|
* after jpeg_start_decompress() is called.
|
||||||
|
*/
|
||||||
|
if (crop_x + crop_width > cinfo.output_width ||
|
||||||
|
crop_y + crop_height > cinfo.output_height) {
|
||||||
|
fprintf(stderr, "%s: crop dimensions exceed image dimensions %d x %d\n",
|
||||||
|
progname, cinfo.output_width, cinfo.output_height);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
jpeg_crop_scanline(&cinfo, &crop_x, &crop_width);
|
||||||
|
if (dest_mgr->calc_buffer_dimensions)
|
||||||
|
(*dest_mgr->calc_buffer_dimensions) (&cinfo, dest_mgr);
|
||||||
|
else
|
||||||
|
ERREXIT(&cinfo, JERR_UNSUPPORTED_FORMAT);
|
||||||
|
|
||||||
|
/* Write output file header. This is a hack to ensure that the destination
|
||||||
|
* manager creates an output image of the proper size.
|
||||||
|
*/
|
||||||
|
tmp = cinfo.output_height;
|
||||||
|
cinfo.output_height = crop_height;
|
||||||
|
(*dest_mgr->start_output) (&cinfo, dest_mgr);
|
||||||
|
cinfo.output_height = tmp;
|
||||||
|
|
||||||
|
/* Process data */
|
||||||
|
jpeg_skip_scanlines(&cinfo, crop_y);
|
||||||
|
while (cinfo.output_scanline < crop_y + crop_height) {
|
||||||
|
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
|
||||||
|
dest_mgr->buffer_height);
|
||||||
|
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
|
||||||
|
}
|
||||||
|
jpeg_skip_scanlines(&cinfo, cinfo.output_height - crop_y - crop_height);
|
||||||
|
|
||||||
|
/* Normal full-image decompress */
|
||||||
|
} else {
|
||||||
|
/* Write output file header */
|
||||||
|
(*dest_mgr->start_output) (&cinfo, dest_mgr);
|
||||||
|
|
||||||
|
/* 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
|
#ifdef PROGRESS_REPORT
|
||||||
@@ -668,5 +778,5 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
/* All done. */
|
/* All done. */
|
||||||
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
|
||||||
return 0; /* suppress no-return-value warnings */
|
return 0; /* suppress no-return-value warnings */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,35 +2,46 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
||||||
<title>TurboJPEG: Data Structures</title>
|
<title>TurboJPEG: Data Structures</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||||
|
</script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
<body onload='searchBox.OnSelectItem(0);'>
|
<body>
|
||||||
<!-- Generated by Doxygen 1.7.4 -->
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
<script type="text/javascript"><!--
|
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
||||||
--></script>
|
|
||||||
<div id="top">
|
|
||||||
<div id="titlearea">
|
<div id="titlearea">
|
||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG <span id="projectnumber">1.2.1</span></div>
|
<div id="projectname">TurboJPEG
|
||||||
|
 <span id="projectnumber">1.5</span>
|
||||||
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<div id="navrow1" class="tabs">
|
||||||
<ul class="tablist">
|
<ul class="tablist">
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||||
<li id="searchli">
|
<li>
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||||
<span class="left">
|
<span class="left">
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||||
@@ -55,24 +66,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div><!-- top -->
|
||||||
<div class="header">
|
|
||||||
<div class="headertitle">
|
|
||||||
<div class="title">Data Structures</div> </div>
|
|
||||||
</div>
|
|
||||||
<div class="contents">
|
|
||||||
<div class="textblock">Here are the data structures with brief descriptions:</div><table>
|
|
||||||
<tr><td class="indexkey"><a class="el" href="structtjregion.html">tjregion</a></td><td class="indexvalue">Cropping region </td></tr>
|
|
||||||
<tr><td class="indexkey"><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a></td><td class="indexvalue">Scaling factor </td></tr>
|
|
||||||
<tr><td class="indexkey"><a class="el" href="structtjtransform.html">tjtransform</a></td><td class="indexvalue">Lossless transform </td></tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Variables</a></div>
|
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -81,8 +81,24 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
<div class="header">
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<div class="headertitle">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<div class="title">Data Structures</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
|
||||||
|
<table class="directory">
|
||||||
|
<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtjregion.html" target="_self">tjregion</a></td><td class="desc">Cropping region</td></tr>
|
||||||
|
<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtjscalingfactor.html" target="_self">tjscalingfactor</a></td><td class="desc">Scaling factor</td></tr>
|
||||||
|
<tr id="row_2_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtjtransform.html" target="_self">tjtransform</a></td><td class="desc">Lossless transform</td></tr>
|
||||||
|
</table>
|
||||||
|
</div><!-- directory -->
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.3.1
|
||||||
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 677 B After Width: | Height: | Size: 676 B |
BIN
doc/html/bdwn.png
Normal file
|
After Width: | Height: | Size: 147 B |
@@ -2,35 +2,46 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
||||||
<title>TurboJPEG: Data Structure Index</title>
|
<title>TurboJPEG: Data Structure Index</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||||
|
</script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
<body onload='searchBox.OnSelectItem(0);'>
|
<body>
|
||||||
<!-- Generated by Doxygen 1.7.4 -->
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
<script type="text/javascript"><!--
|
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
||||||
--></script>
|
|
||||||
<div id="top">
|
|
||||||
<div id="titlearea">
|
<div id="titlearea">
|
||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG <span id="projectnumber">1.2.1</span></div>
|
<div id="projectname">TurboJPEG
|
||||||
|
 <span id="projectnumber">1.5</span>
|
||||||
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<div id="navrow1" class="tabs">
|
||||||
<ul class="tablist">
|
<ul class="tablist">
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||||
<li id="searchli">
|
<li>
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||||
<span class="left">
|
<span class="left">
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||||
@@ -55,23 +66,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
<li><a href="functions.html"><span>Data Fields</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div><!-- top -->
|
||||||
<div class="header">
|
|
||||||
<div class="headertitle">
|
|
||||||
<div class="title">Data Structure Index</div> </div>
|
|
||||||
</div>
|
|
||||||
<div class="contents">
|
|
||||||
<div class="qindex"><a class="qindex" href="#letter_T">T</a></div>
|
|
||||||
<table align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
|
|
||||||
<tr><td><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  T  </div></td></tr></table>
|
|
||||||
</td><td><a class="el" href="structtjregion.html">tjregion</a>   </td><td><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a>   </td><td><a class="el" href="structtjtransform.html">tjtransform</a>   </td></tr></table><div class="qindex"><a class="qindex" href="#letter_T">T</a></div>
|
|
||||||
</div>
|
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Variables</a></div>
|
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -80,8 +81,26 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
<div class="header">
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<div class="headertitle">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<div class="title">Data Structure Index</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="qindex"><a class="qindex" href="#letter_T">T</a></div>
|
||||||
|
<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr><td rowspan="2" valign="bottom"><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  T  </div></td></tr></table>
|
||||||
|
</td><td valign="top"><a class="el" href="structtjscalingfactor.html">tjscalingfactor</a>   </td><td valign="top"><a class="el" href="structtjtransform.html">tjtransform</a>   </td><td></td></tr>
|
||||||
|
<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 -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.3.1
|
||||||
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 126 B After Width: | Height: | Size: 132 B |
3
doc/html/doxygen-extra.css
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
code {
|
||||||
|
color: #4665A2;
|
||||||
|
}
|
||||||
@@ -1,13 +1,12 @@
|
|||||||
/* The standard CSS for doxygen */
|
/* The standard CSS for doxygen 1.8.3.1 */
|
||||||
|
|
||||||
body, table, div, p, dl {
|
body, table, div, p, dl {
|
||||||
font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
|
font: 400 14px/19px Roboto,sans-serif;
|
||||||
font-size: 12px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @group Heading Levels */
|
/* @group Heading Levels */
|
||||||
|
|
||||||
h1 {
|
h1.groupheader {
|
||||||
font-size: 150%;
|
font-size: 150%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,14 +16,34 @@ h1 {
|
|||||||
margin: 10px 2px;
|
margin: 10px 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2.groupheader {
|
||||||
font-size: 120%;
|
border-bottom: 1px solid #879ECB;
|
||||||
|
color: #354C7B;
|
||||||
|
font-size: 150%;
|
||||||
|
font-weight: normal;
|
||||||
|
margin-top: 1.75em;
|
||||||
|
padding-top: 8px;
|
||||||
|
padding-bottom: 4px;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
h3.groupheader {
|
||||||
font-size: 100%;
|
font-size: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
-webkit-transition: text-shadow 0.5s linear;
|
||||||
|
-moz-transition: text-shadow 0.5s linear;
|
||||||
|
-ms-transition: text-shadow 0.5s linear;
|
||||||
|
-o-transition: text-shadow 0.5s linear;
|
||||||
|
transition: text-shadow 0.5s linear;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
|
||||||
|
text-shadow: 0 0 15px cyan;
|
||||||
|
}
|
||||||
|
|
||||||
dt {
|
dt {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
@@ -72,8 +91,6 @@ div.qindex, div.navtab{
|
|||||||
background-color: #EBEFF6;
|
background-color: #EBEFF6;
|
||||||
border: 1px solid #A3B4D7;
|
border: 1px solid #A3B4D7;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin: 2px;
|
|
||||||
padding: 2px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
div.qindex, div.navpath {
|
div.qindex, div.navpath {
|
||||||
@@ -123,12 +140,12 @@ a.el {
|
|||||||
a.elRef {
|
a.elRef {
|
||||||
}
|
}
|
||||||
|
|
||||||
a.code {
|
a.code, a.code:visited {
|
||||||
color: #4665A2;
|
color: #4665A2;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.codeRef {
|
a.codeRef, a.codeRef:visited {
|
||||||
color: #4665A2;
|
color: #4665A2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @end */
|
/* @end */
|
||||||
@@ -137,20 +154,72 @@ dl.el {
|
|||||||
margin-left: -1cm;
|
margin-left: -1cm;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fragment {
|
pre.fragment {
|
||||||
font-family: monospace, fixed;
|
border: 1px solid #C4CFE5;
|
||||||
font-size: 105%;
|
background-color: #FBFCFD;
|
||||||
|
padding: 4px 6px;
|
||||||
|
margin: 4px 8px 4px 2px;
|
||||||
|
overflow: auto;
|
||||||
|
word-wrap: break-word;
|
||||||
|
font-size: 9pt;
|
||||||
|
line-height: 125%;
|
||||||
|
font-family: monospace, fixed;
|
||||||
|
font-size: 105%;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre.fragment {
|
div.fragment {
|
||||||
border: 1px solid #C4CFE5;
|
padding: 4px;
|
||||||
|
margin: 4px;
|
||||||
background-color: #FBFCFD;
|
background-color: #FBFCFD;
|
||||||
padding: 4px 6px;
|
border: 1px solid #C4CFE5;
|
||||||
margin: 4px 8px 4px 2px;
|
}
|
||||||
overflow: auto;
|
|
||||||
word-wrap: break-word;
|
div.line {
|
||||||
font-size: 9pt;
|
font-family: monospace, fixed;
|
||||||
line-height: 125%;
|
font-size: 13px;
|
||||||
|
min-height: 13px;
|
||||||
|
line-height: 1.0;
|
||||||
|
text-wrap: unrestricted;
|
||||||
|
white-space: -moz-pre-wrap; /* Moz */
|
||||||
|
white-space: -pre-wrap; /* Opera 4-6 */
|
||||||
|
white-space: -o-pre-wrap; /* Opera 7 */
|
||||||
|
white-space: pre-wrap; /* CSS3 */
|
||||||
|
word-wrap: break-word; /* IE 5.5+ */
|
||||||
|
text-indent: -53px;
|
||||||
|
padding-left: 53px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
margin: 0px;
|
||||||
|
-webkit-transition-property: background-color, box-shadow;
|
||||||
|
-webkit-transition-duration: 0.5s;
|
||||||
|
-moz-transition-property: background-color, box-shadow;
|
||||||
|
-moz-transition-duration: 0.5s;
|
||||||
|
-ms-transition-property: background-color, box-shadow;
|
||||||
|
-ms-transition-duration: 0.5s;
|
||||||
|
-o-transition-property: background-color, box-shadow;
|
||||||
|
-o-transition-duration: 0.5s;
|
||||||
|
transition-property: background-color, box-shadow;
|
||||||
|
transition-duration: 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.line.glow {
|
||||||
|
background-color: cyan;
|
||||||
|
box-shadow: 0 0 10px cyan;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
span.lineno {
|
||||||
|
padding-right: 4px;
|
||||||
|
text-align: right;
|
||||||
|
border-right: 2px solid #0F0;
|
||||||
|
background-color: #E8E8E8;
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
span.lineno a {
|
||||||
|
background-color: #D8D8D8;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.lineno a:hover {
|
||||||
|
background-color: #C8C8C8;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.ah {
|
div.ah {
|
||||||
@@ -183,15 +252,15 @@ div.groupText {
|
|||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background: white;
|
background-color: white;
|
||||||
color: black;
|
color: black;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.contents {
|
div.contents {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
margin-left: 10px;
|
margin-left: 12px;
|
||||||
margin-right: 5px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.indexkey {
|
td.indexkey {
|
||||||
@@ -200,6 +269,8 @@ td.indexkey {
|
|||||||
border: 1px solid #C4CFE5;
|
border: 1px solid #C4CFE5;
|
||||||
margin: 2px 0px 2px 0;
|
margin: 2px 0px 2px 0;
|
||||||
padding: 2px 10px;
|
padding: 2px 10px;
|
||||||
|
white-space: nowrap;
|
||||||
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
td.indexvalue {
|
td.indexvalue {
|
||||||
@@ -292,6 +363,13 @@ span.vhdllogic {
|
|||||||
color: #ff0000
|
color: #ff0000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
background-color: #F7F8FB;
|
||||||
|
border-left: 2px solid #9CAFD4;
|
||||||
|
margin: 0 24px 0 4px;
|
||||||
|
padding: 0 12px 0 16px;
|
||||||
|
}
|
||||||
|
|
||||||
/* @end */
|
/* @end */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -345,6 +423,24 @@ table.memberdecls {
|
|||||||
padding: 0px;
|
padding: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.memberdecls td, .fieldtable tr {
|
||||||
|
-webkit-transition-property: background-color, box-shadow;
|
||||||
|
-webkit-transition-duration: 0.5s;
|
||||||
|
-moz-transition-property: background-color, box-shadow;
|
||||||
|
-moz-transition-duration: 0.5s;
|
||||||
|
-ms-transition-property: background-color, box-shadow;
|
||||||
|
-ms-transition-duration: 0.5s;
|
||||||
|
-o-transition-property: background-color, box-shadow;
|
||||||
|
-o-transition-duration: 0.5s;
|
||||||
|
transition-property: background-color, box-shadow;
|
||||||
|
transition-duration: 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.memberdecls td.glow, .fieldtable tr.glow {
|
||||||
|
background-color: cyan;
|
||||||
|
box-shadow: 0 0 15px cyan;
|
||||||
|
}
|
||||||
|
|
||||||
.mdescLeft, .mdescRight,
|
.mdescLeft, .mdescRight,
|
||||||
.memItemLeft, .memItemRight,
|
.memItemLeft, .memItemRight,
|
||||||
.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
|
.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
|
||||||
@@ -359,8 +455,11 @@ table.memberdecls {
|
|||||||
color: #555;
|
color: #555;
|
||||||
}
|
}
|
||||||
|
|
||||||
.memItemLeft, .memItemRight, .memTemplParams {
|
.memSeparator {
|
||||||
border-top: 1px solid #C4CFE5;
|
border-bottom: 1px solid #DEE4F0;
|
||||||
|
line-height: 1px;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.memItemLeft, .memTemplItemLeft {
|
.memItemLeft, .memTemplItemLeft {
|
||||||
@@ -374,6 +473,7 @@ table.memberdecls {
|
|||||||
.memTemplParams {
|
.memTemplParams {
|
||||||
color: #4665A2;
|
color: #4665A2;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
font-size: 80%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @end */
|
/* @end */
|
||||||
@@ -406,15 +506,29 @@ table.memberdecls {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
|
-webkit-transition: box-shadow 0.5s linear;
|
||||||
|
-moz-transition: box-shadow 0.5s linear;
|
||||||
|
-ms-transition: box-shadow 0.5s linear;
|
||||||
|
-o-transition: box-shadow 0.5s linear;
|
||||||
|
transition: box-shadow 0.5s linear;
|
||||||
|
display: table !important;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.memitem.glow {
|
||||||
|
box-shadow: 0 0 15px cyan;
|
||||||
}
|
}
|
||||||
|
|
||||||
.memname {
|
.memname {
|
||||||
white-space: nowrap;
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin-left: 6px;
|
margin-left: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.memproto {
|
.memname td {
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
.memproto, dl.reflist dt {
|
||||||
border-top: 1px solid #A8B8D9;
|
border-top: 1px solid #A8B8D9;
|
||||||
border-left: 1px solid #A8B8D9;
|
border-left: 1px solid #A8B8D9;
|
||||||
border-right: 1px solid #A8B8D9;
|
border-right: 1px solid #A8B8D9;
|
||||||
@@ -422,45 +536,55 @@ table.memberdecls {
|
|||||||
color: #253555;
|
color: #253555;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
|
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
|
||||||
/* opera specific markup */
|
|
||||||
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
|
||||||
border-top-right-radius: 8px;
|
|
||||||
border-top-left-radius: 8px;
|
|
||||||
/* firefox specific markup */
|
|
||||||
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
|
|
||||||
-moz-border-radius-topright: 8px;
|
|
||||||
-moz-border-radius-topleft: 8px;
|
|
||||||
/* webkit specific markup */
|
|
||||||
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
|
||||||
-webkit-border-top-right-radius: 8px;
|
|
||||||
-webkit-border-top-left-radius: 8px;
|
|
||||||
background-image:url('nav_f.png');
|
background-image:url('nav_f.png');
|
||||||
background-repeat:repeat-x;
|
background-repeat:repeat-x;
|
||||||
background-color: #E2E8F2;
|
background-color: #E2E8F2;
|
||||||
|
/* opera specific markup */
|
||||||
|
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||||
|
border-top-right-radius: 4px;
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
/* firefox specific markup */
|
||||||
|
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
|
||||||
|
-moz-border-radius-topright: 4px;
|
||||||
|
-moz-border-radius-topleft: 4px;
|
||||||
|
/* webkit specific markup */
|
||||||
|
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||||
|
-webkit-border-top-right-radius: 4px;
|
||||||
|
-webkit-border-top-left-radius: 4px;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.memdoc {
|
.memdoc, dl.reflist dd {
|
||||||
border-bottom: 1px solid #A8B8D9;
|
border-bottom: 1px solid #A8B8D9;
|
||||||
border-left: 1px solid #A8B8D9;
|
border-left: 1px solid #A8B8D9;
|
||||||
border-right: 1px solid #A8B8D9;
|
border-right: 1px solid #A8B8D9;
|
||||||
padding: 2px 5px;
|
padding: 6px 10px 2px 10px;
|
||||||
background-color: #FBFCFD;
|
background-color: #FBFCFD;
|
||||||
border-top-width: 0;
|
border-top-width: 0;
|
||||||
|
background-image:url('nav_g.png');
|
||||||
|
background-repeat:repeat-x;
|
||||||
|
background-color: #FFFFFF;
|
||||||
/* opera specific markup */
|
/* opera specific markup */
|
||||||
border-bottom-left-radius: 8px;
|
border-bottom-left-radius: 4px;
|
||||||
border-bottom-right-radius: 8px;
|
border-bottom-right-radius: 4px;
|
||||||
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||||
/* firefox specific markup */
|
/* firefox specific markup */
|
||||||
-moz-border-radius-bottomleft: 8px;
|
-moz-border-radius-bottomleft: 4px;
|
||||||
-moz-border-radius-bottomright: 8px;
|
-moz-border-radius-bottomright: 4px;
|
||||||
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
|
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
|
||||||
background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7);
|
|
||||||
/* webkit specific markup */
|
/* webkit specific markup */
|
||||||
-webkit-border-bottom-left-radius: 8px;
|
-webkit-border-bottom-left-radius: 4px;
|
||||||
-webkit-border-bottom-right-radius: 8px;
|
-webkit-border-bottom-right-radius: 4px;
|
||||||
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||||
background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7));
|
}
|
||||||
|
|
||||||
|
dl.reflist dt {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.reflist dd {
|
||||||
|
margin: 0px 0px 10px 0px;
|
||||||
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.paramkey {
|
.paramkey {
|
||||||
@@ -478,9 +602,13 @@ table.memberdecls {
|
|||||||
.paramname em {
|
.paramname em {
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
.paramname code {
|
||||||
|
line-height: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
.params, .retval, .exception, .tparams {
|
.params, .retval, .exception, .tparams {
|
||||||
border-spacing: 6px 2px;
|
margin-left: 0px;
|
||||||
|
padding-left: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.params .paramname, .retval .paramname {
|
.params .paramname, .retval .paramname {
|
||||||
@@ -498,105 +626,116 @@ table.memberdecls {
|
|||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.mlabels {
|
||||||
|
border-spacing: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.mlabels-left {
|
||||||
|
width: 100%;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.mlabels-right {
|
||||||
|
vertical-align: bottom;
|
||||||
|
padding: 0px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.mlabels {
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.mlabel {
|
||||||
|
background-color: #728DC1;
|
||||||
|
border-top:1px solid #5373B4;
|
||||||
|
border-left:1px solid #5373B4;
|
||||||
|
border-right:1px solid #C4CFE5;
|
||||||
|
border-bottom:1px solid #C4CFE5;
|
||||||
|
text-shadow: none;
|
||||||
|
color: white;
|
||||||
|
margin-right: 4px;
|
||||||
|
padding: 2px 3px;
|
||||||
|
border-radius: 3px;
|
||||||
|
font-size: 7pt;
|
||||||
|
white-space: nowrap;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* @end */
|
/* @end */
|
||||||
|
|
||||||
/* @group Directory (tree) */
|
/* these are for tree view when not used as main index */
|
||||||
|
|
||||||
/* for the tree view */
|
div.directory {
|
||||||
|
margin: 10px 0px;
|
||||||
.ftvtree {
|
border-top: 1px solid #A8B8D9;
|
||||||
font-family: sans-serif;
|
border-bottom: 1px solid #A8B8D9;
|
||||||
margin: 0px;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* these are for tree view when used as main index */
|
.directory table {
|
||||||
|
border-collapse:collapse;
|
||||||
.directory {
|
|
||||||
font-size: 9pt;
|
|
||||||
font-weight: bold;
|
|
||||||
margin: 5px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.directory h3 {
|
.directory td {
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
margin-top: 1em;
|
padding: 0px;
|
||||||
font-size: 11pt;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
.directory td.entry {
|
||||||
The following two styles can be used to replace the root node title
|
white-space: nowrap;
|
||||||
with an image of your choice. Simply uncomment the next two styles,
|
padding-right: 6px;
|
||||||
specify the name of your image and be sure to set 'height' to the
|
|
||||||
proper pixel height of your image.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
.directory h3.swap {
|
|
||||||
height: 61px;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-image: url("yourimage.gif");
|
|
||||||
}
|
|
||||||
.directory h3.swap span {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
.directory > h3 {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.directory p {
|
.directory td.entry a {
|
||||||
margin: 0px;
|
outline:none;
|
||||||
white-space: nowrap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.directory div {
|
.directory td.entry a img {
|
||||||
display: none;
|
border: none;
|
||||||
margin: 0px;
|
}
|
||||||
|
|
||||||
|
.directory td.desc {
|
||||||
|
width: 100%;
|
||||||
|
padding-left: 6px;
|
||||||
|
padding-right: 6px;
|
||||||
|
padding-top: 3px;
|
||||||
|
border-left: 1px solid rgba(0,0,0,0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.directory tr.even {
|
||||||
|
padding-left: 6px;
|
||||||
|
background-color: #F7F8FB;
|
||||||
}
|
}
|
||||||
|
|
||||||
.directory img {
|
.directory img {
|
||||||
vertical-align: -30%;
|
vertical-align: -30%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* these are for tree view when not used as main index */
|
.directory .levels {
|
||||||
|
white-space: nowrap;
|
||||||
.directory-alt {
|
width: 100%;
|
||||||
font-size: 100%;
|
text-align: right;
|
||||||
font-weight: bold;
|
font-size: 9pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
.directory-alt h3 {
|
.directory .levels span {
|
||||||
margin: 0px;
|
cursor: pointer;
|
||||||
margin-top: 1em;
|
padding-left: 2px;
|
||||||
font-size: 11pt;
|
padding-right: 2px;
|
||||||
|
color: #3D578C;
|
||||||
}
|
}
|
||||||
|
|
||||||
.directory-alt > h3 {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.directory-alt p {
|
|
||||||
margin: 0px;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.directory-alt div {
|
|
||||||
display: none;
|
|
||||||
margin: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.directory-alt img {
|
|
||||||
vertical-align: -30%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* @end */
|
|
||||||
|
|
||||||
div.dynheader {
|
div.dynheader {
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
address {
|
address {
|
||||||
@@ -606,6 +745,8 @@ address {
|
|||||||
|
|
||||||
table.doxtable {
|
table.doxtable {
|
||||||
border-collapse:collapse;
|
border-collapse:collapse;
|
||||||
|
margin-top: 4px;
|
||||||
|
margin-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.doxtable td, table.doxtable th {
|
table.doxtable td, table.doxtable th {
|
||||||
@@ -619,9 +760,72 @@ table.doxtable th {
|
|||||||
font-size: 110%;
|
font-size: 110%;
|
||||||
padding-bottom: 4px;
|
padding-bottom: 4px;
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
text-align:left;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.fieldtable {
|
||||||
|
/*width: 100%;*/
|
||||||
|
margin-bottom: 10px;
|
||||||
|
border: 1px solid #A8B8D9;
|
||||||
|
border-spacing: 0px;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
|
||||||
|
-webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
|
||||||
|
box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.fieldtable td, .fieldtable th {
|
||||||
|
padding: 3px 7px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fieldtable td.fieldtype, .fieldtable td.fieldname {
|
||||||
|
white-space: nowrap;
|
||||||
|
border-right: 1px solid #A8B8D9;
|
||||||
|
border-bottom: 1px solid #A8B8D9;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fieldtable td.fieldname {
|
||||||
|
padding-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fieldtable td.fielddoc {
|
||||||
|
border-bottom: 1px solid #A8B8D9;
|
||||||
|
/*width: 100%;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.fieldtable td.fielddoc p:first-child {
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fieldtable td.fielddoc p:last-child {
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fieldtable tr:last-child td {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fieldtable th {
|
||||||
|
background-image:url('nav_f.png');
|
||||||
|
background-repeat:repeat-x;
|
||||||
|
background-color: #E2E8F2;
|
||||||
|
font-size: 90%;
|
||||||
|
color: #253555;
|
||||||
|
padding-bottom: 4px;
|
||||||
|
padding-top: 5px;
|
||||||
|
text-align:left;
|
||||||
|
-moz-border-radius-topleft: 4px;
|
||||||
|
-moz-border-radius-topright: 4px;
|
||||||
|
-webkit-border-top-left-radius: 4px;
|
||||||
|
-webkit-border-top-right-radius: 4px;
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
border-top-right-radius: 4px;
|
||||||
|
border-bottom: 1px solid #A8B8D9;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.tabsearch {
|
.tabsearch {
|
||||||
top: 0px;
|
top: 0px;
|
||||||
left: 10px;
|
left: 10px;
|
||||||
@@ -637,6 +841,7 @@ table.doxtable th {
|
|||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
background-image:url('tab_b.png');
|
background-image:url('tab_b.png');
|
||||||
background-repeat:repeat-x;
|
background-repeat:repeat-x;
|
||||||
|
background-position: 0 -5px;
|
||||||
height:30px;
|
height:30px;
|
||||||
line-height:30px;
|
line-height:30px;
|
||||||
color:#8AA0CC;
|
color:#8AA0CC;
|
||||||
@@ -664,6 +869,10 @@ table.doxtable th {
|
|||||||
display:block;
|
display:block;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
|
color: #283A5D;
|
||||||
|
font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||||
|
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navpath li.navelem a:hover
|
.navpath li.navelem a:hover
|
||||||
@@ -702,7 +911,6 @@ div.summary a
|
|||||||
div.ingroups
|
div.ingroups
|
||||||
{
|
{
|
||||||
font-size: 8pt;
|
font-size: 8pt;
|
||||||
padding-left: 5px;
|
|
||||||
width: 50%;
|
width: 50%;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
@@ -731,47 +939,74 @@ dl
|
|||||||
padding: 0 0 0 10px;
|
padding: 0 0 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug
|
/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
|
||||||
|
dl.section
|
||||||
{
|
{
|
||||||
border-left:4px solid;
|
margin-left: 0px;
|
||||||
padding: 0 0 0 6px;
|
padding-left: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.note
|
dl.note
|
||||||
{
|
{
|
||||||
|
margin-left:-7px;
|
||||||
|
padding-left: 3px;
|
||||||
|
border-left:4px solid;
|
||||||
border-color: #D0C000;
|
border-color: #D0C000;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.warning, dl.attention
|
dl.warning, dl.attention
|
||||||
{
|
{
|
||||||
|
margin-left:-7px;
|
||||||
|
padding-left: 3px;
|
||||||
|
border-left:4px solid;
|
||||||
border-color: #FF0000;
|
border-color: #FF0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.pre, dl.post, dl.invariant
|
dl.pre, dl.post, dl.invariant
|
||||||
{
|
{
|
||||||
|
margin-left:-7px;
|
||||||
|
padding-left: 3px;
|
||||||
|
border-left:4px solid;
|
||||||
border-color: #00D000;
|
border-color: #00D000;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.deprecated
|
dl.deprecated
|
||||||
{
|
{
|
||||||
|
margin-left:-7px;
|
||||||
|
padding-left: 3px;
|
||||||
|
border-left:4px solid;
|
||||||
border-color: #505050;
|
border-color: #505050;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.todo
|
dl.todo
|
||||||
{
|
{
|
||||||
|
margin-left:-7px;
|
||||||
|
padding-left: 3px;
|
||||||
|
border-left:4px solid;
|
||||||
border-color: #00C0E0;
|
border-color: #00C0E0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.test
|
dl.test
|
||||||
{
|
{
|
||||||
|
margin-left:-7px;
|
||||||
|
padding-left: 3px;
|
||||||
|
border-left:4px solid;
|
||||||
border-color: #3030E0;
|
border-color: #3030E0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.bug
|
dl.bug
|
||||||
{
|
{
|
||||||
|
margin-left:-7px;
|
||||||
|
padding-left: 3px;
|
||||||
|
border-left:4px solid;
|
||||||
border-color: #C08050;
|
border-color: #C08050;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dl.section dd {
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#projectlogo
|
#projectlogo
|
||||||
{
|
{
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -833,3 +1068,117 @@ dl.bug
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.zoom
|
||||||
|
{
|
||||||
|
border: 1px solid #90A5CE;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.citelist {
|
||||||
|
margin-bottom:50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.citelist dt {
|
||||||
|
color:#334975;
|
||||||
|
float:left;
|
||||||
|
font-weight:bold;
|
||||||
|
margin-right:10px;
|
||||||
|
padding:5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.citelist dd {
|
||||||
|
margin:2px 0;
|
||||||
|
padding:5px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toc {
|
||||||
|
padding: 14px 25px;
|
||||||
|
background-color: #F4F6FA;
|
||||||
|
border: 1px solid #D8DFEE;
|
||||||
|
border-radius: 7px 7px 7px 7px;
|
||||||
|
float: right;
|
||||||
|
height: auto;
|
||||||
|
margin: 0 20px 10px 10px;
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toc li {
|
||||||
|
background: url("bdwn.png") no-repeat scroll 0 5px transparent;
|
||||||
|
font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
|
||||||
|
margin-top: 5px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toc h3 {
|
||||||
|
font: bold 12px/1.2 Arial,FreeSans,sans-serif;
|
||||||
|
color: #4665A2;
|
||||||
|
border-bottom: 0 none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toc ul {
|
||||||
|
list-style: none outside none;
|
||||||
|
border: medium none;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toc li.level1 {
|
||||||
|
margin-left: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toc li.level2 {
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toc li.level3 {
|
||||||
|
margin-left: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toc li.level4 {
|
||||||
|
margin-left: 45px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inherit_header {
|
||||||
|
font-weight: bold;
|
||||||
|
color: gray;
|
||||||
|
cursor: pointer;
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inherit_header td {
|
||||||
|
padding: 6px 0px 2px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inherit {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.heading h2 {
|
||||||
|
margin-top: 12px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media print
|
||||||
|
{
|
||||||
|
#top { display: none; }
|
||||||
|
#side-nav { display: none; }
|
||||||
|
#nav-path { display: none; }
|
||||||
|
body { overflow:visible; }
|
||||||
|
h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
|
||||||
|
.summary { display: none; }
|
||||||
|
.memitem { page-break-inside: avoid; }
|
||||||
|
#doc-content
|
||||||
|
{
|
||||||
|
margin-left:0 !important;
|
||||||
|
height:auto !important;
|
||||||
|
width:auto !important;
|
||||||
|
overflow:inherit;
|
||||||
|
display:inline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.7 KiB |
97
doc/html/dynsections.js
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
function toggleVisibility(linkObj)
|
||||||
|
{
|
||||||
|
var base = $(linkObj).attr('id');
|
||||||
|
var summary = $('#'+base+'-summary');
|
||||||
|
var content = $('#'+base+'-content');
|
||||||
|
var trigger = $('#'+base+'-trigger');
|
||||||
|
var src=$(trigger).attr('src');
|
||||||
|
if (content.is(':visible')===true) {
|
||||||
|
content.hide();
|
||||||
|
summary.show();
|
||||||
|
$(linkObj).addClass('closed').removeClass('opened');
|
||||||
|
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||||
|
} else {
|
||||||
|
content.show();
|
||||||
|
summary.hide();
|
||||||
|
$(linkObj).removeClass('closed').addClass('opened');
|
||||||
|
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateStripes()
|
||||||
|
{
|
||||||
|
$('table.directory tr').
|
||||||
|
removeClass('even').filter(':visible:even').addClass('even');
|
||||||
|
}
|
||||||
|
function toggleLevel(level)
|
||||||
|
{
|
||||||
|
$('table.directory tr').each(function(){
|
||||||
|
var l = this.id.split('_').length-1;
|
||||||
|
var i = $('#img'+this.id.substring(3));
|
||||||
|
var a = $('#arr'+this.id.substring(3));
|
||||||
|
if (l<level+1) {
|
||||||
|
i.attr('src','ftv2folderopen.png');
|
||||||
|
a.attr('src','ftv2mnode.png');
|
||||||
|
$(this).show();
|
||||||
|
} else if (l==level+1) {
|
||||||
|
i.attr('src','ftv2folderclosed.png');
|
||||||
|
a.attr('src','ftv2pnode.png');
|
||||||
|
$(this).show();
|
||||||
|
} else {
|
||||||
|
$(this).hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
updateStripes();
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleFolder(id)
|
||||||
|
{
|
||||||
|
//The clicked row
|
||||||
|
var currentRow = $('#row_'+id);
|
||||||
|
var currentRowImages = currentRow.find("img");
|
||||||
|
|
||||||
|
//All rows after the clicked row
|
||||||
|
var rows = currentRow.nextAll("tr");
|
||||||
|
|
||||||
|
//Only match elements AFTER this one (can't hide elements before)
|
||||||
|
var childRows = rows.filter(function() {
|
||||||
|
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||||
|
return this.id.match(re);
|
||||||
|
});
|
||||||
|
|
||||||
|
//First row is visible we are HIDING
|
||||||
|
if (childRows.filter(':first').is(':visible')===true) {
|
||||||
|
currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png');
|
||||||
|
currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png');
|
||||||
|
rows.filter("[id^=row_"+id+"]").hide();
|
||||||
|
} else { //We are SHOWING
|
||||||
|
//All sub images
|
||||||
|
var childImages = childRows.find("img");
|
||||||
|
var childImg = childImages.filter("[id^=img]");
|
||||||
|
var childArr = childImages.filter("[id^=arr]");
|
||||||
|
|
||||||
|
currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row
|
||||||
|
currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row
|
||||||
|
childImg.attr('src','ftv2folderclosed.png'); //children closed
|
||||||
|
childArr.attr('src','ftv2pnode.png'); //children closed
|
||||||
|
childRows.show(); //show all children
|
||||||
|
}
|
||||||
|
updateStripes();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function toggleInherit(id)
|
||||||
|
{
|
||||||
|
var rows = $('tr.inherit.'+id);
|
||||||
|
var img = $('tr.inherit_header.'+id+' img');
|
||||||
|
var src = $(img).attr('src');
|
||||||
|
if (rows.filter(':first').is(':visible')===true) {
|
||||||
|
rows.css('display','none');
|
||||||
|
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||||
|
} else {
|
||||||
|
rows.css('display','table-row'); // using show() causes jump in firefox
|
||||||
|
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BIN
doc/html/ftv2blank.png
Normal file
|
After Width: | Height: | Size: 86 B |
BIN
doc/html/ftv2cl.png
Normal file
|
After Width: | Height: | Size: 453 B |
BIN
doc/html/ftv2doc.png
Normal file
|
After Width: | Height: | Size: 746 B |
BIN
doc/html/ftv2folderclosed.png
Normal file
|
After Width: | Height: | Size: 616 B |
BIN
doc/html/ftv2folderopen.png
Normal file
|
After Width: | Height: | Size: 597 B |
BIN
doc/html/ftv2lastnode.png
Normal file
|
After Width: | Height: | Size: 86 B |
BIN
doc/html/ftv2link.png
Normal file
|
After Width: | Height: | Size: 746 B |
BIN
doc/html/ftv2mlastnode.png
Normal file
|
After Width: | Height: | Size: 246 B |
BIN
doc/html/ftv2mnode.png
Normal file
|
After Width: | Height: | Size: 246 B |
BIN
doc/html/ftv2mo.png
Normal file
|
After Width: | Height: | Size: 403 B |
BIN
doc/html/ftv2node.png
Normal file
|
After Width: | Height: | Size: 86 B |
BIN
doc/html/ftv2ns.png
Normal file
|
After Width: | Height: | Size: 388 B |
BIN
doc/html/ftv2plastnode.png
Normal file
|
After Width: | Height: | Size: 229 B |
BIN
doc/html/ftv2pnode.png
Normal file
|
After Width: | Height: | Size: 229 B |
BIN
doc/html/ftv2splitbar.png
Normal file
|
After Width: | Height: | Size: 314 B |
BIN
doc/html/ftv2vertline.png
Normal file
|
After Width: | Height: | Size: 86 B |
@@ -2,35 +2,46 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
||||||
<title>TurboJPEG: Data Fields</title>
|
<title>TurboJPEG: Data Fields</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||||
|
</script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
<body onload='searchBox.OnSelectItem(0);'>
|
<body>
|
||||||
<!-- Generated by Doxygen 1.7.4 -->
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
<script type="text/javascript"><!--
|
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
||||||
--></script>
|
|
||||||
<div id="top">
|
|
||||||
<div id="titlearea">
|
<div id="titlearea">
|
||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG <span id="projectnumber">1.2.1</span></div>
|
<div id="projectname">TurboJPEG
|
||||||
|
 <span id="projectnumber">1.5</span>
|
||||||
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<div id="navrow1" class="tabs">
|
||||||
<ul class="tablist">
|
<ul class="tablist">
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||||
<li id="searchli">
|
<li>
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||||
<span class="left">
|
<span class="left">
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||||
@@ -61,7 +72,21 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<li><a href="functions_vars.html"><span>Variables</span></a></li>
|
<li><a href="functions_vars.html"><span>Variables</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
</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
|
||||||
@@ -98,23 +123,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
: <a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">tjregion</a>
|
: <a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">tjregion</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div><!-- contents -->
|
||||||
<!-- window showing the filter options -->
|
<!-- start footer part -->
|
||||||
<div id="MSearchSelectWindow"
|
<hr class="footer"/><address class="footer"><small>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
</a> 1.8.3.1
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Variables</a></div>
|
</small></address>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
|
||||||
<div id="MSearchResultsWindow">
|
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
|
||||||
name="MSearchResults" id="MSearchResults">
|
|
||||||
</iframe>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
|
||||||
<a href="http://www.doxygen.org/index.html">
|
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -2,35 +2,46 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
||||||
<title>TurboJPEG: Data Fields - Variables</title>
|
<title>TurboJPEG: Data Fields - Variables</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||||
|
</script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
<body onload='searchBox.OnSelectItem(0);'>
|
<body>
|
||||||
<!-- Generated by Doxygen 1.7.4 -->
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
<script type="text/javascript"><!--
|
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
||||||
--></script>
|
|
||||||
<div id="top">
|
|
||||||
<div id="titlearea">
|
<div id="titlearea">
|
||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG <span id="projectnumber">1.2.1</span></div>
|
<div id="projectname">TurboJPEG
|
||||||
|
 <span id="projectnumber">1.5</span>
|
||||||
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<div id="navrow1" class="tabs">
|
||||||
<ul class="tablist">
|
<ul class="tablist">
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||||
<li id="searchli">
|
<li>
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||||
<span class="left">
|
<span class="left">
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||||
@@ -61,7 +72,21 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
<li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
|
<li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="contents">
|
<div class="contents">
|
||||||
 <ul>
|
 <ul>
|
||||||
<li>customFilter
|
<li>customFilter
|
||||||
@@ -98,23 +123,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
: <a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">tjregion</a>
|
: <a class="el" href="structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2">tjregion</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div><!-- contents -->
|
||||||
<!-- window showing the filter options -->
|
<!-- start footer part -->
|
||||||
<div id="MSearchSelectWindow"
|
<hr class="footer"/><address class="footer"><small>
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
</a> 1.8.3.1
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Variables</a></div>
|
</small></address>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
|
||||||
<div id="MSearchResultsWindow">
|
|
||||||
<iframe src="javascript:void(0)" frameborder="0"
|
|
||||||
name="MSearchResults" id="MSearchResults">
|
|
||||||
</iframe>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
|
||||||
<a href="http://www.doxygen.org/index.html">
|
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -2,35 +2,46 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
||||||
<title>TurboJPEG: Main Page</title>
|
<title>TurboJPEG: Main Page</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||||
|
</script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
<body onload='searchBox.OnSelectItem(0);'>
|
<body>
|
||||||
<!-- Generated by Doxygen 1.7.4 -->
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
<script type="text/javascript"><!--
|
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
||||||
--></script>
|
|
||||||
<div id="top">
|
|
||||||
<div id="titlearea">
|
<div id="titlearea">
|
||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG <span id="projectnumber">1.2.1</span></div>
|
<div id="projectname">TurboJPEG
|
||||||
|
 <span id="projectnumber">1.5</span>
|
||||||
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<div id="navrow1" class="tabs">
|
||||||
<ul class="tablist">
|
<ul class="tablist">
|
||||||
<li class="current"><a href="index.html"><span>Main Page</span></a></li>
|
<li class="current"><a href="index.html"><span>Main Page</span></a></li>
|
||||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||||
<li id="searchli">
|
<li>
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||||
<span class="left">
|
<span class="left">
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||||
@@ -48,19 +59,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div><!-- top -->
|
||||||
<div class="header">
|
|
||||||
<div class="headertitle">
|
|
||||||
<div class="title">TurboJPEG Documentation</div> </div>
|
|
||||||
</div>
|
|
||||||
<div class="contents">
|
|
||||||
</div>
|
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Variables</a></div>
|
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -69,8 +74,17 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
<div class="header">
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<div class="headertitle">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<div class="title">TurboJPEG Documentation</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.3.1
|
||||||
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,112 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
%subst = ( );
|
|
||||||
$quiet = 0;
|
|
||||||
|
|
||||||
while ( @ARGV ) {
|
|
||||||
$_ = shift @ARGV;
|
|
||||||
if ( s/^-// ) {
|
|
||||||
if ( /^l(.*)/ ) {
|
|
||||||
$v = ($1 eq "") ? shift @ARGV : $1;
|
|
||||||
($v =~ /\/$/) || ($v .= "/");
|
|
||||||
$_ = $v;
|
|
||||||
if ( /(.+)\@(.+)/ ) {
|
|
||||||
if ( exists $subst{$1} ) {
|
|
||||||
$subst{$1} = $2;
|
|
||||||
} else {
|
|
||||||
print STDERR "Unknown tag file $1 given with option -l\n";
|
|
||||||
&usage();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
print STDERR "Argument $_ is invalid for option -l\n";
|
|
||||||
&usage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
elsif ( /^q/ ) {
|
|
||||||
$quiet = 1;
|
|
||||||
}
|
|
||||||
elsif ( /^\?|^h/ ) {
|
|
||||||
&usage();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
print STDERR "Illegal option -$_\n";
|
|
||||||
&usage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
push (@files, $_ );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach $sub (keys %subst)
|
|
||||||
{
|
|
||||||
if ( $subst{$sub} eq "" )
|
|
||||||
{
|
|
||||||
print STDERR "No substitute given for tag file `$sub'\n";
|
|
||||||
&usage();
|
|
||||||
}
|
|
||||||
elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" )
|
|
||||||
{
|
|
||||||
print "Substituting $subst{$sub} for each occurrence of tag file $sub\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! @files ) {
|
|
||||||
if (opendir(D,".")) {
|
|
||||||
foreach $file ( readdir(D) ) {
|
|
||||||
$match = ".html";
|
|
||||||
next if ( $file =~ /^\.\.?$/ );
|
|
||||||
($file =~ /$match/) && (push @files, $file);
|
|
||||||
($file =~ /\.svg/) && (push @files, $file);
|
|
||||||
($file =~ "navtree.js") && (push @files, $file);
|
|
||||||
}
|
|
||||||
closedir(D);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! @files ) {
|
|
||||||
print STDERR "Warning: No input files given and none found!\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach $f (@files)
|
|
||||||
{
|
|
||||||
if ( ! $quiet ) {
|
|
||||||
print "Editing: $f...\n";
|
|
||||||
}
|
|
||||||
$oldf = $f;
|
|
||||||
$f .= ".bak";
|
|
||||||
unless (rename $oldf,$f) {
|
|
||||||
print STDERR "Error: cannot rename file $oldf\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
if (open(F,"<$f")) {
|
|
||||||
unless (open(G,">$oldf")) {
|
|
||||||
print STDERR "Error: opening file $oldf for writing\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
if ($oldf ne "tree.js") {
|
|
||||||
while (<F>) {
|
|
||||||
s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (xlink:href|href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g;
|
|
||||||
print G "$_";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
while (<F>) {
|
|
||||||
s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g;
|
|
||||||
print G "$_";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
print STDERR "Warning file $f does not exist\n";
|
|
||||||
}
|
|
||||||
unlink $f;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub usage {
|
|
||||||
print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n";
|
|
||||||
print STDERR "Options:\n";
|
|
||||||
print STDERR " -l tagfile\@linkName tag file + URL or directory \n";
|
|
||||||
print STDERR " -q Quiet mode\n\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
62
doc/html/jquery.js
vendored
@@ -2,35 +2,46 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1"/>
|
||||||
<title>TurboJPEG: Modules</title>
|
<title>TurboJPEG: Modules</title>
|
||||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
<script type="text/javascript" src="search/search.js"></script>
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
||||||
|
</script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="doxygen-extra.css" rel="stylesheet" type="text/css"/>
|
||||||
</head>
|
</head>
|
||||||
<body onload='searchBox.OnSelectItem(0);'>
|
<body>
|
||||||
<!-- Generated by Doxygen 1.7.4 -->
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
<script type="text/javascript"><!--
|
|
||||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
||||||
--></script>
|
|
||||||
<div id="top">
|
|
||||||
<div id="titlearea">
|
<div id="titlearea">
|
||||||
<table cellspacing="0" cellpadding="0">
|
<table cellspacing="0" cellpadding="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr style="height: 56px;">
|
<tr style="height: 56px;">
|
||||||
<td style="padding-left: 0.5em;">
|
<td style="padding-left: 0.5em;">
|
||||||
<div id="projectname">TurboJPEG <span id="projectnumber">1.2.1</span></div>
|
<div id="projectname">TurboJPEG
|
||||||
|
 <span id="projectnumber">1.5</span>
|
||||||
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.3.1 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
</script>
|
||||||
<div id="navrow1" class="tabs">
|
<div id="navrow1" class="tabs">
|
||||||
<ul class="tablist">
|
<ul class="tablist">
|
||||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||||
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
|
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
|
||||||
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
<li><a href="annotated.html"><span>Data Structures</span></a></li>
|
||||||
<li id="searchli">
|
<li>
|
||||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||||
<span class="left">
|
<span class="left">
|
||||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||||
@@ -48,22 +59,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div><!-- top -->
|
||||||
<div class="header">
|
|
||||||
<div class="headertitle">
|
|
||||||
<div class="title">Modules</div> </div>
|
|
||||||
</div>
|
|
||||||
<div class="contents">
|
|
||||||
<div class="textblock">Here is a list of all modules:</div><ul>
|
|
||||||
<li><a class="el" href="group___turbo_j_p_e_g.html">TurboJPEG</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<!-- window showing the filter options -->
|
<!-- window showing the filter options -->
|
||||||
<div id="MSearchSelectWindow"
|
<div id="MSearchSelectWindow"
|
||||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Variables</a></div>
|
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a></div>
|
||||||
|
|
||||||
<!-- iframe showing the search results (closed by default) -->
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
<div id="MSearchResultsWindow">
|
<div id="MSearchResultsWindow">
|
||||||
@@ -72,8 +74,22 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="footer"/><address class="footer"><small>Generated on Fri Apr 26 2013 03:53:12 for TurboJPEG by 
|
<div class="header">
|
||||||
<a href="http://www.doxygen.org/index.html">
|
<div class="headertitle">
|
||||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
|
<div class="title">Modules</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="textblock">Here is a list of all modules:</div><div class="directory">
|
||||||
|
<table class="directory">
|
||||||
|
<tr id="row_0_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group___turbo_j_p_e_g.html" target="_self">TurboJPEG</a></td><td class="desc">TurboJPEG API</td></tr>
|
||||||
|
</table>
|
||||||
|
</div><!-- directory -->
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.3.1
|
||||||
|
</small></address>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 159 B After Width: | Height: | Size: 153 B |
BIN
doc/html/nav_g.png
Normal file
|
After Width: | Height: | Size: 95 B |
|
Before Width: | Height: | Size: 97 B After Width: | Height: | Size: 98 B |
|
Before Width: | Height: | Size: 118 B After Width: | Height: | Size: 123 B |
@@ -1,18 +1,18 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_63.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
<div id="SRIndex">
|
<div id="SRIndex">
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div class="SRResult" id="SR_customfilter">
|
<div id="SRResults"></div>
|
||||||
<div class="SREntry">
|
<script type="text/javascript"><!--
|
||||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1" target="_parent">customFilter</a>
|
createResults();
|
||||||
<span class="SRScope">tjtransform</span>
|
--></script>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
|||||||
4
doc/html/search/all_63.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['customfilter',['customFilter',['../structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1',1,'tjtransform']]]
|
||||||
|
];
|
||||||
@@ -1,24 +1,18 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_64.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
<div id="SRIndex">
|
<div id="SRIndex">
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div class="SRResult" id="SR_data">
|
<div id="SRResults"></div>
|
||||||
<div class="SREntry">
|
<script type="text/javascript"><!--
|
||||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3" target="_parent">data</a>
|
createResults();
|
||||||
<span class="SRScope">tjtransform</span>
|
--></script>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRResult" id="SR_denom">
|
|
||||||
<div class="SREntry">
|
|
||||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3" target="_parent">denom</a>
|
|
||||||
<span class="SRScope">tjscalingfactor</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
|||||||
5
doc/html/search/all_64.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['data',['data',['../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3',1,'tjtransform']]],
|
||||||
|
['denom',['denom',['../structtjscalingfactor.html#aefbcdf3e9e62274b2d312c695f133ce3',1,'tjscalingfactor']]]
|
||||||
|
];
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_68.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
<div id="SRIndex">
|
<div id="SRIndex">
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div class="SRResult" id="SR_h">
|
<div id="SRResults"></div>
|
||||||
<div class="SREntry">
|
<script type="text/javascript"><!--
|
||||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115" target="_parent">h</a>
|
createResults();
|
||||||
<span class="SRScope">tjregion</span>
|
--></script>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
|||||||
4
doc/html/search/all_68.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['h',['h',['../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115',1,'tjregion']]]
|
||||||
|
];
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_6e.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
<div id="SRIndex">
|
<div id="SRIndex">
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div class="SRResult" id="SR_num">
|
<div id="SRResults"></div>
|
||||||
<div class="SREntry">
|
<script type="text/javascript"><!--
|
||||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec" target="_parent">num</a>
|
createResults();
|
||||||
<span class="SRScope">tjscalingfactor</span>
|
--></script>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
|||||||
4
doc/html/search/all_6e.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['num',['num',['../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec',1,'tjscalingfactor']]]
|
||||||
|
];
|
||||||
@@ -1,24 +1,18 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_6f.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
<div id="SRIndex">
|
<div id="SRIndex">
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div class="SRResult" id="SR_op">
|
<div id="SRResults"></div>
|
||||||
<div class="SREntry">
|
<script type="text/javascript"><!--
|
||||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498" target="_parent">op</a>
|
createResults();
|
||||||
<span class="SRScope">tjtransform</span>
|
--></script>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRResult" id="SR_options">
|
|
||||||
<div class="SREntry">
|
|
||||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6" target="_parent">options</a>
|
|
||||||
<span class="SRScope">tjtransform</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
|||||||
5
doc/html/search/all_6f.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['op',['op',['../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498',1,'tjtransform']]],
|
||||||
|
['options',['options',['../structtjtransform.html#ac0e74655baa4402209a21e1ae481c8f6',1,'tjtransform']]]
|
||||||
|
];
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_72.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
<div id="SRIndex">
|
<div id="SRIndex">
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div class="SRResult" id="SR_r">
|
<div id="SRResults"></div>
|
||||||
<div class="SREntry">
|
<script type="text/javascript"><!--
|
||||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf" target="_parent">r</a>
|
createResults();
|
||||||
<span class="SRScope">tjtransform</span>
|
--></script>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
|||||||
4
doc/html/search/all_72.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['r',['r',['../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf',1,'tjtransform']]]
|
||||||
|
];
|
||||||
@@ -1,27 +1,18 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_74.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
<div id="SRIndex">
|
<div id="SRIndex">
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div class="SRResult" id="SR_tjregion">
|
<div id="SRResults"></div>
|
||||||
<div class="SREntry">
|
<script type="text/javascript"><!--
|
||||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html" target="_parent">tjregion</a>
|
createResults();
|
||||||
</div>
|
--></script>
|
||||||
</div>
|
|
||||||
<div class="SRResult" id="SR_tjscalingfactor">
|
|
||||||
<div class="SREntry">
|
|
||||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../structtjscalingfactor.html" target="_parent">tjscalingfactor</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRResult" id="SR_tjtransform">
|
|
||||||
<div class="SREntry">
|
|
||||||
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../structtjtransform.html" target="_parent">tjtransform</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
|||||||
89
doc/html/search/all_74.js
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['tj_5fnumcs',['TJ_NUMCS',['../group___turbo_j_p_e_g.html#ga39f57a6fb02d9cf32e7b6890099b5a71',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumpf',['TJ_NUMPF',['../group___turbo_j_p_e_g.html#ga7010a4402f54a45ba822ad8675a4655e',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumsamp',['TJ_NUMSAMP',['../group___turbo_j_p_e_g.html#ga5ef3d169162ce77ce348e292a0b7477c',1,'turbojpeg.h']]],
|
||||||
|
['tj_5fnumxop',['TJ_NUMXOP',['../group___turbo_j_p_e_g.html#ga0f6dbd18adf38b7d46ac547f0f4d562c',1,'turbojpeg.h']]],
|
||||||
|
['tjalloc',['tjAlloc',['../group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff',1,'turbojpeg.h']]],
|
||||||
|
['tjblueoffset',['tjBlueOffset',['../group___turbo_j_p_e_g.html#ga84e2e35d3f08025f976ec1ec53693dea',1,'turbojpeg.h']]],
|
||||||
|
['tjbufsize',['tjBufSize',['../group___turbo_j_p_e_g.html#gaccc5bca7f12fcdcc302e6e1c6d4b311b',1,'turbojpeg.h']]],
|
||||||
|
['tjbufsizeyuv2',['tjBufSizeYUV2',['../group___turbo_j_p_e_g.html#gaf451664a62c1f6c7cc5a6401f32908c9',1,'turbojpeg.h']]],
|
||||||
|
['tjcompress2',['tjCompress2',['../group___turbo_j_p_e_g.html#gaf38f2ed44bdc88e730e08b632fa6e88e',1,'turbojpeg.h']]],
|
||||||
|
['tjcompressfromyuv',['tjCompressFromYUV',['../group___turbo_j_p_e_g.html#ga6f6de375d6ec0020faba627e37e5a060',1,'turbojpeg.h']]],
|
||||||
|
['tjcompressfromyuvplanes',['tjCompressFromYUVPlanes',['../group___turbo_j_p_e_g.html#ga0b84c682d8accf097d7a743c965d3464',1,'turbojpeg.h']]],
|
||||||
|
['tjcs',['TJCS',['../group___turbo_j_p_e_g.html#ga4f83ad3368e0e29d1957be0efa7c3720',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fcmyk',['TJCS_CMYK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a6c8b636152ac8195b869587db315ee53',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fgray',['TJCS_GRAY',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720ab3e7d6a87f695e45b81c1b5262b5a50a',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5frgb',['TJCS_RGB',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a677cb7ccb85c4038ac41964a2e09e555',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fycbcr',['TJCS_YCbCr',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a7389b8f65bb387ffedce3efd0d78ec75',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fycck',['TJCS_YCCK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a53839e0fe867b76b58d16b0a1a7c598e',1,'turbojpeg.h']]],
|
||||||
|
['tjdecodeyuv',['tjDecodeYUV',['../group___turbo_j_p_e_g.html#ga077c61027b875afecd5a1613bf18b3c1',1,'turbojpeg.h']]],
|
||||||
|
['tjdecodeyuvplanes',['tjDecodeYUVPlanes',['../group___turbo_j_p_e_g.html#gaf42f19b7a496eb18bdc84fe61ee6d3e2',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompress2',['tjDecompress2',['../group___turbo_j_p_e_g.html#gad8026a417e16a76313bc0a6c9e8b2ba2',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompressheader3',['tjDecompressHeader3',['../group___turbo_j_p_e_g.html#ga3fced455e504e8ff4fbad28ba94a3020',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompresstoyuv2',['tjDecompressToYUV2',['../group___turbo_j_p_e_g.html#ga39e08906528db5a764670ea48d344b09',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompresstoyuvplanes',['tjDecompressToYUVPlanes',['../group___turbo_j_p_e_g.html#ga38d0ef90692663b3ffb5b16da2541512',1,'turbojpeg.h']]],
|
||||||
|
['tjdestroy',['tjDestroy',['../group___turbo_j_p_e_g.html#ga674adee917b95ad4a896f1ba39e12540',1,'turbojpeg.h']]],
|
||||||
|
['tjencodeyuv3',['tjEncodeYUV3',['../group___turbo_j_p_e_g.html#gaabe05acd734990053ad1294b5ef239aa',1,'turbojpeg.h']]],
|
||||||
|
['tjencodeyuvplanes',['tjEncodeYUVPlanes',['../group___turbo_j_p_e_g.html#ga8a65ed3bd12df57c219d46afbc9008f1',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5faccuratedct',['TJFLAG_ACCURATEDCT',['../group___turbo_j_p_e_g.html#gacb233cfd722d66d1ccbf48a7de81f0e0',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5fbottomup',['TJFLAG_BOTTOMUP',['../group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5ffastdct',['TJFLAG_FASTDCT',['../group___turbo_j_p_e_g.html#gaabce235db80d3f698b27f36cbd453da2',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5ffastupsample',['TJFLAG_FASTUPSAMPLE',['../group___turbo_j_p_e_g.html#ga4ee4506c81177a06f77e2504a22efd2d',1,'turbojpeg.h']]],
|
||||||
|
['tjflag_5fnorealloc',['TJFLAG_NOREALLOC',['../group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963',1,'turbojpeg.h']]],
|
||||||
|
['tjfree',['tjFree',['../group___turbo_j_p_e_g.html#ga8c4a1231dc06a450514c835f6471f137',1,'turbojpeg.h']]],
|
||||||
|
['tjgeterrorstr',['tjGetErrorStr',['../group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf',1,'turbojpeg.h']]],
|
||||||
|
['tjgetscalingfactors',['tjGetScalingFactors',['../group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8',1,'turbojpeg.h']]],
|
||||||
|
['tjgreenoffset',['tjGreenOffset',['../group___turbo_j_p_e_g.html#ga82d6e35da441112a411da41923c0ba2f',1,'turbojpeg.h']]],
|
||||||
|
['tjhandle',['tjhandle',['../group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763',1,'turbojpeg.h']]],
|
||||||
|
['tjinitcompress',['tjInitCompress',['../group___turbo_j_p_e_g.html#ga3d10c47fbe4a2489a2b30c931551d01a',1,'turbojpeg.h']]],
|
||||||
|
['tjinitdecompress',['tjInitDecompress',['../group___turbo_j_p_e_g.html#gae5408179d041e2a2f7199c8283cf649e',1,'turbojpeg.h']]],
|
||||||
|
['tjinittransform',['tjInitTransform',['../group___turbo_j_p_e_g.html#ga3155b775bfbac9dbba869b95a0367902',1,'turbojpeg.h']]],
|
||||||
|
['tjmcuheight',['tjMCUHeight',['../group___turbo_j_p_e_g.html#gabd247bb9fecb393eca57366feb8327bf',1,'turbojpeg.h']]],
|
||||||
|
['tjmcuwidth',['tjMCUWidth',['../group___turbo_j_p_e_g.html#ga9e61e7cd47a15a173283ba94e781308c',1,'turbojpeg.h']]],
|
||||||
|
['tjpad',['TJPAD',['../group___turbo_j_p_e_g.html#ga0aba955473315e405295d978f0c16511',1,'turbojpeg.h']]],
|
||||||
|
['tjpf',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fabgr',['TJPF_ABGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fargb',['TJPF_ARGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgr',['TJPF_BGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgra',['TJPF_BGRA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgrx',['TJPF_BGRX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fcmyk',['TJPF_CMYK',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7f5100ec44c91994e243f1cf55553f8b',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fgray',['TJPF_GRAY',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgb',['TJPF_RGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgba',['TJPF_RGBA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgbx',['TJPF_RGBX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fxbgr',['TJPF_XBGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fxrgb',['TJPF_XRGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84',1,'turbojpeg.h']]],
|
||||||
|
['tjpixelsize',['tjPixelSize',['../group___turbo_j_p_e_g.html#gad77cf8fe5b2bfd3cb3f53098146abb4c',1,'turbojpeg.h']]],
|
||||||
|
['tjplaneheight',['tjPlaneHeight',['../group___turbo_j_p_e_g.html#ga1a209696c6a80748f20e134b3c64789f',1,'turbojpeg.h']]],
|
||||||
|
['tjplanesizeyuv',['tjPlaneSizeYUV',['../group___turbo_j_p_e_g.html#ga6f98d977bfa9d167c97172e876ba61e2',1,'turbojpeg.h']]],
|
||||||
|
['tjplanewidth',['tjPlaneWidth',['../group___turbo_j_p_e_g.html#ga63fb66bb1e36c74008c4634360becbb1',1,'turbojpeg.h']]],
|
||||||
|
['tjredoffset',['tjRedOffset',['../group___turbo_j_p_e_g.html#gadd9b446742ac8a3923f7992c7988fea8',1,'turbojpeg.h']]],
|
||||||
|
['tjregion',['tjregion',['../structtjregion.html',1,'']]],
|
||||||
|
['tjsamp',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f411',['TJSAMP_411',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a28ec62575e5ea295c3fde3001dc628e2',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f420',['TJSAMP_420',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f422',['TJSAMP_422',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f440',['TJSAMP_440',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f444',['TJSAMP_444',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5fgray',['TJSAMP_GRAY',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248',1,'turbojpeg.h']]],
|
||||||
|
['tjscaled',['TJSCALED',['../group___turbo_j_p_e_g.html#ga84878bb65404204743aa18cac02781df',1,'turbojpeg.h']]],
|
||||||
|
['tjscalingfactor',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
|
||||||
|
['tjtransform',['tjtransform',['../structtjtransform.html',1,'tjtransform'],['../group___turbo_j_p_e_g.html#gad02cd42b69f193a0623a9c801788df3a',1,'tjTransform(tjhandle handle, const unsigned char *jpegBuf, unsigned long jpegSize, int n, unsigned char **dstBufs, unsigned long *dstSizes, tjtransform *transforms, int flags): turbojpeg.h'],['../group___turbo_j_p_e_g.html#gaa29f3189c41be12ec5dee7caec318a31',1,'tjtransform(): turbojpeg.h']]],
|
||||||
|
['tjxop',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fhflip',['TJXOP_HFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fnone',['TJXOP_NONE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot180',['TJXOP_ROT180',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot270',['TJXOP_ROT270',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot90',['TJXOP_ROT90',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5ftranspose',['TJXOP_TRANSPOSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5ftransverse',['TJXOP_TRANSVERSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fvflip',['TJXOP_VFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fcrop',['TJXOPT_CROP',['../group___turbo_j_p_e_g.html#ga9c771a757fc1294add611906b89ab2d2',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fgray',['TJXOPT_GRAY',['../group___turbo_j_p_e_g.html#ga3acee7b48ade1b99e5588736007c2589',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fnooutput',['TJXOPT_NOOUTPUT',['../group___turbo_j_p_e_g.html#gafbf992bbf6e006705886333703ffab31',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5fperfect',['TJXOPT_PERFECT',['../group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00',1,'turbojpeg.h']]],
|
||||||
|
['tjxopt_5ftrim',['TJXOPT_TRIM',['../group___turbo_j_p_e_g.html#ga319826b7eb1583c0595bbe7b95428709',1,'turbojpeg.h']]],
|
||||||
|
['turbojpeg',['TurboJPEG',['../group___turbo_j_p_e_g.html',1,'']]]
|
||||||
|
];
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_77.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
<div id="SRIndex">
|
<div id="SRIndex">
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div class="SRResult" id="SR_w">
|
<div id="SRResults"></div>
|
||||||
<div class="SREntry">
|
<script type="text/javascript"><!--
|
||||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42" target="_parent">w</a>
|
createResults();
|
||||||
<span class="SRScope">tjregion</span>
|
--></script>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
|||||||
4
doc/html/search/all_77.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['w',['w',['../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42',1,'tjregion']]]
|
||||||
|
];
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_78.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
<div id="SRIndex">
|
<div id="SRIndex">
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div class="SRResult" id="SR_x">
|
<div id="SRResults"></div>
|
||||||
<div class="SREntry">
|
<script type="text/javascript"><!--
|
||||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html#a4b6a37a93997091b26a75831fa291ad9" target="_parent">x</a>
|
createResults();
|
||||||
<span class="SRScope">tjregion</span>
|
--></script>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
|||||||
4
doc/html/search/all_78.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['x',['x',['../structtjregion.html#a4b6a37a93997091b26a75831fa291ad9',1,'tjregion']]]
|
||||||
|
];
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="all_79.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
<div id="SRIndex">
|
<div id="SRIndex">
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div class="SRResult" id="SR_y">
|
<div id="SRResults"></div>
|
||||||
<div class="SREntry">
|
<script type="text/javascript"><!--
|
||||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2" target="_parent">y</a>
|
createResults();
|
||||||
<span class="SRScope">tjregion</span>
|
--></script>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
|||||||
4
doc/html/search/all_79.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['y',['y',['../structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2',1,'tjregion']]]
|
||||||
|
];
|
||||||
@@ -1,27 +1,18 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html><head><title></title>
|
<html><head><title></title>
|
||||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="classes_74.js"></script>
|
||||||
<script type="text/javascript" src="search.js"></script>
|
<script type="text/javascript" src="search.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="SRPage">
|
<body class="SRPage">
|
||||||
<div id="SRIndex">
|
<div id="SRIndex">
|
||||||
<div class="SRStatus" id="Loading">Loading...</div>
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
<div class="SRResult" id="SR_tjregion">
|
<div id="SRResults"></div>
|
||||||
<div class="SREntry">
|
<script type="text/javascript"><!--
|
||||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../structtjregion.html" target="_parent">tjregion</a>
|
createResults();
|
||||||
</div>
|
--></script>
|
||||||
</div>
|
|
||||||
<div class="SRResult" id="SR_tjscalingfactor">
|
|
||||||
<div class="SREntry">
|
|
||||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../structtjscalingfactor.html" target="_parent">tjscalingfactor</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRResult" id="SR_tjtransform">
|
|
||||||
<div class="SREntry">
|
|
||||||
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../structtjtransform.html" target="_parent">tjtransform</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="SRStatus" id="Searching">Searching...</div>
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
|
|||||||
6
doc/html/search/classes_74.js
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['tjregion',['tjregion',['../structtjregion.html',1,'']]],
|
||||||
|
['tjscalingfactor',['tjscalingfactor',['../structtjscalingfactor.html',1,'']]],
|
||||||
|
['tjtransform',['tjtransform',['../structtjtransform.html',1,'']]]
|
||||||
|
];
|
||||||
26
doc/html/search/enums_74.html
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="enums_74.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
createResults();
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
7
doc/html/search/enums_74.js
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['tjcs',['TJCS',['../group___turbo_j_p_e_g.html#ga4f83ad3368e0e29d1957be0efa7c3720',1,'turbojpeg.h']]],
|
||||||
|
['tjpf',['TJPF',['../group___turbo_j_p_e_g.html#gac916144e26c3817ac514e64ae5d12e2a',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp',['TJSAMP',['../group___turbo_j_p_e_g.html#ga1d047060ea80bb9820d540bb928e9074',1,'turbojpeg.h']]],
|
||||||
|
['tjxop',['TJXOP',['../group___turbo_j_p_e_g.html#ga2de531af4e7e6c4f124908376b354866',1,'turbojpeg.h']]]
|
||||||
|
];
|
||||||
26
doc/html/search/enumvalues_74.html
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="enumvalues_74.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
createResults();
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
34
doc/html/search/enumvalues_74.js
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['tjcs_5fcmyk',['TJCS_CMYK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a6c8b636152ac8195b869587db315ee53',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fgray',['TJCS_GRAY',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720ab3e7d6a87f695e45b81c1b5262b5a50a',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5frgb',['TJCS_RGB',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a677cb7ccb85c4038ac41964a2e09e555',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fycbcr',['TJCS_YCbCr',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a7389b8f65bb387ffedce3efd0d78ec75',1,'turbojpeg.h']]],
|
||||||
|
['tjcs_5fycck',['TJCS_YCCK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a53839e0fe867b76b58d16b0a1a7c598e',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fabgr',['TJPF_ABGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa1ba1a7f1631dbeaa49a0a85fc4a40081',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fargb',['TJPF_ARGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aae8f846ed9d9de99b6e1dfe448848765c',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgr',['TJPF_BGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aab10624437fb8ef495a0b153e65749839',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgra',['TJPF_BGRA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aac037ff1845cf9b74bb81a3659c2b9fb4',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fbgrx',['TJPF_BGRX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa2a1fbf569ca79897eae886e3376ca4c8',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fcmyk',['TJPF_CMYK',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7f5100ec44c91994e243f1cf55553f8b',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fgray',['TJPF_GRAY',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa5431b54b015337705f13118073711a1a',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgb',['TJPF_RGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa7ce93230bff449518ce387c17e6ed37c',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgba',['TJPF_RGBA',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa88d2e88fab67f6503cf972e14851cc12',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5frgbx',['TJPF_RGBX',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aa83973bebb7e2dc6fa8bae89ff3f42e01',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fxbgr',['TJPF_XBGR',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aaf6603b27147de47e212e75dac027b2af',1,'turbojpeg.h']]],
|
||||||
|
['tjpf_5fxrgb',['TJPF_XRGB',['../group___turbo_j_p_e_g.html#ggac916144e26c3817ac514e64ae5d12e2aadae996905efcfa3b42a0bb3bea7f9d84',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f411',['TJSAMP_411',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a28ec62575e5ea295c3fde3001dc628e2',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f420',['TJSAMP_420',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a63085dbf683cfe39e513cdb6343e3737',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f422',['TJSAMP_422',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a136130902cc578f11f32429b59368404',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f440',['TJSAMP_440',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074accf740e6f3aa6ba20ba922cad13cb974',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5f444',['TJSAMP_444',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074afb8da4f44197837bdec0a4f593dacae3',1,'turbojpeg.h']]],
|
||||||
|
['tjsamp_5fgray',['TJSAMP_GRAY',['../group___turbo_j_p_e_g.html#gga1d047060ea80bb9820d540bb928e9074a3f1c9504842ddc7a48d0f690754b6248',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fhflip',['TJXOP_HFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aa0df69776caa30f0fa28e26332d311ce',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fnone',['TJXOP_NONE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866aad88c0366cd3f7d0eac9d7a3fa1c2c27',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot180',['TJXOP_ROT180',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a140952eb8dd0300accfcc22726d69692',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot270',['TJXOP_ROT270',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a3064ee5dfb7f032df332818587567a08',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5frot90',['TJXOP_ROT90',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a43b2bbb23bc4bd548422d43fbe9af128',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5ftranspose',['TJXOP_TRANSPOSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a31060aed199f886afdd417f80499c32d',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5ftransverse',['TJXOP_TRANSVERSE',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866af3b14d488aea6ece9e5b3df73a74d6a4',1,'turbojpeg.h']]],
|
||||||
|
['tjxop_5fvflip',['TJXOP_VFLIP',['../group___turbo_j_p_e_g.html#gga2de531af4e7e6c4f124908376b354866a324eddfbec53b7e691f61e56929d0d5d',1,'turbojpeg.h']]]
|
||||||
|
];
|
||||||
26
doc/html/search/functions_74.html
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="functions_74.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
createResults();
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
28
doc/html/search/functions_74.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['tjalloc',['tjAlloc',['../group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff',1,'turbojpeg.h']]],
|
||||||
|
['tjbufsize',['tjBufSize',['../group___turbo_j_p_e_g.html#gaccc5bca7f12fcdcc302e6e1c6d4b311b',1,'turbojpeg.h']]],
|
||||||
|
['tjbufsizeyuv2',['tjBufSizeYUV2',['../group___turbo_j_p_e_g.html#gaf451664a62c1f6c7cc5a6401f32908c9',1,'turbojpeg.h']]],
|
||||||
|
['tjcompress2',['tjCompress2',['../group___turbo_j_p_e_g.html#gaf38f2ed44bdc88e730e08b632fa6e88e',1,'turbojpeg.h']]],
|
||||||
|
['tjcompressfromyuv',['tjCompressFromYUV',['../group___turbo_j_p_e_g.html#ga6f6de375d6ec0020faba627e37e5a060',1,'turbojpeg.h']]],
|
||||||
|
['tjcompressfromyuvplanes',['tjCompressFromYUVPlanes',['../group___turbo_j_p_e_g.html#ga0b84c682d8accf097d7a743c965d3464',1,'turbojpeg.h']]],
|
||||||
|
['tjdecodeyuv',['tjDecodeYUV',['../group___turbo_j_p_e_g.html#ga077c61027b875afecd5a1613bf18b3c1',1,'turbojpeg.h']]],
|
||||||
|
['tjdecodeyuvplanes',['tjDecodeYUVPlanes',['../group___turbo_j_p_e_g.html#gaf42f19b7a496eb18bdc84fe61ee6d3e2',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompress2',['tjDecompress2',['../group___turbo_j_p_e_g.html#gad8026a417e16a76313bc0a6c9e8b2ba2',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompressheader3',['tjDecompressHeader3',['../group___turbo_j_p_e_g.html#ga3fced455e504e8ff4fbad28ba94a3020',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompresstoyuv2',['tjDecompressToYUV2',['../group___turbo_j_p_e_g.html#ga39e08906528db5a764670ea48d344b09',1,'turbojpeg.h']]],
|
||||||
|
['tjdecompresstoyuvplanes',['tjDecompressToYUVPlanes',['../group___turbo_j_p_e_g.html#ga38d0ef90692663b3ffb5b16da2541512',1,'turbojpeg.h']]],
|
||||||
|
['tjdestroy',['tjDestroy',['../group___turbo_j_p_e_g.html#ga674adee917b95ad4a896f1ba39e12540',1,'turbojpeg.h']]],
|
||||||
|
['tjencodeyuv3',['tjEncodeYUV3',['../group___turbo_j_p_e_g.html#gaabe05acd734990053ad1294b5ef239aa',1,'turbojpeg.h']]],
|
||||||
|
['tjencodeyuvplanes',['tjEncodeYUVPlanes',['../group___turbo_j_p_e_g.html#ga8a65ed3bd12df57c219d46afbc9008f1',1,'turbojpeg.h']]],
|
||||||
|
['tjfree',['tjFree',['../group___turbo_j_p_e_g.html#ga8c4a1231dc06a450514c835f6471f137',1,'turbojpeg.h']]],
|
||||||
|
['tjgeterrorstr',['tjGetErrorStr',['../group___turbo_j_p_e_g.html#ga9af79c908ec131b1ae8d52fe40375abf',1,'turbojpeg.h']]],
|
||||||
|
['tjgetscalingfactors',['tjGetScalingFactors',['../group___turbo_j_p_e_g.html#ga6449044b9af402999ccf52f401333be8',1,'turbojpeg.h']]],
|
||||||
|
['tjinitcompress',['tjInitCompress',['../group___turbo_j_p_e_g.html#ga3d10c47fbe4a2489a2b30c931551d01a',1,'turbojpeg.h']]],
|
||||||
|
['tjinitdecompress',['tjInitDecompress',['../group___turbo_j_p_e_g.html#gae5408179d041e2a2f7199c8283cf649e',1,'turbojpeg.h']]],
|
||||||
|
['tjinittransform',['tjInitTransform',['../group___turbo_j_p_e_g.html#ga3155b775bfbac9dbba869b95a0367902',1,'turbojpeg.h']]],
|
||||||
|
['tjplaneheight',['tjPlaneHeight',['../group___turbo_j_p_e_g.html#ga1a209696c6a80748f20e134b3c64789f',1,'turbojpeg.h']]],
|
||||||
|
['tjplanesizeyuv',['tjPlaneSizeYUV',['../group___turbo_j_p_e_g.html#ga6f98d977bfa9d167c97172e876ba61e2',1,'turbojpeg.h']]],
|
||||||
|
['tjplanewidth',['tjPlaneWidth',['../group___turbo_j_p_e_g.html#ga63fb66bb1e36c74008c4634360becbb1',1,'turbojpeg.h']]],
|
||||||
|
['tjtransform',['tjTransform',['../group___turbo_j_p_e_g.html#gad02cd42b69f193a0623a9c801788df3a',1,'turbojpeg.h']]]
|
||||||
|
];
|
||||||
26
doc/html/search/groups_74.html
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="groups_74.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
createResults();
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
4
doc/html/search/groups_74.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['turbojpeg',['TurboJPEG',['../group___turbo_j_p_e_g.html',1,'']]]
|
||||||
|
];
|
||||||
@@ -4,13 +4,6 @@
|
|||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
#searchli {
|
|
||||||
float: right;
|
|
||||||
display: block;
|
|
||||||
width: 170px;
|
|
||||||
height: 36px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#MSearchBox {
|
#MSearchBox {
|
||||||
white-space : nowrap;
|
white-space : nowrap;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -20,6 +13,7 @@
|
|||||||
right: 0px;
|
right: 0px;
|
||||||
width: 170px;
|
width: 170px;
|
||||||
z-index: 102;
|
z-index: 102;
|
||||||
|
background-color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
#MSearchBox .left
|
#MSearchBox .left
|
||||||
@@ -224,6 +218,10 @@ a.SRScope:focus, a.SRScope:active {
|
|||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
span.SRScope {
|
||||||
|
padding-left: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
.SRPage .SRStatus {
|
.SRPage .SRStatus {
|
||||||
padding: 2px 5px;
|
padding: 2px 5px;
|
||||||
font-size: 8pt;
|
font-size: 8pt;
|
||||||
@@ -238,3 +236,36 @@ DIV.searchresults {
|
|||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*---------------- External search page results */
|
||||||
|
|
||||||
|
.searchresult {
|
||||||
|
background-color: #F0F3F8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pages b {
|
||||||
|
color: white;
|
||||||
|
padding: 5px 5px 3px 5px;
|
||||||
|
background-image: url("../tab_a.png");
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
text-shadow: 0 1px 1px #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pages {
|
||||||
|
line-height: 17px;
|
||||||
|
margin-left: 4px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hl {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchresults {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchpages {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,14 +9,24 @@ var indexSectionsWithContent =
|
|||||||
{
|
{
|
||||||
0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100010000011001010011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100010000011001010011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100010000011001000011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
|
2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100010000011001010011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
5: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
6: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||||
|
7: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
|
||||||
};
|
};
|
||||||
|
|
||||||
var indexSectionNames =
|
var indexSectionNames =
|
||||||
{
|
{
|
||||||
0: "all",
|
0: "all",
|
||||||
1: "classes",
|
1: "classes",
|
||||||
2: "variables"
|
2: "functions",
|
||||||
|
3: "variables",
|
||||||
|
4: "typedefs",
|
||||||
|
5: "enums",
|
||||||
|
6: "enumvalues",
|
||||||
|
7: "groups"
|
||||||
};
|
};
|
||||||
|
|
||||||
function convertToId(search)
|
function convertToId(search)
|
||||||
@@ -261,7 +271,7 @@ function SearchBox(name, resultsPath, inFrame, label)
|
|||||||
var node = child.firstChild;
|
var node = child.firstChild;
|
||||||
if (j==id)
|
if (j==id)
|
||||||
{
|
{
|
||||||
node.innerHTML='•';
|
node.innerHTML='•';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -358,7 +368,7 @@ function SearchBox(name, resultsPath, inFrame, label)
|
|||||||
hasResultsPage = false;
|
hasResultsPage = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.frames.MSearchResults.location.href = resultsPageWithSearch;
|
window.frames.MSearchResults.location = resultsPageWithSearch;
|
||||||
var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
|
var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
|
||||||
|
|
||||||
if (domPopupSearchResultsWindow.style.display!='block')
|
if (domPopupSearchResultsWindow.style.display!='block')
|
||||||
@@ -728,3 +738,72 @@ function SearchResults(name)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setKeyActions(elem,action)
|
||||||
|
{
|
||||||
|
elem.setAttribute('onkeydown',action);
|
||||||
|
elem.setAttribute('onkeypress',action);
|
||||||
|
elem.setAttribute('onkeyup',action);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setClassAttr(elem,attr)
|
||||||
|
{
|
||||||
|
elem.setAttribute('class',attr);
|
||||||
|
elem.setAttribute('className',attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
function createResults()
|
||||||
|
{
|
||||||
|
var results = document.getElementById("SRResults");
|
||||||
|
for (var e=0; e<searchData.length; e++)
|
||||||
|
{
|
||||||
|
var id = searchData[e][0];
|
||||||
|
var srResult = document.createElement('div');
|
||||||
|
srResult.setAttribute('id','SR_'+id);
|
||||||
|
setClassAttr(srResult,'SRResult');
|
||||||
|
var srEntry = document.createElement('div');
|
||||||
|
setClassAttr(srEntry,'SREntry');
|
||||||
|
var srLink = document.createElement('a');
|
||||||
|
srLink.setAttribute('id','Item'+e);
|
||||||
|
setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
|
||||||
|
setClassAttr(srLink,'SRSymbol');
|
||||||
|
srLink.innerHTML = searchData[e][1][0];
|
||||||
|
srEntry.appendChild(srLink);
|
||||||
|
if (searchData[e][1].length==2) // single result
|
||||||
|
{
|
||||||
|
srLink.setAttribute('href',searchData[e][1][1][0]);
|
||||||
|
if (searchData[e][1][1][1])
|
||||||
|
{
|
||||||
|
srLink.setAttribute('target','_parent');
|
||||||
|
}
|
||||||
|
var srScope = document.createElement('span');
|
||||||
|
setClassAttr(srScope,'SRScope');
|
||||||
|
srScope.innerHTML = searchData[e][1][1][2];
|
||||||
|
srEntry.appendChild(srScope);
|
||||||
|
}
|
||||||
|
else // multiple results
|
||||||
|
{
|
||||||
|
srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
|
||||||
|
var srChildren = document.createElement('div');
|
||||||
|
setClassAttr(srChildren,'SRChildren');
|
||||||
|
for (var c=0; c<searchData[e][1].length-1; c++)
|
||||||
|
{
|
||||||
|
var srChild = document.createElement('a');
|
||||||
|
srChild.setAttribute('id','Item'+e+'_c'+c);
|
||||||
|
setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
|
||||||
|
setClassAttr(srChild,'SRScope');
|
||||||
|
srChild.setAttribute('href',searchData[e][1][c+1][0]);
|
||||||
|
if (searchData[e][1][c+1][1])
|
||||||
|
{
|
||||||
|
srChild.setAttribute('target','_parent');
|
||||||
|
}
|
||||||
|
srChild.innerHTML = searchData[e][1][c+1][2];
|
||||||
|
srChildren.appendChild(srChild);
|
||||||
|
}
|
||||||
|
srEntry.appendChild(srChildren);
|
||||||
|
}
|
||||||
|
srResult.appendChild(srEntry);
|
||||||
|
results.appendChild(srResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
26
doc/html/search/typedefs_74.html
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html><head><title></title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.3.1">
|
||||||
|
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||||
|
<script type="text/javascript" src="typedefs_74.js"></script>
|
||||||
|
<script type="text/javascript" src="search.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
createResults();
|
||||||
|
--></script>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
searchResults.Search();
|
||||||
|
--></script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
5
doc/html/search/typedefs_74.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['tjhandle',['tjhandle',['../group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763',1,'turbojpeg.h']]],
|
||||||
|
['tjtransform',['tjtransform',['../group___turbo_j_p_e_g.html#gaa29f3189c41be12ec5dee7caec318a31',1,'turbojpeg.h']]]
|
||||||
|
];
|
||||||