Compare commits
1093 Commits
V2MultiWea
...
1.7.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4cd2de0fff | ||
|
|
b318a0703b | ||
|
|
ea67aca955 | ||
|
|
0ab140a071 | ||
|
|
d5eb2432ef | ||
|
|
7a8a2757db | ||
|
|
d8d3cafc32 | ||
|
|
604824335c | ||
|
|
9240147874 | ||
|
|
05a6323d2c | ||
|
|
1dd0b7713b | ||
|
|
795f70a0b0 | ||
|
|
5831af0fb6 | ||
|
|
e8e3e43711 | ||
|
|
460b05d37a | ||
|
|
f03405ca47 | ||
|
|
0405ed9e3d | ||
|
|
2eb8f2f84a | ||
|
|
6894d4c0bc | ||
|
|
53c04b7299 | ||
|
|
3bf307abb0 | ||
|
|
4928d29a8e | ||
|
|
8cec9c7b73 | ||
|
|
a6e3352073 | ||
|
|
0eeea37662 | ||
|
|
2a8f55e99e | ||
|
|
db7b0c1785 | ||
|
|
55e64f6ab0 | ||
|
|
6fce7062e5 | ||
|
|
2df8ba19f4 | ||
|
|
e4a3b3b5ba | ||
|
|
0494dc8d32 | ||
|
|
3dd33518c4 | ||
|
|
db8225a078 | ||
|
|
00fb7804da | ||
|
|
cddd21d879 | ||
|
|
dcc2e52c61 | ||
|
|
11c5e1cf4c | ||
|
|
cef7ea9f5e | ||
|
|
31d2a15957 | ||
|
|
3a414b21fa | ||
|
|
e99a906f54 | ||
|
|
fc4b02cee8 | ||
|
|
e01567553e | ||
|
|
bf7b0bf4bf | ||
|
|
ece92a1b7c | ||
|
|
2da5c51e42 | ||
|
|
57228fa208 | ||
|
|
024c62aed4 | ||
|
|
e56f14502e | ||
|
|
82eb1a946e | ||
|
|
b6f1bb570f | ||
|
|
896036b3c2 | ||
|
|
e51937cee7 | ||
|
|
a47dbf88bb | ||
|
|
f9a868a979 | ||
|
|
56542a02e8 | ||
|
|
2dda9499fa | ||
|
|
f9738cb611 | ||
|
|
741a160913 | ||
|
|
5daf817e7e | ||
|
|
9175bc0e16 | ||
|
|
b7f1fdd9cc | ||
|
|
07f88d21bd | ||
|
|
a7d1a4611f | ||
|
|
c96b840c53 | ||
|
|
70445ab8a3 | ||
|
|
136e6dd389 | ||
|
|
94edef2c3f | ||
|
|
1434e8d6e9 | ||
|
|
54a53b574f | ||
|
|
63ae33eca7 | ||
|
|
b485048f6b | ||
|
|
3ed2da9282 | ||
|
|
5188693469 | ||
|
|
68911876b9 | ||
|
|
820b4ea358 | ||
|
|
d8485350e7 | ||
|
|
b4b6186f54 | ||
|
|
3ea353bef3 | ||
|
|
67e4518132 | ||
|
|
0636f0049a | ||
|
|
4b592f7507 | ||
|
|
a9a308e5e9 | ||
|
|
cd27184332 | ||
|
|
d5892bbb32 | ||
|
|
20ae72e5fa | ||
|
|
7fc4348f64 | ||
|
|
5ec116021a | ||
|
|
a992333744 | ||
|
|
fefe0df922 | ||
|
|
509bdcb891 | ||
|
|
2fbd53807c | ||
|
|
9498375e75 | ||
|
|
639b264d2d | ||
|
|
c3829485e4 | ||
|
|
88de1b28a2 | ||
|
|
17e0c79fe7 | ||
|
|
ddef80d2cf | ||
|
|
1872337f5f | ||
|
|
6e219f0a4e | ||
|
|
a408c2211b | ||
|
|
8b2dcb6cb0 | ||
|
|
b0fe12f597 | ||
|
|
9a1cc8b9a8 | ||
|
|
cce4d50378 | ||
|
|
e732e62b39 | ||
|
|
728056acdb | ||
|
|
b85d282dfb | ||
|
|
194902798b | ||
|
|
cc276ff232 | ||
|
|
5538fe27e5 | ||
|
|
c0ba3e95f3 | ||
|
|
4ec6f853d8 | ||
|
|
6dcda3595e | ||
|
|
c4a9eb9e44 | ||
|
|
ba57bb1396 | ||
|
|
f94f4a1191 | ||
|
|
469f76e690 | ||
|
|
0098466704 | ||
|
|
48ddfd25d4 | ||
|
|
2f3841d7e6 | ||
|
|
1cde242f06 | ||
|
|
a0b227fdd8 | ||
|
|
36a79d7cbe | ||
|
|
2c491bc905 | ||
|
|
a25c405eae | ||
|
|
e666c60e7d | ||
|
|
6a45e68c73 | ||
|
|
59b313352b | ||
|
|
9e04f9ba80 | ||
|
|
cf5838505f | ||
|
|
23469c00de | ||
|
|
66083d6531 | ||
|
|
1c3748e923 | ||
|
|
88bf01fe6f | ||
|
|
a969a8f99c | ||
|
|
ef0e34a278 | ||
|
|
50eb45991d | ||
|
|
ffa405dad9 | ||
|
|
1f966eb6c3 | ||
|
|
b503540075 | ||
|
|
2be305d39e | ||
|
|
f6ee966e17 | ||
|
|
246315c723 | ||
|
|
be8f16a8e6 | ||
|
|
32614d3539 | ||
|
|
aab978c7ea | ||
|
|
d4b48fae6f | ||
|
|
0433bd8560 | ||
|
|
71eb0fedd9 | ||
|
|
9056ae72d3 | ||
|
|
430a5359ac | ||
|
|
5468bc8447 | ||
|
|
059005a4a7 | ||
|
|
3ca39ab3f1 | ||
|
|
f8a6e2e19f | ||
|
|
1f5c2095a5 | ||
|
|
afaaba6b3c | ||
|
|
c85f976ed6 | ||
|
|
b22832ba54 | ||
|
|
977f17a893 | ||
|
|
60621a300c | ||
|
|
fac3fc67b6 | ||
|
|
8e3da75c3c | ||
|
|
c9dc2eaad4 | ||
|
|
8095d6c48c | ||
|
|
6f2e192947 | ||
|
|
0b9d8c7b47 | ||
|
|
1ecea32933 | ||
|
|
ceae4470f5 | ||
|
|
237455f4b7 | ||
|
|
3d25f8ee79 | ||
|
|
86572462e6 | ||
|
|
245eaa1fd9 | ||
|
|
e7b712660e | ||
|
|
3750123e43 | ||
|
|
b20f39d09f | ||
|
|
c35f762826 | ||
|
|
7eda762c28 | ||
|
|
0460769eea | ||
|
|
d3939c785d | ||
|
|
66386d6eec | ||
|
|
9e8dafc4ca | ||
|
|
36a698fee4 | ||
|
|
aab764a6e5 | ||
|
|
11f30bc28d | ||
|
|
46b5595c3f | ||
|
|
c380f1f399 | ||
|
|
184882e916 | ||
|
|
a9963bcdb3 | ||
|
|
e0c0da7dff | ||
|
|
6c9df4574c | ||
|
|
034c83f996 | ||
|
|
2b582b169b | ||
|
|
cfa8df0575 | ||
|
|
c34f2941aa | ||
|
|
555b397067 | ||
|
|
38f59e640c | ||
|
|
65ce7dabe3 | ||
|
|
4d7d3ea937 | ||
|
|
15b6593143 | ||
|
|
af1e7b346e | ||
|
|
7a2f572eaa | ||
|
|
4bb3ed0d85 | ||
|
|
5fe0820e13 | ||
|
|
28a4101d4d | ||
|
|
cc22edcce3 | ||
|
|
2424d2a082 | ||
|
|
b1ccb70277 | ||
|
|
c641cc6394 | ||
|
|
9a6568f5e8 | ||
|
|
3627b33eec | ||
|
|
702eb95b84 | ||
|
|
03f191f47d | ||
|
|
813a4b0200 | ||
|
|
c24950b261 | ||
|
|
806abb1985 | ||
|
|
a4591a5eaa | ||
|
|
018737eb15 | ||
|
|
3e5bd4e13b | ||
|
|
98ec8b9910 | ||
|
|
d2a966f363 | ||
|
|
8a7cc9259c | ||
|
|
382fc710e5 | ||
|
|
be4229867a | ||
|
|
6b05022530 | ||
|
|
08a3828cc9 | ||
|
|
d5efedf51b | ||
|
|
8394a96fa8 | ||
|
|
4f7e869509 | ||
|
|
7aac61859f | ||
|
|
3ba967bdc1 | ||
|
|
9fb4e677a6 | ||
|
|
1ffb5aa6fe | ||
|
|
0100cd2f36 | ||
|
|
d6b486524c | ||
|
|
f80394fc02 | ||
|
|
e750c598be | ||
|
|
26191dd274 | ||
|
|
12171f6cd9 | ||
|
|
457276fa5d | ||
|
|
7ba21ac4fd | ||
|
|
e2b011590d | ||
|
|
ef6f411b70 | ||
|
|
2c48161595 | ||
|
|
ca3e0d2ba9 | ||
|
|
922e234fe9 | ||
|
|
b9cfd2fae5 | ||
|
|
d8bc84adb1 | ||
|
|
ce3511f7ea | ||
|
|
a8e1bd1538 | ||
|
|
0876c8c2bf | ||
|
|
0554ecae5c | ||
|
|
cfbc8a23f7 | ||
|
|
8b19f82c0b | ||
|
|
794dbacea3 | ||
|
|
3a4b6cf6b6 | ||
|
|
c0c9c51e43 | ||
|
|
e788ee5faf | ||
|
|
e17405d80a | ||
|
|
de52eebe7a | ||
|
|
d7069a2a66 | ||
|
|
7faa19b297 | ||
|
|
5e6ed2dc9f | ||
|
|
adebc36bc7 | ||
|
|
165bebda3e | ||
|
|
0f54e5fe46 | ||
|
|
14c046108e | ||
|
|
b5a8850d65 | ||
|
|
3f51bb6e1d | ||
|
|
aab195a6eb | ||
|
|
2400d146ce | ||
|
|
9a9b5ce61e | ||
|
|
6b473c6edc | ||
|
|
9d8f31a0cb | ||
|
|
5947769812 | ||
|
|
52673f5249 | ||
|
|
f44de434c2 | ||
|
|
cbb27a5661 | ||
|
|
48eaccc612 | ||
|
|
5499136677 | ||
|
|
57b66a9be9 | ||
|
|
746f419e80 | ||
|
|
5d1a138c5c | ||
|
|
e781870da3 | ||
|
|
e3f30fece9 | ||
|
|
7b2536eb0d | ||
|
|
299382b907 | ||
|
|
fce64f8f12 | ||
|
|
f8bf11d574 | ||
|
|
fdfe0cae87 | ||
|
|
66664660d7 | ||
|
|
760ac98ab6 | ||
|
|
2bd5d88dbf | ||
|
|
5f78a36899 | ||
|
|
b897b9427f | ||
|
|
c33b1004d1 | ||
|
|
19e8977fff | ||
|
|
c097d650dc | ||
|
|
b7af32bee3 | ||
|
|
d2422b03be | ||
|
|
97d2085735 | ||
|
|
e307df79a1 | ||
|
|
324fe06a06 | ||
|
|
fe15371047 | ||
|
|
fbb7196100 | ||
|
|
8c9a9c9d12 | ||
|
|
6f8ea87c46 | ||
|
|
3d84157325 | ||
|
|
9abf8ddf91 | ||
|
|
f289d5d9e7 | ||
|
|
821c03a389 | ||
|
|
c37a473287 | ||
|
|
3eebedc4c3 | ||
|
|
5eb99b7d2f | ||
|
|
3534706a59 | ||
|
|
717a8a5cdb | ||
|
|
586d8fdf21 | ||
|
|
f4016c2e1c | ||
|
|
2bb08d7638 | ||
|
|
155cc56632 | ||
|
|
4a4032f3b8 | ||
|
|
cd5aa8f074 | ||
|
|
c2b26f6c15 | ||
|
|
f25ca2ac80 | ||
|
|
303c74f4c9 | ||
|
|
59d4d833f1 | ||
|
|
562acd6e2c | ||
|
|
c3d76669ca | ||
|
|
14d8d14832 | ||
|
|
cdc04ba413 | ||
|
|
ab91525e7a | ||
|
|
0a4b3487ea | ||
|
|
0061055e73 | ||
|
|
a16c4015ba | ||
|
|
0173c29630 | ||
|
|
26a734a538 | ||
|
|
04e7dc1270 | ||
|
|
1cdc11dae2 | ||
|
|
1cb75c4471 | ||
|
|
b6efc9f583 | ||
|
|
01868e46fe | ||
|
|
313cce23db | ||
|
|
9aca1f41f3 | ||
|
|
81c7445744 | ||
|
|
d54daa19a0 | ||
|
|
0c58a42b08 | ||
|
|
68cbf31c8b | ||
|
|
d518222340 | ||
|
|
7a35a43bd4 | ||
|
|
cb52e82a60 | ||
|
|
1a43bc8abf | ||
|
|
e88c39b090 | ||
|
|
a1f5e6ba43 | ||
|
|
d0a0aa7a65 | ||
|
|
8cf956e669 | ||
|
|
3bbb23b1bc | ||
|
|
a582b5996c | ||
|
|
4cd10c34e2 | ||
|
|
3ec1dbf51c | ||
|
|
71deb8925e | ||
|
|
abb562d1ab | ||
|
|
a495a6bfbc | ||
|
|
e86b17be2d | ||
|
|
e62f805bcd | ||
|
|
6f8ae718d1 | ||
|
|
1dcfa9e0ee | ||
|
|
7f0664ff82 | ||
|
|
03b3e60e23 | ||
|
|
72bde5234a | ||
|
|
1e1f5e8193 | ||
|
|
6c01b6da9b | ||
|
|
756aac1f9a | ||
|
|
c0ac428179 | ||
|
|
7549b471c3 | ||
|
|
0b265320a9 | ||
|
|
6033a76870 | ||
|
|
3708d55ef9 | ||
|
|
9996cf6157 | ||
|
|
3e78b7c262 | ||
|
|
65e012c540 | ||
|
|
2a88f7d7c4 | ||
|
|
dca9501de7 | ||
|
|
8ed6b549ee | ||
|
|
1a741b97d2 | ||
|
|
33809f56c5 | ||
|
|
67ee544231 | ||
|
|
94f61ce307 | ||
|
|
b57f7cdc79 | ||
|
|
c901a7136f | ||
|
|
243db9a3a8 | ||
|
|
a5ef61ac82 | ||
|
|
9e272aeef0 | ||
|
|
5c45979783 | ||
|
|
02f214d8a7 | ||
|
|
daac25c343 | ||
|
|
768f1b5710 | ||
|
|
5b4b9fd169 | ||
|
|
7dea357f4c | ||
|
|
9ef10b1663 | ||
|
|
d2004e88f9 | ||
|
|
ef27cc54dd | ||
|
|
19390eaec3 | ||
|
|
dff6171605 | ||
|
|
4fe84efafd | ||
|
|
ed4997168b | ||
|
|
b92de9beb5 | ||
|
|
7f50b2ba7b | ||
|
|
c35bc71334 | ||
|
|
413a8111c0 | ||
|
|
5be31898f1 | ||
|
|
44faf3e169 | ||
|
|
937a60c8f9 | ||
|
|
f7626699da | ||
|
|
ad97c72821 | ||
|
|
b7ce7b7dab | ||
|
|
b73f4dd8e4 | ||
|
|
a4bf92dae4 | ||
|
|
1e745ba48b | ||
|
|
f8273e977e | ||
|
|
605843b527 | ||
|
|
71d2bd83aa | ||
|
|
a12704c6a3 | ||
|
|
43271f290e | ||
|
|
7533b475be | ||
|
|
1b89e5c973 | ||
|
|
8ba127d4c5 | ||
|
|
bb8ea493d6 | ||
|
|
02cffa9a71 | ||
|
|
76fc30e460 | ||
|
|
e8ec81bf04 | ||
|
|
9fba54ad5d | ||
|
|
ccd98c3c3d | ||
|
|
2539e41e59 | ||
|
|
83312fbb74 | ||
|
|
6134162f1c | ||
|
|
fb713226a0 | ||
|
|
3ac46f5fa7 | ||
|
|
d5c507ca6b | ||
|
|
858bb15a6b | ||
|
|
faee255730 | ||
|
|
eb5b1312bb | ||
|
|
5445b4f97a | ||
|
|
02ead94848 | ||
|
|
6a4f76a219 | ||
|
|
1252b0bde2 | ||
|
|
a40fbf0da1 | ||
|
|
468f52a4f6 | ||
|
|
3f1fb9a66e | ||
|
|
c181891549 | ||
|
|
f84f4aa058 | ||
|
|
5d5c3e2a48 | ||
|
|
5b8b88e05a | ||
|
|
0287e21c01 | ||
|
|
7d2f2bd610 | ||
|
|
d56393b134 | ||
|
|
1f7ed035d3 | ||
|
|
8430328043 | ||
|
|
f311852e9b | ||
|
|
ac0a32e690 | ||
|
|
88482a2431 | ||
|
|
efbd339dc8 | ||
|
|
ff28ce8d65 | ||
|
|
cb33470673 | ||
|
|
e6389d62dc | ||
|
|
2766f17cb9 | ||
|
|
70c36716c9 | ||
|
|
48702b1ed9 | ||
|
|
16216b2ed0 | ||
|
|
3e22553d7e | ||
|
|
4744839a08 | ||
|
|
cb0c13a1a1 | ||
|
|
f0497a2721 | ||
|
|
77d018dbc8 | ||
|
|
4be8b50360 | ||
|
|
2581935b36 | ||
|
|
a7cf09883e | ||
|
|
1254a7bbe2 | ||
|
|
fb5ec1d1f5 | ||
|
|
5bcb350d89 | ||
|
|
81bc6b49f8 | ||
|
|
9019a1eb23 | ||
|
|
f3780998ed | ||
|
|
27090c541f | ||
|
|
ef73469700 | ||
|
|
2d12a82a54 | ||
|
|
c5d9dc4732 | ||
|
|
84ec70e707 | ||
|
|
b7f5d7e415 | ||
|
|
8df7a52cf7 | ||
|
|
9bb9292a41 | ||
|
|
438c499718 | ||
|
|
ff81d9461a | ||
|
|
f4f85aa1fd | ||
|
|
56f2f0b727 | ||
|
|
19f325aa09 | ||
|
|
1d5a63c180 | ||
|
|
d7da5153f3 | ||
|
|
c67f010302 | ||
|
|
90a10b3508 | ||
|
|
a09f7d274f | ||
|
|
daa9466b7a | ||
|
|
efb252206b | ||
|
|
ffb847bbc0 | ||
|
|
44b2392a10 | ||
|
|
855540b5c5 | ||
|
|
a7b9b0da42 | ||
|
|
5f8eac9dc8 | ||
|
|
b0ea103c61 | ||
|
|
65781e6080 | ||
|
|
fc0149cdbc | ||
|
|
3946c076fe | ||
|
|
b5b6d3f85c | ||
|
|
10f09dc15d | ||
|
|
f50d23a0d4 | ||
|
|
cb9f972d13 | ||
|
|
53fd33604d | ||
|
|
c8e3935648 | ||
|
|
8f9c8ee293 | ||
|
|
767fe92de5 | ||
|
|
435b9cd1bb | ||
|
|
afc7c2b449 | ||
|
|
e0a7c7e935 | ||
|
|
b0415370f8 | ||
|
|
b7ff2fe3e3 | ||
|
|
7978f5ebfe | ||
|
|
b663110288 | ||
|
|
3ef9e3bc69 | ||
|
|
a032bd28ad | ||
|
|
834a524a67 | ||
|
|
e3460bea09 | ||
|
|
31041f2ade | ||
|
|
3320272673 | ||
|
|
131959e388 | ||
|
|
d23835a6c2 | ||
|
|
e17632e0d5 | ||
|
|
d57a3b101b | ||
|
|
c2289c047b | ||
|
|
4ade726a07 | ||
|
|
856a45a775 | ||
|
|
f64ccbab7e | ||
|
|
8a44c8fce1 | ||
|
|
2a70dde016 | ||
|
|
f1a5fb6b62 | ||
|
|
04bb15a108 | ||
|
|
9b358a1b39 | ||
|
|
86ad4aabf3 | ||
|
|
36c097744c | ||
|
|
e7cd445491 | ||
|
|
9b66d74382 | ||
|
|
e3752aefed | ||
|
|
d8ff809092 | ||
|
|
a8f5bf8baf | ||
|
|
3a3605b812 | ||
|
|
f1c635d103 | ||
|
|
15cce79040 | ||
|
|
fef681be7c | ||
|
|
e379a5a03e | ||
|
|
f2b4911f60 | ||
|
|
ff93de6e61 | ||
|
|
29adc28d80 | ||
|
|
118937aa99 | ||
|
|
6ec4c65f04 | ||
|
|
fefb40bda2 | ||
|
|
c5938f7d31 | ||
|
|
e748b74c67 | ||
|
|
a957d58939 | ||
|
|
37a9a52544 | ||
|
|
566d70a6d1 | ||
|
|
7b7157f491 | ||
|
|
ea8791697e | ||
|
|
dd9f7bba5d | ||
|
|
8051cd4194 | ||
|
|
b4a7fa1ad9 | ||
|
|
e460bd9a69 | ||
|
|
5a3082275e | ||
|
|
bdf20355b6 | ||
|
|
21ea923520 | ||
|
|
484fff444f | ||
|
|
f63d0abbc1 | ||
|
|
5a05898ec4 | ||
|
|
b9ee7cc30a | ||
|
|
03ee96cdff | ||
|
|
be2598bc4c | ||
|
|
01f5fe6eb1 | ||
|
|
32f9cbb11d | ||
|
|
67e99c799c | ||
|
|
da5284c6b8 | ||
|
|
c2fa79347e | ||
|
|
953a7ff066 | ||
|
|
84cabd6a1e | ||
|
|
e1a6b7e249 | ||
|
|
72b342912e | ||
|
|
07f52c463e | ||
|
|
064f0216b4 | ||
|
|
70a4d113b3 | ||
|
|
2001d6b6ec | ||
|
|
b278cbb32e | ||
|
|
7ec9af8200 | ||
|
|
71b0c35653 | ||
|
|
4032df3115 | ||
|
|
6eadc29ca0 | ||
|
|
c6f7a39d22 | ||
|
|
73099edae3 | ||
|
|
f53646764c | ||
|
|
7b42fea0f5 | ||
|
|
df1e9732d0 | ||
|
|
822ba4432f | ||
|
|
8e6c6acf18 | ||
|
|
83b13f6a3f | ||
|
|
aceb3f3425 | ||
|
|
37f2ec2f9f | ||
|
|
4d1e822de7 | ||
|
|
b8276fd8e3 | ||
|
|
d319ebc0a8 | ||
|
|
5f32d9347d | ||
|
|
ba136fe42d | ||
|
|
e4090b1475 | ||
|
|
b7d2ecbf1a | ||
|
|
f77f846c8d | ||
|
|
23b34aeb92 | ||
|
|
59c887129d | ||
|
|
bd7cd9245a | ||
|
|
53c7cf116c | ||
|
|
95b7842e31 | ||
|
|
0b953ccc40 | ||
|
|
41c4eabcaa | ||
|
|
0a33a3a71a | ||
|
|
d6b470cd07 | ||
|
|
d1cb627582 | ||
|
|
1d99158562 | ||
|
|
05c32c7a62 | ||
|
|
ea4d32b4ad | ||
|
|
bb9e260793 | ||
|
|
536cb6febd | ||
|
|
258fe8bad0 | ||
|
|
74772a1f61 | ||
|
|
bdaa5f20a1 | ||
|
|
19293601b3 | ||
|
|
f2bcfa5275 | ||
|
|
6265027222 | ||
|
|
36ff4dcd11 | ||
|
|
35a53ef1d7 | ||
|
|
507c5eb7ca | ||
|
|
169670a58b | ||
|
|
fbb5dced97 | ||
|
|
aa54a386f3 | ||
|
|
6b8c58e3b5 | ||
|
|
67f4797e09 | ||
|
|
7335ae548c | ||
|
|
0b1a5bc3c1 | ||
|
|
e9c54bb5e4 | ||
|
|
4294038271 | ||
|
|
408eab13f0 | ||
|
|
ee0bd9ee76 | ||
|
|
263a25fb87 | ||
|
|
fa10ce28d2 | ||
|
|
039f665af1 | ||
|
|
304fa05094 | ||
|
|
89ad14b82f | ||
|
|
73785af730 | ||
|
|
d2c3e50a3f | ||
|
|
2fbe7ab6ce | ||
|
|
164799e4c4 | ||
|
|
4f57269518 | ||
|
|
92c9311a4c | ||
|
|
ca6fd89700 | ||
|
|
80b100f135 | ||
|
|
8e12f11089 | ||
|
|
f4324e8890 | ||
|
|
fda34fea46 | ||
|
|
0770150455 | ||
|
|
d79a8fc87b | ||
|
|
8e1bbfe938 | ||
|
|
3469d65f95 | ||
|
|
486536f92d | ||
|
|
70717cb6c8 | ||
|
|
94ebcdeb6b | ||
|
|
152238e67f | ||
|
|
eef51e0bd0 | ||
|
|
91df8446b0 | ||
|
|
ffb55f482a | ||
|
|
b2c5a84964 | ||
|
|
0be43cf1c2 | ||
|
|
f5923860fa | ||
|
|
adc2921f38 | ||
|
|
ca630a106e | ||
|
|
cbbc42d564 | ||
|
|
0054e6a378 | ||
|
|
76e30150b9 | ||
|
|
cd197a3807 | ||
|
|
b9673df961 | ||
|
|
37c8ea54eb | ||
|
|
e616b40c6f | ||
|
|
26109ca8f9 | ||
|
|
46e57d4f1c | ||
|
|
7743843a27 | ||
|
|
c84e145557 | ||
|
|
e767392b44 | ||
|
|
457177905d | ||
|
|
de74443d76 | ||
|
|
f3e7340118 | ||
|
|
efe3dd77fa | ||
|
|
7c690b9de1 | ||
|
|
5ce8770dc3 | ||
|
|
e9ddd6b8f8 | ||
|
|
f94f458922 | ||
|
|
89ef06fd3f | ||
|
|
ccd135b2a6 | ||
|
|
80eb0851d9 | ||
|
|
b84f470fca | ||
|
|
5caeccc007 | ||
|
|
96a4e16a4b | ||
|
|
477c657f60 | ||
|
|
68ad5411c9 | ||
|
|
cc50e620c0 | ||
|
|
8646abb18b | ||
|
|
2fbf6b732e | ||
|
|
93416e40a4 | ||
|
|
d2210414bc | ||
|
|
e6e9a21597 | ||
|
|
e14be5c8c2 | ||
|
|
f9b3561ca8 | ||
|
|
95083e846b | ||
|
|
ce415fb65c | ||
|
|
f479ea4bcf | ||
|
|
1a6c00ca8b | ||
|
|
58033d3cbc | ||
|
|
4c23ab029a | ||
|
|
0846f8a963 | ||
|
|
65a1aae629 | ||
|
|
caef97ad36 | ||
|
|
761439cc8d | ||
|
|
b847c53395 | ||
|
|
aca3e8f6c4 | ||
|
|
7122a7c174 | ||
|
|
769a7b89d2 | ||
|
|
d2b13f515d | ||
|
|
ef601d3345 | ||
|
|
d9e5601e10 | ||
|
|
c385133c84 | ||
|
|
b91a670c05 | ||
|
|
c90c8e0f4b | ||
|
|
0a8cd6d03d | ||
|
|
af89351432 | ||
|
|
fb81754880 | ||
|
|
dc5bfc1c41 | ||
|
|
98c740f204 | ||
|
|
255742db26 | ||
|
|
af4ceb0658 | ||
|
|
08d72b12ab | ||
|
|
5fb4badb7c | ||
|
|
4650636e5a | ||
|
|
2c65da3397 | ||
|
|
abc1d185b7 | ||
|
|
124eba4371 | ||
|
|
a673496ed3 | ||
|
|
af2a49afa7 | ||
|
|
b151796e0e | ||
|
|
828b2c9bc0 | ||
|
|
be8b838334 | ||
|
|
73fedf453c | ||
|
|
e03de192c8 | ||
|
|
725cdc2d69 | ||
|
|
048c57cf0c | ||
|
|
12dcbfbc79 | ||
|
|
32be05fa6c | ||
|
|
ae62b67554 | ||
|
|
29908533cd | ||
|
|
9c4f22d85b | ||
|
|
7f64668e55 | ||
|
|
0208942b84 | ||
|
|
783e86990c | ||
|
|
cdefc0e384 | ||
|
|
1c9f996248 | ||
|
|
c9715c5b0b | ||
|
|
dd47123bde | ||
|
|
594dc64a43 | ||
|
|
1b69994ffa | ||
|
|
3de21156b5 | ||
|
|
ce2c6ab49e | ||
|
|
d19c5a4a4a | ||
|
|
8945fe4857 | ||
|
|
464919072d | ||
|
|
f8c2087d74 | ||
|
|
7adc0e24ab | ||
|
|
ba65f29a72 | ||
|
|
76eef6fe59 | ||
|
|
1d1947c51a | ||
|
|
af4ac8fb5f | ||
|
|
adaf5cd69c | ||
|
|
516f5a40d0 | ||
|
|
3b7887a041 | ||
|
|
fe38f59bbb | ||
|
|
cd93aba002 | ||
|
|
2bcabce1d6 | ||
|
|
6ed9a62501 | ||
|
|
b987c025db | ||
|
|
27d8d100c5 | ||
|
|
701230b49c | ||
|
|
726d8248c5 | ||
|
|
07a2c5a81d | ||
|
|
081ae32d35 | ||
|
|
a7f02b3964 | ||
|
|
e116548b50 | ||
|
|
3190814265 | ||
|
|
eeea2b4de4 | ||
|
|
21f6174846 | ||
|
|
ed4c6b7c92 | ||
|
|
89be317a00 | ||
|
|
1ad4597d7a | ||
|
|
c65b659538 | ||
|
|
3c23163a29 | ||
|
|
c3900ee4f3 | ||
|
|
9c5da9e42c | ||
|
|
efa970c6a5 | ||
|
|
179f04739d | ||
|
|
b2f513caae | ||
|
|
9c1e74b0c0 | ||
|
|
e53af58d4a | ||
|
|
d9cb2ce6c7 | ||
|
|
a967f2b037 | ||
|
|
db5a7578c9 | ||
|
|
15086833a3 | ||
|
|
785729abdf | ||
|
|
32f407340f | ||
|
|
2830b35aa6 | ||
|
|
fb38f6adea | ||
|
|
a1e714dce7 | ||
|
|
3710ea903e | ||
|
|
72a9b6b7fe | ||
|
|
0d3fab40e5 | ||
|
|
3a30f1dc71 | ||
|
|
95abf3dca3 | ||
|
|
4e4d554ea4 | ||
|
|
9642780bb8 | ||
|
|
73bc656e63 | ||
|
|
b8b235df09 | ||
|
|
7b23aece00 | ||
|
|
531af998fb | ||
|
|
c7bdaf6632 | ||
|
|
92c7792e95 | ||
|
|
c9e0a6c533 | ||
|
|
6331267df6 | ||
|
|
1e81966b89 | ||
|
|
b785b9d219 | ||
|
|
85da7163a7 | ||
|
|
f3f8bee83b | ||
|
|
8802d5033f | ||
|
|
3d39564605 | ||
|
|
7843f51110 | ||
|
|
8bfdc98ef4 | ||
|
|
6673c89791 | ||
|
|
a8a30ae3b9 | ||
|
|
15af410e6f | ||
|
|
9e5cbf330f | ||
|
|
2fa9334090 | ||
|
|
fcdf5d377e | ||
|
|
756a284048 | ||
|
|
32e2b584b9 | ||
|
|
add52b4d57 | ||
|
|
a4d2cb3d12 | ||
|
|
72fbb3f63e | ||
|
|
c62290accb | ||
|
|
8ad40c5d66 | ||
|
|
cd5a721c23 | ||
|
|
643844c01d | ||
|
|
1a3c9ac5ef | ||
|
|
c84f080fc8 | ||
|
|
5fcdbfdd9e | ||
|
|
77dca2ddb2 | ||
|
|
d8fc691625 | ||
|
|
96fa4af939 | ||
|
|
2334793554 | ||
|
|
20e445b4be | ||
|
|
051263117d | ||
|
|
085db93fc8 | ||
|
|
8fe6925414 | ||
|
|
57ad7e62d2 | ||
|
|
6736e91ce0 | ||
|
|
4cbdb7897d | ||
|
|
d57d0ceb0d | ||
|
|
03608103b8 | ||
|
|
9c58d42a3c | ||
|
|
675d171104 | ||
|
|
bf3e605d3b | ||
|
|
a56ad597d4 | ||
|
|
cc5ffafd7c | ||
|
|
b101bb0001 | ||
|
|
405af67f45 | ||
|
|
f772cbee51 | ||
|
|
72d93b8723 | ||
|
|
7f78870295 | ||
|
|
706b9c55c2 | ||
|
|
48ae0d003d | ||
|
|
51c5933b76 | ||
|
|
0204d09a89 | ||
|
|
465c6b9ed6 | ||
|
|
39847c4688 | ||
|
|
7721c6e3da | ||
|
|
648ed00ce2 | ||
|
|
87c9358813 | ||
|
|
64b968b262 | ||
|
|
c0fbf4bf55 | ||
|
|
900e533b4b | ||
|
|
01818582cf | ||
|
|
9a0620f140 | ||
|
|
0216925e05 | ||
|
|
32b24a98ca | ||
|
|
93d7a4938a | ||
|
|
56265b78ec | ||
|
|
6ee76aa6f7 | ||
|
|
32d6aefe00 | ||
|
|
84795863e5 | ||
|
|
9deb3e433c | ||
|
|
92a5b14347 | ||
|
|
891a330955 | ||
|
|
3cee90fe8b | ||
|
|
2bb58bac2e | ||
|
|
9dc1897b35 | ||
|
|
7a7da24df5 | ||
|
|
46f7250f08 | ||
|
|
58bfe23e5a | ||
|
|
ccb914ea83 | ||
|
|
10fe67f4a6 | ||
|
|
a34247ebf4 | ||
|
|
53e96b02c0 | ||
|
|
7c022d6061 | ||
|
|
14e5b46687 | ||
|
|
0243c61ea1 | ||
|
|
d73d4e9d48 | ||
|
|
3d60d9e3c5 | ||
|
|
329b708aaf | ||
|
|
59e0367dd4 | ||
|
|
56c85813ee | ||
|
|
a6bb2604f6 | ||
|
|
b2c71c099f | ||
|
|
102eca7d65 | ||
|
|
55a1d54b8e | ||
|
|
0c313807ff | ||
|
|
d5e685aaf2 | ||
|
|
214fc0419d | ||
|
|
1e24b889dd | ||
|
|
08dd79fafd | ||
|
|
988e2c3fdf | ||
|
|
92dc20850d | ||
|
|
fa9c366076 | ||
|
|
08ab36a5d9 | ||
|
|
c1c04b489c | ||
|
|
0caa321fe5 | ||
|
|
3acaf773b8 | ||
|
|
5080746fa0 | ||
|
|
66c95af093 | ||
|
|
9241816a71 | ||
|
|
07e1f0e802 | ||
|
|
340f8f1f17 | ||
|
|
0316b7ff9a | ||
|
|
7416d2aaf1 | ||
|
|
cb61342e58 | ||
|
|
d99de40b2b | ||
|
|
533675416c | ||
|
|
8baceee06c | ||
|
|
f7bf5c33bc | ||
|
|
f8445030c7 | ||
|
|
1d60131df7 | ||
|
|
539b6410fa | ||
|
|
75f067d5c9 | ||
|
|
518e9b7513 | ||
|
|
0314bb4d38 | ||
|
|
ddfe004204 | ||
|
|
07375e7a39 | ||
|
|
44b69f3d3e | ||
|
|
bca4cf8584 | ||
|
|
4f3f503953 | ||
|
|
1df635a164 | ||
|
|
f3ae5789be | ||
|
|
cf7cd21474 | ||
|
|
0f8fbcfcc1 | ||
|
|
a1f9109392 | ||
|
|
c648be6410 | ||
|
|
6fa0b668ba | ||
|
|
1925b24512 | ||
|
|
1101b4075a | ||
|
|
edb144bd1d | ||
|
|
bcefad1a97 | ||
|
|
fe65e19b67 | ||
|
|
1b6ef97f45 | ||
|
|
ce0e0a2d38 | ||
|
|
e7aeffc271 | ||
|
|
648766ad44 | ||
|
|
176c91097a | ||
|
|
515b1488c6 | ||
|
|
6868e2f7c1 | ||
|
|
c71c7ca7cc | ||
|
|
2f743fe2ce | ||
|
|
b19c284eb7 | ||
|
|
0419f8bee9 | ||
|
|
18638cd47c | ||
|
|
23e6c9c9e8 | ||
|
|
fa9c48a376 | ||
|
|
a67fe755cd | ||
|
|
f012f664d2 | ||
|
|
80e44fe414 | ||
|
|
42c7a30280 | ||
|
|
e9ec04a449 | ||
|
|
f7d9cd1b8e | ||
|
|
5cc687f5dc | ||
|
|
e7f8206c96 | ||
|
|
6581cb2929 | ||
|
|
b8f7e193d6 | ||
|
|
95b0421074 | ||
|
|
1228732432 | ||
|
|
191787e5c3 | ||
|
|
ca07daebc7 | ||
|
|
8ec8acf610 | ||
|
|
cb0f4f8f10 | ||
|
|
81123a80f2 | ||
|
|
045caad8f5 | ||
|
|
a76a77a330 | ||
|
|
36a95ec36e | ||
|
|
744563a150 | ||
|
|
389074d1e9 | ||
|
|
93778eccbb | ||
|
|
5637e89568 | ||
|
|
4508ea1cc1 | ||
|
|
6b11776fcf | ||
|
|
525e9d9a8e | ||
|
|
b40a9c7a06 | ||
|
|
0b757aaad5 | ||
|
|
7f1d9a01e6 | ||
|
|
f46d8e8a10 | ||
|
|
d1b6b78206 | ||
|
|
d8c191490f | ||
|
|
24ec85febd | ||
|
|
9565d96006 | ||
|
|
822098b5ac | ||
|
|
02ae36b427 | ||
|
|
f5bfab139c | ||
|
|
259a9ff0cc | ||
|
|
d238cfe753 | ||
|
|
df20f918ba | ||
|
|
b8fc1f634e | ||
|
|
ae9dadb5d8 | ||
|
|
d31c062693 | ||
|
|
31ca817dc0 | ||
|
|
544928a039 | ||
|
|
14276b3cf8 | ||
|
|
07e7eeedd1 | ||
|
|
5748de1f9d | ||
|
|
d0c1c4d753 | ||
|
|
7af331c50d | ||
|
|
125a10bb44 | ||
|
|
9db7bcde00 | ||
|
|
9b8e5c8719 | ||
|
|
a803507d67 | ||
|
|
cb5efad026 | ||
|
|
26922a1578 | ||
|
|
90493b6571 | ||
|
|
2dee921cd5 | ||
|
|
433c7c3f99 | ||
|
|
fef461fd13 | ||
|
|
1f56645b69 | ||
|
|
69ca6cd5b2 | ||
|
|
8805e3fb27 | ||
|
|
64d8397ea5 | ||
|
|
4d4496fc4d | ||
|
|
af67342969 | ||
|
|
d9cbd52ea8 | ||
|
|
8b25d44bcf | ||
|
|
3d6733bed8 | ||
|
|
c3f3db518b | ||
|
|
385ec62e53 | ||
|
|
881524831f | ||
|
|
376be8b990 | ||
|
|
96ddbf2a8b | ||
|
|
c2ee420917 | ||
|
|
74a1ba0d1e | ||
|
|
0dc05a39e6 | ||
|
|
72fe406f64 | ||
|
|
90ac174260 | ||
|
|
b555e02220 | ||
|
|
507c94c24c | ||
|
|
2699fa8cf9 | ||
|
|
513002416c | ||
|
|
22530cd77e | ||
|
|
81521b98fd | ||
|
|
73c2feee97 | ||
|
|
d4212d390d | ||
|
|
2b8a55f396 | ||
|
|
f253da09ec | ||
|
|
e232abdab2 | ||
|
|
fae40e0bdf |
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
* text=auto
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -11,6 +11,7 @@
|
|||||||
/bin-release
|
/bin-release
|
||||||
/indra/viewer-*
|
/indra/viewer-*
|
||||||
/indra/newview/vivox-runtime/
|
/indra/newview/vivox-runtime/
|
||||||
|
/indra/newview/dbghelp.dll
|
||||||
/libraries/
|
/libraries/
|
||||||
/lib/
|
/lib/
|
||||||
*.pyc
|
*.pyc
|
||||||
@@ -22,3 +23,4 @@
|
|||||||
/LICENSES/
|
/LICENSES/
|
||||||
/edited-files.txt
|
/edited-files.txt
|
||||||
qtcreator-build/
|
qtcreator-build/
|
||||||
|
/.pc
|
||||||
|
|||||||
114
LICENSES/FLOSS-exception.txt
Normal file
114
LICENSES/FLOSS-exception.txt
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
Linden Research, Inc. ("Linden Lab") Viewer FLOSS License Exception v0.5
|
||||||
|
|
||||||
|
The Linden Lab Exception for Free/Libre and Open Source Software-only
|
||||||
|
Applications Using Linden Lab Viewer Software (the "FLOSS Exception").
|
||||||
|
|
||||||
|
Exception Intent
|
||||||
|
|
||||||
|
Linden Lab is releasing the source code for certain software that
|
||||||
|
enables users to view or otherwise access the Second Life virtual
|
||||||
|
world environment (the "Viewer Software"), under version 2 of the GNU
|
||||||
|
General Public License (the "GPL"). The creation or distribution of
|
||||||
|
works based on the Program (as defined under the GPL) of the Viewer
|
||||||
|
Software may require the use of certain Free/Libre and Open Source
|
||||||
|
Software ("FLOSS") works that are subject to license agreements not
|
||||||
|
compatible with re-licensing under the GPL. Because we want to allow
|
||||||
|
the Viewer Software to be distributed with these FLOSS works, this
|
||||||
|
FLOSS Exception following exception applies subject to the terms and
|
||||||
|
conditions below.
|
||||||
|
|
||||||
|
Legal Terms and Conditions
|
||||||
|
|
||||||
|
As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
the GPL:
|
||||||
|
|
||||||
|
You are free to distribute a work based on the Program that is formed
|
||||||
|
entirely from the Viewer Software (and any modifications thereof) and
|
||||||
|
one or more works that are independent and separate works not derived
|
||||||
|
from the Viewer Software, and are licensed under one or more of the
|
||||||
|
licenses listed below in section 1 (each, a "FLOSS Work") , as long
|
||||||
|
as:
|
||||||
|
|
||||||
|
A. You obey the GPL in all respects for the Viewer Software and any
|
||||||
|
work based on the Program, except for the FLOSS Works, for which
|
||||||
|
you must comply with B below,
|
||||||
|
|
||||||
|
B. all FLOSS Works,
|
||||||
|
|
||||||
|
i. are distributed subject to one of the FLOSS licenses
|
||||||
|
listed below, and
|
||||||
|
|
||||||
|
ii. the object code or executable form of the FLOSS Works are
|
||||||
|
accompanied by the complete corresponding
|
||||||
|
machine-readable source code for those FLOSS Works on the
|
||||||
|
same medium and under the same FLOSS license as the
|
||||||
|
corresponding object code or executable forms thereof,
|
||||||
|
and
|
||||||
|
|
||||||
|
C. any works that are aggregated with the Viewer Software or a work
|
||||||
|
based on the Program on a volume of a storage or distribution
|
||||||
|
medium in accordance with the GPL, and are not licensed under
|
||||||
|
the FLOSS licenses listed below, are independent and separate
|
||||||
|
works in themselves which are not derivatives of either the
|
||||||
|
Viewer Software, a work based on the Program or a FLOSS Work.
|
||||||
|
|
||||||
|
If the above conditions are not met, then the Viewer Software may only
|
||||||
|
be copied, modified, distributed or used under the terms and
|
||||||
|
conditions of the GPL or another valid licensing option from Linden
|
||||||
|
Lab.
|
||||||
|
|
||||||
|
1. FLOSS License List
|
||||||
|
|
||||||
|
License name Version(s)/Copyright Date
|
||||||
|
Academic Free License 2.0
|
||||||
|
Apache Software License 1.0/1.1/2.0
|
||||||
|
Apple Public Source License 2.0
|
||||||
|
Artistic license From Perl 5.8.0
|
||||||
|
BSD license "July 22 1999"
|
||||||
|
Common Development and
|
||||||
|
Distribution License (CDDL) 1.0
|
||||||
|
Common Public License 1.0
|
||||||
|
GNU Library or "Lesser" General
|
||||||
|
Public License (LGPL) 2.0/2.1
|
||||||
|
Jabber Open Source License 1.0
|
||||||
|
MIT License (As listed in file MIT-License.txt) -
|
||||||
|
Mozilla Public License (MPL) 1.0/1.1
|
||||||
|
Open Software License 2.0
|
||||||
|
OpenSSL license (with
|
||||||
|
original SSLeay license) "2003" ("1998")
|
||||||
|
PHP License 3.0
|
||||||
|
Python license (CNRI Python License) -
|
||||||
|
Python Software Foundation License 2.1.1
|
||||||
|
Sleepycat License "1999"
|
||||||
|
W3C License "2001"
|
||||||
|
X11 License "2001"
|
||||||
|
Zlib/libpng License -
|
||||||
|
Zope Public License 2.0
|
||||||
|
|
||||||
|
Due to the many variants of some of the above licenses, we require
|
||||||
|
that any variant of the above licenses be identical in substance to
|
||||||
|
the form approved by the Open Source Initiative and follow the 2003
|
||||||
|
version of the Free Software Foundation's Free Software Definition
|
||||||
|
(http://www.gnu.org/philosophy/free-sw.html) or version 1.9 of the
|
||||||
|
Open Source Definition by the Open Source Initiative
|
||||||
|
(http://www.opensource.org/docs/definition.php).
|
||||||
|
|
||||||
|
2. Definitions
|
||||||
|
|
||||||
|
Terms used, but not defined, herein shall have the meaning provided in
|
||||||
|
the GPL.
|
||||||
|
|
||||||
|
3. Applicability
|
||||||
|
|
||||||
|
This FLOSS Exception applies to all Viewer Software files that contain
|
||||||
|
a notice placed by Linden Lab saying that the Viewer Software may be
|
||||||
|
distributed under the terms of this FLOSS Exception. If you create or
|
||||||
|
distribute a work which is a work based on the Program for the Viewer
|
||||||
|
Software and any other work licensed under the GPL, then this FLOSS
|
||||||
|
Exception is not available for that work; thus, you must remove the
|
||||||
|
FLOSS Exception notice from that work and comply with the GPL in all
|
||||||
|
respects, including by retaining all GPL notices. You may choose to
|
||||||
|
redistribute a copy of the Viewer Software exclusively under the terms
|
||||||
|
of the GPL by removing the FLOSS Exception notice from that copy of
|
||||||
|
the Viewer Software, provided that the copy has never been modified by
|
||||||
|
you or any third party.
|
||||||
339
LICENSES/GPL-license.txt
Normal file
339
LICENSES/GPL-license.txt
Normal file
@@ -0,0 +1,339 @@
|
|||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License.
|
||||||
36
LICENSES/LLQTWEBKIT_LICENSE.txt
Normal file
36
LICENSES/LLQTWEBKIT_LICENSE.txt
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
Source code
|
||||||
|
========
|
||||||
|
The license for the source code in this distribution should be clearly
|
||||||
|
marked on each source file. Unless otherwise specified, the source
|
||||||
|
code in this distribution ("Source Code") is provided by Linden Lab to
|
||||||
|
you under the terms of the GNU General Public License, version 2.0
|
||||||
|
("GPL"), unless you have obtained a separate licensing agreement
|
||||||
|
("Other License"), formally executed by you and Linden Lab. Terms of
|
||||||
|
the GPL can be found in GPL-license.txt in this distribution, or
|
||||||
|
online at http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/gplv2
|
||||||
|
|
||||||
|
There are special exceptions to the terms and conditions of the GPL as
|
||||||
|
it is applied to this Source Code. View the full text of the exception
|
||||||
|
in the file FLOSS-exception.txt in this software distribution, or
|
||||||
|
online at http://secondlifegrid.net/technology-programs/license-virtual-world/viewerlicensing/flossexception
|
||||||
|
|
||||||
|
By copying, modifying or distributing this software, you acknowledge
|
||||||
|
that you have read and understood your obligations described above,
|
||||||
|
and agree to abide by those obligations.
|
||||||
|
|
||||||
|
ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||||
|
WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||||
|
COMPLETENESS OR PERFORMANCE.
|
||||||
|
|
||||||
|
Logos and trademarks
|
||||||
|
==============
|
||||||
|
|
||||||
|
"Second Life" and "Linden Lab" are registered trademarks of Linden
|
||||||
|
Research, Inc. Other trademarks include (but are not limited to): the
|
||||||
|
names Linden and Linden Research, as well as the Linden Lab Hexagon
|
||||||
|
Design and the Second Life Hand Design logos.
|
||||||
|
|
||||||
|
Use of logos and trademarks are subject to the Linden Lab trademark
|
||||||
|
policy, available at:
|
||||||
|
|
||||||
|
http://secondlife.com/corporate/trademark/
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
ELFIO.h - ELF reader and producer.
|
|
||||||
Copyright (C) 2001 Serge Lamikhov-Center <to_serge@users.sourceforge.net>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
The GNU Library GPL is available at http://www.gnu.org/copyleft/lesser.html
|
|
||||||
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
http://www.jclark.com/xml/copying.txt
|
|
||||||
|
|
||||||
Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included
|
|
||||||
in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
||||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
||||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
||||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
http://xmlsoft.org/
|
|
||||||
http://www.opensource.org/licenses/mit-license.html
|
|
||||||
|
|
||||||
Open Source Initiative OSI - The MIT License:Licensing
|
|
||||||
Tue, 2006-10-31 04:56 . nelson
|
|
||||||
|
|
||||||
The MIT License
|
|
||||||
|
|
||||||
Copyright (c) <year> <copyright holders>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,484 +0,0 @@
|
|||||||
|
|
||||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
|
||||||
Version 2, June 1991
|
|
||||||
|
|
||||||
|
|
||||||
Copyright (C) 1991 Free Software Foundation, Inc.
|
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
[This is the first released version of the library GPL. It is
|
|
||||||
numbered 2 because it goes with version 2 of the ordinary GPL.]
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
Licenses are intended to guarantee your freedom to share and change
|
|
||||||
free software--to make sure the software is free for all its users.
|
|
||||||
|
|
||||||
This license, the Library General Public License, applies to some
|
|
||||||
specially designated Free Software Foundation software, and to any
|
|
||||||
other libraries whose authors decide to use it. You can use it for
|
|
||||||
your libraries, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
this service if you wish), that you receive source code or can get it
|
|
||||||
if you want it, that you can change the software or use pieces of it
|
|
||||||
in new free programs; and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
anyone to deny you these rights or to ask you to surrender the rights.
|
|
||||||
These restrictions translate to certain responsibilities for you if
|
|
||||||
you distribute copies of the library, or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of the library, whether gratis
|
|
||||||
or for a fee, you must give the recipients all the rights that we gave
|
|
||||||
you. You must make sure that they, too, receive or can get the source
|
|
||||||
code. If you link a program with the library, you must provide
|
|
||||||
complete object files to the recipients so that they can relink them
|
|
||||||
with the library, after making changes to the library and recompiling
|
|
||||||
it. And you must show them these terms so they know their rights.
|
|
||||||
|
|
||||||
Our method of protecting your rights has two steps: (1) copyright
|
|
||||||
the library, and (2) offer you this license which gives you legal
|
|
||||||
permission to copy, distribute and/or modify the library.
|
|
||||||
|
|
||||||
Also, for each distributor's protection, we want to make certain
|
|
||||||
that everyone understands that there is no warranty for this free
|
|
||||||
library. If the library is modified by someone else and passed on, we
|
|
||||||
want its recipients to know that what they have is not the original
|
|
||||||
version, so that any problems introduced by others will not reflect on
|
|
||||||
the original authors' reputations.
|
|
||||||
|
|
||||||
Finally, any free program is threatened constantly by software
|
|
||||||
patents. We wish to avoid the danger that companies distributing free
|
|
||||||
software will individually obtain patent licenses, thus in effect
|
|
||||||
transforming the program into proprietary software. To prevent this,
|
|
||||||
we have made it clear that any patent must be licensed for everyone's
|
|
||||||
free use or not licensed at all.
|
|
||||||
|
|
||||||
Most GNU software, including some libraries, is covered by the ordinary
|
|
||||||
GNU General Public License, which was designed for utility programs. This
|
|
||||||
license, the GNU Library General Public License, applies to certain
|
|
||||||
designated libraries. This license is quite different from the ordinary
|
|
||||||
one; be sure to read it in full, and don't assume that anything in it is
|
|
||||||
the same as in the ordinary license.
|
|
||||||
|
|
||||||
The reason we have a separate public license for some libraries is that
|
|
||||||
they blur the distinction we usually make between modifying or adding to a
|
|
||||||
program and simply using it. Linking a program with a library, without
|
|
||||||
changing the library, is in some sense simply using the library, and is
|
|
||||||
analogous to running a utility program or application program. However, in
|
|
||||||
a textual and legal sense, the linked executable is a combined work, a
|
|
||||||
derivative of the original library, and the ordinary General Public License
|
|
||||||
treats it as such.
|
|
||||||
|
|
||||||
Because of this blurred distinction, using the ordinary General
|
|
||||||
Public License for libraries did not effectively promote software
|
|
||||||
sharing, because most developers did not use the libraries. We
|
|
||||||
concluded that weaker conditions might promote sharing better.
|
|
||||||
|
|
||||||
However, unrestricted linking of non-free programs would deprive the
|
|
||||||
users of those programs of all benefit from the free status of the
|
|
||||||
libraries themselves. This Library General Public License is intended to
|
|
||||||
permit developers of non-free programs to use free libraries, while
|
|
||||||
preserving your freedom as a user of such programs to change the free
|
|
||||||
libraries that are incorporated in them. (We have not seen how to achieve
|
|
||||||
this as regards changes in header files, but we have achieved it as regards
|
|
||||||
changes in the actual functions of the Library.) The hope is that this
|
|
||||||
will lead to faster development of free libraries.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow. Pay close attention to the difference between a
|
|
||||||
"work based on the library" and a "work that uses the library". The
|
|
||||||
former contains code derived from the library, while the latter only
|
|
||||||
works together with the library.
|
|
||||||
|
|
||||||
Note that it is possible for a library to be covered by the ordinary
|
|
||||||
General Public License rather than by this special one.
|
|
||||||
|
|
||||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License Agreement applies to any software library which
|
|
||||||
contains a notice placed by the copyright holder or other authorized
|
|
||||||
party saying it may be distributed under the terms of this Library
|
|
||||||
General Public License (also called "this License"). Each licensee is
|
|
||||||
addressed as "you".
|
|
||||||
|
|
||||||
A "library" means a collection of software functions and/or data
|
|
||||||
prepared so as to be conveniently linked with application programs
|
|
||||||
(which use some of those functions and data) to form executables.
|
|
||||||
|
|
||||||
The "Library", below, refers to any such software library or work
|
|
||||||
which has been distributed under these terms. A "work based on the
|
|
||||||
Library" means either the Library or any derivative work under
|
|
||||||
copyright law: that is to say, a work containing the Library or a
|
|
||||||
portion of it, either verbatim or with modifications and/or translated
|
|
||||||
straightforwardly into another language. (Hereinafter, translation is
|
|
||||||
included without limitation in the term "modification".)
|
|
||||||
|
|
||||||
"Source code" for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For a library, complete source code means
|
|
||||||
all the source code for all modules it contains, plus any associated
|
|
||||||
interface definition files, plus the scripts used to control compilation
|
|
||||||
and installation of the library.
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
|
||||||
covered by this License; they are outside its scope. The act of
|
|
||||||
running a program using the Library is not restricted, and output from
|
|
||||||
such a program is covered only if its contents constitute a work based
|
|
||||||
on the Library (independent of the use of the Library in a tool for
|
|
||||||
writing it). Whether that is true depends on what the Library does
|
|
||||||
and what the program that uses the Library does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Library's
|
|
||||||
complete source code as you receive it, in any medium, provided that
|
|
||||||
you conspicuously and appropriately publish on each copy an
|
|
||||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
|
||||||
all the notices that refer to this License and to the absence of any
|
|
||||||
warranty; and distribute a copy of this License along with the
|
|
||||||
Library.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy,
|
|
||||||
and you may at your option offer warranty protection in exchange for a
|
|
||||||
fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Library or any portion
|
|
||||||
of it, thus forming a work based on the Library, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The modified work must itself be a software library.
|
|
||||||
|
|
||||||
b) You must cause the files modified to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
c) You must cause the whole of the work to be licensed at no
|
|
||||||
charge to all third parties under the terms of this License.
|
|
||||||
|
|
||||||
d) If a facility in the modified Library refers to a function or a
|
|
||||||
table of data to be supplied by an application program that uses
|
|
||||||
the facility, other than as an argument passed when the facility
|
|
||||||
is invoked, then you must make a good faith effort to ensure that,
|
|
||||||
in the event an application does not supply such function or
|
|
||||||
table, the facility still operates, and performs whatever part of
|
|
||||||
its purpose remains meaningful.
|
|
||||||
|
|
||||||
(For example, a function in a library to compute square roots has
|
|
||||||
a purpose that is entirely well-defined independent of the
|
|
||||||
application. Therefore, Subsection 2d requires that any
|
|
||||||
application-supplied function or table used by this function must
|
|
||||||
be optional: if the application does not supply it, the square
|
|
||||||
root function must still compute square roots.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Library,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Library, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote
|
|
||||||
it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Library.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Library
|
|
||||||
with the Library (or with a work based on the Library) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
|
||||||
License instead of this License to a given copy of the Library. To do
|
|
||||||
this, you must alter all the notices that refer to this License, so
|
|
||||||
that they refer to the ordinary GNU General Public License, version 2,
|
|
||||||
instead of to this License. (If a newer version than version 2 of the
|
|
||||||
ordinary GNU General Public License has appeared, then you can specify
|
|
||||||
that version instead if you wish.) Do not make any other change in
|
|
||||||
these notices.
|
|
||||||
|
|
||||||
Once this change is made in a given copy, it is irreversible for
|
|
||||||
that copy, so the ordinary GNU General Public License applies to all
|
|
||||||
subsequent copies and derivative works made from that copy.
|
|
||||||
|
|
||||||
This option is useful when you wish to copy part of the code of
|
|
||||||
the Library into a program that is not a library.
|
|
||||||
|
|
||||||
4. You may copy and distribute the Library (or a portion or
|
|
||||||
derivative of it, under Section 2) in object code or executable form
|
|
||||||
under the terms of Sections 1 and 2 above provided that you accompany
|
|
||||||
it with the complete corresponding machine-readable source code, which
|
|
||||||
must be distributed under the terms of Sections 1 and 2 above on a
|
|
||||||
medium customarily used for software interchange.
|
|
||||||
|
|
||||||
If distribution of object code is made by offering access to copy
|
|
||||||
from a designated place, then offering equivalent access to copy the
|
|
||||||
source code from the same place satisfies the requirement to
|
|
||||||
distribute the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
5. A program that contains no derivative of any portion of the
|
|
||||||
Library, but is designed to work with the Library by being compiled or
|
|
||||||
linked with it, is called a "work that uses the Library". Such a
|
|
||||||
work, in isolation, is not a derivative work of the Library, and
|
|
||||||
therefore falls outside the scope of this License.
|
|
||||||
|
|
||||||
However, linking a "work that uses the Library" with the Library
|
|
||||||
creates an executable that is a derivative of the Library (because it
|
|
||||||
contains portions of the Library), rather than a "work that uses the
|
|
||||||
library". The executable is therefore covered by this License.
|
|
||||||
Section 6 states terms for distribution of such executables.
|
|
||||||
|
|
||||||
When a "work that uses the Library" uses material from a header file
|
|
||||||
that is part of the Library, the object code for the work may be a
|
|
||||||
derivative work of the Library even though the source code is not.
|
|
||||||
Whether this is true is especially significant if the work can be
|
|
||||||
linked without the Library, or if the work is itself a library. The
|
|
||||||
threshold for this to be true is not precisely defined by law.
|
|
||||||
|
|
||||||
If such an object file uses only numerical parameters, data
|
|
||||||
structure layouts and accessors, and small macros and small inline
|
|
||||||
functions (ten lines or less in length), then the use of the object
|
|
||||||
file is unrestricted, regardless of whether it is legally a derivative
|
|
||||||
work. (Executables containing this object code plus portions of the
|
|
||||||
Library will still fall under Section 6.)
|
|
||||||
|
|
||||||
Otherwise, if the work is a derivative of the Library, you may
|
|
||||||
distribute the object code for the work under the terms of Section 6.
|
|
||||||
Any executables containing that work also fall under Section 6,
|
|
||||||
whether or not they are linked directly with the Library itself.
|
|
||||||
|
|
||||||
6. As an exception to the Sections above, you may also compile or
|
|
||||||
link a "work that uses the Library" with the Library to produce a
|
|
||||||
work containing portions of the Library, and distribute that work
|
|
||||||
under terms of your choice, provided that the terms permit
|
|
||||||
modification of the work for the customer's own use and reverse
|
|
||||||
engineering for debugging such modifications.
|
|
||||||
|
|
||||||
You must give prominent notice with each copy of the work that the
|
|
||||||
Library is used in it and that the Library and its use are covered by
|
|
||||||
this License. You must supply a copy of this License. If the work
|
|
||||||
during execution displays copyright notices, you must include the
|
|
||||||
copyright notice for the Library among them, as well as a reference
|
|
||||||
directing the user to the copy of this License. Also, you must do one
|
|
||||||
of these things:
|
|
||||||
|
|
||||||
a) Accompany the work with the complete corresponding
|
|
||||||
machine-readable source code for the Library including whatever
|
|
||||||
changes were used in the work (which must be distributed under
|
|
||||||
Sections 1 and 2 above); and, if the work is an executable linked
|
|
||||||
with the Library, with the complete machine-readable "work that
|
|
||||||
uses the Library", as object code and/or source code, so that the
|
|
||||||
user can modify the Library and then relink to produce a modified
|
|
||||||
executable containing the modified Library. (It is understood
|
|
||||||
that the user who changes the contents of definitions files in the
|
|
||||||
Library will not necessarily be able to recompile the application
|
|
||||||
to use the modified definitions.)
|
|
||||||
|
|
||||||
b) Accompany the work with a written offer, valid for at
|
|
||||||
least three years, to give the same user the materials
|
|
||||||
specified in Subsection 6a, above, for a charge no more
|
|
||||||
than the cost of performing this distribution.
|
|
||||||
|
|
||||||
c) If distribution of the work is made by offering access to copy
|
|
||||||
from a designated place, offer equivalent access to copy the above
|
|
||||||
specified materials from the same place.
|
|
||||||
|
|
||||||
d) Verify that the user has already received a copy of these
|
|
||||||
materials or that you have already sent this user a copy.
|
|
||||||
|
|
||||||
For an executable, the required form of the "work that uses the
|
|
||||||
Library" must include any data and utility programs needed for
|
|
||||||
reproducing the executable from it. However, as a special exception,
|
|
||||||
the source code distributed need not include anything that is normally
|
|
||||||
distributed (in either source or binary form) with the major
|
|
||||||
components (compiler, kernel, and so on) of the operating system on
|
|
||||||
which the executable runs, unless that component itself accompanies
|
|
||||||
the executable.
|
|
||||||
|
|
||||||
It may happen that this requirement contradicts the license
|
|
||||||
restrictions of other proprietary libraries that do not normally
|
|
||||||
accompany the operating system. Such a contradiction means you cannot
|
|
||||||
use both them and the Library together in an executable that you
|
|
||||||
distribute.
|
|
||||||
|
|
||||||
7. You may place library facilities that are a work based on the
|
|
||||||
Library side-by-side in a single library together with other library
|
|
||||||
facilities not covered by this License, and distribute such a combined
|
|
||||||
library, provided that the separate distribution of the work based on
|
|
||||||
the Library and of the other library facilities is otherwise
|
|
||||||
permitted, and provided that you do these two things:
|
|
||||||
|
|
||||||
a) Accompany the combined library with a copy of the same work
|
|
||||||
based on the Library, uncombined with any other library
|
|
||||||
facilities. This must be distributed under the terms of the
|
|
||||||
Sections above.
|
|
||||||
|
|
||||||
b) Give prominent notice with the combined library of the fact
|
|
||||||
that part of it is a work based on the Library, and explaining
|
|
||||||
where to find the accompanying uncombined form of the same work.
|
|
||||||
|
|
||||||
8. You may not copy, modify, sublicense, link with, or distribute
|
|
||||||
the Library except as expressly provided under this License. Any
|
|
||||||
attempt otherwise to copy, modify, sublicense, link with, or
|
|
||||||
distribute the Library is void, and will automatically terminate your
|
|
||||||
rights under this License. However, parties who have received copies,
|
|
||||||
or rights, from you under this License will not have their licenses
|
|
||||||
terminated so long as such parties remain in full compliance.
|
|
||||||
|
|
||||||
9. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Library or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Library (or any work based on the
|
|
||||||
Library), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Library or works based on it.
|
|
||||||
|
|
||||||
10. Each time you redistribute the Library (or any work based on the
|
|
||||||
Library), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute, link with or modify the Library
|
|
||||||
subject to these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties to
|
|
||||||
this License.
|
|
||||||
|
|
||||||
11. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Library at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Library by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Library.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under any
|
|
||||||
particular circumstance, the balance of the section is intended to apply,
|
|
||||||
and the section as a whole is intended to apply in other circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
12. If the distribution and/or use of the Library is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Library under this License may add
|
|
||||||
an explicit geographical distribution limitation excluding those countries,
|
|
||||||
so that distribution is permitted only in or among countries not thus
|
|
||||||
excluded. In such case, this License incorporates the limitation as if
|
|
||||||
written in the body of this License.
|
|
||||||
|
|
||||||
13. The Free Software Foundation may publish revised and/or new
|
|
||||||
versions of the Library General Public License from time to time.
|
|
||||||
Such new versions will be similar in spirit to the present version,
|
|
||||||
but may differ in detail to address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Library
|
|
||||||
specifies a version number of this License which applies to it and
|
|
||||||
"any later version", you have the option of following the terms and
|
|
||||||
conditions either of that version or of any later version published by
|
|
||||||
the Free Software Foundation. If the Library does not specify a
|
|
||||||
license version number, you may choose any version ever published by
|
|
||||||
the Free Software Foundation.
|
|
||||||
|
|
||||||
14. If you wish to incorporate parts of the Library into other free
|
|
||||||
programs whose distribution conditions are incompatible with these,
|
|
||||||
write to the author to ask for permission. For software which is
|
|
||||||
copyrighted by the Free Software Foundation, write to the Free
|
|
||||||
Software Foundation; we sometimes make exceptions for this. Our
|
|
||||||
decision will be guided by the two goals of preserving the free status
|
|
||||||
of all derivatives of our free software and of promoting the sharing
|
|
||||||
and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
|
||||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
|
||||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
|
||||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
|
||||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
|
||||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
|
||||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
|
||||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
|
||||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
|
||||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
|
||||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
|
||||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
|
||||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
|
||||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
|
||||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|
||||||
DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
Appendix: How to Apply These Terms to Your New Libraries
|
|
||||||
|
|
||||||
If you develop a new library, and you want it to be of the greatest
|
|
||||||
possible use to the public, we recommend making it free software that
|
|
||||||
everyone can redistribute and change. You can do so by permitting
|
|
||||||
redistribution under these terms (or, alternatively, under the terms of the
|
|
||||||
ordinary General Public License).
|
|
||||||
|
|
||||||
To apply these terms, attach the following notices to the library. It is
|
|
||||||
safest to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least the
|
|
||||||
"copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the library's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with this library; if not, write to the Free
|
|
||||||
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
|
||||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1990
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
That's all there is to it!
|
|
||||||
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
The pristine version of Qt corresponding to this build is available at:
|
|
||||||
http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/qt-all-opensource-src-4.5.2.tar.bz2
|
|
||||||
|
|
||||||
The patches we applied to the above package to get this build are available at:
|
|
||||||
http://hg.secondlife.com/llqtwebkit/src/tip/qt_patches/
|
|
||||||
27
README
27
README
@@ -9,15 +9,30 @@
|
|||||||
Sin-gu-la-ri-ty (noun) - a distinctive feature, a uniqueness; a point at which
|
Sin-gu-la-ri-ty (noun) - a distinctive feature, a uniqueness; a point at which
|
||||||
continuity breaks up; a point in history at which machine becomes smarter than
|
continuity breaks up; a point in history at which machine becomes smarter than
|
||||||
humanity and/or fuses with it indivisively; or simply a cool sounding word with
|
humanity and/or fuses with it indivisively; or simply a cool sounding word with
|
||||||
my initials in it :)
|
the initials S.G. in it :)
|
||||||
|
|
||||||
Singularity Viewer is a Second Life protocol compatible client application. It
|
Singularity Viewer is a SecondLife(tm) protocol compatible client application.
|
||||||
can be used to access Second LIfe service as well as a number of other such as
|
It can be used to access SecondLife services as well as a number of others such
|
||||||
those based upon OpenSim plattform. It is directly based upon source code of
|
as those based upon the OpenSim platform.
|
||||||
Ascent Viewer by Balseraph Software Group, which is in turn based upon source
|
|
||||||
code released by Linden Lab, with contributions from various sources.
|
Singulariy is maintained by a small group of volunteers who can be contacted
|
||||||
|
both, in-world (SingularityViewer group) as well on IRC (#SingularityViewer
|
||||||
|
@ FreeNode). Bug requests and features requests can be submitted through our
|
||||||
|
Issue Tracker (http://code.google.com/p/singularity-viewer/issues/list or from
|
||||||
|
the viewer menu: Help --> Bug Reporting --> Singularity Issue Tracker...)
|
||||||
|
|
||||||
|
|
||||||
As this Readme grows out of date, please refer to
|
As this Readme grows out of date, please refer to
|
||||||
|
|
||||||
http://www.singularityviewer.org/about
|
http://www.singularityviewer.org/about
|
||||||
|
|
||||||
|
|
||||||
|
00000000011111111112222222222333333333344444444445555555555666666666677777777778
|
||||||
|
12345678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||||
|
|
||||||
|
History
|
||||||
|
|
||||||
|
The Singularity viewer was started by Siana Gearz in November 2010 by forking it
|
||||||
|
from the Ascent Viewer, by Balseraph Software Group, which in turn was based upon
|
||||||
|
source code modified from the snowglobe source code released by Linden Lab.
|
||||||
|
|
||||||
|
|||||||
@@ -248,6 +248,7 @@ Celierra Darling
|
|||||||
VWR-6975
|
VWR-6975
|
||||||
Cron Stardust
|
Cron Stardust
|
||||||
VWR-10579
|
VWR-10579
|
||||||
|
STORM-1919
|
||||||
Cypren Christenson
|
Cypren Christenson
|
||||||
SNOW-129
|
SNOW-129
|
||||||
SNOW-140
|
SNOW-140
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
<key>OpenCircuit</key>
|
<key>OpenCircuit</key>
|
||||||
<map>
|
<map>
|
||||||
<key>flavor</key>
|
<key>flavor</key>
|
||||||
<string>template</string>
|
<string>llsd</string>
|
||||||
<key>trusted-sender</key>
|
<key>trusted-sender</key>
|
||||||
<boolean>false</boolean>
|
<boolean>false</boolean>
|
||||||
</map>
|
</map>
|
||||||
@@ -370,6 +370,22 @@
|
|||||||
</map>
|
</map>
|
||||||
|
|
||||||
<!-- Server to client -->
|
<!-- Server to client -->
|
||||||
|
<key>DisplayNameUpdate</key>
|
||||||
|
<map>
|
||||||
|
<key>flavor</key>
|
||||||
|
<string>llsd</string>
|
||||||
|
<key>trusted-sender</key>
|
||||||
|
<boolean>true</boolean>
|
||||||
|
</map>
|
||||||
|
|
||||||
|
<key>WindLightRefresh</key>
|
||||||
|
<map>
|
||||||
|
<key>flavor</key>
|
||||||
|
<string>llsd</string>
|
||||||
|
<key>trusted-sender</key>
|
||||||
|
<boolean>true</boolean>
|
||||||
|
</map>
|
||||||
|
|
||||||
<key>ParcelVoiceInfo</key>
|
<key>ParcelVoiceInfo</key>
|
||||||
<map>
|
<map>
|
||||||
<key>flavor</key>
|
<key>flavor</key>
|
||||||
@@ -378,7 +394,6 @@
|
|||||||
<boolean>true</boolean>
|
<boolean>true</boolean>
|
||||||
</map>
|
</map>
|
||||||
|
|
||||||
|
|
||||||
<key>ParcelNavigateMedia</key>
|
<key>ParcelNavigateMedia</key>
|
||||||
<map>
|
<map>
|
||||||
<key>flavor</key>
|
<key>flavor</key>
|
||||||
@@ -419,6 +434,22 @@
|
|||||||
<boolean>true</boolean>
|
<boolean>true</boolean>
|
||||||
</map>
|
</map>
|
||||||
|
|
||||||
|
<key>SetDisplayNameReply</key>
|
||||||
|
<map>
|
||||||
|
<key>flavor</key>
|
||||||
|
<string>llsd</string>
|
||||||
|
<key>trusted-sender</key>
|
||||||
|
<boolean>true</boolean>
|
||||||
|
</map>
|
||||||
|
|
||||||
|
<key>SimConsoleResponse</key>
|
||||||
|
<map>
|
||||||
|
<key>flavor</key>
|
||||||
|
<string>llsd</string>
|
||||||
|
<key>trusted-sender</key>
|
||||||
|
<boolean>true</boolean>
|
||||||
|
</map>
|
||||||
|
|
||||||
<key>DirLandReply</key>
|
<key>DirLandReply</key>
|
||||||
<map>
|
<map>
|
||||||
<key>flavor</key>
|
<key>flavor</key>
|
||||||
@@ -515,8 +546,24 @@
|
|||||||
<key>trusted-sender</key>
|
<key>trusted-sender</key>
|
||||||
<boolean>true</boolean>
|
<boolean>true</boolean>
|
||||||
</map>
|
</map>
|
||||||
|
|
||||||
<!-- UDPDeprecated Messages -->
|
<key>NavMeshStatusUpdate</key>
|
||||||
|
<map>
|
||||||
|
<key>flavor</key>
|
||||||
|
<string>llsd</string>
|
||||||
|
<key>trusted-sender</key>
|
||||||
|
<boolean>true</boolean>
|
||||||
|
</map>
|
||||||
|
|
||||||
|
<key>AgentStateUpdate</key>
|
||||||
|
<map>
|
||||||
|
<key>flavor</key>
|
||||||
|
<string>llsd</string>
|
||||||
|
<key>trusted-sender</key>
|
||||||
|
<boolean>true</boolean>
|
||||||
|
</map>
|
||||||
|
|
||||||
|
<!-- UDPDeprecated Messages -->
|
||||||
<key>ScriptRunningReply</key>
|
<key>ScriptRunningReply</key>
|
||||||
<map>
|
<map>
|
||||||
<key>flavor</key>
|
<key>flavor</key>
|
||||||
@@ -565,22 +612,13 @@
|
|||||||
<boolean>false</boolean>
|
<boolean>false</boolean>
|
||||||
</map>
|
</map>
|
||||||
|
|
||||||
<!-- Server to client -->
|
<key>ObjectPhysicsProperties</key>
|
||||||
<key>DisplayNameUpdate</key>
|
<map>
|
||||||
<map>
|
<key>flavor</key>
|
||||||
<key>flavor</key>
|
<string>llsd</string>
|
||||||
<string>llsd</string>
|
<key>trusted-sender</key>
|
||||||
<key>trusted-sender</key>
|
<boolean>true</boolean>
|
||||||
<boolean>true</boolean>
|
</map>
|
||||||
</map>
|
|
||||||
|
|
||||||
<key>SetDisplayNameReply</key>
|
|
||||||
<map>
|
|
||||||
<key>flavor</key>
|
|
||||||
<string>llsd</string>
|
|
||||||
<key>trusted-sender</key>
|
|
||||||
<boolean>true</boolean>
|
|
||||||
</map>
|
|
||||||
|
|
||||||
</map>
|
</map>
|
||||||
<key>capBans</key>
|
<key>capBans</key>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ cmake_minimum_required(VERSION 2.6.2 FATAL_ERROR)
|
|||||||
cmake_policy(SET CMP0003 OLD)
|
cmake_policy(SET CMP0003 OLD)
|
||||||
|
|
||||||
set(ROOT_PROJECT_NAME "Singularity" CACHE STRING
|
set(ROOT_PROJECT_NAME "Singularity" CACHE STRING
|
||||||
"The root project/makefile/solution name. Defaults to SecondLife.")
|
"The root project/makefile/solution name. Defaults to Singularity.")
|
||||||
project(${ROOT_PROJECT_NAME})
|
project(${ROOT_PROJECT_NAME})
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
||||||
@@ -33,8 +33,8 @@ include(UnixInstall)
|
|||||||
set (DISABLE_FATAL_WARNINGS TRUE)
|
set (DISABLE_FATAL_WARNINGS TRUE)
|
||||||
|
|
||||||
if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
||||||
set(CMAKE_BUILD_TYPE ReleaseSSE2 CACHE STRING
|
set(CMAKE_BUILD_TYPE Release CACHE STRING
|
||||||
"Build type. One of: Debug Release ReleaseSSE2 RelWithDebInfo" FORCE)
|
"Build type. One of: Debug Release RelWithDebInfo" FORCE)
|
||||||
endif (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
endif (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
||||||
|
|
||||||
# Create a 'prepare' target in which to perform setup actions. This
|
# Create a 'prepare' target in which to perform setup actions. This
|
||||||
@@ -46,7 +46,7 @@ endif(NOT STANDALONE)
|
|||||||
add_custom_target(prepare DEPENDS ${prepare_depends})
|
add_custom_target(prepare DEPENDS ${prepare_depends})
|
||||||
|
|
||||||
add_subdirectory(cmake)
|
add_subdirectory(cmake)
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}cwdebug)
|
add_subdirectory(${LIBS_OPEN_PREFIX}aistatemachine)
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}llaudio)
|
add_subdirectory(${LIBS_OPEN_PREFIX}llaudio)
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}llcharacter)
|
add_subdirectory(${LIBS_OPEN_PREFIX}llcharacter)
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}llcommon)
|
add_subdirectory(${LIBS_OPEN_PREFIX}llcommon)
|
||||||
@@ -62,11 +62,15 @@ add_subdirectory(${LIBS_OPEN_PREFIX}llvfs)
|
|||||||
add_subdirectory(${LIBS_OPEN_PREFIX}llwindow)
|
add_subdirectory(${LIBS_OPEN_PREFIX}llwindow)
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}llxml)
|
add_subdirectory(${LIBS_OPEN_PREFIX}llxml)
|
||||||
|
|
||||||
|
if(STANDALONE)
|
||||||
|
add_subdirectory(${LIBS_OPEN_PREFIX}llqtwebkit)
|
||||||
|
endif(STANDALONE)
|
||||||
|
|
||||||
if (EXISTS ${LIBS_CLOSED_DIR}llkdu AND NOT STANDALONE)
|
if (EXISTS ${LIBS_CLOSED_DIR}llkdu AND NOT STANDALONE)
|
||||||
add_subdirectory(${LIBS_CLOSED_PREFIX}llkdu)
|
add_subdirectory(${LIBS_CLOSED_PREFIX}llkdu)
|
||||||
endif (EXISTS ${LIBS_CLOSED_DIR}llkdu AND NOT STANDALONE)
|
endif (EXISTS ${LIBS_CLOSED_DIR}llkdu AND NOT STANDALONE)
|
||||||
|
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}lscript)
|
#add_subdirectory(${LIBS_OPEN_PREFIX}lscript)
|
||||||
|
|
||||||
if (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts)
|
if (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts)
|
||||||
add_subdirectory(${LIBS_CLOSED_PREFIX}copy_win_scripts)
|
add_subdirectory(${LIBS_CLOSED_PREFIX}copy_win_scripts)
|
||||||
@@ -77,7 +81,6 @@ if (VIEWER)
|
|||||||
add_subdirectory(${LIBS_OPEN_PREFIX}llcrashlogger)
|
add_subdirectory(${LIBS_OPEN_PREFIX}llcrashlogger)
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}llplugin)
|
add_subdirectory(${LIBS_OPEN_PREFIX}llplugin)
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}llui)
|
add_subdirectory(${LIBS_OPEN_PREFIX}llui)
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}llxuixml)
|
|
||||||
|
|
||||||
# viewer plugins directory
|
# viewer plugins directory
|
||||||
add_subdirectory(${LIBS_OPEN_PREFIX}plugins)
|
add_subdirectory(${LIBS_OPEN_PREFIX}plugins)
|
||||||
|
|||||||
39
indra/aistatemachine/CMakeLists.txt
Normal file
39
indra/aistatemachine/CMakeLists.txt
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# -*- cmake -*-
|
||||||
|
|
||||||
|
project(aistatemachine)
|
||||||
|
|
||||||
|
include(00-Common)
|
||||||
|
include(LLCommon)
|
||||||
|
include(LLMessage)
|
||||||
|
include(LLMath)
|
||||||
|
include(LLXML)
|
||||||
|
|
||||||
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
${LLCOMMON_INCLUDE_DIRS}
|
||||||
|
${LLMESSAGE_INCLUDE_DIRS}
|
||||||
|
${LLMATH_INCLUDE_DIRS}
|
||||||
|
${LLXML_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
set(aistatemachine_SOURCE_FILES
|
||||||
|
aistatemachine.cpp
|
||||||
|
aitimer.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set(aistatemachine_HEADER_FILES
|
||||||
|
CMakeLists.txt
|
||||||
|
|
||||||
|
aistatemachine.h
|
||||||
|
aitimer.h
|
||||||
|
)
|
||||||
|
|
||||||
|
set_source_files_properties(${aistatemachine_HEADER_FILES}
|
||||||
|
PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||||
|
|
||||||
|
list(APPEND aistatemachine_SOURCE_FILES ${aistatemachine_HEADER_FILES})
|
||||||
|
|
||||||
|
add_library (aistatemachine ${aistatemachine_SOURCE_FILES})
|
||||||
|
add_dependencies(aistatemachine prepare)
|
||||||
|
|
||||||
628
indra/aistatemachine/aistatemachine.cpp
Normal file
628
indra/aistatemachine/aistatemachine.cpp
Normal file
@@ -0,0 +1,628 @@
|
|||||||
|
/**
|
||||||
|
* @file aistatemachine.cpp
|
||||||
|
* @brief Implementation of AIStateMachine
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Aleric Inglewood.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* There are special exceptions to the terms and conditions of the GPL as
|
||||||
|
* it is applied to this Source Code. View the full text of the exception
|
||||||
|
* in the file doc/FLOSS-exception.txt in this software distribution.
|
||||||
|
*
|
||||||
|
* CHANGELOG
|
||||||
|
* and additional copyright holders.
|
||||||
|
*
|
||||||
|
* 01/03/2010
|
||||||
|
* Initial version, written by Aleric Inglewood @ SL
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "linden_common.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include "llcontrol.h"
|
||||||
|
#include "llfasttimer.h"
|
||||||
|
#include "aithreadsafe.h"
|
||||||
|
#include "aistatemachine.h"
|
||||||
|
|
||||||
|
// Local variables.
|
||||||
|
namespace {
|
||||||
|
struct QueueElementComp;
|
||||||
|
|
||||||
|
class QueueElement {
|
||||||
|
private:
|
||||||
|
AIStateMachine* mStateMachine;
|
||||||
|
U64 mRuntime;
|
||||||
|
|
||||||
|
public:
|
||||||
|
QueueElement(AIStateMachine* statemachine) : mStateMachine(statemachine), mRuntime(0) { }
|
||||||
|
friend bool operator==(QueueElement const& e1, QueueElement const& e2) { return e1.mStateMachine == e2.mStateMachine; }
|
||||||
|
friend struct QueueElementComp;
|
||||||
|
|
||||||
|
AIStateMachine& statemachine(void) const { return *mStateMachine; }
|
||||||
|
void add(U64 count) { mRuntime += count; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct QueueElementComp {
|
||||||
|
bool operator()(QueueElement const& e1, QueueElement const& e2) const { return e1.mRuntime < e2.mRuntime; }
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::vector<QueueElement> active_statemachines_type;
|
||||||
|
active_statemachines_type active_statemachines;
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
U64 AIStateMachine::sMaxCount;
|
||||||
|
AIThreadSafeDC<AIStateMachine::csme_type> AIStateMachine::sContinuedStateMachinesAndMainloopEnabled;
|
||||||
|
|
||||||
|
// static
|
||||||
|
void AIStateMachine::setMaxCount(F32 StateMachineMaxTime)
|
||||||
|
{
|
||||||
|
llassert(is_main_thread());
|
||||||
|
Dout(dc::statemachine, "(Re)calculating AIStateMachine::sMaxCount");
|
||||||
|
sMaxCount = calc_clock_frequency() * StateMachineMaxTime / 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Public methods
|
||||||
|
//
|
||||||
|
|
||||||
|
void AIStateMachine::run(AIStateMachine* parent, state_type new_parent_state, bool abort_parent, bool on_abort_signal_parent)
|
||||||
|
{
|
||||||
|
DoutEntering(dc::statemachine, "AIStateMachine::run(" << (void*)parent << ", " << (parent ? parent->state_str(new_parent_state) : "NA") << ", " << abort_parent << ") [" << (void*)this << "]");
|
||||||
|
// Must be the first time we're being run, or we must be called from a callback function.
|
||||||
|
llassert(!mParent || mState == bs_callback);
|
||||||
|
llassert(!mCallback || mState == bs_callback);
|
||||||
|
// Can only be run when in this state.
|
||||||
|
llassert(mState == bs_initialize || mState == bs_callback);
|
||||||
|
|
||||||
|
// Allow NULL to be passed as parent to signal that we want to reuse the old one.
|
||||||
|
if (parent)
|
||||||
|
{
|
||||||
|
mParent = parent;
|
||||||
|
// In that case remove any old callback!
|
||||||
|
if (mCallback)
|
||||||
|
{
|
||||||
|
delete mCallback;
|
||||||
|
mCallback = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
mNewParentState = new_parent_state;
|
||||||
|
mAbortParent = abort_parent;
|
||||||
|
mOnAbortSignalParent = on_abort_signal_parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If abort_parent is requested then a parent must be provided.
|
||||||
|
llassert(!abort_parent || mParent);
|
||||||
|
// If a parent is provided, it must be running.
|
||||||
|
llassert(!mParent || mParent->mState == bs_run);
|
||||||
|
|
||||||
|
// Mark that run() has been called, in case we're being called from a callback function.
|
||||||
|
mState = bs_initialize;
|
||||||
|
|
||||||
|
// Set mIdle to false and add statemachine to continued_statemachines.
|
||||||
|
mSetStateLock.lock();
|
||||||
|
locked_cont();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AIStateMachine::run(callback_type::signal_type::slot_type const& slot)
|
||||||
|
{
|
||||||
|
DoutEntering(dc::statemachine, "AIStateMachine::run(<slot>) [" << (void*)this << "]");
|
||||||
|
// Must be the first time we're being run, or we must be called from a callback function.
|
||||||
|
llassert(!mParent || mState == bs_callback);
|
||||||
|
llassert(!mCallback || mState == bs_callback);
|
||||||
|
// Can only be run when in this state.
|
||||||
|
llassert(mState == bs_initialize || mState == bs_callback);
|
||||||
|
|
||||||
|
// Clean up any old callbacks.
|
||||||
|
mParent = NULL;
|
||||||
|
if (mCallback)
|
||||||
|
{
|
||||||
|
delete mCallback;
|
||||||
|
mCallback = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
mCallback = new callback_type(slot);
|
||||||
|
|
||||||
|
// Mark that run() has been called, in case we're being called from a callback function.
|
||||||
|
mState = bs_initialize;
|
||||||
|
|
||||||
|
// Set mIdle to false and add statemachine to continued_statemachines.
|
||||||
|
mSetStateLock.lock();
|
||||||
|
locked_cont();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AIStateMachine::idle(void)
|
||||||
|
{
|
||||||
|
DoutEntering(dc::statemachine, "AIStateMachine::idle() [" << (void*)this << "]");
|
||||||
|
llassert(is_main_thread());
|
||||||
|
llassert(!mIdle);
|
||||||
|
mIdle = true;
|
||||||
|
mSleep = 0;
|
||||||
|
#ifdef SHOW_ASSERT
|
||||||
|
mCalledThreadUnsafeIdle = true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void AIStateMachine::idle(state_type current_run_state)
|
||||||
|
{
|
||||||
|
DoutEntering(dc::statemachine, "AIStateMachine::idle(" << state_str(current_run_state) << ") [" << (void*)this << "]");
|
||||||
|
llassert(is_main_thread());
|
||||||
|
llassert(!mIdle);
|
||||||
|
mSetStateLock.lock();
|
||||||
|
// Only go idle if the run state is (still) what we expect it to be.
|
||||||
|
// Otherwise assume that another thread called set_state() and continue running.
|
||||||
|
if (current_run_state == mRunState)
|
||||||
|
{
|
||||||
|
mIdle = true;
|
||||||
|
mSleep = 0;
|
||||||
|
}
|
||||||
|
mSetStateLock.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
// About thread safeness:
|
||||||
|
//
|
||||||
|
// The main thread initializes a statemachine and calls run, so a statemachine
|
||||||
|
// runs in the main thread. However, it is allowed that a state calls idle()
|
||||||
|
// and then allows one or more other threads to call cont() upon some
|
||||||
|
// event (only once, of course, as idle() has to be called before cont()
|
||||||
|
// can be called again-- and a non-main thread is not allowed to call idle()).
|
||||||
|
// Instead of cont() one may also call set_state().
|
||||||
|
// Of course, this may give rise to a race condition; if that happens then
|
||||||
|
// the thread that calls cont() (set_state()) first is serviced, and the other
|
||||||
|
// thread(s) are ignored, as if they never called cont().
|
||||||
|
void AIStateMachine::locked_cont(void)
|
||||||
|
{
|
||||||
|
DoutEntering(dc::statemachine, "AIStateMachine::locked_cont() [" << (void*)this << "]");
|
||||||
|
llassert(mIdle);
|
||||||
|
// Atomic test mActive and change mIdle.
|
||||||
|
mIdleActive.lock();
|
||||||
|
#ifdef SHOW_ASSERT
|
||||||
|
mContThread.reset();
|
||||||
|
#endif
|
||||||
|
mIdle = false;
|
||||||
|
bool not_active = mActive == as_idle;
|
||||||
|
mIdleActive.unlock();
|
||||||
|
// mActive is only changed in AIStateMachine::mainloop, by the main-thread, and
|
||||||
|
// here, possibly by any thread. However, after setting mIdle to false above, it
|
||||||
|
// is impossible for any thread to come here, until after the main-thread called
|
||||||
|
// idle(). So, if this is the main thread then that certainly isn't going to
|
||||||
|
// happen until we left this function, while if this is another thread and the
|
||||||
|
// state machine is already running in the main thread then not_active is false
|
||||||
|
// and we're already at the end of this function.
|
||||||
|
// If not_active is true then main-thread is not running this statemachine.
|
||||||
|
// It might call cont() (or set_state()) but never locked_cont(), and will never
|
||||||
|
// start actually running until we are done here and release the lock on
|
||||||
|
// sContinuedStateMachinesAndMainloopEnabled again. It is therefore safe
|
||||||
|
// to release mSetStateLock here, with as advantage that if we're not the main-
|
||||||
|
// thread and not_active is true, then the main-thread won't block when it has
|
||||||
|
// a timer running that times out and calls set_state().
|
||||||
|
mSetStateLock.unlock();
|
||||||
|
if (not_active)
|
||||||
|
{
|
||||||
|
AIWriteAccess<csme_type> csme_w(sContinuedStateMachinesAndMainloopEnabled);
|
||||||
|
// See above: it is not possible that mActive was changed since not_active
|
||||||
|
// was set to true above.
|
||||||
|
llassert_always(mActive == as_idle);
|
||||||
|
Dout(dc::statemachine, "Adding " << (void*)this << " to continued_statemachines");
|
||||||
|
csme_w->continued_statemachines.push_back(this);
|
||||||
|
if (!csme_w->mainloop_enabled)
|
||||||
|
{
|
||||||
|
Dout(dc::statemachine, "Activating AIStateMachine::mainloop.");
|
||||||
|
csme_w->mainloop_enabled = true;
|
||||||
|
}
|
||||||
|
mActive = as_queued;
|
||||||
|
llassert_always(!mIdle); // It should never happen that the main thread calls idle(), while another thread calls cont() concurrently.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AIStateMachine::set_state(state_type state)
|
||||||
|
{
|
||||||
|
DoutEntering(dc::statemachine, "AIStateMachine::set_state(" << state_str(state) << ") [" << (void*)this << "]");
|
||||||
|
|
||||||
|
// Stop race condition of multiple threads calling cont() or set_state() here.
|
||||||
|
mSetStateLock.lock();
|
||||||
|
|
||||||
|
// Do not call set_state() unless running.
|
||||||
|
llassert(mState == bs_run || !is_main_thread());
|
||||||
|
|
||||||
|
// If this function is called from another thread than the main thread, then we have to ignore
|
||||||
|
// it if we're not idle and the state is less than the current state. The main thread must
|
||||||
|
// be able to change the state to anything (also smaller values). Note that that only can work
|
||||||
|
// if the main thread itself at all times cancels thread callbacks that call set_state()
|
||||||
|
// before calling idle() again!
|
||||||
|
//
|
||||||
|
// Thus: main thead calls idle(), and tells one or more threads to do callbacks on events,
|
||||||
|
// which (might) call set_state(). If the main thread calls set_state first (currently only
|
||||||
|
// possible as a result of the use of a timer) it will set mIdle to false (here) then cancel
|
||||||
|
// the call backs from the other threads and only then call idle() again.
|
||||||
|
// Thus if you want other threads get here while mIdle is false to be ignored then the
|
||||||
|
// main thread should use a large value for the new run state.
|
||||||
|
//
|
||||||
|
// If a non-main thread calls set_state first, then the state is changed but the main thread
|
||||||
|
// can still override it if it calls set_state before handling the new state; in the latter
|
||||||
|
// case it would still be as if the call from the non-main thread was ignored.
|
||||||
|
//
|
||||||
|
// Concurrent calls from non-main threads however, always result in the largest state
|
||||||
|
// to prevail.
|
||||||
|
|
||||||
|
// If the state machine is already running, and we are not the main-thread and the new
|
||||||
|
// state is less than the current state, ignore it.
|
||||||
|
// Also, if abort() or finish() was called, then we should just ignore it.
|
||||||
|
if (mState != bs_run ||
|
||||||
|
(!mIdle && state <= mRunState && !AIThreadID::in_main_thread()))
|
||||||
|
{
|
||||||
|
#ifdef SHOW_ASSERT
|
||||||
|
// It's a bit weird if the same thread does two calls on a row where the second call
|
||||||
|
// has a smaller value: warn about that.
|
||||||
|
if (mState == bs_run && mContThread.equals_current_thread())
|
||||||
|
{
|
||||||
|
llwarns << "Ignoring call to set_state(" << state_str(state) <<
|
||||||
|
") by non-main thread before main-thread could react on previous call, "
|
||||||
|
"because new state is smaller than old state (" << state_str(mRunState) << ")." << llendl;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
mSetStateLock.unlock();
|
||||||
|
return; // Ignore.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do not call idle() when set_state is called from another thread; use idle(state_type) instead.
|
||||||
|
llassert(!mCalledThreadUnsafeIdle || is_main_thread());
|
||||||
|
|
||||||
|
// Change mRunState to the requested value.
|
||||||
|
if (mRunState != state)
|
||||||
|
{
|
||||||
|
mRunState = state;
|
||||||
|
Dout(dc::statemachine, "mRunState set to " << state_str(mRunState));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Continue the state machine if appropriate.
|
||||||
|
if (mIdle)
|
||||||
|
locked_cont(); // This unlocks mSetStateLock.
|
||||||
|
else
|
||||||
|
mSetStateLock.unlock();
|
||||||
|
|
||||||
|
// If we get here then mIdle is false, so only mRunState can still be changed but we won't
|
||||||
|
// call locked_cont() anymore. When the main thread finally picks up on the state change,
|
||||||
|
// it will cancel any possible callbacks from other threads and process the largest state
|
||||||
|
// that this function was called with in the meantime.
|
||||||
|
}
|
||||||
|
|
||||||
|
void AIStateMachine::abort(void)
|
||||||
|
{
|
||||||
|
DoutEntering(dc::statemachine, "AIStateMachine::abort() [" << (void*)this << "]");
|
||||||
|
// It's possible that abort() is called before calling AIStateMachine::multiplex.
|
||||||
|
// In that case the statemachine wasn't initialized yet and we should just kill() it.
|
||||||
|
if (LL_UNLIKELY(mState == bs_initialize))
|
||||||
|
{
|
||||||
|
// It's ok to use the thread-unsafe idle() here, because if the statemachine
|
||||||
|
// wasn't started yet, then other threads won't call set_state() on it.
|
||||||
|
if (!mIdle)
|
||||||
|
idle();
|
||||||
|
// run() calls locked_cont() after which the top of the mainloop adds this
|
||||||
|
// state machine to active_statemachines. Therefore, if the following fails
|
||||||
|
// then either the same statemachine called run() immediately followed by abort(),
|
||||||
|
// which is not allowed; or there were two active statemachines running,
|
||||||
|
// the first created a new statemachine and called run() on it, and then
|
||||||
|
// the other (before reaching the top of the mainloop) called abort() on
|
||||||
|
// that freshly created statemachine. Obviously, this is highly unlikely,
|
||||||
|
// but if that is the case then here we bump the statemachine into
|
||||||
|
// continued_statemachines to prevent kill() to delete this statemachine:
|
||||||
|
// the caller of abort() does not expect that.
|
||||||
|
if (LL_UNLIKELY(mActive == as_idle))
|
||||||
|
{
|
||||||
|
mSetStateLock.lock();
|
||||||
|
locked_cont();
|
||||||
|
idle();
|
||||||
|
}
|
||||||
|
kill();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
llassert(mState == bs_run);
|
||||||
|
mSetStateLock.lock();
|
||||||
|
mState = bs_abort; // Causes additional calls to set_state to be ignored.
|
||||||
|
mSetStateLock.unlock();
|
||||||
|
abort_impl();
|
||||||
|
mAborted = true;
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AIStateMachine::finish(void)
|
||||||
|
{
|
||||||
|
DoutEntering(dc::statemachine, "AIStateMachine::finish() [" << (void*)this << "]");
|
||||||
|
mSetStateLock.lock();
|
||||||
|
llassert(mState == bs_run || mState == bs_abort);
|
||||||
|
// It is possible that mIdle is true when abort or finish was called from
|
||||||
|
// outside multiplex_impl. However, that only may be done by the main thread.
|
||||||
|
llassert(!mIdle || is_main_thread());
|
||||||
|
if (!mIdle)
|
||||||
|
idle(); // After calling this, we don't want other threads to call set_state() anymore.
|
||||||
|
mState = bs_finish; // Causes additional calls to set_state to be ignored.
|
||||||
|
mSetStateLock.unlock();
|
||||||
|
finish_impl();
|
||||||
|
// Did finish_impl call kill()? Then that is only the default. Remember it.
|
||||||
|
bool default_delete = (mState == bs_killed);
|
||||||
|
mState = bs_finish;
|
||||||
|
if (mParent)
|
||||||
|
{
|
||||||
|
// It is possible that the parent is not running when the parent is in fact aborting and called
|
||||||
|
// abort on this object from it's abort_impl function. It that case we don't want to recursively
|
||||||
|
// call abort again (or change it's state).
|
||||||
|
if (mParent->running())
|
||||||
|
{
|
||||||
|
if (mAborted && mAbortParent)
|
||||||
|
{
|
||||||
|
mParent->abort();
|
||||||
|
mParent = NULL;
|
||||||
|
}
|
||||||
|
else if (!mAborted || mOnAbortSignalParent)
|
||||||
|
{
|
||||||
|
mParent->set_state(mNewParentState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// After this (bool)*this evaluates to true and we can call the callback, which then is allowed to call run().
|
||||||
|
mState = bs_callback;
|
||||||
|
if (mCallback)
|
||||||
|
{
|
||||||
|
// This can/may call kill() that sets mState to bs_kill and in which case the whole AIStateMachine
|
||||||
|
// will be deleted from the mainloop, or it may call run() that sets mState is set to bs_initialize
|
||||||
|
// and might change or reuse mCallback or mParent.
|
||||||
|
mCallback->callback(!mAborted);
|
||||||
|
if (mState != bs_initialize)
|
||||||
|
{
|
||||||
|
delete mCallback;
|
||||||
|
mCallback = NULL;
|
||||||
|
mParent = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Not restarted by callback. Allow run() to be called later on.
|
||||||
|
mParent = NULL;
|
||||||
|
}
|
||||||
|
// Fix the final state.
|
||||||
|
if (mState == bs_callback)
|
||||||
|
mState = default_delete ? bs_killed : bs_initialize;
|
||||||
|
if (mState == bs_killed && mActive == as_idle)
|
||||||
|
{
|
||||||
|
// Bump the statemachine onto the active statemachine list, or else it won't be deleted.
|
||||||
|
mSetStateLock.lock();
|
||||||
|
locked_cont();
|
||||||
|
idle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AIStateMachine::kill(void)
|
||||||
|
{
|
||||||
|
DoutEntering(dc::statemachine, "AIStateMachine::kill() [" << (void*)this << "]");
|
||||||
|
// Should only be called from finish() (or when not running (bs_initialize)).
|
||||||
|
// However, also allow multiple calls to kill() on a row (bs_killed) (which effectively don't do anything).
|
||||||
|
llassert(mIdle && (mState == bs_callback || mState == bs_finish || mState == bs_initialize || mState == bs_killed));
|
||||||
|
base_state_type prev_state = mState;
|
||||||
|
mState = bs_killed;
|
||||||
|
if (prev_state == bs_initialize && mActive == as_idle)
|
||||||
|
{
|
||||||
|
// We're not running (ie being deleted by a parent statemachine), delete it immediately.
|
||||||
|
delete this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return stringified 'state'.
|
||||||
|
char const* AIStateMachine::state_str(state_type state)
|
||||||
|
{
|
||||||
|
if (state >= min_state && state < max_state)
|
||||||
|
{
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
AI_CASE_RETURN(bs_initialize);
|
||||||
|
AI_CASE_RETURN(bs_run);
|
||||||
|
AI_CASE_RETURN(bs_abort);
|
||||||
|
AI_CASE_RETURN(bs_finish);
|
||||||
|
AI_CASE_RETURN(bs_callback);
|
||||||
|
AI_CASE_RETURN(bs_killed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return state_str_impl(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Private methods
|
||||||
|
//
|
||||||
|
|
||||||
|
void AIStateMachine::multiplex(U64 current_time)
|
||||||
|
{
|
||||||
|
// Return immediately when this state machine is sleeping.
|
||||||
|
// A negative value of mSleep means we're counting frames,
|
||||||
|
// a positive value means we're waiting till a certain
|
||||||
|
// amount of time has passed.
|
||||||
|
if (mSleep != 0)
|
||||||
|
{
|
||||||
|
if (mSleep < 0)
|
||||||
|
{
|
||||||
|
if (++mSleep)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (current_time < (U64)mSleep)
|
||||||
|
return;
|
||||||
|
mSleep = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DoutEntering(dc::statemachine, "AIStateMachine::multiplex() [" << (void*)this << "] [with state: " << state_str(mState == bs_run ? mRunState : mState) << "]");
|
||||||
|
llassert(mState == bs_initialize || mState == bs_run);
|
||||||
|
|
||||||
|
// Real state machine starts here.
|
||||||
|
if (mState == bs_initialize)
|
||||||
|
{
|
||||||
|
mAborted = false;
|
||||||
|
mState = bs_run;
|
||||||
|
initialize_impl();
|
||||||
|
if (mAborted || mState != bs_run)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
multiplex_impl();
|
||||||
|
}
|
||||||
|
|
||||||
|
//static
|
||||||
|
void AIStateMachine::add_continued_statemachines(AIReadAccess<csme_type>& csme_r)
|
||||||
|
{
|
||||||
|
bool nonempty = false;
|
||||||
|
for (continued_statemachines_type::const_iterator iter = csme_r->continued_statemachines.begin(); iter != csme_r->continued_statemachines.end(); ++iter)
|
||||||
|
{
|
||||||
|
nonempty = true;
|
||||||
|
active_statemachines.push_back(QueueElement(*iter));
|
||||||
|
Dout(dc::statemachine, "Adding " << (void*)*iter << " to active_statemachines");
|
||||||
|
(*iter)->mActive = as_active;
|
||||||
|
}
|
||||||
|
if (nonempty)
|
||||||
|
AIWriteAccess<csme_type>(csme_r)->continued_statemachines.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
void AIStateMachine::dowork(void)
|
||||||
|
{
|
||||||
|
llassert(!active_statemachines.empty());
|
||||||
|
// Run one or more state machines.
|
||||||
|
U64 total_clocks = 0;
|
||||||
|
for (active_statemachines_type::iterator iter = active_statemachines.begin(); iter != active_statemachines.end(); ++iter)
|
||||||
|
{
|
||||||
|
AIStateMachine& statemachine(iter->statemachine());
|
||||||
|
if (!statemachine.mIdle)
|
||||||
|
{
|
||||||
|
U64 start = get_clock_count();
|
||||||
|
// This might call idle() and then pass the statemachine to another thread who then may call cont().
|
||||||
|
// Hence, after this isn't not sure what mIdle is, and it can change from true to false at any moment,
|
||||||
|
// if it is true after this function returns.
|
||||||
|
statemachine.multiplex(start);
|
||||||
|
U64 delta = get_clock_count() - start;
|
||||||
|
iter->add(delta);
|
||||||
|
total_clocks += delta;
|
||||||
|
if (total_clocks >= sMaxCount)
|
||||||
|
{
|
||||||
|
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
||||||
|
llwarns << "AIStateMachine::mainloop did run for " << (total_clocks * 1000 / calc_clock_frequency()) << " ms." << llendl;
|
||||||
|
#endif
|
||||||
|
std::sort(active_statemachines.begin(), active_statemachines.end(), QueueElementComp());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Remove idle state machines from the loop.
|
||||||
|
active_statemachines_type::iterator iter = active_statemachines.begin();
|
||||||
|
while (iter != active_statemachines.end())
|
||||||
|
{
|
||||||
|
AIStateMachine& statemachine(iter->statemachine());
|
||||||
|
// Atomic test mIdle and change mActive.
|
||||||
|
bool locked = statemachine.mIdleActive.tryLock();
|
||||||
|
// If the lock failed, then another thread is in the middle of calling cont(),
|
||||||
|
// thus mIdle will end up false. So, there is no reason to block here; just
|
||||||
|
// treat mIdle as false already.
|
||||||
|
if (locked && statemachine.mIdle)
|
||||||
|
{
|
||||||
|
// Without the lock, it would be possible that another thread called cont() right here,
|
||||||
|
// changing mIdle to false again but NOT adding the statemachine to continued_statemachines,
|
||||||
|
// thinking it is in active_statemachines (and it is), while immediately below it is
|
||||||
|
// erased from active_statemachines.
|
||||||
|
statemachine.mActive = as_idle;
|
||||||
|
// Now, calling cont() is ok -- as that will cause the statemachine to be added to
|
||||||
|
// continued_statemachines, so it's fine in that case-- even necessary-- to remove it from
|
||||||
|
// active_statemachines regardless, and we can release the lock here.
|
||||||
|
statemachine.mIdleActive.unlock();
|
||||||
|
Dout(dc::statemachine, "Erasing " << (void*)&statemachine << " from active_statemachines");
|
||||||
|
iter = active_statemachines.erase(iter);
|
||||||
|
if (statemachine.mState == bs_killed)
|
||||||
|
{
|
||||||
|
Dout(dc::statemachine, "Deleting " << (void*)&statemachine);
|
||||||
|
delete &statemachine;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (locked)
|
||||||
|
{
|
||||||
|
statemachine.mIdleActive.unlock();
|
||||||
|
}
|
||||||
|
llassert(statemachine.mActive == as_active); // It should not be possible that another thread called cont() and changed this when we are we are not idle.
|
||||||
|
llassert(statemachine.mState == bs_run || statemachine.mState == bs_initialize);
|
||||||
|
++iter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (active_statemachines.empty())
|
||||||
|
{
|
||||||
|
// If this was the last state machine, remove mainloop from the IdleCallbacks.
|
||||||
|
AIReadAccess<csme_type> csme_r(sContinuedStateMachinesAndMainloopEnabled, true);
|
||||||
|
if (csme_r->continued_statemachines.empty() && csme_r->mainloop_enabled)
|
||||||
|
{
|
||||||
|
Dout(dc::statemachine, "Deactivating AIStateMachine::mainloop: no active state machines left.");
|
||||||
|
AIWriteAccess<csme_type>(csme_r)->mainloop_enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
void AIStateMachine::flush(void)
|
||||||
|
{
|
||||||
|
DoutEntering(dc::curl, "AIStateMachine::flush(void)");
|
||||||
|
{
|
||||||
|
AIReadAccess<csme_type> csme_r(sContinuedStateMachinesAndMainloopEnabled);
|
||||||
|
add_continued_statemachines(csme_r);
|
||||||
|
}
|
||||||
|
// Abort all state machines.
|
||||||
|
for (active_statemachines_type::iterator iter = active_statemachines.begin(); iter != active_statemachines.end(); ++iter)
|
||||||
|
{
|
||||||
|
AIStateMachine& statemachine(iter->statemachine());
|
||||||
|
if (statemachine.abortable())
|
||||||
|
{
|
||||||
|
// We can't safely call abort() here for non-running (run() was called, but they weren't initialized yet) statemachines,
|
||||||
|
// because that might call kill() which in some cases is undesirable (ie, when it is owned by a partent that will
|
||||||
|
// also call abort() on it when it is aborted itself).
|
||||||
|
if (statemachine.running())
|
||||||
|
statemachine.abort();
|
||||||
|
else
|
||||||
|
statemachine.idle(); // Stop the statemachine from starting, in the next loop with batch == 0.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int batch = 0;; ++batch)
|
||||||
|
{
|
||||||
|
// Run mainloop until all state machines are idle (batch == 0) or deleted (batch == 1).
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
AIReadAccess<csme_type> csme_r(sContinuedStateMachinesAndMainloopEnabled);
|
||||||
|
if (!csme_r->mainloop_enabled)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
mainloop();
|
||||||
|
}
|
||||||
|
if (batch == 1)
|
||||||
|
break;
|
||||||
|
{
|
||||||
|
AIReadAccess<csme_type> csme_r(sContinuedStateMachinesAndMainloopEnabled);
|
||||||
|
add_continued_statemachines(csme_r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// At this point all statemachines should be idle.
|
||||||
|
AIReadAccess<csme_type> csme_r(sContinuedStateMachinesAndMainloopEnabled);
|
||||||
|
llinfos << "Current number of continued statemachines: " << csme_r->continued_statemachines.size() << llendl;
|
||||||
|
llinfos << "Current number of active statemachines: " << active_statemachines.size() << llendl;
|
||||||
|
llassert(csme_r->continued_statemachines.empty() && active_statemachines.empty());
|
||||||
|
}
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
#define AISTATEMACHINE_H
|
#define AISTATEMACHINE_H
|
||||||
|
|
||||||
#include "aithreadsafe.h"
|
#include "aithreadsafe.h"
|
||||||
#include "llfasttimer.h"
|
#include "lltimer.h"
|
||||||
#include <boost/signals2.hpp>
|
#include <boost/signals2.hpp>
|
||||||
|
|
||||||
//!
|
//!
|
||||||
@@ -192,6 +192,15 @@ class AIStateMachine {
|
|||||||
as_active // State machine is on active_statemachines list.
|
as_active // State machine is on active_statemachines list.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Type of continued_statemachines.
|
||||||
|
typedef std::vector<AIStateMachine*> continued_statemachines_type;
|
||||||
|
//! Type of sContinuedStateMachinesAndMainloopEnabled.
|
||||||
|
struct csme_type
|
||||||
|
{
|
||||||
|
continued_statemachines_type continued_statemachines;
|
||||||
|
bool mainloop_enabled;
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef U32 state_type; //!< The type of mRunState
|
typedef U32 state_type; //!< The type of mRunState
|
||||||
|
|
||||||
@@ -207,12 +216,17 @@ class AIStateMachine {
|
|||||||
active_type mActive; //!< Whether statemachine is idle, queued to be added to the active list, or already on the active list.
|
active_type mActive; //!< Whether statemachine is idle, queued to be added to the active list, or already on the active list.
|
||||||
S64 mSleep; //!< Non-zero while the state machine is sleeping.
|
S64 mSleep; //!< Non-zero while the state machine is sleeping.
|
||||||
LLMutex mIdleActive; //!< Used for atomic operations on the pair mIdle / mActive.
|
LLMutex mIdleActive; //!< Used for atomic operations on the pair mIdle / mActive.
|
||||||
|
#ifdef SHOW_ASSERT
|
||||||
|
AIThreadID mContThread; //!< Thread that last called locked_cont().
|
||||||
|
bool mCalledThreadUnsafeIdle; //!< Set to true when idle() is called.
|
||||||
|
#endif
|
||||||
|
|
||||||
// Callback facilities.
|
// Callback facilities.
|
||||||
// From within an other state machine:
|
// From within an other state machine:
|
||||||
AIStateMachine* mParent; //!< The parent object that started this state machine, or NULL if there isn't any.
|
AIStateMachine* mParent; //!< The parent object that started this state machine, or NULL if there isn't any.
|
||||||
state_type mNewParentState; //!< The state at which the parent should continue upon a successful finish.
|
state_type mNewParentState; //!< The state at which the parent should continue upon a successful finish.
|
||||||
bool mAbortParent; //!< If true, abort parent on abort(). Otherwise continue as normal.
|
bool mAbortParent; //!< If true, abort parent on abort(). Otherwise continue as normal.
|
||||||
|
bool mOnAbortSignalParent; //!< If true and mAbortParent is false, change state of parent even on abort.
|
||||||
// From outside a state machine:
|
// From outside a state machine:
|
||||||
struct callback_type {
|
struct callback_type {
|
||||||
typedef boost::signals2::signal<void (bool)> signal_type;
|
typedef boost::signals2::signal<void (bool)> signal_type;
|
||||||
@@ -225,40 +239,60 @@ class AIStateMachine {
|
|||||||
};
|
};
|
||||||
callback_type* mCallback; //!< Pointer to signal/connection, or NULL when not connected.
|
callback_type* mCallback; //!< Pointer to signal/connection, or NULL when not connected.
|
||||||
|
|
||||||
static AIThreadSafeSimpleDC<U64> sMaxCount; //!< Number of cpu clocks below which we start a new state machine within the same frame.
|
static U64 sMaxCount; //!< Number of cpu clocks below which we start a new state machine within the same frame.
|
||||||
|
static AIThreadSafeDC<csme_type> sContinuedStateMachinesAndMainloopEnabled; //!< Read/write locked variable pair.
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
LLMutex mSetStateLock; //!< For critical areas in set_state() and locked_cont().
|
||||||
|
|
||||||
//! State of the derived class. Only valid if mState == bs_run. Call set_state to change.
|
//! State of the derived class. Only valid if mState == bs_run. Call set_state to change.
|
||||||
state_type mRunState;
|
volatile state_type mRunState;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//! Create a non-running state machine.
|
//! Create a non-running state machine.
|
||||||
AIStateMachine(void) : mState(bs_initialize), mIdle(true), mAborted(true), mActive(as_idle), mSleep(0), mParent(NULL), mCallback(NULL) { updateSettings(); }
|
AIStateMachine(void) : mState(bs_initialize), mIdle(true), mAborted(true), mActive(as_idle), mSleep(0), mParent(NULL), mCallback(NULL)
|
||||||
|
#ifdef SHOW_ASSERT
|
||||||
|
, mContThread(AIThreadID::none), mCalledThreadUnsafeIdle(false)
|
||||||
|
#endif
|
||||||
|
{ }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! The user should call 'kill()', not delete a AIStateMachine (derived) directly.
|
//! The user should call 'kill()', not delete a AIStateMachine (derived) directly.
|
||||||
virtual ~AIStateMachine() { llassert(mState == bs_killed && mActive == as_idle); }
|
virtual ~AIStateMachine() { llassert((mState == bs_killed && mActive == as_idle) || mState == bs_initialize); }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//! Halt the state machine until cont() is called.
|
//! Halt the state machine until cont() is called (not thread-safe).
|
||||||
void idle(void);
|
void idle(void);
|
||||||
|
|
||||||
|
//! Halt the state machine until cont() is called, provided it is still in 'cur_run_state'.
|
||||||
|
void idle(state_type current_run_state);
|
||||||
|
|
||||||
//! Temporarily halt the state machine.
|
//! Temporarily halt the state machine.
|
||||||
void yield_frame(unsigned int frames) { mSleep = -(S64)frames; }
|
void yield_frame(unsigned int frames) { mSleep = -(S64)frames; }
|
||||||
|
|
||||||
//! Temporarily halt the state machine.
|
//! Temporarily halt the state machine.
|
||||||
void yield_ms(unsigned int ms) { mSleep = LLFastTimer::getCPUClockCount64() + LLFastTimer::countsPerSecond() * ms / 1000; }
|
void yield_ms(unsigned int ms) { mSleep = get_clock_count() + calc_clock_frequency() * ms / 1000; }
|
||||||
|
|
||||||
//! Continue running after calling idle.
|
//! Continue running after calling idle.
|
||||||
void cont(void);
|
void cont(void)
|
||||||
|
{
|
||||||
|
mSetStateLock.lock();
|
||||||
|
// Ignore calls to cont() if the statemachine isn't idle. See comments in set_state().
|
||||||
|
// Calling cont() twice or after calling set_state(), without first calling idle(), is an error.
|
||||||
|
if (mState != bs_run || !mIdle) { llassert(mState != bs_run || !mContThread.equals_current_thread()); mSetStateLock.unlock(); return; }
|
||||||
|
locked_cont();
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
void locked_cont(void);
|
||||||
|
|
||||||
|
public:
|
||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
// Changing the state.
|
// Changing the state.
|
||||||
|
|
||||||
//! Change state to <code>bs_run</code>. May only be called after creation or after returning from finish().
|
//! Change state to <code>bs_run</code>. May only be called after creation or after returning from finish().
|
||||||
// If <code>parent</code> is non-NULL, change the parent state machine's state to <code>new_parent_state</code>
|
// If <code>parent</code> is non-NULL, change the parent state machine's state to <code>new_parent_state</code>
|
||||||
// upon finish, or in the case of an abort and when <code>abort_parent</code> is true, call parent->abort() instead.
|
// upon finish, or in the case of an abort and when <code>abort_parent</code> is true, call parent->abort() instead.
|
||||||
void run(AIStateMachine* parent, state_type new_parent_state, bool abort_parent = true);
|
void run(AIStateMachine* parent, state_type new_parent_state, bool abort_parent = true, bool on_abort_signal_parent = true);
|
||||||
|
|
||||||
//! Change state to 'bs_run'. May only be called after creation or after returning from finish().
|
//! Change state to 'bs_run'. May only be called after creation or after returning from finish().
|
||||||
// Does not cause a callback.
|
// Does not cause a callback.
|
||||||
@@ -315,7 +349,7 @@ class AIStateMachine {
|
|||||||
// Other.
|
// Other.
|
||||||
|
|
||||||
//! Called whenever the StateMachineMaxTime setting is changed.
|
//! Called whenever the StateMachineMaxTime setting is changed.
|
||||||
static void updateSettings(void);
|
static void setMaxCount(F32 StateMachineMaxTime);
|
||||||
|
|
||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
// Accessors.
|
// Accessors.
|
||||||
@@ -326,11 +360,14 @@ class AIStateMachine {
|
|||||||
//! Return true if the derived class is running (also when we are idle).
|
//! Return true if the derived class is running (also when we are idle).
|
||||||
bool running(void) const { return mState == bs_run; }
|
bool running(void) const { return mState == bs_run; }
|
||||||
|
|
||||||
|
//! Return true if it's safe to call abort.
|
||||||
|
bool abortable(void) const { return mState == bs_run || mState == bs_initialize; }
|
||||||
|
|
||||||
//! Return true if the derived class is running but idle.
|
//! Return true if the derived class is running but idle.
|
||||||
bool waiting(void) const { return mState == bs_run && mIdle; }
|
bool waiting(void) const { return mState == bs_run && mIdle; }
|
||||||
|
|
||||||
// Use some safebool idiom (http://www.artima.com/cppsource/safebool.html) rather than operator bool.
|
// Use some safebool idiom (http://www.artima.com/cppsource/safebool.html) rather than operator bool.
|
||||||
typedef state_type AIStateMachine::* const bool_type;
|
typedef volatile state_type AIStateMachine::* const bool_type;
|
||||||
//! Return true if state machine successfully finished.
|
//! Return true if state machine successfully finished.
|
||||||
operator bool_type() const { return ((mState == bs_initialize || mState == bs_callback) && !mAborted) ? &AIStateMachine::mRunState : 0; }
|
operator bool_type() const { return ((mState == bs_initialize || mState == bs_callback) && !mAborted) ? &AIStateMachine::mRunState : 0; }
|
||||||
|
|
||||||
@@ -338,9 +375,27 @@ class AIStateMachine {
|
|||||||
char const* state_str(state_type state);
|
char const* state_str(state_type state);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void mainloop(void*);
|
static void add_continued_statemachines(AIReadAccess<csme_type>& csme_r);
|
||||||
|
static void dowork(void);
|
||||||
void multiplex(U64 current_time);
|
void multiplex(U64 current_time);
|
||||||
|
|
||||||
|
public:
|
||||||
|
//! Call this once per frame to give the statemachines CPU cycles.
|
||||||
|
static void mainloop(void)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
AIReadAccess<csme_type> csme_r(sContinuedStateMachinesAndMainloopEnabled, true);
|
||||||
|
if (!csme_r->mainloop_enabled)
|
||||||
|
return;
|
||||||
|
if (!csme_r->continued_statemachines.empty())
|
||||||
|
add_continued_statemachines(csme_r);
|
||||||
|
}
|
||||||
|
dowork();
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Abort all running state machines and then run mainloop until all state machines are idle (called when application is exiting).
|
||||||
|
static void flush(void);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
// Derived class implementations.
|
// Derived class implementations.
|
||||||
@@ -70,7 +70,6 @@ class AITimer : public AIStateMachine {
|
|||||||
* @brief Set the interval after which the timer should expire.
|
* @brief Set the interval after which the timer should expire.
|
||||||
*
|
*
|
||||||
* @param interval Amount of time in seconds before the timer will expire.
|
* @param interval Amount of time in seconds before the timer will expire.
|
||||||
* @param True if the timer should be deleted after it expires; false means it will keep firing at regular intervals.
|
|
||||||
*
|
*
|
||||||
* Call abort() at any time to stop the timer (and delete the AITimer object).
|
* Call abort() at any time to stop the timer (and delete the AITimer object).
|
||||||
*/
|
*/
|
||||||
@@ -12,17 +12,12 @@ set(CMAKE_CXX_FLAGS_RELEASE
|
|||||||
"-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=1 -DNDEBUG")
|
"-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=1 -DNDEBUG")
|
||||||
set(CMAKE_C_FLAGS_RELEASE
|
set(CMAKE_C_FLAGS_RELEASE
|
||||||
"${CMAKE_CXX_FLAGS_RELEASE}")
|
"${CMAKE_CXX_FLAGS_RELEASE}")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2
|
|
||||||
"-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=1 -DNDEBUG")
|
|
||||||
#llimage now requires this (?)
|
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2
|
|
||||||
"${CMAKE_CXX_FLAGS_RELEASESSE2}")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||||
"-DLL_RELEASE=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
|
"-DLL_RELEASE=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
|
||||||
|
|
||||||
# Don't bother with a MinSizeRel build.
|
# Don't bother with a MinSizeRel build.
|
||||||
|
|
||||||
set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;ReleaseSSE2;Debug" CACHE STRING
|
set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;Debug" CACHE STRING
|
||||||
"Supported build types." FORCE)
|
"Supported build types." FORCE)
|
||||||
|
|
||||||
# Platform-specific compilation flags.
|
# Platform-specific compilation flags.
|
||||||
@@ -34,29 +29,25 @@ if (WINDOWS)
|
|||||||
# Don't build DLLs.
|
# Don't build DLLs.
|
||||||
set(BUILD_SHARED_LIBS OFF)
|
set(BUILD_SHARED_LIBS OFF)
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /arch:SSE2"
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP /arch:SSE2"
|
||||||
CACHE STRING "C++ compiler debug options" FORCE)
|
CACHE STRING "C++ compiler debug options" FORCE)
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||||
"${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /arch:SSE2"
|
"${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /arch:SSE2"
|
||||||
CACHE STRING "C++ compiler release-with-debug options" FORCE)
|
CACHE STRING "C++ compiler release-with-debug options" FORCE)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE
|
set(CMAKE_CXX_FLAGS_RELEASE
|
||||||
"${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /arch:SSE /fp:fast"
|
"${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /arch:SSE2 /fp:fast"
|
||||||
CACHE STRING "C++ compiler release options" FORCE)
|
CACHE STRING "C++ compiler release options" FORCE)
|
||||||
set(CMAKE_C_FLAGS_RELEASE
|
set(CMAKE_C_FLAGS_RELEASE
|
||||||
"${CMAKE_C_FLAGS_RELEASE} ${LL_C_FLAGS} /O2 /Zi /MD /MP /arch:SSE /fp:fast"
|
"${CMAKE_C_FLAGS_RELEASE} ${LL_C_FLAGS} /O2 /Zi /MD /MP /arch:SSE2 /fp:fast"
|
||||||
CACHE STRING "C compiler release options" FORCE)
|
CACHE STRING "C compiler release options" FORCE)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2
|
|
||||||
"${CMAKE_CXX_FLAGS_RELEASESSE2} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /arch:SSE2 /fp:fast"
|
|
||||||
CACHE STRING "C++ compiler release-SSE2 options" FORCE)
|
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2
|
|
||||||
"${CMAKE_C_FLAGS_RELEASESSE2} ${LL_C_FLAGS} /O2 /Zi /MD /MP /arch:SSE2 /fp:fast"
|
|
||||||
CACHE STRING "C compiler release-SSE2 options" FORCE)
|
|
||||||
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LARGEADDRESSAWARE")
|
if(NOT CMAKE_EXE_LINKER_FLAGS_RELEASE MATCHES LARGEADDRESSAWARE)
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LARGEADDRESSAWARE")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD_LIBRARIES "")
|
set(CMAKE_CXX_STANDARD_LIBRARIES "")
|
||||||
set(CMAKE_C_STANDARD_LIBRARIES "")
|
set(CMAKE_C_STANDARD_LIBRARIES "")
|
||||||
|
|
||||||
add_definitions(
|
add_definitions(
|
||||||
/DLL_WINDOWS=1
|
/DLL_WINDOWS=1
|
||||||
/DUNICODE
|
/DUNICODE
|
||||||
@@ -78,12 +69,8 @@ if (WINDOWS)
|
|||||||
set(CMAKE_CXX_FLAGS_RELEASE
|
set(CMAKE_CXX_FLAGS_RELEASE
|
||||||
"${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
"${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
||||||
CACHE STRING "C++ compiler release options" FORCE)
|
CACHE STRING "C++ compiler release options" FORCE)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2
|
set(CMAKE_C_FLAGS_RELEASE
|
||||||
"${CMAKE_CXX_FLAGS_RELEASESSE2} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
"${CMAKE_C_FLAGS_RELEASE}" CACHE STRING "C compiler release options" FORCE)
|
||||||
CACHE STRING "C++ compiler release-SSE2 options" FORCE)
|
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2
|
|
||||||
"${CMAKE_CXX_FLAGS_RELEASESSE2} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
|
|
||||||
CACHE STRING "C compiler release-SSE2 options" FORCE)
|
|
||||||
add_definitions(
|
add_definitions(
|
||||||
/Zc:wchar_t-
|
/Zc:wchar_t-
|
||||||
)
|
)
|
||||||
@@ -144,7 +131,6 @@ if (LINUX)
|
|||||||
add_definitions(-DLL_IGNORE_SIGCHLD)
|
add_definitions(-DLL_IGNORE_SIGCHLD)
|
||||||
|
|
||||||
if(${CMAKE_C_COMPILER} MATCHES "gcc*")
|
if(${CMAKE_C_COMPILER} MATCHES "gcc*")
|
||||||
|
|
||||||
find_program(GXX g++)
|
find_program(GXX g++)
|
||||||
mark_as_advanced(GXX)
|
mark_as_advanced(GXX)
|
||||||
|
|
||||||
@@ -197,9 +183,6 @@ if (LINUX)
|
|||||||
|
|
||||||
# End of hacks.
|
# End of hacks.
|
||||||
|
|
||||||
#GCC Specific
|
|
||||||
add_definitions(-DCC_GCC)
|
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
||||||
|
|
||||||
if (NOT STANDALONE)
|
if (NOT STANDALONE)
|
||||||
@@ -208,28 +191,29 @@ if (LINUX)
|
|||||||
endif (NOT STANDALONE)
|
endif (NOT STANDALONE)
|
||||||
if (${ARCH} STREQUAL "x86_64")
|
if (${ARCH} STREQUAL "x86_64")
|
||||||
add_definitions(-DLINUX64=1 -pipe)
|
add_definitions(-DLINUX64=1 -pipe)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fomit-frame-pointer -ffast-math -funroll-loops")
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers")
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fomit-frame-pointer -ffast-math -funroll-loops")
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers")
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -ffast-math")
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers")
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -ffast-math")
|
||||||
else (${ARCH} STREQUAL "x86_64")
|
else (${ARCH} STREQUAL "x86_64")
|
||||||
if (NOT STANDALONE)
|
if (NOT STANDALONE)
|
||||||
set(MARCH_FLAG " -march=pentium4")
|
set(MARCH_FLAG " -march=pentium4")
|
||||||
endif (NOT STANDALONE)
|
endif (NOT STANDALONE)
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline -msse2")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline -msse2")
|
||||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline -msse2")
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline -msse2")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -mfpmath=sse,387 -msse2 ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
endif (${ARCH} STREQUAL "x86_64")
|
endif (${ARCH} STREQUAL "x86_64")
|
||||||
elseif(${CMAKE_C_COMPILER} MATCHES "clang*")
|
elseif(${CMAKE_C_COMPILER} MATCHES "clang*")
|
||||||
|
find_program(CLANG clang)
|
||||||
find_program(CLANG clang++)
|
|
||||||
mark_as_advanced(CLANG)
|
mark_as_advanced(CLANG)
|
||||||
|
|
||||||
|
find_program(CLANGXX clang++)
|
||||||
|
mark_as_advanced(CLANGXX)
|
||||||
|
|
||||||
add_definitions(
|
add_definitions(
|
||||||
-DCC_CLANG
|
|
||||||
-D_FORTIFY_SOURCE=2
|
-D_FORTIFY_SOURCE=2
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -244,18 +228,39 @@ if (LINUX)
|
|||||||
|
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline -msse2")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline -msse2")
|
||||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline -msse2")
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline -msse2")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2}${MARCH_FLAG} -msse2")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}${MARCH_FLAG} -msse2")
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2}${MARCH_FLAG} -msse2")
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}${MARCH_FLAG} -msse2")
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -msse2")
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -msse2")
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -msse2")
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -msse2")
|
||||||
|
elseif(${CMAKE_C_COMPILER} MATCHES "icc*" AND ${CMAKE_CXX_COMPILER} MATCHES "icpc*")
|
||||||
|
find_program(ICC icc)
|
||||||
|
mark_as_advanced(ICC)
|
||||||
|
|
||||||
|
add_definitions(
|
||||||
|
-D_FORTIFY_SOURCE=2
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT STANDALONE)
|
||||||
|
# this stops us requiring a really recent glibc at runtime
|
||||||
|
add_definitions(-fno-stack-protector)
|
||||||
|
endif (NOT STANDALONE)
|
||||||
|
|
||||||
|
if (NOT STANDALONE)
|
||||||
|
set(MARCH_FLAG " -axsse4.1 -msse2")
|
||||||
|
endif (NOT STANDALONE)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline-functions")
|
||||||
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}${MARCH_FLAG} -fno-inline-functions")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}${MARCH_FLAG} -parallel -fp-model fast=1")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}${MARCH_FLAG} -parallel -fp-model fast=1")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -parallel -fp-model fast=1")
|
||||||
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -parallel -fp-model fast=1")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-O0 ${CMAKE_CXX_FLAGS_DEBUG}")
|
set(CMAKE_CXX_FLAGS_DEBUG "-O0 ${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
set(CMAKE_C_FLAGS_DEBUG "-O0 ${CMAKE_CXX_FLAGS_DEBUG}")
|
set(CMAKE_C_FLAGS_DEBUG "-O0 ${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 ${CMAKE_CXX_FLAGS_RELEASE}")
|
set(CMAKE_CXX_FLAGS_RELEASE "-O3 ${CMAKE_CXX_FLAGS_RELEASE}")
|
||||||
set(CMAKE_C_FLAGS_RELEASE "-O3 ${CMAKE_C_FLAGS_RELEASE}")
|
set(CMAKE_C_FLAGS_RELEASE "-O3 ${CMAKE_C_FLAGS_RELEASE}")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2 "-O3 ${CMAKE_CXX_FLAGS_RELEASESSE2}")
|
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2 "-O3 ${CMAKE_C_FLAGS_RELEASESSE2}")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
|
||||||
endif (LINUX)
|
endif (LINUX)
|
||||||
@@ -265,16 +270,23 @@ if (DARWIN)
|
|||||||
add_definitions(-DLL_DARWIN=1 -D_XOPEN_SOURCE)
|
add_definitions(-DLL_DARWIN=1 -D_XOPEN_SOURCE)
|
||||||
set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first")
|
set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlong-branch")
|
if(${CMAKE_C_COMPILER} MATCHES "gcc*")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlong-branch")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlong-branch")
|
||||||
# NOTE: it's critical that the optimization flag is put in front.
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlong-branch")
|
||||||
# NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
|
# NOTE: it's critical that the optimization flag is put in front.
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
# NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -O3 -msse2 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
||||||
set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2} -O3 -msse2 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}")
|
elseif(${CMAKE_C_COMPILER} MATCHES "clang*")
|
||||||
|
# NOTE: it's critical that the optimization flag is put in front.
|
||||||
|
# NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -msse3")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -msse3")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -msse3")
|
||||||
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -msse3")
|
||||||
|
endif()
|
||||||
endif (DARWIN)
|
endif (DARWIN)
|
||||||
|
|
||||||
|
|
||||||
@@ -283,8 +295,11 @@ if (LINUX OR DARWIN)
|
|||||||
set(UNIX_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs")
|
set(UNIX_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs")
|
||||||
set(UNIX_CXX_WARNINGS "${UNIX_WARNINGS} -Wno-reorder -Wno-non-virtual-dtor -Woverloaded-virtual")
|
set(UNIX_CXX_WARNINGS "${UNIX_WARNINGS} -Wno-reorder -Wno-non-virtual-dtor -Woverloaded-virtual")
|
||||||
elseif(${CMAKE_C_COMPILER} MATCHES "clang*")
|
elseif(${CMAKE_C_COMPILER} MATCHES "clang*")
|
||||||
set(UNIX_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs -Wno-tautological-compare -Wno-char-subscripts -Wno-gnu -Wno-logical-op-parentheses
|
set(UNIX_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs -Wno-tautological-compare -Wno-char-subscripts -Wno-gnu -Wno-logical-op-parentheses -Wno-non-virtual-dtor ")
|
||||||
-Wno-non-virtual-dtor -Woverloaded-virtual -Wno-parentheses-equality -Wno-reorder -Wno-unused-function -Wno-unused-value -Wno-unused-variable")
|
set(UNIX_WARNINGS "${UNIX_WARNINGS} -Woverloaded-virtual -Wno-parentheses-equality -Wno-reorder -Wno-unused-function -Wno-unused-value -Wno-unused-variable")
|
||||||
|
set(UNIX_CXX_WARNINGS "${UNIX_WARNINGS}")
|
||||||
|
elseif(${CMAKE_C_COMPILER} MATCHES "icc")
|
||||||
|
set(UNIX_WARNINGS "-wd327 -wd597 -wd858")
|
||||||
set(UNIX_CXX_WARNINGS "${UNIX_WARNINGS}")
|
set(UNIX_CXX_WARNINGS "${UNIX_WARNINGS}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -313,7 +328,7 @@ else (STANDALONE)
|
|||||||
glib-2.0
|
glib-2.0
|
||||||
gstreamer-0.10
|
gstreamer-0.10
|
||||||
gtk-2.0
|
gtk-2.0
|
||||||
llfreetype2
|
freetype2
|
||||||
pango-1.0
|
pango-1.0
|
||||||
)
|
)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
@@ -327,16 +342,17 @@ if(1 EQUAL 1)
|
|||||||
endif (NOT "$ENV{SHY_MOD}" STREQUAL "")
|
endif (NOT "$ENV{SHY_MOD}" STREQUAL "")
|
||||||
endif(1 EQUAL 1)
|
endif(1 EQUAL 1)
|
||||||
|
|
||||||
SET( CMAKE_EXE_LINKER_FLAGS_RELEASESSE2
|
SET( CMAKE_EXE_LINKER_FLAGS_RELEASE
|
||||||
"${CMAKE_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING
|
"${CMAKE_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING
|
||||||
"Flags used for linking binaries under SSE2 build."
|
"Flags used for linking binaries under build."
|
||||||
FORCE )
|
FORCE )
|
||||||
SET( CMAKE_SHARED_LINKER_FLAGS_RELEASESSE2
|
SET( CMAKE_SHARED_LINKER_FLAGS_RELEASE
|
||||||
"${CMAKE_SHARED_LINKER_FLAGS_RELEASE}" CACHE STRING
|
"${CMAKE_SHARED_LINKER_FLAGS_RELEASE}" CACHE STRING
|
||||||
"Flags used by the shared libraries linker under SSE2 build."
|
"Flags used by the shared libraries linker under build."
|
||||||
FORCE )
|
FORCE )
|
||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
CMAKE_CXX_FLAGS_RELEASESSE2
|
CMAKE_CXX_FLAGS_RELEASE
|
||||||
CMAKE_C_FLAGS_RELEASESSE2
|
CMAKE_C_FLAGS_RELEASE
|
||||||
CMAKE_EXE_LINKER_FLAGS_RELEASESSE2
|
CMAKE_EXE_LINKER_FLAGS_RELEASE
|
||||||
CMAKE_SHARED_LINKER_FLAGS_RELEASESSE2 )
|
CMAKE_SHARED_LINKER_FLAGS_RELEASE
|
||||||
|
)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# -*- cmake -*-
|
# -*- cmake -*-
|
||||||
|
|
||||||
set(AISTATEMACHINE_INCLUDE_DIRS statemachine)
|
set(AISTATEMACHINE_INCLUDE_DIRS ${LIBS_OPEN_DIR}/aistatemachine)
|
||||||
set(AISTATEMACHINE_LIBRARIES statemachine)
|
set(AISTATEMACHINE_LIBRARIES aistatemachine)
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ else (STANDALONE)
|
|||||||
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.0.dylib
|
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.0.dylib
|
||||||
)
|
)
|
||||||
set(APRUTIL_LIBRARIES
|
set(APRUTIL_LIBRARIES
|
||||||
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libaprutil-1.0.dylib
|
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libaprutil-1.dylib
|
||||||
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.0.dylib
|
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.dylib
|
||||||
)
|
)
|
||||||
set(APRICONV_LIBRARIES iconv)
|
set(APRICONV_LIBRARIES iconv)
|
||||||
else (WINDOWS)
|
else (WINDOWS)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ if (STANDALONE)
|
|||||||
pkg_check_modules(VORBISFILE REQUIRED vorbisfile)
|
pkg_check_modules(VORBISFILE REQUIRED vorbisfile)
|
||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
use_prebuilt_binary(ogg-vorbis)
|
use_prebuilt_binary(ogg-vorbis)
|
||||||
set(VORBIS_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(VORBIS_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
set(VORBISENC_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
|
set(VORBISENC_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
|
||||||
set(VORBISFILE_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
|
set(VORBISFILE_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
|
||||||
|
|
||||||
@@ -40,3 +40,11 @@ link_directories(
|
|||||||
${VORBISFILE_LIBRARY_DIRS}
|
${VORBISFILE_LIBRARY_DIRS}
|
||||||
${OGG_LIBRARY_DIRS}
|
${OGG_LIBRARY_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(LLAUDIO_VORBIS_LIBRARIES
|
||||||
|
${VORBISENC_LIBRARIES}
|
||||||
|
${VORBISFILE_LIBRARIES}
|
||||||
|
${VORBIS_LIBRARIES}
|
||||||
|
${OGG_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# -*- cmake -*-
|
include(Prebuilt)
|
||||||
|
|
||||||
set(DB_FIND_QUIETLY ON)
|
set(DB_FIND_QUIETLY ON)
|
||||||
set(DB_FIND_REQUIRED ON)
|
set(DB_FIND_REQUIRED ON)
|
||||||
@@ -8,9 +8,10 @@ if (STANDALONE)
|
|||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
if (LINUX)
|
if (LINUX)
|
||||||
# Need to add dependency pthread explicitely to support ld.gold.
|
# Need to add dependency pthread explicitely to support ld.gold.
|
||||||
set(DB_LIBRARIES db-4.2 pthread)
|
use_prebuilt_binary(db)
|
||||||
|
set(DB_LIBRARIES db-5.1 pthread)
|
||||||
else (LINUX)
|
else (LINUX)
|
||||||
set(DB_LIBRARIES db-4.2)
|
set(DB_LIBRARIES db-4.2)
|
||||||
endif (LINUX)
|
endif (LINUX)
|
||||||
set(DB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(DB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -7,47 +7,45 @@ set(Boost_FIND_REQUIRED ON)
|
|||||||
if (STANDALONE)
|
if (STANDALONE)
|
||||||
include(FindBoost)
|
include(FindBoost)
|
||||||
|
|
||||||
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
|
set(Boost_USE_MULTITHREADED ON)
|
||||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
|
find_package(Boost 1.40.0 COMPONENTS date_time filesystem program_options regex system thread wave)
|
||||||
set(BOOST_REGEX_LIBRARY boost_regex-mt)
|
|
||||||
set(BOOST_SYSTEM_LIBRARY boost_system-mt)
|
|
||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
use_prebuilt_binary(boost)
|
use_prebuilt_binary(boost)
|
||||||
set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
|
|
||||||
if (WINDOWS)
|
if (WINDOWS)
|
||||||
set(BOOST_VERSION 1_45)
|
set(BOOST_VERSION 1_45)
|
||||||
|
|
||||||
# SNOW-788
|
# SNOW-788
|
||||||
# 00-Common.cmake alreay sets MSVC_SUFFIX to be correct for the VS we are using eg VC71, VC80, VC90 etc
|
# 00-Common.cmake alreay sets MSVC_SUFFIX to be correct for the VS we are using eg VC71, VC80, VC90 etc
|
||||||
# The precompiled boost libs for VC71 use a different suffix to VS80 and VS90
|
# The precompiled boost libs for VC71 use a different suffix to VS80 and VS90
|
||||||
# This code should ensure the cmake rules are valid for any VS being used in future as long as the approprate
|
# This code should ensure the cmake rules are valid for any VS being used in future as long as the approprate
|
||||||
# boost libs are avaiable - RC.
|
# boost libs are avaiable - RC.
|
||||||
|
|
||||||
if (MSVC71)
|
if (MSVC71)
|
||||||
set(BOOST_OPTIM_SUFFIX mt-s)
|
set(BOOST_OPTIM_SUFFIX mt-s)
|
||||||
set(BOOST_DEBUG_SUFFIX mt-sgd)
|
set(BOOST_DEBUG_SUFFIX mt-sgd)
|
||||||
else (MSVC71)
|
else (MSVC71)
|
||||||
set(BOOST_OPTIM_SUFFIX mt)
|
set(BOOST_OPTIM_SUFFIX mt)
|
||||||
set(BOOST_DEBUG_SUFFIX mt-gd)
|
set(BOOST_DEBUG_SUFFIX mt-gd)
|
||||||
endif (MSVC71)
|
endif (MSVC71)
|
||||||
|
|
||||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY
|
set(Boost_PROGRAM_OPTIONS_LIBRARY
|
||||||
optimized libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION}
|
optimized libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION}
|
||||||
debug libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION})
|
debug libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION})
|
||||||
set(BOOST_REGEX_LIBRARY
|
set(Boost_REGEX_LIBRARY
|
||||||
optimized libboost_regex-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION}
|
optimized libboost_regex-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION}
|
||||||
debug libboost_regex-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION})
|
debug libboost_regex-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION})
|
||||||
|
|
||||||
elseif (DARWIN)
|
elseif (DARWIN)
|
||||||
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
|
set(Boost_FILESYSTEM_LIBRARY boost_filesystem)
|
||||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
|
set(Boost_PROGRAM_OPTIONS_LIBRARY boost_program_options)
|
||||||
set(BOOST_REGEX_LIBRARY boost_regex-mt)
|
set(Boost_REGEX_LIBRARY boost_regex)
|
||||||
set(BOOST_SYSTEM_LIBRARY boost_system-mt)
|
set(Boost_SYSTEM_LIBRARY boost_system)
|
||||||
elseif (LINUX)
|
elseif (LINUX)
|
||||||
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
|
set(Boost_FILESYSTEM_LIBRARY boost_filesystem-mt)
|
||||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
|
set(Boost_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
|
||||||
set(BOOST_REGEX_LIBRARY boost_regex-mt)
|
set(Boost_REGEX_LIBRARY boost_regex-mt)
|
||||||
set(BOOST_SYSTEM_LIBRARY boost_system-mt)
|
set(Boost_SYSTEM_LIBRARY boost_system-mt)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -29,17 +29,16 @@ set(cmake_SOURCE_FILES
|
|||||||
FindELFIO.cmake
|
FindELFIO.cmake
|
||||||
FindGooglePerfTools.cmake
|
FindGooglePerfTools.cmake
|
||||||
FindHunSpell.cmake
|
FindHunSpell.cmake
|
||||||
FindMono.cmake
|
|
||||||
FindMT.cmake
|
FindMT.cmake
|
||||||
FindMySQL.cmake
|
|
||||||
FindNDOF.cmake
|
FindNDOF.cmake
|
||||||
FindOpenJPEG.cmake
|
FindOpenJPEG.cmake
|
||||||
FindXmlRpcEpi.cmake
|
FindXmlRpcEpi.cmake
|
||||||
FMOD.cmake
|
FMOD.cmake
|
||||||
|
FMODEX.cmake
|
||||||
FreeType.cmake
|
FreeType.cmake
|
||||||
GStreamer010Plugin.cmake
|
GStreamer010Plugin.cmake
|
||||||
GooglePerfTools.cmake
|
GooglePerfTools.cmake
|
||||||
HUNSPELL.cmake
|
Hunspell.cmake
|
||||||
JPEG.cmake
|
JPEG.cmake
|
||||||
LLAddBuildTest.cmake
|
LLAddBuildTest.cmake
|
||||||
LLAudio.cmake
|
LLAudio.cmake
|
||||||
@@ -55,16 +54,15 @@ set(cmake_SOURCE_FILES
|
|||||||
LLMessage.cmake
|
LLMessage.cmake
|
||||||
LLPlugin.cmake
|
LLPlugin.cmake
|
||||||
LLPrimitive.cmake
|
LLPrimitive.cmake
|
||||||
|
LLQtWebkit.cmake
|
||||||
LLRender.cmake
|
LLRender.cmake
|
||||||
LLScene.cmake
|
LLScene.cmake
|
||||||
LLUI.cmake
|
LLUI.cmake
|
||||||
LLVFS.cmake
|
LLVFS.cmake
|
||||||
LLWindow.cmake
|
LLWindow.cmake
|
||||||
LLXML.cmake
|
LLXML.cmake
|
||||||
LScript.cmake
|
# LScript.cmake
|
||||||
Linking.cmake
|
Linking.cmake
|
||||||
MonoEmbed.cmake
|
|
||||||
MySQL.cmake
|
|
||||||
NDOF.cmake
|
NDOF.cmake
|
||||||
OPENAL.cmake
|
OPENAL.cmake
|
||||||
OpenGL.cmake
|
OpenGL.cmake
|
||||||
@@ -73,6 +71,7 @@ set(cmake_SOURCE_FILES
|
|||||||
PNG.cmake
|
PNG.cmake
|
||||||
Python.cmake
|
Python.cmake
|
||||||
Prebuilt.cmake
|
Prebuilt.cmake
|
||||||
|
Qt4.cmake
|
||||||
RunBuildTest.cmake
|
RunBuildTest.cmake
|
||||||
TemplateCheck.cmake
|
TemplateCheck.cmake
|
||||||
Tut.cmake
|
Tut.cmake
|
||||||
@@ -83,10 +82,6 @@ set(cmake_SOURCE_FILES
|
|||||||
ZLIB.cmake
|
ZLIB.cmake
|
||||||
)
|
)
|
||||||
|
|
||||||
if(FMODEX)
|
|
||||||
list(APPEND cmake_SOURCE_FILES FMODEX.cmake)
|
|
||||||
endif(FMODEX)
|
|
||||||
|
|
||||||
source_group("Shared Rules" FILES ${cmake_SOURCE_FILES})
|
source_group("Shared Rules" FILES ${cmake_SOURCE_FILES})
|
||||||
|
|
||||||
set(master_SOURCE_FILES
|
set(master_SOURCE_FILES
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# -*- cmake -*-
|
# -*- cmake -*-
|
||||||
include(Prebuilt)
|
include(Prebuilt)
|
||||||
|
|
||||||
set(CURL_FIND_QUIETLY ON)
|
set(CURL_FIND_QUIETLY OFF)
|
||||||
set(CURL_FIND_REQUIRED ON)
|
set(CURL_FIND_REQUIRED ON)
|
||||||
|
|
||||||
if (STANDALONE)
|
if (STANDALONE)
|
||||||
@@ -14,6 +14,9 @@ else (STANDALONE)
|
|||||||
optimized libcurl)
|
optimized libcurl)
|
||||||
else (WINDOWS)
|
else (WINDOWS)
|
||||||
set(CURL_LIBRARIES curl)
|
set(CURL_LIBRARIES curl)
|
||||||
|
if(LINUX AND WORD_SIZE EQUAL 64)
|
||||||
|
list(APPEND CURL_LIBRARIES idn)
|
||||||
|
endif(LINUX AND WORD_SIZE EQUAL 64)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
set(CURL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
set(CURL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ set(debug_files
|
|||||||
libapr-1.dll
|
libapr-1.dll
|
||||||
libaprutil-1.dll
|
libaprutil-1.dll
|
||||||
libapriconv-1.dll
|
libapriconv-1.dll
|
||||||
|
libeay32.dll
|
||||||
|
ssleay32.dll
|
||||||
)
|
)
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
@@ -43,10 +45,6 @@ set(all_targets ${all_targets} ${out_targets})
|
|||||||
set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug")
|
set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug")
|
||||||
set(plugintest_debug_files
|
set(plugintest_debug_files
|
||||||
libeay32.dll
|
libeay32.dll
|
||||||
libglib-2.0-0.dll
|
|
||||||
libgmodule-2.0-0.dll
|
|
||||||
libgobject-2.0-0.dll
|
|
||||||
libgthread-2.0-0.dll
|
|
||||||
qtcored4.dll
|
qtcored4.dll
|
||||||
qtguid4.dll
|
qtguid4.dll
|
||||||
qtnetworkd4.dll
|
qtnetworkd4.dll
|
||||||
@@ -92,11 +90,6 @@ set(all_targets ${all_targets} ${out_targets})
|
|||||||
set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release")
|
set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release")
|
||||||
set(plugintest_release_files
|
set(plugintest_release_files
|
||||||
libeay32.dll
|
libeay32.dll
|
||||||
libglib-2.0-0.dll
|
|
||||||
libgmodule-2.0-0.dll
|
|
||||||
libgobject-2.0-0.dll
|
|
||||||
libgthread-2.0-0.dll
|
|
||||||
# llkdu.dll (not required for plugin test)
|
|
||||||
qtcore4.dll
|
qtcore4.dll
|
||||||
qtgui4.dll
|
qtgui4.dll
|
||||||
qtnetwork4.dll
|
qtnetwork4.dll
|
||||||
@@ -112,14 +105,6 @@ copy_if_different(
|
|||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${plugintest_release_src_dir}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/ReleaseSSE2"
|
|
||||||
out_targets
|
|
||||||
${plugintest_release_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
${plugintest_release_src_dir}
|
${plugintest_release_src_dir}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo"
|
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo"
|
||||||
@@ -146,14 +131,6 @@ copy_if_different(
|
|||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${plugintest_release_src_dir}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/ReleaseSSE2/imageformats"
|
|
||||||
out_targets
|
|
||||||
${plugintest_release_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
${plugintest_release_src_dir}
|
${plugintest_release_src_dir}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo/imageformats"
|
"${CMAKE_CURRENT_BINARY_DIR}/../test_apps/llplugintest/RelWithDebInfo/imageformats"
|
||||||
@@ -170,14 +147,6 @@ copy_if_different(
|
|||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${plugintest_release_src_dir}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llplugin/imageformats"
|
|
||||||
out_targets
|
|
||||||
${plugintest_release_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
${plugintest_release_src_dir}
|
${plugintest_release_src_dir}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin/imageformats"
|
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin/imageformats"
|
||||||
@@ -224,14 +193,6 @@ copy_if_different(
|
|||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${plugins_release_src_dir}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llplugin"
|
|
||||||
out_targets
|
|
||||||
${plugins_release_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
${plugins_release_src_dir}
|
${plugins_release_src_dir}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin"
|
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llplugin"
|
||||||
@@ -247,46 +208,44 @@ set(release_files
|
|||||||
libapr-1.dll
|
libapr-1.dll
|
||||||
libaprutil-1.dll
|
libaprutil-1.dll
|
||||||
libapriconv-1.dll
|
libapriconv-1.dll
|
||||||
|
libeay32.dll
|
||||||
|
ssleay32.dll
|
||||||
)
|
)
|
||||||
|
|
||||||
if(FMODEX)
|
if(FMODEX)
|
||||||
find_path(FMODEX_BINARY_DIR fmodex.dll
|
find_path(FMODEX_BINARY_DIR fmodex.dll
|
||||||
${release_src_dir}
|
${release_src_dir}
|
||||||
${FMODEX_SDK_DIR}/api
|
${FMODEX_SDK_DIR}/api
|
||||||
${FMODEX_SDK_DIR}
|
${FMODEX_SDK_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
if(FMODEX_BINARY_DIR)
|
if(FMODEX_BINARY_DIR)
|
||||||
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Release" out_targets fmodex.dll)
|
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Release" out_targets fmodex.dll)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2" out_targets fmodex.dll)
|
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" out_targets fmodex.dll)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" out_targets fmodex.dll)
|
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Debug" out_targets fmodex.dll)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
copy_if_different("${FMODEX_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Debug" out_targets fmodex.dll)
|
endif(FMODEX_BINARY_DIR)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
endif(FMODEX_BINARY_DIR)
|
|
||||||
endif(FMODEX)
|
endif(FMODEX)
|
||||||
|
|
||||||
if(FMOD)
|
if(FMOD)
|
||||||
find_path(FMOD_BINARY_DIR fmod.dll
|
find_path(FMOD_BINARY_DIR fmod.dll
|
||||||
${release_src_dir}
|
${release_src_dir}
|
||||||
${FMOD_SDK_DIR}/api
|
${FMOD_SDK_DIR}/api
|
||||||
${FMOD_SDK_DIR}
|
${FMOD_SDK_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
if(FMOD_BINARY_DIR)
|
if(FMOD_BINARY_DIR)
|
||||||
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Release" out_targets fmod.dll)
|
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Release" out_targets fmod.dll)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2" out_targets fmod.dll)
|
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" out_targets fmod.dll)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo" out_targets fmod.dll)
|
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Debug" out_targets fmod.dll)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
copy_if_different("${FMOD_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/Debug" out_targets fmod.dll)
|
else(FMOD_BINARY_DIR)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
list(APPEND release_files fmod.dll) #Required for compile. This will cause an error in copying binaries.
|
||||||
else(FMOD_BINARY_DIR)
|
endif(FMOD_BINARY_DIR)
|
||||||
list(APPEND release_files fmod.dll) #Required for compile. This will cause an error in copying binaries.
|
|
||||||
endif(FMOD_BINARY_DIR)
|
|
||||||
endif(FMOD)
|
endif(FMOD)
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
@@ -305,22 +264,6 @@ copy_if_different(
|
|||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${release_src_dir}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2"
|
|
||||||
out_targets
|
|
||||||
${release_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${vivox_src_dir}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2"
|
|
||||||
out_targets
|
|
||||||
${vivox_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
${release_src_dir}
|
${release_src_dir}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo"
|
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo"
|
||||||
@@ -371,15 +314,6 @@ else(EXISTS ${internal_llkdu_path})
|
|||||||
COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/Release"
|
COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/Release"
|
||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${release_llkdu_dst})
|
set(all_targets ${all_targets} ${release_llkdu_dst})
|
||||||
|
|
||||||
set(releasesse2_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/llkdu.dll")
|
|
||||||
ADD_CUSTOM_COMMAND(
|
|
||||||
OUTPUT ${releasesse2_llkdu_dst}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${release_llkdu_src} ${releasesse2_llkdu_dst}
|
|
||||||
DEPENDS ${release_llkdu_src}
|
|
||||||
COMMENT "Copying llkdu.dll ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2"
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${releasesse2_llkdu_dst})
|
|
||||||
|
|
||||||
set(relwithdebinfo_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llkdu.dll")
|
set(relwithdebinfo_llkdu_dst "${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/llkdu.dll")
|
||||||
ADD_CUSTOM_COMMAND(
|
ADD_CUSTOM_COMMAND(
|
||||||
@@ -455,14 +389,6 @@ if (MSVC80)
|
|||||||
)
|
)
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
set(all_targets ${all_targets} ${out_targets})
|
||||||
|
|
||||||
copy_if_different(
|
|
||||||
${release_msvc8_redist_path}
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2"
|
|
||||||
out_targets
|
|
||||||
${release_msvc8_files}
|
|
||||||
)
|
|
||||||
set(all_targets ${all_targets} ${out_targets})
|
|
||||||
|
|
||||||
copy_if_different(
|
copy_if_different(
|
||||||
${release_msvc8_redist_path}
|
${release_msvc8_redist_path}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo"
|
"${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo"
|
||||||
@@ -483,19 +409,6 @@ if (MSVC80)
|
|||||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Release/Microsoft.VC80.CRT.manifest
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Release/Microsoft.VC80.CRT.manifest
|
||||||
COMMENT "Creating release app config file"
|
COMMENT "Creating release app config file"
|
||||||
)
|
)
|
||||||
|
|
||||||
set(releasesse2_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/${VIEWER_BINARY_NAME}.exe.config)
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${releasesse2_appconfig_file}
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE}
|
|
||||||
ARGS
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/Microsoft.VC80.CRT.manifest
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/SecondLife.exe.config
|
|
||||||
${releasesse2_appconfig_file}
|
|
||||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ReleaseSSE2/Microsoft.VC80.CRT.manifest
|
|
||||||
COMMENT "Creating release-sse2 app config file"
|
|
||||||
)
|
|
||||||
|
|
||||||
set(relwithdebinfo_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/${VIEWER_BINARY_NAME}.exe.config)
|
set(relwithdebinfo_appconfig_file ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/${VIEWER_BINARY_NAME}.exe.config)
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
@@ -517,7 +430,6 @@ add_custom_target(copy_win_libs ALL
|
|||||||
DEPENDS
|
DEPENDS
|
||||||
${all_targets}
|
${all_targets}
|
||||||
${release_appconfig_file}
|
${release_appconfig_file}
|
||||||
${releasesse2_appconfig_file}
|
|
||||||
${relwithdebinfo_appconfig_file}
|
${relwithdebinfo_appconfig_file}
|
||||||
${debug_appconfig_file}
|
${debug_appconfig_file}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1 +1,18 @@
|
|||||||
set(CWDEBUG_LIBRARIES cwdebug)
|
include_directories (${CMAKE_SOURCE_DIR}/cwdebug)
|
||||||
|
|
||||||
|
set(cwdebug_SOURCE_FILES
|
||||||
|
${CMAKE_SOURCE_DIR}/cwdebug/debug.cc
|
||||||
|
)
|
||||||
|
|
||||||
|
set(cwdebug_HEADER_FILES
|
||||||
|
${CMAKE_SOURCE_DIR}/cwdebug/cwdebug.h
|
||||||
|
${CMAKE_SOURCE_DIR}/cwdebug/sys.h
|
||||||
|
${CMAKE_SOURCE_DIR}/cwdebug/debug.h
|
||||||
|
${CMAKE_SOURCE_DIR}/cwdebug/debug_ostream_operators.h
|
||||||
|
)
|
||||||
|
|
||||||
|
set_source_files_properties(${cwdebug_HEADER_FILES}
|
||||||
|
PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||||
|
|
||||||
|
list(APPEND cwdebug_SOURCE_FILES ${cwdebug_HEADER_FILES})
|
||||||
|
|
||||||
|
|||||||
@@ -7,15 +7,14 @@ if (STANDALONE)
|
|||||||
pkg_check_modules(DBUSGLIB REQUIRED dbus-glib-1)
|
pkg_check_modules(DBUSGLIB REQUIRED dbus-glib-1)
|
||||||
|
|
||||||
elseif (LINUX)
|
elseif (LINUX)
|
||||||
use_prebuilt_binary(glib) # dbusglib needs glib
|
|
||||||
use_prebuilt_binary(dbusglib)
|
use_prebuilt_binary(dbusglib)
|
||||||
set(DBUSGLIB_FOUND ON FORCE BOOL)
|
set(DBUSGLIB_FOUND ON FORCE BOOL)
|
||||||
set(DBUSGLIB_INCLUDE_DIRS
|
set(DBUSGLIB_INCLUDE_DIRS
|
||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/dbus
|
||||||
)
|
)
|
||||||
|
# We don't need to explicitly link against dbus-glib itself, because
|
||||||
|
# the viewer probes for the system's copy at runtime.
|
||||||
set(DBUSGLIB_LIBRARIES
|
set(DBUSGLIB_LIBRARIES
|
||||||
dbus-glib-1
|
|
||||||
gobject-2.0
|
gobject-2.0
|
||||||
glib-2.0
|
glib-2.0
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ if (STANDALONE)
|
|||||||
elseif (LINUX)
|
elseif (LINUX)
|
||||||
use_prebuilt_binary(elfio)
|
use_prebuilt_binary(elfio)
|
||||||
set(ELFIO_LIBRARIES ELFIO)
|
set(ELFIO_LIBRARIES ELFIO)
|
||||||
set(ELFIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
set(ELFIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
set(ELFIO_FOUND "YES")
|
set(ELFIO_FOUND "YES")
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|
||||||
|
|||||||
@@ -13,5 +13,5 @@ else (STANDALONE)
|
|||||||
else (WINDOWS)
|
else (WINDOWS)
|
||||||
set(EXPAT_LIBRARIES expat)
|
set(EXPAT_LIBRARIES expat)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
set(EXPAT_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(EXPAT_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -2,57 +2,59 @@
|
|||||||
|
|
||||||
include(Linking)
|
include(Linking)
|
||||||
|
|
||||||
if(INSTALL_PROPRIETARY)
|
|
||||||
include(Prebuilt)
|
|
||||||
use_prebuilt_binary(fmodex)
|
|
||||||
endif(INSTALL_PROPRIETARY)
|
|
||||||
|
|
||||||
find_library(FMODEX_LIBRARY
|
|
||||||
NAMES fmodex fmodex_vc fmodexL_vc
|
|
||||||
PATHS
|
|
||||||
optimized ${ARCH_PREBUILT_DIRS_RELEASE}
|
|
||||||
debug ${ARCH_PREBUILT_DIRS_DEBUG}
|
|
||||||
)
|
|
||||||
|
|
||||||
if (NOT FMODEX_LIBRARY)
|
if (NOT FMODEX_LIBRARY)
|
||||||
set(FMODEX_SDK_DIR CACHE PATH "Path to the FMOD Ex SDK.")
|
set(FMODEX_SDK_DIR CACHE PATH "Path to the FMOD Ex SDK.")
|
||||||
if (FMODEX_SDK_DIR)
|
if (FMODEX_SDK_DIR)
|
||||||
find_library(FMODEX_LIBRARY
|
if(WORD_SIZE EQUAL 32)
|
||||||
fmodex fmodex_vc fmodexL_vc
|
find_library(FMODEX_LIBRARY
|
||||||
PATHS
|
fmodex_vc fmodexL_vc fmodex fmodexL
|
||||||
${FMODEX_SDK_DIR}/api/lib
|
PATHS
|
||||||
${FMODEX_SDK_DIR}/api
|
"${FMODEX_SDK_DIR}/api/lib"
|
||||||
${FMODEX_SDK_DIR}/lib
|
"${FMODEX_SDK_DIR}/api"
|
||||||
${FMODEX_SDK_DIR}
|
"${FMODEX_SDK_DIR}/lib"
|
||||||
)
|
"${FMODEX_SDK_DIR}"
|
||||||
|
)
|
||||||
|
elseif(WORD_SIZE EQUAL 64)
|
||||||
|
find_library(FMODEX_LIBRARY
|
||||||
|
fmodex64 fmodexL64
|
||||||
|
PATHS
|
||||||
|
"${FMODEX_SDK_DIR}/api/lib"
|
||||||
|
"${FMODEX_SDK_DIR}/api"
|
||||||
|
"${FMODEX_SDK_DIR}/lib"
|
||||||
|
"${FMODEX_SDK_DIR}"
|
||||||
|
)
|
||||||
|
endif(WORD_SIZE EQUAL 32)
|
||||||
endif(FMODEX_SDK_DIR)
|
endif(FMODEX_SDK_DIR)
|
||||||
if(WINDOWS AND NOT FMODEX_LIBRARY)
|
if(WINDOWS AND NOT FMODEX_LIBRARY)
|
||||||
set(FMODEX_PROG_DIR "$ENV{PROGRAMFILES}/FMOD SoundSystem/FMOD Programmers API Windows")
|
set(FMODEX_PROG_DIR "$ENV{PROGRAMFILES}/FMOD SoundSystem/FMOD Programmers API Windows")
|
||||||
find_library(FMODEX_LIBRARY
|
find_library(FMODEX_LIBRARY
|
||||||
fmodex_vc fmodexL_vc
|
fmodex_vc fmodexL_vc
|
||||||
PATHS
|
PATHS
|
||||||
${FMODEX_PROG_DIR}/api/lib
|
"${FMODEX_PROG_DIR}/api/lib"
|
||||||
${FMODEX_PROG_DIR}/api
|
"${FMODEX_PROG_DIR}/api"
|
||||||
${FMODEX_PROG_DIR}
|
"${FMODEX_PROG_DIR}"
|
||||||
)
|
)
|
||||||
if(FMODEX_LIBRARY)
|
if(FMODEX_LIBRARY)
|
||||||
message(STATUS "Found fmodex in ${FMODEX_PROG_DIR}")
|
message(STATUS "Found fmodex in ${FMODEX_PROG_DIR}")
|
||||||
set(FMODEX_SDK_DIR ${FMODEX_PROG_DIR})
|
set(FMODEX_SDK_DIR "${FMODEX_PROG_DIR}")
|
||||||
set(FMODEX_SDK_DIR ${FMODEX_PROG_DIR} CACHE PATH "Path to the FMOD Ex SDK." FORCE)
|
set(FMODEX_SDK_DIR "${FMODEX_PROG_DIR}" CACHE PATH "Path to the FMOD Ex SDK." FORCE)
|
||||||
endif(FMODEX_LIBRARY)
|
endif(FMODEX_LIBRARY)
|
||||||
endif(WINDOWS AND NOT FMODEX_LIBRARY)
|
endif(WINDOWS AND NOT FMODEX_LIBRARY)
|
||||||
endif (NOT FMODEX_LIBRARY)
|
endif (NOT FMODEX_LIBRARY)
|
||||||
|
|
||||||
find_path(FMODEX_INCLUDE_DIR fmod.h
|
find_path(FMODEX_INCLUDE_DIR fmod.hpp
|
||||||
${LIBS_PREBUILT_DIR}/include/fmodex
|
"${LIBS_PREBUILT_DIR}/include/fmodex"
|
||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/fmodex
|
"${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/fmodex"
|
||||||
${FMODEX_SDK_DIR}/api/inc
|
"${FMODEX_SDK_DIR}/api/inc"
|
||||||
${FMODEX_SDK_DIR}/inc
|
"${FMODEX_SDK_DIR}/inc"
|
||||||
${FMODEX_SDK_DIR}
|
"${FMODEX_SDK_DIR}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(DARWIN)
|
||||||
|
set(FMODEX_ORIG_LIBRARY "${FMODEX_LIBRARY}")
|
||||||
|
set(FMODEX_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/libfmodex.dylib")
|
||||||
|
endif(DARWIN)
|
||||||
|
|
||||||
if (FMODEX_LIBRARY AND FMODEX_INCLUDE_DIR)
|
if (FMODEX_LIBRARY AND FMODEX_INCLUDE_DIR)
|
||||||
set(FMODEX ON CACHE BOOL "Use closed source FMOD Ex sound library.")
|
set(FMODEX ON CACHE BOOL "Use closed source FMOD Ex sound library.")
|
||||||
else (FMODEX_LIBRARY AND FMODEX_INCLUDE_DIR)
|
else (FMODEX_LIBRARY AND FMODEX_INCLUDE_DIR)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ FIND_PATH(HUNSPELL_INCLUDE_DIR hunspell.hxx
|
|||||||
/usr/include
|
/usr/include
|
||||||
)
|
)
|
||||||
|
|
||||||
SET(HUNSPELL_NAMES ${HUNSPELL_NAMES} hunspell hunspell-1.2)
|
SET(HUNSPELL_NAMES ${HUNSPELL_NAMES} hunspell hunspell-1.2 hunspell-1.3)
|
||||||
FIND_LIBRARY(HUNSPELL_LIBRARY
|
FIND_LIBRARY(HUNSPELL_LIBRARY
|
||||||
NAMES ${HUNSPELL_NAMES}
|
NAMES ${HUNSPELL_NAMES}
|
||||||
PATHS /usr/lib /usr/local/lib
|
PATHS /usr/lib /usr/local/lib
|
||||||
|
|||||||
@@ -3,16 +3,18 @@
|
|||||||
# - Find JSONCpp
|
# - Find JSONCpp
|
||||||
# Find the JSONCpp includes and library
|
# Find the JSONCpp includes and library
|
||||||
# This module defines
|
# This module defines
|
||||||
# JSONCPP_INCLUDE_DIR, where to find json.h, etc.
|
# JSONCPP_FOUND, System has libjsoncpp.
|
||||||
# JSONCPP_LIBRARIES, the libraries needed to use jsoncpp.
|
# JSONCPP_INCLUDE_DIRS - The libjsoncpp include directories.
|
||||||
# JSONCPP_FOUND, If false, do not try to use jsoncpp.
|
# JSONCPP_LIBRARIES - The libraries needed to use libjsoncpp.
|
||||||
# also defined, but not for general use are
|
# JSONCPP_DEFINITIONS - Compiler switches required for using libjsoncpp.
|
||||||
# JSONCPP_LIBRARY, where to find the jsoncpp library.
|
|
||||||
|
|
||||||
FIND_PATH(JSONCPP_INCLUDE_DIR json/json.h
|
FIND_PACKAGE(PkgConfig)
|
||||||
/usr/local/include
|
PKG_CHECK_MODULES(PC_JSONCPP jsoncpp)
|
||||||
/usr/include
|
SET(JSONCPP_DEFINITIONS ${PC_JSONCPP_CFLAGS_OTHER})
|
||||||
)
|
|
||||||
|
FIND_PATH(JSONCPP_INCLUDE_DIR json/reader.h
|
||||||
|
HINTS ${PC_JSONCPP_INCLUDE_DIR} ${PC_JSONCPP_INCLUDE_DIRS}
|
||||||
|
PATH_SUFFIXES jsoncpp)
|
||||||
|
|
||||||
# Get the GCC compiler version
|
# Get the GCC compiler version
|
||||||
EXEC_PROGRAM(${CMAKE_CXX_COMPILER}
|
EXEC_PROGRAM(${CMAKE_CXX_COMPILER}
|
||||||
@@ -22,39 +24,16 @@ EXEC_PROGRAM(${CMAKE_CXX_COMPILER}
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Try to find a library that was compiled with the same compiler version as we currently use.
|
# Try to find a library that was compiled with the same compiler version as we currently use.
|
||||||
SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson_linux-gcc-${_gcc_COMPILER_VERSION}_libmt.so)
|
|
||||||
IF (STANDALONE)
|
|
||||||
# On standalone, assume that the system installed library was compiled with the used compiler.
|
|
||||||
SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson.so)
|
|
||||||
ENDIF (STANDALONE)
|
|
||||||
FIND_LIBRARY(JSONCPP_LIBRARY
|
FIND_LIBRARY(JSONCPP_LIBRARY
|
||||||
NAMES ${JSONCPP_NAMES}
|
NAMES libjson_linux-gcc-${_gcc_COMPILER_VERSION}_libmt.so libjsoncpp.so
|
||||||
PATHS /usr/lib /usr/local/lib
|
HINTS ${PC_JSONCPP_LIBDIR} ${PC_JSONCPP_LIBRARY_DIRS}
|
||||||
)
|
PATHS /usr/lib /usr/local/lib)
|
||||||
|
|
||||||
IF (JSONCPP_LIBRARY AND JSONCPP_INCLUDE_DIR)
|
SET(JSONCPP_LIBRARIES ${JSONCPP_LIBRARY})
|
||||||
SET(JSONCPP_LIBRARIES ${JSONCPP_LIBRARY})
|
SET(JSONCPP_INCLUDE_DIRS ${JSONCPP_INCLUDE_DIR})
|
||||||
SET(JSONCPP_FOUND "YES")
|
|
||||||
ELSE (JSONCPP_LIBRARY AND JSONCPP_INCLUDE_DIR)
|
|
||||||
SET(JSONCPP_FOUND "NO")
|
|
||||||
ENDIF (JSONCPP_LIBRARY AND JSONCPP_INCLUDE_DIR)
|
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(JSONCPP DEFAULT_MSG
|
||||||
|
JSONCPP_LIBRARY JSONCPP_INCLUDE_DIR)
|
||||||
|
|
||||||
IF (JSONCPP_FOUND)
|
MARK_AS_ADVANCED(JSONCPP_LIBRARY JSONCPP_INCLUDE_DIR)
|
||||||
IF (NOT JSONCPP_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found JSONCpp: ${JSONCPP_LIBRARIES}")
|
|
||||||
ENDIF (NOT JSONCPP_FIND_QUIETLY)
|
|
||||||
ELSE (JSONCPP_FOUND)
|
|
||||||
IF (JSONCPP_FIND_REQUIRED)
|
|
||||||
MESSAGE(FATAL_ERROR "Could not find JSONCpp library")
|
|
||||||
ENDIF (JSONCPP_FIND_REQUIRED)
|
|
||||||
ENDIF (JSONCPP_FOUND)
|
|
||||||
|
|
||||||
# Deprecated declarations.
|
|
||||||
SET (NATIVE_JSONCPP_INCLUDE_PATH ${JSONCPP_INCLUDE_DIR} )
|
|
||||||
GET_FILENAME_COMPONENT (NATIVE_JSONCPP_LIB_PATH ${JSONCPP_LIBRARY} PATH)
|
|
||||||
|
|
||||||
MARK_AS_ADVANCED(
|
|
||||||
JSONCPP_LIBRARY
|
|
||||||
JSONCPP_INCLUDE_DIR
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ find_path(LLQTWEBKIT_INCLUDE_DIR llqtwebkit.h NO_SYSTEM_ENVIRONMENT_PATH HINTS $
|
|||||||
|
|
||||||
find_library(LLQTWEBKIT_LIBRARY NAMES llqtwebkit NO_SYSTEM_ENVIRONMENT_PATH HINTS ${LLQTWEBKIT_LIBRARY_DIRS})
|
find_library(LLQTWEBKIT_LIBRARY NAMES llqtwebkit NO_SYSTEM_ENVIRONMENT_PATH HINTS ${LLQTWEBKIT_LIBRARY_DIRS})
|
||||||
|
|
||||||
if (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND) # If pkg-config couldn't find it, pretend we don't have pkg-config.
|
if (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND) # If pkg-config couldn't find it, pretend we don't have pkg-config.
|
||||||
set(LLQTWEBKIT_LIBRARIES llqtwebkit)
|
set(LLQTWEBKIT_LIBRARIES llqtwebkit)
|
||||||
get_filename_component(LLQTWEBKIT_LIBRARY_DIRS ${LLQTWEBKIT_LIBRARY} PATH)
|
get_filename_component(LLQTWEBKIT_LIBRARY_DIRS ${LLQTWEBKIT_LIBRARY} PATH)
|
||||||
endif (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND)
|
endif (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND)
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
#Find the windows manifest tool.
|
#Find the windows manifest tool.
|
||||||
if (MSVC80)
|
if (MSVC80)
|
||||||
FIND_PROGRAM(HAVE_MANIFEST_TOOL NAMES mt
|
FIND_PROGRAM(HAVE_MANIFEST_TOOL NAMES mt
|
||||||
PATHS
|
PATHS
|
||||||
"$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/VC/bin"
|
"$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/VC/bin"
|
||||||
"$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/Common7/Tools/Bin"
|
"$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/Common7/Tools/Bin"
|
||||||
"$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/SDK/v2.0/Bin")
|
"$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/SDK/v2.0/Bin")
|
||||||
IF(HAVE_MANIFEST_TOOL)
|
IF(HAVE_MANIFEST_TOOL)
|
||||||
MESSAGE(STATUS "Found Mainfest Tool. Embedding custom manifests.")
|
MESSAGE(STATUS "Found Mainfest Tool. Embedding custom manifests.")
|
||||||
ELSE(HAVE_MANIFEST_TOOL)
|
ELSE(HAVE_MANIFEST_TOOL)
|
||||||
MESSAGE(FATAL_ERROR "Manifest tool, mt.exe, can't be found.")
|
MESSAGE(FATAL_ERROR "Manifest tool, mt.exe, can't be found.")
|
||||||
ENDIF(HAVE_MANIFEST_TOOL)
|
ENDIF(HAVE_MANIFEST_TOOL)
|
||||||
|
|
||||||
STRING(REPLACE "/MANIFEST " "/MANIFEST:NO" CMAKE_EXE_LINKER_FLAGS
|
STRING(REPLACE "/MANIFEST " "/MANIFEST:NO" CMAKE_EXE_LINKER_FLAGS
|
||||||
${CMAKE_EXE_LINKER_FLAGS})
|
${CMAKE_EXE_LINKER_FLAGS})
|
||||||
|
|
||||||
endif (MSVC80)
|
endif (MSVC80)
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
# - Try to find the mono, mcs, gmcs and gacutil
|
|
||||||
#
|
|
||||||
# defines
|
|
||||||
#
|
|
||||||
# MONO_FOUND - system has mono, mcs, gmcs and gacutil
|
|
||||||
# MONO_PATH - where to find 'mono'
|
|
||||||
# MCS_PATH - where to find 'mcs'
|
|
||||||
# GMCS_PATH - where to find 'gmcs'
|
|
||||||
# GACUTIL_PATH - where to find 'gacutil'
|
|
||||||
#
|
|
||||||
# copyright (c) 2007 Arno Rehn arno@arnorehn.de
|
|
||||||
#
|
|
||||||
# Redistribution and use is allowed according to the terms of the GPL license.
|
|
||||||
# Removed the check for gmcs
|
|
||||||
|
|
||||||
FIND_PROGRAM (MONO_EXECUTABLE mono
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.9.1/bin"
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.2.6/bin"
|
|
||||||
/bin
|
|
||||||
/usr/bin
|
|
||||||
/usr/local/bin
|
|
||||||
)
|
|
||||||
FIND_PROGRAM (MCS_EXECUTABLE mcs
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.9.1/bin"
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.2.6/bin"
|
|
||||||
/bin
|
|
||||||
/usr/bin
|
|
||||||
/usr/local/bin
|
|
||||||
)
|
|
||||||
FIND_PROGRAM (GMCS_EXECUTABLE gmcs
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.9.1/bin"
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.2.6/bin"
|
|
||||||
/bin
|
|
||||||
/usr/bin
|
|
||||||
/usr/local/bin
|
|
||||||
)
|
|
||||||
FIND_PROGRAM (GACUTIL_EXECUTABLE gacutil
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.9.1/bin"
|
|
||||||
"$ENV{PROGRAMFILES}/Mono-1.2.6/bin"
|
|
||||||
/bin
|
|
||||||
/usr/bin
|
|
||||||
/usr/local/bin
|
|
||||||
)
|
|
||||||
FIND_PROGRAM (ILASM_EXECUTABLE
|
|
||||||
ilasm
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
PATHS "$ENV{PROGRAMFILES}/Mono-1.9.1/bin" "$ENV{PROGRAMFILES}/Mono-1.2.6/bin" /bin /usr/bin /usr/local/bin
|
|
||||||
)
|
|
||||||
|
|
||||||
SET (MONO_FOUND FALSE)
|
|
||||||
|
|
||||||
IF (MONO_EXECUTABLE AND MCS_EXECUTABLE AND GACUTIL_EXECUTABLE)
|
|
||||||
SET (MONO_FOUND TRUE)
|
|
||||||
ENDIF (MONO_EXECUTABLE AND MCS_EXECUTABLE AND GACUTIL_EXECUTABLE)
|
|
||||||
|
|
||||||
IF (MONO_FOUND)
|
|
||||||
IF (NOT Mono_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found mono: ${MONO_EXECUTABLE}")
|
|
||||||
MESSAGE(STATUS "Found mcs: ${MCS_EXECUTABLE}")
|
|
||||||
MESSAGE(STATUS "Found gacutil: ${GACUTIL_EXECUTABLE}")
|
|
||||||
ENDIF (NOT Mono_FIND_QUIETLY)
|
|
||||||
ELSE (MONO_FOUND)
|
|
||||||
IF (Mono_FIND_REQUIRED)
|
|
||||||
MESSAGE(FATAL_ERROR "Could not find one or more of the following programs: mono, mcs, gacutil")
|
|
||||||
ENDIF (Mono_FIND_REQUIRED)
|
|
||||||
ENDIF (MONO_FOUND)
|
|
||||||
|
|
||||||
MARK_AS_ADVANCED(MONO_EXECUTABLE MCS_EXECUTABLE GACUTIL_EXECUTABLE)
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
# -*- cmake -*-
|
|
||||||
|
|
||||||
# - Find MySQL
|
|
||||||
# Find the MySQL includes and library
|
|
||||||
# This module defines
|
|
||||||
# MYSQL_INCLUDE_DIR, where to find mysql.h, etc.
|
|
||||||
# MYSQL_LIBRARIES, the libraries needed to use Mysql.
|
|
||||||
# MYSQL_FOUND, If false, do not try to use Mysql.
|
|
||||||
# also defined, but not for general use are
|
|
||||||
# MYSQL_LIBRARY, where to find the Mysql library.
|
|
||||||
|
|
||||||
FIND_PATH(MYSQL_INCLUDE_DIR mysql/mysql.h
|
|
||||||
/usr/local/include
|
|
||||||
/usr/include
|
|
||||||
)
|
|
||||||
|
|
||||||
SET(MYSQL_NAMES ${MYSQL_NAMES} mysqlclient)
|
|
||||||
FIND_LIBRARY(MYSQL_LIBRARY
|
|
||||||
NAMES ${MYSQL_NAMES}
|
|
||||||
PATHS /usr/lib/mysql /usr/lib /usr/local/lib/mysql /usr/local/lib
|
|
||||||
)
|
|
||||||
|
|
||||||
IF (MYSQL_LIBRARY AND MYSQL_INCLUDE_DIR)
|
|
||||||
SET(MYSQL_LIBRARIES ${MYSQL_LIBRARY})
|
|
||||||
SET(MYSQL_FOUND "YES")
|
|
||||||
ELSE (MYSQL_LIBRARY AND MYSQL_INCLUDE_DIR)
|
|
||||||
SET(MYSQL_FOUND "NO")
|
|
||||||
ENDIF (MYSQL_LIBRARY AND MYSQL_INCLUDE_DIR)
|
|
||||||
|
|
||||||
|
|
||||||
IF (MYSQL_FOUND)
|
|
||||||
IF (NOT MYSQL_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found MySQL: ${MYSQL_LIBRARIES}")
|
|
||||||
ENDIF (NOT MYSQL_FIND_QUIETLY)
|
|
||||||
ELSE (MYSQL_FOUND)
|
|
||||||
IF (MYSQL_FIND_REQUIRED)
|
|
||||||
MESSAGE(FATAL_ERROR "Could not find MySQL library")
|
|
||||||
ENDIF (MYSQL_FIND_REQUIRED)
|
|
||||||
ENDIF (MYSQL_FOUND)
|
|
||||||
|
|
||||||
# Deprecated declarations.
|
|
||||||
SET (NATIVE_MYSQL_INCLUDE_PATH ${MYSQL_INCLUDE_DIR} )
|
|
||||||
GET_FILENAME_COMPONENT (NATIVE_MYSQL_LIB_PATH ${MYSQL_LIBRARY} PATH)
|
|
||||||
|
|
||||||
MARK_AS_ADVANCED(
|
|
||||||
MYSQL_LIBRARY
|
|
||||||
MYSQL_INCLUDE_DIR
|
|
||||||
)
|
|
||||||
@@ -11,7 +11,7 @@ else (STANDALONE)
|
|||||||
set(FREETYPE_INCLUDE_DIRS
|
set(FREETYPE_INCLUDE_DIRS
|
||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
else (LINUX)
|
else (LINUX)
|
||||||
set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (LINUX)
|
endif (LINUX)
|
||||||
|
|
||||||
set(FREETYPE_LIBRARIES freetype)
|
set(FREETYPE_LIBRARIES freetype)
|
||||||
|
|||||||
@@ -1,16 +1,20 @@
|
|||||||
# -*- cmake -*-
|
# -*- cmake -*-
|
||||||
include(Prebuilt)
|
include(Prebuilt)
|
||||||
|
|
||||||
|
if(WORD_SIZE EQUAL 64)
|
||||||
|
set(DISABLE_TCMALLOC TRUE)
|
||||||
|
endif(WORD_SIZE EQUAL 64)
|
||||||
|
|
||||||
if (STANDALONE)
|
if (STANDALONE)
|
||||||
include(FindGooglePerfTools)
|
include(FindGooglePerfTools)
|
||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
if (LINUX OR WINDOWS)
|
if (LINUX OR WINDOWS AND NOT WORD_SIZE EQUAL 64)
|
||||||
use_prebuilt_binary(google)
|
use_prebuilt_binary(gperftools)
|
||||||
endif (LINUX OR WINDOWS)
|
endif (LINUX OR WINDOWS AND NOT WORD_SIZE EQUAL 64)
|
||||||
if (WINDOWS)
|
if (WINDOWS AND NOT DISABLE_TCMALLOC)
|
||||||
set(TCMALLOC_LIBRARIES libtcmalloc_minimal.lib)
|
set(TCMALLOC_LIBRARIES libtcmalloc_minimal.lib)
|
||||||
set(TCMALLOC_LINKER_FLAGS "/INCLUDE:\"__tcmalloc\"")
|
set(TCMALLOC_LINKER_FLAGS "/INCLUDE:\"__tcmalloc\"")
|
||||||
endif (WINDOWS)
|
endif (WINDOWS AND NOT DISABLE_TCMALLOC)
|
||||||
if (LINUX)
|
if (LINUX)
|
||||||
if(USE_GOOGLE_PERFTOOLS)
|
if(USE_GOOGLE_PERFTOOLS)
|
||||||
set(TCMALLOC_LIBRARIES tcmalloc)
|
set(TCMALLOC_LIBRARIES tcmalloc)
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
# -*- cmake -*-
|
|
||||||
include(Prebuilt)
|
|
||||||
|
|
||||||
if (STANDALONE)
|
|
||||||
include(FindHunSpell)
|
|
||||||
else (STANDALONE)
|
|
||||||
use_prebuilt_binary(hunspell)
|
|
||||||
|
|
||||||
set(HUNSPELL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/hunspell)
|
|
||||||
|
|
||||||
if (LINUX OR DARWIN)
|
|
||||||
set(HUNSPELL_LIBRARY hunspell-1.2)
|
|
||||||
else (LINUX OR DARWIN)
|
|
||||||
set(HUNSPELL_LIBRARY libhunspell)
|
|
||||||
endif (LINUX OR DARWIN)
|
|
||||||
endif (STANDALONE)
|
|
||||||
16
indra/cmake/Hunspell.cmake
Normal file
16
indra/cmake/Hunspell.cmake
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# -*- cmake -*-
|
||||||
|
include(Prebuilt)
|
||||||
|
|
||||||
|
if (STANDALONE)
|
||||||
|
include(FindHunSpell)
|
||||||
|
else (STANDALONE)
|
||||||
|
use_prebuilt_binary(hunspell)
|
||||||
|
|
||||||
|
set(HUNSPELL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/hunspell)
|
||||||
|
|
||||||
|
if (LINUX OR DARWIN)
|
||||||
|
set(HUNSPELL_LIBRARY hunspell-1.3)
|
||||||
|
else (LINUX OR DARWIN)
|
||||||
|
set(HUNSPELL_LIBRARY libhunspell)
|
||||||
|
endif (LINUX OR DARWIN)
|
||||||
|
endif (STANDALONE)
|
||||||
@@ -13,11 +13,11 @@ else (STANDALONE)
|
|||||||
set(JPEG_LIBRARIES jpeg)
|
set(JPEG_LIBRARIES jpeg)
|
||||||
elseif (DARWIN)
|
elseif (DARWIN)
|
||||||
set(JPEG_LIBRARIES
|
set(JPEG_LIBRARIES
|
||||||
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/liblljpeg.a
|
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libjpeg.a
|
||||||
debug ${ARCH_PREBUILT_DIRS_DEBUG}/liblljpeg.a
|
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libjpeg.a
|
||||||
)
|
)
|
||||||
elseif (WINDOWS)
|
elseif (WINDOWS)
|
||||||
set(JPEG_LIBRARIES jpeglib)
|
set(JPEG_LIBRARIES jpeglib)
|
||||||
endif (LINUX)
|
endif (LINUX)
|
||||||
set(JPEG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(JPEG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
include(Prebuilt)
|
include(Prebuilt)
|
||||||
|
|
||||||
set(JSONCPP_FIND_QUIETLY ON)
|
set(JSONCPP_FIND_QUIETLY OFF)
|
||||||
set(JSONCPP_FIND_REQUIRED ON)
|
set(JSONCPP_FIND_REQUIRED ON)
|
||||||
|
|
||||||
if (STANDALONE)
|
if (STANDALONE)
|
||||||
@@ -14,9 +14,9 @@ else (STANDALONE)
|
|||||||
debug json_vc${MSVC_SUFFIX}d
|
debug json_vc${MSVC_SUFFIX}d
|
||||||
optimized json_vc${MSVC_SUFFIX})
|
optimized json_vc${MSVC_SUFFIX})
|
||||||
elseif (DARWIN)
|
elseif (DARWIN)
|
||||||
set(JSONCPP_LIBRARIES json_mac-universal-gcc_libmt)
|
set(JSONCPP_LIBRARIES json_linux-gcc-4.0.1_libmt)
|
||||||
elseif (LINUX)
|
elseif (LINUX)
|
||||||
set(JSONCPP_LIBRARIES jsoncpp)
|
set(JSONCPP_LIBRARIES jsoncpp)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
set(JSONCPP_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/jsoncpp)
|
set(JSONCPP_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/jsoncpp)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -4,12 +4,14 @@ include(CARes)
|
|||||||
include(CURL)
|
include(CURL)
|
||||||
include(OpenSSL)
|
include(OpenSSL)
|
||||||
include(XmlRpcEpi)
|
include(XmlRpcEpi)
|
||||||
|
include(AIStateMachine)
|
||||||
|
|
||||||
set(LLMESSAGE_INCLUDE_DIRS
|
set(LLMESSAGE_INCLUDE_DIRS
|
||||||
${LIBS_OPEN_DIR}/llmessage
|
${LIBS_OPEN_DIR}/llmessage
|
||||||
${CARES_INCLUDE_DIRS}
|
${CARES_INCLUDE_DIRS}
|
||||||
${CURL_INCLUDE_DIRS}
|
${CURL_INCLUDE_DIRS}
|
||||||
${OPENSSL_INCLUDE_DIRS}
|
${OPENSSL_INCLUDE_DIRS}
|
||||||
|
${AISTATEMACHINE_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
set(LLMESSAGE_LIBRARIES llmessage)
|
set(LLMESSAGE_LIBRARIES llmessage aistatemachine)
|
||||||
|
|||||||
11
indra/cmake/LLQtWebkit.cmake
Normal file
11
indra/cmake/LLQtWebkit.cmake
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# -*- cmake -*-
|
||||||
|
|
||||||
|
if (STANDALONE)
|
||||||
|
set(LLQTWEBKIT_INCLUDE_DIR
|
||||||
|
${LIBS_OPEN_DIR}/llqtwebkit
|
||||||
|
)
|
||||||
|
|
||||||
|
set(LLQTWEBKIT_LIBRARY
|
||||||
|
llqtwebkit
|
||||||
|
)
|
||||||
|
endif (STANDALONE)
|
||||||
@@ -8,5 +8,5 @@ set(LLVFS_INCLUDE_DIRS
|
|||||||
|
|
||||||
set(LLVFS_LIBRARIES
|
set(LLVFS_LIBRARIES
|
||||||
llvfs
|
llvfs
|
||||||
${BOOST_REGEX_LIBRARY}
|
${Boost_REGEX_LIBRARY}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -13,15 +13,17 @@ if (STANDALONE)
|
|||||||
SDL_LIBRARY
|
SDL_LIBRARY
|
||||||
)
|
)
|
||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
if (NOT DARWIN)
|
if (LINUX)
|
||||||
use_prebuilt_binary(mesa)
|
use_prebuilt_binary(mesa)
|
||||||
endif (NOT DARWIN)
|
|
||||||
if (LINUX AND VIEWER)
|
|
||||||
use_prebuilt_binary(SDL)
|
use_prebuilt_binary(SDL)
|
||||||
set (SDL_FOUND TRUE)
|
set (SDL_FOUND TRUE)
|
||||||
set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/i686-linux)
|
set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR})
|
||||||
set (SDL_LIBRARY SDL)
|
if(WORD_SIZE EQUAL 64)
|
||||||
endif (LINUX AND VIEWER)
|
set (SDL_LIBRARY SDL)
|
||||||
|
else(WORD_SIZE EQUAL 64)
|
||||||
|
set (SDL_LIBRARY SDL directfb fusion direct)
|
||||||
|
endif(WORD_SIZE EQUAL 64)
|
||||||
|
endif (LINUX)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|
||||||
if (SDL_FOUND)
|
if (SDL_FOUND)
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
# -*- cmake -*-
|
|
||||||
|
|
||||||
set(LLXUIXML_INCLUDE_DIRS
|
|
||||||
${LIBS_OPEN_DIR}/llxuixml
|
|
||||||
)
|
|
||||||
|
|
||||||
set(LLXUIXML_LIBRARIES llxuixml)
|
|
||||||
@@ -6,17 +6,13 @@ if (NOT STANDALONE)
|
|||||||
set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release)
|
set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release)
|
||||||
set(ARCH_PREBUILT_DIRS_DEBUG ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/debug)
|
set(ARCH_PREBUILT_DIRS_DEBUG ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/debug)
|
||||||
elseif (LINUX)
|
elseif (LINUX)
|
||||||
if (VIEWER)
|
set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release)
|
||||||
set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release_client)
|
|
||||||
else (VIEWER)
|
|
||||||
set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release)
|
|
||||||
endif (VIEWER)
|
|
||||||
set(ARCH_PREBUILT_DIRS_RELEASE ${ARCH_PREBUILT_DIRS})
|
set(ARCH_PREBUILT_DIRS_RELEASE ${ARCH_PREBUILT_DIRS})
|
||||||
set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS})
|
set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS})
|
||||||
elseif (DARWIN)
|
elseif (DARWIN)
|
||||||
set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release)
|
set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib)
|
||||||
set(ARCH_PREBUILT_DIRS ${ARCH_PREBUILT_DIRS_RELEASE})
|
set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release)
|
||||||
set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS_RELEASE})
|
set(ARCH_PREBUILT_DIRS_DEBUG ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/debug)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
endif (NOT STANDALONE)
|
endif (NOT STANDALONE)
|
||||||
|
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
# -*- cmake -*-
|
|
||||||
|
|
||||||
set(MONO_PREBUILT_LIBRARIES_DIR ${LIBS_PREBUILT_DIR}/mono/1.0)
|
|
||||||
|
|
||||||
set(MONO_PREBUILT_LIBRARIES
|
|
||||||
Iesi.Collections.dll
|
|
||||||
Iesi.Collections.pdb
|
|
||||||
Mono.CompilerServices.SymbolWriter.dll
|
|
||||||
Mono.PEToolkit.dll
|
|
||||||
Mono.PEToolkit.pdb
|
|
||||||
Mono.Security.dll
|
|
||||||
PEAPI.dll
|
|
||||||
RAIL.dll
|
|
||||||
RAIL.pdb
|
|
||||||
)
|
|
||||||
|
|
||||||
set(MONO_CORE_LIBRARIES
|
|
||||||
System.dll
|
|
||||||
System.Xml.dll
|
|
||||||
mscorlib.dll)
|
|
||||||
|
|
||||||
if(WINDOWS)
|
|
||||||
set(MONO_DEPENDENCIES
|
|
||||||
DomainCreator
|
|
||||||
DomainRegister
|
|
||||||
LslLibrary
|
|
||||||
LslUserScript
|
|
||||||
Script
|
|
||||||
ScriptTypes
|
|
||||||
TestFormat
|
|
||||||
UserScript
|
|
||||||
UThread
|
|
||||||
UThreadInjector
|
|
||||||
)
|
|
||||||
else(WINDOWS)
|
|
||||||
set(MONO_DEPENDENCIES
|
|
||||||
DomainCreator_POST_BUILD
|
|
||||||
DomainRegister_POST_BUILD
|
|
||||||
LslLibrary_POST_BUILD
|
|
||||||
LslUserScript_POST_BUILD
|
|
||||||
Script_POST_BUILD
|
|
||||||
ScriptTypes_POST_BUILD
|
|
||||||
TestFormat_POST_BUILD
|
|
||||||
UserScript_POST_BUILD
|
|
||||||
UThread_POST_BUILD
|
|
||||||
UThreadInjector_POST_BUILD
|
|
||||||
)
|
|
||||||
endif(WINDOWS)
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
# -*- cmake -*-
|
|
||||||
|
|
||||||
include(Prebuilt)
|
|
||||||
use_prebuilt_binary(libmono)
|
|
||||||
|
|
||||||
SET(GLIB_2_0 glib-2.0)
|
|
||||||
|
|
||||||
if (WINDOWS)
|
|
||||||
SET(MONO_LIB mono)
|
|
||||||
else (WINDOWS)
|
|
||||||
SET(MONO_LIB mono)
|
|
||||||
SET(M_LIBRARIES m)
|
|
||||||
SET(GTHREAD_2_0 gthread-2.0)
|
|
||||||
endif(WINDOWS)
|
|
||||||
|
|
||||||
|
|
||||||
IF (DARWIN)
|
|
||||||
|
|
||||||
FIND_LIBRARY(MONO_LIBRARY NAMES Mono)
|
|
||||||
# Find_file doesnt work as expected. Hardcode relative to Mono.framework.
|
|
||||||
#FIND_FILE(GLIB_CONFIG glibconfig.h ${MONO_LIBRARY})
|
|
||||||
#FIND_FILE(MONO_GLIB_LIBRARY glib.h ${MONO_LIBRARY})
|
|
||||||
SET(MONO_GLIB_LIBRARY ${MONO_LIBRARY}/Headers/glib-2.0/)
|
|
||||||
SET(GLIB_CONFIG ${MONO_LIBRARY}/Libraries/glib-2.0/include/)
|
|
||||||
SET(MONO_LIB_DIRECTORY ${MONO_LIBRARY}/Libraries)
|
|
||||||
|
|
||||||
IF (MONO_LIBRARY AND MONO_GLIB_LIBRARY AND GLIB_CONFIG)
|
|
||||||
MESSAGE(STATUS "Found Mono for embedding")
|
|
||||||
INCLUDE_DIRECTORIES(${MONO_GLIB_LIBRARY} ${GLIB_CONFIG})
|
|
||||||
LINK_DIRECTORIES(${MONO_LIB_DIRECTORY})
|
|
||||||
ELSE (MONO_LIBRARY AND MONO_GLIB_LIBRARY AND GLIB_CONFIG)
|
|
||||||
MESSAGE(FATAL_ERROR "Mono not found for embedding")
|
|
||||||
MESSAGE(${MONO_LIBRARY})
|
|
||||||
MESSAGE(${MONO_GLIB_LIBRARY})
|
|
||||||
MESSAGE(${GLIB_CONFIG})
|
|
||||||
ENDIF (MONO_LIBRARY AND MONO_GLIB_LIBRARY AND GLIB_CONFIG)
|
|
||||||
|
|
||||||
ELSE (DARWIN)
|
|
||||||
|
|
||||||
SET(MONO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
|
||||||
SET(GLIB_2_0_PLATFORM_INCLUDE_DIR
|
|
||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0)
|
|
||||||
SET(GLIB_2_0_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/glib-2.0)
|
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(
|
|
||||||
${MONO_INCLUDE_DIR}
|
|
||||||
${GLIB_2_0_PLATFORM_INCLUDE_DIR}
|
|
||||||
${GLIB_2_0_INCLUDE_DIR})
|
|
||||||
|
|
||||||
ENDIF (DARWIN)
|
|
||||||
|
|
||||||
SET(MONO_LIBRARIES
|
|
||||||
${MONO_LIB}
|
|
||||||
${M_LIBRARIES}
|
|
||||||
${GLIB_2_0}
|
|
||||||
${GTHREAD_2_0}
|
|
||||||
)
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# -*- cmake -*-
|
|
||||||
include(Linking)
|
|
||||||
include(Prebuilt)
|
|
||||||
|
|
||||||
use_prebuilt_binary(mysql)
|
|
||||||
|
|
||||||
if (LINUX)
|
|
||||||
if (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")
|
|
||||||
set(MYSQL_LIBRARIES mysqlclient)
|
|
||||||
set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
|
||||||
else (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")
|
|
||||||
# Use the native MySQL library on a 64-bit system.
|
|
||||||
set(MYSQL_FIND_QUIETLY ON)
|
|
||||||
set(MYSQL_FIND_REQUIRED ON)
|
|
||||||
include(FindMySQL)
|
|
||||||
endif (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")
|
|
||||||
elseif (WINDOWS)
|
|
||||||
set(MYSQL_LIBRARIES mysqlclient)
|
|
||||||
set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
|
||||||
elseif (DARWIN)
|
|
||||||
set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
|
||||||
set(MYSQL_LIBRARIES
|
|
||||||
optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libmysqlclient.a
|
|
||||||
debug ${ARCH_PREBUILT_DIRS_DEBUG}/libmysqlclient.a
|
|
||||||
)
|
|
||||||
endif (LINUX)
|
|
||||||
@@ -15,7 +15,7 @@ else (STANDALONE)
|
|||||||
set(NDOF_LIBRARY ndofdev)
|
set(NDOF_LIBRARY ndofdev)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
|
|
||||||
set(NDOF_INCLUDE_DIR ${ARCH_PREBUILT_DIRS}/include/ndofdev)
|
set(NDOF_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/ndofdev)
|
||||||
set(NDOF_FOUND 1)
|
set(NDOF_FOUND 1)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ if (OPENAL)
|
|||||||
openal
|
openal
|
||||||
alut
|
alut
|
||||||
)
|
)
|
||||||
|
set(OPENAL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (OPENAL)
|
endif (OPENAL)
|
||||||
|
|
||||||
if (OPENAL)
|
if (OPENAL)
|
||||||
|
|||||||
@@ -6,5 +6,5 @@ if (NOT (STANDALONE OR DARWIN))
|
|||||||
# possible glh_linear should have its own .cmake file instead
|
# possible glh_linear should have its own .cmake file instead
|
||||||
#use_prebuilt_binary(glh_linear)
|
#use_prebuilt_binary(glh_linear)
|
||||||
# actually... not any longer, it's now in git -SG
|
# actually... not any longer, it's now in git -SG
|
||||||
set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif ()
|
endif ()
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ include(Prebuilt)
|
|||||||
set(OpenSSL_FIND_QUIETLY ON)
|
set(OpenSSL_FIND_QUIETLY ON)
|
||||||
set(OpenSSL_FIND_REQUIRED ON)
|
set(OpenSSL_FIND_REQUIRED ON)
|
||||||
|
|
||||||
if (STANDALONE)
|
if (STANDALONE OR USE_SYSTEM_OPENSSL)
|
||||||
include(FindOpenSSL)
|
include(FindOpenSSL)
|
||||||
else (STANDALONE)
|
else (STANDALONE OR USE_SYSTEM_OPENSSL)
|
||||||
use_prebuilt_binary(openSSL)
|
use_prebuilt_binary(openSSL)
|
||||||
if (WINDOWS)
|
if (WINDOWS)
|
||||||
set(OPENSSL_LIBRARIES ssleay32 libeay32)
|
set(OPENSSL_LIBRARIES ssleay32 libeay32)
|
||||||
@@ -14,10 +14,8 @@ else (STANDALONE)
|
|||||||
set(OPENSSL_LIBRARIES ssl)
|
set(OPENSSL_LIBRARIES ssl)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE OR USE_SYSTEM_OPENSSL)
|
||||||
|
|
||||||
if (LINUX)
|
if (LINUX OR DARWIN)
|
||||||
set(CRYPTO_LIBRARIES crypto)
|
set(CRYPTO_LIBRARIES crypto)
|
||||||
elseif (DARWIN)
|
endif (LINUX OR DARWIN)
|
||||||
set(CRYPTO_LIBRARIES llcrypto)
|
|
||||||
endif (LINUX)
|
|
||||||
|
|||||||
@@ -10,8 +10,10 @@ else (STANDALONE)
|
|||||||
use_prebuilt_binary(libpng)
|
use_prebuilt_binary(libpng)
|
||||||
if (WINDOWS)
|
if (WINDOWS)
|
||||||
set(PNG_LIBRARIES libpng15)
|
set(PNG_LIBRARIES libpng15)
|
||||||
else (WINDOWS)
|
elseif(DARWIN)
|
||||||
set(PNG_LIBRARIES png12)
|
set(PNG_LIBRARIES png15)
|
||||||
endif (WINDOWS)
|
else(LINUX)
|
||||||
set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(PNG_LIBRARIES png15)
|
||||||
|
endif()
|
||||||
|
set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
2
indra/cmake/PulseAudio.cmake
Executable file → Normal file
2
indra/cmake/PulseAudio.cmake
Executable file → Normal file
@@ -13,7 +13,7 @@ if (PULSEAUDIO)
|
|||||||
use_prebuilt_binary(pulseaudio)
|
use_prebuilt_binary(pulseaudio)
|
||||||
set(PULSEAUDIO_FOUND ON FORCE BOOL)
|
set(PULSEAUDIO_FOUND ON FORCE BOOL)
|
||||||
set(PULSEAUDIO_INCLUDE_DIRS
|
set(PULSEAUDIO_INCLUDE_DIRS
|
||||||
${LIBS_PREBUILT_DIR}/include
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include
|
||||||
)
|
)
|
||||||
# We don't need to explicitly link against pulseaudio itself, because
|
# We don't need to explicitly link against pulseaudio itself, because
|
||||||
# the viewer probes for the system's copy at runtime.
|
# the viewer probes for the system's copy at runtime.
|
||||||
|
|||||||
12
indra/cmake/Qt4.cmake
Normal file
12
indra/cmake/Qt4.cmake
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# -*- cmake -*-
|
||||||
|
include(Prebuilt)
|
||||||
|
|
||||||
|
if (STANDALONE)
|
||||||
|
set(Qt4_FIND_REQUIRED ON)
|
||||||
|
|
||||||
|
include(FindQt4)
|
||||||
|
|
||||||
|
find_package(Qt4 4.7.0 COMPONENTS QtCore QtGui QtNetwork QtOpenGL QtWebKit REQUIRED)
|
||||||
|
include(${QT_USE_FILE})
|
||||||
|
add_definitions(${QT_DEFINITIONS})
|
||||||
|
endif (STANDALONE)
|
||||||
4
indra/cmake/StateMachine.cmake
Normal file
4
indra/cmake/StateMachine.cmake
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# -*- cmake -*-
|
||||||
|
|
||||||
|
set(STATEMACHINE_INCLUDE_DIRS statemachine)
|
||||||
|
set(STATEMACHINE_LIBRARIES statemachine)
|
||||||
@@ -31,11 +31,9 @@ if (STANDALONE)
|
|||||||
add_definitions(${${pkg}_CFLAGS_OTHERS})
|
add_definitions(${${pkg}_CFLAGS_OTHERS})
|
||||||
endforeach(pkg)
|
endforeach(pkg)
|
||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
if (NOT DARWIN)
|
if (LINUX)
|
||||||
use_prebuilt_binary(glib) # gtk-etc needs glib
|
use_prebuilt_binary(glib) # gtk-etc needs glib
|
||||||
use_prebuilt_binary(gtk-atk-pango-glib)
|
use_prebuilt_binary(gtk-atk-pango-glib)
|
||||||
endif (NOT DARWIN)
|
|
||||||
if (LINUX)
|
|
||||||
set(UI_LIBRARIES
|
set(UI_LIBRARIES
|
||||||
atk-1.0
|
atk-1.0
|
||||||
X11
|
X11
|
||||||
@@ -60,7 +58,6 @@ else (STANDALONE)
|
|||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include
|
||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/cairo
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/cairo
|
||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/pixman-1
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/pixman-1
|
||||||
${LIBS_PREBUILT_DIR}/include
|
|
||||||
)
|
)
|
||||||
foreach(include ${${LL_ARCH}_INCLUDES})
|
foreach(include ${${LL_ARCH}_INCLUDES})
|
||||||
include_directories(${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/${include})
|
include_directories(${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/${include})
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ set(LIBS_SERVER_DIR ${CMAKE_SOURCE_DIR}/${LIBS_SERVER_PREFIX})
|
|||||||
set(SCRIPTS_DIR ${CMAKE_SOURCE_DIR}/${SCRIPTS_PREFIX})
|
set(SCRIPTS_DIR ${CMAKE_SOURCE_DIR}/${SCRIPTS_PREFIX})
|
||||||
set(SERVER_DIR ${CMAKE_SOURCE_DIR}/${SERVER_PREFIX})
|
set(SERVER_DIR ${CMAKE_SOURCE_DIR}/${SERVER_PREFIX})
|
||||||
set(VIEWER_DIR ${CMAKE_SOURCE_DIR}/${VIEWER_PREFIX})
|
set(VIEWER_DIR ${CMAKE_SOURCE_DIR}/${VIEWER_PREFIX})
|
||||||
|
set(DISABLE_TCMALLOC OFF CACHE BOOL "Disable linkage of TCMalloc. (64bit builds automatically disable TCMalloc)")
|
||||||
set(LL_TESTS OFF CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation)")
|
set(LL_TESTS OFF CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation)")
|
||||||
set(VISTA_ICON OFF CACHE BOOL "Allow vista icon with pre 2008 Visual Studio IDEs. (Assumes replacement old rcdll.dll with new rcdll.dll from win sdk 7.0 or later)")
|
set(VISTA_ICON OFF CACHE BOOL "Allow vista icon with pre 2008 Visual Studio IDEs. (Assumes replacement old rcdll.dll with new rcdll.dll from win sdk 7.0 or later)")
|
||||||
|
|
||||||
@@ -76,37 +77,36 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
|||||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||||
set(DARWIN 1)
|
set(DARWIN 1)
|
||||||
|
|
||||||
#SDK Compiler and Deployment targets for XCode
|
if(${CMAKE_GENERATOR} MATCHES Xcode)
|
||||||
if (${XCODE_VERSION} VERSION_LESS 4.0.0)
|
#SDK Compiler and Deployment targets for XCode
|
||||||
set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk)
|
if (${XCODE_VERSION} VERSION_LESS 4.0.0)
|
||||||
set(CMAKE_XCODE_ATTIBUTE_GCC_VERSION "4.2")
|
set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk)
|
||||||
else (${XCODE_VERSION} VERSION_LESS 4.0.0)
|
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5)
|
||||||
|
set(CMAKE_XCODE_ATTIBUTE_GCC_VERSION "4.2")
|
||||||
|
else (${XCODE_VERSION} VERSION_LESS 4.0.0)
|
||||||
|
set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.6.sdk)
|
||||||
|
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6)
|
||||||
|
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
|
||||||
|
endif (${XCODE_VERSION} VERSION_LESS 4.0.0)
|
||||||
|
else()
|
||||||
set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.6.sdk)
|
set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.6.sdk)
|
||||||
|
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6)
|
||||||
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
|
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
|
||||||
endif (${XCODE_VERSION} VERSION_LESS 4.0.0)
|
endif(${CMAKE_GENERATOR} MATCHES Xcode)
|
||||||
|
|
||||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5)
|
## We currently support only 32-bit i386 builds, so use these:
|
||||||
|
set(CMAKE_OSX_ARCHITECTURES i386)
|
||||||
|
set(ARCH i386)
|
||||||
|
set(WORD_SIZE 32)
|
||||||
|
|
||||||
# NOTE: To attempt an i386/PPC Universal build, add this on the configure line:
|
## But if you want to compile for mixed 32/64 bit, try these:
|
||||||
# -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc'
|
# set(CMAKE_OSX_ARCHITECTURES i386;x86_64)
|
||||||
# Build only for i386 by default, system default on MacOSX 10.6 is x86_64
|
# set(ARCH universal)
|
||||||
if (NOT CMAKE_OSX_ARCHITECTURES)
|
# set(WORD_SIZE 64)
|
||||||
set(CMAKE_OSX_ARCHITECTURES i386)
|
|
||||||
endif (NOT CMAKE_OSX_ARCHITECTURES)
|
|
||||||
|
|
||||||
if (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc")
|
|
||||||
set(ARCH universal)
|
|
||||||
else (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc")
|
|
||||||
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc")
|
|
||||||
set(ARCH ppc)
|
|
||||||
else (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc")
|
|
||||||
set(ARCH i386)
|
|
||||||
endif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc")
|
|
||||||
endif (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc")
|
|
||||||
|
|
||||||
|
## Finally, set up the build output directories
|
||||||
set(LL_ARCH ${ARCH}_darwin)
|
set(LL_ARCH ${ARCH}_darwin)
|
||||||
set(LL_ARCH_DIR universal-darwin)
|
set(LL_ARCH_DIR universal-darwin)
|
||||||
set(WORD_SIZE 32)
|
|
||||||
endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,3 @@ else (NOT STANDALONE)
|
|||||||
endif(LINUX AND ${ARCH} STREQUAL "x86_64")
|
endif(LINUX AND ${ARCH} STREQUAL "x86_64")
|
||||||
set(STANDALONE ON)
|
set(STANDALONE ON)
|
||||||
endif(NOT STANDALONE)
|
endif(NOT STANDALONE)
|
||||||
|
|
||||||
if (WINDOWS)
|
|
||||||
use_prebuilt_binary(dbghelp)
|
|
||||||
endif (WINDOWS)
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,31 +1,10 @@
|
|||||||
# -*- cmake -*-
|
# -*- cmake -*-
|
||||||
include(Linking)
|
include(Linking)
|
||||||
include(Prebuilt)
|
include(Prebuilt)
|
||||||
|
include(LLQtWebkit)
|
||||||
|
include(Qt4)
|
||||||
|
|
||||||
if (STANDALONE)
|
if (STANDALONE)
|
||||||
# The minimal version, 4.4.3, is rather arbitrary: it's the version in Debian/Lenny.
|
|
||||||
find_package(Qt4 4.4.3 COMPONENTS QtCore QtGui QtNetwork QtOpenGL QtWebKit REQUIRED)
|
|
||||||
include(${QT_USE_FILE})
|
|
||||||
set(QTDIR $ENV{QTDIR})
|
|
||||||
if (QTDIR AND NOT "${QT_BINARY_DIR}" STREQUAL "${QTDIR}/bin")
|
|
||||||
message(FATAL_ERROR "\"${QT_BINARY_DIR}\" is unequal \"${QTDIR}/bin\"; "
|
|
||||||
"Qt is found by looking for qmake in your PATH. "
|
|
||||||
"Please set your PATH such that 'qmake' is found in \$QTDIR/bin, "
|
|
||||||
"or unset QTDIR if the found Qt is correct.")
|
|
||||||
endif (QTDIR AND NOT "${QT_BINARY_DIR}" STREQUAL "${QTDIR}/bin")
|
|
||||||
find_package(LLQtWebkit REQUIRED QUIET)
|
|
||||||
# Add the plugins.
|
|
||||||
set(QT_PLUGIN_LIBRARIES)
|
|
||||||
foreach(qlibname qgif qjpeg)
|
|
||||||
find_library(QT_PLUGIN_${qlibname} ${qlibname} PATHS ${QT_PLUGINS_DIR}/imageformats NO_DEFAULT_PATH)
|
|
||||||
if (QT_PLUGIN_${qlibname})
|
|
||||||
list(APPEND QT_PLUGIN_LIBRARIES ${QT_PLUGIN_${qlibname}})
|
|
||||||
else (QT_PLUGIN_${qtlibname})
|
|
||||||
message(FATAL_ERROR "Could not find the Qt plugin ${qlibname} in \"${QT_PLUGINS_DIR}/imageformats\"!")
|
|
||||||
endif (QT_PLUGIN_${qlibname})
|
|
||||||
endforeach(qlibname)
|
|
||||||
# qjpeg depends on libjpeg
|
|
||||||
list(APPEND QT_PLUGIN_LIBRARIES jpeg)
|
|
||||||
set(WEBKITLIBPLUGIN OFF CACHE BOOL
|
set(WEBKITLIBPLUGIN OFF CACHE BOOL
|
||||||
"WEBKITLIBPLUGIN support for the llplugin/llmedia test apps.")
|
"WEBKITLIBPLUGIN support for the llplugin/llmedia test apps.")
|
||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ if (STANDALONE)
|
|||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
use_prebuilt_binary(xmlrpc-epi)
|
use_prebuilt_binary(xmlrpc-epi)
|
||||||
set(XMLRPCEPI_LIBRARIES xmlrpc-epi)
|
set(XMLRPCEPI_LIBRARIES xmlrpc-epi)
|
||||||
set(XMLRPCEPI_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
|
set(XMLRPCEPI_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -17,6 +17,6 @@ else (STANDALONE)
|
|||||||
set(ZLIB_LIBRARIES z)
|
set(ZLIB_LIBRARIES z)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
if (WINDOWS OR LINUX)
|
if (WINDOWS OR LINUX)
|
||||||
set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib)
|
set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/zlib)
|
||||||
endif (WINDOWS OR LINUX)
|
endif (WINDOWS OR LINUX)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
# -*- cmake -*-
|
|
||||||
|
|
||||||
project(cwdebug)
|
|
||||||
|
|
||||||
include(00-Common)
|
|
||||||
include(LLCommon)
|
|
||||||
include(LLMath)
|
|
||||||
include(LLMessage)
|
|
||||||
include(LLVFS)
|
|
||||||
|
|
||||||
include_directories (${CMAKE_CURRENT_SOURCE_DIR})
|
|
||||||
|
|
||||||
set(cwdebug_SOURCE_FILES
|
|
||||||
debug.cc
|
|
||||||
)
|
|
||||||
|
|
||||||
set(cwdebug_HEADER_FILES
|
|
||||||
CMakeLists.txt
|
|
||||||
|
|
||||||
cwdebug.h
|
|
||||||
sys.h
|
|
||||||
debug.h
|
|
||||||
debug_ostream_operators.h
|
|
||||||
)
|
|
||||||
|
|
||||||
set_source_files_properties(${cwdebug_HEADER_FILES}
|
|
||||||
PROPERTIES HEADER_FILE_ONLY TRUE)
|
|
||||||
|
|
||||||
if(NOT WORD_SIZE EQUAL 32)
|
|
||||||
if(WINDOWS)
|
|
||||||
add_definitions(/FIXED:NO)
|
|
||||||
else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
|
|
||||||
add_definitions(-fPIC)
|
|
||||||
endif(WINDOWS)
|
|
||||||
endif (NOT WORD_SIZE EQUAL 32)
|
|
||||||
|
|
||||||
list(APPEND cwdebug_SOURCE_FILES ${cwdebug_HEADER_FILES})
|
|
||||||
|
|
||||||
add_library (cwdebug ${cwdebug_SOURCE_FILES})
|
|
||||||
@@ -49,6 +49,8 @@
|
|||||||
namespace debug {
|
namespace debug {
|
||||||
|
|
||||||
#if CWDEBUG_LOCATION
|
#if CWDEBUG_LOCATION
|
||||||
|
ll_thread_local size_t BackTrace::S_number;
|
||||||
|
|
||||||
void BackTrace::dump_backtrace(void) const
|
void BackTrace::dump_backtrace(void) const
|
||||||
{
|
{
|
||||||
for (int frame = 0; frame < frames(); ++frame)
|
for (int frame = 0; frame < frames(); ++frame)
|
||||||
@@ -67,6 +69,67 @@ void BackTrace::dump_backtrace(void) const
|
|||||||
Dout(dc::finish, mangled_function_name);
|
Dout(dc::finish, mangled_function_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BackTraces::store_trace(size_t trace)
|
||||||
|
{
|
||||||
|
mBackTraces.push_back(trace);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BackTraces::remove_trace(size_t trace)
|
||||||
|
{
|
||||||
|
trace_container_type::iterator iter = mBackTraces.begin();
|
||||||
|
while (iter != mBackTraces.end())
|
||||||
|
{
|
||||||
|
if (*iter == trace)
|
||||||
|
{
|
||||||
|
*iter = mBackTraces.back();
|
||||||
|
mBackTraces.pop_back();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
++iter;
|
||||||
|
}
|
||||||
|
DoutFatal(dc::core, "Trace doesn't exist!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void BackTraces::dump(void) const
|
||||||
|
{
|
||||||
|
Dout(dc::backtrace|continued_cf, "Dump for (BackTraces*)" << (void*)this << " (" << mBackTraces.size() << " backtraces): ");
|
||||||
|
for (trace_container_type::const_iterator iter = mBackTraces.begin(); iter != mBackTraces.end(); ++iter)
|
||||||
|
{
|
||||||
|
Dout(dc::continued|nonewline_cf, *iter << ' ');
|
||||||
|
}
|
||||||
|
Dout(dc::finish, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
BackTraceTracker::BackTraceTracker(BackTraces* back_traces) : mBackTraces(back_traces)
|
||||||
|
{
|
||||||
|
BACKTRACE;
|
||||||
|
mTrace = BackTrace::S_number;
|
||||||
|
mBackTraces->store_trace(mTrace);
|
||||||
|
}
|
||||||
|
|
||||||
|
BackTraceTracker::~BackTraceTracker()
|
||||||
|
{
|
||||||
|
mBackTraces->remove_trace(mTrace);
|
||||||
|
}
|
||||||
|
|
||||||
|
BackTraceTracker::BackTraceTracker(BackTraceTracker const& orig) : mBackTraces(orig.mBackTraces)
|
||||||
|
{
|
||||||
|
BACKTRACE;
|
||||||
|
mTrace = BackTrace::S_number;
|
||||||
|
mBackTraces->store_trace(mTrace);
|
||||||
|
}
|
||||||
|
|
||||||
|
BackTraceTracker& BackTraceTracker::operator=(BackTraceTracker const& orig)
|
||||||
|
{
|
||||||
|
mBackTraces->remove_trace(mTrace);
|
||||||
|
mBackTraces = orig.mBackTraces;
|
||||||
|
BACKTRACE;
|
||||||
|
mTrace = BackTrace::S_number;
|
||||||
|
mBackTraces->store_trace(mTrace);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // CWDEBUG_LOCATION
|
#endif // CWDEBUG_LOCATION
|
||||||
|
|
||||||
#if CWDEBUG_ALLOC && CWDEBUG_LOCATION
|
#if CWDEBUG_ALLOC && CWDEBUG_LOCATION
|
||||||
@@ -173,6 +236,10 @@ void stop_recording_backtraces(void)
|
|||||||
channel_ct backtrace DDCN("BACKTRACE"); //!< This debug channel is used for backtraces.
|
channel_ct backtrace DDCN("BACKTRACE"); //!< This debug channel is used for backtraces.
|
||||||
channel_ct statemachine DDCN("STATEMACHINE"); //!< This debug channel is used for output related to class AIStateMachine.
|
channel_ct statemachine DDCN("STATEMACHINE"); //!< This debug channel is used for output related to class AIStateMachine.
|
||||||
channel_ct caps DDCN("CAPS"); //!< This debug channel is used for output related to Capabilities.
|
channel_ct caps DDCN("CAPS"); //!< This debug channel is used for output related to Capabilities.
|
||||||
|
channel_ct curl DDCN("CURL"); //!< This debug channel is used for output related to AICurl.
|
||||||
|
channel_ct curlio DDCN("CURLIO"); //!< This debug channel is used to print debug output of libcurl. This includes all HTTP network traffic.
|
||||||
|
channel_ct curltr DDCN("CURLTR"); //!< This debug channel is used to print libcurl API calls.
|
||||||
|
channel_ct snapshot DDCN("SNAPSHOT"); //!< This debug channel is used for output related to snapshots.
|
||||||
|
|
||||||
} // namespace dc
|
} // namespace dc
|
||||||
} // namespace DEBUGCHANNELS
|
} // namespace DEBUGCHANNELS
|
||||||
@@ -411,4 +478,94 @@ void cwdebug_backtrace(int n)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // CWDEBUG
|
#elif defined(DEBUG_CURLIO)
|
||||||
|
|
||||||
|
#include "debug.h"
|
||||||
|
#include "aithreadid.h"
|
||||||
|
|
||||||
|
namespace debug
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace libcwd { libcwd_do_type const libcw_do; }
|
||||||
|
|
||||||
|
ll_thread_local int Indent::S_indentation;
|
||||||
|
|
||||||
|
Indent::Indent(int indent) : M_indent(indent)
|
||||||
|
{
|
||||||
|
S_indentation += M_indent;
|
||||||
|
}
|
||||||
|
|
||||||
|
Indent::~Indent()
|
||||||
|
{
|
||||||
|
S_indentation -= M_indent;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream& os, Indent::print_nt)
|
||||||
|
{
|
||||||
|
if (Indent::S_indentation)
|
||||||
|
os << std::string(Indent::S_indentation, ' ');
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG_CURLIO
|
||||||
|
std::ostream& operator<<(std::ostream& os, print_thread_id_t)
|
||||||
|
{
|
||||||
|
if (!AIThreadID::in_main_thread_inline())
|
||||||
|
{
|
||||||
|
os << std::hex << (size_t)AIThreadID::getCurrentThread_inline() << std::dec << ' ';
|
||||||
|
}
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream& os, libcwd::buf2str const& b2s)
|
||||||
|
{
|
||||||
|
static char const c2s_tab[7] = { 'a', 'b', 't', 'n', 'v', 'f', 'r' };
|
||||||
|
size_t size = b2s.mSize;
|
||||||
|
for (char const* p1 = b2s.mBuf; size > 0; --size, ++p1)
|
||||||
|
{
|
||||||
|
char c =*p1;
|
||||||
|
if ((c > 31 && c != 92 && c != 127) || (unsigned char)c > 159)
|
||||||
|
os.put(c);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
os.put('\\');
|
||||||
|
if (c > 6 && c < 14)
|
||||||
|
{
|
||||||
|
os.put(c2s_tab[c - 7]);
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
else if (c == 27)
|
||||||
|
{
|
||||||
|
os.put('e');
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
else if (c == '\\')
|
||||||
|
{
|
||||||
|
os.put('\\');
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
std::ostream::char_type old_fill = os.fill('0');
|
||||||
|
std::ios_base::fmtflags old_flgs = os.flags();
|
||||||
|
os.width(3);
|
||||||
|
os << std::oct << (int)((unsigned char)c);
|
||||||
|
os.setf(old_flgs);
|
||||||
|
os.fill(old_fill);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace dc
|
||||||
|
{
|
||||||
|
|
||||||
|
fake_channel const warning(1, "WARNING ");
|
||||||
|
fake_channel const curl(1, "CURL ");
|
||||||
|
fake_channel const curlio(1, "CURLIO ");
|
||||||
|
fake_channel const statemachine(1, "STATEMACHINE");
|
||||||
|
fake_channel const notice(1, "NOTICE ");
|
||||||
|
|
||||||
|
} // namespace dc
|
||||||
|
} // namespace debug
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -27,6 +27,94 @@
|
|||||||
|
|
||||||
#ifndef CWDEBUG
|
#ifndef CWDEBUG
|
||||||
|
|
||||||
|
#ifdef DEBUG_CURLIO
|
||||||
|
|
||||||
|
// If CWDEBUG is not defined, but DEBUG_CURLIO is, then replace
|
||||||
|
// some of the cwd macro's with something that generates viewer
|
||||||
|
// specific debug output. Note that this generates a LOT of
|
||||||
|
// output and should not normally be defined.
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include "llpreprocessor.h"
|
||||||
|
|
||||||
|
namespace debug {
|
||||||
|
namespace libcwd {
|
||||||
|
|
||||||
|
struct buf2str {
|
||||||
|
buf2str(char const* buf, int size) : mBuf(buf), mSize(size) { }
|
||||||
|
char const* mBuf;
|
||||||
|
int mSize;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct libcwd_do_type {
|
||||||
|
void on() const { }
|
||||||
|
};
|
||||||
|
extern LL_COMMON_API libcwd_do_type const libcw_do;
|
||||||
|
|
||||||
|
} // namespace libcwd
|
||||||
|
|
||||||
|
enum print_thread_id_t { print_thread_id };
|
||||||
|
inline void init() { }
|
||||||
|
struct Indent {
|
||||||
|
int M_indent;
|
||||||
|
static ll_thread_local int S_indentation;
|
||||||
|
enum LL_COMMON_API print_nt { print };
|
||||||
|
LL_COMMON_API Indent(int indent);
|
||||||
|
LL_COMMON_API ~Indent();
|
||||||
|
};
|
||||||
|
|
||||||
|
extern LL_COMMON_API std::ostream& operator<<(std::ostream& os, libcwd::buf2str const& b2s);
|
||||||
|
extern LL_COMMON_API std::ostream& operator<<(std::ostream& os, Indent::print_nt);
|
||||||
|
extern LL_COMMON_API std::ostream& operator<<(std::ostream& os, print_thread_id_t);
|
||||||
|
|
||||||
|
namespace dc {
|
||||||
|
|
||||||
|
struct fake_channel {
|
||||||
|
int mOn;
|
||||||
|
char const* mLabel;
|
||||||
|
fake_channel(int on, char const* label) : mOn(on), mLabel(label) { }
|
||||||
|
fake_channel(void) : mOn(0) { }
|
||||||
|
bool is_on() const { return !!mOn; }
|
||||||
|
bool is_off() const { return !mOn; }
|
||||||
|
void on() const { }
|
||||||
|
void off() const { }
|
||||||
|
};
|
||||||
|
extern LL_COMMON_API fake_channel const warning;
|
||||||
|
extern LL_COMMON_API fake_channel const curl;
|
||||||
|
extern LL_COMMON_API fake_channel const curlio;
|
||||||
|
extern LL_COMMON_API fake_channel const statemachine;
|
||||||
|
extern LL_COMMON_API fake_channel const notice;
|
||||||
|
|
||||||
|
} // namespace dc
|
||||||
|
} // namespace debug
|
||||||
|
|
||||||
|
#define LIBCWD_DEBUG_CHANNELS debug
|
||||||
|
#define LibcwDoutScopeBegin(a, b, c) do { using namespace debug; using namespace debug::libcwd; llinfos_nf << print_thread_id << (c).mLabel << ": " << Indent::print;
|
||||||
|
#define LibcwDoutStream llcont
|
||||||
|
#define LibcwDoutScopeEnd llcont << llendl; } while(0)
|
||||||
|
|
||||||
|
#define Debug(x) do { using namespace debug; using namespace debug::libcwd; x; } while(0)
|
||||||
|
#define Dout(a, b) do { using namespace debug; using namespace debug::libcwd; if ((a).mOn) { llinfos_nf << print_thread_id << (a).mLabel << ": " << Indent::print << b << llendl; } } while(0)
|
||||||
|
#define DoutEntering(a, b) \
|
||||||
|
int __slviewer_debug_indentation = 2; \
|
||||||
|
{ \
|
||||||
|
using namespace debug; \
|
||||||
|
using namespace debug::libcwd; \
|
||||||
|
if ((a).mOn) \
|
||||||
|
llinfos_nf << print_thread_id << (a).mLabel << ": " << Indent::print << "Entering " << b << llendl; \
|
||||||
|
else \
|
||||||
|
__slviewer_debug_indentation = 0; \
|
||||||
|
} \
|
||||||
|
debug::Indent __slviewer_debug_indent(__slviewer_debug_indentation);
|
||||||
|
|
||||||
|
#else // !DEBUG_CURLIO
|
||||||
|
|
||||||
|
#define Debug(x)
|
||||||
|
#define Dout(a, b)
|
||||||
|
#define DoutEntering(a, b)
|
||||||
|
|
||||||
|
#endif // !DEBUG_CURLIO
|
||||||
|
|
||||||
#ifndef DOXYGEN // No need to document this. See http://libcwd.sourceforge.net/ for more info.
|
#ifndef DOXYGEN // No need to document this. See http://libcwd.sourceforge.net/ for more info.
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@@ -36,9 +124,6 @@
|
|||||||
#define AllocTag2(p, desc)
|
#define AllocTag2(p, desc)
|
||||||
#define AllocTag_dynamic_description(p, x)
|
#define AllocTag_dynamic_description(p, x)
|
||||||
#define AllocTag(p, x)
|
#define AllocTag(p, x)
|
||||||
#define Debug(x)
|
|
||||||
#define Dout(a, b)
|
|
||||||
#define DoutEntering(a, b)
|
|
||||||
#define DoutFatal(a, b) LibcwDoutFatal(::std, , a, b)
|
#define DoutFatal(a, b) LibcwDoutFatal(::std, , a, b)
|
||||||
#define ForAllDebugChannels(STATEMENT)
|
#define ForAllDebugChannels(STATEMENT)
|
||||||
#define ForAllDebugObjects(STATEMENT)
|
#define ForAllDebugObjects(STATEMENT)
|
||||||
@@ -88,7 +173,9 @@
|
|||||||
#include <boost/shared_array.hpp>
|
#include <boost/shared_array.hpp>
|
||||||
#if CWDEBUG_LOCATION
|
#if CWDEBUG_LOCATION
|
||||||
#include <execinfo.h> // Needed for 'backtrace'.
|
#include <execinfo.h> // Needed for 'backtrace'.
|
||||||
|
#include "llpreprocessor.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include <set>
|
||||||
|
|
||||||
#define CWD_API __attribute__ ((visibility("default")))
|
#define CWD_API __attribute__ ((visibility("default")))
|
||||||
|
|
||||||
@@ -118,6 +205,10 @@ extern CWD_API channel_ct sdl;
|
|||||||
extern CWD_API channel_ct backtrace;
|
extern CWD_API channel_ct backtrace;
|
||||||
extern CWD_API channel_ct statemachine;
|
extern CWD_API channel_ct statemachine;
|
||||||
extern CWD_API channel_ct caps;
|
extern CWD_API channel_ct caps;
|
||||||
|
extern CWD_API channel_ct curl;
|
||||||
|
extern CWD_API channel_ct curlio;
|
||||||
|
extern CWD_API channel_ct curltr;
|
||||||
|
extern CWD_API channel_ct snapshot;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -186,6 +277,8 @@ class BackTrace {
|
|||||||
private:
|
private:
|
||||||
boost::shared_array<void*> M_buffer;
|
boost::shared_array<void*> M_buffer;
|
||||||
int M_frames;
|
int M_frames;
|
||||||
|
public:
|
||||||
|
static ll_thread_local size_t S_number;
|
||||||
public:
|
public:
|
||||||
BackTrace(void** buffer, int frames) : M_buffer(new void* [frames]), M_frames(frames) { std::memcpy(M_buffer.get(), buffer, sizeof(void*) * frames); }
|
BackTrace(void** buffer, int frames) : M_buffer(new void* [frames]), M_frames(frames) { std::memcpy(M_buffer.get(), buffer, sizeof(void*) * frames); }
|
||||||
|
|
||||||
@@ -212,19 +305,81 @@ extern pthread_mutex_t backtrace_mutex;
|
|||||||
using namespace debug; \
|
using namespace debug; \
|
||||||
void* buffer[32]; \
|
void* buffer[32]; \
|
||||||
int frames = backtrace(buffer, 32); \
|
int frames = backtrace(buffer, 32); \
|
||||||
size_t size; \
|
|
||||||
{ \
|
{ \
|
||||||
pthread_mutex_lock(&backtrace_mutex); \
|
pthread_mutex_lock(&backtrace_mutex); \
|
||||||
backtraces.push_back(BackTrace(buffer, frames)); \
|
backtraces.push_back(BackTrace(buffer, frames)); \
|
||||||
size = backtraces.size(); \
|
BackTrace::S_number = backtraces.size(); \
|
||||||
pthread_mutex_unlock(&backtrace_mutex); \
|
pthread_mutex_unlock(&backtrace_mutex); \
|
||||||
} \
|
} \
|
||||||
Dout(dc::backtrace, "Stored backtrace #" << size); \
|
Dout(dc::backtrace, "Stored backtrace #" << BackTrace::S_number); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
|
class LL_COMMON_API BackTraces {
|
||||||
|
private:
|
||||||
|
typedef std::vector<size_t> trace_container_type;
|
||||||
|
trace_container_type mBackTraces;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void store_trace(size_t trace);
|
||||||
|
void remove_trace(size_t trace);
|
||||||
|
|
||||||
|
void dump(void) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
class LL_COMMON_API BackTraceTracker {
|
||||||
|
private:
|
||||||
|
BackTraces* mBackTraces;
|
||||||
|
size_t mTrace;
|
||||||
|
|
||||||
|
public:
|
||||||
|
BackTraceTracker(BackTraces* back_traces);
|
||||||
|
~BackTraceTracker();
|
||||||
|
|
||||||
|
BackTraceTracker(BackTraceTracker const&);
|
||||||
|
BackTraceTracker& operator=(BackTraceTracker const&);
|
||||||
|
|
||||||
|
void dump(void) const { mBackTraces->dump(); }
|
||||||
|
};
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define BACKTRACE do { } while(0)
|
#define BACKTRACE do { } while(0)
|
||||||
#endif // CWDEBUG_LOCATION
|
#endif // CWDEBUG_LOCATION
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
class LL_COMMON_API InstanceTracker {
|
||||||
|
private:
|
||||||
|
T const* mInstance;
|
||||||
|
static pthread_mutex_t sInstancesMutex;
|
||||||
|
static std::set<T const*> sInstances;
|
||||||
|
static void remember(T const* instance) { pthread_mutex_lock(&sInstancesMutex); sInstances.insert(instance); pthread_mutex_unlock(&sInstancesMutex); }
|
||||||
|
static void forget(T const* instance) { pthread_mutex_lock(&sInstancesMutex); sInstances.erase(instance); pthread_mutex_unlock(&sInstancesMutex); }
|
||||||
|
public:
|
||||||
|
InstanceTracker(T const* instance) : mInstance(instance) { remember(mInstance); }
|
||||||
|
~InstanceTracker() { forget(mInstance); }
|
||||||
|
InstanceTracker& operator=(InstanceTracker const& orig) { forget(mInstance); mInstance = orig.mInstance; remember(mInstance); return *this; }
|
||||||
|
static void dump(void);
|
||||||
|
private:
|
||||||
|
// Non-copyable. Instead of copying, call InstanceTracker(T const*) with the this pointer of the new instance.
|
||||||
|
InstanceTracker(InstanceTracker const& orig);
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
pthread_mutex_t InstanceTracker<T>::sInstancesMutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
std::set<T const*> InstanceTracker<T>::sInstances;
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void InstanceTracker<T>::dump(void)
|
||||||
|
{
|
||||||
|
pthread_mutex_lock(&sInstancesMutex);
|
||||||
|
for (typename std::set<T const*>::iterator iter = sInstances.begin(); iter != sInstances.end(); ++iter)
|
||||||
|
{
|
||||||
|
std::cout << *iter << std::endl;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&sInstancesMutex);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace debug
|
} // namespace debug
|
||||||
|
|
||||||
//! Debugging macro.
|
//! Debugging macro.
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ def quote(opts):
|
|||||||
class PlatformSetup(object):
|
class PlatformSetup(object):
|
||||||
generator = None
|
generator = None
|
||||||
build_types = {}
|
build_types = {}
|
||||||
for t in ('Debug', 'Release', 'ReleaseSSE2', 'RelWithDebInfo'):
|
for t in ('Debug', 'Release', 'RelWithDebInfo'):
|
||||||
build_types[t.lower()] = t
|
build_types[t.lower()] = t
|
||||||
|
|
||||||
build_type = build_types['relwithdebinfo']
|
build_type = build_types['relwithdebinfo']
|
||||||
@@ -764,7 +764,7 @@ Options:
|
|||||||
--unattended build unattended, do not invoke any tools requiring
|
--unattended build unattended, do not invoke any tools requiring
|
||||||
a human response
|
a human response
|
||||||
--universal build a universal binary on Mac OS X (unsupported)
|
--universal build a universal binary on Mac OS X (unsupported)
|
||||||
-t | --type=NAME build type ("Debug", "Release", "ReleaseSSE2", or "RelWithDebInfo")
|
-t | --type=NAME build type ("Debug", "Release", or "RelWithDebInfo")
|
||||||
-m32 | -m64 build architecture (32-bit or 64-bit)
|
-m32 | -m64 build architecture (32-bit or 64-bit)
|
||||||
-N | --no-distcc disable use of distcc
|
-N | --no-distcc disable use of distcc
|
||||||
-G | --generator=NAME generator name
|
-G | --generator=NAME generator name
|
||||||
@@ -782,13 +782,14 @@ Commands:
|
|||||||
|
|
||||||
Command-options for "configure":
|
Command-options for "configure":
|
||||||
We use cmake variables to change the build configuration.
|
We use cmake variables to change the build configuration.
|
||||||
-DSERVER:BOOL=OFF Don't configure simulator/dataserver/etc
|
-DSERVER:BOOL=OFF Don't configure simulator/dataserver/etc
|
||||||
-DVIEWER:BOOL=OFF Don't configure the viewer
|
-DVIEWER:BOOL=OFF Don't configure the viewer
|
||||||
-DPACKAGE:BOOL=ON Create "package" target to make installers
|
-DPACKAGE:BOOL=ON Create "package" target to make installers
|
||||||
-DLOCALIZESETUP:BOOL=ON Create one win_setup target per supported language
|
-DLOCALIZESETUP:BOOL=ON Create one win_setup target per supported language
|
||||||
-DLL_TESTS:BOOL=OFF Don't generate unit test projects
|
-DLL_TESTS:BOOL=OFF Don't generate unit test projects
|
||||||
-DEXAMPLEPLUGIN:BOOL=OFF Don't generate example plugin project
|
-DEXAMPLEPLUGIN:BOOL=OFF Don't generate example plugin project
|
||||||
-VISTA_ICON:BOOL=ON Allow pre-2008 VS to use vista-optimized resource file. (Requires updated rcdll.dll!)
|
-DDISABLE_TCMALLOC:BOOL=ON Disable linkage of TCMalloc. (64bit builds automatically disable TCMalloc)
|
||||||
|
-DVISTA_ICON:BOOL=ON Allow pre-2008 VS to use vista-optimized resource file. (Requires updated rcdll.dll!)
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
Set up a viewer-only project for your system:
|
Set up a viewer-only project for your system:
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ ARGUMENTS=[
|
|||||||
On Linux this would try to use Linux_i686Manifest.""",
|
On Linux this would try to use Linux_i686Manifest.""",
|
||||||
default=""),
|
default=""),
|
||||||
dict(name='build', description='Build directory.', default=DEFAULT_SRCTREE),
|
dict(name='build', description='Build directory.', default=DEFAULT_SRCTREE),
|
||||||
dict(name='buildtype', description="""The build type used. ('Debug', 'Release', 'ReleaseSSE2' or 'RelWithDebInfo')
|
dict(name='buildtype', description="""The build type used. ('Debug', 'Release', or 'RelWithDebInfo')
|
||||||
Default is Release """,
|
Default is Release """,
|
||||||
default="Release"),
|
default="Release"),
|
||||||
dict(name='branding_id', description="""Identifier for the branding set to
|
dict(name='branding_id', description="""Identifier for the branding set to
|
||||||
|
|||||||
@@ -7,14 +7,15 @@ include(00-Common)
|
|||||||
|
|
||||||
# OPENJPEG version number, useful for packaging and doxygen doc:
|
# OPENJPEG version number, useful for packaging and doxygen doc:
|
||||||
set(OPENJPEG_VERSION_MAJOR 1)
|
set(OPENJPEG_VERSION_MAJOR 1)
|
||||||
set(OPENJPEG_VERSION_MINOR 4)
|
set(OPENJPEG_VERSION_MINOR 5)
|
||||||
set(OPENJPEG_VERSION_BUILD 0)
|
set(OPENJPEG_VERSION_BUILD 2)
|
||||||
set(OPENJPEG_VERSION
|
set(OPENJPEG_VERSION
|
||||||
"${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}")
|
"${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}")
|
||||||
|
|
||||||
set(openjpeg_SOURCE_FILES
|
set(openjpeg_SOURCE_FILES
|
||||||
bio.c
|
bio.c
|
||||||
cio.c
|
cio.c
|
||||||
|
cidx_manager.c
|
||||||
dwt.c
|
dwt.c
|
||||||
event.c
|
event.c
|
||||||
image.c
|
image.c
|
||||||
@@ -26,20 +27,26 @@ set(openjpeg_SOURCE_FILES
|
|||||||
mqc.c
|
mqc.c
|
||||||
openjpeg.c
|
openjpeg.c
|
||||||
pi.c
|
pi.c
|
||||||
|
phix_manager.c
|
||||||
|
ppix_manager.c
|
||||||
raw.c
|
raw.c
|
||||||
t1.c
|
t1.c
|
||||||
t2.c
|
t2.c
|
||||||
tcd.c
|
tcd.c
|
||||||
tgt.c
|
tgt.c
|
||||||
|
thix_manager.c
|
||||||
|
tpix_manager.c
|
||||||
)
|
)
|
||||||
|
|
||||||
set(openjpeg_HEADER_FILES
|
set(openjpeg_HEADER_FILES
|
||||||
bio.h
|
bio.h
|
||||||
cio.h
|
cio.h
|
||||||
|
cidx_manager.h
|
||||||
dwt.h
|
dwt.h
|
||||||
event.h
|
event.h
|
||||||
fix.h
|
fix.h
|
||||||
image.h
|
image.h
|
||||||
|
indexbox_manager.h
|
||||||
int.h
|
int.h
|
||||||
j2k.h
|
j2k.h
|
||||||
j2k_lib.h
|
j2k_lib.h
|
||||||
@@ -48,6 +55,7 @@ set(openjpeg_HEADER_FILES
|
|||||||
mct.h
|
mct.h
|
||||||
mqc.h
|
mqc.h
|
||||||
openjpeg.h
|
openjpeg.h
|
||||||
|
opj_config.h
|
||||||
opj_includes.h
|
opj_includes.h
|
||||||
opj_malloc.h
|
opj_malloc.h
|
||||||
pi.h
|
pi.h
|
||||||
|
|||||||
211
indra/libopenjpeg/cidx_manager.c
Normal file
211
indra/libopenjpeg/cidx_manager.c
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
/*
|
||||||
|
* $Id: cidx_manager.c 897 2011-08-28 21:43:57Z Kaori.Hagihara@gmail.com $
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
|
||||||
|
* Copyright (c) 2002-2011, Professor Benoit Macq
|
||||||
|
* Copyright (c) 2003-2004, Yannick Verschueren
|
||||||
|
* Copyright (c) 2010-2011, Kaori Hagihara
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. 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.
|
||||||
|
*
|
||||||
|
* 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 OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "opj_includes.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write CPTR Codestream finder box
|
||||||
|
*
|
||||||
|
* @param[in] coff offset of j2k codestream
|
||||||
|
* @param[in] clen length of j2k codestream
|
||||||
|
* @param[in] cio file output handle
|
||||||
|
*/
|
||||||
|
void write_cptr(int coff, int clen, opj_cio_t *cio);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write main header index table (box)
|
||||||
|
*
|
||||||
|
* @param[in] coff offset of j2k codestream
|
||||||
|
* @param[in] cstr_info codestream information
|
||||||
|
* @param[in] cio file output handle
|
||||||
|
* @return length of mainmhix box
|
||||||
|
*/
|
||||||
|
int write_mainmhix( int coff, opj_codestream_info_t cstr_info, opj_cio_t *cio);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if EPH option is used
|
||||||
|
*
|
||||||
|
* @param[in] coff offset of j2k codestream
|
||||||
|
* @param[in] markers marker information
|
||||||
|
* @param[in] marknum number of markers
|
||||||
|
* @param[in] cio file output handle
|
||||||
|
* @return true if EPH is used
|
||||||
|
*/
|
||||||
|
opj_bool check_EPHuse( int coff, opj_marker_info_t *markers, int marknum, opj_cio_t *cio);
|
||||||
|
|
||||||
|
|
||||||
|
int write_cidx( int offset, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t cstr_info, int j2klen)
|
||||||
|
{
|
||||||
|
int len, i, lenp;
|
||||||
|
opj_jp2_box_t *box;
|
||||||
|
int num_box = 0;
|
||||||
|
opj_bool EPHused;
|
||||||
|
(void)image; /* unused ? */
|
||||||
|
|
||||||
|
lenp = -1;
|
||||||
|
box = (opj_jp2_box_t *)opj_calloc( 32, sizeof(opj_jp2_box_t));
|
||||||
|
|
||||||
|
for (i=0;i<2;i++){
|
||||||
|
|
||||||
|
if(i)
|
||||||
|
cio_seek( cio, lenp);
|
||||||
|
|
||||||
|
lenp = cio_tell( cio);
|
||||||
|
|
||||||
|
cio_skip( cio, 4); /* L [at the end] */
|
||||||
|
cio_write( cio, JPIP_CIDX, 4); /* CIDX */
|
||||||
|
write_cptr( offset, cstr_info.codestream_size, cio);
|
||||||
|
|
||||||
|
write_manf( i, num_box, box, cio);
|
||||||
|
|
||||||
|
num_box = 0;
|
||||||
|
box[num_box].length = write_mainmhix( offset, cstr_info, cio);
|
||||||
|
box[num_box].type = JPIP_MHIX;
|
||||||
|
num_box++;
|
||||||
|
|
||||||
|
box[num_box].length = write_tpix( offset, cstr_info, j2klen, cio);
|
||||||
|
box[num_box].type = JPIP_TPIX;
|
||||||
|
num_box++;
|
||||||
|
|
||||||
|
box[num_box].length = write_thix( offset, cstr_info, cio);
|
||||||
|
box[num_box].type = JPIP_THIX;
|
||||||
|
num_box++;
|
||||||
|
|
||||||
|
EPHused = check_EPHuse( offset, cstr_info.marker, cstr_info.marknum, cio);
|
||||||
|
|
||||||
|
box[num_box].length = write_ppix( offset, cstr_info, EPHused, j2klen, cio);
|
||||||
|
box[num_box].type = JPIP_PPIX;
|
||||||
|
num_box++;
|
||||||
|
|
||||||
|
box[num_box].length = write_phix( offset, cstr_info, EPHused, j2klen, cio);
|
||||||
|
box[num_box].type = JPIP_PHIX;
|
||||||
|
num_box++;
|
||||||
|
|
||||||
|
len = cio_tell( cio)-lenp;
|
||||||
|
cio_seek( cio, lenp);
|
||||||
|
cio_write( cio, len, 4); /* L */
|
||||||
|
cio_seek( cio, lenp+len);
|
||||||
|
}
|
||||||
|
|
||||||
|
opj_free( box);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
void write_cptr(int coff, int clen, opj_cio_t *cio)
|
||||||
|
{
|
||||||
|
int len, lenp;
|
||||||
|
|
||||||
|
lenp = cio_tell( cio);
|
||||||
|
cio_skip( cio, 4); /* L [at the end] */
|
||||||
|
cio_write( cio, JPIP_CPTR, 4); /* T */
|
||||||
|
cio_write( cio, 0, 2); /* DR A PRECISER !! */
|
||||||
|
cio_write( cio, 0, 2); /* CONT */
|
||||||
|
cio_write( cio, coff, 8); /* COFF A PRECISER !! */
|
||||||
|
cio_write( cio, clen, 8); /* CLEN */
|
||||||
|
len = cio_tell( cio) - lenp;
|
||||||
|
cio_seek( cio, lenp);
|
||||||
|
cio_write( cio, len, 4); /* L */
|
||||||
|
cio_seek( cio, lenp+len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void write_manf(int second, int v, opj_jp2_box_t *box, opj_cio_t *cio)
|
||||||
|
{
|
||||||
|
int len, lenp, i;
|
||||||
|
|
||||||
|
lenp = cio_tell( cio);
|
||||||
|
cio_skip( cio, 4); /* L [at the end] */
|
||||||
|
cio_write( cio, JPIP_MANF,4); /* T */
|
||||||
|
|
||||||
|
if (second){ /* Write only during the second pass */
|
||||||
|
for( i=0; i<v; i++){
|
||||||
|
cio_write( cio, box[i].length, 4); /* Box length */
|
||||||
|
cio_write( cio, box[i].type, 4); /* Box type */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
len = cio_tell( cio) - lenp;
|
||||||
|
cio_seek( cio, lenp);
|
||||||
|
cio_write( cio, len, 4); /* L */
|
||||||
|
cio_seek( cio, lenp+len);
|
||||||
|
}
|
||||||
|
|
||||||
|
int write_mainmhix( int coff, opj_codestream_info_t cstr_info, opj_cio_t *cio)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int len, lenp;
|
||||||
|
|
||||||
|
lenp = cio_tell( cio);
|
||||||
|
cio_skip( cio, 4); /* L [at the end] */
|
||||||
|
cio_write( cio, JPIP_MHIX, 4); /* MHIX */
|
||||||
|
|
||||||
|
cio_write( cio, cstr_info.main_head_end-cstr_info.main_head_start+1, 8); /* TLEN */
|
||||||
|
|
||||||
|
for(i = 1; i < cstr_info.marknum; i++){ /* Marker restricted to 1 apparition, skip SOC marker */
|
||||||
|
cio_write( cio, cstr_info.marker[i].type, 2);
|
||||||
|
cio_write( cio, 0, 2);
|
||||||
|
cio_write( cio, cstr_info.marker[i].pos-coff, 8);
|
||||||
|
cio_write( cio, cstr_info.marker[i].len, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
len = cio_tell( cio) - lenp;
|
||||||
|
cio_seek( cio, lenp);
|
||||||
|
cio_write( cio, len, 4); /* L */
|
||||||
|
cio_seek( cio, lenp+len);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
opj_bool check_EPHuse( int coff, opj_marker_info_t *markers, int marknum, opj_cio_t *cio)
|
||||||
|
{
|
||||||
|
opj_bool EPHused = OPJ_FALSE;
|
||||||
|
int i=0;
|
||||||
|
int org_pos;
|
||||||
|
unsigned int Scod;
|
||||||
|
|
||||||
|
for(i = 0; i < marknum; i++){
|
||||||
|
if( markers[i].type == J2K_MS_COD){
|
||||||
|
org_pos = cio_tell( cio);
|
||||||
|
cio_seek( cio, coff+markers[i].pos+2);
|
||||||
|
|
||||||
|
Scod = cio_read( cio, 1);
|
||||||
|
if( ((Scod >> 2) & 1))
|
||||||
|
EPHused = OPJ_TRUE;
|
||||||
|
cio_seek( cio, org_pos);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return EPHused;
|
||||||
|
}
|
||||||
56
indra/libopenjpeg/cidx_manager.h
Normal file
56
indra/libopenjpeg/cidx_manager.h
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* $Id: cidx_manager.h 897 2011-08-28 21:43:57Z Kaori.Hagihara@gmail.com $
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
|
||||||
|
* Copyright (c) 2002-2011, Professor Benoit Macq
|
||||||
|
* Copyright (c) 2003-2004, Yannick Verschueren
|
||||||
|
* Copyright (c) 2010-2011, Kaori Hagihara
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. 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.
|
||||||
|
*
|
||||||
|
* 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 OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
* \brief Modification of jpip.h from 2KAN indexer
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef CIDX_MANAGER_H_
|
||||||
|
# define CIDX_MANAGER_H_
|
||||||
|
|
||||||
|
#include "openjpeg.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write Codestream index box (superbox)
|
||||||
|
*
|
||||||
|
* @param[in] offset offset of j2k codestream
|
||||||
|
* @param[in] cio file output handle
|
||||||
|
* @param[in] image image data
|
||||||
|
* @param[in] cstr_info codestream information
|
||||||
|
* @param[in] j2klen length of j2k codestream
|
||||||
|
* @return length of cidx box
|
||||||
|
*/
|
||||||
|
int write_cidx( int offset, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t cstr_info, int j2klen);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* !CIDX_MANAGER_H_ */
|
||||||
@@ -126,13 +126,13 @@ unsigned char *cio_getbp(opj_cio_t *cio) {
|
|||||||
/*
|
/*
|
||||||
* Write a byte.
|
* Write a byte.
|
||||||
*/
|
*/
|
||||||
bool cio_byteout(opj_cio_t *cio, unsigned char v) {
|
opj_bool cio_byteout(opj_cio_t *cio, unsigned char v) {
|
||||||
if (cio->bp >= cio->end) {
|
if (cio->bp >= cio->end) {
|
||||||
opj_event_msg(cio->cinfo, EVT_ERROR, "write error\n");
|
opj_event_msg(cio->cinfo, EVT_ERROR, "write error\n");
|
||||||
return false;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
*cio->bp++ = v;
|
*cio->bp++ = v;
|
||||||
return true;
|
return OPJ_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -152,7 +152,7 @@ unsigned char cio_bytein(opj_cio_t *cio) {
|
|||||||
* v : value to write
|
* v : value to write
|
||||||
* n : number of bytes to write
|
* n : number of bytes to write
|
||||||
*/
|
*/
|
||||||
unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n) {
|
unsigned int cio_write(opj_cio_t *cio, unsigned int64 v, int n) {
|
||||||
int i;
|
int i;
|
||||||
for (i = n - 1; i >= 0; i--) {
|
for (i = n - 1; i >= 0; i--) {
|
||||||
if( !cio_byteout(cio, (unsigned char) ((v >> (i << 3)) & 0xff)) )
|
if( !cio_byteout(cio, (unsigned char) ((v >> (i << 3)) & 0xff)) )
|
||||||
|
|||||||
@@ -31,6 +31,13 @@
|
|||||||
|
|
||||||
#ifndef __CIO_H
|
#ifndef __CIO_H
|
||||||
#define __CIO_H
|
#define __CIO_H
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) || defined(__BORLANDC__)
|
||||||
|
#define int64 __int64
|
||||||
|
#else
|
||||||
|
#define int64 long long
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@file cio.h
|
@file cio.h
|
||||||
@brief Implementation of a byte input-output process (CIO)
|
@brief Implementation of a byte input-output process (CIO)
|
||||||
@@ -63,7 +70,7 @@ Write some bytes
|
|||||||
@param n Number of bytes to write
|
@param n Number of bytes to write
|
||||||
@return Returns the number of bytes written or 0 if an error occured
|
@return Returns the number of bytes written or 0 if an error occured
|
||||||
*/
|
*/
|
||||||
unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n);
|
unsigned int cio_write(opj_cio_t *cio, unsigned int64 v, int n);
|
||||||
/**
|
/**
|
||||||
Read some bytes
|
Read some bytes
|
||||||
@param cio CIO handle
|
@param cio CIO handle
|
||||||
|
|||||||
@@ -64,12 +64,12 @@ typedef struct v4dwt_local {
|
|||||||
int cas ;
|
int cas ;
|
||||||
} v4dwt_t ;
|
} v4dwt_t ;
|
||||||
|
|
||||||
static const float dwt_alpha = 1.586134342f; // 12994
|
static const float dwt_alpha = 1.586134342f; /* 12994 */
|
||||||
static const float dwt_beta = 0.052980118f; // 434
|
static const float dwt_beta = 0.052980118f; /* 434 */
|
||||||
static const float dwt_gamma = -0.882911075f; // -7233
|
static const float dwt_gamma = -0.882911075f; /* -7233 */
|
||||||
static const float dwt_delta = -0.443506852f; // -3633
|
static const float dwt_delta = -0.443506852f; /* -3633 */
|
||||||
|
|
||||||
static const float K = 1.230174105f; // 10078
|
static const float K = 1.230174105f; /* 10078 */
|
||||||
/* FIXME: What is this constant? */
|
/* FIXME: What is this constant? */
|
||||||
static const float c13318 = 1.625732422f;
|
static const float c13318 = 1.625732422f;
|
||||||
|
|
||||||
@@ -527,7 +527,7 @@ static void dwt_decode_tile(opj_tcd_tilecomp_t* tilec, int numres, DWT1DFN dwt_1
|
|||||||
|
|
||||||
int w = tilec->x1 - tilec->x0;
|
int w = tilec->x1 - tilec->x0;
|
||||||
|
|
||||||
h.mem = (int *)opj_aligned_malloc(dwt_decode_max_resolution(tr, numres) * sizeof(int));
|
h.mem = (int*)opj_aligned_malloc(dwt_decode_max_resolution(tr, numres) * sizeof(int));
|
||||||
v.mem = h.mem;
|
v.mem = h.mem;
|
||||||
|
|
||||||
while( --numres) {
|
while( --numres) {
|
||||||
@@ -570,7 +570,7 @@ static void v4dwt_interleave_h(v4dwt_t* restrict w, float* restrict a, int x, in
|
|||||||
int count = w->sn;
|
int count = w->sn;
|
||||||
int i, k;
|
int i, k;
|
||||||
for(k = 0; k < 2; ++k){
|
for(k = 0; k < 2; ++k){
|
||||||
if (count + 3 * x < size && ((long) a & 0x0f) == 0 && ((long) bi & 0x0f) == 0 && (x & 0x0f) == 0) {
|
if (count + 3 * x < size && ((size_t) a & 0x0f) == 0 && ((size_t) bi & 0x0f) == 0 && (x & 0x0f) == 0) {
|
||||||
/* Fast code path */
|
/* Fast code path */
|
||||||
for(i = 0; i < count; ++i){
|
for(i = 0; i < count; ++i){
|
||||||
int j = i;
|
int j = i;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Hervé Drolon, FreeImage Team
|
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||||
* All rights reserved.
|
* 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
|
||||||
@@ -26,6 +26,42 @@
|
|||||||
|
|
||||||
#include "opj_includes.h"
|
#include "opj_includes.h"
|
||||||
|
|
||||||
|
/* ==========================================================
|
||||||
|
Utility functions
|
||||||
|
==========================================================*/
|
||||||
|
|
||||||
|
#ifdef OPJ_CODE_NOT_USED
|
||||||
|
#ifndef _WIN32
|
||||||
|
static char*
|
||||||
|
i2a(unsigned i, char *a, unsigned r) {
|
||||||
|
if (i/r > 0) a = i2a(i/r,a,r);
|
||||||
|
*a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%r];
|
||||||
|
return a+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Transforms integer i into an ascii string and stores the result in a;
|
||||||
|
string is encoded in the base indicated by r.
|
||||||
|
@param i Number to be converted
|
||||||
|
@param a String result
|
||||||
|
@param r Base of value; must be in the range 2 - 36
|
||||||
|
@return Returns a
|
||||||
|
*/
|
||||||
|
static char *
|
||||||
|
_itoa(int i, char *a, int r) {
|
||||||
|
r = ((r < 2) || (r > 36)) ? 10 : r;
|
||||||
|
if(i < 0) {
|
||||||
|
*a = '-';
|
||||||
|
*i2a(-i, a+1, r) = 0;
|
||||||
|
}
|
||||||
|
else *i2a(i, a, r) = 0;
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !_WIN32 */
|
||||||
|
#endif
|
||||||
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context) {
|
opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context) {
|
||||||
if(cinfo) {
|
if(cinfo) {
|
||||||
opj_event_mgr_t *previous = cinfo->event_mgr;
|
opj_event_mgr_t *previous = cinfo->event_mgr;
|
||||||
@@ -37,7 +73,7 @@ opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) {
|
opj_bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) {
|
||||||
#define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */
|
#define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */
|
||||||
opj_msg_callback msg_handler = NULL;
|
opj_msg_callback msg_handler = NULL;
|
||||||
|
|
||||||
@@ -57,30 +93,29 @@ bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(msg_handler == NULL) {
|
if(msg_handler == NULL) {
|
||||||
return false;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((fmt != NULL) && (event_mgr != NULL)) {
|
if ((fmt != NULL) && (event_mgr != NULL)) {
|
||||||
va_list arg;
|
va_list arg;
|
||||||
int str_length/*, i, j*/; /* UniPG */
|
int str_length/*, i, j*/; /* UniPG */
|
||||||
char message[MSG_SIZE];
|
char message[MSG_SIZE];
|
||||||
memset(message, 0, MSG_SIZE);
|
|
||||||
/* initialize the optional parameter list */
|
/* initialize the optional parameter list */
|
||||||
va_start(arg, fmt);
|
va_start(arg, fmt);
|
||||||
/* check the length of the format string */
|
|
||||||
str_length = (strlen(fmt) > MSG_SIZE) ? MSG_SIZE : strlen(fmt);
|
|
||||||
/* parse the format string and put the result in 'message' */
|
/* parse the format string and put the result in 'message' */
|
||||||
vsprintf(message, fmt, arg); /* UniPG */
|
str_length = vsnprintf(message, MSG_SIZE, fmt, arg); /* UniPG */
|
||||||
/* deinitialize the optional parameter list */
|
/* deinitialize the optional parameter list */
|
||||||
va_end(arg);
|
va_end(arg);
|
||||||
|
|
||||||
/* output the message to the user program */
|
/* output the message to the user program */
|
||||||
msg_handler(message, cinfo->client_data);
|
if( str_length > -1 && str_length < MSG_SIZE )
|
||||||
|
msg_handler(message, cinfo->client_data);
|
||||||
|
else return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return OPJ_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Herv<EFBFBD> Drolon, FreeImage Team
|
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||||
* All rights reserved.
|
* 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
|
||||||
@@ -49,7 +49,7 @@ Write formatted data to a string and send the string to a user callback.
|
|||||||
@param fmt Format-control string (plus optionnal arguments)
|
@param fmt Format-control string (plus optionnal arguments)
|
||||||
@return Returns true if successful, returns false otherwise
|
@return Returns true if successful, returns false otherwise
|
||||||
*/
|
*/
|
||||||
bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...);
|
opj_bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...);
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Herv Drolon, FreeImage Team
|
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||||
* All rights reserved.
|
* 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
|
||||||
@@ -28,7 +28,6 @@
|
|||||||
|
|
||||||
opj_image_t* opj_image_create0(void) {
|
opj_image_t* opj_image_create0(void) {
|
||||||
opj_image_t *image = (opj_image_t*)opj_calloc(1, sizeof(opj_image_t));
|
opj_image_t *image = (opj_image_t*)opj_calloc(1, sizeof(opj_image_t));
|
||||||
image->comps=NULL;
|
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Herv<EFBFBD> Drolon, FreeImage Team
|
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||||
* All rights reserved.
|
* 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
|
||||||
|
|||||||
118
indra/libopenjpeg/indexbox_manager.h
Normal file
118
indra/libopenjpeg/indexbox_manager.h
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* $Id: indexbox_manager.h 897 2011-08-28 21:43:57Z Kaori.Hagihara@gmail.com $
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
|
||||||
|
* Copyright (c) 2002-2011, Professor Benoit Macq
|
||||||
|
* Copyright (c) 2003-2004, Yannick Verschueren
|
||||||
|
* Copyright (c) 2010-2011, Kaori Hagihara
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. 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.
|
||||||
|
*
|
||||||
|
* 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 OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
* \brief Modification of jpip.c from 2KAN indexer
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INDEXBOX_MANAGER_H_
|
||||||
|
# define INDEXBOX_MANAGER_H_
|
||||||
|
|
||||||
|
#include "openjpeg.h"
|
||||||
|
#include "j2k.h" /* needed to use jp2.h */
|
||||||
|
#include "jp2.h"
|
||||||
|
|
||||||
|
#define JPIP_CIDX 0x63696478 /* Codestream index */
|
||||||
|
#define JPIP_CPTR 0x63707472 /* Codestream Finder Box */
|
||||||
|
#define JPIP_MANF 0x6d616e66 /* Manifest Box */
|
||||||
|
#define JPIP_FAIX 0x66616978 /* Fragment array Index box */
|
||||||
|
#define JPIP_MHIX 0x6d686978 /* Main Header Index Table */
|
||||||
|
#define JPIP_TPIX 0x74706978 /* Tile-part Index Table box */
|
||||||
|
#define JPIP_THIX 0x74686978 /* Tile header Index Table box */
|
||||||
|
#define JPIP_PPIX 0x70706978 /* Precinct Packet Index Table box */
|
||||||
|
#define JPIP_PHIX 0x70686978 /* Packet Header index Table */
|
||||||
|
#define JPIP_FIDX 0x66696478 /* File Index */
|
||||||
|
#define JPIP_FPTR 0x66707472 /* File Finder */
|
||||||
|
#define JPIP_PRXY 0x70727879 /* Proxy boxes */
|
||||||
|
#define JPIP_IPTR 0x69707472 /* Index finder box */
|
||||||
|
#define JPIP_PHLD 0x70686c64 /* Place holder */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write tile-part Index table box (superbox)
|
||||||
|
*
|
||||||
|
* @param[in] coff offset of j2k codestream
|
||||||
|
* @param[in] cstr_info codestream information
|
||||||
|
* @param[in] j2klen length of j2k codestream
|
||||||
|
* @param[in] cio file output handle
|
||||||
|
* @return length of tpix box
|
||||||
|
*/
|
||||||
|
int write_tpix( int coff, opj_codestream_info_t cstr_info, int j2klen, opj_cio_t *cio);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write tile header index table box (superbox)
|
||||||
|
*
|
||||||
|
* @param[in] coff offset of j2k codestream
|
||||||
|
* @param[in] cstr_info codestream information pointer
|
||||||
|
* @param[in] cio file output handle
|
||||||
|
* @return length of thix box
|
||||||
|
*/
|
||||||
|
int write_thix( int coff, opj_codestream_info_t cstr_info, opj_cio_t *cio);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write precinct packet index table box (superbox)
|
||||||
|
*
|
||||||
|
* @param[in] coff offset of j2k codestream
|
||||||
|
* @param[in] cstr_info codestream information
|
||||||
|
* @param[in] EPHused true if EPH option used
|
||||||
|
* @param[in] j2klen length of j2k codestream
|
||||||
|
* @param[in] cio file output handle
|
||||||
|
* @return length of ppix box
|
||||||
|
*/
|
||||||
|
int write_ppix( int coff, opj_codestream_info_t cstr_info, opj_bool EPHused, int j2klen, opj_cio_t *cio);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write packet header index table box (superbox)
|
||||||
|
*
|
||||||
|
* @param[in] coff offset of j2k codestream
|
||||||
|
* @param[in] cstr_info codestream information
|
||||||
|
* @param[in] EPHused true if EPH option used
|
||||||
|
* @param[in] j2klen length of j2k codestream
|
||||||
|
* @param[in] cio file output handle
|
||||||
|
* @return length of ppix box
|
||||||
|
*/
|
||||||
|
int write_phix( int coff, opj_codestream_info_t cstr_info, opj_bool EPHused, int j2klen, opj_cio_t *cio);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wriet manifest box (box)
|
||||||
|
*
|
||||||
|
* @param[in] second number to be visited
|
||||||
|
* @param[in] v number of boxes
|
||||||
|
* @param[in] box box to be manifested
|
||||||
|
* @param[in] cio file output handle
|
||||||
|
*/
|
||||||
|
void write_manf(int second, int v, opj_jp2_box_t *box, opj_cio_t *cio);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* !INDEXBOX_MANAGER_H_ */
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
|
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
|
||||||
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||||
* Copyright (c) 2006-2007, Parvatha Elangovan
|
* Copyright (c) 2006-2007, Parvatha Elangovan
|
||||||
|
* Copyright (c) 2010-2011, Kaori Hagihara
|
||||||
* All rights reserved.
|
* 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
|
||||||
@@ -228,6 +229,23 @@ Read an unknown marker
|
|||||||
@param j2k J2K handle
|
@param j2k J2K handle
|
||||||
*/
|
*/
|
||||||
static void j2k_read_unk(opj_j2k_t *j2k);
|
static void j2k_read_unk(opj_j2k_t *j2k);
|
||||||
|
/**
|
||||||
|
Add main header marker information
|
||||||
|
@param cstr_info Codestream information structure
|
||||||
|
@param type marker type
|
||||||
|
@param pos byte offset of marker segment
|
||||||
|
@param len length of marker segment
|
||||||
|
*/
|
||||||
|
static void j2k_add_mhmarker(opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len);
|
||||||
|
/**
|
||||||
|
Add tile header marker information
|
||||||
|
@param tileno tile index number
|
||||||
|
@param cstr_info Codestream information structure
|
||||||
|
@param type marker type
|
||||||
|
@param pos byte offset of marker segment
|
||||||
|
@param len length of marker segment
|
||||||
|
*/
|
||||||
|
static void j2k_add_tlmarker( int tileno, opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len);
|
||||||
|
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
@@ -258,80 +276,6 @@ char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order){
|
|||||||
return po->str_prog;
|
return po->str_prog;
|
||||||
}
|
}
|
||||||
|
|
||||||
void j2k_dump_image(FILE *fd, opj_image_t * img) {
|
|
||||||
int compno;
|
|
||||||
fprintf(fd, "image {\n");
|
|
||||||
fprintf(fd, " x0=%d, y0=%d, x1=%d, y1=%d\n", img->x0, img->y0, img->x1, img->y1);
|
|
||||||
fprintf(fd, " numcomps=%d\n", img->numcomps);
|
|
||||||
for (compno = 0; compno < img->numcomps; compno++) {
|
|
||||||
opj_image_comp_t *comp = &img->comps[compno];
|
|
||||||
fprintf(fd, " comp %d {\n", compno);
|
|
||||||
fprintf(fd, " dx=%d, dy=%d\n", comp->dx, comp->dy);
|
|
||||||
fprintf(fd, " prec=%d\n", comp->prec);
|
|
||||||
//fprintf(fd, " bpp=%d\n", comp->bpp);
|
|
||||||
fprintf(fd, " sgnd=%d\n", comp->sgnd);
|
|
||||||
fprintf(fd, " }\n");
|
|
||||||
}
|
|
||||||
fprintf(fd, "}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
void j2k_dump_cp(FILE *fd, opj_image_t * img, opj_cp_t * cp) {
|
|
||||||
int tileno, compno, layno, bandno, resno, numbands;
|
|
||||||
fprintf(fd, "coding parameters {\n");
|
|
||||||
fprintf(fd, " tx0=%d, ty0=%d\n", cp->tx0, cp->ty0);
|
|
||||||
fprintf(fd, " tdx=%d, tdy=%d\n", cp->tdx, cp->tdy);
|
|
||||||
fprintf(fd, " tw=%d, th=%d\n", cp->tw, cp->th);
|
|
||||||
for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
|
|
||||||
opj_tcp_t *tcp = &cp->tcps[tileno];
|
|
||||||
fprintf(fd, " tile %d {\n", tileno);
|
|
||||||
fprintf(fd, " csty=%x\n", tcp->csty);
|
|
||||||
fprintf(fd, " prg=%d\n", tcp->prg);
|
|
||||||
fprintf(fd, " numlayers=%d\n", tcp->numlayers);
|
|
||||||
fprintf(fd, " mct=%d\n", tcp->mct);
|
|
||||||
fprintf(fd, " rates=");
|
|
||||||
for (layno = 0; layno < tcp->numlayers; layno++) {
|
|
||||||
fprintf(fd, "%.1f ", tcp->rates[layno]);
|
|
||||||
}
|
|
||||||
fprintf(fd, "\n");
|
|
||||||
for (compno = 0; compno < img->numcomps; compno++) {
|
|
||||||
opj_tccp_t *tccp = &tcp->tccps[compno];
|
|
||||||
fprintf(fd, " comp %d {\n", compno);
|
|
||||||
fprintf(fd, " csty=%x\n", tccp->csty);
|
|
||||||
fprintf(fd, " numresolutions=%d\n", tccp->numresolutions);
|
|
||||||
fprintf(fd, " cblkw=%d\n", tccp->cblkw);
|
|
||||||
fprintf(fd, " cblkh=%d\n", tccp->cblkh);
|
|
||||||
fprintf(fd, " cblksty=%x\n", tccp->cblksty);
|
|
||||||
fprintf(fd, " qmfbid=%d\n", tccp->qmfbid);
|
|
||||||
fprintf(fd, " qntsty=%d\n", tccp->qntsty);
|
|
||||||
fprintf(fd, " numgbits=%d\n", tccp->numgbits);
|
|
||||||
fprintf(fd, " roishift=%d\n", tccp->roishift);
|
|
||||||
fprintf(fd, " stepsizes=");
|
|
||||||
numbands = tccp->qntsty == J2K_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolutions * 3 - 2;
|
|
||||||
for (bandno = 0; bandno < numbands; bandno++) {
|
|
||||||
fprintf(fd, "(%d,%d) ", tccp->stepsizes[bandno].mant,
|
|
||||||
tccp->stepsizes[bandno].expn);
|
|
||||||
}
|
|
||||||
fprintf(fd, "\n");
|
|
||||||
|
|
||||||
if (tccp->csty & J2K_CCP_CSTY_PRT) {
|
|
||||||
fprintf(fd, " prcw=");
|
|
||||||
for (resno = 0; resno < tccp->numresolutions; resno++) {
|
|
||||||
fprintf(fd, "%d ", tccp->prcw[resno]);
|
|
||||||
}
|
|
||||||
fprintf(fd, "\n");
|
|
||||||
fprintf(fd, " prch=");
|
|
||||||
for (resno = 0; resno < tccp->numresolutions; resno++) {
|
|
||||||
fprintf(fd, "%d ", tccp->prch[resno]);
|
|
||||||
}
|
|
||||||
fprintf(fd, "\n");
|
|
||||||
}
|
|
||||||
fprintf(fd, " }\n");
|
|
||||||
}
|
|
||||||
fprintf(fd, " }\n");
|
|
||||||
}
|
|
||||||
fprintf(fd, "}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
static int j2k_get_num_tp(opj_cp_t *cp,int pino,int tileno){
|
static int j2k_get_num_tp(opj_cp_t *cp,int pino,int tileno){
|
||||||
char *prog;
|
char *prog;
|
||||||
@@ -371,6 +315,9 @@ static int j2k_get_num_tp(opj_cp_t *cp,int pino,int tileno){
|
|||||||
/** mem allocation for TLM marker*/
|
/** mem allocation for TLM marker*/
|
||||||
int j2k_calculate_tp(opj_cp_t *cp,int img_numcomp,opj_image_t *image,opj_j2k_t *j2k ){
|
int j2k_calculate_tp(opj_cp_t *cp,int img_numcomp,opj_image_t *image,opj_j2k_t *j2k ){
|
||||||
int pino,tileno,totnum_tp=0;
|
int pino,tileno,totnum_tp=0;
|
||||||
|
|
||||||
|
OPJ_ARG_NOT_USED(img_numcomp);
|
||||||
|
|
||||||
j2k->cur_totnum_tp = (int *) opj_malloc(cp->tw * cp->th * sizeof(int));
|
j2k->cur_totnum_tp = (int *) opj_malloc(cp->tw * cp->th * sizeof(int));
|
||||||
for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
|
for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
|
||||||
int cur_totnum_tp = 0;
|
int cur_totnum_tp = 0;
|
||||||
@@ -399,12 +346,14 @@ static void j2k_write_soc(opj_j2k_t *j2k) {
|
|||||||
opj_cio_t *cio = j2k->cio;
|
opj_cio_t *cio = j2k->cio;
|
||||||
cio_write(cio, J2K_MS_SOC, 2);
|
cio_write(cio, J2K_MS_SOC, 2);
|
||||||
|
|
||||||
|
if(j2k->cstr_info)
|
||||||
|
j2k_add_mhmarker(j2k->cstr_info, J2K_MS_SOC, cio_tell(cio), 0);
|
||||||
|
|
||||||
/* UniPG>> */
|
/* UniPG>> */
|
||||||
#ifdef USE_JPWL
|
#ifdef USE_JPWL
|
||||||
|
|
||||||
/* update markers struct */
|
/* update markers struct */
|
||||||
j2k_add_marker(j2k->cstr_info, J2K_MS_SOC, cio_tell(cio) - 2, 2);
|
j2k_add_marker(j2k->cstr_info, J2K_MS_SOC, cio_tell(cio) - 2, 2);
|
||||||
|
|
||||||
#endif /* USE_JPWL */
|
#endif /* USE_JPWL */
|
||||||
/* <<UniPG */
|
/* <<UniPG */
|
||||||
}
|
}
|
||||||
@@ -425,7 +374,7 @@ static void j2k_write_siz(opj_j2k_t *j2k) {
|
|||||||
opj_cio_t *cio = j2k->cio;
|
opj_cio_t *cio = j2k->cio;
|
||||||
opj_image_t *image = j2k->image;
|
opj_image_t *image = j2k->image;
|
||||||
opj_cp_t *cp = j2k->cp;
|
opj_cp_t *cp = j2k->cp;
|
||||||
|
|
||||||
cio_write(cio, J2K_MS_SIZ, 2); /* SIZ */
|
cio_write(cio, J2K_MS_SIZ, 2); /* SIZ */
|
||||||
lenp = cio_tell(cio);
|
lenp = cio_tell(cio);
|
||||||
cio_skip(cio, 2);
|
cio_skip(cio, 2);
|
||||||
@@ -448,6 +397,9 @@ static void j2k_write_siz(opj_j2k_t *j2k) {
|
|||||||
cio_seek(cio, lenp);
|
cio_seek(cio, lenp);
|
||||||
cio_write(cio, len, 2); /* Lsiz */
|
cio_write(cio, len, 2); /* Lsiz */
|
||||||
cio_seek(cio, lenp + len);
|
cio_seek(cio, lenp + len);
|
||||||
|
|
||||||
|
if(j2k->cstr_info)
|
||||||
|
j2k_add_mhmarker(j2k->cstr_info, J2K_MS_SIZ, lenp, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void j2k_read_siz(opj_j2k_t *j2k) {
|
static void j2k_read_siz(opj_j2k_t *j2k) {
|
||||||
@@ -516,6 +468,12 @@ static void j2k_read_siz(opj_j2k_t *j2k) {
|
|||||||
}
|
}
|
||||||
#endif /* USE_JPWL */
|
#endif /* USE_JPWL */
|
||||||
|
|
||||||
|
/* prevent division by zero */
|
||||||
|
if (!(cp->tdx * cp->tdy)) {
|
||||||
|
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: invalid tile size (tdx: %d, tdy: %d)\n", cp->tdx, cp->tdy);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
image->comps = (opj_image_comp_t*) opj_calloc(image->numcomps, sizeof(opj_image_comp_t));
|
image->comps = (opj_image_comp_t*) opj_calloc(image->numcomps, sizeof(opj_image_comp_t));
|
||||||
for (i = 0; i < image->numcomps; i++) {
|
for (i = 0; i < image->numcomps; i++) {
|
||||||
int tmp, w, h;
|
int tmp, w, h;
|
||||||
@@ -554,6 +512,12 @@ static void j2k_read_siz(opj_j2k_t *j2k) {
|
|||||||
}
|
}
|
||||||
#endif /* USE_JPWL */
|
#endif /* USE_JPWL */
|
||||||
|
|
||||||
|
/* prevent division by zero */
|
||||||
|
if (!(image->comps[i].dx * image->comps[i].dy)) {
|
||||||
|
opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: invalid component size (dx: %d, dy: %d)\n", image->comps[i].dx, image->comps[i].dy);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* TODO: unused ? */
|
/* TODO: unused ? */
|
||||||
w = int_ceildiv(image->x1 - image->x0, image->comps[i].dx);
|
w = int_ceildiv(image->x1 - image->x0, image->comps[i].dx);
|
||||||
h = int_ceildiv(image->y1 - image->y0, image->comps[i].dy);
|
h = int_ceildiv(image->y1 - image->y0, image->comps[i].dy);
|
||||||
@@ -606,7 +570,17 @@ static void j2k_read_siz(opj_j2k_t *j2k) {
|
|||||||
#endif /* USE_JPWL */
|
#endif /* USE_JPWL */
|
||||||
|
|
||||||
cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t));
|
cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t));
|
||||||
|
if (cp->tcps == NULL)
|
||||||
|
{
|
||||||
|
opj_event_msg(j2k->cinfo, EVT_ERROR, "Out of memory\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
cp->tileno = (int*) opj_malloc(cp->tw * cp->th * sizeof(int));
|
cp->tileno = (int*) opj_malloc(cp->tw * cp->th * sizeof(int));
|
||||||
|
if (cp->tileno == NULL)
|
||||||
|
{
|
||||||
|
opj_event_msg(j2k->cinfo, EVT_ERROR, "Out of memory\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
cp->tileno_size = 0;
|
cp->tileno_size = 0;
|
||||||
|
|
||||||
#ifdef USE_JPWL
|
#ifdef USE_JPWL
|
||||||
@@ -678,6 +652,11 @@ static void j2k_write_com(opj_j2k_t *j2k) {
|
|||||||
cio_seek(cio, lenp);
|
cio_seek(cio, lenp);
|
||||||
cio_write(cio, len, 2);
|
cio_write(cio, len, 2);
|
||||||
cio_seek(cio, lenp + len);
|
cio_seek(cio, lenp + len);
|
||||||
|
|
||||||
|
|
||||||
|
if(j2k->cstr_info)
|
||||||
|
j2k_add_mhmarker(j2k->cstr_info, J2K_MS_COM, lenp, len);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -721,12 +700,18 @@ static void j2k_read_cox(opj_j2k_t *j2k, int compno) {
|
|||||||
|
|
||||||
tccp->numresolutions = cio_read(cio, 1) + 1; /* SPcox (D) */
|
tccp->numresolutions = cio_read(cio, 1) + 1; /* SPcox (D) */
|
||||||
|
|
||||||
// If user wants to remove more resolutions than the codestream contains, return error
|
/* If user wants to remove more resolutions than the codestream contains, return error*/
|
||||||
if (cp->reduce >= tccp->numresolutions) {
|
if (cp->reduce >= tccp->numresolutions) {
|
||||||
opj_event_msg(j2k->cinfo, EVT_ERROR, "Error decoding component %d.\nThe number of resolutions to remove is higher than the number "
|
opj_event_msg(j2k->cinfo, EVT_ERROR, "Error decoding component %d.\nThe number of resolutions to remove is higher than the number "
|
||||||
"of resolutions of this component\nModify the cp_reduce parameter.\n\n", compno);
|
"of resolutions of this component\nModify the cp_reduce parameter.\n\n", compno);
|
||||||
j2k->state |= J2K_STATE_ERR;
|
j2k->state |= J2K_STATE_ERR;
|
||||||
}
|
}
|
||||||
|
if( tccp->numresolutions > J2K_MAXRLVLS ) {
|
||||||
|
opj_event_msg(j2k->cinfo, EVT_ERROR, "Error decoding component %d.\nThe number of resolutions is too big: %d vs max= %d. Truncating.\n\n",
|
||||||
|
compno, tccp->numresolutions, J2K_MAXRLVLS);
|
||||||
|
j2k->state |= J2K_STATE_ERR;
|
||||||
|
tccp->numresolutions = J2K_MAXRLVLS;
|
||||||
|
}
|
||||||
|
|
||||||
tccp->cblkw = cio_read(cio, 1) + 2; /* SPcox (E) */
|
tccp->cblkw = cio_read(cio, 1) + 2; /* SPcox (E) */
|
||||||
tccp->cblkh = cio_read(cio, 1) + 2; /* SPcox (F) */
|
tccp->cblkh = cio_read(cio, 1) + 2; /* SPcox (F) */
|
||||||
@@ -781,6 +766,10 @@ static void j2k_write_cod(opj_j2k_t *j2k) {
|
|||||||
cio_seek(cio, lenp);
|
cio_seek(cio, lenp);
|
||||||
cio_write(cio, len, 2); /* Lcod */
|
cio_write(cio, len, 2); /* Lcod */
|
||||||
cio_seek(cio, lenp + len);
|
cio_seek(cio, lenp + len);
|
||||||
|
|
||||||
|
if(j2k->cstr_info)
|
||||||
|
j2k_add_mhmarker(j2k->cstr_info, J2K_MS_COD, lenp, len);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void j2k_read_cod(opj_j2k_t *j2k) {
|
static void j2k_read_cod(opj_j2k_t *j2k) {
|
||||||
@@ -846,6 +835,12 @@ static void j2k_read_coc(opj_j2k_t *j2k) {
|
|||||||
|
|
||||||
len = cio_read(cio, 2); /* Lcoc */
|
len = cio_read(cio, 2); /* Lcoc */
|
||||||
compno = cio_read(cio, image->numcomps <= 256 ? 1 : 2); /* Ccoc */
|
compno = cio_read(cio, image->numcomps <= 256 ? 1 : 2); /* Ccoc */
|
||||||
|
if (compno >= image->numcomps) {
|
||||||
|
opj_event_msg(j2k->cinfo, EVT_ERROR,
|
||||||
|
"bad component number in COC (%d out of a maximum of %d)\n",
|
||||||
|
compno, image->numcomps);
|
||||||
|
return;
|
||||||
|
}
|
||||||
tcp->tccps[compno].csty = cio_read(cio, 1); /* Scoc */
|
tcp->tccps[compno].csty = cio_read(cio, 1); /* Scoc */
|
||||||
j2k_read_cox(j2k, compno);
|
j2k_read_cox(j2k, compno);
|
||||||
}
|
}
|
||||||
@@ -909,6 +904,15 @@ static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* We check whether there are too many subbands */
|
||||||
|
if ((numbands < 0) || (numbands >= J2K_MAXBANDS)) {
|
||||||
|
opj_event_msg(j2k->cinfo, EVT_WARNING ,
|
||||||
|
"bad number of subbands in Sqcx (%d) regarding to J2K_MAXBANDS (%d) \n"
|
||||||
|
"- limiting number of bands to J2K_MAXBANDS and try to move to the next markers\n", numbands, J2K_MAXBANDS);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* USE_JPWL */
|
#endif /* USE_JPWL */
|
||||||
|
|
||||||
for (bandno = 0; bandno < numbands; bandno++) {
|
for (bandno = 0; bandno < numbands; bandno++) {
|
||||||
@@ -921,8 +925,10 @@ static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len) {
|
|||||||
expn = tmp >> 11;
|
expn = tmp >> 11;
|
||||||
mant = tmp & 0x7ff;
|
mant = tmp & 0x7ff;
|
||||||
}
|
}
|
||||||
tccp->stepsizes[bandno].expn = expn;
|
if (bandno < J2K_MAXBANDS){
|
||||||
tccp->stepsizes[bandno].mant = mant;
|
tccp->stepsizes[bandno].expn = expn;
|
||||||
|
tccp->stepsizes[bandno].mant = mant;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add Antonin : if scalar_derived -> compute other stepsizes */
|
/* Add Antonin : if scalar_derived -> compute other stepsizes */
|
||||||
@@ -950,6 +956,9 @@ static void j2k_write_qcd(opj_j2k_t *j2k) {
|
|||||||
cio_seek(cio, lenp);
|
cio_seek(cio, lenp);
|
||||||
cio_write(cio, len, 2); /* Lqcd */
|
cio_write(cio, len, 2); /* Lqcd */
|
||||||
cio_seek(cio, lenp + len);
|
cio_seek(cio, lenp + len);
|
||||||
|
|
||||||
|
if(j2k->cstr_info)
|
||||||
|
j2k_add_mhmarker(j2k->cstr_info, J2K_MS_QCD, lenp, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void j2k_read_qcd(opj_j2k_t *j2k) {
|
static void j2k_read_qcd(opj_j2k_t *j2k) {
|
||||||
@@ -986,7 +995,7 @@ static void j2k_read_qcc(opj_j2k_t *j2k) {
|
|||||||
int len, compno;
|
int len, compno;
|
||||||
int numcomp = j2k->image->numcomps;
|
int numcomp = j2k->image->numcomps;
|
||||||
opj_cio_t *cio = j2k->cio;
|
opj_cio_t *cio = j2k->cio;
|
||||||
|
|
||||||
len = cio_read(cio, 2); /* Lqcc */
|
len = cio_read(cio, 2); /* Lqcc */
|
||||||
compno = cio_read(cio, numcomp <= 256 ? 1 : 2); /* Cqcc */
|
compno = cio_read(cio, numcomp <= 256 ? 1 : 2); /* Cqcc */
|
||||||
|
|
||||||
@@ -1013,9 +1022,16 @@ static void j2k_read_qcc(opj_j2k_t *j2k) {
|
|||||||
|
|
||||||
/* keep your private count of tiles */
|
/* keep your private count of tiles */
|
||||||
backup_compno++;
|
backup_compno++;
|
||||||
};
|
}
|
||||||
#endif /* USE_JPWL */
|
#endif /* USE_JPWL */
|
||||||
|
|
||||||
|
if ((compno < 0) || (compno >= numcomp)) {
|
||||||
|
opj_event_msg(j2k->cinfo, EVT_ERROR,
|
||||||
|
"bad component number in QCC (%d out of a maximum of %d)\n",
|
||||||
|
compno, j2k->image->numcomps);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
j2k_read_qcx(j2k, compno, len - 2 - (numcomp <= 256 ? 1 : 2));
|
j2k_read_qcx(j2k, compno, len - 2 - (numcomp <= 256 ? 1 : 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1271,6 +1287,10 @@ static void j2k_write_sot(opj_j2k_t *j2k) {
|
|||||||
j2k_add_marker(j2k->cstr_info, J2K_MS_SOT, j2k->sot_start, len + 2);
|
j2k_add_marker(j2k->cstr_info, J2K_MS_SOT, j2k->sot_start, len + 2);
|
||||||
#endif /* USE_JPWL */
|
#endif /* USE_JPWL */
|
||||||
/* <<UniPG */
|
/* <<UniPG */
|
||||||
|
|
||||||
|
if( j2k->cstr_info && j2k->cur_tp_num==0){
|
||||||
|
j2k_add_tlmarker( j2k->curtileno, j2k->cstr_info, J2K_MS_SOT, lenp, len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void j2k_read_sot(opj_j2k_t *j2k) {
|
static void j2k_read_sot(opj_j2k_t *j2k) {
|
||||||
@@ -1354,6 +1374,11 @@ static void j2k_read_sot(opj_j2k_t *j2k) {
|
|||||||
|
|
||||||
partno = cio_read(cio, 1);
|
partno = cio_read(cio, 1);
|
||||||
numparts = cio_read(cio, 1);
|
numparts = cio_read(cio, 1);
|
||||||
|
|
||||||
|
if (partno >= numparts) {
|
||||||
|
opj_event_msg(j2k->cinfo, EVT_WARNING, "SOT marker inconsistency in tile %d: tile-part index greater (%d) than number of tile-parts (%d)\n", tileno, partno, numparts);
|
||||||
|
numparts = partno+1;
|
||||||
|
}
|
||||||
|
|
||||||
j2k->curtileno = tileno;
|
j2k->curtileno = tileno;
|
||||||
j2k->cur_tp_num = partno;
|
j2k->cur_tp_num = partno;
|
||||||
@@ -1369,15 +1394,14 @@ static void j2k_read_sot(opj_j2k_t *j2k) {
|
|||||||
j2k->cstr_info->tile[tileno].tileno = tileno;
|
j2k->cstr_info->tile[tileno].tileno = tileno;
|
||||||
j2k->cstr_info->tile[tileno].start_pos = cio_tell(cio) - 12;
|
j2k->cstr_info->tile[tileno].start_pos = cio_tell(cio) - 12;
|
||||||
j2k->cstr_info->tile[tileno].end_pos = j2k->cstr_info->tile[tileno].start_pos + totlen - 1;
|
j2k->cstr_info->tile[tileno].end_pos = j2k->cstr_info->tile[tileno].start_pos + totlen - 1;
|
||||||
j2k->cstr_info->tile[tileno].num_tps = numparts;
|
} else {
|
||||||
if (numparts)
|
|
||||||
j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(numparts * sizeof(opj_tp_info_t));
|
|
||||||
else
|
|
||||||
j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(10 * sizeof(opj_tp_info_t)); // Fixme (10)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
j2k->cstr_info->tile[tileno].end_pos += totlen;
|
j2k->cstr_info->tile[tileno].end_pos += totlen;
|
||||||
}
|
}
|
||||||
|
j2k->cstr_info->tile[tileno].num_tps = numparts;
|
||||||
|
if (numparts)
|
||||||
|
j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_realloc(j2k->cstr_info->tile[tileno].tp, numparts * sizeof(opj_tp_info_t));
|
||||||
|
else
|
||||||
|
j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_realloc(j2k->cstr_info->tile[tileno].tp, 10 * sizeof(opj_tp_info_t)); /* Fixme (10)*/
|
||||||
j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos = cio_tell(cio) - 12;
|
j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos = cio_tell(cio) - 12;
|
||||||
j2k->cstr_info->tile[tileno].tp[partno].tp_end_pos =
|
j2k->cstr_info->tile[tileno].tp[partno].tp_end_pos =
|
||||||
j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos + totlen - 1;
|
j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos + totlen - 1;
|
||||||
@@ -1413,6 +1437,11 @@ static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder) {
|
|||||||
tcd->cur_tp_num = j2k->cur_tp_num;
|
tcd->cur_tp_num = j2k->cur_tp_num;
|
||||||
|
|
||||||
cio_write(cio, J2K_MS_SOD, 2);
|
cio_write(cio, J2K_MS_SOD, 2);
|
||||||
|
|
||||||
|
if( j2k->cstr_info && j2k->cur_tp_num==0){
|
||||||
|
j2k_add_tlmarker( j2k->curtileno, j2k->cstr_info, J2K_MS_SOD, cio_tell(cio), 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (j2k->curtileno == 0) {
|
if (j2k->curtileno == 0) {
|
||||||
j2k->sod_start = cio_tell(cio) + j2k->pos_correction;
|
j2k->sod_start = cio_tell(cio) + j2k->pos_correction;
|
||||||
}
|
}
|
||||||
@@ -1487,7 +1516,7 @@ static void j2k_read_sod(opj_j2k_t *j2k) {
|
|||||||
|
|
||||||
if (len == cio_numbytesleft(cio) + 1) {
|
if (len == cio_numbytesleft(cio) + 1) {
|
||||||
truncate = 1; /* Case of a truncate codestream */
|
truncate = 1; /* Case of a truncate codestream */
|
||||||
}
|
}
|
||||||
|
|
||||||
data = j2k->tile_data[curtileno];
|
data = j2k->tile_data[curtileno];
|
||||||
data = (unsigned char*) opj_realloc(data, (j2k->tile_len[curtileno] + len) * sizeof(unsigned char));
|
data = (unsigned char*) opj_realloc(data, (j2k->tile_len[curtileno] + len) * sizeof(unsigned char));
|
||||||
@@ -1548,6 +1577,13 @@ static void j2k_read_rgn(opj_j2k_t *j2k) {
|
|||||||
};
|
};
|
||||||
#endif /* USE_JPWL */
|
#endif /* USE_JPWL */
|
||||||
|
|
||||||
|
if (compno >= numcomps) {
|
||||||
|
opj_event_msg(j2k->cinfo, EVT_ERROR,
|
||||||
|
"bad component number in RGN (%d out of a maximum of %d)\n",
|
||||||
|
compno, j2k->image->numcomps);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
tcp->tccps[compno].roishift = cio_read(cio, 1); /* SPrgn */
|
tcp->tccps[compno].roishift = cio_read(cio, 1); /* SPrgn */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1566,7 +1602,7 @@ static void j2k_write_eoc(opj_j2k_t *j2k) {
|
|||||||
|
|
||||||
static void j2k_read_eoc(opj_j2k_t *j2k) {
|
static void j2k_read_eoc(opj_j2k_t *j2k) {
|
||||||
int i, tileno;
|
int i, tileno;
|
||||||
bool success;
|
opj_bool success = OPJ_FALSE;
|
||||||
|
|
||||||
/* if packets should be decoded */
|
/* if packets should be decoded */
|
||||||
if (j2k->cp->limit_decoding != DECODE_ALL_BUT_PACKETS) {
|
if (j2k->cp->limit_decoding != DECODE_ALL_BUT_PACKETS) {
|
||||||
@@ -1574,12 +1610,17 @@ static void j2k_read_eoc(opj_j2k_t *j2k) {
|
|||||||
tcd_malloc_decode(tcd, j2k->image, j2k->cp);
|
tcd_malloc_decode(tcd, j2k->image, j2k->cp);
|
||||||
for (i = 0; i < j2k->cp->tileno_size; i++) {
|
for (i = 0; i < j2k->cp->tileno_size; i++) {
|
||||||
tcd_malloc_decode_tile(tcd, j2k->image, j2k->cp, i, j2k->cstr_info);
|
tcd_malloc_decode_tile(tcd, j2k->image, j2k->cp, i, j2k->cstr_info);
|
||||||
tileno = j2k->cp->tileno[i];
|
if (j2k->cp->tileno[i] != -1)
|
||||||
success = tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno], tileno, j2k->cstr_info);
|
{
|
||||||
opj_free(j2k->tile_data[tileno]);
|
tileno = j2k->cp->tileno[i];
|
||||||
j2k->tile_data[tileno] = NULL;
|
success = tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno], tileno, j2k->cstr_info);
|
||||||
tcd_free_decode_tile(tcd, i);
|
opj_free(j2k->tile_data[tileno]);
|
||||||
if (success == false) {
|
j2k->tile_data[tileno] = NULL;
|
||||||
|
tcd_free_decode_tile(tcd, i);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
success = OPJ_FALSE;
|
||||||
|
if (success == OPJ_FALSE) {
|
||||||
j2k->state |= J2K_STATE_ERR;
|
j2k->state |= J2K_STATE_ERR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1749,6 +1790,14 @@ void j2k_destroy_decompress(opj_j2k_t *j2k) {
|
|||||||
opj_free(j2k->tile_len);
|
opj_free(j2k->tile_len);
|
||||||
}
|
}
|
||||||
if(j2k->tile_data != NULL) {
|
if(j2k->tile_data != NULL) {
|
||||||
|
if(j2k->cp != NULL) {
|
||||||
|
for (i = 0; i < j2k->cp->tileno_size; i++) {
|
||||||
|
int tileno = j2k->cp->tileno[i];
|
||||||
|
opj_free(j2k->tile_data[tileno]);
|
||||||
|
j2k->tile_data[tileno] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
opj_free(j2k->tile_data);
|
opj_free(j2k->tile_data);
|
||||||
}
|
}
|
||||||
if(j2k->default_tcp != NULL) {
|
if(j2k->default_tcp != NULL) {
|
||||||
@@ -1834,7 +1883,7 @@ opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *c
|
|||||||
if (j2k->cp->correct) {
|
if (j2k->cp->correct) {
|
||||||
|
|
||||||
int orig_pos = cio_tell(cio);
|
int orig_pos = cio_tell(cio);
|
||||||
bool status;
|
opj_bool status;
|
||||||
|
|
||||||
/* call the corrector */
|
/* call the corrector */
|
||||||
status = jpwl_correct(j2k);
|
status = jpwl_correct(j2k);
|
||||||
@@ -1873,13 +1922,13 @@ opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *c
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
e = j2k_dec_mstab_lookup(id);
|
e = j2k_dec_mstab_lookup(id);
|
||||||
// Check if the marker is known
|
/* Check if the marker is known*/
|
||||||
if (!(j2k->state & e->states)) {
|
if (!(j2k->state & e->states)) {
|
||||||
opj_image_destroy(image);
|
opj_image_destroy(image);
|
||||||
opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id);
|
opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// Check if the decoding is limited to the main header
|
/* Check if the decoding is limited to the main header*/
|
||||||
if (e->id == J2K_MS_SOT && j2k->cp->limit_decoding == LIMIT_TO_MAIN_HEADER) {
|
if (e->id == J2K_MS_SOT && j2k->cp->limit_decoding == LIMIT_TO_MAIN_HEADER) {
|
||||||
opj_event_msg(cinfo, EVT_INFO, "Main Header decoded.\n");
|
opj_event_msg(cinfo, EVT_INFO, "Main Header decoded.\n");
|
||||||
return image;
|
return image;
|
||||||
@@ -1889,7 +1938,10 @@ opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *c
|
|||||||
(*e->handler)(j2k);
|
(*e->handler)(j2k);
|
||||||
}
|
}
|
||||||
if (j2k->state & J2K_STATE_ERR)
|
if (j2k->state & J2K_STATE_ERR)
|
||||||
|
{
|
||||||
|
opj_image_destroy(image);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (j2k->state == J2K_STATE_MT) {
|
if (j2k->state == J2K_STATE_MT) {
|
||||||
break;
|
break;
|
||||||
@@ -1905,7 +1957,6 @@ opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *c
|
|||||||
if (j2k->state != J2K_STATE_MT) {
|
if (j2k->state != J2K_STATE_MT) {
|
||||||
opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
|
opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1917,9 +1968,10 @@ opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestre
|
|||||||
opj_image_t *image = NULL;
|
opj_image_t *image = NULL;
|
||||||
opj_jpt_msg_header_t header;
|
opj_jpt_msg_header_t header;
|
||||||
int position;
|
int position;
|
||||||
|
|
||||||
opj_common_ptr cinfo = j2k->cinfo;
|
opj_common_ptr cinfo = j2k->cinfo;
|
||||||
|
|
||||||
|
OPJ_ARG_NOT_USED(cstr_info);
|
||||||
|
|
||||||
j2k->cio = cio;
|
j2k->cio = cio;
|
||||||
|
|
||||||
/* create an empty image */
|
/* create an empty image */
|
||||||
@@ -2110,12 +2162,12 @@ void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* set JPWL on */
|
/* set JPWL on */
|
||||||
cp->epc_on = true;
|
cp->epc_on = OPJ_TRUE;
|
||||||
cp->info_on = false; /* no informative technique */
|
cp->info_on = OPJ_FALSE; /* no informative technique */
|
||||||
|
|
||||||
/* set EPB on */
|
/* set EPB on */
|
||||||
if ((parameters->jpwl_hprot_MH > 0) || (parameters->jpwl_hprot_TPH[0] > 0)) {
|
if ((parameters->jpwl_hprot_MH > 0) || (parameters->jpwl_hprot_TPH[0] > 0)) {
|
||||||
cp->epb_on = true;
|
cp->epb_on = OPJ_TRUE;
|
||||||
|
|
||||||
cp->hprot_MH = parameters->jpwl_hprot_MH;
|
cp->hprot_MH = parameters->jpwl_hprot_MH;
|
||||||
for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
|
for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
|
||||||
@@ -2136,7 +2188,7 @@ void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_
|
|||||||
|
|
||||||
/* set ESD writing */
|
/* set ESD writing */
|
||||||
if ((parameters->jpwl_sens_size == 1) || (parameters->jpwl_sens_size == 2)) {
|
if ((parameters->jpwl_sens_size == 1) || (parameters->jpwl_sens_size == 2)) {
|
||||||
cp->esd_on = true;
|
cp->esd_on = OPJ_TRUE;
|
||||||
|
|
||||||
cp->sens_size = parameters->jpwl_sens_size;
|
cp->sens_size = parameters->jpwl_sens_size;
|
||||||
cp->sens_addr = parameters->jpwl_sens_addr;
|
cp->sens_addr = parameters->jpwl_sens_addr;
|
||||||
@@ -2150,10 +2202,10 @@ void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* always set RED writing to false: we are at the encoder */
|
/* always set RED writing to false: we are at the encoder */
|
||||||
cp->red_on = false;
|
cp->red_on = OPJ_FALSE;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
cp->epc_on = false;
|
cp->epc_on = OPJ_FALSE;
|
||||||
}
|
}
|
||||||
#endif /* USE_JPWL */
|
#endif /* USE_JPWL */
|
||||||
|
|
||||||
@@ -2226,10 +2278,10 @@ void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_
|
|||||||
|
|
||||||
if(parameters->cp_cinema)
|
if(parameters->cp_cinema)
|
||||||
{
|
{
|
||||||
//Precinct size for lowest frequency subband=128
|
/*Precinct size for lowest frequency subband=128*/
|
||||||
tccp->prcw[0] = 7;
|
tccp->prcw[0] = 7;
|
||||||
tccp->prch[0] = 7;
|
tccp->prch[0] = 7;
|
||||||
//Precinct size at all other resolutions = 256
|
/*Precinct size at all other resolutions = 256*/
|
||||||
for (j = 1; j < tccp->numresolutions; j++) {
|
for (j = 1; j < tccp->numresolutions; j++) {
|
||||||
tccp->prcw[j] = 8;
|
tccp->prcw[j] = 8;
|
||||||
tccp->prch[j] = 8;
|
tccp->prch[j] = 8;
|
||||||
@@ -2271,7 +2323,7 @@ void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_
|
|||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
/*printf("\nsize precinct for level %d : %d,%d\n", j,tccp->prcw[j], tccp->prch[j]); */
|
/*printf("\nsize precinct for level %d : %d,%d\n", j,tccp->prcw[j], tccp->prch[j]); */
|
||||||
} //end for
|
} /*end for*/
|
||||||
} else {
|
} else {
|
||||||
for (j = 0; j < tccp->numresolutions; j++) {
|
for (j = 0; j < tccp->numresolutions; j++) {
|
||||||
tccp->prcw[j] = 15;
|
tccp->prcw[j] = 15;
|
||||||
@@ -2285,7 +2337,7 @@ void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) {
|
opj_bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) {
|
||||||
int tileno, compno;
|
int tileno, compno;
|
||||||
opj_cp_t *cp = NULL;
|
opj_cp_t *cp = NULL;
|
||||||
|
|
||||||
@@ -2296,8 +2348,6 @@ bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestre
|
|||||||
|
|
||||||
cp = j2k->cp;
|
cp = j2k->cp;
|
||||||
|
|
||||||
/* j2k_dump_cp(stdout, image, cp); */
|
|
||||||
|
|
||||||
/* INDEX >> */
|
/* INDEX >> */
|
||||||
j2k->cstr_info = cstr_info;
|
j2k->cstr_info = cstr_info;
|
||||||
if (cstr_info) {
|
if (cstr_info) {
|
||||||
@@ -2394,6 +2444,9 @@ bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestre
|
|||||||
/* INDEX >> */
|
/* INDEX >> */
|
||||||
if(cstr_info) {
|
if(cstr_info) {
|
||||||
cstr_info->tile[j2k->curtileno].start_pos = cio_tell(cio) + j2k->pos_correction;
|
cstr_info->tile[j2k->curtileno].start_pos = cio_tell(cio) + j2k->pos_correction;
|
||||||
|
cstr_info->tile[j2k->curtileno].maxmarknum = 10;
|
||||||
|
cstr_info->tile[j2k->curtileno].marker = (opj_marker_info_t *) opj_malloc(cstr_info->tile[j2k->curtileno].maxmarknum * sizeof(opj_marker_info_t));
|
||||||
|
cstr_info->tile[j2k->curtileno].marknum = 0;
|
||||||
}
|
}
|
||||||
/* << INDEX */
|
/* << INDEX */
|
||||||
|
|
||||||
@@ -2500,11 +2553,46 @@ bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestre
|
|||||||
}
|
}
|
||||||
#endif /* USE_JPWL */
|
#endif /* USE_JPWL */
|
||||||
|
|
||||||
return true;
|
return OPJ_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void j2k_add_mhmarker(opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len) {
|
||||||
|
|
||||||
|
if (!cstr_info)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* expand the list? */
|
||||||
|
if ((cstr_info->marknum + 1) > cstr_info->maxmarknum) {
|
||||||
|
cstr_info->maxmarknum = 100 + (int) ((float) cstr_info->maxmarknum * 1.0F);
|
||||||
|
cstr_info->marker = (opj_marker_info_t*)opj_realloc(cstr_info->marker, cstr_info->maxmarknum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add the marker */
|
||||||
|
cstr_info->marker[cstr_info->marknum].type = type;
|
||||||
|
cstr_info->marker[cstr_info->marknum].pos = pos;
|
||||||
|
cstr_info->marker[cstr_info->marknum].len = len;
|
||||||
|
cstr_info->marknum++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void j2k_add_tlmarker( int tileno, opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len) {
|
||||||
|
|
||||||
|
opj_marker_info_t *marker;
|
||||||
|
|
||||||
|
if (!cstr_info)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* expand the list? */
|
||||||
|
if ((cstr_info->tile[tileno].marknum + 1) > cstr_info->tile[tileno].maxmarknum) {
|
||||||
|
cstr_info->tile[tileno].maxmarknum = 100 + (int) ((float) cstr_info->tile[tileno].maxmarknum * 1.0F);
|
||||||
|
cstr_info->tile[tileno].marker = (opj_marker_info_t*)opj_realloc(cstr_info->tile[tileno].marker, cstr_info->maxmarknum);
|
||||||
|
}
|
||||||
|
|
||||||
|
marker = &(cstr_info->tile[tileno].marker[cstr_info->tile[tileno].marknum]);
|
||||||
|
|
||||||
|
/* add the marker */
|
||||||
|
marker->type = type;
|
||||||
|
marker->pos = pos;
|
||||||
|
marker->len = len;
|
||||||
|
cstr_info->tile[tileno].marknum++;
|
||||||
|
}
|
||||||
|
|||||||
@@ -265,15 +265,15 @@ typedef struct opj_cp {
|
|||||||
/* UniPG>> */
|
/* UniPG>> */
|
||||||
#ifdef USE_JPWL
|
#ifdef USE_JPWL
|
||||||
/** enables writing of EPC in MH, thus activating JPWL */
|
/** enables writing of EPC in MH, thus activating JPWL */
|
||||||
bool epc_on;
|
opj_bool epc_on;
|
||||||
/** enables writing of EPB, in case of activated JPWL */
|
/** enables writing of EPB, in case of activated JPWL */
|
||||||
bool epb_on;
|
opj_bool epb_on;
|
||||||
/** enables writing of ESD, in case of activated JPWL */
|
/** enables writing of ESD, in case of activated JPWL */
|
||||||
bool esd_on;
|
opj_bool esd_on;
|
||||||
/** enables writing of informative techniques of ESD, in case of activated JPWL */
|
/** enables writing of informative techniques of ESD, in case of activated JPWL */
|
||||||
bool info_on;
|
opj_bool info_on;
|
||||||
/** enables writing of RED, in case of activated JPWL */
|
/** enables writing of RED, in case of activated JPWL */
|
||||||
bool red_on;
|
opj_bool red_on;
|
||||||
/** error protection method for MH (0,1,16,32,37-128) */
|
/** error protection method for MH (0,1,16,32,37-128) */
|
||||||
int hprot_MH;
|
int hprot_MH;
|
||||||
/** tile number of header protection specification (>=0) */
|
/** tile number of header protection specification (>=0) */
|
||||||
@@ -299,7 +299,7 @@ typedef struct opj_cp {
|
|||||||
/** sensitivity methods for TPHs (-1,0-7) */
|
/** sensitivity methods for TPHs (-1,0-7) */
|
||||||
int sens_TPH[JPWL_MAX_NO_TILESPECS];
|
int sens_TPH[JPWL_MAX_NO_TILESPECS];
|
||||||
/** enables JPWL correction at the decoder */
|
/** enables JPWL correction at the decoder */
|
||||||
bool correct;
|
opj_bool correct;
|
||||||
/** expected number of components at the decoder */
|
/** expected number of components at the decoder */
|
||||||
int exp_comps;
|
int exp_comps;
|
||||||
/** maximum number of tiles at the decoder */
|
/** maximum number of tiles at the decoder */
|
||||||
@@ -436,10 +436,8 @@ Encode an image into a JPEG-2000 codestream
|
|||||||
@param cstr_info Codestream information structure if required, NULL otherwise
|
@param cstr_info Codestream information structure if required, NULL otherwise
|
||||||
@return Returns true if successful, returns false otherwise
|
@return Returns true if successful, returns false otherwise
|
||||||
*/
|
*/
|
||||||
bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
|
opj_bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
|
||||||
|
|
||||||
void j2k_dump_image(FILE *fd, opj_image_t * img);
|
|
||||||
void j2k_dump_cp(FILE *fd, opj_image_t * img, opj_cp_t * cp);
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Herv<EFBFBD> Drolon, FreeImage Team
|
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||||
* All rights reserved.
|
* 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
|
||||||
@@ -24,18 +24,18 @@
|
|||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#else
|
#else
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#include <sys/times.h>
|
#include <sys/times.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
#include "opj_includes.h"
|
#include "opj_includes.h"
|
||||||
|
|
||||||
double opj_clock(void) {
|
double opj_clock(void) {
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
/* WIN32: use QueryPerformance (very accurate) */
|
/* _WIN32: use QueryPerformance (very accurate) */
|
||||||
LARGE_INTEGER freq , t ;
|
LARGE_INTEGER freq , t ;
|
||||||
/* freq is the clock speed of the CPU */
|
/* freq is the clock speed of the CPU */
|
||||||
QueryPerformanceFrequency(&freq) ;
|
QueryPerformanceFrequency(&freq) ;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Herv<EFBFBD> Drolon, FreeImage Team
|
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||||
* All rights reserved.
|
* 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
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -46,11 +46,64 @@
|
|||||||
#define JP2_COLR 0x636f6c72 /**< Colour specification box */
|
#define JP2_COLR 0x636f6c72 /**< Colour specification box */
|
||||||
#define JP2_JP2C 0x6a703263 /**< Contiguous codestream box */
|
#define JP2_JP2C 0x6a703263 /**< Contiguous codestream box */
|
||||||
#define JP2_URL 0x75726c20 /**< URL box */
|
#define JP2_URL 0x75726c20 /**< URL box */
|
||||||
#define JP2_DBTL 0x6474626c /**< ??? */
|
#define JP2_DTBL 0x6474626c /**< Data Reference box */
|
||||||
#define JP2_BPCC 0x62706363 /**< Bits per component box */
|
#define JP2_BPCC 0x62706363 /**< Bits per component box */
|
||||||
#define JP2_JP2 0x6a703220 /**< File type fields */
|
#define JP2_JP2 0x6a703220 /**< File type fields */
|
||||||
|
#define JP2_PCLR 0x70636c72 /**< Palette box */
|
||||||
|
#define JP2_CMAP 0x636d6170 /**< Component Mapping box */
|
||||||
|
#define JP2_CDEF 0x63646566 /**< Channel Definition box */
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
/**
|
||||||
|
Channel description: channel index, type, assocation
|
||||||
|
*/
|
||||||
|
typedef struct opj_jp2_cdef_info
|
||||||
|
{
|
||||||
|
unsigned short cn, typ, asoc;
|
||||||
|
} opj_jp2_cdef_info_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Channel descriptions and number of descriptions
|
||||||
|
*/
|
||||||
|
typedef struct opj_jp2_cdef
|
||||||
|
{
|
||||||
|
opj_jp2_cdef_info_t *info;
|
||||||
|
unsigned short n;
|
||||||
|
} opj_jp2_cdef_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Component mappings: channel index, mapping type, palette index
|
||||||
|
*/
|
||||||
|
typedef struct opj_jp2_cmap_comp
|
||||||
|
{
|
||||||
|
unsigned short cmp;
|
||||||
|
unsigned char mtyp, pcol;
|
||||||
|
} opj_jp2_cmap_comp_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Palette data: table entries, palette columns
|
||||||
|
*/
|
||||||
|
typedef struct opj_jp2_pclr
|
||||||
|
{
|
||||||
|
unsigned int *entries;
|
||||||
|
unsigned char *channel_sign;
|
||||||
|
unsigned char *channel_size;
|
||||||
|
opj_jp2_cmap_comp_t *cmap;
|
||||||
|
unsigned short nr_entries, nr_channels;
|
||||||
|
} opj_jp2_pclr_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Collector for ICC profile, palette, component mapping, channel description
|
||||||
|
*/
|
||||||
|
typedef struct opj_jp2_color
|
||||||
|
{
|
||||||
|
unsigned char *icc_profile_buf;
|
||||||
|
int icc_profile_len;
|
||||||
|
|
||||||
|
opj_jp2_cdef_t *jp2_cdef;
|
||||||
|
opj_jp2_pclr_t *jp2_pclr;
|
||||||
|
unsigned char jp2_has_colr;
|
||||||
|
} opj_jp2_color_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
JP2 component
|
JP2 component
|
||||||
@@ -87,6 +140,8 @@ typedef struct opj_jp2 {
|
|||||||
opj_jp2_comps_t *comps;
|
opj_jp2_comps_t *comps;
|
||||||
unsigned int j2k_codestream_offset;
|
unsigned int j2k_codestream_offset;
|
||||||
unsigned int j2k_codestream_length;
|
unsigned int j2k_codestream_length;
|
||||||
|
opj_bool jpip_on;
|
||||||
|
opj_bool ignore_pclr_cmap_cdef;
|
||||||
} opj_jp2_t;
|
} opj_jp2_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -111,9 +166,10 @@ void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio);
|
|||||||
Read the JP2H box - JP2 Header box (used in MJ2)
|
Read the JP2H box - JP2 Header box (used in MJ2)
|
||||||
@param jp2 JP2 handle
|
@param jp2 JP2 handle
|
||||||
@param cio Input buffer stream
|
@param cio Input buffer stream
|
||||||
|
@param ext Collector for profile, cdef and pclr data
|
||||||
@return Returns true if successful, returns false otherwise
|
@return Returns true if successful, returns false otherwise
|
||||||
*/
|
*/
|
||||||
bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio);
|
opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color);
|
||||||
/**
|
/**
|
||||||
Creates a JP2 decompression structure
|
Creates a JP2 decompression structure
|
||||||
@param cinfo Codec context info
|
@param cinfo Codec context info
|
||||||
@@ -139,7 +195,7 @@ Decode an image from a JPEG-2000 file stream
|
|||||||
@param cstr_info Codestream information structure if required, NULL otherwise
|
@param cstr_info Codestream information structure if required, NULL otherwise
|
||||||
@return Returns a decoded image if successful, returns NULL otherwise
|
@return Returns a decoded image if successful, returns NULL otherwise
|
||||||
*/
|
*/
|
||||||
opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
|
opj_image_t* opj_jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
|
||||||
/**
|
/**
|
||||||
Creates a JP2 compression structure
|
Creates a JP2 compression structure
|
||||||
@param cinfo Codec context info
|
@param cinfo Codec context info
|
||||||
@@ -167,7 +223,8 @@ Encode an image into a JPEG-2000 file stream
|
|||||||
@param cstr_info Codestream information structure if required, NULL otherwise
|
@param cstr_info Codestream information structure if required, NULL otherwise
|
||||||
@return Returns true if successful, returns false otherwise
|
@return Returns true if successful, returns false otherwise
|
||||||
*/
|
*/
|
||||||
bool jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
|
opj_bool opj_jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
|||||||
@@ -521,22 +521,21 @@ void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len) {
|
|||||||
unsigned int c;
|
unsigned int c;
|
||||||
unsigned int *ip;
|
unsigned int *ip;
|
||||||
unsigned char *end = mqc->end - 1;
|
unsigned char *end = mqc->end - 1;
|
||||||
mqc->buffer = opj_realloc(mqc->buffer, (2 * len + 1) * sizeof(unsigned int));
|
mqc->buffer = opj_realloc(mqc->buffer, (len + 1) * sizeof(unsigned int));
|
||||||
ip = (unsigned int *) mqc->buffer;
|
ip = (unsigned int *) mqc->buffer;
|
||||||
|
|
||||||
while (bp != end) {
|
while (bp < end) {
|
||||||
c = *(bp + 1);
|
c = *(bp + 1);
|
||||||
if (*bp == 0xff) {
|
if (*bp == 0xff) {
|
||||||
if (c > 0x8f) {
|
if (c > 0x8f) {
|
||||||
*ip = 0x0000ff18;
|
break;
|
||||||
} else {
|
} else {
|
||||||
bp++;
|
|
||||||
*ip = 0x00000017 | (c << 9);
|
*ip = 0x00000017 | (c << 9);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bp++;
|
|
||||||
*ip = 0x00000018 | (c << 8);
|
*ip = 0x00000018 | (c << 8);
|
||||||
}
|
}
|
||||||
|
bp++;
|
||||||
ip++;
|
ip++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Herv<EFBFBD> Drolon, FreeImage Team
|
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||||
* All rights reserved.
|
* 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
|
||||||
@@ -24,17 +24,22 @@
|
|||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
#include "opj_config.h"
|
||||||
#include "opj_includes.h"
|
#include "opj_includes.h"
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#ifndef OPJ_STATIC
|
#ifndef OPJ_STATIC
|
||||||
BOOL APIENTRY
|
BOOL APIENTRY
|
||||||
DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
|
DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
|
||||||
|
|
||||||
|
OPJ_ARG_NOT_USED(lpReserved);
|
||||||
|
OPJ_ARG_NOT_USED(hModule);
|
||||||
|
|
||||||
switch (ul_reason_for_call) {
|
switch (ul_reason_for_call) {
|
||||||
case DLL_PROCESS_ATTACH :
|
case DLL_PROCESS_ATTACH :
|
||||||
break;
|
break;
|
||||||
@@ -48,19 +53,19 @@ DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
#endif /* OPJ_STATIC */
|
#endif /* OPJ_STATIC */
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
const char* OPJ_CALLCONV opj_version(void) {
|
const char* OPJ_CALLCONV opj_version(void) {
|
||||||
return OPENJPEG_VERSION;
|
return PACKAGE_VERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format) {
|
opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format) {
|
||||||
opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_calloc(1, sizeof(opj_dinfo_t));
|
opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_calloc(1, sizeof(opj_dinfo_t));
|
||||||
if(!dinfo) return NULL;
|
if(!dinfo) return NULL;
|
||||||
dinfo->is_decompressor = true;
|
dinfo->is_decompressor = OPJ_TRUE;
|
||||||
switch(format) {
|
switch(format) {
|
||||||
case CODEC_J2K:
|
case CODEC_J2K:
|
||||||
case CODEC_JPT:
|
case CODEC_JPT:
|
||||||
@@ -120,9 +125,10 @@ void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *paramete
|
|||||||
|
|
||||||
parameters->decod_format = -1;
|
parameters->decod_format = -1;
|
||||||
parameters->cod_format = -1;
|
parameters->cod_format = -1;
|
||||||
|
parameters->flags = 0;
|
||||||
/* UniPG>> */
|
/* UniPG>> */
|
||||||
#ifdef USE_JPWL
|
#ifdef USE_JPWL
|
||||||
parameters->jpwl_correct = false;
|
parameters->jpwl_correct = OPJ_FALSE;
|
||||||
parameters->jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS;
|
parameters->jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS;
|
||||||
parameters->jpwl_max_tiles = JPWL_MAXIMUM_TILES;
|
parameters->jpwl_max_tiles = JPWL_MAXIMUM_TILES;
|
||||||
#endif /* USE_JPWL */
|
#endif /* USE_JPWL */
|
||||||
@@ -159,7 +165,7 @@ opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *ci
|
|||||||
case CODEC_JPT:
|
case CODEC_JPT:
|
||||||
return j2k_decode_jpt_stream((opj_j2k_t*)dinfo->j2k_handle, cio, cstr_info);
|
return j2k_decode_jpt_stream((opj_j2k_t*)dinfo->j2k_handle, cio, cstr_info);
|
||||||
case CODEC_JP2:
|
case CODEC_JP2:
|
||||||
return jp2_decode((opj_jp2_t*)dinfo->jp2_handle, cio, cstr_info);
|
return opj_jp2_decode((opj_jp2_t*)dinfo->jp2_handle, cio, cstr_info);
|
||||||
case CODEC_UNKNOWN:
|
case CODEC_UNKNOWN:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -171,7 +177,7 @@ opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *ci
|
|||||||
opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format) {
|
opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format) {
|
||||||
opj_cinfo_t *cinfo = (opj_cinfo_t*)opj_calloc(1, sizeof(opj_cinfo_t));
|
opj_cinfo_t *cinfo = (opj_cinfo_t*)opj_calloc(1, sizeof(opj_cinfo_t));
|
||||||
if(!cinfo) return NULL;
|
if(!cinfo) return NULL;
|
||||||
cinfo->is_decompressor = false;
|
cinfo->is_decompressor = OPJ_FALSE;
|
||||||
switch(format) {
|
switch(format) {
|
||||||
case CODEC_J2K:
|
case CODEC_J2K:
|
||||||
/* get a J2K coder handle */
|
/* get a J2K coder handle */
|
||||||
@@ -243,10 +249,10 @@ void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *paramete
|
|||||||
parameters->cp_disto_alloc = 0;
|
parameters->cp_disto_alloc = 0;
|
||||||
parameters->cp_fixed_alloc = 0;
|
parameters->cp_fixed_alloc = 0;
|
||||||
parameters->cp_fixed_quality = 0;
|
parameters->cp_fixed_quality = 0;
|
||||||
|
parameters->jpip_on = OPJ_FALSE;
|
||||||
/* UniPG>> */
|
/* UniPG>> */
|
||||||
#ifdef USE_JPWL
|
#ifdef USE_JPWL
|
||||||
parameters->jpwl_epc_on = false;
|
parameters->jpwl_epc_on = OPJ_FALSE;
|
||||||
parameters->jpwl_hprot_MH = -1; /* -1 means unassigned */
|
parameters->jpwl_hprot_MH = -1; /* -1 means unassigned */
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -296,7 +302,7 @@ void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *param
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index) {
|
opj_bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index) {
|
||||||
if (index != NULL)
|
if (index != NULL)
|
||||||
opj_event_msg((opj_common_ptr)cinfo, EVT_WARNING, "Set index to NULL when calling the opj_encode function.\n"
|
opj_event_msg((opj_common_ptr)cinfo, EVT_WARNING, "Set index to NULL when calling the opj_encode function.\n"
|
||||||
"To extract the index, use the opj_encode_with_info() function.\n"
|
"To extract the index, use the opj_encode_with_info() function.\n"
|
||||||
@@ -304,20 +310,20 @@ bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *im
|
|||||||
return opj_encode_with_info(cinfo, cio, image, NULL);
|
return opj_encode_with_info(cinfo, cio, image, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) {
|
opj_bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) {
|
||||||
if(cinfo && cio && image) {
|
if(cinfo && cio && image) {
|
||||||
switch(cinfo->codec_format) {
|
switch(cinfo->codec_format) {
|
||||||
case CODEC_J2K:
|
case CODEC_J2K:
|
||||||
return j2k_encode((opj_j2k_t*)cinfo->j2k_handle, cio, image, cstr_info);
|
return j2k_encode((opj_j2k_t*)cinfo->j2k_handle, cio, image, cstr_info);
|
||||||
case CODEC_JP2:
|
case CODEC_JP2:
|
||||||
return jp2_encode((opj_jp2_t*)cinfo->jp2_handle, cio, image, cstr_info);
|
return opj_jp2_encode((opj_jp2_t*)cinfo->jp2_handle, cio, image, cstr_info);
|
||||||
case CODEC_JPT:
|
case CODEC_JPT:
|
||||||
case CODEC_UNKNOWN:
|
case CODEC_UNKNOWN:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info) {
|
void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info) {
|
||||||
@@ -328,6 +334,7 @@ void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info) {
|
|||||||
opj_free(tile_info->thresh);
|
opj_free(tile_info->thresh);
|
||||||
opj_free(tile_info->packet);
|
opj_free(tile_info->packet);
|
||||||
opj_free(tile_info->tp);
|
opj_free(tile_info->tp);
|
||||||
|
opj_free(tile_info->marker);
|
||||||
}
|
}
|
||||||
opj_free(cstr_info->tile);
|
opj_free(cstr_info->tile);
|
||||||
opj_free(cstr_info->marker);
|
opj_free(cstr_info->marker);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
|
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
|
||||||
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||||
* Copyright (c) 2006-2007, Parvatha Elangovan
|
* Copyright (c) 2006-2007, Parvatha Elangovan
|
||||||
|
* Copyright (c) 2010-2011, Kaori Hagihara
|
||||||
* All rights reserved.
|
* 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
|
||||||
@@ -32,7 +33,6 @@
|
|||||||
#ifndef OPENJPEG_H
|
#ifndef OPENJPEG_H
|
||||||
#define OPENJPEG_H
|
#define OPENJPEG_H
|
||||||
|
|
||||||
#define OPENJPEG_VERSION "1.4.0.635"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==========================================================
|
==========================================================
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
==========================================================
|
==========================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(OPJ_STATIC) || !(defined(WIN32) || defined(__WIN32__))
|
#if defined(OPJ_STATIC) || !defined(_WIN32)
|
||||||
#define OPJ_API
|
#define OPJ_API
|
||||||
#define OPJ_CALLCONV
|
#define OPJ_CALLCONV
|
||||||
#else
|
#else
|
||||||
@@ -53,38 +53,19 @@ that uses this DLL. This way any other project whose source files include this f
|
|||||||
OPJ_API functions as being imported from a DLL, wheras this DLL sees symbols
|
OPJ_API functions as being imported from a DLL, wheras this DLL sees symbols
|
||||||
defined with this macro as being exported.
|
defined with this macro as being exported.
|
||||||
*/
|
*/
|
||||||
#ifdef OPJ_EXPORTS
|
#if defined(OPJ_EXPORTS) || defined(DLL_EXPORT)
|
||||||
#define OPJ_API __declspec(dllexport)
|
#define OPJ_API __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
#define OPJ_API __declspec(dllimport)
|
#define OPJ_API __declspec(dllimport)
|
||||||
#endif /* OPJ_EXPORTS */
|
#endif /* OPJ_EXPORTS */
|
||||||
#endif /* !OPJ_STATIC || !WIN32 */
|
#endif /* !OPJ_STATIC || !_WIN32 */
|
||||||
|
|
||||||
#ifndef __cplusplus
|
typedef int opj_bool;
|
||||||
#if defined(HAVE_STDBOOL_H)
|
#define OPJ_TRUE 1
|
||||||
/*
|
#define OPJ_FALSE 0
|
||||||
The C language implementation does correctly provide the standard header
|
|
||||||
file "stdbool.h".
|
|
||||||
*/
|
|
||||||
#include <stdbool.h>
|
|
||||||
#else
|
|
||||||
/*
|
|
||||||
The C language implementation does not provide the standard header file
|
|
||||||
"stdbool.h" as required by ISO/IEC 9899:1999. Try to compensate for this
|
|
||||||
braindamage below.
|
|
||||||
*/
|
|
||||||
#if !defined(bool)
|
|
||||||
#define bool int
|
|
||||||
#endif
|
|
||||||
#if !defined(true)
|
|
||||||
#define true 1
|
|
||||||
#endif
|
|
||||||
#if !defined(false)
|
|
||||||
#define false 0
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
|
/* Avoid compile-time warning because parameter is not used */
|
||||||
|
#define OPJ_ARG_NOT_USED(x) (void)(x)
|
||||||
/*
|
/*
|
||||||
==========================================================
|
==========================================================
|
||||||
Useful constant definitions
|
Useful constant definitions
|
||||||
@@ -154,14 +135,18 @@ typedef enum COLOR_SPACE {
|
|||||||
CLRSPC_SYCC = 3 /**< YUV */
|
CLRSPC_SYCC = 3 /**< YUV */
|
||||||
} OPJ_COLOR_SPACE;
|
} OPJ_COLOR_SPACE;
|
||||||
|
|
||||||
|
#define ENUMCS_SRGB 16
|
||||||
|
#define ENUMCS_GRAY 17
|
||||||
|
#define ENUMCS_SYCC 18
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Supported codec
|
Supported codec
|
||||||
*/
|
*/
|
||||||
typedef enum CODEC_FORMAT {
|
typedef enum CODEC_FORMAT {
|
||||||
CODEC_UNKNOWN = -1, /**< place-holder */
|
CODEC_UNKNOWN = -1, /**< place-holder */
|
||||||
CODEC_J2K = 0, /**< JPEG-2000 codestream : read/write */
|
CODEC_J2K = 0, /**< JPEG-2000 codestream : read/write */
|
||||||
CODEC_JPT = 1, /**< JPT-stream (JPEG 2000, JPIP) : read only */
|
CODEC_JPT = 1, /**< JPT-stream (JPEG 2000, JPIP) : read only */
|
||||||
CODEC_JP2 = 2 /**< JPEG-2000 file format : read/write */
|
CODEC_JP2 = 2 /**< JPEG-2000 file format : read/write */
|
||||||
} OPJ_CODEC_FORMAT;
|
} OPJ_CODEC_FORMAT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -244,7 +229,7 @@ Compression parameters
|
|||||||
*/
|
*/
|
||||||
typedef struct opj_cparameters {
|
typedef struct opj_cparameters {
|
||||||
/** size of tile: tile_size_on = false (not in argument) or = true (in argument) */
|
/** size of tile: tile_size_on = false (not in argument) or = true (in argument) */
|
||||||
bool tile_size_on;
|
opj_bool tile_size_on;
|
||||||
/** XTOsiz */
|
/** XTOsiz */
|
||||||
int cp_tx0;
|
int cp_tx0;
|
||||||
/** YTOsiz */
|
/** YTOsiz */
|
||||||
@@ -326,7 +311,7 @@ typedef struct opj_cparameters {
|
|||||||
/**@name JPWL encoding parameters */
|
/**@name JPWL encoding parameters */
|
||||||
/*@{*/
|
/*@{*/
|
||||||
/** enables writing of EPC in MH, thus activating JPWL */
|
/** enables writing of EPC in MH, thus activating JPWL */
|
||||||
bool jpwl_epc_on;
|
opj_bool jpwl_epc_on;
|
||||||
/** error protection method for MH (0,1,16,32,37-128) */
|
/** error protection method for MH (0,1,16,32,37-128) */
|
||||||
int jpwl_hprot_MH;
|
int jpwl_hprot_MH;
|
||||||
/** tile number of header protection specification (>=0) */
|
/** tile number of header protection specification (>=0) */
|
||||||
@@ -366,8 +351,12 @@ typedef struct opj_cparameters {
|
|||||||
char tp_flag;
|
char tp_flag;
|
||||||
/** MCT (multiple component transform) */
|
/** MCT (multiple component transform) */
|
||||||
char tcp_mct;
|
char tcp_mct;
|
||||||
|
/** Enable JPIP indexing*/
|
||||||
|
opj_bool jpip_on;
|
||||||
} opj_cparameters_t;
|
} opj_cparameters_t;
|
||||||
|
|
||||||
|
#define OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG 0x0001
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Decompression parameters
|
Decompression parameters
|
||||||
*/
|
*/
|
||||||
@@ -404,7 +393,7 @@ typedef struct opj_dparameters {
|
|||||||
/**@name JPWL decoding parameters */
|
/**@name JPWL decoding parameters */
|
||||||
/*@{*/
|
/*@{*/
|
||||||
/** activates the JPWL correction capabilities */
|
/** activates the JPWL correction capabilities */
|
||||||
bool jpwl_correct;
|
opj_bool jpwl_correct;
|
||||||
/** expected number of components */
|
/** expected number of components */
|
||||||
int jpwl_exp_comps;
|
int jpwl_exp_comps;
|
||||||
/** maximum number of tiles */
|
/** maximum number of tiles */
|
||||||
@@ -420,6 +409,7 @@ typedef struct opj_dparameters {
|
|||||||
*/
|
*/
|
||||||
OPJ_LIMIT_DECODING cp_limit_decoding;
|
OPJ_LIMIT_DECODING cp_limit_decoding;
|
||||||
|
|
||||||
|
unsigned int flags;
|
||||||
} opj_dparameters_t;
|
} opj_dparameters_t;
|
||||||
|
|
||||||
/** Common fields between JPEG-2000 compression and decompression master structs. */
|
/** Common fields between JPEG-2000 compression and decompression master structs. */
|
||||||
@@ -427,7 +417,7 @@ typedef struct opj_dparameters {
|
|||||||
#define opj_common_fields \
|
#define opj_common_fields \
|
||||||
opj_event_mgr_t *event_mgr; /**< pointer to the event manager */\
|
opj_event_mgr_t *event_mgr; /**< pointer to the event manager */\
|
||||||
void * client_data; /**< Available for use by application */\
|
void * client_data; /**< Available for use by application */\
|
||||||
bool is_decompressor; /**< So common code can tell which is which */\
|
opj_bool is_decompressor; /**< So common code can tell which is which */\
|
||||||
OPJ_CODEC_FORMAT codec_format; /**< selected codec */\
|
OPJ_CODEC_FORMAT codec_format; /**< selected codec */\
|
||||||
void *j2k_handle; /**< pointer to the J2K codec */\
|
void *j2k_handle; /**< pointer to the J2K codec */\
|
||||||
void *jp2_handle; /**< pointer to the JP2 codec */\
|
void *jp2_handle; /**< pointer to the JP2 codec */\
|
||||||
@@ -555,6 +545,10 @@ typedef struct opj_image {
|
|||||||
OPJ_COLOR_SPACE color_space;
|
OPJ_COLOR_SPACE color_space;
|
||||||
/** image components */
|
/** image components */
|
||||||
opj_image_comp_t *comps;
|
opj_image_comp_t *comps;
|
||||||
|
/** 'restricted' ICC profile */
|
||||||
|
unsigned char *icc_profile_buf;
|
||||||
|
/** size of ICC profile */
|
||||||
|
int icc_profile_len;
|
||||||
} opj_image_t;
|
} opj_image_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -601,6 +595,21 @@ typedef struct opj_packet_info {
|
|||||||
double disto;
|
double disto;
|
||||||
} opj_packet_info_t;
|
} opj_packet_info_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* UniPG>> */
|
||||||
|
/**
|
||||||
|
Marker structure
|
||||||
|
*/
|
||||||
|
typedef struct opj_marker_info_t {
|
||||||
|
/** marker type */
|
||||||
|
unsigned short int type;
|
||||||
|
/** position in codestream */
|
||||||
|
int pos;
|
||||||
|
/** length, marker val included */
|
||||||
|
int len;
|
||||||
|
} opj_marker_info_t;
|
||||||
|
/* <<UniPG */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Index structure : Information concerning tile-parts
|
Index structure : Information concerning tile-parts
|
||||||
*/
|
*/
|
||||||
@@ -645,26 +654,18 @@ typedef struct opj_tile_info {
|
|||||||
int numpix;
|
int numpix;
|
||||||
/** add fixed_quality */
|
/** add fixed_quality */
|
||||||
double distotile;
|
double distotile;
|
||||||
|
/** number of markers */
|
||||||
|
int marknum;
|
||||||
|
/** list of markers */
|
||||||
|
opj_marker_info_t *marker;
|
||||||
|
/** actual size of markers array */
|
||||||
|
int maxmarknum;
|
||||||
/** number of tile parts */
|
/** number of tile parts */
|
||||||
int num_tps;
|
int num_tps;
|
||||||
/** information concerning tile parts */
|
/** information concerning tile parts */
|
||||||
opj_tp_info_t *tp;
|
opj_tp_info_t *tp;
|
||||||
} opj_tile_info_t;
|
} opj_tile_info_t;
|
||||||
|
|
||||||
/* UniPG>> */
|
|
||||||
/**
|
|
||||||
Marker structure
|
|
||||||
*/
|
|
||||||
typedef struct opj_marker_info_t {
|
|
||||||
/** marker type */
|
|
||||||
unsigned short int type;
|
|
||||||
/** position in codestream */
|
|
||||||
int pos;
|
|
||||||
/** length, marker val included */
|
|
||||||
int len;
|
|
||||||
} opj_marker_info_t;
|
|
||||||
/* <<UniPG */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Index structure of the codestream
|
Index structure of the codestream
|
||||||
*/
|
*/
|
||||||
@@ -883,13 +884,13 @@ Setup the encoder parameters using the current image and using user parameters.
|
|||||||
OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image);
|
OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image);
|
||||||
/**
|
/**
|
||||||
Encode an image into a JPEG-2000 codestream
|
Encode an image into a JPEG-2000 codestream
|
||||||
@param cinfo compressor handle
|
3@param cinfo compressor handle
|
||||||
@param cio Output buffer stream
|
@param cio Output buffer stream
|
||||||
@param image Image to encode
|
@param image Image to encode
|
||||||
@param index Depreacted -> Set to NULL. To extract index, used opj_encode_wci()
|
@param index Depreacted -> Set to NULL. To extract index, used opj_encode_wci()
|
||||||
@return Returns true if successful, returns false otherwise
|
@return Returns true if successful, returns false otherwise
|
||||||
*/
|
*/
|
||||||
OPJ_API bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index);
|
OPJ_API opj_bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index);
|
||||||
/**
|
/**
|
||||||
Encode an image into a JPEG-2000 codestream and extract the codestream information
|
Encode an image into a JPEG-2000 codestream and extract the codestream information
|
||||||
@param cinfo compressor handle
|
@param cinfo compressor handle
|
||||||
@@ -898,13 +899,14 @@ Encode an image into a JPEG-2000 codestream and extract the codestream informati
|
|||||||
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise
|
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise
|
||||||
@return Returns true if successful, returns false otherwise
|
@return Returns true if successful, returns false otherwise
|
||||||
*/
|
*/
|
||||||
OPJ_API bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
|
OPJ_API opj_bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
|
||||||
/**
|
/**
|
||||||
Destroy Codestream information after compression or decompression
|
Destroy Codestream information after compression or decompression
|
||||||
@param cstr_info Codestream information structure
|
@param cstr_info Codestream information structure
|
||||||
*/
|
*/
|
||||||
OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info);
|
OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
36
indra/libopenjpeg/opj_config.h
Normal file
36
indra/libopenjpeg/opj_config.h
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/* create config.h for CMake */
|
||||||
|
#define PACKAGE_VERSION "1.5.2"
|
||||||
|
|
||||||
|
#define HAVE_INTTYPES_H
|
||||||
|
#define HAVE_MEMORY_H
|
||||||
|
#define HAVE_STDINT_H
|
||||||
|
#define HAVE_STDLIB_H
|
||||||
|
#define HAVE_STRINGS_H
|
||||||
|
#define HAVE_STRING_H
|
||||||
|
#define HAVE_SYS_STAT_H
|
||||||
|
#define HAVE_SYS_TYPES_H
|
||||||
|
#define HAVE_UNISTD_H
|
||||||
|
/* #define HAVE_LIBPNG */
|
||||||
|
/* #define HAVE_PNG_H */
|
||||||
|
/* #define HAVE_LIBTIFF */
|
||||||
|
/* #define HAVE_TIFF_H */
|
||||||
|
|
||||||
|
/* #undef HAVE_LIBLCMS1 */
|
||||||
|
/* #undef HAVE_LIBLCMS2 */
|
||||||
|
/* #undef HAVE_LCMS1_H */
|
||||||
|
/* #undef HAVE_LCMS2_H */
|
||||||
|
|
||||||
|
/* Byte order. */
|
||||||
|
/* All compilers that support Mac OS X define either __BIG_ENDIAN__ or
|
||||||
|
* __LITTLE_ENDIAN__ to match the endianness of the architecture being
|
||||||
|
* compiled for. This is not necessarily the same as the architecture of the
|
||||||
|
* machine doing the building. In order to support Universal Binaries on
|
||||||
|
* Mac OS X, we prefer those defines to decide the endianness.
|
||||||
|
* On other platforms we use the result of the TRY_RUN. */
|
||||||
|
#if !defined(__APPLE__)
|
||||||
|
/* #undef OPJ_BIG_ENDIAN */
|
||||||
|
#elif defined(__BIG_ENDIAN__)
|
||||||
|
# define OPJ_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Herv<EFBFBD> Drolon, FreeImage Team
|
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||||
* All rights reserved.
|
* 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
|
||||||
@@ -89,20 +89,25 @@ Most compilers implement their own version of this keyword ...
|
|||||||
/* MSVC and Borland C do not have lrintf */
|
/* MSVC and Borland C do not have lrintf */
|
||||||
#if defined(_MSC_VER) || defined(__BORLANDC__)
|
#if defined(_MSC_VER) || defined(__BORLANDC__)
|
||||||
static INLINE long lrintf(float f){
|
static INLINE long lrintf(float f){
|
||||||
int i;
|
#ifdef _M_X64
|
||||||
|
return (long)((f>0.0f) ? (f + 0.5f):(f -0.5f));
|
||||||
_asm{
|
#else
|
||||||
fld f
|
int i;
|
||||||
fistp i
|
|
||||||
};
|
_asm{
|
||||||
|
fld f
|
||||||
return i;
|
fistp i
|
||||||
|
};
|
||||||
|
|
||||||
|
return i;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "j2k_lib.h"
|
#include "j2k_lib.h"
|
||||||
#include "opj_malloc.h"
|
#include "opj_malloc.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
|
#include "bio.h"
|
||||||
#include "cio.h"
|
#include "cio.h"
|
||||||
|
|
||||||
#include "image.h"
|
#include "image.h"
|
||||||
@@ -123,9 +128,12 @@ static INLINE long lrintf(float f){
|
|||||||
#include "int.h"
|
#include "int.h"
|
||||||
#include "fix.h"
|
#include "fix.h"
|
||||||
|
|
||||||
|
#include "cidx_manager.h"
|
||||||
|
#include "indexbox_manager.h"
|
||||||
|
|
||||||
/* JPWL>> */
|
/* JPWL>> */
|
||||||
#ifdef USE_JPWL
|
#ifdef USE_JPWL
|
||||||
#include "../jpwl/jpwl.h"
|
#include "./jpwl/jpwl.h"
|
||||||
#endif /* USE_JPWL */
|
#endif /* USE_JPWL */
|
||||||
/* <<JPWL */
|
/* <<JPWL */
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Herv<EFBFBD> Drolon, FreeImage Team
|
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||||
* Copyright (c) 2007, Callum Lerwick <seg@haxxed.com>
|
* Copyright (c) 2007, Callum Lerwick <seg@haxxed.com>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -69,7 +69,7 @@ Allocate memory aligned to a 16 byte boundry
|
|||||||
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
|
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
|
||||||
*/
|
*/
|
||||||
/* FIXME: These should be set with cmake tests, but we're currently not requiring use of cmake */
|
/* FIXME: These should be set with cmake tests, but we're currently not requiring use of cmake */
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
/* Someone should tell the mingw people that their malloc.h ought to provide _mm_malloc() */
|
/* Someone should tell the mingw people that their malloc.h ought to provide _mm_malloc() */
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#include <mm_malloc.h>
|
#include <mm_malloc.h>
|
||||||
@@ -80,11 +80,13 @@ Allocate memory aligned to a 16 byte boundry
|
|||||||
#define HAVE_MM_MALLOC
|
#define HAVE_MM_MALLOC
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#else /* Not WIN32 */
|
#else /* Not _WIN32 */
|
||||||
#if defined(__sun)
|
#if defined(__sun)
|
||||||
#define HAVE_MEMALIGN
|
#define HAVE_MEMALIGN
|
||||||
|
#elif defined(__FreeBSD__)
|
||||||
|
#define HAVE_POSIX_MEMALIGN
|
||||||
/* Linux x86_64 and OSX always align allocations to 16 bytes */
|
/* Linux x86_64 and OSX always align allocations to 16 bytes */
|
||||||
#elif !defined(__amd64__) && !defined(__APPLE__)
|
#elif !defined(__amd64__) && !defined(__APPLE__) && !defined(_AIX)
|
||||||
#define HAVE_MEMALIGN
|
#define HAVE_MEMALIGN
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -130,22 +132,22 @@ Allocate memory aligned to a 16 byte boundry
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
Reallocate memory blocks.
|
Reallocate memory blocks.
|
||||||
@param memblock Pointer to previously allocated memory block
|
@param m Pointer to previously allocated memory block
|
||||||
@param size New size in bytes
|
@param s New size in bytes
|
||||||
@return Returns a void pointer to the reallocated (and possibly moved) memory block
|
@return Returns a void pointer to the reallocated (and possibly moved) memory block
|
||||||
*/
|
*/
|
||||||
#ifdef ALLOC_PERF_OPT
|
#ifdef ALLOC_PERF_OPT
|
||||||
void * OPJ_CALLCONV opj_realloc(void * _Memory, size_t NewSize);
|
void * OPJ_CALLCONV opj_realloc(void * m, size_t s);
|
||||||
#else
|
#else
|
||||||
#define opj_realloc(m, s) realloc(m, s)
|
#define opj_realloc(m, s) realloc(m, s)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Deallocates or frees a memory block.
|
Deallocates or frees a memory block.
|
||||||
@param memblock Previously allocated memory block to be freed
|
@param m Previously allocated memory block to be freed
|
||||||
*/
|
*/
|
||||||
#ifdef ALLOC_PERF_OPT
|
#ifdef ALLOC_PERF_OPT
|
||||||
void OPJ_CALLCONV opj_free(void * _Memory);
|
void OPJ_CALLCONV opj_free(void * m);
|
||||||
#else
|
#else
|
||||||
#define opj_free(m) free(m)
|
#define opj_free(m) free(m)
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
170
indra/libopenjpeg/phix_manager.c
Normal file
170
indra/libopenjpeg/phix_manager.c
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
/*
|
||||||
|
* $Id: phix_manager.c 897 2011-08-28 21:43:57Z Kaori.Hagihara@gmail.com $
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
|
||||||
|
* Copyright (c) 2002-2011, Professor Benoit Macq
|
||||||
|
* Copyright (c) 2003-2004, Yannick Verschueren
|
||||||
|
* Copyright (c) 2010-2011, Kaori Hagihara
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. 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.
|
||||||
|
*
|
||||||
|
* 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 OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
* \brief Modification of jpip.c from 2KAN indexer
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include "opj_includes.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write faix box of phix
|
||||||
|
*
|
||||||
|
* @param[in] coff offset of j2k codestream
|
||||||
|
* @param[in] compno component number
|
||||||
|
* @param[in] cstr_info codestream information
|
||||||
|
* @param[in] EPHused true if if EPH option used
|
||||||
|
* @param[in] j2klen length of j2k codestream
|
||||||
|
* @param[in] cio file output handle
|
||||||
|
* @return length of faix box
|
||||||
|
*/
|
||||||
|
int write_phixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_bool EPHused, int j2klen, opj_cio_t *cio);
|
||||||
|
|
||||||
|
int write_phix( int coff, opj_codestream_info_t cstr_info, opj_bool EPHused, int j2klen, opj_cio_t *cio)
|
||||||
|
{
|
||||||
|
int len, lenp=0, compno, i;
|
||||||
|
opj_jp2_box_t *box;
|
||||||
|
|
||||||
|
box = (opj_jp2_box_t *)opj_calloc( cstr_info.numcomps, sizeof(opj_jp2_box_t));
|
||||||
|
|
||||||
|
for( i=0;i<2;i++){
|
||||||
|
if (i) cio_seek( cio, lenp);
|
||||||
|
|
||||||
|
lenp = cio_tell( cio);
|
||||||
|
cio_skip( cio, 4); /* L [at the end] */
|
||||||
|
cio_write( cio, JPIP_PHIX, 4); /* PHIX */
|
||||||
|
|
||||||
|
write_manf( i, cstr_info.numcomps, box, cio);
|
||||||
|
|
||||||
|
for( compno=0; compno<cstr_info.numcomps; compno++){
|
||||||
|
box[compno].length = write_phixfaix( coff, compno, cstr_info, EPHused, j2klen, cio);
|
||||||
|
box[compno].type = JPIP_FAIX;
|
||||||
|
}
|
||||||
|
|
||||||
|
len = cio_tell( cio)-lenp;
|
||||||
|
cio_seek( cio, lenp);
|
||||||
|
cio_write( cio, len, 4); /* L */
|
||||||
|
cio_seek( cio, lenp+len);
|
||||||
|
}
|
||||||
|
|
||||||
|
opj_free(box);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
int write_phixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_bool EPHused, int j2klen, opj_cio_t *cio)
|
||||||
|
{
|
||||||
|
int len, lenp, tileno, version, i, nmax, size_of_coding; /* 4 or 8 */
|
||||||
|
opj_tile_info_t *tile_Idx;
|
||||||
|
opj_packet_info_t packet;
|
||||||
|
int resno, precno, layno, num_packet;
|
||||||
|
int numOfres, numOfprec, numOflayers;
|
||||||
|
packet.end_ph_pos = packet.start_pos = -1;
|
||||||
|
(void)EPHused; /* unused ? */
|
||||||
|
|
||||||
|
if( j2klen > pow( 2.0, 32)){
|
||||||
|
size_of_coding = 8;
|
||||||
|
version = 1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
size_of_coding = 4;
|
||||||
|
version = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
lenp = cio_tell( cio);
|
||||||
|
cio_skip( cio, 4); /* L [at the end] */
|
||||||
|
cio_write( cio, JPIP_FAIX, 4); /* FAIX */
|
||||||
|
cio_write( cio, version,1); /* Version 0 = 4 bytes */
|
||||||
|
|
||||||
|
nmax = 0;
|
||||||
|
for( i=0; i<=cstr_info.numdecompos[compno]; i++)
|
||||||
|
nmax += cstr_info.tile[0].ph[i] * cstr_info.tile[0].pw[i] * cstr_info.numlayers;
|
||||||
|
|
||||||
|
cio_write( cio, nmax, size_of_coding); /* NMAX */
|
||||||
|
cio_write( cio, cstr_info.tw*cstr_info.th, size_of_coding); /* M */
|
||||||
|
|
||||||
|
for( tileno=0; tileno<cstr_info.tw*cstr_info.th; tileno++){
|
||||||
|
tile_Idx = &cstr_info.tile[ tileno];
|
||||||
|
|
||||||
|
num_packet = 0;
|
||||||
|
numOfres = cstr_info.numdecompos[compno] + 1;
|
||||||
|
|
||||||
|
for( resno=0; resno<numOfres ; resno++){
|
||||||
|
numOfprec = tile_Idx->pw[resno]*tile_Idx->ph[resno];
|
||||||
|
for( precno=0; precno<numOfprec; precno++){
|
||||||
|
numOflayers = cstr_info.numlayers;
|
||||||
|
for( layno=0; layno<numOflayers; layno++){
|
||||||
|
|
||||||
|
switch ( cstr_info.prog){
|
||||||
|
case LRCP:
|
||||||
|
packet = tile_Idx->packet[ ((layno*numOfres+resno)*cstr_info.numcomps+compno)*numOfprec+precno];
|
||||||
|
break;
|
||||||
|
case RLCP:
|
||||||
|
packet = tile_Idx->packet[ ((resno*numOflayers+layno)*cstr_info.numcomps+compno)*numOfprec+precno];
|
||||||
|
break;
|
||||||
|
case RPCL:
|
||||||
|
packet = tile_Idx->packet[ ((resno*numOfprec+precno)*cstr_info.numcomps+compno)*numOflayers+layno];
|
||||||
|
break;
|
||||||
|
case PCRL:
|
||||||
|
packet = tile_Idx->packet[ ((precno*cstr_info.numcomps+compno)*numOfres+resno)*numOflayers + layno];
|
||||||
|
break;
|
||||||
|
case CPRL:
|
||||||
|
packet = tile_Idx->packet[ ((compno*numOfprec+precno)*numOfres+resno)*numOflayers + layno];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf( stderr, "failed to ppix indexing\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
cio_write( cio, packet.start_pos-coff, size_of_coding); /* start position */
|
||||||
|
cio_write( cio, packet.end_ph_pos-packet.start_pos+1, size_of_coding); /* length */
|
||||||
|
|
||||||
|
num_packet++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* PADDING */
|
||||||
|
while( num_packet < nmax){
|
||||||
|
cio_write( cio, 0, size_of_coding); /* start position */
|
||||||
|
cio_write( cio, 0, size_of_coding); /* length */
|
||||||
|
num_packet++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
len = cio_tell( cio)-lenp;
|
||||||
|
cio_seek( cio, lenp);
|
||||||
|
cio_write( cio, len, 4); /* L */
|
||||||
|
cio_seek( cio, lenp+len);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
@@ -43,31 +43,31 @@ Get next packet in layer-resolution-component-precinct order.
|
|||||||
@param pi packet iterator to modify
|
@param pi packet iterator to modify
|
||||||
@return returns false if pi pointed to the last packet or else returns true
|
@return returns false if pi pointed to the last packet or else returns true
|
||||||
*/
|
*/
|
||||||
static bool pi_next_lrcp(opj_pi_iterator_t * pi);
|
static opj_bool pi_next_lrcp(opj_pi_iterator_t * pi);
|
||||||
/**
|
/**
|
||||||
Get next packet in resolution-layer-component-precinct order.
|
Get next packet in resolution-layer-component-precinct order.
|
||||||
@param pi packet iterator to modify
|
@param pi packet iterator to modify
|
||||||
@return returns false if pi pointed to the last packet or else returns true
|
@return returns false if pi pointed to the last packet or else returns true
|
||||||
*/
|
*/
|
||||||
static bool pi_next_rlcp(opj_pi_iterator_t * pi);
|
static opj_bool pi_next_rlcp(opj_pi_iterator_t * pi);
|
||||||
/**
|
/**
|
||||||
Get next packet in resolution-precinct-component-layer order.
|
Get next packet in resolution-precinct-component-layer order.
|
||||||
@param pi packet iterator to modify
|
@param pi packet iterator to modify
|
||||||
@return returns false if pi pointed to the last packet or else returns true
|
@return returns false if pi pointed to the last packet or else returns true
|
||||||
*/
|
*/
|
||||||
static bool pi_next_rpcl(opj_pi_iterator_t * pi);
|
static opj_bool pi_next_rpcl(opj_pi_iterator_t * pi);
|
||||||
/**
|
/**
|
||||||
Get next packet in precinct-component-resolution-layer order.
|
Get next packet in precinct-component-resolution-layer order.
|
||||||
@param pi packet iterator to modify
|
@param pi packet iterator to modify
|
||||||
@return returns false if pi pointed to the last packet or else returns true
|
@return returns false if pi pointed to the last packet or else returns true
|
||||||
*/
|
*/
|
||||||
static bool pi_next_pcrl(opj_pi_iterator_t * pi);
|
static opj_bool pi_next_pcrl(opj_pi_iterator_t * pi);
|
||||||
/**
|
/**
|
||||||
Get next packet in component-precinct-resolution-layer order.
|
Get next packet in component-precinct-resolution-layer order.
|
||||||
@param pi packet iterator to modify
|
@param pi packet iterator to modify
|
||||||
@return returns false if pi pointed to the last packet or else returns true
|
@return returns false if pi pointed to the last packet or else returns true
|
||||||
*/
|
*/
|
||||||
static bool pi_next_cprl(opj_pi_iterator_t * pi);
|
static opj_bool pi_next_cprl(opj_pi_iterator_t * pi);
|
||||||
|
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ static bool pi_next_cprl(opj_pi_iterator_t * pi);
|
|||||||
==========================================================
|
==========================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool pi_next_lrcp(opj_pi_iterator_t * pi) {
|
static opj_bool pi_next_lrcp(opj_pi_iterator_t * pi) {
|
||||||
opj_pi_comp_t *comp = NULL;
|
opj_pi_comp_t *comp = NULL;
|
||||||
opj_pi_resolution_t *res = NULL;
|
opj_pi_resolution_t *res = NULL;
|
||||||
long index = 0;
|
long index = 0;
|
||||||
@@ -108,7 +108,7 @@ static bool pi_next_lrcp(opj_pi_iterator_t * pi) {
|
|||||||
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
|
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
|
||||||
if (!pi->include[index]) {
|
if (!pi->include[index]) {
|
||||||
pi->include[index] = 1;
|
pi->include[index] = 1;
|
||||||
return true;
|
return OPJ_TRUE;
|
||||||
}
|
}
|
||||||
LABEL_SKIP:;
|
LABEL_SKIP:;
|
||||||
}
|
}
|
||||||
@@ -116,10 +116,10 @@ LABEL_SKIP:;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool pi_next_rlcp(opj_pi_iterator_t * pi) {
|
static opj_bool pi_next_rlcp(opj_pi_iterator_t * pi) {
|
||||||
opj_pi_comp_t *comp = NULL;
|
opj_pi_comp_t *comp = NULL;
|
||||||
opj_pi_resolution_t *res = NULL;
|
opj_pi_resolution_t *res = NULL;
|
||||||
long index = 0;
|
long index = 0;
|
||||||
@@ -147,7 +147,7 @@ static bool pi_next_rlcp(opj_pi_iterator_t * pi) {
|
|||||||
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
|
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
|
||||||
if (!pi->include[index]) {
|
if (!pi->include[index]) {
|
||||||
pi->include[index] = 1;
|
pi->include[index] = 1;
|
||||||
return true;
|
return OPJ_TRUE;
|
||||||
}
|
}
|
||||||
LABEL_SKIP:;
|
LABEL_SKIP:;
|
||||||
}
|
}
|
||||||
@@ -155,10 +155,10 @@ LABEL_SKIP:;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool pi_next_rpcl(opj_pi_iterator_t * pi) {
|
static opj_bool pi_next_rpcl(opj_pi_iterator_t * pi) {
|
||||||
opj_pi_comp_t *comp = NULL;
|
opj_pi_comp_t *comp = NULL;
|
||||||
opj_pi_resolution_t *res = NULL;
|
opj_pi_resolution_t *res = NULL;
|
||||||
long index = 0;
|
long index = 0;
|
||||||
@@ -229,7 +229,7 @@ if (!pi->tp_on){
|
|||||||
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
|
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
|
||||||
if (!pi->include[index]) {
|
if (!pi->include[index]) {
|
||||||
pi->include[index] = 1;
|
pi->include[index] = 1;
|
||||||
return true;
|
return OPJ_TRUE;
|
||||||
}
|
}
|
||||||
LABEL_SKIP:;
|
LABEL_SKIP:;
|
||||||
}
|
}
|
||||||
@@ -238,10 +238,10 @@ LABEL_SKIP:;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool pi_next_pcrl(opj_pi_iterator_t * pi) {
|
static opj_bool pi_next_pcrl(opj_pi_iterator_t * pi) {
|
||||||
opj_pi_comp_t *comp = NULL;
|
opj_pi_comp_t *comp = NULL;
|
||||||
opj_pi_resolution_t *res = NULL;
|
opj_pi_resolution_t *res = NULL;
|
||||||
long index = 0;
|
long index = 0;
|
||||||
@@ -310,7 +310,7 @@ static bool pi_next_pcrl(opj_pi_iterator_t * pi) {
|
|||||||
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
|
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
|
||||||
if (!pi->include[index]) {
|
if (!pi->include[index]) {
|
||||||
pi->include[index] = 1;
|
pi->include[index] = 1;
|
||||||
return true;
|
return OPJ_TRUE;
|
||||||
}
|
}
|
||||||
LABEL_SKIP:;
|
LABEL_SKIP:;
|
||||||
}
|
}
|
||||||
@@ -319,10 +319,10 @@ LABEL_SKIP:;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool pi_next_cprl(opj_pi_iterator_t * pi) {
|
static opj_bool pi_next_cprl(opj_pi_iterator_t * pi) {
|
||||||
opj_pi_comp_t *comp = NULL;
|
opj_pi_comp_t *comp = NULL;
|
||||||
opj_pi_resolution_t *res = NULL;
|
opj_pi_resolution_t *res = NULL;
|
||||||
long index = 0;
|
long index = 0;
|
||||||
@@ -389,7 +389,7 @@ static bool pi_next_cprl(opj_pi_iterator_t * pi) {
|
|||||||
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
|
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
|
||||||
if (!pi->include[index]) {
|
if (!pi->include[index]) {
|
||||||
pi->include[index] = 1;
|
pi->include[index] = 1;
|
||||||
return true;
|
return OPJ_TRUE;
|
||||||
}
|
}
|
||||||
LABEL_SKIP:;
|
LABEL_SKIP:;
|
||||||
}
|
}
|
||||||
@@ -398,7 +398,7 @@ LABEL_SKIP:;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -707,7 +707,7 @@ void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool pi_next(opj_pi_iterator_t * pi) {
|
opj_bool pi_next(opj_pi_iterator_t * pi) {
|
||||||
switch (pi->poc.prg) {
|
switch (pi->poc.prg) {
|
||||||
case LRCP:
|
case LRCP:
|
||||||
return pi_next_lrcp(pi);
|
return pi_next_lrcp(pi);
|
||||||
@@ -720,13 +720,13 @@ bool pi_next(opj_pi_iterator_t * pi) {
|
|||||||
case CPRL:
|
case CPRL:
|
||||||
return pi_next_cprl(pi);
|
return pi_next_cprl(pi);
|
||||||
case PROG_UNKNOWN:
|
case PROG_UNKNOWN:
|
||||||
return false;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp){
|
opj_bool pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp){
|
||||||
char prog[4];
|
char prog[4];
|
||||||
int i;
|
int i;
|
||||||
int incr_top=1,resetX=0;
|
int incr_top=1,resetX=0;
|
||||||
@@ -748,7 +748,7 @@ bool pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,
|
|||||||
case RPCL: strncpy(prog, "RPCL",4);
|
case RPCL: strncpy(prog, "RPCL",4);
|
||||||
break;
|
break;
|
||||||
case PROG_UNKNOWN:
|
case PROG_UNKNOWN:
|
||||||
return true;
|
return OPJ_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(cp->tp_on && ((!cp->cinema && (t2_mode == FINAL_PASS)) || cp->cinema))){
|
if(!(cp->tp_on && ((!cp->cinema && (t2_mode == FINAL_PASS)) || cp->cinema))){
|
||||||
@@ -958,6 +958,6 @@ bool pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -115,12 +115,14 @@ Modify the packet iterator for enabling tile part generation
|
|||||||
@param pi Handle to the packet iterator generated in pi_initialise_encode
|
@param pi Handle to the packet iterator generated in pi_initialise_encode
|
||||||
@param cp Coding parameters
|
@param cp Coding parameters
|
||||||
@param tileno Number that identifies the tile for which to list the packets
|
@param tileno Number that identifies the tile for which to list the packets
|
||||||
|
@param pino Iterator index for pi
|
||||||
@param tpnum Tile part number of the current tile
|
@param tpnum Tile part number of the current tile
|
||||||
@param tppos The position of the tile part flag in the progression order
|
@param tppos The position of the tile part flag in the progression order
|
||||||
|
@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass
|
||||||
@param cur_totnum_tp The total number of tile parts in the current tile
|
@param cur_totnum_tp The total number of tile parts in the current tile
|
||||||
@return Returns true if an error is detected
|
@return Returns true if an error is detected
|
||||||
*/
|
*/
|
||||||
bool pi_create_encode(opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp);
|
opj_bool pi_create_encode(opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp);
|
||||||
/**
|
/**
|
||||||
Create a packet iterator for Decoder
|
Create a packet iterator for Decoder
|
||||||
@param image Raw image for which the packets will be listed
|
@param image Raw image for which the packets will be listed
|
||||||
@@ -145,7 +147,7 @@ Modify the packet iterator to point to the next packet
|
|||||||
@param pi Packet iterator to modify
|
@param pi Packet iterator to modify
|
||||||
@return Returns false if pi pointed to the last packet or else returns true
|
@return Returns false if pi pointed to the last packet or else returns true
|
||||||
*/
|
*/
|
||||||
bool pi_next(opj_pi_iterator_t * pi);
|
opj_bool pi_next(opj_pi_iterator_t * pi);
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
|||||||
173
indra/libopenjpeg/ppix_manager.c
Normal file
173
indra/libopenjpeg/ppix_manager.c
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
/*
|
||||||
|
* $Id: ppix_manager.c 897 2011-08-28 21:43:57Z Kaori.Hagihara@gmail.com $
|
||||||
|
*
|
||||||
|
* Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
|
||||||
|
* Copyright (c) 2002-2011, Professor Benoit Macq
|
||||||
|
* Copyright (c) 2003-2004, Yannick Verschueren
|
||||||
|
* Copyright (c) 2010-2011, Kaori Hagihara
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. 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.
|
||||||
|
*
|
||||||
|
* 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 OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
* \brief Modification of jpip.c from 2KAN indexer
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include "opj_includes.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write faix box of ppix
|
||||||
|
*
|
||||||
|
* @param[in] coff offset of j2k codestream
|
||||||
|
* @param[in] compno component number
|
||||||
|
* @param[in] cstr_info codestream information
|
||||||
|
* @param[in] EPHused true if if EPH option used
|
||||||
|
* @param[in] j2klen length of j2k codestream
|
||||||
|
* @param[in] cio file output handle
|
||||||
|
* @return length of faix box
|
||||||
|
*/
|
||||||
|
int write_ppixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_bool EPHused, int j2klen, opj_cio_t *cio);
|
||||||
|
|
||||||
|
int write_ppix( int coff, opj_codestream_info_t cstr_info, opj_bool EPHused, int j2klen, opj_cio_t *cio)
|
||||||
|
{
|
||||||
|
int len, lenp, compno, i;
|
||||||
|
opj_jp2_box_t *box;
|
||||||
|
|
||||||
|
/* printf("cstr_info.packno %d\n", cstr_info.packno); //NMAX? */
|
||||||
|
|
||||||
|
lenp = -1;
|
||||||
|
box = (opj_jp2_box_t *)opj_calloc( cstr_info.numcomps, sizeof(opj_jp2_box_t));
|
||||||
|
|
||||||
|
for (i=0;i<2;i++){
|
||||||
|
if (i) cio_seek( cio, lenp);
|
||||||
|
|
||||||
|
lenp = cio_tell( cio);
|
||||||
|
cio_skip( cio, 4); /* L [at the end] */
|
||||||
|
cio_write( cio, JPIP_PPIX, 4); /* PPIX */
|
||||||
|
|
||||||
|
write_manf( i, cstr_info.numcomps, box, cio);
|
||||||
|
|
||||||
|
for (compno=0; compno<cstr_info.numcomps; compno++){
|
||||||
|
box[compno].length = write_ppixfaix( coff, compno, cstr_info, EPHused, j2klen, cio);
|
||||||
|
box[compno].type = JPIP_FAIX;
|
||||||
|
}
|
||||||
|
|
||||||
|
len = cio_tell( cio)-lenp;
|
||||||
|
cio_seek( cio, lenp);
|
||||||
|
cio_write( cio, len, 4); /* L */
|
||||||
|
cio_seek( cio, lenp+len);
|
||||||
|
}
|
||||||
|
|
||||||
|
opj_free(box);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
int write_ppixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_bool EPHused, int j2klen, opj_cio_t *cio)
|
||||||
|
{
|
||||||
|
int len, lenp, tileno, version, i, nmax, size_of_coding; /* 4 or 8*/
|
||||||
|
opj_tile_info_t *tile_Idx;
|
||||||
|
opj_packet_info_t packet;
|
||||||
|
int resno, precno, layno, num_packet;
|
||||||
|
int numOfres, numOfprec, numOflayers;
|
||||||
|
packet.end_pos = packet.end_ph_pos = packet.start_pos = -1;
|
||||||
|
(void)EPHused; /* unused ? */
|
||||||
|
|
||||||
|
if( j2klen > pow( 2.0, 32)){
|
||||||
|
size_of_coding = 8;
|
||||||
|
version = 1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
size_of_coding = 4;
|
||||||
|
version = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
lenp = cio_tell( cio);
|
||||||
|
cio_skip( cio, 4); /* L [at the end] */
|
||||||
|
cio_write( cio, JPIP_FAIX, 4); /* FAIX */
|
||||||
|
cio_write( cio, version, 1); /* Version 0 = 4 bytes */
|
||||||
|
|
||||||
|
nmax = 0;
|
||||||
|
for( i=0; i<=cstr_info.numdecompos[compno]; i++)
|
||||||
|
nmax += cstr_info.tile[0].ph[i] * cstr_info.tile[0].pw[i] * cstr_info.numlayers;
|
||||||
|
|
||||||
|
cio_write( cio, nmax, size_of_coding); /* NMAX */
|
||||||
|
cio_write( cio, cstr_info.tw*cstr_info.th, size_of_coding); /* M */
|
||||||
|
|
||||||
|
for( tileno=0; tileno<cstr_info.tw*cstr_info.th; tileno++){
|
||||||
|
tile_Idx = &cstr_info.tile[ tileno];
|
||||||
|
|
||||||
|
num_packet=0;
|
||||||
|
numOfres = cstr_info.numdecompos[compno] + 1;
|
||||||
|
|
||||||
|
for( resno=0; resno<numOfres ; resno++){
|
||||||
|
numOfprec = tile_Idx->pw[resno]*tile_Idx->ph[resno];
|
||||||
|
for( precno=0; precno<numOfprec; precno++){
|
||||||
|
numOflayers = cstr_info.numlayers;
|
||||||
|
for( layno=0; layno<numOflayers; layno++){
|
||||||
|
|
||||||
|
switch ( cstr_info.prog){
|
||||||
|
case LRCP:
|
||||||
|
packet = tile_Idx->packet[ ((layno*numOfres+resno)*cstr_info.numcomps+compno)*numOfprec+precno];
|
||||||
|
break;
|
||||||
|
case RLCP:
|
||||||
|
packet = tile_Idx->packet[ ((resno*numOflayers+layno)*cstr_info.numcomps+compno)*numOfprec+precno];
|
||||||
|
break;
|
||||||
|
case RPCL:
|
||||||
|
packet = tile_Idx->packet[ ((resno*numOfprec+precno)*cstr_info.numcomps+compno)*numOflayers+layno];
|
||||||
|
break;
|
||||||
|
case PCRL:
|
||||||
|
packet = tile_Idx->packet[ ((precno*cstr_info.numcomps+compno)*numOfres+resno)*numOflayers + layno];
|
||||||
|
break;
|
||||||
|
case CPRL:
|
||||||
|
packet = tile_Idx->packet[ ((compno*numOfprec+precno)*numOfres+resno)*numOflayers + layno];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf( stderr, "failed to ppix indexing\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
cio_write( cio, packet.start_pos-coff, size_of_coding); /* start position */
|
||||||
|
cio_write( cio, packet.end_pos-packet.start_pos+1, size_of_coding); /* length */
|
||||||
|
|
||||||
|
num_packet++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while( num_packet < nmax){ /* PADDING */
|
||||||
|
cio_write( cio, 0, size_of_coding); /* start position */
|
||||||
|
cio_write( cio, 0, size_of_coding); /* length */
|
||||||
|
num_packet++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
len = cio_tell( cio)-lenp;
|
||||||
|
cio_seek( cio, lenp);
|
||||||
|
cio_write( cio, len, 4); /* L */
|
||||||
|
cio_seek( cio, lenp+len);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user