Compare commits
638 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9619102683 | ||
![]() |
86920e52ea | ||
![]() |
98240fc76b | ||
![]() |
5c24071504 | ||
![]() |
0491c2cfc8 | ||
![]() |
3fae3283e6 | ||
![]() |
d05c4d8841 | ||
![]() |
e38c1680d6 | ||
![]() |
77ed11c506 | ||
![]() |
4a742e5c79 | ||
![]() |
27c04aaa67 | ||
![]() |
0bc31f1887 | ||
![]() |
fb37eda3e2 | ||
![]() |
05d75b4353 | ||
![]() |
eed2ce58e3 | ||
![]() |
1de99a2a81 | ||
![]() |
36be4f7f06 | ||
![]() |
a1cfcb413d | ||
![]() |
6f5189c044 | ||
![]() |
06ce0d8830 | ||
![]() |
987ac89403 | ||
![]() |
cfaee9f7c6 | ||
![]() |
3e6d476ac3 | ||
![]() |
d96ba65a23 | ||
![]() |
4decd27947 | ||
![]() |
31dab574cc | ||
![]() |
da761c9a22 | ||
![]() |
e4fa638653 | ||
![]() |
1fae7018a8 | ||
![]() |
d8fc974ac0 | ||
![]() |
6da2018789 | ||
![]() |
1771722b2f | ||
![]() |
8e17e82d9e | ||
![]() |
861175ef00 | ||
![]() |
d53492bba4 | ||
![]() |
658454a04c | ||
![]() |
b862c108dd | ||
![]() |
aee120afb9 | ||
![]() |
8ae92aef66 | ||
![]() |
e6db21ecc4 | ||
![]() |
418f4219fa | ||
![]() |
7af0d906e3 | ||
![]() |
945dad277d | ||
![]() |
c764c2a20f | ||
![]() |
3ed8fe8778 | ||
![]() |
cbf923b12c | ||
![]() |
d371ca93e5 | ||
![]() |
597d02b508 | ||
![]() |
fb5a692d27 | ||
![]() |
c6ef75690f | ||
![]() |
b2ae57f1b6 | ||
![]() |
562f1470ce | ||
![]() |
ac10665ad8 | ||
![]() |
07f7b66fae | ||
![]() |
c351aa7f1b | ||
![]() |
f42d52e6bd | ||
![]() |
da9402fbf6 | ||
![]() |
da227b901d | ||
![]() |
0c2cfff9b0 | ||
![]() |
0030303b69 | ||
![]() |
7725a7eb56 | ||
![]() |
27dad21548 | ||
![]() |
94d4fee08f | ||
![]() |
2debd5b5f7 | ||
![]() |
404e998eb7 | ||
![]() |
d3dfcde0f7 | ||
![]() |
d419b93e3e | ||
![]() |
0ff10bb1f7 | ||
![]() |
bb6bcbccda | ||
![]() |
353246bd60 | ||
![]() |
9d0b2cbbce | ||
![]() |
1ef86980b9 | ||
![]() |
4f8a166058 | ||
![]() |
6f53e59641 | ||
![]() |
02321de0f2 | ||
![]() |
41e6eceb28 | ||
![]() |
7d8199f0c3 | ||
![]() |
19054ab6da | ||
![]() |
fffa2a61d7 | ||
![]() |
c2b43164bd | ||
![]() |
9954d05ca6 | ||
![]() |
a39b5af10b | ||
![]() |
315e3c2518 | ||
![]() |
85e79ce288 | ||
![]() |
c96031da69 | ||
![]() |
cb14764fab | ||
![]() |
e5aaac24bb | ||
![]() |
cc17629f30 | ||
![]() |
13db80c282 | ||
![]() |
40dcae9c2e | ||
![]() |
615c90c948 | ||
![]() |
ddacf1cf69 | ||
![]() |
48140167cd | ||
![]() |
3273c7b679 | ||
![]() |
eaadfb5869 | ||
![]() |
adaf2b697c | ||
![]() |
58d2e70fc5 | ||
![]() |
0905af38fc | ||
![]() |
bb9c95ea53 | ||
![]() |
350ffe8dae | ||
![]() |
63fc44dfa5 | ||
![]() |
6bf7e2cc37 | ||
![]() |
ffc6aeef14 | ||
![]() |
c0a9cbebe1 | ||
![]() |
bf5f585b0d | ||
![]() |
209def2d72 | ||
![]() |
4aa12b6c5f | ||
![]() |
a870315629 | ||
![]() |
72ebafff51 | ||
![]() |
e5904f2d5e | ||
![]() |
07a7c08aef | ||
![]() |
a5ecaca6a7 | ||
![]() |
b18df82e1d | ||
![]() |
4e7e79f770 | ||
![]() |
385c2a76d1 | ||
![]() |
9e7fec216e | ||
![]() |
317f0da91e | ||
![]() |
4a15e55793 | ||
![]() |
60fde4d342 | ||
![]() |
6d19d40718 | ||
![]() |
f6214d1db8 | ||
![]() |
2d03f073a7 | ||
![]() |
408a8adc15 | ||
![]() |
8f279596cb | ||
![]() |
f3cb9ae459 | ||
![]() |
7cbe684ef5 | ||
![]() |
e9f513d74a | ||
![]() |
dcb23e2aaa | ||
![]() |
11a222f5d9 | ||
![]() |
73207a1d8b | ||
![]() |
27000ed6d9 | ||
![]() |
8a5c255b3d | ||
![]() |
bb30ffc4dc | ||
![]() |
3ee4e1e79f | ||
![]() |
3c18a2bb2e | ||
![]() |
cac54404b9 | ||
![]() |
c4887da39c | ||
![]() |
35bb74a6bd | ||
![]() |
e8e09d33df | ||
![]() |
82266a1ac9 | ||
![]() |
be3e0ff7c3 | ||
![]() |
0def48b60f | ||
![]() |
a3f71ccff6 | ||
![]() |
2caa36aa4f | ||
![]() |
999e155f55 | ||
![]() |
53d8e9dc97 | ||
![]() |
907e98fbb5 | ||
![]() |
58f19cc697 | ||
![]() |
dcaaadd8ed | ||
![]() |
af7d23c9b4 | ||
![]() |
2168a94495 | ||
![]() |
4e149bb447 | ||
![]() |
3bf235a4c9 | ||
![]() |
a69c18980f | ||
![]() |
336aa0b7da | ||
![]() |
eb8b4d9a99 | ||
![]() |
0ee525d6de | ||
![]() |
d3e9409bb0 | ||
![]() |
0822a62f40 | ||
![]() |
0cdfef1e22 | ||
![]() |
8064583d26 | ||
![]() |
419553258d | ||
![]() |
815e1e9fe4 | ||
![]() |
06e7320c3e | ||
![]() |
e867516843 | ||
![]() |
2f0331c90c | ||
![]() |
67fb3a5155 | ||
![]() |
f97f2b1bb6 | ||
![]() |
ce6c954d2e | ||
![]() |
edcf74c6ad | ||
![]() |
d6d5d43708 | ||
![]() |
57136a268a | ||
![]() |
cb791aaa2f | ||
![]() |
339c512762 | ||
![]() |
15f9bea73b | ||
![]() |
a1a4d23797 | ||
![]() |
3aafb47729 | ||
![]() |
8f711db4e8 | ||
![]() |
415371c9d9 | ||
![]() |
2c1b06e672 | ||
![]() |
72e22b0bb8 | ||
![]() |
c8338ebf7a | ||
![]() |
b082790c7d | ||
![]() |
eda7d538bf | ||
![]() |
55acda98f7 | ||
![]() |
96fd758ea9 | ||
![]() |
6ff2b0883a | ||
![]() |
e88d7ab245 | ||
![]() |
f50f2fd2a7 | ||
![]() |
1546e6a8c9 | ||
![]() |
48c28fc42c | ||
![]() |
3675b2291c | ||
![]() |
cf7c4732e5 | ||
![]() |
405499d835 | ||
![]() |
c28b10adeb | ||
![]() |
e0846c9c8c | ||
![]() |
ba976eaa9b | ||
![]() |
3af3593c8e | ||
![]() |
f7e2f1fedf | ||
![]() |
dd314351e6 | ||
![]() |
6dbdfe3422 | ||
![]() |
8b0cf5f79d | ||
![]() |
1942eeb886 | ||
![]() |
431dac08d1 | ||
![]() |
b095d9df3c | ||
![]() |
de4e8185e9 | ||
![]() |
a864678cdb | ||
![]() |
3fb4abf3d1 | ||
![]() |
516ea8460b | ||
![]() |
bf53ec492d | ||
![]() |
e463b95b4e | ||
![]() |
a5a8d92976 | ||
![]() |
95dbe9ccfd | ||
![]() |
0f5264b584 | ||
![]() |
74e8446e58 | ||
![]() |
8c4552fb36 | ||
![]() |
d3c7365b46 | ||
![]() |
e2de094c99 | ||
![]() |
bd9b383db2 | ||
![]() |
30830d5a7c | ||
![]() |
20b855c33e | ||
![]() |
4b6219cb33 | ||
![]() |
092b5bef37 | ||
![]() |
6cb708d501 | ||
![]() |
c49f49b113 | ||
![]() |
fc6ce744a6 | ||
![]() |
b0da9b399d | ||
![]() |
2a87491fb0 | ||
![]() |
64baa8df2e | ||
![]() |
81cdeb7117 | ||
![]() |
4fbd0227f5 | ||
![]() |
08706a3ea7 | ||
![]() |
3ac73173a4 | ||
![]() |
23aa13d92c | ||
![]() |
7fb0f86863 | ||
![]() |
64f3d91579 | ||
![]() |
825adc464f | ||
![]() |
41f4458a03 | ||
![]() |
3809d7bbd9 | ||
![]() |
398aa81849 | ||
![]() |
b1aa54ab26 | ||
![]() |
b7b1e6fb55 | ||
![]() |
136bd2455e | ||
![]() |
97a86c5b13 | ||
![]() |
0ced701487 | ||
![]() |
e0cf330cde | ||
![]() |
cb9698951c | ||
![]() |
c63fc881e1 | ||
![]() |
160f3c7e9e | ||
![]() |
d88da98614 | ||
![]() |
718c19711a | ||
![]() |
f661fa1f24 | ||
![]() |
062980cc48 | ||
![]() |
7c03a1c308 | ||
![]() |
9520f4b3cc | ||
![]() |
2fa5d5a26d | ||
![]() |
d283d9bb30 | ||
![]() |
8534071de0 | ||
![]() |
ccb0348473 | ||
![]() |
cec6a596b5 | ||
![]() |
c3bbb29164 | ||
![]() |
5e76dfcc70 | ||
![]() |
9c8ad79fdc | ||
![]() |
3430820bbe | ||
![]() |
fd9f9dc054 | ||
![]() |
19e32ac7c7 | ||
![]() |
78cbe51bc3 | ||
![]() |
19255b8fe0 | ||
![]() |
ad6150f769 | ||
![]() |
1753f0d208 | ||
![]() |
70b885a0e8 | ||
![]() |
ed5ab7fa49 | ||
![]() |
9a6740af80 | ||
![]() |
f7670acc68 | ||
![]() |
f874391e02 | ||
![]() |
7ee516d2b3 | ||
![]() |
8d94796cad | ||
![]() |
79e2b1f39b | ||
![]() |
99d02c0f9f | ||
![]() |
69ee697fef | ||
![]() |
4fedfa75f8 | ||
![]() |
faaa57b945 | ||
![]() |
d49da085c0 | ||
![]() |
e180255375 | ||
![]() |
f4709d2895 | ||
![]() |
373f5c3144 | ||
![]() |
73189f21b3 | ||
![]() |
8c2dfde3ed | ||
![]() |
ef2f27f10e | ||
![]() |
0a49747b01 | ||
![]() |
58083cb34d | ||
![]() |
213f7b0907 | ||
![]() |
692b10858d | ||
![]() |
9b1ece2cca | ||
![]() |
5f0e0617ba | ||
![]() |
647df00f30 | ||
![]() |
513f8e6814 | ||
![]() |
6adbe09058 | ||
![]() |
458f4fedd2 | ||
![]() |
4d1b0d2a2d | ||
![]() |
9fb80f7170 | ||
![]() |
f7e187d362 | ||
![]() |
5551ef0ef4 | ||
![]() |
bd05d9e480 | ||
![]() |
507eb4b577 | ||
![]() |
0e7b60617f | ||
![]() |
a5397dbaf1 | ||
![]() |
77e6b4504b | ||
![]() |
4b9dc57260 | ||
![]() |
0a29bd9793 | ||
![]() |
b8f43aec66 | ||
![]() |
c377bf0eec | ||
![]() |
90c505f218 | ||
![]() |
9f61a83bf9 | ||
![]() |
ff4a71f4c2 | ||
![]() |
20745f8442 | ||
![]() |
0684c647ef | ||
![]() |
dcee88ea37 | ||
![]() |
6614563b8f | ||
![]() |
f57fc7bcc6 | ||
![]() |
9d93dabee0 | ||
![]() |
7e3a1e7361 | ||
![]() |
cad2164911 | ||
![]() |
686b217ed7 | ||
![]() |
97b766a46c | ||
![]() |
6fda7668e8 | ||
![]() |
483ce40346 | ||
![]() |
c4d7e5e67e | ||
![]() |
2b4913eb0d | ||
![]() |
a097e18964 | ||
![]() |
f26fe7d93b | ||
![]() |
3d84da6b8d | ||
![]() |
71ecb5d7d9 | ||
![]() |
a0ae3682aa | ||
![]() |
24c86055c3 | ||
![]() |
3427e1dd43 | ||
![]() |
c7c0c05608 | ||
![]() |
927f29a644 | ||
![]() |
787733d855 | ||
![]() |
cf127474d8 | ||
![]() |
36ff6a6743 | ||
![]() |
b90a072f10 | ||
![]() |
abcf36c758 | ||
![]() |
98eb8af037 | ||
![]() |
1747207700 | ||
![]() |
1320e54d95 | ||
![]() |
87e17737e9 | ||
![]() |
53f64a7736 | ||
![]() |
9fdd90c9aa | ||
![]() |
209d82ad72 | ||
![]() |
a0ccc97d8a | ||
![]() |
75afcee962 | ||
![]() |
91d927f9b3 | ||
![]() |
ad760b9660 | ||
![]() |
d6c67f02c9 | ||
![]() |
96cf6588de | ||
![]() |
1e7c05e0b4 | ||
![]() |
19638c2309 | ||
![]() |
d330a5876b | ||
![]() |
0a5a638c60 | ||
![]() |
b523dd51bd | ||
![]() |
bdc9262a6d | ||
![]() |
0a6bf29eb9 | ||
![]() |
5329189a33 | ||
![]() |
933d44b818 | ||
![]() |
4b578ea6c4 | ||
![]() |
5d12e04d16 | ||
![]() |
dea6193d09 | ||
![]() |
28f177cd3a | ||
![]() |
456bfb196b | ||
![]() |
ea68ee0458 | ||
![]() |
dc66630cca | ||
![]() |
f9d9824047 | ||
![]() |
1258cf62ae | ||
![]() |
cfe3f9173f | ||
![]() |
ad252daf65 | ||
![]() |
1d70aaf08b | ||
![]() |
d1a4cce809 | ||
![]() |
a3b002fc90 | ||
![]() |
56e87274cd | ||
![]() |
53f61ce226 | ||
![]() |
c3fd2c4ea7 | ||
![]() |
2ad4810a21 | ||
![]() |
385865f820 | ||
![]() |
1376f061da | ||
![]() |
b71962fdc9 | ||
![]() |
e81e30c25d | ||
![]() |
3b9e72b210 | ||
![]() |
09bcc1f710 | ||
![]() |
8f75ea6b5c | ||
![]() |
45e6494177 | ||
![]() |
1ee3ebcd66 | ||
![]() |
bb7dd5b1ba | ||
![]() |
4cefb4434f | ||
![]() |
31752f2f41 | ||
![]() |
0918747520 | ||
![]() |
15acc84f10 | ||
![]() |
fc94ffcea4 | ||
![]() |
28d191ada4 | ||
![]() |
bdf469c91e | ||
![]() |
15542721ee | ||
![]() |
fc2f8dafaf | ||
![]() |
b9fe6d4da4 | ||
![]() |
4db2076594 | ||
![]() |
ce1ce992ce | ||
![]() |
963bcd6c87 | ||
![]() |
2e53e9e53f | ||
![]() |
39f41a4f36 | ||
![]() |
a2b598a2f9 | ||
![]() |
7804befb55 | ||
![]() |
7f31d987f0 | ||
![]() |
d6da7b8ea1 | ||
![]() |
1dc0ca1340 | ||
![]() |
92df4a06d2 | ||
![]() |
0f5c63e4f6 | ||
![]() |
e50f5d4037 | ||
![]() |
136857475e | ||
![]() |
acff1627b8 | ||
![]() |
8d0f7a01e6 | ||
![]() |
f4a8594492 | ||
![]() |
037345eb69 | ||
![]() |
fc018e0d92 | ||
![]() |
82c4339885 | ||
![]() |
dd08db9315 | ||
![]() |
6b1b28a83c | ||
![]() |
4d2b178a22 | ||
![]() |
78f2d3edb7 | ||
![]() |
a31a58d19a | ||
![]() |
7e6f7b579a | ||
![]() |
d860f685b8 | ||
![]() |
d338d14c6b | ||
![]() |
7be093ea4d | ||
![]() |
2931b05ac5 | ||
![]() |
1fc294116a | ||
![]() |
fc2b06c625 | ||
![]() |
5cdc3a4c29 | ||
![]() |
e114f699f6 | ||
![]() |
49fdb7c41e | ||
![]() |
2d4ef37507 | ||
![]() |
788c0eb54e | ||
![]() |
dcd29e369f | ||
![]() |
f143a81191 | ||
![]() |
999bc00301 | ||
![]() |
a465076e02 | ||
![]() |
0faa8a0861 | ||
![]() |
a047fee606 | ||
![]() |
8ee7284d60 | ||
![]() |
7e5e31516c | ||
![]() |
439b2ecd74 | ||
![]() |
b9be7a464f | ||
![]() |
7288cdf79d | ||
![]() |
4f92b96bdb | ||
![]() |
0e7c45b391 | ||
![]() |
ff3068d6da | ||
![]() |
0964ef0e71 | ||
![]() |
47fc8f2683 | ||
![]() |
0090328164 | ||
![]() |
1b2f8308e4 | ||
![]() |
e4d43c21c7 | ||
![]() |
6fa5c24a99 | ||
![]() |
18dc92fd66 | ||
![]() |
305be4e417 | ||
![]() |
2b521ab551 | ||
![]() |
9fdcdc511d | ||
![]() |
063be9b82a | ||
![]() |
b955a69bbf | ||
![]() |
02e8a7bb47 | ||
![]() |
e2795e9978 | ||
![]() |
f30e8dd7bd | ||
![]() |
dbd57c2663 | ||
![]() |
8ca779aba8 | ||
![]() |
cbdc129895 | ||
![]() |
aab0f5b121 | ||
![]() |
48e76ff4fd | ||
![]() |
e913eb97c9 | ||
![]() |
f9b2ca5b99 | ||
![]() |
329aaaf453 | ||
![]() |
fa7a55bb04 | ||
![]() |
8db5da2906 | ||
![]() |
7fed3832e7 | ||
![]() |
cdd2066687 | ||
![]() |
a8a38bcf10 | ||
![]() |
0511cbff7a | ||
![]() |
6f4c0435d1 | ||
![]() |
4d391e8ed2 | ||
![]() |
3d5f8291b1 | ||
![]() |
12651b3c2b | ||
![]() |
015cfcafbd | ||
![]() |
a23ccf8f8c | ||
![]() |
b7dc9398f2 | ||
![]() |
1c906448cc | ||
![]() |
6cf2b4aa0e | ||
![]() |
9c9afbab85 | ||
![]() |
8eae7fe7e8 | ||
![]() |
236906863a | ||
![]() |
022323bf85 | ||
![]() |
f857a85088 | ||
![]() |
9100073e8d | ||
![]() |
147b125b15 | ||
![]() |
746439ef6c | ||
![]() |
769f2424cc | ||
![]() |
71a1c19754 | ||
![]() |
eeca6b786a | ||
![]() |
887d6ef49a | ||
![]() |
7f1a908b97 | ||
![]() |
a65cd3def0 | ||
![]() |
a32ded1d5f | ||
![]() |
c5fb0eb8d9 | ||
![]() |
14ba764219 | ||
![]() |
edcbb1c199 | ||
![]() |
6d90f867e4 | ||
![]() |
c2140b8af1 | ||
![]() |
69ae8f475d | ||
![]() |
63ccfbd545 | ||
![]() |
3fb37162a8 | ||
![]() |
0de458f6b9 | ||
![]() |
b0519a26b1 | ||
![]() |
e4b5002490 | ||
![]() |
4496db45e3 | ||
![]() |
daab4bcba6 | ||
![]() |
d6ee72a7bf | ||
![]() |
21039ce16e | ||
![]() |
76640f85da | ||
![]() |
7a3e0a1d93 | ||
![]() |
9398be0f46 | ||
![]() |
fca129203a | ||
![]() |
23216211bc | ||
![]() |
d45e55015e | ||
![]() |
18c902f8a4 | ||
![]() |
0e78efad0b | ||
![]() |
c239a1b67c | ||
![]() |
0b94f5d6e8 | ||
![]() |
e85e631504 | ||
![]() |
aaad6d1b54 | ||
![]() |
6f4d4ab5ac | ||
![]() |
674e477b81 | ||
![]() |
7a8e0a2935 | ||
![]() |
e105e245ef | ||
![]() |
00358cb974 | ||
![]() |
a790906c3b | ||
![]() |
5c244398e1 | ||
![]() |
d73217ab17 | ||
![]() |
93c32a55c2 | ||
![]() |
8e7ebacb19 | ||
![]() |
b0660457fe | ||
![]() |
52852da7c9 | ||
![]() |
a522be2941 | ||
![]() |
467a0b99ab | ||
![]() |
6ea5bb85cd | ||
![]() |
496cf8cc48 | ||
![]() |
c75f3993c0 | ||
![]() |
9aa498b82a | ||
![]() |
80d3923a78 | ||
![]() |
9602799cd9 | ||
![]() |
633646b73b | ||
![]() |
1ec7981c34 | ||
![]() |
9c7a0090e0 | ||
![]() |
f5615b6149 | ||
![]() |
d22e2968a8 | ||
![]() |
392a958274 | ||
![]() |
b07e5b6fa1 | ||
![]() |
c0ba42d3c0 | ||
![]() |
99f46d62d9 | ||
![]() |
c404fa42ac | ||
![]() |
3b95a46c55 | ||
![]() |
8fa38096a3 | ||
![]() |
e4fe866949 | ||
![]() |
ba2e107d28 | ||
![]() |
618c7d27a0 | ||
![]() |
cfb204eaf7 | ||
![]() |
4e6827a013 | ||
![]() |
0e8f108fb0 | ||
![]() |
0327d3df90 | ||
![]() |
c8134bc54a | ||
![]() |
675298216d | ||
![]() |
7d243701d9 | ||
![]() |
38a20e030f | ||
![]() |
c2a8d8b54c | ||
![]() |
062e6c1886 | ||
![]() |
f95c80b60f | ||
![]() |
23d68a5f30 | ||
![]() |
aa82363c46 | ||
![]() |
a570bbd418 | ||
![]() |
b9a038a5ed | ||
![]() |
d8009c077a | ||
![]() |
1743f9486b | ||
![]() |
3de8a95831 | ||
![]() |
56f5a9a060 | ||
![]() |
1d8277f8e8 | ||
![]() |
2add72d9bc | ||
![]() |
eafcf918a0 | ||
![]() |
98fcccfe97 | ||
![]() |
b2fa74ac18 | ||
![]() |
0ce3901282 | ||
![]() |
68cf24310b | ||
![]() |
f5cf8553a2 | ||
![]() |
9404c7db6d | ||
![]() |
e04e293522 | ||
![]() |
d576690ba1 | ||
![]() |
08eed049d4 | ||
![]() |
4d86ef3534 | ||
![]() |
b791dca979 | ||
![]() |
72d4ba92f0 | ||
![]() |
160d671e34 | ||
![]() |
7a89d4c3d4 | ||
![]() |
0ba32632cd | ||
![]() |
02277b8aa3 | ||
![]() |
bf18069ceb | ||
![]() |
7c938f4d3c | ||
![]() |
80f0e7a7d0 | ||
![]() |
fd0d7ff4c1 | ||
![]() |
dbda863a33 | ||
![]() |
16249382cb | ||
![]() |
3d0a1edadd | ||
![]() |
efbfaf6d11 | ||
![]() |
1e23f45119 | ||
![]() |
0618ff14d6 | ||
![]() |
2e3d8d3263 | ||
![]() |
3e9af0fb68 | ||
![]() |
63ffc1ae3d | ||
![]() |
b3eb3d2163 | ||
![]() |
308e867f91 | ||
![]() |
b2f77866aa | ||
![]() |
29d586b462 | ||
![]() |
cf49034b14 | ||
![]() |
bead039d4d | ||
![]() |
a23ec527af | ||
![]() |
1ca39bf26d | ||
![]() |
b62d093efa | ||
![]() |
aa8fe0d269 | ||
![]() |
f1a3b1e0d9 | ||
![]() |
d0dd01b8ce | ||
![]() |
a5906668a3 | ||
![]() |
cecdd73db7 | ||
![]() |
5e34461448 | ||
![]() |
d1920de22c | ||
![]() |
b1e36f2872 | ||
![]() |
46abed8d27 |
62
.gitignore
vendored
Normal file
62
.gitignore
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
*.a
|
||||||
|
*.asm.s
|
||||||
|
*.d
|
||||||
|
*.o
|
||||||
|
*~
|
||||||
|
/*-*.mk
|
||||||
|
/*.asm
|
||||||
|
/*.doxy
|
||||||
|
/.bins
|
||||||
|
/.deps
|
||||||
|
/.docs
|
||||||
|
/.install-*
|
||||||
|
/.libs
|
||||||
|
/Makefile
|
||||||
|
/config.err
|
||||||
|
/config.mk
|
||||||
|
/decode_to_md5
|
||||||
|
/decode_to_md5.c
|
||||||
|
/decode_to_md5.dox
|
||||||
|
/decode_with_drops
|
||||||
|
/decode_with_drops.c
|
||||||
|
/decode_with_drops.dox
|
||||||
|
/docs/
|
||||||
|
/doxyfile
|
||||||
|
/error_resilient
|
||||||
|
/error_resilient.c
|
||||||
|
/error_resilient.dox
|
||||||
|
/force_keyframe
|
||||||
|
/force_keyframe.c
|
||||||
|
/force_keyframe.dox
|
||||||
|
/ivfdec
|
||||||
|
/ivfdec.dox
|
||||||
|
/ivfenc
|
||||||
|
/ivfenc.dox
|
||||||
|
/obj_int_extract
|
||||||
|
/postproc
|
||||||
|
/postproc.c
|
||||||
|
/postproc.dox
|
||||||
|
/samples.dox
|
||||||
|
/simple_decoder
|
||||||
|
/simple_decoder.c
|
||||||
|
/simple_decoder.dox
|
||||||
|
/simple_encoder
|
||||||
|
/simple_encoder.c
|
||||||
|
/simple_encoder.dox
|
||||||
|
/twopass_encoder
|
||||||
|
/twopass_encoder.c
|
||||||
|
/twopass_encoder.dox
|
||||||
|
/vp8_api1_migration.dox
|
||||||
|
/vp8_scalable_patterns
|
||||||
|
/vp8_scalable_patterns.c
|
||||||
|
/vp8_scalable_patterns.dox
|
||||||
|
/vp8_set_maps
|
||||||
|
/vp8_set_maps.c
|
||||||
|
/vp8_set_maps.dox
|
||||||
|
/vp8cx_set_ref
|
||||||
|
/vp8cx_set_ref.c
|
||||||
|
/vp8cx_set_ref.dox
|
||||||
|
/vpx_config.c
|
||||||
|
/vpx_config.h
|
||||||
|
/vpx_version.h
|
||||||
|
TAGS
|
4
.mailmap
Normal file
4
.mailmap
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
Adrian Grange <agrange@google.com>
|
||||||
|
Johann Koenig <johannkoenig@google.com>
|
||||||
|
Tero Rintaluoma <teror@google.com> <tero.rintaluoma@on2.com>
|
||||||
|
Tom Finegan <tomfinegan@google.com>
|
21
AUTHORS
21
AUTHORS
@@ -1,20 +1,41 @@
|
|||||||
# This file is automatically generated from the git commit history
|
# This file is automatically generated from the git commit history
|
||||||
# by tools/gen_authors.sh.
|
# by tools/gen_authors.sh.
|
||||||
|
|
||||||
|
Aaron Watry <awatry@gmail.com>
|
||||||
|
Adrian Grange <agrange@google.com>
|
||||||
Alex Converse <alex.converse@gmail.com>
|
Alex Converse <alex.converse@gmail.com>
|
||||||
|
Andoni Morales Alastruey <ylatuya@gmail.com>
|
||||||
Andres Mejia <mcitadel@gmail.com>
|
Andres Mejia <mcitadel@gmail.com>
|
||||||
|
Attila Nagy <attilanagy@google.com>
|
||||||
Fabio Pedretti <fabio.ped@libero.it>
|
Fabio Pedretti <fabio.ped@libero.it>
|
||||||
Frank Galligan <fgalligan@google.com>
|
Frank Galligan <fgalligan@google.com>
|
||||||
|
Fredrik Söderquist <fs@opera.com>
|
||||||
|
Fritz Koenig <frkoenig@google.com>
|
||||||
|
Gaute Strokkenes <gaute.strokkenes@broadcom.com>
|
||||||
|
Giuseppe Scrivano <gscrivano@gnu.org>
|
||||||
Guillermo Ballester Valor <gbvalor@gmail.com>
|
Guillermo Ballester Valor <gbvalor@gmail.com>
|
||||||
|
Henrik Lundin <hlundin@google.com>
|
||||||
|
James Berry <jamesberry@google.com>
|
||||||
James Zern <jzern@google.com>
|
James Zern <jzern@google.com>
|
||||||
|
Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
Jeff Muizelaar <jmuizelaar@mozilla.com>
|
||||||
|
Jim Bankoski <jimbankoski@google.com>
|
||||||
|
Johann Koenig <johannkoenig@google.com>
|
||||||
John Koleszar <jkoleszar@google.com>
|
John Koleszar <jkoleszar@google.com>
|
||||||
Justin Clift <justin@salasaga.org>
|
Justin Clift <justin@salasaga.org>
|
||||||
|
Justin Lebar <justin.lebar@gmail.com>
|
||||||
Luca Barbato <lu_zero@gentoo.org>
|
Luca Barbato <lu_zero@gentoo.org>
|
||||||
Makoto Kato <makoto.kt@gmail.com>
|
Makoto Kato <makoto.kt@gmail.com>
|
||||||
|
Martin Ettl <ettl.martin78@googlemail.com>
|
||||||
|
Michael Kohler <michaelkohler@live.com>
|
||||||
|
Mikhal Shemer <mikhal@google.com>
|
||||||
|
Pascal Massimino <pascal.massimino@gmail.com>
|
||||||
|
Patrik Westin <patrik.westin@gmail.com>
|
||||||
Paul Wilkins <paulwilkins@google.com>
|
Paul Wilkins <paulwilkins@google.com>
|
||||||
Pavol Rusnak <stick@gk2.sk>
|
Pavol Rusnak <stick@gk2.sk>
|
||||||
Philip Jägenstedt <philipj@opera.com>
|
Philip Jägenstedt <philipj@opera.com>
|
||||||
Scott LaVarnway <slavarnway@google.com>
|
Scott LaVarnway <slavarnway@google.com>
|
||||||
|
Tero Rintaluoma <teror@google.com>
|
||||||
Timothy B. Terriberry <tterribe@xiph.org>
|
Timothy B. Terriberry <tterribe@xiph.org>
|
||||||
Tom Finegan <tomfinegan@google.com>
|
Tom Finegan <tomfinegan@google.com>
|
||||||
Yaowu Xu <yaowu@google.com>
|
Yaowu Xu <yaowu@google.com>
|
||||||
|
235
CHANGELOG
235
CHANGELOG
@@ -1,3 +1,238 @@
|
|||||||
|
2011-03-07 v0.9.6 "Bali"
|
||||||
|
Our second named release, focused on a faster, higher quality, encoder.
|
||||||
|
|
||||||
|
- Upgrading:
|
||||||
|
This release is backwards compatible with Aylesbury (v0.9.5). Users
|
||||||
|
of older releases should refer to the Upgrading notes in this
|
||||||
|
document for that release.
|
||||||
|
|
||||||
|
- Enhancements:
|
||||||
|
vpxenc --psnr shows a summary when encode completes
|
||||||
|
--tune=ssim option to enable activity masking
|
||||||
|
improved postproc visualizations for development
|
||||||
|
updated support for Apple iOS to SDK 4.2
|
||||||
|
query decoder to determine which reference frames were updated
|
||||||
|
implemented error tracking in the decoder
|
||||||
|
fix pipe support on windows
|
||||||
|
|
||||||
|
- Speed:
|
||||||
|
Primary focus was on good quality mode, speed 0. Average improvement
|
||||||
|
on x86 about 40%, up to 100% on user-generated content at that speed.
|
||||||
|
Best quality mode speed improved 35%, and realtime speed 10-20%. This
|
||||||
|
release also saw significant improvement in realtime encoding speed
|
||||||
|
on ARM platforms.
|
||||||
|
|
||||||
|
Improved encoder threading
|
||||||
|
Dont pick encoder filter level when loopfilter is disabled.
|
||||||
|
Avoid double copying of key frames into alt and golden buffer
|
||||||
|
FDCT optimizations.
|
||||||
|
x86 sse2 temporal filter
|
||||||
|
SSSE3 version of fast quantizer
|
||||||
|
vp8_rd_pick_best_mbsegmentation code restructure
|
||||||
|
Adjusted breakout RD for SPLITMV
|
||||||
|
Changed segmentation check order
|
||||||
|
Improved rd_pick_intra4x4block
|
||||||
|
Adds armv6 optimized variance calculation
|
||||||
|
ARMv6 optimized sad16x16
|
||||||
|
ARMv6 optimized half pixel variance calculations
|
||||||
|
Full search SAD function optimization in SSE4.1
|
||||||
|
Improve MV prediction accuracy to achieve performance gain
|
||||||
|
Improve MV prediction in vp8_pick_inter_mode() for speed>3
|
||||||
|
|
||||||
|
- Quality:
|
||||||
|
Best quality mode improved PSNR 6.3%, and SSIM 6.1%. This release
|
||||||
|
also includes support for "activity masking," which greatly improves
|
||||||
|
SSIM at the expense of PSNR. For now, this feature is available with
|
||||||
|
the --tune=ssim option. Further experimentation in this area
|
||||||
|
is ongoing. This release also introduces a new rate control mode
|
||||||
|
called "CQ," which changes the allocation of bits within a clip to
|
||||||
|
the sections where they will have the most visual impact.
|
||||||
|
|
||||||
|
Tuning for the more exact quantizer.
|
||||||
|
Relax rate control for last few frames
|
||||||
|
CQ Mode
|
||||||
|
Limit key frame quantizer for forced key frames.
|
||||||
|
KF/GF Pulsing
|
||||||
|
Add simple version of activity masking.
|
||||||
|
make rdmult adaptive for intra in quantizer RDO
|
||||||
|
cap the best quantizer for 2nd order DC
|
||||||
|
change the threshold of DC check for encode breakout
|
||||||
|
|
||||||
|
- Bug Fixes:
|
||||||
|
Fix crash on Sparc Solaris.
|
||||||
|
Fix counter of fixed keyframe distance
|
||||||
|
ARNR filter pointer update bug fix
|
||||||
|
Fixed use of motion percentage in KF/GF group calc
|
||||||
|
Changed condition for using RD in Intra Mode
|
||||||
|
Fix encoder real-time only configuration.
|
||||||
|
Fix ARM encoder crash with multiple token partitions
|
||||||
|
Fixed bug first cluster timecode of webm file is wrong.
|
||||||
|
Fixed various encoder bugs with odd-sized images
|
||||||
|
vp8e_get_preview fixed when spatial resampling enabled
|
||||||
|
quantizer: fix assertion in fast quantizer path
|
||||||
|
Allocate source buffers to be multiples of 16
|
||||||
|
Fix for manual Golden frame frequency
|
||||||
|
Fix drastic undershoot in long form content
|
||||||
|
|
||||||
|
|
||||||
|
2010-10-28 v0.9.5 "Aylesbury"
|
||||||
|
Our first named release, focused on a faster decoder, and a better encoder.
|
||||||
|
|
||||||
|
- Upgrading:
|
||||||
|
This release incorporates backwards-incompatible changes to the
|
||||||
|
ivfenc and ivfdec tools. These tools are now called vpxenc and vpxdec.
|
||||||
|
|
||||||
|
vpxdec
|
||||||
|
* the -q (quiet) option has been removed, and replaced with
|
||||||
|
-v (verbose). the output is quiet by default. Use -v to see
|
||||||
|
the version number of the binary.
|
||||||
|
|
||||||
|
* The default behavior is now to write output to a single file
|
||||||
|
instead of individual frames. The -y option has been removed.
|
||||||
|
Y4M output is the default.
|
||||||
|
|
||||||
|
* For raw I420/YV12 output instead of Y4M, the --i420 or --yv12
|
||||||
|
options must be specified.
|
||||||
|
|
||||||
|
$ ivfdec -o OUTPUT INPUT
|
||||||
|
$ vpxdec --i420 -o OUTPUT INPUT
|
||||||
|
|
||||||
|
* If an output file is not specified, the default is to write
|
||||||
|
Y4M to stdout. This makes piping more natural.
|
||||||
|
|
||||||
|
$ ivfdec -y -o - INPUT | ...
|
||||||
|
$ vpxdec INPUT | ...
|
||||||
|
|
||||||
|
* The output file has additional flexibility for formatting the
|
||||||
|
filename. It supports escape characters for constructing a
|
||||||
|
filename from the width, height, and sequence number. This
|
||||||
|
replaces the -p option. To get the equivalent:
|
||||||
|
|
||||||
|
$ ivfdec -p frame INPUT
|
||||||
|
$ vpxdec --i420 -o frame-%wx%h-%4.i420 INPUT
|
||||||
|
|
||||||
|
vpxenc
|
||||||
|
* The output file must be specified with -o, rather than as the
|
||||||
|
last argument.
|
||||||
|
|
||||||
|
$ ivfenc <options> INPUT OUTPUT
|
||||||
|
$ vpxenc <options> -o OUTPUT INPUT
|
||||||
|
|
||||||
|
* The output defaults to webm. To get IVF output, use the --ivf
|
||||||
|
option.
|
||||||
|
|
||||||
|
$ ivfenc <options> INPUT OUTPUT.ivf
|
||||||
|
$ vpxenc <options> -o OUTPUT.ivf --ivf INPUT
|
||||||
|
|
||||||
|
|
||||||
|
- Enhancements:
|
||||||
|
ivfenc and ivfdec have been renamed to vpxenc, vpxdec.
|
||||||
|
vpxdec supports .webm input
|
||||||
|
vpxdec writes .y4m by default
|
||||||
|
vpxenc writes .webm output by default
|
||||||
|
vpxenc --psnr now shows the average/overall PSNR at the end
|
||||||
|
ARM platforms now support runtime cpu detection
|
||||||
|
vpxdec visualizations added for motion vectors, block modes, references
|
||||||
|
vpxdec now silent by default
|
||||||
|
vpxdec --progress shows frame-by-frame timing information
|
||||||
|
vpxenc supports the distinction between --fps and --timebase
|
||||||
|
NASM is now a supported assembler
|
||||||
|
configure: enable PIC for shared libs by default
|
||||||
|
configure: add --enable-small
|
||||||
|
configure: support for ppc32-linux-gcc
|
||||||
|
configure: support for sparc-solaris-gcc
|
||||||
|
|
||||||
|
- Bugs:
|
||||||
|
Improve handling of invalid frames
|
||||||
|
Fix valgrind errors in the NEON loop filters.
|
||||||
|
Fix loopfilter delta zero transitions
|
||||||
|
Fix valgrind errors in vp8_sixtap_predict8x4_armv6().
|
||||||
|
Build fixes for darwin-icc
|
||||||
|
|
||||||
|
- Speed:
|
||||||
|
20-40% (average 28%) improvement in libvpx decoder speed,
|
||||||
|
including:
|
||||||
|
Rewrite vp8_short_walsh4x4_sse2()
|
||||||
|
Optimizations on the loopfilters.
|
||||||
|
Miscellaneous improvements for Atom
|
||||||
|
Add 4-tap version of 2nd-pass ARMv6 MC filter.
|
||||||
|
Improved multithread utilization
|
||||||
|
Better instruction choices on x86
|
||||||
|
reorder data to use wider instructions
|
||||||
|
Update NEON wide idcts
|
||||||
|
Make block access to frame buffer sequential
|
||||||
|
Improved subset block search
|
||||||
|
Bilinear subpixel optimizations for ssse3.
|
||||||
|
Decrease memory footprint
|
||||||
|
|
||||||
|
Encoder speed improvements (percentage gain not measured):
|
||||||
|
Skip unnecessary search of identical frames
|
||||||
|
Add SSE2 subtract functions
|
||||||
|
Improve bounds checking in vp8_diamond_search_sadx4()
|
||||||
|
Added vp8_fast_quantize_b_sse2
|
||||||
|
|
||||||
|
- Quality:
|
||||||
|
Over 7% overall PSNR improvement (6.3% SSIM) in "best" quality
|
||||||
|
encoding mode, and up to 60% improvement on very noisy, still
|
||||||
|
or slow moving source video
|
||||||
|
|
||||||
|
Motion compensated temporal filter for Alt-Ref Noise Reduction
|
||||||
|
Improved use of trellis quantization on 2nd order Y blocks
|
||||||
|
Tune effect of motion on KF/GF boost in two pass
|
||||||
|
Allow coefficient optimization for good quality speed 0.
|
||||||
|
Improved control of active min quantizer for two pass.
|
||||||
|
Enable ARFs for non-lagged compress
|
||||||
|
|
||||||
|
2010-09-02 v0.9.2
|
||||||
|
- Enhancements:
|
||||||
|
Disable frame dropping by default
|
||||||
|
Improved multithreaded performance
|
||||||
|
Improved Force Key Frame Behaviour
|
||||||
|
Increased rate control buffer level precision
|
||||||
|
Fix bug in 1st pass motion compensation
|
||||||
|
ivfenc: correct fixed kf interval, --disable-kf
|
||||||
|
- Speed:
|
||||||
|
Changed above and left context data layout
|
||||||
|
Rework idct calling structure.
|
||||||
|
Removed unnecessary MB_MODE_INFO copies
|
||||||
|
x86: SSSE3 sixtap prediction
|
||||||
|
Reworked IDCT to include reconstruction (add) step
|
||||||
|
Swap alt/gold/new/last frame buffer ptrs instead of copying.
|
||||||
|
Improve SSE2 loopfilter functions
|
||||||
|
Change bitreader to use a larger window.
|
||||||
|
Avoid loopfilter reinitialization when possible
|
||||||
|
- Quality:
|
||||||
|
Normalize quantizer's zero bin and rounding factors
|
||||||
|
Add trellis quantization.
|
||||||
|
Make the quantizer exact.
|
||||||
|
Updates to ARNR filtering algorithm
|
||||||
|
Fix breakout thresh computation for golden & AltRef frames
|
||||||
|
Redo the forward 4x4 dct
|
||||||
|
Improve the accuracy of forward walsh-hadamard transform
|
||||||
|
Further adjustment of RD behaviour with Q and Zbin.
|
||||||
|
- Build System:
|
||||||
|
Allow linking of libs built with MinGW to MSVC
|
||||||
|
Fix target auto-detection on mingw32
|
||||||
|
Allow --cpu= to work for x86.
|
||||||
|
configure: pass original arguments through to make dist
|
||||||
|
Fix builds without runtime CPU detection
|
||||||
|
msvs: fix install of codec sources
|
||||||
|
msvs: Change devenv.com command line for better msys support
|
||||||
|
msvs: Add vs9 targets.
|
||||||
|
Add x86_64-linux-icc target
|
||||||
|
- Bugs:
|
||||||
|
Potential crashes on older MinGW builds
|
||||||
|
Fix two-pass framrate for Y4M input.
|
||||||
|
Fixed simple loop filter, other crashes on ARM v6
|
||||||
|
arm: fix missing dependency with --enable-shared
|
||||||
|
configure: support directories containing .o
|
||||||
|
Replace pinsrw (SSE) with MMX instructions
|
||||||
|
apple: include proper mach primatives
|
||||||
|
Fixed rate control bug with long key frame interval.
|
||||||
|
Fix DSO link errors on x86-64 when not using a version script
|
||||||
|
Fixed buffer selection for UV in AltRef filtering
|
||||||
|
|
||||||
|
|
||||||
2010-06-17 v0.9.1
|
2010-06-17 v0.9.1
|
||||||
- Enhancements:
|
- Enhancements:
|
||||||
* ivfenc/ivfdec now support YUV4MPEG2 input and pipe I/O
|
* ivfenc/ivfdec now support YUV4MPEG2 input and pipe I/O
|
||||||
|
6
README
6
README
@@ -45,18 +45,14 @@ COMPILING THE APPLICATIONS/LIBRARIES:
|
|||||||
armv5te-linux-rvct
|
armv5te-linux-rvct
|
||||||
armv5te-linux-gcc
|
armv5te-linux-gcc
|
||||||
armv5te-symbian-gcc
|
armv5te-symbian-gcc
|
||||||
armv5te-wince-vs8
|
|
||||||
armv6-darwin-gcc
|
armv6-darwin-gcc
|
||||||
armv6-linux-rvct
|
armv6-linux-rvct
|
||||||
armv6-linux-gcc
|
armv6-linux-gcc
|
||||||
armv6-symbian-gcc
|
armv6-symbian-gcc
|
||||||
armv6-wince-vs8
|
|
||||||
iwmmxt-linux-rvct
|
iwmmxt-linux-rvct
|
||||||
iwmmxt-linux-gcc
|
iwmmxt-linux-gcc
|
||||||
iwmmxt-wince-vs8
|
|
||||||
iwmmxt2-linux-rvct
|
iwmmxt2-linux-rvct
|
||||||
iwmmxt2-linux-gcc
|
iwmmxt2-linux-gcc
|
||||||
iwmmxt2-wince-vs8
|
|
||||||
armv7-linux-rvct
|
armv7-linux-rvct
|
||||||
armv7-linux-gcc
|
armv7-linux-gcc
|
||||||
mips32-linux-gcc
|
mips32-linux-gcc
|
||||||
@@ -89,7 +85,7 @@ COMPILING THE APPLICATIONS/LIBRARIES:
|
|||||||
toolchain, the following command could be used (note, POSIX SH syntax, adapt
|
toolchain, the following command could be used (note, POSIX SH syntax, adapt
|
||||||
to your shell as necessary):
|
to your shell as necessary):
|
||||||
|
|
||||||
$ CROSS=mipsel-linux-uclibc- ../libvpx/src/configure
|
$ CROSS=mipsel-linux-uclibc- ../libvpx/configure
|
||||||
|
|
||||||
In addition, the executables to be invoked can be overridden by specifying the
|
In addition, the executables to be invoked can be overridden by specifying the
|
||||||
environment variables: CC, AR, LD, AS, STRIP, NM. Additional flags can be
|
environment variables: CC, AR, LD, AS, STRIP, NM. Additional flags can be
|
||||||
|
55
args.c
55
args.c
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -120,9 +120,13 @@ void arg_show_usage(FILE *fp, const struct arg_def *const *defs)
|
|||||||
char *long_val = def->has_val ? "=<arg>" : "";
|
char *long_val = def->has_val ? "=<arg>" : "";
|
||||||
|
|
||||||
if (def->short_name && def->long_name)
|
if (def->short_name && def->long_name)
|
||||||
snprintf(option_text, 37, "-%s%s, --%s%s",
|
{
|
||||||
def->short_name, short_val,
|
char *comma = def->has_val ? "," : ", ";
|
||||||
|
|
||||||
|
snprintf(option_text, 37, "-%s%s%s --%s%6s",
|
||||||
|
def->short_name, short_val, comma,
|
||||||
def->long_name, long_val);
|
def->long_name, long_val);
|
||||||
|
}
|
||||||
else if (def->short_name)
|
else if (def->short_name)
|
||||||
snprintf(option_text, 37, "-%s%s",
|
snprintf(option_text, 37, "-%s%s",
|
||||||
def->short_name, short_val);
|
def->short_name, short_val);
|
||||||
@@ -131,6 +135,17 @@ void arg_show_usage(FILE *fp, const struct arg_def *const *defs)
|
|||||||
def->long_name, long_val);
|
def->long_name, long_val);
|
||||||
|
|
||||||
fprintf(fp, " %-37s\t%s\n", option_text, def->desc);
|
fprintf(fp, " %-37s\t%s\n", option_text, def->desc);
|
||||||
|
|
||||||
|
if(def->enums)
|
||||||
|
{
|
||||||
|
const struct arg_enum_list *listptr;
|
||||||
|
|
||||||
|
fprintf(fp, " %-37s\t ", "");
|
||||||
|
|
||||||
|
for(listptr = def->enums; listptr->name; listptr++)
|
||||||
|
fprintf(fp, "%s%s", listptr->name,
|
||||||
|
listptr[1].name ? ", " : "\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,3 +229,37 @@ struct vpx_rational arg_parse_rational(const struct arg *arg)
|
|||||||
|
|
||||||
return rat;
|
return rat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int arg_parse_enum(const struct arg *arg)
|
||||||
|
{
|
||||||
|
const struct arg_enum_list *listptr;
|
||||||
|
long int rawval;
|
||||||
|
char *endptr;
|
||||||
|
|
||||||
|
/* First see if the value can be parsed as a raw value */
|
||||||
|
rawval = strtol(arg->val, &endptr, 10);
|
||||||
|
if (arg->val[0] != '\0' && endptr[0] == '\0')
|
||||||
|
{
|
||||||
|
/* Got a raw value, make sure it's valid */
|
||||||
|
for(listptr = arg->def->enums; listptr->name; listptr++)
|
||||||
|
if(listptr->val == rawval)
|
||||||
|
return rawval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Next see if it can be parsed as a string */
|
||||||
|
for(listptr = arg->def->enums; listptr->name; listptr++)
|
||||||
|
if(!strcmp(arg->val, listptr->name))
|
||||||
|
return listptr->val;
|
||||||
|
|
||||||
|
die("Option %s: Invalid value '%s'\n", arg->name, arg->val);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int arg_parse_enum_or_int(const struct arg *arg)
|
||||||
|
{
|
||||||
|
if(arg->def->enums)
|
||||||
|
return arg_parse_enum(arg);
|
||||||
|
return arg_parse_int(arg);
|
||||||
|
}
|
||||||
|
14
args.h
14
args.h
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -22,14 +22,23 @@ struct arg
|
|||||||
const struct arg_def *def;
|
const struct arg_def *def;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct arg_enum_list
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
int val;
|
||||||
|
};
|
||||||
|
#define ARG_ENUM_LIST_END {0}
|
||||||
|
|
||||||
typedef struct arg_def
|
typedef struct arg_def
|
||||||
{
|
{
|
||||||
const char *short_name;
|
const char *short_name;
|
||||||
const char *long_name;
|
const char *long_name;
|
||||||
int has_val;
|
int has_val;
|
||||||
const char *desc;
|
const char *desc;
|
||||||
|
const struct arg_enum_list *enums;
|
||||||
} arg_def_t;
|
} arg_def_t;
|
||||||
#define ARG_DEF(s,l,v,d) {s,l,v,d}
|
#define ARG_DEF(s,l,v,d) {s,l,v,d, NULL}
|
||||||
|
#define ARG_DEF_ENUM(s,l,v,d,e) {s,l,v,d,e}
|
||||||
#define ARG_DEF_LIST_END {0}
|
#define ARG_DEF_LIST_END {0}
|
||||||
|
|
||||||
struct arg arg_init(char **argv);
|
struct arg arg_init(char **argv);
|
||||||
@@ -41,4 +50,5 @@ char **argv_dup(int argc, const char **argv);
|
|||||||
unsigned int arg_parse_uint(const struct arg *arg);
|
unsigned int arg_parse_uint(const struct arg *arg);
|
||||||
int arg_parse_int(const struct arg *arg);
|
int arg_parse_int(const struct arg *arg);
|
||||||
struct vpx_rational arg_parse_rational(const struct arg *arg);
|
struct vpx_rational arg_parse_rational(const struct arg *arg);
|
||||||
|
int arg_parse_enum_or_int(const struct arg *arg);
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<VisualStudioToolFile
|
|
||||||
Name="armasm"
|
|
||||||
Version="8.00"
|
|
||||||
>
|
|
||||||
<Rules>
|
|
||||||
<CustomBuildRule
|
|
||||||
Name="ARMASM"
|
|
||||||
DisplayName="Armasm Assembler"
|
|
||||||
CommandLine="armasm -o "$(IntDir)\$(InputName).obj" $(InputPath) -32 -ARCH 5
"
|
|
||||||
Outputs="$(IntDir)\$(InputName).obj"
|
|
||||||
FileExtensions="*.asm"
|
|
||||||
ExecutionDescription="Assembling $(InputName).asm"
|
|
||||||
ShowOnlyRuleProperties="false"
|
|
||||||
>
|
|
||||||
<Properties>
|
|
||||||
</Properties>
|
|
||||||
</CustomBuildRule>
|
|
||||||
</Rules>
|
|
||||||
</VisualStudioToolFile>
|
|
@@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<VisualStudioToolFile
|
|
||||||
Name="armasm"
|
|
||||||
Version="8.00"
|
|
||||||
>
|
|
||||||
<Rules>
|
|
||||||
<CustomBuildRule
|
|
||||||
Name="ARMASM"
|
|
||||||
DisplayName="Armasm Assembler"
|
|
||||||
CommandLine="armasm -o "$(IntDir)\$(InputName).obj" $(InputPath) -32 -ARCH 6
"
|
|
||||||
Outputs="$(IntDir)\$(InputName).obj"
|
|
||||||
FileExtensions="*.asm"
|
|
||||||
ExecutionDescription="Assembling $(InputName).asm"
|
|
||||||
ShowOnlyRuleProperties="false"
|
|
||||||
>
|
|
||||||
<Properties>
|
|
||||||
</Properties>
|
|
||||||
</CustomBuildRule>
|
|
||||||
</Rules>
|
|
||||||
</VisualStudioToolFile>
|
|
@@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<VisualStudioToolFile
|
|
||||||
Name="armasm"
|
|
||||||
Version="8.00"
|
|
||||||
>
|
|
||||||
<Rules>
|
|
||||||
<CustomBuildRule
|
|
||||||
Name="ARMASM"
|
|
||||||
DisplayName="Armasm Assembler"
|
|
||||||
CommandLine="armasm -o "$(IntDir)\$(InputName).obj" $(InputPath) -32 -cpu XSCALE
"
|
|
||||||
Outputs="$(IntDir)\$(InputName).obj"
|
|
||||||
FileExtensions="*.asm"
|
|
||||||
ExecutionDescription="Assembling $(InputName).asm"
|
|
||||||
ShowOnlyRuleProperties="false"
|
|
||||||
>
|
|
||||||
<Properties>
|
|
||||||
</Properties>
|
|
||||||
</CustomBuildRule>
|
|
||||||
</Rules>
|
|
||||||
</VisualStudioToolFile>
|
|
@@ -1,13 +0,0 @@
|
|||||||
@echo off
|
|
||||||
REM Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
|
||||||
REM
|
|
||||||
REM Use of this source code is governed by a BSD-style license
|
|
||||||
REM that can be found in the LICENSE file in the root of the source
|
|
||||||
REM tree. An additional intellectual property rights grant can be found
|
|
||||||
REM in the file PATENTS. All contributing project authors may
|
|
||||||
REM be found in the AUTHORS file in the root of the source tree.
|
|
||||||
echo on
|
|
||||||
|
|
||||||
|
|
||||||
cl /I ".\\" /I "..\vp6_decoder_sdk" /I "..\vp6_decoder_sdk\vpx_ports" /D "NDEBUG" /D "_WIN32_WCE=0x420" /D "UNDER_CE" /D "WIN32_PLATFORM_PSPC" /D "WINCE" /D "_LIB" /D "ARM" /D "_ARM_" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MT /GS- /fp:fast /GR- /Fo"Pocket_PC_2003__ARMV4_\%1/" /Fd"Pocket_PC_2003__ARMV4_\%1/vc80.pdb" /W3 /nologo /c /TC ..\vp6_decoder_sdk\vp6_decoder\algo\common\arm\dec_asm_offsets_arm.c
|
|
||||||
obj_int_extract.exe rvds "Pocket_PC_2003__ARMV4_\%1/dec_asm_offsets_arm.obj"
|
|
@@ -1,88 +0,0 @@
|
|||||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
|
||||||
# Visual Studio 2005
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example", "example.vcproj", "{BA5FE66F-38DD-E034-F542-B1578C5FB950}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2} = {E1360C65-D375-4335-8057-7ED99CC3F9B2}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "obj_int_extract", "obj_int_extract.vcproj", "{E1360C65-D375-4335-8057-7ED99CC3F9B2}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vpx_decoder", "vpx_decoder.vcproj", "{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2} = {E1360C65-D375-4335-8057-7ED99CC3F9B2}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xma", "xma.vcproj", "{A955FC4A-73F1-44F7-135E-30D84D32F022}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2} = {E1360C65-D375-4335-8057-7ED99CC3F9B2}
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Mixed Platforms = Debug|Mixed Platforms
|
|
||||||
Debug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Release|Mixed Platforms = Release|Mixed Platforms
|
|
||||||
Release|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Mixed Platforms.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Mixed Platforms.Build.0 = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Mixed Platforms.Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Win32.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Mixed Platforms.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Mixed Platforms.Build.0 = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Mixed Platforms.Deploy.0 = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Win32.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Mixed Platforms.Build.0 = Release|Win32
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Win32
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Win32.ActiveCfg = Release|Win32
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Win32.Build.0 = Release|Win32
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Mixed Platforms.ActiveCfg = Release|Win32
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Mixed Platforms.Build.0 = Release|Win32
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Win32
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Mixed Platforms.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Mixed Platforms.Build.0 = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Mixed Platforms.Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Win32.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Mixed Platforms.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Mixed Platforms.Build.0 = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Mixed Platforms.Deploy.0 = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Win32.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Mixed Platforms.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Mixed Platforms.Build.0 = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Mixed Platforms.Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Win32.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Mixed Platforms.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Mixed Platforms.Build.0 = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Mixed Platforms.Deploy.0 = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Win32.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
@@ -1,5 +1,5 @@
|
|||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
@@ -39,13 +39,8 @@ dist:
|
|||||||
@if [ -d "$(DIST_DIR)/src" ]; then \
|
@if [ -d "$(DIST_DIR)/src" ]; then \
|
||||||
mkdir -p "$(DIST_DIR)/build"; \
|
mkdir -p "$(DIST_DIR)/build"; \
|
||||||
cd "$(DIST_DIR)/build"; \
|
cd "$(DIST_DIR)/build"; \
|
||||||
if [ "$(TGT_CC)" = "rvct" ] ; then \
|
echo "Rerunning configure $(CONFIGURE_ARGS)"; \
|
||||||
echo "../src/configure --target=$(TOOLCHAIN) --libc=$(ALT_LIBC)"; \
|
../src/configure $(CONFIGURE_ARGS); \
|
||||||
../src/configure --target=$(TOOLCHAIN) --libc=$(ALT_LIBC); \
|
|
||||||
else \
|
|
||||||
echo "../src/configure --target=$(TOOLCHAIN)"; \
|
|
||||||
../src/configure --target=$(TOOLCHAIN); \
|
|
||||||
fi; \
|
|
||||||
$(if $(filter vs%,$(TGT_CC)),make NO_LAUNCH_DEVENV=1;) \
|
$(if $(filter vs%,$(TGT_CC)),make NO_LAUNCH_DEVENV=1;) \
|
||||||
fi
|
fi
|
||||||
@if [ -d "$(DIST_DIR)" ]; then \
|
@if [ -d "$(DIST_DIR)" ]; then \
|
||||||
@@ -70,7 +65,7 @@ endif
|
|||||||
BUILD_ROOT?=.
|
BUILD_ROOT?=.
|
||||||
VPATH=$(SRC_PATH_BARE)
|
VPATH=$(SRC_PATH_BARE)
|
||||||
CFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT) -I$(SRC_PATH)
|
CFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT) -I$(SRC_PATH)
|
||||||
ASFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT) -I$(SRC_PATH)
|
ASFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT)/ -I$(SRC_PATH)/
|
||||||
DIST_DIR?=dist
|
DIST_DIR?=dist
|
||||||
HOSTCC?=gcc
|
HOSTCC?=gcc
|
||||||
TGT_ISA:=$(word 1, $(subst -, ,$(TOOLCHAIN)))
|
TGT_ISA:=$(word 1, $(subst -, ,$(TOOLCHAIN)))
|
||||||
@@ -334,6 +329,7 @@ ifneq ($(call enabled,DIST-SRCS),)
|
|||||||
DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_def.sh
|
DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_def.sh
|
||||||
DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_proj.sh
|
DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_proj.sh
|
||||||
DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_sln.sh
|
DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_sln.sh
|
||||||
|
DIST-SRCS-$(CONFIG_MSVS) += build/x86-msvs/yasm.rules
|
||||||
DIST-SRCS-$(CONFIG_RVCT) += build/make/armlink_adapter.sh
|
DIST-SRCS-$(CONFIG_RVCT) += build/make/armlink_adapter.sh
|
||||||
#
|
#
|
||||||
# This isn't really ARCH_ARM dependent, it's dependant on whether we're
|
# This isn't really ARCH_ARM dependent, it's dependant on whether we're
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env perl
|
#!/usr/bin/env perl
|
||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
@@ -17,15 +17,17 @@ for i; do
|
|||||||
on_of=1
|
on_of=1
|
||||||
elif [ "$i" == "-v" ]; then
|
elif [ "$i" == "-v" ]; then
|
||||||
verbose=1
|
verbose=1
|
||||||
|
elif [ "$i" == "-g" ]; then
|
||||||
|
args="${args} --debug"
|
||||||
elif [ "$on_of" == "1" ]; then
|
elif [ "$on_of" == "1" ]; then
|
||||||
outfile=$i
|
outfile=$i
|
||||||
on_of=0
|
on_of=0
|
||||||
elif [ -f "$i" ]; then
|
elif [ -f "$i" ]; then
|
||||||
infiles="$infiles $i"
|
infiles="$infiles $i"
|
||||||
elif [ "${i:0:2}" == "-l" ]; then
|
elif [ "${i:0:2}" == "-l" ]; then
|
||||||
libs="$libs ${i#-l}"
|
libs="$libs ${i#-l}"
|
||||||
elif [ "${i:0:2}" == "-L" ]; then
|
elif [ "${i:0:2}" == "-L" ]; then
|
||||||
libpaths="${libpaths} ${i#-L}"
|
libpaths="${libpaths} ${i#-L}"
|
||||||
else
|
else
|
||||||
args="${args} ${i}"
|
args="${args} ${i}"
|
||||||
fi
|
fi
|
||||||
|
@@ -78,6 +78,7 @@ Build options:
|
|||||||
--log=yes|no|FILE file configure log is written to [config.err]
|
--log=yes|no|FILE file configure log is written to [config.err]
|
||||||
--target=TARGET target platform tuple [generic-gnu]
|
--target=TARGET target platform tuple [generic-gnu]
|
||||||
--cpu=CPU optimize for a specific cpu rather than a family
|
--cpu=CPU optimize for a specific cpu rather than a family
|
||||||
|
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
|
||||||
${toggle_extra_warnings} emit harmless warnings (always non-fatal)
|
${toggle_extra_warnings} emit harmless warnings (always non-fatal)
|
||||||
${toggle_werror} treat warnings as errors, if possible
|
${toggle_werror} treat warnings as errors, if possible
|
||||||
(not available with all compilers)
|
(not available with all compilers)
|
||||||
@@ -255,9 +256,10 @@ TMP_H="${TMPDIRx}/vpx-conf-$$-${RANDOM}.h"
|
|||||||
TMP_C="${TMPDIRx}/vpx-conf-$$-${RANDOM}.c"
|
TMP_C="${TMPDIRx}/vpx-conf-$$-${RANDOM}.c"
|
||||||
TMP_O="${TMPDIRx}/vpx-conf-$$-${RANDOM}.o"
|
TMP_O="${TMPDIRx}/vpx-conf-$$-${RANDOM}.o"
|
||||||
TMP_X="${TMPDIRx}/vpx-conf-$$-${RANDOM}.x"
|
TMP_X="${TMPDIRx}/vpx-conf-$$-${RANDOM}.x"
|
||||||
|
TMP_ASM="${TMPDIRx}/vpx-conf-$$-${RANDOM}.asm"
|
||||||
|
|
||||||
clean_temp_files() {
|
clean_temp_files() {
|
||||||
rm -f ${TMP_C} ${TMP_H} ${TMP_O} ${TMP_X}
|
rm -f ${TMP_C} ${TMP_H} ${TMP_O} ${TMP_X} ${TMP_ASM}
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -322,6 +324,21 @@ check_add_ldflags() {
|
|||||||
add_ldflags "$@"
|
add_ldflags "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
check_asm_align() {
|
||||||
|
log check_asm_align "$@"
|
||||||
|
cat >${TMP_ASM} <<EOF
|
||||||
|
section .rodata
|
||||||
|
align 16
|
||||||
|
EOF
|
||||||
|
log_file ${TMP_ASM}
|
||||||
|
check_cmd ${AS} ${ASFLAGS} -o ${TMP_O} ${TMP_ASM}
|
||||||
|
readelf -WS ${TMP_O} >${TMP_X}
|
||||||
|
log_file ${TMP_X}
|
||||||
|
if ! grep -q '\.rodata .* 16$' ${TMP_X}; then
|
||||||
|
die "${AS} ${ASFLAGS} does not support section alignment (nasm <=2.08?)"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
write_common_config_banner() {
|
write_common_config_banner() {
|
||||||
echo '# This file automatically generated by configure. Do not edit!' > config.mk
|
echo '# This file automatically generated by configure. Do not edit!' > config.mk
|
||||||
echo "TOOLCHAIN := ${toolchain}" >> config.mk
|
echo "TOOLCHAIN := ${toolchain}" >> config.mk
|
||||||
@@ -378,7 +395,7 @@ EOF
|
|||||||
fmt_deps = sed -e 's;^__image.axf;\$(dir \$@)\$(notdir \$<).o \$@;' #hide
|
fmt_deps = sed -e 's;^__image.axf;\$(dir \$@)\$(notdir \$<).o \$@;' #hide
|
||||||
EOF
|
EOF
|
||||||
else cat >> $1 << EOF
|
else cat >> $1 << EOF
|
||||||
fmt_deps = sed -e 's;^\(.*\)\.o;\$(dir \$@)\1\$(suffix \$<).o \$@;' #hide
|
fmt_deps = sed -e 's;^\([a-zA-Z0-9_]*\)\.o;\$(dir \$@)\1\$(suffix \$<).o \$@;'
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -395,8 +412,6 @@ EOF
|
|||||||
write_common_target_config_h() {
|
write_common_target_config_h() {
|
||||||
cat > ${TMP_H} << EOF
|
cat > ${TMP_H} << EOF
|
||||||
/* This file automatically generated by configure. Do not edit! */
|
/* This file automatically generated by configure. Do not edit! */
|
||||||
#define INLINE ${INLINE}
|
|
||||||
#define FORCEINLINE ${FORCEINLINE:-${INLINE}}
|
|
||||||
#define RESTRICT ${RESTRICT}
|
#define RESTRICT ${RESTRICT}
|
||||||
EOF
|
EOF
|
||||||
print_config_h ARCH "${TMP_H}" ${ARCH_LIST}
|
print_config_h ARCH "${TMP_H}" ${ARCH_LIST}
|
||||||
@@ -428,6 +443,9 @@ process_common_cmdline() {
|
|||||||
;;
|
;;
|
||||||
--cpu=*) tune_cpu="$optval"
|
--cpu=*) tune_cpu="$optval"
|
||||||
;;
|
;;
|
||||||
|
--extra-cflags=*)
|
||||||
|
extra_cflags="${optval}"
|
||||||
|
;;
|
||||||
--enable-?*|--disable-?*)
|
--enable-?*|--disable-?*)
|
||||||
eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
|
eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
|
||||||
echo "${CMDLINE_SELECT} ${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null || die_unknown $opt
|
echo "${CMDLINE_SELECT} ${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null || die_unknown $opt
|
||||||
@@ -442,13 +460,18 @@ process_common_cmdline() {
|
|||||||
disable builtin_libc
|
disable builtin_libc
|
||||||
alt_libc="${optval}"
|
alt_libc="${optval}"
|
||||||
;;
|
;;
|
||||||
|
--as=*)
|
||||||
|
[ "${optval}" = yasm -o "${optval}" = nasm -o "${optval}" = auto ] \
|
||||||
|
|| die "Must be yasm, nasm or auto: ${optval}"
|
||||||
|
alt_as="${optval}"
|
||||||
|
;;
|
||||||
--prefix=*)
|
--prefix=*)
|
||||||
prefix="${optval}"
|
prefix="${optval}"
|
||||||
;;
|
;;
|
||||||
--libdir=*)
|
--libdir=*)
|
||||||
libdir="${optval}"
|
libdir="${optval}"
|
||||||
;;
|
;;
|
||||||
--libc|--prefix|--libdir)
|
--libc|--as|--prefix|--libdir)
|
||||||
die "Option ${opt} requires argument"
|
die "Option ${opt} requires argument"
|
||||||
;;
|
;;
|
||||||
--help|-h) show_help
|
--help|-h) show_help
|
||||||
@@ -497,7 +520,7 @@ setup_gnu_toolchain() {
|
|||||||
|
|
||||||
process_common_toolchain() {
|
process_common_toolchain() {
|
||||||
if [ -z "$toolchain" ]; then
|
if [ -z "$toolchain" ]; then
|
||||||
gcctarget="$(gcc -dumpmachine 2> /dev/null)"
|
gcctarget="$(gcc -dumpmachine 2> /dev/null)"
|
||||||
|
|
||||||
# detect tgt_isa
|
# detect tgt_isa
|
||||||
case "$gcctarget" in
|
case "$gcctarget" in
|
||||||
@@ -507,6 +530,15 @@ process_common_toolchain() {
|
|||||||
*i[3456]86*)
|
*i[3456]86*)
|
||||||
tgt_isa=x86
|
tgt_isa=x86
|
||||||
;;
|
;;
|
||||||
|
*powerpc64*)
|
||||||
|
tgt_isa=ppc64
|
||||||
|
;;
|
||||||
|
*powerpc*)
|
||||||
|
tgt_isa=ppc32
|
||||||
|
;;
|
||||||
|
*sparc*)
|
||||||
|
tgt_isa=sparc
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# detect tgt_os
|
# detect tgt_os
|
||||||
@@ -519,12 +551,20 @@ process_common_toolchain() {
|
|||||||
tgt_isa=universal
|
tgt_isa=universal
|
||||||
tgt_os=darwin9
|
tgt_os=darwin9
|
||||||
;;
|
;;
|
||||||
|
*darwin10*)
|
||||||
|
tgt_isa=x86_64
|
||||||
|
tgt_os=darwin10
|
||||||
|
;;
|
||||||
*mingw32*|*cygwin*)
|
*mingw32*|*cygwin*)
|
||||||
|
[ -z "$tgt_isa" ] && tgt_isa=x86
|
||||||
tgt_os=win32
|
tgt_os=win32
|
||||||
;;
|
;;
|
||||||
*linux*|*bsd*)
|
*linux*|*bsd*)
|
||||||
tgt_os=linux
|
tgt_os=linux
|
||||||
;;
|
;;
|
||||||
|
*solaris2.10)
|
||||||
|
tgt_os=solaris
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then
|
if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then
|
||||||
@@ -557,20 +597,40 @@ process_common_toolchain() {
|
|||||||
mips*) enable mips;;
|
mips*) enable mips;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# PIC is probably what we want when building shared libs
|
||||||
|
enabled shared && soft_enable pic
|
||||||
|
|
||||||
# Handle darwin variants
|
# Handle darwin variants
|
||||||
case ${toolchain} in
|
case ${toolchain} in
|
||||||
*-darwin8-gcc)
|
*-darwin8-*)
|
||||||
add_cflags "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
|
add_cflags "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
|
||||||
add_cflags "-mmacosx-version-min=10.4"
|
add_cflags "-mmacosx-version-min=10.4"
|
||||||
add_ldflags "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
|
add_ldflags "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
|
||||||
add_ldflags "-mmacosx-version-min=10.4"
|
add_ldflags "-mmacosx-version-min=10.4"
|
||||||
;;
|
;;
|
||||||
*-darwin9-gcc)
|
*-darwin9-*)
|
||||||
add_cflags "-isysroot /Developer/SDKs/MacOSX10.5.sdk"
|
add_cflags "-isysroot /Developer/SDKs/MacOSX10.5.sdk"
|
||||||
add_cflags "-mmacosx-version-min=10.5"
|
add_cflags "-mmacosx-version-min=10.5"
|
||||||
add_ldflags "-isysroot /Developer/SDKs/MacOSX10.5.sdk"
|
add_ldflags "-isysroot /Developer/SDKs/MacOSX10.5.sdk"
|
||||||
add_ldflags "-mmacosx-version-min=10.5"
|
add_ldflags "-mmacosx-version-min=10.5"
|
||||||
;;
|
;;
|
||||||
|
*-darwin10-*)
|
||||||
|
add_cflags "-isysroot /Developer/SDKs/MacOSX10.6.sdk"
|
||||||
|
add_cflags "-mmacosx-version-min=10.6"
|
||||||
|
add_ldflags "-isysroot /Developer/SDKs/MacOSX10.6.sdk"
|
||||||
|
add_ldflags "-mmacosx-version-min=10.6"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Handle Solaris variants. Solaris 10 needs -lposix4
|
||||||
|
case ${toolchain} in
|
||||||
|
sparc-solaris-*)
|
||||||
|
add_extralibs -lposix4
|
||||||
|
add_cflags "-DMUST_BE_ALIGNED"
|
||||||
|
;;
|
||||||
|
*-solaris-*)
|
||||||
|
add_extralibs -lposix4
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Process ARM architecture variants
|
# Process ARM architecture variants
|
||||||
@@ -608,12 +668,12 @@ process_common_toolchain() {
|
|||||||
elif enabled armv7
|
elif enabled armv7
|
||||||
then
|
then
|
||||||
check_add_cflags -march=armv7-a -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp #-ftree-vectorize
|
check_add_cflags -march=armv7-a -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp #-ftree-vectorize
|
||||||
check_add_asflags -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp #-march=armv7-a
|
check_add_asflags -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp #-march=armv7-a
|
||||||
else
|
else
|
||||||
check_add_cflags -march=${tgt_isa}
|
check_add_cflags -march=${tgt_isa}
|
||||||
check_add_asflags -march=${tgt_isa}
|
check_add_asflags -march=${tgt_isa}
|
||||||
fi
|
fi
|
||||||
|
enabled debug && add_asflags -g
|
||||||
asm_conversion_cmd="${source_path}/build/make/ads2gas.pl"
|
asm_conversion_cmd="${source_path}/build/make/ads2gas.pl"
|
||||||
;;
|
;;
|
||||||
rvct)
|
rvct)
|
||||||
@@ -638,16 +698,24 @@ process_common_toolchain() {
|
|||||||
arch_int=${tgt_isa##armv}
|
arch_int=${tgt_isa##armv}
|
||||||
arch_int=${arch_int%%te}
|
arch_int=${arch_int%%te}
|
||||||
check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\""
|
check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\""
|
||||||
|
enabled debug && add_asflags -g
|
||||||
|
add_cflags --gnu
|
||||||
|
add_cflags --enum_is_int
|
||||||
|
add_cflags --wchar32
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
case ${tgt_os} in
|
case ${tgt_os} in
|
||||||
|
none*)
|
||||||
|
disable multithread
|
||||||
|
disable os_support
|
||||||
|
;;
|
||||||
darwin*)
|
darwin*)
|
||||||
SDK_PATH=/Developer/Platforms/iPhoneOS.platform/Developer
|
SDK_PATH=/Developer/Platforms/iPhoneOS.platform/Developer
|
||||||
TOOLCHAIN_PATH=${SDK_PATH}/usr/bin
|
TOOLCHAIN_PATH=${SDK_PATH}/usr/bin
|
||||||
CC=${TOOLCHAIN_PATH}/gcc
|
CC=${TOOLCHAIN_PATH}/gcc
|
||||||
AR=${TOOLCHAIN_PATH}/ar
|
AR=${TOOLCHAIN_PATH}/ar
|
||||||
LD=${TOOLCHAIN_PATH}/arm-apple-darwin9-gcc-4.2.1
|
LD=${TOOLCHAIN_PATH}/arm-apple-darwin10-gcc-4.2.1
|
||||||
AS=${TOOLCHAIN_PATH}/as
|
AS=${TOOLCHAIN_PATH}/as
|
||||||
STRIP=${TOOLCHAIN_PATH}/strip
|
STRIP=${TOOLCHAIN_PATH}/strip
|
||||||
NM=${TOOLCHAIN_PATH}/nm
|
NM=${TOOLCHAIN_PATH}/nm
|
||||||
@@ -661,19 +729,18 @@ process_common_toolchain() {
|
|||||||
add_cflags -arch ${tgt_isa}
|
add_cflags -arch ${tgt_isa}
|
||||||
add_ldflags -arch_only ${tgt_isa}
|
add_ldflags -arch_only ${tgt_isa}
|
||||||
|
|
||||||
add_cflags "-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk"
|
add_cflags "-isysroot ${SDK_PATH}/SDKs/iPhoneOS4.3.sdk"
|
||||||
|
|
||||||
# This should be overridable
|
# This should be overridable
|
||||||
alt_libc=${SDK_PATH}/SDKs/iPhoneOS3.1.sdk
|
alt_libc=${SDK_PATH}/SDKs/iPhoneOS4.3.sdk
|
||||||
|
|
||||||
# Add the paths for the alternate libc
|
# Add the paths for the alternate libc
|
||||||
# for d in usr/include usr/include/gcc/darwin/4.0/; do
|
for d in usr/include usr/include/gcc/darwin/4.2/ usr/lib/gcc/arm-apple-darwin10/4.2.1/include/; do
|
||||||
for d in usr/include usr/include/gcc/darwin/4.0/ usr/lib/gcc/arm-apple-darwin9/4.0.1/include/; do
|
|
||||||
try_dir="${alt_libc}/${d}"
|
try_dir="${alt_libc}/${d}"
|
||||||
[ -d "${try_dir}" ] && add_cflags -I"${try_dir}"
|
[ -d "${try_dir}" ] && add_cflags -I"${try_dir}"
|
||||||
done
|
done
|
||||||
|
|
||||||
for d in lib usr/lib; do
|
for d in lib usr/lib usr/lib/system; do
|
||||||
try_dir="${alt_libc}/${d}"
|
try_dir="${alt_libc}/${d}"
|
||||||
[ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
|
[ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
|
||||||
done
|
done
|
||||||
@@ -690,13 +757,9 @@ process_common_toolchain() {
|
|||||||
|| die "Must supply --libc when targetting *-linux-rvct"
|
|| die "Must supply --libc when targetting *-linux-rvct"
|
||||||
|
|
||||||
# Set up compiler
|
# Set up compiler
|
||||||
add_cflags --gnu
|
|
||||||
add_cflags --enum_is_int
|
|
||||||
add_cflags --library_interface=aeabi_glibc
|
add_cflags --library_interface=aeabi_glibc
|
||||||
add_cflags --no_hide_all
|
add_cflags --no_hide_all
|
||||||
add_cflags --wchar32
|
|
||||||
add_cflags --dwarf2
|
add_cflags --dwarf2
|
||||||
add_cflags --gnu
|
|
||||||
|
|
||||||
# Set up linker
|
# Set up linker
|
||||||
add_ldflags --sysv --no_startup --no_ref_cpp_init
|
add_ldflags --sysv --no_startup --no_ref_cpp_init
|
||||||
@@ -756,8 +819,8 @@ process_common_toolchain() {
|
|||||||
link_with_cc=gcc
|
link_with_cc=gcc
|
||||||
setup_gnu_toolchain
|
setup_gnu_toolchain
|
||||||
add_asflags -force_cpusubtype_ALL -I"\$(dir \$<)darwin"
|
add_asflags -force_cpusubtype_ALL -I"\$(dir \$<)darwin"
|
||||||
add_cflags -maltivec -faltivec
|
|
||||||
soft_enable altivec
|
soft_enable altivec
|
||||||
|
enabled altivec && add_cflags -maltivec
|
||||||
|
|
||||||
case "$tgt_os" in
|
case "$tgt_os" in
|
||||||
linux*)
|
linux*)
|
||||||
@@ -769,6 +832,7 @@ process_common_toolchain() {
|
|||||||
add_cflags ${darwin_arch} -m${bits} -fasm-blocks
|
add_cflags ${darwin_arch} -m${bits} -fasm-blocks
|
||||||
add_asflags ${darwin_arch} -force_cpusubtype_ALL -I"\$(dir \$<)darwin"
|
add_asflags ${darwin_arch} -force_cpusubtype_ALL -I"\$(dir \$<)darwin"
|
||||||
add_ldflags ${darwin_arch} -m${bits}
|
add_ldflags ${darwin_arch} -m${bits}
|
||||||
|
enabled altivec && add_cflags -faltivec
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
@@ -781,8 +845,12 @@ process_common_toolchain() {
|
|||||||
soft_enable sse2
|
soft_enable sse2
|
||||||
soft_enable sse3
|
soft_enable sse3
|
||||||
soft_enable ssse3
|
soft_enable ssse3
|
||||||
|
soft_enable sse4_1
|
||||||
|
|
||||||
case ${tgt_os} in
|
case ${tgt_os} in
|
||||||
|
win*)
|
||||||
|
enabled gcc && add_cflags -fno-common
|
||||||
|
;;
|
||||||
solaris*)
|
solaris*)
|
||||||
CC=${CC:-${CROSS}gcc}
|
CC=${CC:-${CROSS}gcc}
|
||||||
LD=${LD:-${CROSS}gcc}
|
LD=${LD:-${CROSS}gcc}
|
||||||
@@ -790,6 +858,7 @@ process_common_toolchain() {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
AS="${alt_as:-${AS:-auto}}"
|
||||||
case ${tgt_cc} in
|
case ${tgt_cc} in
|
||||||
icc*)
|
icc*)
|
||||||
CC=${CC:-icc}
|
CC=${CC:-icc}
|
||||||
@@ -797,27 +866,48 @@ process_common_toolchain() {
|
|||||||
setup_gnu_toolchain
|
setup_gnu_toolchain
|
||||||
add_cflags -use-msasm -use-asm
|
add_cflags -use-msasm -use-asm
|
||||||
add_ldflags -i-static
|
add_ldflags -i-static
|
||||||
enabled x86_64 && add_cflags -ipo -no-prec-div -static -xSSE3 -axSSE3
|
enabled x86_64 && add_cflags -ipo -no-prec-div -static -xSSE2 -axSSE2
|
||||||
enabled x86_64 && AR=xiar
|
enabled x86_64 && AR=xiar
|
||||||
|
case ${tune_cpu} in
|
||||||
|
atom*)
|
||||||
|
tune_cflags="-x"
|
||||||
|
tune_cpu="SSE3_ATOM"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
tune_cflags="-march="
|
||||||
|
;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
gcc*)
|
gcc*)
|
||||||
add_cflags -m${bits}
|
add_cflags -m${bits}
|
||||||
add_ldflags -m${bits}
|
add_ldflags -m${bits}
|
||||||
link_with_cc=gcc
|
link_with_cc=gcc
|
||||||
|
tune_cflags="-march="
|
||||||
setup_gnu_toolchain
|
setup_gnu_toolchain
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
AS=yasm
|
case "${AS}" in
|
||||||
|
auto|"")
|
||||||
|
which nasm >/dev/null 2>&1 && AS=nasm
|
||||||
|
which yasm >/dev/null 2>&1 && AS=yasm
|
||||||
|
[ "${AS}" = auto -o -z "${AS}" ] \
|
||||||
|
&& die "Neither yasm nor nasm have been found"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
log_echo " using $AS"
|
||||||
|
[ "${AS##*/}" = nasm ] && add_asflags -Ox
|
||||||
AS_SFX=.asm
|
AS_SFX=.asm
|
||||||
case ${tgt_os} in
|
case ${tgt_os} in
|
||||||
win*)
|
win*)
|
||||||
add_asflags -f win${bits}
|
add_asflags -f win${bits}
|
||||||
enabled debug && add_asflags -g dwarf2
|
enabled debug && add_asflags -g cv8
|
||||||
;;
|
;;
|
||||||
linux*|solaris*)
|
linux*|solaris*)
|
||||||
add_asflags -f elf${bits}
|
add_asflags -f elf${bits}
|
||||||
enabled debug && add_asflags -g dwarf2
|
enabled debug && [ "${AS}" = yasm ] && add_asflags -g dwarf2
|
||||||
|
enabled debug && [ "${AS}" = nasm ] && add_asflags -g
|
||||||
|
[ "${AS##*/}" = nasm ] && check_asm_align
|
||||||
;;
|
;;
|
||||||
darwin*)
|
darwin*)
|
||||||
add_asflags -f macho${bits}
|
add_asflags -f macho${bits}
|
||||||
@@ -830,7 +920,7 @@ process_common_toolchain() {
|
|||||||
# enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic
|
# enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic
|
||||||
enabled icc && ! enabled pic && add_cflags -fno-pic
|
enabled icc && ! enabled pic && add_cflags -fno-pic
|
||||||
;;
|
;;
|
||||||
*) log "Warning: Unknown os $tgt_os while setting up yasm flags"
|
*) log "Warning: Unknown os $tgt_os while setting up $AS flags"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
@@ -861,9 +951,9 @@ process_common_toolchain() {
|
|||||||
enabled gcov &&
|
enabled gcov &&
|
||||||
check_add_cflags -fprofile-arcs -ftest-coverage &&
|
check_add_cflags -fprofile-arcs -ftest-coverage &&
|
||||||
check_add_ldflags -fprofile-arcs -ftest-coverage
|
check_add_ldflags -fprofile-arcs -ftest-coverage
|
||||||
enabled optimizations && check_add_cflags -O3
|
if enabled optimizations; then
|
||||||
if enabled rvct; then
|
enabled rvct && check_add_cflags -Otime
|
||||||
enabled optimizations && check_add_cflags -Otime
|
enabled small && check_add_cflags -O2 || check_add_cflags -O3
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Position Independant Code (PIC) support, for building relocatable
|
# Position Independant Code (PIC) support, for building relocatable
|
||||||
@@ -890,8 +980,14 @@ EOF
|
|||||||
|
|
||||||
# glibc needs these
|
# glibc needs these
|
||||||
if enabled linux; then
|
if enabled linux; then
|
||||||
add_cflags -D_LARGEFILE_SOURCE
|
add_cflags -D_LARGEFILE_SOURCE
|
||||||
add_cflags -D_FILE_OFFSET_BITS=64
|
add_cflags -D_FILE_OFFSET_BITS=64
|
||||||
|
fi
|
||||||
|
|
||||||
|
# append any user defined extra cflags
|
||||||
|
if [ -n "${extra_cflags}" ] ; then
|
||||||
|
check_add_cflags ${extra_cflags} || \
|
||||||
|
die "Requested extra CFLAGS '${extra_cflags}' not supported by compiler"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
@@ -32,7 +32,7 @@ Options:
|
|||||||
--name=project_name Name of the project (required)
|
--name=project_name Name of the project (required)
|
||||||
--proj-guid=GUID GUID to use for the project
|
--proj-guid=GUID GUID to use for the project
|
||||||
--module-def=filename File containing export definitions (for DLLs)
|
--module-def=filename File containing export definitions (for DLLs)
|
||||||
--ver=version Version (7,8) of visual studio to generate for
|
--ver=version Version (7,8,9) of visual studio to generate for
|
||||||
-Ipath/to/include Additional include directories
|
-Ipath/to/include Additional include directories
|
||||||
-DFLAG[=value] Preprocessor macros to define
|
-DFLAG[=value] Preprocessor macros to define
|
||||||
-Lpath/to/lib Additional library search paths
|
-Lpath/to/lib Additional library search paths
|
||||||
@@ -132,7 +132,7 @@ generate_filter() {
|
|||||||
open_tag Filter \
|
open_tag Filter \
|
||||||
Name=$name \
|
Name=$name \
|
||||||
Filter=$pats \
|
Filter=$pats \
|
||||||
UniqueIdentifier=`generate_uuid`
|
UniqueIdentifier=`generate_uuid` \
|
||||||
|
|
||||||
file_list_sz=${#file_list[@]}
|
file_list_sz=${#file_list[@]}
|
||||||
for i in ${!file_list[@]}; do
|
for i in ${!file_list[@]}; do
|
||||||
@@ -145,31 +145,21 @@ generate_filter() {
|
|||||||
if [ "$pat" == "asm" ] && $asm_use_custom_step; then
|
if [ "$pat" == "asm" ] && $asm_use_custom_step; then
|
||||||
for plat in "${platforms[@]}"; do
|
for plat in "${platforms[@]}"; do
|
||||||
for cfg in Debug Release; do
|
for cfg in Debug Release; do
|
||||||
open_tag FileConfiguration \
|
open_tag FileConfiguration \
|
||||||
Name="${cfg}|${plat}"
|
Name="${cfg}|${plat}" \
|
||||||
|
|
||||||
tag Tool \
|
tag Tool \
|
||||||
Name="VCCustomBuildTool" \
|
Name="VCCustomBuildTool" \
|
||||||
Description="Assembling \$(InputFileName)" \
|
Description="Assembling \$(InputFileName)" \
|
||||||
CommandLine="$(eval echo \$asm_${cfg}_cmdline)"\
|
CommandLine="$(eval echo \$asm_${cfg}_cmdline)" \
|
||||||
Outputs="\$(InputName).obj"
|
Outputs="\$(InputName).obj" \
|
||||||
|
|
||||||
close_tag FileConfiguration
|
close_tag FileConfiguration
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${f##*.}" == "cpp" ]; then
|
close_tag File
|
||||||
for plat in "${platforms[@]}"; do
|
|
||||||
for cfg in Debug Release; do
|
|
||||||
open_tag FileConfiguration \
|
|
||||||
Name="${cfg}|${plat}"
|
|
||||||
tag Tool \
|
|
||||||
Name="VCCLCompilerTool" \
|
|
||||||
CompileAs="2"
|
|
||||||
close_tag FileConfiguration
|
|
||||||
done
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
close_tag File
|
|
||||||
|
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
@@ -185,57 +175,61 @@ unset target
|
|||||||
for opt in "$@"; do
|
for opt in "$@"; do
|
||||||
optval="${opt#*=}"
|
optval="${opt#*=}"
|
||||||
case "$opt" in
|
case "$opt" in
|
||||||
--help|-h) show_help
|
--help|-h) show_help
|
||||||
;;
|
;;
|
||||||
--target=*) target="${optval}"
|
--target=*) target="${optval}"
|
||||||
;;
|
;;
|
||||||
--out=*) outfile="$optval"
|
--out=*) outfile="$optval"
|
||||||
;;
|
;;
|
||||||
--name=*) name="${optval}"
|
--name=*) name="${optval}"
|
||||||
;;
|
;;
|
||||||
--proj-guid=*) guid="${optval}"
|
--proj-guid=*) guid="${optval}"
|
||||||
;;
|
;;
|
||||||
--module-def=*)
|
--module-def=*) link_opts="${link_opts} ModuleDefinitionFile=${optval}"
|
||||||
link_opts="${link_opts} ModuleDefinitionFile=${optval}"
|
;;
|
||||||
;;
|
--exe) proj_kind="exe"
|
||||||
--exe) proj_kind="exe"
|
;;
|
||||||
;;
|
--lib) proj_kind="lib"
|
||||||
--lib) proj_kind="lib"
|
;;
|
||||||
;;
|
--static-crt) use_static_runtime=true
|
||||||
--static-crt) use_static_runtime=true
|
;;
|
||||||
;;
|
--ver=*)
|
||||||
--ver=*) vs_ver="$optval"
|
vs_ver="$optval"
|
||||||
case $optval in
|
case "$optval" in
|
||||||
[78])
|
[789])
|
||||||
;;
|
;;
|
||||||
*) die Unrecognized Visual Studio Version in $opt
|
*) die Unrecognized Visual Studio Version in $opt
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
-I*) opt="${opt%/}"
|
-I*)
|
||||||
incs="${incs}${incs:+;}"${opt##-I}""
|
opt="${opt%/}"
|
||||||
yasmincs="${yasmincs} ${opt}"
|
incs="${incs}${incs:+;}"${opt##-I}""
|
||||||
;;
|
yasmincs="${yasmincs} ${opt}"
|
||||||
-D*) defines="${defines}${defines:+;}${opt##-D}"
|
;;
|
||||||
;;
|
-D*) defines="${defines}${defines:+;}${opt##-D}"
|
||||||
-L*) # fudge . to $(OutDir)
|
;;
|
||||||
if [ "${opt##-L}" == "." ]; then
|
-L*) # fudge . to $(OutDir)
|
||||||
libdirs="${libdirs}${libdirs:+;}"\$(OutDir)""
|
if [ "${opt##-L}" == "." ]; then
|
||||||
else
|
libdirs="${libdirs}${libdirs:+;}"\$(OutDir)""
|
||||||
# Also try directories for this platform/configuration
|
else
|
||||||
libdirs="${libdirs}${libdirs:+;}"${opt##-L}""
|
# Also try directories for this platform/configuration
|
||||||
libdirs="${libdirs}${libdirs:+;}"${opt##-L}/\$(PlatformName)/\$(ConfigurationName)""
|
libdirs="${libdirs}${libdirs:+;}"${opt##-L}""
|
||||||
libdirs="${libdirs}${libdirs:+;}"${opt##-L}/\$(PlatformName)""
|
libdirs="${libdirs}${libdirs:+;}"${opt##-L}/\$(PlatformName)/\$(ConfigurationName)""
|
||||||
fi
|
libdirs="${libdirs}${libdirs:+;}"${opt##-L}/\$(PlatformName)""
|
||||||
;;
|
fi
|
||||||
-l*) libs="${libs}${libs:+ }${opt##-l}.lib"
|
;;
|
||||||
;;
|
-l*) libs="${libs}${libs:+ }${opt##-l}.lib"
|
||||||
-*) die_unknown $opt
|
;;
|
||||||
;;
|
-*) die_unknown $opt
|
||||||
*) file_list[${#file_list[@]}]="$opt"
|
;;
|
||||||
case "$opt" in
|
*)
|
||||||
*.asm) uses_asm=true;;
|
file_list[${#file_list[@]}]="$opt"
|
||||||
esac
|
case "$opt" in
|
||||||
|
*.asm) uses_asm=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
outfile=${outfile:-/dev/stdout}
|
outfile=${outfile:-/dev/stdout}
|
||||||
@@ -248,6 +242,8 @@ case "${vs_ver:-8}" in
|
|||||||
;;
|
;;
|
||||||
8) vs_ver_id="8.00"
|
8) vs_ver_id="8.00"
|
||||||
;;
|
;;
|
||||||
|
9) vs_ver_id="9.00"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
[ -n "$name" ] || die "Project name (--name) must be specified!"
|
[ -n "$name" ] || die "Project name (--name) must be specified!"
|
||||||
@@ -276,11 +272,7 @@ done
|
|||||||
|
|
||||||
# List Keyword for this target
|
# List Keyword for this target
|
||||||
case "$target" in
|
case "$target" in
|
||||||
x86*)
|
x86*) keyword="ManagedCProj"
|
||||||
keyword="ManagedCProj"
|
|
||||||
;;
|
|
||||||
arm*|iwmmx*)
|
|
||||||
keyword="Win32Proj"
|
|
||||||
;;
|
;;
|
||||||
*) die "Unsupported target $target!"
|
*) die "Unsupported target $target!"
|
||||||
esac
|
esac
|
||||||
@@ -296,402 +288,188 @@ case "$target" in
|
|||||||
asm_Debug_cmdline="yasm -Xvc -g cv8 -f \$(PlatformName) ${yasmincs} "\$(InputPath)""
|
asm_Debug_cmdline="yasm -Xvc -g cv8 -f \$(PlatformName) ${yasmincs} "\$(InputPath)""
|
||||||
asm_Release_cmdline="yasm -Xvc -f \$(PlatformName) ${yasmincs} "\$(InputPath)""
|
asm_Release_cmdline="yasm -Xvc -f \$(PlatformName) ${yasmincs} "\$(InputPath)""
|
||||||
;;
|
;;
|
||||||
arm*|iwmmx*)
|
|
||||||
case "${name}" in
|
|
||||||
obj_int_extract) platforms[0]="Win32"
|
|
||||||
;;
|
|
||||||
*) platforms[0]="Pocket PC 2003 (ARMV4)"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
*) die "Unsupported target $target!"
|
*) die "Unsupported target $target!"
|
||||||
esac
|
|
||||||
|
|
||||||
# List Command-line Arguments for this target
|
|
||||||
case "$target" in
|
|
||||||
arm*|iwmmx*)
|
|
||||||
if [ "$name" == "example" ];then
|
|
||||||
ARGU="--codec vp6 --flipuv --progress _bnd.vp6"
|
|
||||||
fi
|
|
||||||
if [ "$name" == "xma" ];then
|
|
||||||
ARGU="--codec vp6 -h 240 -w 320 -v"
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
generate_vcproj() {
|
generate_vcproj() {
|
||||||
case "$proj_kind" in
|
case "$proj_kind" in
|
||||||
exe) vs_ConfigurationType=1
|
exe) vs_ConfigurationType=1
|
||||||
;;
|
;;
|
||||||
*) vs_ConfigurationType=4
|
*) vs_ConfigurationType=4
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>"
|
echo "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>"
|
||||||
open_tag VisualStudioProject \
|
open_tag VisualStudioProject \
|
||||||
ProjectType="Visual C++" \
|
ProjectType="Visual C++" \
|
||||||
Version="${vs_ver_id}" \
|
Version="${vs_ver_id}" \
|
||||||
Name="${name}" \
|
Name="${name}" \
|
||||||
ProjectGUID="{${guid}}" \
|
ProjectGUID="{${guid}}" \
|
||||||
RootNamespace="${name}" \
|
RootNamespace="${name}" \
|
||||||
Keyword="${keyword}"
|
Keyword="${keyword}" \
|
||||||
|
|
||||||
open_tag Platforms
|
open_tag Platforms
|
||||||
for plat in "${platforms[@]}"; do
|
for plat in "${platforms[@]}"; do
|
||||||
tag Platform Name="$plat"
|
tag Platform Name="$plat"
|
||||||
done
|
done
|
||||||
close_tag Platforms
|
close_tag Platforms
|
||||||
|
|
||||||
open_tag ToolFiles
|
open_tag ToolFiles
|
||||||
case "$target" in
|
case "$target" in
|
||||||
x86*) $uses_asm && tag ToolFile RelativePath="$self_dirname/../x86-msvs/yasm.rules"
|
x86*) $uses_asm && tag ToolFile RelativePath="$self_dirname/../x86-msvs/yasm.rules"
|
||||||
;;
|
;;
|
||||||
arm*|iwmmx*)
|
|
||||||
if [ "$name" == "vpx_decoder" ];then
|
|
||||||
case "$target" in
|
|
||||||
armv5*)
|
|
||||||
tag ToolFile RelativePath="$self_dirname/../arm-wince-vs8/armasmv5.rules"
|
|
||||||
;;
|
|
||||||
armv6*)
|
|
||||||
tag ToolFile RelativePath="$self_dirname/../arm-wince-vs8/armasmv6.rules"
|
|
||||||
;;
|
|
||||||
iwmmxt*)
|
|
||||||
tag ToolFile RelativePath="$self_dirname/../arm-wince-vs8/armasmxscale.rules"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
close_tag ToolFiles
|
close_tag ToolFiles
|
||||||
|
|
||||||
open_tag Configurations
|
open_tag Configurations
|
||||||
for plat in "${platforms[@]}"; do
|
for plat in "${platforms[@]}"; do
|
||||||
plat_no_ws=`echo $plat | sed 's/[^A-Za-z0-9_]/_/g'`
|
plat_no_ws=`echo $plat | sed 's/[^A-Za-z0-9_]/_/g'`
|
||||||
open_tag Configuration \
|
open_tag Configuration \
|
||||||
Name="Debug|$plat" \
|
Name="Debug|$plat" \
|
||||||
OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \
|
OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \
|
||||||
IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \
|
IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \
|
||||||
ConfigurationType="$vs_ConfigurationType" \
|
ConfigurationType="$vs_ConfigurationType" \
|
||||||
CharacterSet="1"
|
CharacterSet="1" \
|
||||||
|
|
||||||
if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
|
|
||||||
case "$name" in
|
|
||||||
vpx_decoder) tag Tool \
|
|
||||||
Name="VCPreBuildEventTool" \
|
|
||||||
CommandLine="call obj_int_extract.bat \$(ConfigurationName)"
|
|
||||||
tag Tool \
|
|
||||||
Name="VCMIDLTool" \
|
|
||||||
TargetEnvironment="1"
|
|
||||||
tag Tool \
|
|
||||||
Name="VCCLCompilerTool" \
|
|
||||||
ExecutionBucket="7" \
|
|
||||||
Optimization="0" \
|
|
||||||
AdditionalIncludeDirectories="$incs" \
|
|
||||||
PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;DEBUG;_LIB;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
|
|
||||||
MinimalRebuild="true" \
|
|
||||||
RuntimeLibrary="1" \
|
|
||||||
BufferSecurityCheck="false" \
|
|
||||||
UsePrecompiledHeader="0" \
|
|
||||||
WarningLevel="3" \
|
|
||||||
DebugInformationFormat="1" \
|
|
||||||
CompileAs="1"
|
|
||||||
tag Tool \
|
|
||||||
Name="VCResourceCompilerTool" \
|
|
||||||
PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES)" \
|
|
||||||
Culture="1033" \
|
|
||||||
AdditionalIncludeDirectories="\$(IntDir)" \
|
|
||||||
;;
|
|
||||||
example|xma) tag Tool \
|
|
||||||
Name="VCCLCompilerTool" \
|
|
||||||
ExecutionBucket="7" \
|
|
||||||
Optimization="0" \
|
|
||||||
AdditionalIncludeDirectories="$incs" \
|
|
||||||
PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;DEBUG;_CONSOLE;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
|
|
||||||
MinimalRebuild="true" \
|
|
||||||
RuntimeLibrary="1" \
|
|
||||||
BufferSecurityCheck="false" \
|
|
||||||
UsePrecompiledHeader="0" \
|
|
||||||
WarningLevel="3" \
|
|
||||||
DebugInformationFormat="1" \
|
|
||||||
CompileAs="1"
|
|
||||||
tag Tool \
|
|
||||||
Name="VCResourceCompilerTool" \
|
|
||||||
PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES)" \
|
|
||||||
Culture="1033" \
|
|
||||||
AdditionalIncludeDirectories="\$(IntDir)" \
|
|
||||||
;;
|
|
||||||
obj_int_extract) tag Tool \
|
|
||||||
Name="VCCLCompilerTool" \
|
|
||||||
Optimization="0" \
|
|
||||||
AdditionalIncludeDirectories="$incs" \
|
|
||||||
PreprocessorDefinitions="WIN32;DEBUG;_CONSOLE" \
|
|
||||||
RuntimeLibrary="1" \
|
|
||||||
WarningLevel="3" \
|
|
||||||
DebugInformationFormat="1" \
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$target" in
|
case "$target" in
|
||||||
x86*) tag Tool \
|
x86*)
|
||||||
Name="VCCLCompilerTool" \
|
case "$name" in
|
||||||
Optimization="0" \
|
*)
|
||||||
AdditionalIncludeDirectories="$incs" \
|
tag Tool \
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;$defines" \
|
Name="VCCLCompilerTool" \
|
||||||
RuntimeLibrary="$debug_runtime" \
|
Optimization="0" \
|
||||||
UsePrecompiledHeader="0" \
|
AdditionalIncludeDirectories="$incs" \
|
||||||
WarningLevel="3" \
|
PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
|
||||||
DebugInformationFormat="1" \
|
RuntimeLibrary="$debug_runtime" \
|
||||||
Detect64BitPortabilityProblems="true" \
|
UsePrecompiledHeader="0" \
|
||||||
|
WarningLevel="3" \
|
||||||
|
DebugInformationFormat="1" \
|
||||||
|
Detect64BitPortabilityProblems="true" \
|
||||||
|
|
||||||
$uses_asm && tag Tool Name="YASM" IncludePaths="$incs" Debug="1"
|
$uses_asm && tag Tool Name="YASM" IncludePaths="$incs" Debug="1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
case "$proj_kind" in
|
case "$proj_kind" in
|
||||||
exe)
|
exe)
|
||||||
case "$target" in
|
case "$target" in
|
||||||
x86*) tag Tool \
|
x86*)
|
||||||
Name="VCLinkerTool" \
|
|
||||||
AdditionalDependencies="$debug_libs \$(NoInherit)" \
|
|
||||||
AdditionalLibraryDirectories="$libdirs" \
|
|
||||||
GenerateDebugInformation="true" \
|
|
||||||
ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \
|
|
||||||
|
|
||||||
;;
|
|
||||||
arm*|iwmmx*)
|
|
||||||
case "$name" in
|
case "$name" in
|
||||||
obj_int_extract) tag Tool \
|
*)
|
||||||
Name="VCLinkerTool" \
|
tag Tool \
|
||||||
OutputFile="${name}.exe" \
|
Name="VCLinkerTool" \
|
||||||
GenerateDebugInformation="true"
|
AdditionalDependencies="$debug_libs \$(NoInherit)" \
|
||||||
;;
|
AdditionalLibraryDirectories="$libdirs" \
|
||||||
*) tag Tool \
|
GenerateDebugInformation="true" \
|
||||||
Name="VCLinkerTool" \
|
ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \
|
||||||
AdditionalDependencies="$debug_libs" \
|
|
||||||
OutputFile="\$(OutDir)/${name}.exe" \
|
|
||||||
LinkIncremental="2" \
|
|
||||||
AdditionalLibraryDirectories="${libdirs};"..\lib/$plat_no_ws"" \
|
|
||||||
DelayLoadDLLs="\$(NOINHERIT)" \
|
|
||||||
GenerateDebugInformation="true" \
|
|
||||||
ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \
|
|
||||||
SubSystem="9" \
|
|
||||||
StackReserveSize="65536" \
|
|
||||||
StackCommitSize="4096" \
|
|
||||||
EntryPointSymbol="mainWCRTStartup" \
|
|
||||||
TargetMachine="3"
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
lib)
|
lib)
|
||||||
case "$target" in
|
case "$target" in
|
||||||
arm*|iwmmx*) tag Tool \
|
x86*)
|
||||||
Name="VCLibrarianTool" \
|
tag Tool \
|
||||||
AdditionalOptions=" /subsystem:windowsce,4.20 /machine:ARM" \
|
Name="VCLibrarianTool" \
|
||||||
OutputFile="\$(OutDir)/${name}.lib" \
|
OutputFile="\$(OutDir)/${name}${lib_sfx}d.lib" \
|
||||||
;;
|
|
||||||
*) tag Tool \
|
;;
|
||||||
Name="VCLibrarianTool" \
|
|
||||||
OutputFile="\$(OutDir)/${name}${lib_sfx}d.lib" \
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
dll) tag Tool \
|
dll)
|
||||||
Name="VCLinkerTool" \
|
tag Tool \
|
||||||
AdditionalDependencies="\$(NoInherit)" \
|
Name="VCLinkerTool" \
|
||||||
LinkIncremental="2" \
|
AdditionalDependencies="\$(NoInherit)" \
|
||||||
GenerateDebugInformation="true" \
|
LinkIncremental="2" \
|
||||||
AssemblyDebug="1" \
|
GenerateDebugInformation="true" \
|
||||||
TargetMachine="1" \
|
AssemblyDebug="1" \
|
||||||
$link_opts
|
TargetMachine="1" \
|
||||||
|
$link_opts \
|
||||||
|
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
|
|
||||||
case "$name" in
|
|
||||||
vpx_decoder) tag DeploymentTool \
|
|
||||||
ForceDirty="-1" \
|
|
||||||
RegisterOutput="0"
|
|
||||||
;;
|
|
||||||
example|xma) tag DeploymentTool \
|
|
||||||
ForceDirty="-1" \
|
|
||||||
RegisterOutput="0"
|
|
||||||
tag DebuggerTool \
|
|
||||||
Arguments="${ARGU}"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
close_tag Configuration
|
close_tag Configuration
|
||||||
|
|
||||||
open_tag Configuration \
|
open_tag Configuration \
|
||||||
Name="Release|$plat" \
|
Name="Release|$plat" \
|
||||||
OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \
|
OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \
|
||||||
IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \
|
IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \
|
||||||
ConfigurationType="$vs_ConfigurationType" \
|
ConfigurationType="$vs_ConfigurationType" \
|
||||||
CharacterSet="1" \
|
CharacterSet="1" \
|
||||||
WholeProgramOptimization="0"
|
WholeProgramOptimization="0" \
|
||||||
|
|
||||||
if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
|
case "$target" in
|
||||||
case "$name" in
|
x86*)
|
||||||
vpx_decoder) tag Tool \
|
case "$name" in
|
||||||
Name="VCPreBuildEventTool" \
|
*)
|
||||||
CommandLine="call obj_int_extract.bat \$(ConfigurationName)"
|
tag Tool \
|
||||||
tag Tool \
|
Name="VCCLCompilerTool" \
|
||||||
Name="VCMIDLTool" \
|
AdditionalIncludeDirectories="$incs" \
|
||||||
TargetEnvironment="1"
|
Optimization="2" \
|
||||||
tag Tool \
|
FavorSizeorSpeed="1" \
|
||||||
Name="VCCLCompilerTool" \
|
PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
|
||||||
ExecutionBucket="7" \
|
RuntimeLibrary="$release_runtime" \
|
||||||
Optimization="2" \
|
UsePrecompiledHeader="0" \
|
||||||
FavorSizeOrSpeed="1" \
|
WarningLevel="3" \
|
||||||
AdditionalIncludeDirectories="$incs" \
|
DebugInformationFormat="0" \
|
||||||
PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;_LIB;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
|
Detect64BitPortabilityProblems="true" \
|
||||||
RuntimeLibrary="0" \
|
|
||||||
BufferSecurityCheck="false" \
|
|
||||||
UsePrecompiledHeader="0" \
|
|
||||||
WarningLevel="3" \
|
|
||||||
DebugInformationFormat="0" \
|
|
||||||
CompileAs="1"
|
|
||||||
tag Tool \
|
|
||||||
Name="VCResourceCompilerTool" \
|
|
||||||
PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES)" \
|
|
||||||
Culture="1033" \
|
|
||||||
AdditionalIncludeDirectories="\$(IntDir)" \
|
|
||||||
;;
|
|
||||||
example|xma) tag Tool \
|
|
||||||
Name="VCCLCompilerTool" \
|
|
||||||
ExecutionBucket="7" \
|
|
||||||
Optimization="2" \
|
|
||||||
FavorSizeOrSpeed="1" \
|
|
||||||
AdditionalIncludeDirectories="$incs" \
|
|
||||||
PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;_CONSOLE;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
|
|
||||||
RuntimeLibrary="0" \
|
|
||||||
BufferSecurityCheck="false" \
|
|
||||||
UsePrecompiledHeader="0" \
|
|
||||||
WarningLevel="3" \
|
|
||||||
DebugInformationFormat="0" \
|
|
||||||
CompileAs="1"
|
|
||||||
tag Tool \
|
|
||||||
Name="VCResourceCompilerTool" \
|
|
||||||
PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES)" \
|
|
||||||
Culture="1033" \
|
|
||||||
AdditionalIncludeDirectories="\$(IntDir)" \
|
|
||||||
;;
|
|
||||||
obj_int_extract) tag Tool \
|
|
||||||
Name="VCCLCompilerTool" \
|
|
||||||
AdditionalIncludeDirectories="$incs" \
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" \
|
|
||||||
RuntimeLibrary="0" \
|
|
||||||
UsePrecompiledHeader="0" \
|
|
||||||
WarningLevel="3" \
|
|
||||||
Detect64BitPortabilityProblems="true" \
|
|
||||||
DebugInformationFormat="0" \
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$target" in
|
$uses_asm && tag Tool Name="YASM" IncludePaths="$incs"
|
||||||
x86*) tag Tool \
|
;;
|
||||||
Name="VCCLCompilerTool" \
|
|
||||||
AdditionalIncludeDirectories="$incs" \
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;$defines" \
|
|
||||||
RuntimeLibrary="$release_runtime" \
|
|
||||||
UsePrecompiledHeader="0" \
|
|
||||||
WarningLevel="3" \
|
|
||||||
DebugInformationFormat="0" \
|
|
||||||
Detect64BitPortabilityProblems="true"
|
|
||||||
|
|
||||||
$uses_asm && tag Tool Name="YASM" IncludePaths="$incs"
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
case "$proj_kind" in
|
case "$proj_kind" in
|
||||||
exe)
|
exe)
|
||||||
case "$target" in
|
case "$target" in
|
||||||
x86*) tag Tool \
|
x86*)
|
||||||
Name="VCLinkerTool" \
|
|
||||||
AdditionalDependencies="$libs \$(NoInherit)" \
|
|
||||||
AdditionalLibraryDirectories="$libdirs" \
|
|
||||||
;;
|
|
||||||
arm*|iwmmx*)
|
|
||||||
case "$name" in
|
case "$name" in
|
||||||
obj_int_extract) tag Tool \
|
*)
|
||||||
Name="VCLinkerTool" \
|
tag Tool \
|
||||||
OutputFile="${name}.exe" \
|
Name="VCLinkerTool" \
|
||||||
LinkIncremental="1" \
|
AdditionalDependencies="$libs \$(NoInherit)" \
|
||||||
GenerateDebugInformation="false" \
|
AdditionalLibraryDirectories="$libdirs" \
|
||||||
SubSystem="0" \
|
|
||||||
OptimizeReferences="0" \
|
|
||||||
EnableCOMDATFolding="0" \
|
|
||||||
TargetMachine="0"
|
|
||||||
;;
|
|
||||||
*) tag Tool \
|
|
||||||
Name="VCLinkerTool" \
|
|
||||||
AdditionalDependencies="$libs" \
|
|
||||||
OutputFile="\$(OutDir)/${name}.exe" \
|
|
||||||
LinkIncremental="1" \
|
|
||||||
AdditionalLibraryDirectories="${libdirs};"..\lib/$plat_no_ws"" \
|
|
||||||
DelayLoadDLLs="\$(NOINHERIT)" \
|
|
||||||
GenerateDebugInformation="true" \
|
|
||||||
ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \
|
|
||||||
SubSystem="9" \
|
|
||||||
StackReserveSize="65536" \
|
|
||||||
StackCommitSize="4096" \
|
|
||||||
OptimizeReferences="2" \
|
|
||||||
EnableCOMDATFolding="2" \
|
|
||||||
EntryPointSymbol="mainWCRTStartup" \
|
|
||||||
TargetMachine="3"
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
lib)
|
lib)
|
||||||
case "$target" in
|
case "$target" in
|
||||||
arm*|iwmmx*) tag Tool \
|
x86*)
|
||||||
Name="VCLibrarianTool" \
|
tag Tool \
|
||||||
AdditionalOptions=" /subsystem:windowsce,4.20 /machine:ARM" \
|
Name="VCLibrarianTool" \
|
||||||
OutputFile="\$(OutDir)/${name}.lib" \
|
OutputFile="\$(OutDir)/${name}${lib_sfx}.lib" \
|
||||||
;;
|
|
||||||
*) tag Tool \
|
|
||||||
Name="VCLibrarianTool" \
|
|
||||||
OutputFile="\$(OutDir)/${name}${lib_sfx}.lib" \
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
dll) # note differences to debug version: LinkIncremental, AssemblyDebug
|
|
||||||
tag Tool \
|
|
||||||
Name="VCLinkerTool" \
|
|
||||||
AdditionalDependencies="\$(NoInherit)" \
|
|
||||||
LinkIncremental="1" \
|
|
||||||
GenerateDebugInformation="true" \
|
|
||||||
TargetMachine="1" \
|
|
||||||
$link_opts
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
|
;;
|
||||||
case "$name" in
|
esac
|
||||||
vpx_decoder) tag DeploymentTool \
|
;;
|
||||||
ForceDirty="-1" \
|
dll) # note differences to debug version: LinkIncremental, AssemblyDebug
|
||||||
RegisterOutput="0"
|
tag Tool \
|
||||||
;;
|
Name="VCLinkerTool" \
|
||||||
example|xma) tag DeploymentTool \
|
AdditionalDependencies="\$(NoInherit)" \
|
||||||
ForceDirty="-1" \
|
LinkIncremental="1" \
|
||||||
RegisterOutput="0"
|
GenerateDebugInformation="true" \
|
||||||
tag DebuggerTool \
|
TargetMachine="1" \
|
||||||
Arguments="${ARGU}"
|
$link_opts \
|
||||||
;;
|
|
||||||
esac
|
;;
|
||||||
fi
|
esac
|
||||||
|
|
||||||
close_tag Configuration
|
close_tag Configuration
|
||||||
done
|
done
|
||||||
close_tag Configurations
|
close_tag Configurations
|
||||||
|
|
||||||
open_tag Files
|
open_tag Files
|
||||||
generate_filter srcs "Source Files" "cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
generate_filter srcs "Source Files" "c;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
generate_filter hdrs "Header Files" "h;hpp;hxx;hm;inl;inc;xsd"
|
generate_filter hdrs "Header Files" "h;hm;inl;inc;xsd"
|
||||||
generate_filter resrcs "Resource Files" "rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
generate_filter resrcs "Resource Files" "rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||||
generate_filter resrcs "Build Files" "mk"
|
generate_filter resrcs "Build Files" "mk"
|
||||||
close_tag Files
|
close_tag Files
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
@@ -25,7 +25,7 @@ files.
|
|||||||
Options:
|
Options:
|
||||||
--help Print this message
|
--help Print this message
|
||||||
--out=outfile Redirect output to a file
|
--out=outfile Redirect output to a file
|
||||||
--ver=version Version (7,8) of visual studio to generate for
|
--ver=version Version (7,8,9) of visual studio to generate for
|
||||||
--target=isa-os-cc Target specifier
|
--target=isa-os-cc Target specifier
|
||||||
EOF
|
EOF
|
||||||
exit 1
|
exit 1
|
||||||
@@ -139,9 +139,6 @@ process_global() {
|
|||||||
echo "${indent}${proj_guid}.${config}.ActiveCfg = ${config}"
|
echo "${indent}${proj_guid}.${config}.ActiveCfg = ${config}"
|
||||||
echo "${indent}${proj_guid}.${config}.Build.0 = ${config}"
|
echo "${indent}${proj_guid}.${config}.Build.0 = ${config}"
|
||||||
|
|
||||||
if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
|
|
||||||
echo "${indent}${proj_guid}.${config}.Deploy.0 = ${config}"
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
IFS=${IFS_bak}
|
IFS=${IFS_bak}
|
||||||
done
|
done
|
||||||
@@ -193,11 +190,11 @@ ${TAB}rm -rf "$platform"/"$config"
|
|||||||
ifneq (\$(found_devenv),)
|
ifneq (\$(found_devenv),)
|
||||||
ifeq (\$(CONFIG_VS_VERSION),7)
|
ifeq (\$(CONFIG_VS_VERSION),7)
|
||||||
$nows_sln_config: $outfile
|
$nows_sln_config: $outfile
|
||||||
${TAB}devenv.com $outfile /build "$config"
|
${TAB}devenv.com $outfile -build "$config"
|
||||||
|
|
||||||
else
|
else
|
||||||
$nows_sln_config: $outfile
|
$nows_sln_config: $outfile
|
||||||
${TAB}devenv.com $outfile /build "$sln_config"
|
${TAB}devenv.com $outfile -build "$sln_config"
|
||||||
|
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
@@ -224,7 +221,7 @@ for opt in "$@"; do
|
|||||||
;;
|
;;
|
||||||
--ver=*) vs_ver="$optval"
|
--ver=*) vs_ver="$optval"
|
||||||
case $optval in
|
case $optval in
|
||||||
[78])
|
[789])
|
||||||
;;
|
;;
|
||||||
*) die Unrecognized Visual Studio Version in $opt
|
*) die Unrecognized Visual Studio Version in $opt
|
||||||
;;
|
;;
|
||||||
@@ -235,7 +232,7 @@ for opt in "$@"; do
|
|||||||
7) sln_vers="8.00"
|
7) sln_vers="8.00"
|
||||||
sln_vers_str="Visual Studio .NET 2003"
|
sln_vers_str="Visual Studio .NET 2003"
|
||||||
;;
|
;;
|
||||||
8)
|
[89])
|
||||||
;;
|
;;
|
||||||
*) die "Unrecognized Visual Studio Version '$optval' in $opt"
|
*) die "Unrecognized Visual Studio Version '$optval' in $opt"
|
||||||
;;
|
;;
|
||||||
@@ -257,6 +254,9 @@ case "${vs_ver:-8}" in
|
|||||||
8) sln_vers="9.00"
|
8) sln_vers="9.00"
|
||||||
sln_vers_str="Visual Studio 2005"
|
sln_vers_str="Visual Studio 2005"
|
||||||
;;
|
;;
|
||||||
|
9) sln_vers="10.00"
|
||||||
|
sln_vers_str="Visual Studio 2008"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
for f in "${file_list[@]}"; do
|
for f in "${file_list[@]}"; do
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -590,7 +590,7 @@ int parse_coff(unsigned __int8 *buf, size_t sz)
|
|||||||
//log_msg("COFF: Symbol table at offset %u\n", symtab_ptr);
|
//log_msg("COFF: Symbol table at offset %u\n", symtab_ptr);
|
||||||
//log_msg("COFF: raw data pointer ofset for section .data is %u\n", sectionrawdata_ptr);
|
//log_msg("COFF: raw data pointer ofset for section .data is %u\n", sectionrawdata_ptr);
|
||||||
|
|
||||||
fp = fopen("vpx_asm_offsets.asm", "w");
|
fp = fopen("assembly_offsets.asm", "w");
|
||||||
|
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
{
|
{
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
|
42
configure
vendored
42
configure
vendored
@@ -23,6 +23,7 @@ Advanced options:
|
|||||||
${toggle_libs} don't build libraries
|
${toggle_libs} don't build libraries
|
||||||
${toggle_examples} don't build examples
|
${toggle_examples} don't build examples
|
||||||
--libc=PATH path to alternate libc
|
--libc=PATH path to alternate libc
|
||||||
|
--as={yasm|nasm|auto} use specified assembler [auto, yasm preferred]
|
||||||
${toggle_fast_unaligned} don't use unaligned accesses, even when
|
${toggle_fast_unaligned} don't use unaligned accesses, even when
|
||||||
supported by hardware [auto]
|
supported by hardware [auto]
|
||||||
${toggle_codec_srcs} in/exclude codec library source code
|
${toggle_codec_srcs} in/exclude codec library source code
|
||||||
@@ -38,6 +39,8 @@ Advanced options:
|
|||||||
${toggle_realtime_only} enable this option while building for real-time encoding
|
${toggle_realtime_only} enable this option while building for real-time encoding
|
||||||
${toggle_runtime_cpu_detect} runtime cpu detection
|
${toggle_runtime_cpu_detect} runtime cpu detection
|
||||||
${toggle_shared} shared library support
|
${toggle_shared} shared library support
|
||||||
|
${toggle_small} favor smaller size over speed
|
||||||
|
${toggle_postproc_visualizer} macro block / block level visualizers
|
||||||
|
|
||||||
Codecs:
|
Codecs:
|
||||||
Codecs can be selectively enabled or disabled individually, or by family:
|
Codecs can be selectively enabled or disabled individually, or by family:
|
||||||
@@ -75,28 +78,29 @@ EOF
|
|||||||
# alphabetically by architecture, generic-gnu last.
|
# alphabetically by architecture, generic-gnu last.
|
||||||
all_platforms="${all_platforms} armv5te-linux-rvct"
|
all_platforms="${all_platforms} armv5te-linux-rvct"
|
||||||
all_platforms="${all_platforms} armv5te-linux-gcc"
|
all_platforms="${all_platforms} armv5te-linux-gcc"
|
||||||
|
all_platforms="${all_platforms} armv5te-none-rvct"
|
||||||
all_platforms="${all_platforms} armv5te-symbian-gcc"
|
all_platforms="${all_platforms} armv5te-symbian-gcc"
|
||||||
all_platforms="${all_platforms} armv5te-wince-vs8"
|
|
||||||
all_platforms="${all_platforms} armv6-darwin-gcc"
|
all_platforms="${all_platforms} armv6-darwin-gcc"
|
||||||
all_platforms="${all_platforms} armv6-linux-rvct"
|
all_platforms="${all_platforms} armv6-linux-rvct"
|
||||||
all_platforms="${all_platforms} armv6-linux-gcc"
|
all_platforms="${all_platforms} armv6-linux-gcc"
|
||||||
|
all_platforms="${all_platforms} armv6-none-rvct"
|
||||||
all_platforms="${all_platforms} armv6-symbian-gcc"
|
all_platforms="${all_platforms} armv6-symbian-gcc"
|
||||||
all_platforms="${all_platforms} armv6-wince-vs8"
|
|
||||||
all_platforms="${all_platforms} iwmmxt-linux-rvct"
|
all_platforms="${all_platforms} iwmmxt-linux-rvct"
|
||||||
all_platforms="${all_platforms} iwmmxt-linux-gcc"
|
all_platforms="${all_platforms} iwmmxt-linux-gcc"
|
||||||
all_platforms="${all_platforms} iwmmxt-wince-vs8"
|
|
||||||
all_platforms="${all_platforms} iwmmxt2-linux-rvct"
|
all_platforms="${all_platforms} iwmmxt2-linux-rvct"
|
||||||
all_platforms="${all_platforms} iwmmxt2-linux-gcc"
|
all_platforms="${all_platforms} iwmmxt2-linux-gcc"
|
||||||
all_platforms="${all_platforms} iwmmxt2-wince-vs8"
|
|
||||||
all_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8
|
all_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8
|
||||||
all_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8
|
all_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8
|
||||||
all_platforms="${all_platforms} armv7-linux-gcc" #neon Cortex-A8
|
all_platforms="${all_platforms} armv7-linux-gcc" #neon Cortex-A8
|
||||||
|
all_platforms="${all_platforms} armv7-none-rvct" #neon Cortex-A8
|
||||||
all_platforms="${all_platforms} mips32-linux-gcc"
|
all_platforms="${all_platforms} mips32-linux-gcc"
|
||||||
all_platforms="${all_platforms} ppc32-darwin8-gcc"
|
all_platforms="${all_platforms} ppc32-darwin8-gcc"
|
||||||
all_platforms="${all_platforms} ppc32-darwin9-gcc"
|
all_platforms="${all_platforms} ppc32-darwin9-gcc"
|
||||||
|
all_platforms="${all_platforms} ppc32-linux-gcc"
|
||||||
all_platforms="${all_platforms} ppc64-darwin8-gcc"
|
all_platforms="${all_platforms} ppc64-darwin8-gcc"
|
||||||
all_platforms="${all_platforms} ppc64-darwin9-gcc"
|
all_platforms="${all_platforms} ppc64-darwin9-gcc"
|
||||||
all_platforms="${all_platforms} ppc64-linux-gcc"
|
all_platforms="${all_platforms} ppc64-linux-gcc"
|
||||||
|
all_platforms="${all_platforms} sparc-solaris-gcc"
|
||||||
all_platforms="${all_platforms} x86-darwin8-gcc"
|
all_platforms="${all_platforms} x86-darwin8-gcc"
|
||||||
all_platforms="${all_platforms} x86-darwin8-icc"
|
all_platforms="${all_platforms} x86-darwin8-icc"
|
||||||
all_platforms="${all_platforms} x86-darwin9-gcc"
|
all_platforms="${all_platforms} x86-darwin9-gcc"
|
||||||
@@ -107,11 +111,14 @@ all_platforms="${all_platforms} x86-solaris-gcc"
|
|||||||
all_platforms="${all_platforms} x86-win32-gcc"
|
all_platforms="${all_platforms} x86-win32-gcc"
|
||||||
all_platforms="${all_platforms} x86-win32-vs7"
|
all_platforms="${all_platforms} x86-win32-vs7"
|
||||||
all_platforms="${all_platforms} x86-win32-vs8"
|
all_platforms="${all_platforms} x86-win32-vs8"
|
||||||
|
all_platforms="${all_platforms} x86-win32-vs9"
|
||||||
all_platforms="${all_platforms} x86_64-darwin9-gcc"
|
all_platforms="${all_platforms} x86_64-darwin9-gcc"
|
||||||
|
all_platforms="${all_platforms} x86_64-darwin10-gcc"
|
||||||
all_platforms="${all_platforms} x86_64-linux-gcc"
|
all_platforms="${all_platforms} x86_64-linux-gcc"
|
||||||
all_platforms="${all_platforms} x86_64-linux-icc"
|
all_platforms="${all_platforms} x86_64-linux-icc"
|
||||||
all_platforms="${all_platforms} x86_64-solaris-gcc"
|
all_platforms="${all_platforms} x86_64-solaris-gcc"
|
||||||
all_platforms="${all_platforms} x86_64-win64-vs8"
|
all_platforms="${all_platforms} x86_64-win64-vs8"
|
||||||
|
all_platforms="${all_platforms} x86_64-win64-vs9"
|
||||||
all_platforms="${all_platforms} universal-darwin8-gcc"
|
all_platforms="${all_platforms} universal-darwin8-gcc"
|
||||||
all_platforms="${all_platforms} universal-darwin9-gcc"
|
all_platforms="${all_platforms} universal-darwin9-gcc"
|
||||||
all_platforms="${all_platforms} generic-gnu"
|
all_platforms="${all_platforms} generic-gnu"
|
||||||
@@ -150,6 +157,7 @@ enable fast_unaligned #allow unaligned accesses, if supported by hw
|
|||||||
enable md5
|
enable md5
|
||||||
enable spatial_resampling
|
enable spatial_resampling
|
||||||
enable multithread
|
enable multithread
|
||||||
|
enable os_support
|
||||||
|
|
||||||
[ -d ${source_path}/../include ] && enable alt_tree_layout
|
[ -d ${source_path}/../include ] && enable alt_tree_layout
|
||||||
for d in vp8; do
|
for d in vp8; do
|
||||||
@@ -192,6 +200,7 @@ ARCH_EXT_LIST="
|
|||||||
sse2
|
sse2
|
||||||
sse3
|
sse3
|
||||||
ssse3
|
ssse3
|
||||||
|
sse4_1
|
||||||
|
|
||||||
altivec
|
altivec
|
||||||
"
|
"
|
||||||
@@ -228,10 +237,8 @@ CONFIG_LIST="
|
|||||||
|
|
||||||
dequant_tokens
|
dequant_tokens
|
||||||
dc_recon
|
dc_recon
|
||||||
new_tokens
|
|
||||||
runtime_cpu_detect
|
runtime_cpu_detect
|
||||||
postproc
|
postproc
|
||||||
postproc_generic
|
|
||||||
multithread
|
multithread
|
||||||
psnr
|
psnr
|
||||||
${CODECS}
|
${CODECS}
|
||||||
@@ -242,6 +249,9 @@ CONFIG_LIST="
|
|||||||
spatial_resampling
|
spatial_resampling
|
||||||
realtime_only
|
realtime_only
|
||||||
shared
|
shared
|
||||||
|
small
|
||||||
|
postproc_visualizer
|
||||||
|
os_support
|
||||||
"
|
"
|
||||||
CMDLINE_SELECT="
|
CMDLINE_SELECT="
|
||||||
extra_warnings
|
extra_warnings
|
||||||
@@ -261,6 +271,7 @@ CMDLINE_SELECT="
|
|||||||
libs
|
libs
|
||||||
examples
|
examples
|
||||||
libc
|
libc
|
||||||
|
as
|
||||||
fast_unaligned
|
fast_unaligned
|
||||||
codec_srcs
|
codec_srcs
|
||||||
debug_libs
|
debug_libs
|
||||||
@@ -268,9 +279,7 @@ CMDLINE_SELECT="
|
|||||||
|
|
||||||
dequant_tokens
|
dequant_tokens
|
||||||
dc_recon
|
dc_recon
|
||||||
new_tokens
|
|
||||||
postproc
|
postproc
|
||||||
postproc_generic
|
|
||||||
multithread
|
multithread
|
||||||
psnr
|
psnr
|
||||||
${CODECS}
|
${CODECS}
|
||||||
@@ -280,6 +289,8 @@ CMDLINE_SELECT="
|
|||||||
spatial_resampling
|
spatial_resampling
|
||||||
realtime_only
|
realtime_only
|
||||||
shared
|
shared
|
||||||
|
small
|
||||||
|
postproc_visualizer
|
||||||
"
|
"
|
||||||
|
|
||||||
process_cmdline() {
|
process_cmdline() {
|
||||||
@@ -287,7 +298,7 @@ process_cmdline() {
|
|||||||
optval="${opt#*=}"
|
optval="${opt#*=}"
|
||||||
case "$opt" in
|
case "$opt" in
|
||||||
--disable-codecs) for c in ${CODECS}; do disable $c; done ;;
|
--disable-codecs) for c in ${CODECS}; do disable $c; done ;;
|
||||||
*) process_common_cmdline $opt
|
*) process_common_cmdline "$opt"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -316,8 +327,6 @@ post_process_cmdline() {
|
|||||||
for c in ${CODECS}; do
|
for c in ${CODECS}; do
|
||||||
enabled ${c} && enable ${c##*_}s
|
enabled ${c} && enable ${c##*_}s
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -387,6 +396,7 @@ VERSION_MAJOR=${VERSION_MAJOR}
|
|||||||
VERSION_MINOR=${VERSION_MINOR}
|
VERSION_MINOR=${VERSION_MINOR}
|
||||||
VERSION_PATCH=${VERSION_PATCH}
|
VERSION_PATCH=${VERSION_PATCH}
|
||||||
|
|
||||||
|
CONFIGURE_ARGS=${CONFIGURE_ARGS}
|
||||||
EOF
|
EOF
|
||||||
enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk
|
enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk
|
||||||
|
|
||||||
@@ -410,7 +420,7 @@ process_detect() {
|
|||||||
# Can only build shared libs on a subset of platforms. Doing this check
|
# Can only build shared libs on a subset of platforms. Doing this check
|
||||||
# here rather than at option parse time because the target auto-detect
|
# here rather than at option parse time because the target auto-detect
|
||||||
# magic happens after the command line has been parsed.
|
# magic happens after the command line has been parsed.
|
||||||
enabled linux || die "--enable-shared only supported on ELF for now"
|
enabled linux || die "--enable-shared only supported on ELF for now"
|
||||||
fi
|
fi
|
||||||
if [ -z "$CC" ]; then
|
if [ -z "$CC" ]; then
|
||||||
echo "Bypassing toolchain for environment detection."
|
echo "Bypassing toolchain for environment detection."
|
||||||
@@ -512,7 +522,7 @@ process_toolchain() {
|
|||||||
enabled gcc || soft_disable ccache
|
enabled gcc || soft_disable ccache
|
||||||
if enabled mips; then
|
if enabled mips; then
|
||||||
enable dequant_tokens
|
enable dequant_tokens
|
||||||
enable dc_recon
|
enable dc_recon
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Enable the postbuild target if building for visual studio.
|
# Enable the postbuild target if building for visual studio.
|
||||||
@@ -521,13 +531,15 @@ process_toolchain() {
|
|||||||
enable solution
|
enable solution
|
||||||
vs_version=${tgt_cc##vs}
|
vs_version=${tgt_cc##vs}
|
||||||
all_targets="${all_targets} solution"
|
all_targets="${all_targets} solution"
|
||||||
INLINE=__inline
|
|
||||||
FORCEINLINE=__forceinline
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Other toolchain specific defaults
|
# Other toolchain specific defaults
|
||||||
case $toolchain in x86*|ppc*|universal*) soft_enable postproc;; esac
|
case $toolchain in x86*|ppc*|universal*) soft_enable postproc;; esac
|
||||||
|
|
||||||
|
if enabled postproc_visualizer; then
|
||||||
|
enabled postproc || die "postproc_visualizer requires postproc to be enabled"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
5
docs.mk
5
docs.mk
@@ -1,5 +1,5 @@
|
|||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
@@ -34,7 +34,8 @@ TXT_DOX = $(call enabled,TXT_DOX)
|
|||||||
|
|
||||||
EXAMPLE_PATH += $(SRC_PATH_BARE) #for CHANGELOG, README, etc
|
EXAMPLE_PATH += $(SRC_PATH_BARE) #for CHANGELOG, README, etc
|
||||||
|
|
||||||
doxyfile: libs.doxy_template libs.doxy examples.doxy
|
doxyfile: $(if $(findstring examples, $(ALL_TARGETS)),examples.doxy)
|
||||||
|
doxyfile: libs.doxy_template libs.doxy
|
||||||
@echo " [CREATE] $@"
|
@echo " [CREATE] $@"
|
||||||
@cat $^ > $@
|
@cat $^ > $@
|
||||||
@echo "STRIP_FROM_PATH += $(SRC_PATH_BARE) $(BUILD_ROOT)" >> $@
|
@echo "STRIP_FROM_PATH += $(SRC_PATH_BARE) $(BUILD_ROOT)" >> $@
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
|
59
examples.mk
59
examples.mk
@@ -1,5 +1,5 @@
|
|||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
@@ -12,19 +12,40 @@
|
|||||||
# List of examples to build. UTILS are files that are taken from the source
|
# List of examples to build. UTILS are files that are taken from the source
|
||||||
# tree directly, and GEN_EXAMPLES are files that are created from the
|
# tree directly, and GEN_EXAMPLES are files that are created from the
|
||||||
# examples folder.
|
# examples folder.
|
||||||
UTILS-$(CONFIG_DECODERS) += ivfdec.c
|
UTILS-$(CONFIG_DECODERS) += vpxdec.c
|
||||||
ivfdec.SRCS += md5_utils.c md5_utils.h
|
vpxdec.SRCS += md5_utils.c md5_utils.h
|
||||||
ivfdec.SRCS += vpx_ports/vpx_timer.h
|
vpxdec.SRCS += vpx_ports/vpx_timer.h
|
||||||
ivfdec.SRCS += vpx/vpx_integer.h
|
vpxdec.SRCS += vpx/vpx_integer.h
|
||||||
ivfdec.SRCS += args.c args.h vpx_ports/config.h
|
vpxdec.SRCS += args.c args.h vpx_ports/config.h
|
||||||
ivfdec.GUID = BA5FE66F-38DD-E034-F542-B1578C5FB950
|
vpxdec.SRCS += tools_common.c tools_common.h
|
||||||
ivfdec.DESCRIPTION = Full featured decoder
|
vpxdec.SRCS += nestegg/halloc/halloc.h
|
||||||
UTILS-$(CONFIG_ENCODERS) += ivfenc.c
|
vpxdec.SRCS += nestegg/halloc/src/align.h
|
||||||
ivfenc.SRCS += args.c args.h y4minput.c y4minput.h
|
vpxdec.SRCS += nestegg/halloc/src/halloc.c
|
||||||
ivfenc.SRCS += vpx_ports/config.h vpx_ports/mem_ops.h
|
vpxdec.SRCS += nestegg/halloc/src/hlist.h
|
||||||
ivfenc.SRCS += vpx_ports/mem_ops_aligned.h
|
vpxdec.SRCS += nestegg/halloc/src/macros.h
|
||||||
ivfenc.GUID = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
|
vpxdec.SRCS += nestegg/include/nestegg/nestegg.h
|
||||||
ivfenc.DESCRIPTION = Full featured encoder
|
vpxdec.SRCS += nestegg/src/nestegg.c
|
||||||
|
vpxdec.GUID = BA5FE66F-38DD-E034-F542-B1578C5FB950
|
||||||
|
vpxdec.DESCRIPTION = Full featured decoder
|
||||||
|
UTILS-$(CONFIG_ENCODERS) += vpxenc.c
|
||||||
|
vpxenc.SRCS += args.c args.h y4minput.c y4minput.h
|
||||||
|
vpxenc.SRCS += tools_common.c tools_common.h
|
||||||
|
vpxenc.SRCS += vpx_ports/config.h vpx_ports/mem_ops.h
|
||||||
|
vpxenc.SRCS += vpx_ports/mem_ops_aligned.h
|
||||||
|
vpxenc.SRCS += libmkv/EbmlIDs.h
|
||||||
|
vpxenc.SRCS += libmkv/EbmlWriter.c
|
||||||
|
vpxenc.SRCS += libmkv/EbmlWriter.h
|
||||||
|
vpxenc.GUID = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
|
||||||
|
vpxenc.DESCRIPTION = Full featured encoder
|
||||||
|
|
||||||
|
# Clean up old ivfenc, ivfdec binaries.
|
||||||
|
ifeq ($(CONFIG_MSVS),yes)
|
||||||
|
CLEAN-OBJS += $(foreach p,$(VS_PLATFORMS),$(p)/Release/ivfenc.exe)
|
||||||
|
CLEAN-OBJS += $(foreach p,$(VS_PLATFORMS),$(p)/Release/ivfdec.exe)
|
||||||
|
else
|
||||||
|
CLEAN-OBJS += ivfenc{.c.o,.c.d,.dox,.exe,}
|
||||||
|
CLEAN-OBJS += ivfdec{.c.o,.c.d,.dox,.exe,}
|
||||||
|
endif
|
||||||
|
|
||||||
# XMA example disabled for now, not used in VP8
|
# XMA example disabled for now, not used in VP8
|
||||||
#UTILS-$(CONFIG_DECODERS) += example_xma.c
|
#UTILS-$(CONFIG_DECODERS) += example_xma.c
|
||||||
@@ -72,8 +93,16 @@ vp8cx_set_ref.DESCRIPTION = VP8 set encoder reference frame
|
|||||||
|
|
||||||
|
|
||||||
# Handle extra library flags depending on codec configuration
|
# Handle extra library flags depending on codec configuration
|
||||||
CODEC_EXTRA_LIBS-$(CONFIG_VP8) += m
|
|
||||||
|
|
||||||
|
# We should not link to math library (libm) on RVCT
|
||||||
|
# when building for bare-metal targets
|
||||||
|
ifeq ($(CONFIG_OS_SUPPORT), yes)
|
||||||
|
CODEC_EXTRA_LIBS-$(CONFIG_VP8) += m
|
||||||
|
else
|
||||||
|
ifeq ($(CONFIG_GCC), yes)
|
||||||
|
CODEC_EXTRA_LIBS-$(CONFIG_VP8) += m
|
||||||
|
endif
|
||||||
|
endif
|
||||||
#
|
#
|
||||||
# End of specified files. The rest of the build rules should happen
|
# End of specified files. The rest of the build rules should happen
|
||||||
# automagically from here.
|
# automagically from here.
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
#define VPX_CODEC_DISABLE_COMPAT 1
|
#define VPX_CODEC_DISABLE_COMPAT 1
|
||||||
#include "vpx/vpx_decoder.h"
|
#include "vpx/vpx_decoder.h"
|
||||||
#include "vpx/vp8dx.h"
|
#include "vpx/vp8dx.h"
|
||||||
#define interface (&vpx_codec_vp8_dx_algo)
|
#define interface (vpx_codec_vp8_dx())
|
||||||
@EXTRA_INCLUDES
|
@EXTRA_INCLUDES
|
||||||
|
|
||||||
|
|
||||||
@@ -61,8 +61,8 @@ int main(int argc, char **argv) {
|
|||||||
die("Failed to open %s for writing", argv[2]);
|
die("Failed to open %s for writing", argv[2]);
|
||||||
|
|
||||||
/* Read file header */
|
/* Read file header */
|
||||||
fread(file_hdr, 1, IVF_FILE_HDR_SZ, infile);
|
if(!(fread(file_hdr, 1, IVF_FILE_HDR_SZ, infile) == IVF_FILE_HDR_SZ
|
||||||
if(!(file_hdr[0]=='D' && file_hdr[1]=='K' && file_hdr[2]=='I'
|
&& file_hdr[0]=='D' && file_hdr[1]=='K' && file_hdr[2]=='I'
|
||||||
&& file_hdr[3]=='F'))
|
&& file_hdr[3]=='F'))
|
||||||
die("%s is not an IVF file.", argv[1]);
|
die("%s is not an IVF file.", argv[1]);
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
#define VPX_CODEC_DISABLE_COMPAT 1
|
#define VPX_CODEC_DISABLE_COMPAT 1
|
||||||
#include "vpx/vpx_decoder.h"
|
#include "vpx/vpx_decoder.h"
|
||||||
#include "vpx/vp8dx.h"
|
#include "vpx/vp8dx.h"
|
||||||
#define interface (&vpx_codec_vp8_dx_algo)
|
#define interface (vpx_codec_vp8_dx())
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INCLUDES
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INCLUDES
|
||||||
|
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ for(plane=0; plane < 3; plane++) {
|
|||||||
unsigned char *buf =img->planes[plane];
|
unsigned char *buf =img->planes[plane];
|
||||||
|
|
||||||
for(y=0; y<img->d_h >> (plane?1:0); y++) {
|
for(y=0; y<img->d_h >> (plane?1:0); y++) {
|
||||||
fwrite(buf, 1, img->d_w >> (plane?1:0), outfile);
|
if(fwrite(buf, 1, img->d_w >> (plane?1:0), outfile));
|
||||||
buf += img->stride[plane];
|
buf += img->stride[plane];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
#define VPX_CODEC_DISABLE_COMPAT 1
|
#define VPX_CODEC_DISABLE_COMPAT 1
|
||||||
#include "vpx/vpx_encoder.h"
|
#include "vpx/vpx_encoder.h"
|
||||||
#include "vpx/vp8cx.h"
|
#include "vpx/vp8cx.h"
|
||||||
#define interface (&vpx_codec_vp8_cx_algo)
|
#define interface (vpx_codec_vp8_cx())
|
||||||
#define fourcc 0x30385056
|
#define fourcc 0x30385056
|
||||||
@EXTRA_INCLUDES
|
@EXTRA_INCLUDES
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ static void write_ivf_file_header(FILE *outfile,
|
|||||||
mem_put_le32(header+24, frame_cnt); /* length */
|
mem_put_le32(header+24, frame_cnt); /* length */
|
||||||
mem_put_le32(header+28, 0); /* unused */
|
mem_put_le32(header+28, 0); /* unused */
|
||||||
|
|
||||||
fwrite(header, 1, 32, outfile);
|
if(fwrite(header, 1, 32, outfile));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ static void write_ivf_frame_header(FILE *outfile,
|
|||||||
mem_put_le32(header+4, pts&0xFFFFFFFF);
|
mem_put_le32(header+4, pts&0xFFFFFFFF);
|
||||||
mem_put_le32(header+8, pts >> 32);
|
mem_put_le32(header+8, pts >> 32);
|
||||||
|
|
||||||
fwrite(header, 1, 12, outfile);
|
if(fwrite(header, 1, 12, outfile));
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
#define VPX_CODEC_DISABLE_COMPAT 1
|
#define VPX_CODEC_DISABLE_COMPAT 1
|
||||||
#include "vpx/vpx_encoder.h"
|
#include "vpx/vpx_encoder.h"
|
||||||
#include "vpx/vp8cx.h"
|
#include "vpx/vp8cx.h"
|
||||||
#define interface (&vpx_codec_vp8_cx_algo)
|
#define interface (vpx_codec_vp8_cx())
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INCLUDES
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INCLUDES
|
||||||
|
|
||||||
|
|
||||||
@@ -61,8 +61,8 @@ if(vpx_codec_encode(&codec, frame_avail? &raw : NULL, frame_cnt,
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_FRAME
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_FRAME
|
||||||
case VPX_CODEC_CX_FRAME_PKT:
|
case VPX_CODEC_CX_FRAME_PKT:
|
||||||
write_ivf_frame_header(outfile, pkt);
|
write_ivf_frame_header(outfile, pkt);
|
||||||
fwrite(pkt->data.frame.buf, 1, pkt->data.frame.sz,
|
if(fwrite(pkt->data.frame.buf, 1, pkt->data.frame.sz,
|
||||||
outfile);
|
outfile));
|
||||||
break;
|
break;
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_FRAME
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_FRAME
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
|
@@ -33,7 +33,7 @@ Initializing The Codec
|
|||||||
----------------------
|
----------------------
|
||||||
The decoder is initialized by the following code. This is an example for
|
The decoder is initialized by the following code. This is an example for
|
||||||
the VP8 decoder, but the code is analogous for all algorithms. Replace
|
the VP8 decoder, but the code is analogous for all algorithms. Replace
|
||||||
`&vpx_codec_vp8_dx_algo` with a pointer to the interface exposed by the
|
`vpx_codec_vp8_dx()` with a pointer to the interface exposed by the
|
||||||
algorithm you want to use. The `cfg` argument is left as NULL in this
|
algorithm you want to use. The `cfg` argument is left as NULL in this
|
||||||
example, because we want the algorithm to determine the stream
|
example, because we want the algorithm to determine the stream
|
||||||
configuration (width/height) and allocate memory automatically. This
|
configuration (width/height) and allocate memory automatically. This
|
||||||
|
@@ -78,8 +78,8 @@ if(frame_cnt + 1 == 22) {
|
|||||||
} else if(frame_cnt + 1 == 44) {
|
} else if(frame_cnt + 1 == 44) {
|
||||||
vpx_active_map_t active;
|
vpx_active_map_t active;
|
||||||
|
|
||||||
active.rows = 240/16;
|
active.rows = cfg.g_h/16;
|
||||||
active.cols = 320/16;
|
active.cols = cfg.g_w/16;
|
||||||
|
|
||||||
/* pass in null map to disable active_map*/
|
/* pass in null map to disable active_map*/
|
||||||
active.active_map = NULL;
|
active.active_map = NULL;
|
||||||
|
640
ivfdec.c
640
ivfdec.c
@@ -1,640 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* This is a simple program that reads ivf files and decodes them
|
|
||||||
* using the new interface. Decoded frames are output as YV12 raw.
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <string.h>
|
|
||||||
#define VPX_CODEC_DISABLE_COMPAT 1
|
|
||||||
#include "vpx_config.h"
|
|
||||||
#include "vpx/vpx_decoder.h"
|
|
||||||
#include "vpx_ports/vpx_timer.h"
|
|
||||||
#if CONFIG_VP8_DECODER
|
|
||||||
#include "vpx/vp8dx.h"
|
|
||||||
#endif
|
|
||||||
#if CONFIG_MD5
|
|
||||||
#include "md5_utils.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const char *exec_name;
|
|
||||||
|
|
||||||
static const struct
|
|
||||||
{
|
|
||||||
char const *name;
|
|
||||||
const vpx_codec_iface_t *iface;
|
|
||||||
unsigned int fourcc;
|
|
||||||
unsigned int fourcc_mask;
|
|
||||||
} ifaces[] =
|
|
||||||
{
|
|
||||||
#if CONFIG_VP8_DECODER
|
|
||||||
{"vp8", &vpx_codec_vp8_dx_algo, 0x00385056, 0x00FFFFFF},
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
#include "args.h"
|
|
||||||
static const arg_def_t codecarg = ARG_DEF(NULL, "codec", 1,
|
|
||||||
"Codec to use");
|
|
||||||
static const arg_def_t prefixarg = ARG_DEF("p", "prefix", 1,
|
|
||||||
"Prefix to use when saving frames");
|
|
||||||
static const arg_def_t use_yv12 = ARG_DEF(NULL, "yv12", 0,
|
|
||||||
"Output file is YV12 ");
|
|
||||||
static const arg_def_t use_i420 = ARG_DEF(NULL, "i420", 0,
|
|
||||||
"Output file is I420 (default)");
|
|
||||||
static const arg_def_t flipuvarg = ARG_DEF(NULL, "flipuv", 0,
|
|
||||||
"Synonym for --yv12");
|
|
||||||
static const arg_def_t noblitarg = ARG_DEF(NULL, "noblit", 0,
|
|
||||||
"Don't process the decoded frames");
|
|
||||||
static const arg_def_t progressarg = ARG_DEF(NULL, "progress", 0,
|
|
||||||
"Show progress after each frame decodes");
|
|
||||||
static const arg_def_t limitarg = ARG_DEF(NULL, "limit", 1,
|
|
||||||
"Stop decoding after n frames");
|
|
||||||
static const arg_def_t postprocarg = ARG_DEF(NULL, "postproc", 0,
|
|
||||||
"Postprocess decoded frames");
|
|
||||||
static const arg_def_t summaryarg = ARG_DEF(NULL, "summary", 0,
|
|
||||||
"Show timing summary");
|
|
||||||
static const arg_def_t outputfile = ARG_DEF("o", "output", 1,
|
|
||||||
"Output raw yv12 file instead of images");
|
|
||||||
static const arg_def_t usey4marg = ARG_DEF("y", "y4m", 0,
|
|
||||||
"Output file is YUV4MPEG2");
|
|
||||||
static const arg_def_t threadsarg = ARG_DEF("t", "threads", 1,
|
|
||||||
"Max threads to use");
|
|
||||||
static const arg_def_t quietarg = ARG_DEF("q", "quiet", 0,
|
|
||||||
"Suppress version string");
|
|
||||||
|
|
||||||
#if CONFIG_MD5
|
|
||||||
static const arg_def_t md5arg = ARG_DEF(NULL, "md5", 0,
|
|
||||||
"Compute the MD5 sum of the decoded frame");
|
|
||||||
#endif
|
|
||||||
static const arg_def_t *all_args[] =
|
|
||||||
{
|
|
||||||
&codecarg, &prefixarg, &use_yv12, &use_i420, &flipuvarg, &noblitarg,
|
|
||||||
&progressarg, &limitarg, &postprocarg, &summaryarg, &outputfile,
|
|
||||||
&usey4marg, &threadsarg, &quietarg,
|
|
||||||
#if CONFIG_MD5
|
|
||||||
&md5arg,
|
|
||||||
#endif
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
#if CONFIG_VP8_DECODER
|
|
||||||
static const arg_def_t addnoise_level = ARG_DEF(NULL, "noise-level", 1,
|
|
||||||
"Enable VP8 postproc add noise");
|
|
||||||
static const arg_def_t deblock = ARG_DEF(NULL, "deblock", 0,
|
|
||||||
"Enable VP8 deblocking");
|
|
||||||
static const arg_def_t demacroblock_level = ARG_DEF(NULL, "demacroblock-level", 1,
|
|
||||||
"Enable VP8 demacroblocking, w/ level");
|
|
||||||
static const arg_def_t pp_debug_info = ARG_DEF(NULL, "pp-debug-info", 1,
|
|
||||||
"Enable VP8 visible debug info");
|
|
||||||
|
|
||||||
|
|
||||||
static const arg_def_t *vp8_pp_args[] =
|
|
||||||
{
|
|
||||||
&addnoise_level, &deblock, &demacroblock_level, &pp_debug_info,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void usage_exit()
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
fprintf(stderr, "Usage: %s <options> filename\n\n"
|
|
||||||
"Options:\n", exec_name);
|
|
||||||
arg_show_usage(stderr, all_args);
|
|
||||||
#if CONFIG_VP8_DECODER
|
|
||||||
fprintf(stderr, "\nvp8 Postprocessing Options:\n");
|
|
||||||
arg_show_usage(stderr, vp8_pp_args);
|
|
||||||
#endif
|
|
||||||
fprintf(stderr, "\nIncluded decoders:\n\n");
|
|
||||||
|
|
||||||
for (i = 0; i < sizeof(ifaces) / sizeof(ifaces[0]); i++)
|
|
||||||
fprintf(stderr, " %-6s - %s\n",
|
|
||||||
ifaces[i].name,
|
|
||||||
vpx_codec_iface_name(ifaces[i].iface));
|
|
||||||
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void die(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, fmt);
|
|
||||||
vfprintf(stderr, fmt, ap);
|
|
||||||
fprintf(stderr, "\n");
|
|
||||||
usage_exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned int mem_get_le16(const void *vmem)
|
|
||||||
{
|
|
||||||
unsigned int val;
|
|
||||||
const unsigned char *mem = (const unsigned char *)vmem;
|
|
||||||
|
|
||||||
val = mem[1] << 8;
|
|
||||||
val |= mem[0];
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned int mem_get_le32(const void *vmem)
|
|
||||||
{
|
|
||||||
unsigned int val;
|
|
||||||
const unsigned char *mem = (const unsigned char *)vmem;
|
|
||||||
|
|
||||||
val = mem[3] << 24;
|
|
||||||
val |= mem[2] << 16;
|
|
||||||
val |= mem[1] << 8;
|
|
||||||
val |= mem[0];
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IVF_FRAME_HDR_SZ (sizeof(uint32_t) + sizeof(uint64_t))
|
|
||||||
#define RAW_FRAME_HDR_SZ (sizeof(uint32_t))
|
|
||||||
static int read_frame(FILE *infile,
|
|
||||||
uint8_t **buf,
|
|
||||||
uint32_t *buf_sz,
|
|
||||||
uint32_t *buf_alloc_sz,
|
|
||||||
int is_ivf)
|
|
||||||
{
|
|
||||||
char raw_hdr[IVF_FRAME_HDR_SZ];
|
|
||||||
uint32_t new_buf_sz;
|
|
||||||
|
|
||||||
/* For both the raw and ivf formats, the frame size is the first 4 bytes
|
|
||||||
* of the frame header. We just need to special case on the header
|
|
||||||
* size.
|
|
||||||
*/
|
|
||||||
if (fread(raw_hdr, is_ivf ? IVF_FRAME_HDR_SZ : RAW_FRAME_HDR_SZ, 1,
|
|
||||||
infile) != 1)
|
|
||||||
{
|
|
||||||
if (!feof(infile))
|
|
||||||
fprintf(stderr, "Failed to read frame size\n");
|
|
||||||
|
|
||||||
new_buf_sz = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
new_buf_sz = mem_get_le32(raw_hdr);
|
|
||||||
|
|
||||||
if (new_buf_sz > 256 * 1024 * 1024)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Error: Read invalid frame size (%u)\n",
|
|
||||||
new_buf_sz);
|
|
||||||
new_buf_sz = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_ivf && new_buf_sz > 256 * 1024)
|
|
||||||
fprintf(stderr, "Warning: Read invalid frame size (%u)"
|
|
||||||
" - not a raw file?\n", new_buf_sz);
|
|
||||||
|
|
||||||
if (new_buf_sz > *buf_alloc_sz)
|
|
||||||
{
|
|
||||||
uint8_t *new_buf = realloc(*buf, 2 * new_buf_sz);
|
|
||||||
|
|
||||||
if (new_buf)
|
|
||||||
{
|
|
||||||
*buf = new_buf;
|
|
||||||
*buf_alloc_sz = 2 * new_buf_sz;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to allocate compressed data buffer\n");
|
|
||||||
new_buf_sz = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*buf_sz = new_buf_sz;
|
|
||||||
|
|
||||||
if (*buf_sz)
|
|
||||||
{
|
|
||||||
if (fread(*buf, 1, *buf_sz, infile) != *buf_sz)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to read full frame\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *out_open(const char *out_fn, int do_md5)
|
|
||||||
{
|
|
||||||
void *out = NULL;
|
|
||||||
|
|
||||||
if (do_md5)
|
|
||||||
{
|
|
||||||
#if CONFIG_MD5
|
|
||||||
MD5Context *md5_ctx = out = malloc(sizeof(MD5Context));
|
|
||||||
(void)out_fn;
|
|
||||||
MD5Init(md5_ctx);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FILE *outfile = out = strcmp("-", out_fn) ? fopen(out_fn, "wb") : stdout;
|
|
||||||
|
|
||||||
if (!outfile)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to output file");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
void out_put(void *out, const uint8_t *buf, unsigned int len, int do_md5)
|
|
||||||
{
|
|
||||||
if (do_md5)
|
|
||||||
{
|
|
||||||
#if CONFIG_MD5
|
|
||||||
MD5Update(out, buf, len);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fwrite(buf, 1, len, out);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void out_close(void *out, const char *out_fn, int do_md5)
|
|
||||||
{
|
|
||||||
if (do_md5)
|
|
||||||
{
|
|
||||||
#if CONFIG_MD5
|
|
||||||
uint8_t md5[16];
|
|
||||||
int i;
|
|
||||||
|
|
||||||
MD5Final(md5, out);
|
|
||||||
free(out);
|
|
||||||
|
|
||||||
for (i = 0; i < 16; i++)
|
|
||||||
printf("%02x", md5[i]);
|
|
||||||
|
|
||||||
printf(" %s\n", out_fn);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fclose(out);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int file_is_ivf(FILE *infile,
|
|
||||||
unsigned int *fourcc,
|
|
||||||
unsigned int *width,
|
|
||||||
unsigned int *height,
|
|
||||||
unsigned int *timebase_num,
|
|
||||||
unsigned int *timebase_den)
|
|
||||||
{
|
|
||||||
char raw_hdr[32];
|
|
||||||
int is_ivf = 0;
|
|
||||||
|
|
||||||
if (fread(raw_hdr, 1, 32, infile) == 32)
|
|
||||||
{
|
|
||||||
if (raw_hdr[0] == 'D' && raw_hdr[1] == 'K'
|
|
||||||
&& raw_hdr[2] == 'I' && raw_hdr[3] == 'F')
|
|
||||||
{
|
|
||||||
is_ivf = 1;
|
|
||||||
|
|
||||||
if (mem_get_le16(raw_hdr + 4) != 0)
|
|
||||||
fprintf(stderr, "Error: Unrecognized IVF version! This file may not"
|
|
||||||
" decode properly.");
|
|
||||||
|
|
||||||
*fourcc = mem_get_le32(raw_hdr + 8);
|
|
||||||
*width = mem_get_le16(raw_hdr + 12);
|
|
||||||
*height = mem_get_le16(raw_hdr + 14);
|
|
||||||
*timebase_den = mem_get_le32(raw_hdr + 16);
|
|
||||||
*timebase_num = mem_get_le32(raw_hdr + 20);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_ivf)
|
|
||||||
rewind(infile);
|
|
||||||
|
|
||||||
return is_ivf;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, const char **argv_)
|
|
||||||
{
|
|
||||||
vpx_codec_ctx_t decoder;
|
|
||||||
char *prefix = NULL, *fn = NULL;
|
|
||||||
int i;
|
|
||||||
uint8_t *buf = NULL;
|
|
||||||
uint32_t buf_sz = 0, buf_alloc_sz = 0;
|
|
||||||
FILE *infile;
|
|
||||||
int frame_in = 0, frame_out = 0, flipuv = 0, noblit = 0, do_md5 = 0, progress = 0;
|
|
||||||
int stop_after = 0, postproc = 0, summary = 0, quiet = 0;
|
|
||||||
vpx_codec_iface_t *iface = NULL;
|
|
||||||
unsigned int is_ivf, fourcc;
|
|
||||||
unsigned long dx_time = 0;
|
|
||||||
struct arg arg;
|
|
||||||
char **argv, **argi, **argj;
|
|
||||||
const char *fn2 = 0;
|
|
||||||
int use_y4m = 0;
|
|
||||||
unsigned int width;
|
|
||||||
unsigned int height;
|
|
||||||
unsigned int timebase_num;
|
|
||||||
unsigned int timebase_den;
|
|
||||||
void *out = NULL;
|
|
||||||
vpx_codec_dec_cfg_t cfg = {0};
|
|
||||||
#if CONFIG_VP8_DECODER
|
|
||||||
vp8_postproc_cfg_t vp8_pp_cfg = {0};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Parse command line */
|
|
||||||
exec_name = argv_[0];
|
|
||||||
argv = argv_dup(argc - 1, argv_ + 1);
|
|
||||||
|
|
||||||
for (argi = argj = argv; (*argj = *argi); argi += arg.argv_step)
|
|
||||||
{
|
|
||||||
memset(&arg, 0, sizeof(arg));
|
|
||||||
arg.argv_step = 1;
|
|
||||||
|
|
||||||
if (arg_match(&arg, &codecarg, argi))
|
|
||||||
{
|
|
||||||
int j, k = -1;
|
|
||||||
|
|
||||||
for (j = 0; j < sizeof(ifaces) / sizeof(ifaces[0]); j++)
|
|
||||||
if (!strcmp(ifaces[j].name, arg.val))
|
|
||||||
k = j;
|
|
||||||
|
|
||||||
if (k >= 0)
|
|
||||||
iface = ifaces[k].iface;
|
|
||||||
else
|
|
||||||
die("Error: Unrecognized argument (%s) to --codec\n",
|
|
||||||
arg.val);
|
|
||||||
}
|
|
||||||
else if (arg_match(&arg, &outputfile, argi))
|
|
||||||
fn2 = arg.val;
|
|
||||||
else if (arg_match(&arg, &usey4marg, argi))
|
|
||||||
use_y4m = 1;
|
|
||||||
else if (arg_match(&arg, &prefixarg, argi))
|
|
||||||
prefix = strdup(arg.val);
|
|
||||||
else if (arg_match(&arg, &use_yv12, argi))
|
|
||||||
flipuv = 1;
|
|
||||||
else if (arg_match(&arg, &use_i420, argi))
|
|
||||||
flipuv = 0;
|
|
||||||
else if (arg_match(&arg, &flipuvarg, argi))
|
|
||||||
flipuv = 1;
|
|
||||||
else if (arg_match(&arg, &noblitarg, argi))
|
|
||||||
noblit = 1;
|
|
||||||
else if (arg_match(&arg, &progressarg, argi))
|
|
||||||
progress = 1;
|
|
||||||
else if (arg_match(&arg, &limitarg, argi))
|
|
||||||
stop_after = arg_parse_uint(&arg);
|
|
||||||
else if (arg_match(&arg, &postprocarg, argi))
|
|
||||||
postproc = 1;
|
|
||||||
else if (arg_match(&arg, &md5arg, argi))
|
|
||||||
do_md5 = 1;
|
|
||||||
else if (arg_match(&arg, &summaryarg, argi))
|
|
||||||
summary = 1;
|
|
||||||
else if (arg_match(&arg, &threadsarg, argi))
|
|
||||||
cfg.threads = arg_parse_uint(&arg);
|
|
||||||
else if (arg_match(&arg, &quietarg, argi))
|
|
||||||
quiet = 1;
|
|
||||||
|
|
||||||
#if CONFIG_VP8_DECODER
|
|
||||||
else if (arg_match(&arg, &addnoise_level, argi))
|
|
||||||
{
|
|
||||||
postproc = 1;
|
|
||||||
vp8_pp_cfg.post_proc_flag |= VP8_ADDNOISE;
|
|
||||||
vp8_pp_cfg.noise_level = arg_parse_uint(&arg);
|
|
||||||
}
|
|
||||||
else if (arg_match(&arg, &demacroblock_level, argi))
|
|
||||||
{
|
|
||||||
postproc = 1;
|
|
||||||
vp8_pp_cfg.post_proc_flag |= VP8_DEMACROBLOCK;
|
|
||||||
vp8_pp_cfg.deblocking_level = arg_parse_uint(&arg);
|
|
||||||
}
|
|
||||||
else if (arg_match(&arg, &deblock, argi))
|
|
||||||
{
|
|
||||||
postproc = 1;
|
|
||||||
vp8_pp_cfg.post_proc_flag |= VP8_DEBLOCK;
|
|
||||||
}
|
|
||||||
else if (arg_match(&arg, &pp_debug_info, argi))
|
|
||||||
{
|
|
||||||
unsigned int level = arg_parse_uint(&arg);
|
|
||||||
|
|
||||||
postproc = 1;
|
|
||||||
vp8_pp_cfg.post_proc_flag &= ~0x7;
|
|
||||||
|
|
||||||
if (level)
|
|
||||||
vp8_pp_cfg.post_proc_flag |= 8 << (level - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
else
|
|
||||||
argj++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check for unrecognized options */
|
|
||||||
for (argi = argv; *argi; argi++)
|
|
||||||
if (argi[0][0] == '-' && strlen(argi[0]) > 1)
|
|
||||||
die("Error: Unrecognized option %s\n", *argi);
|
|
||||||
|
|
||||||
/* Handle non-option arguments */
|
|
||||||
fn = argv[0];
|
|
||||||
|
|
||||||
if (!fn)
|
|
||||||
usage_exit();
|
|
||||||
|
|
||||||
if (!prefix)
|
|
||||||
prefix = strdup("img");
|
|
||||||
|
|
||||||
/* Open file */
|
|
||||||
infile = strcmp(fn, "-") ? fopen(fn, "rb") : stdin;
|
|
||||||
|
|
||||||
if (!infile)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to open file");
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fn2)
|
|
||||||
out = out_open(fn2, do_md5);
|
|
||||||
|
|
||||||
is_ivf = file_is_ivf(infile, &fourcc, &width, &height,
|
|
||||||
&timebase_num, &timebase_den);
|
|
||||||
|
|
||||||
if (is_ivf)
|
|
||||||
{
|
|
||||||
if (use_y4m)
|
|
||||||
{
|
|
||||||
char buffer[128];
|
|
||||||
if (!fn2)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "YUV4MPEG2 output only supported with -o.\n");
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
/*Correct for the factor of 2 applied to the timebase in the
|
|
||||||
encoder.*/
|
|
||||||
if(timebase_den&1)timebase_num<<=1;
|
|
||||||
else timebase_den>>=1;
|
|
||||||
/*Note: We can't output an aspect ratio here because IVF doesn't
|
|
||||||
store one, and neither does VP8.
|
|
||||||
That will have to wait until these tools support WebM natively.*/
|
|
||||||
sprintf(buffer, "YUV4MPEG2 C%s W%u H%u F%u:%u I%c\n",
|
|
||||||
"420jpeg", width, height, timebase_den, timebase_num, 'p');
|
|
||||||
out_put(out, (unsigned char *)buffer, strlen(buffer), do_md5);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Try to determine the codec from the fourcc. */
|
|
||||||
for (i = 0; i < sizeof(ifaces) / sizeof(ifaces[0]); i++)
|
|
||||||
if ((fourcc & ifaces[i].fourcc_mask) == ifaces[i].fourcc)
|
|
||||||
{
|
|
||||||
vpx_codec_iface_t *ivf_iface = ifaces[i].iface;
|
|
||||||
|
|
||||||
if (iface && iface != ivf_iface)
|
|
||||||
fprintf(stderr, "Notice -- IVF header indicates codec: %s\n",
|
|
||||||
ifaces[i].name);
|
|
||||||
else
|
|
||||||
iface = ivf_iface;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(use_y4m)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "YUV4MPEG2 output only supported from IVF input.\n");
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vpx_codec_dec_init(&decoder, iface ? iface : ifaces[0].iface, &cfg,
|
|
||||||
postproc ? VPX_CODEC_USE_POSTPROC : 0))
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize decoder: %s\n", vpx_codec_error(&decoder));
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!quiet)
|
|
||||||
fprintf(stderr, "%s\n", decoder.name);
|
|
||||||
|
|
||||||
#if CONFIG_VP8_DECODER
|
|
||||||
|
|
||||||
if (vp8_pp_cfg.post_proc_flag
|
|
||||||
&& vpx_codec_control(&decoder, VP8_SET_POSTPROC, &vp8_pp_cfg))
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to configure postproc: %s\n", vpx_codec_error(&decoder));
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Decode file */
|
|
||||||
while (!read_frame(infile, &buf, &buf_sz, &buf_alloc_sz, is_ivf))
|
|
||||||
{
|
|
||||||
vpx_codec_iter_t iter = NULL;
|
|
||||||
vpx_image_t *img;
|
|
||||||
struct vpx_usec_timer timer;
|
|
||||||
|
|
||||||
vpx_usec_timer_start(&timer);
|
|
||||||
|
|
||||||
if (vpx_codec_decode(&decoder, buf, buf_sz, NULL, 0))
|
|
||||||
{
|
|
||||||
const char *detail = vpx_codec_error_detail(&decoder);
|
|
||||||
fprintf(stderr, "Failed to decode frame: %s\n", vpx_codec_error(&decoder));
|
|
||||||
|
|
||||||
if (detail)
|
|
||||||
fprintf(stderr, " Additional information: %s\n", detail);
|
|
||||||
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
vpx_usec_timer_mark(&timer);
|
|
||||||
dx_time += vpx_usec_timer_elapsed(&timer);
|
|
||||||
|
|
||||||
++frame_in;
|
|
||||||
|
|
||||||
if (progress)
|
|
||||||
fprintf(stderr, "decoded frame %d.\n", frame_in);
|
|
||||||
|
|
||||||
if ((img = vpx_codec_get_frame(&decoder, &iter)))
|
|
||||||
++frame_out;
|
|
||||||
|
|
||||||
if (!noblit)
|
|
||||||
{
|
|
||||||
if (img)
|
|
||||||
{
|
|
||||||
unsigned int y;
|
|
||||||
char out_fn[128+24];
|
|
||||||
uint8_t *buf;
|
|
||||||
const char *sfx = flipuv ? "yv12" : "i420";
|
|
||||||
|
|
||||||
if (!fn2)
|
|
||||||
{
|
|
||||||
sprintf(out_fn, "%s-%dx%d-%04d.%s",
|
|
||||||
prefix, img->d_w, img->d_h, frame_in, sfx);
|
|
||||||
out = out_open(out_fn, do_md5);
|
|
||||||
}
|
|
||||||
else if(use_y4m)
|
|
||||||
out_put(out, (unsigned char *)"FRAME\n", 6, do_md5);
|
|
||||||
|
|
||||||
buf = img->planes[VPX_PLANE_Y];
|
|
||||||
|
|
||||||
for (y = 0; y < img->d_h; y++)
|
|
||||||
{
|
|
||||||
out_put(out, buf, img->d_w, do_md5);
|
|
||||||
buf += img->stride[VPX_PLANE_Y];
|
|
||||||
}
|
|
||||||
|
|
||||||
buf = img->planes[flipuv?VPX_PLANE_V:VPX_PLANE_U];
|
|
||||||
|
|
||||||
for (y = 0; y < (1 + img->d_h) / 2; y++)
|
|
||||||
{
|
|
||||||
out_put(out, buf, (1 + img->d_w) / 2, do_md5);
|
|
||||||
buf += img->stride[VPX_PLANE_U];
|
|
||||||
}
|
|
||||||
|
|
||||||
buf = img->planes[flipuv?VPX_PLANE_U:VPX_PLANE_V];
|
|
||||||
|
|
||||||
for (y = 0; y < (1 + img->d_h) / 2; y++)
|
|
||||||
{
|
|
||||||
out_put(out, buf, (1 + img->d_w) / 2, do_md5);
|
|
||||||
buf += img->stride[VPX_PLANE_V];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!fn2)
|
|
||||||
out_close(out, out_fn, do_md5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stop_after && frame_in >= stop_after)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (summary)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "%d decoded frames/%d showed frames in %lu us (%.2f fps)\n",
|
|
||||||
frame_in, frame_out, dx_time, (float)frame_out * 1000000.0 / (float)dx_time);
|
|
||||||
}
|
|
||||||
|
|
||||||
fail:
|
|
||||||
|
|
||||||
if (vpx_codec_destroy(&decoder))
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to destroy decoder: %s\n", vpx_codec_error(&decoder));
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fn2)
|
|
||||||
out_close(out, fn2, do_md5);
|
|
||||||
|
|
||||||
free(buf);
|
|
||||||
fclose(infile);
|
|
||||||
free(prefix);
|
|
||||||
free(argv);
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
60
libmkv/EbmlBufferWriter.c
Normal file
60
libmkv/EbmlBufferWriter.c
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
//#include <strmif.h>
|
||||||
|
#include "EbmlBufferWriter.h"
|
||||||
|
#include "EbmlWriter.h"
|
||||||
|
//#include <cassert>
|
||||||
|
//#include <limits>
|
||||||
|
//#include <malloc.h> //_alloca
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
void Ebml_Write(EbmlGlobal *glob, const void *buffer_in, unsigned long len)
|
||||||
|
{
|
||||||
|
unsigned char *src = glob->buf;
|
||||||
|
src += glob->offset;
|
||||||
|
memcpy(src, buffer_in, len);
|
||||||
|
glob->offset += len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _Serialize(EbmlGlobal *glob, const unsigned char *p, const unsigned char *q)
|
||||||
|
{
|
||||||
|
while (q != p)
|
||||||
|
{
|
||||||
|
--q;
|
||||||
|
|
||||||
|
unsigned long cbWritten;
|
||||||
|
memcpy(&(glob->buf[glob->offset]), q, 1);
|
||||||
|
glob->offset ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ebml_Serialize(EbmlGlobal *glob, const void *buffer_in, unsigned long len)
|
||||||
|
{
|
||||||
|
//assert(buf);
|
||||||
|
|
||||||
|
const unsigned char *const p = (const unsigned char *)(buffer_in);
|
||||||
|
const unsigned char *const q = p + len;
|
||||||
|
|
||||||
|
_Serialize(glob, p, q);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Ebml_StartSubElement(EbmlGlobal *glob, EbmlLoc *ebmlLoc, unsigned long class_id)
|
||||||
|
{
|
||||||
|
Ebml_WriteID(glob, class_id);
|
||||||
|
ebmlLoc->offset = glob->offset;
|
||||||
|
//todo this is always taking 8 bytes, this may need later optimization
|
||||||
|
unsigned long long unknownLen = 0x01FFFFFFFFFFFFFFLLU;
|
||||||
|
Ebml_Serialize(glob, (void *)&unknownLen, 8); //this is a key that says lenght unknown
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ebml_EndSubElement(EbmlGlobal *glob, EbmlLoc *ebmlLoc)
|
||||||
|
{
|
||||||
|
unsigned long long size = glob->offset - ebmlLoc->offset - 8;
|
||||||
|
unsigned long long curOffset = glob->offset;
|
||||||
|
glob->offset = ebmlLoc->offset;
|
||||||
|
size |= 0x0100000000000000LLU;
|
||||||
|
Ebml_Serialize(glob, &size, 8);
|
||||||
|
glob->offset = curOffset;
|
||||||
|
}
|
||||||
|
|
21
libmkv/EbmlBufferWriter.h
Normal file
21
libmkv/EbmlBufferWriter.h
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#ifndef EBMLBUFFERWRITER_HPP
|
||||||
|
#define EBMLBUFFERWRITER_HPP
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned long long offset;
|
||||||
|
} EbmlLoc;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned char *buf;
|
||||||
|
unsigned int length;
|
||||||
|
unsigned int offset;
|
||||||
|
} EbmlGlobal;
|
||||||
|
|
||||||
|
|
||||||
|
void Ebml_StartSubElement(EbmlGlobal *glob, EbmlLoc *ebmlLoc, unsigned long class_id);
|
||||||
|
void Ebml_EndSubElement(EbmlGlobal *glob, EbmlLoc *ebmlLoc);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
231
libmkv/EbmlIDs.h
Normal file
231
libmkv/EbmlIDs.h
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Use of this source code is governed by a BSD-style license
|
||||||
|
// that can be found in the LICENSE file in the root of the source
|
||||||
|
// tree. An additional intellectual property rights grant can be found
|
||||||
|
// in the file PATENTS. All contributing project authors may
|
||||||
|
// be found in the AUTHORS file in the root of the source tree.
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef MKV_DEFS_HPP
|
||||||
|
#define MKV_DEFS_HPP 1
|
||||||
|
|
||||||
|
//Commenting out values not available in webm, but available in matroska
|
||||||
|
|
||||||
|
enum mkv
|
||||||
|
{
|
||||||
|
EBML = 0x1A45DFA3,
|
||||||
|
EBMLVersion = 0x4286,
|
||||||
|
EBMLReadVersion = 0x42F7,
|
||||||
|
EBMLMaxIDLength = 0x42F2,
|
||||||
|
EBMLMaxSizeLength = 0x42F3,
|
||||||
|
DocType = 0x4282,
|
||||||
|
DocTypeVersion = 0x4287,
|
||||||
|
DocTypeReadVersion = 0x4285,
|
||||||
|
// CRC_32 = 0xBF,
|
||||||
|
Void = 0xEC,
|
||||||
|
SignatureSlot = 0x1B538667,
|
||||||
|
SignatureAlgo = 0x7E8A,
|
||||||
|
SignatureHash = 0x7E9A,
|
||||||
|
SignaturePublicKey = 0x7EA5,
|
||||||
|
Signature = 0x7EB5,
|
||||||
|
SignatureElements = 0x7E5B,
|
||||||
|
SignatureElementList = 0x7E7B,
|
||||||
|
SignedElement = 0x6532,
|
||||||
|
//segment
|
||||||
|
Segment = 0x18538067,
|
||||||
|
//Meta Seek Information
|
||||||
|
SeekHead = 0x114D9B74,
|
||||||
|
Seek = 0x4DBB,
|
||||||
|
SeekID = 0x53AB,
|
||||||
|
SeekPosition = 0x53AC,
|
||||||
|
//Segment Information
|
||||||
|
Info = 0x1549A966,
|
||||||
|
// SegmentUID = 0x73A4,
|
||||||
|
// SegmentFilename = 0x7384,
|
||||||
|
// PrevUID = 0x3CB923,
|
||||||
|
// PrevFilename = 0x3C83AB,
|
||||||
|
// NextUID = 0x3EB923,
|
||||||
|
// NextFilename = 0x3E83BB,
|
||||||
|
// SegmentFamily = 0x4444,
|
||||||
|
// ChapterTranslate = 0x6924,
|
||||||
|
// ChapterTranslateEditionUID = 0x69FC,
|
||||||
|
// ChapterTranslateCodec = 0x69BF,
|
||||||
|
// ChapterTranslateID = 0x69A5,
|
||||||
|
TimecodeScale = 0x2AD7B1,
|
||||||
|
Segment_Duration = 0x4489,
|
||||||
|
DateUTC = 0x4461,
|
||||||
|
// Title = 0x7BA9,
|
||||||
|
MuxingApp = 0x4D80,
|
||||||
|
WritingApp = 0x5741,
|
||||||
|
//Cluster
|
||||||
|
Cluster = 0x1F43B675,
|
||||||
|
Timecode = 0xE7,
|
||||||
|
// SilentTracks = 0x5854,
|
||||||
|
// SilentTrackNumber = 0x58D7,
|
||||||
|
// Position = 0xA7,
|
||||||
|
PrevSize = 0xAB,
|
||||||
|
BlockGroup = 0xA0,
|
||||||
|
Block = 0xA1,
|
||||||
|
// BlockVirtual = 0xA2,
|
||||||
|
// BlockAdditions = 0x75A1,
|
||||||
|
// BlockMore = 0xA6,
|
||||||
|
// BlockAddID = 0xEE,
|
||||||
|
// BlockAdditional = 0xA5,
|
||||||
|
BlockDuration = 0x9B,
|
||||||
|
// ReferencePriority = 0xFA,
|
||||||
|
ReferenceBlock = 0xFB,
|
||||||
|
// ReferenceVirtual = 0xFD,
|
||||||
|
// CodecState = 0xA4,
|
||||||
|
// Slices = 0x8E,
|
||||||
|
// TimeSlice = 0xE8,
|
||||||
|
LaceNumber = 0xCC,
|
||||||
|
// FrameNumber = 0xCD,
|
||||||
|
// BlockAdditionID = 0xCB,
|
||||||
|
// MkvDelay = 0xCE,
|
||||||
|
// Cluster_Duration = 0xCF,
|
||||||
|
SimpleBlock = 0xA3,
|
||||||
|
// EncryptedBlock = 0xAF,
|
||||||
|
//Track
|
||||||
|
Tracks = 0x1654AE6B,
|
||||||
|
TrackEntry = 0xAE,
|
||||||
|
TrackNumber = 0xD7,
|
||||||
|
TrackUID = 0x73C5,
|
||||||
|
TrackType = 0x83,
|
||||||
|
FlagEnabled = 0xB9,
|
||||||
|
FlagDefault = 0x88,
|
||||||
|
FlagForced = 0x55AA,
|
||||||
|
FlagLacing = 0x9C,
|
||||||
|
// MinCache = 0x6DE7,
|
||||||
|
// MaxCache = 0x6DF8,
|
||||||
|
DefaultDuration = 0x23E383,
|
||||||
|
// TrackTimecodeScale = 0x23314F,
|
||||||
|
// TrackOffset = 0x537F,
|
||||||
|
// MaxBlockAdditionID = 0x55EE,
|
||||||
|
Name = 0x536E,
|
||||||
|
Language = 0x22B59C,
|
||||||
|
CodecID = 0x86,
|
||||||
|
CodecPrivate = 0x63A2,
|
||||||
|
CodecName = 0x258688,
|
||||||
|
// AttachmentLink = 0x7446,
|
||||||
|
// CodecSettings = 0x3A9697,
|
||||||
|
// CodecInfoURL = 0x3B4040,
|
||||||
|
// CodecDownloadURL = 0x26B240,
|
||||||
|
// CodecDecodeAll = 0xAA,
|
||||||
|
// TrackOverlay = 0x6FAB,
|
||||||
|
// TrackTranslate = 0x6624,
|
||||||
|
// TrackTranslateEditionUID = 0x66FC,
|
||||||
|
// TrackTranslateCodec = 0x66BF,
|
||||||
|
// TrackTranslateTrackID = 0x66A5,
|
||||||
|
//video
|
||||||
|
Video = 0xE0,
|
||||||
|
FlagInterlaced = 0x9A,
|
||||||
|
// StereoMode = 0x53B8,
|
||||||
|
PixelWidth = 0xB0,
|
||||||
|
PixelHeight = 0xBA,
|
||||||
|
PixelCropBottom = 0x54AA,
|
||||||
|
PixelCropTop = 0x54BB,
|
||||||
|
PixelCropLeft = 0x54CC,
|
||||||
|
PixelCropRight = 0x54DD,
|
||||||
|
DisplayWidth = 0x54B0,
|
||||||
|
DisplayHeight = 0x54BA,
|
||||||
|
DisplayUnit = 0x54B2,
|
||||||
|
AspectRatioType = 0x54B3,
|
||||||
|
// ColourSpace = 0x2EB524,
|
||||||
|
// GammaValue = 0x2FB523,
|
||||||
|
FrameRate = 0x2383E3,
|
||||||
|
//end video
|
||||||
|
//audio
|
||||||
|
Audio = 0xE1,
|
||||||
|
SamplingFrequency = 0xB5,
|
||||||
|
OutputSamplingFrequency = 0x78B5,
|
||||||
|
Channels = 0x9F,
|
||||||
|
// ChannelPositions = 0x7D7B,
|
||||||
|
BitDepth = 0x6264,
|
||||||
|
//end audio
|
||||||
|
//content encoding
|
||||||
|
// ContentEncodings = 0x6d80,
|
||||||
|
// ContentEncoding = 0x6240,
|
||||||
|
// ContentEncodingOrder = 0x5031,
|
||||||
|
// ContentEncodingScope = 0x5032,
|
||||||
|
// ContentEncodingType = 0x5033,
|
||||||
|
// ContentCompression = 0x5034,
|
||||||
|
// ContentCompAlgo = 0x4254,
|
||||||
|
// ContentCompSettings = 0x4255,
|
||||||
|
// ContentEncryption = 0x5035,
|
||||||
|
// ContentEncAlgo = 0x47e1,
|
||||||
|
// ContentEncKeyID = 0x47e2,
|
||||||
|
// ContentSignature = 0x47e3,
|
||||||
|
// ContentSigKeyID = 0x47e4,
|
||||||
|
// ContentSigAlgo = 0x47e5,
|
||||||
|
// ContentSigHashAlgo = 0x47e6,
|
||||||
|
//end content encoding
|
||||||
|
//Cueing Data
|
||||||
|
Cues = 0x1C53BB6B,
|
||||||
|
CuePoint = 0xBB,
|
||||||
|
CueTime = 0xB3,
|
||||||
|
CueTrackPositions = 0xB7,
|
||||||
|
CueTrack = 0xF7,
|
||||||
|
CueClusterPosition = 0xF1,
|
||||||
|
CueBlockNumber = 0x5378,
|
||||||
|
// CueCodecState = 0xEA,
|
||||||
|
// CueReference = 0xDB,
|
||||||
|
// CueRefTime = 0x96,
|
||||||
|
// CueRefCluster = 0x97,
|
||||||
|
// CueRefNumber = 0x535F,
|
||||||
|
// CueRefCodecState = 0xEB,
|
||||||
|
//Attachment
|
||||||
|
// Attachments = 0x1941A469,
|
||||||
|
// AttachedFile = 0x61A7,
|
||||||
|
// FileDescription = 0x467E,
|
||||||
|
// FileName = 0x466E,
|
||||||
|
// FileMimeType = 0x4660,
|
||||||
|
// FileData = 0x465C,
|
||||||
|
// FileUID = 0x46AE,
|
||||||
|
// FileReferral = 0x4675,
|
||||||
|
//Chapters
|
||||||
|
// Chapters = 0x1043A770,
|
||||||
|
// EditionEntry = 0x45B9,
|
||||||
|
// EditionUID = 0x45BC,
|
||||||
|
// EditionFlagHidden = 0x45BD,
|
||||||
|
// EditionFlagDefault = 0x45DB,
|
||||||
|
// EditionFlagOrdered = 0x45DD,
|
||||||
|
// ChapterAtom = 0xB6,
|
||||||
|
// ChapterUID = 0x73C4,
|
||||||
|
// ChapterTimeStart = 0x91,
|
||||||
|
// ChapterTimeEnd = 0x92,
|
||||||
|
// ChapterFlagHidden = 0x98,
|
||||||
|
// ChapterFlagEnabled = 0x4598,
|
||||||
|
// ChapterSegmentUID = 0x6E67,
|
||||||
|
// ChapterSegmentEditionUID = 0x6EBC,
|
||||||
|
// ChapterPhysicalEquiv = 0x63C3,
|
||||||
|
// ChapterTrack = 0x8F,
|
||||||
|
// ChapterTrackNumber = 0x89,
|
||||||
|
// ChapterDisplay = 0x80,
|
||||||
|
// ChapString = 0x85,
|
||||||
|
// ChapLanguage = 0x437C,
|
||||||
|
// ChapCountry = 0x437E,
|
||||||
|
// ChapProcess = 0x6944,
|
||||||
|
// ChapProcessCodecID = 0x6955,
|
||||||
|
// ChapProcessPrivate = 0x450D,
|
||||||
|
// ChapProcessCommand = 0x6911,
|
||||||
|
// ChapProcessTime = 0x6922,
|
||||||
|
// ChapProcessData = 0x6933,
|
||||||
|
//Tagging
|
||||||
|
// Tags = 0x1254C367,
|
||||||
|
// Tag = 0x7373,
|
||||||
|
// Targets = 0x63C0,
|
||||||
|
// TargetTypeValue = 0x68CA,
|
||||||
|
// TargetType = 0x63CA,
|
||||||
|
// Tagging_TrackUID = 0x63C5,
|
||||||
|
// Tagging_EditionUID = 0x63C9,
|
||||||
|
// Tagging_ChapterUID = 0x63C4,
|
||||||
|
// AttachmentUID = 0x63C6,
|
||||||
|
// SimpleTag = 0x67C8,
|
||||||
|
// TagName = 0x45A3,
|
||||||
|
// TagLanguage = 0x447A,
|
||||||
|
// TagDefault = 0x4484,
|
||||||
|
// TagString = 0x4487,
|
||||||
|
// TagBinary = 0x4485,
|
||||||
|
};
|
||||||
|
#endif
|
166
libmkv/EbmlWriter.c
Normal file
166
libmkv/EbmlWriter.c
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Use of this source code is governed by a BSD-style license
|
||||||
|
// that can be found in the LICENSE file in the root of the source
|
||||||
|
// tree. An additional intellectual property rights grant can be found
|
||||||
|
// in the file PATENTS. All contributing project authors may
|
||||||
|
// be found in the AUTHORS file in the root of the source tree.
|
||||||
|
|
||||||
|
|
||||||
|
#include "EbmlWriter.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <string.h>
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#define LITERALU64(n) n
|
||||||
|
#else
|
||||||
|
#define LITERALU64(n) n##LLU
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void Ebml_WriteLen(EbmlGlobal *glob, long long val)
|
||||||
|
{
|
||||||
|
//TODO check and make sure we are not > than 0x0100000000000000LLU
|
||||||
|
unsigned char size = 8; //size in bytes to output
|
||||||
|
unsigned long long minVal = LITERALU64(0x00000000000000ff); //mask to compare for byte size
|
||||||
|
|
||||||
|
for (size = 1; size < 8; size ++)
|
||||||
|
{
|
||||||
|
if (val < minVal)
|
||||||
|
break;
|
||||||
|
|
||||||
|
minVal = (minVal << 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
val |= (LITERALU64(0x000000000000080) << ((size - 1) * 7));
|
||||||
|
|
||||||
|
Ebml_Serialize(glob, (void *) &val, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ebml_WriteString(EbmlGlobal *glob, const char *str)
|
||||||
|
{
|
||||||
|
const size_t size_ = strlen(str);
|
||||||
|
const unsigned long long size = size_;
|
||||||
|
Ebml_WriteLen(glob, size);
|
||||||
|
//TODO: it's not clear from the spec whether the nul terminator
|
||||||
|
//should be serialized too. For now we omit the null terminator.
|
||||||
|
Ebml_Write(glob, str, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ebml_WriteUTF8(EbmlGlobal *glob, const wchar_t *wstr)
|
||||||
|
{
|
||||||
|
const size_t strlen = wcslen(wstr);
|
||||||
|
|
||||||
|
//TODO: it's not clear from the spec whether the nul terminator
|
||||||
|
//should be serialized too. For now we include it.
|
||||||
|
const unsigned long long size = strlen;
|
||||||
|
|
||||||
|
Ebml_WriteLen(glob, size);
|
||||||
|
Ebml_Write(glob, wstr, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ebml_WriteID(EbmlGlobal *glob, unsigned long class_id)
|
||||||
|
{
|
||||||
|
if (class_id >= 0x01000000)
|
||||||
|
Ebml_Serialize(glob, (void *)&class_id, 4);
|
||||||
|
else if (class_id >= 0x00010000)
|
||||||
|
Ebml_Serialize(glob, (void *)&class_id, 3);
|
||||||
|
else if (class_id >= 0x00000100)
|
||||||
|
Ebml_Serialize(glob, (void *)&class_id, 2);
|
||||||
|
else
|
||||||
|
Ebml_Serialize(glob, (void *)&class_id, 1);
|
||||||
|
}
|
||||||
|
void Ebml_SerializeUnsigned64(EbmlGlobal *glob, unsigned long class_id, uint64_t ui)
|
||||||
|
{
|
||||||
|
unsigned char sizeSerialized = 8 | 0x80;
|
||||||
|
Ebml_WriteID(glob, class_id);
|
||||||
|
Ebml_Serialize(glob, &sizeSerialized, 1);
|
||||||
|
Ebml_Serialize(glob, &ui, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ebml_SerializeUnsigned(EbmlGlobal *glob, unsigned long class_id, unsigned long ui)
|
||||||
|
{
|
||||||
|
unsigned char size = 8; //size in bytes to output
|
||||||
|
unsigned char sizeSerialized = 0;
|
||||||
|
unsigned long minVal;
|
||||||
|
|
||||||
|
Ebml_WriteID(glob, class_id);
|
||||||
|
minVal = 0x7fLU; //mask to compare for byte size
|
||||||
|
|
||||||
|
for (size = 1; size < 4; size ++)
|
||||||
|
{
|
||||||
|
if (ui < minVal)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
minVal <<= 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
sizeSerialized = 0x80 | size;
|
||||||
|
Ebml_Serialize(glob, &sizeSerialized, 1);
|
||||||
|
Ebml_Serialize(glob, &ui, size);
|
||||||
|
}
|
||||||
|
//TODO: perhaps this is a poor name for this id serializer helper function
|
||||||
|
void Ebml_SerializeBinary(EbmlGlobal *glob, unsigned long class_id, unsigned long bin)
|
||||||
|
{
|
||||||
|
int size;
|
||||||
|
for (size=4; size > 1; size--)
|
||||||
|
{
|
||||||
|
if (bin & 0x000000ff << ((size-1) * 8))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Ebml_WriteID(glob, class_id);
|
||||||
|
Ebml_WriteLen(glob, size);
|
||||||
|
Ebml_WriteID(glob, bin);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ebml_SerializeFloat(EbmlGlobal *glob, unsigned long class_id, double d)
|
||||||
|
{
|
||||||
|
unsigned char len = 0x88;
|
||||||
|
|
||||||
|
Ebml_WriteID(glob, class_id);
|
||||||
|
Ebml_Serialize(glob, &len, 1);
|
||||||
|
Ebml_Serialize(glob, &d, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ebml_WriteSigned16(EbmlGlobal *glob, short val)
|
||||||
|
{
|
||||||
|
signed long out = ((val & 0x003FFFFF) | 0x00200000) << 8;
|
||||||
|
Ebml_Serialize(glob, &out, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ebml_SerializeString(EbmlGlobal *glob, unsigned long class_id, const char *s)
|
||||||
|
{
|
||||||
|
Ebml_WriteID(glob, class_id);
|
||||||
|
Ebml_WriteString(glob, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ebml_SerializeUTF8(EbmlGlobal *glob, unsigned long class_id, wchar_t *s)
|
||||||
|
{
|
||||||
|
Ebml_WriteID(glob, class_id);
|
||||||
|
Ebml_WriteUTF8(glob, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ebml_SerializeData(EbmlGlobal *glob, unsigned long class_id, unsigned char *data, unsigned long data_length)
|
||||||
|
{
|
||||||
|
unsigned char size = 4;
|
||||||
|
Ebml_WriteID(glob, class_id);
|
||||||
|
Ebml_WriteLen(glob, data_length);
|
||||||
|
Ebml_Write(glob, data, data_length);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ebml_WriteVoid(EbmlGlobal *glob, unsigned long vSize)
|
||||||
|
{
|
||||||
|
unsigned char tmp = 0;
|
||||||
|
unsigned long i = 0;
|
||||||
|
|
||||||
|
Ebml_WriteID(glob, 0xEC);
|
||||||
|
Ebml_WriteLen(glob, vSize);
|
||||||
|
|
||||||
|
for (i = 0; i < vSize; i++)
|
||||||
|
{
|
||||||
|
Ebml_Write(glob, &tmp, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO Serialize Date
|
38
libmkv/EbmlWriter.h
Normal file
38
libmkv/EbmlWriter.h
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
#ifndef EBMLWRITER_HPP
|
||||||
|
#define EBMLWRITER_HPP
|
||||||
|
|
||||||
|
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Use of this source code is governed by a BSD-style license
|
||||||
|
// that can be found in the LICENSE file in the root of the source
|
||||||
|
// tree. An additional intellectual property rights grant can be found
|
||||||
|
// in the file PATENTS. All contributing project authors may
|
||||||
|
// be found in the AUTHORS file in the root of the source tree.
|
||||||
|
|
||||||
|
//note: you must define write and serialize functions as well as your own EBML_GLOBAL
|
||||||
|
//These functions MUST be implemented
|
||||||
|
#include <stddef.h>
|
||||||
|
#include "vpx/vpx_integer.h"
|
||||||
|
|
||||||
|
typedef struct EbmlGlobal EbmlGlobal;
|
||||||
|
void Ebml_Serialize(EbmlGlobal *glob, const void *, unsigned long);
|
||||||
|
void Ebml_Write(EbmlGlobal *glob, const void *, unsigned long);
|
||||||
|
/////
|
||||||
|
|
||||||
|
|
||||||
|
void Ebml_WriteLen(EbmlGlobal *glob, long long val);
|
||||||
|
void Ebml_WriteString(EbmlGlobal *glob, const char *str);
|
||||||
|
void Ebml_WriteUTF8(EbmlGlobal *glob, const wchar_t *wstr);
|
||||||
|
void Ebml_WriteID(EbmlGlobal *glob, unsigned long class_id);
|
||||||
|
void Ebml_SerializeUnsigned64(EbmlGlobal *glob, unsigned long class_id, uint64_t ui);
|
||||||
|
void Ebml_SerializeUnsigned(EbmlGlobal *glob, unsigned long class_id, unsigned long ui);
|
||||||
|
void Ebml_SerializeBinary(EbmlGlobal *glob, unsigned long class_id, unsigned long ui);
|
||||||
|
void Ebml_SerializeFloat(EbmlGlobal *glob, unsigned long class_id, double d);
|
||||||
|
//TODO make this more generic to signed
|
||||||
|
void Ebml_WriteSigned16(EbmlGlobal *glob, short val);
|
||||||
|
void Ebml_SerializeString(EbmlGlobal *glob, unsigned long class_id, const char *s);
|
||||||
|
void Ebml_SerializeUTF8(EbmlGlobal *glob, unsigned long class_id, wchar_t *s);
|
||||||
|
void Ebml_SerializeData(EbmlGlobal *glob, unsigned long class_id, unsigned char *data, unsigned long data_length);
|
||||||
|
void Ebml_WriteVoid(EbmlGlobal *glob, unsigned long vSize);
|
||||||
|
//TODO need date function
|
||||||
|
#endif
|
25
libmkv/Makefile
Normal file
25
libmkv/Makefile
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
#Variables
|
||||||
|
CC=gcc
|
||||||
|
LINKER=gcc
|
||||||
|
FLAGS=
|
||||||
|
|
||||||
|
|
||||||
|
#Build Targets
|
||||||
|
EbmlWriter.o: EbmlWriter.c EbmlWriter.h
|
||||||
|
$(CC) $(FLAGS) -c EbmlWriter.c
|
||||||
|
|
||||||
|
EbmlBufferWriter.o: EbmlBufferWriter.c EbmlBufferWriter.h
|
||||||
|
$(CC) $(FLAGS) -c EbmlBufferWriter.c
|
||||||
|
|
||||||
|
MkvElement.o: MkvElement.c WebMElement.h
|
||||||
|
$(CC) $(FLAGS) -c MkvElement.c
|
||||||
|
|
||||||
|
testlibmkv.o: testlibmkv.c
|
||||||
|
$(CC) $(FLAGS) -c testlibmkv.c
|
||||||
|
|
||||||
|
testlibmkv: testlibmkv.o MkvElement.o EbmlBufferWriter.o EbmlWriter.o
|
||||||
|
$(LINKER) $(FLAGS) testlibmkv.o MkvElement.o EbmlBufferWriter.o EbmlWriter.o -o testlibmkv
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf *.o testlibmkv
|
||||||
|
|
220
libmkv/WebMElement.c
Normal file
220
libmkv/WebMElement.c
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Use of this source code is governed by a BSD-style license
|
||||||
|
// that can be found in the LICENSE file in the root of the source
|
||||||
|
// tree. An additional intellectual property rights grant can be found
|
||||||
|
// in the file PATENTS. All contributing project authors may
|
||||||
|
// be found in the AUTHORS file in the root of the source tree.
|
||||||
|
|
||||||
|
|
||||||
|
#include "EbmlBufferWriter.h"
|
||||||
|
#include "EbmlIDs.h"
|
||||||
|
#include "WebMElement.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define kVorbisPrivateMaxSize 4000
|
||||||
|
|
||||||
|
void writeHeader(EbmlGlobal *glob)
|
||||||
|
{
|
||||||
|
EbmlLoc start;
|
||||||
|
Ebml_StartSubElement(glob, &start, EBML);
|
||||||
|
Ebml_SerializeUnsigned(glob, EBMLVersion, 1);
|
||||||
|
Ebml_SerializeUnsigned(glob, EBMLReadVersion, 1); //EBML Read Version
|
||||||
|
Ebml_SerializeUnsigned(glob, EBMLMaxIDLength, 4); //EBML Max ID Length
|
||||||
|
Ebml_SerializeUnsigned(glob, EBMLMaxSizeLength, 8); //EBML Max Size Length
|
||||||
|
Ebml_SerializeString(glob, DocType, "webm"); //Doc Type
|
||||||
|
Ebml_SerializeUnsigned(glob, DocTypeVersion, 2); //Doc Type Version
|
||||||
|
Ebml_SerializeUnsigned(glob, DocTypeReadVersion, 2); //Doc Type Read Version
|
||||||
|
Ebml_EndSubElement(glob, &start);
|
||||||
|
}
|
||||||
|
|
||||||
|
void writeSimpleBlock(EbmlGlobal *glob, unsigned char trackNumber, short timeCode,
|
||||||
|
int isKeyframe, unsigned char lacingFlag, int discardable,
|
||||||
|
unsigned char *data, unsigned long dataLength)
|
||||||
|
{
|
||||||
|
Ebml_WriteID(glob, SimpleBlock);
|
||||||
|
unsigned long blockLength = 4 + dataLength;
|
||||||
|
blockLength |= 0x10000000; //TODO check length < 0x0FFFFFFFF
|
||||||
|
Ebml_Serialize(glob, &blockLength, 4);
|
||||||
|
trackNumber |= 0x80; //TODO check track nubmer < 128
|
||||||
|
Ebml_Write(glob, &trackNumber, 1);
|
||||||
|
//Ebml_WriteSigned16(glob, timeCode,2); //this is 3 bytes
|
||||||
|
Ebml_Serialize(glob, &timeCode, 2);
|
||||||
|
unsigned char flags = 0x00 | (isKeyframe ? 0x80 : 0x00) | (lacingFlag << 1) | discardable;
|
||||||
|
Ebml_Write(glob, &flags, 1);
|
||||||
|
Ebml_Write(glob, data, dataLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
static UInt64 generateTrackID(unsigned int trackNumber)
|
||||||
|
{
|
||||||
|
UInt64 t = time(NULL) * trackNumber;
|
||||||
|
UInt64 r = rand();
|
||||||
|
r = r << 32;
|
||||||
|
r += rand();
|
||||||
|
UInt64 rval = t ^ r;
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
||||||
|
void writeVideoTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
|
||||||
|
char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
|
||||||
|
double frameRate)
|
||||||
|
{
|
||||||
|
EbmlLoc start;
|
||||||
|
Ebml_StartSubElement(glob, &start, TrackEntry);
|
||||||
|
Ebml_SerializeUnsigned(glob, TrackNumber, trackNumber);
|
||||||
|
UInt64 trackID = generateTrackID(trackNumber);
|
||||||
|
Ebml_SerializeUnsigned(glob, TrackUID, trackID);
|
||||||
|
Ebml_SerializeString(glob, CodecName, "VP8"); //TODO shouldn't be fixed
|
||||||
|
|
||||||
|
Ebml_SerializeUnsigned(glob, TrackType, 1); //video is always 1
|
||||||
|
Ebml_SerializeString(glob, CodecID, codecId);
|
||||||
|
{
|
||||||
|
EbmlLoc videoStart;
|
||||||
|
Ebml_StartSubElement(glob, &videoStart, Video);
|
||||||
|
Ebml_SerializeUnsigned(glob, PixelWidth, pixelWidth);
|
||||||
|
Ebml_SerializeUnsigned(glob, PixelHeight, pixelHeight);
|
||||||
|
Ebml_SerializeFloat(glob, FrameRate, frameRate);
|
||||||
|
Ebml_EndSubElement(glob, &videoStart); //Video
|
||||||
|
}
|
||||||
|
Ebml_EndSubElement(glob, &start); //Track Entry
|
||||||
|
}
|
||||||
|
void writeAudioTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
|
||||||
|
char *codecId, double samplingFrequency, unsigned int channels,
|
||||||
|
unsigned char *private, unsigned long privateSize)
|
||||||
|
{
|
||||||
|
EbmlLoc start;
|
||||||
|
Ebml_StartSubElement(glob, &start, TrackEntry);
|
||||||
|
Ebml_SerializeUnsigned(glob, TrackNumber, trackNumber);
|
||||||
|
UInt64 trackID = generateTrackID(trackNumber);
|
||||||
|
Ebml_SerializeUnsigned(glob, TrackUID, trackID);
|
||||||
|
Ebml_SerializeUnsigned(glob, TrackType, 2); //audio is always 2
|
||||||
|
//I am using defaults for thesed required fields
|
||||||
|
/* Ebml_SerializeUnsigned(glob, FlagEnabled, 1);
|
||||||
|
Ebml_SerializeUnsigned(glob, FlagDefault, 1);
|
||||||
|
Ebml_SerializeUnsigned(glob, FlagForced, 1);
|
||||||
|
Ebml_SerializeUnsigned(glob, FlagLacing, flagLacing);*/
|
||||||
|
Ebml_SerializeString(glob, CodecID, codecId);
|
||||||
|
Ebml_SerializeData(glob, CodecPrivate, private, privateSize);
|
||||||
|
|
||||||
|
Ebml_SerializeString(glob, CodecName, "VORBIS"); //fixed for now
|
||||||
|
{
|
||||||
|
EbmlLoc AudioStart;
|
||||||
|
Ebml_StartSubElement(glob, &AudioStart, Audio);
|
||||||
|
Ebml_SerializeFloat(glob, SamplingFrequency, samplingFrequency);
|
||||||
|
Ebml_SerializeUnsigned(glob, Channels, channels);
|
||||||
|
Ebml_EndSubElement(glob, &AudioStart);
|
||||||
|
}
|
||||||
|
Ebml_EndSubElement(glob, &start);
|
||||||
|
}
|
||||||
|
void writeSegmentInformation(EbmlGlobal *ebml, EbmlLoc* startInfo, unsigned long timeCodeScale, double duration)
|
||||||
|
{
|
||||||
|
Ebml_StartSubElement(ebml, startInfo, Info);
|
||||||
|
Ebml_SerializeUnsigned(ebml, TimecodeScale, timeCodeScale);
|
||||||
|
Ebml_SerializeFloat(ebml, Segment_Duration, duration * 1000.0); //Currently fixed to using milliseconds
|
||||||
|
Ebml_SerializeString(ebml, 0x4D80, "QTmuxingAppLibWebM-0.0.1");
|
||||||
|
Ebml_SerializeString(ebml, 0x5741, "QTwritingAppLibWebM-0.0.1");
|
||||||
|
Ebml_EndSubElement(ebml, startInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void Mkv_InitializeSegment(Ebml& ebml_out, EbmlLoc& ebmlLoc)
|
||||||
|
{
|
||||||
|
Ebml_StartSubElement(ebml_out, ebmlLoc, 0x18538067);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mkv_InitializeSeek(Ebml& ebml_out, EbmlLoc& ebmlLoc)
|
||||||
|
{
|
||||||
|
Ebml_StartSubElement(ebml_out, ebmlLoc, 0x114d9b74);
|
||||||
|
}
|
||||||
|
void Mkv_WriteSeekInformation(Ebml& ebml_out, SeekStruct& seekInformation)
|
||||||
|
{
|
||||||
|
EbmlLoc ebmlLoc;
|
||||||
|
Ebml_StartSubElement(ebml_out, ebmlLoc, 0x4dbb);
|
||||||
|
Ebml_SerializeString(ebml_out, 0x53ab, seekInformation.SeekID);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x53ac, seekInformation.SeekPosition);
|
||||||
|
Ebml_EndSubElement(ebml_out, ebmlLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mkv_WriteSegmentInformation(Ebml& ebml_out, SegmentInformationStruct& segmentInformation)
|
||||||
|
{
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x73a4, segmentInformation.segmentUID);
|
||||||
|
if (segmentInformation.filename != 0)
|
||||||
|
Ebml_SerializeString(ebml_out, 0x7384, segmentInformation.filename);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x2AD7B1, segmentInformation.TimecodeScale);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x4489, segmentInformation.Duration);
|
||||||
|
//TODO date
|
||||||
|
Ebml_SerializeWString(ebml_out, 0x4D80, L"MKVMUX");
|
||||||
|
Ebml_SerializeWString(ebml_out, 0x5741, segmentInformation.WritingApp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mkv_InitializeTrack(Ebml& ebml_out, EbmlLoc& ebmlLoc)
|
||||||
|
{
|
||||||
|
Ebml_StartSubElement(ebml_out, ebmlLoc, 0x1654AE6B);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Mkv_WriteGenericTrackData(Ebml& ebml_out, TrackStruct& track)
|
||||||
|
{
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0xD7, track.TrackNumber);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x73C5, track.TrackUID);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x83, track.TrackType);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0xB9, track.FlagEnabled ? 1 :0);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x88, track.FlagDefault ? 1 :0);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x55AA, track.FlagForced ? 1 :0);
|
||||||
|
if (track.Language != 0)
|
||||||
|
Ebml_SerializeString(ebml_out, 0x22B59C, track.Language);
|
||||||
|
if (track.CodecID != 0)
|
||||||
|
Ebml_SerializeString(ebml_out, 0x86, track.CodecID);
|
||||||
|
if (track.CodecPrivate != 0)
|
||||||
|
Ebml_SerializeData(ebml_out, 0x63A2, track.CodecPrivate, track.CodecPrivateLength);
|
||||||
|
if (track.CodecName != 0)
|
||||||
|
Ebml_SerializeWString(ebml_out, 0x258688, track.CodecName);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mkv_WriteVideoTrack(Ebml& ebml_out, TrackStruct & track, VideoTrackStruct& video)
|
||||||
|
{
|
||||||
|
EbmlLoc trackHeadLoc, videoHeadLoc;
|
||||||
|
Ebml_StartSubElement(ebml_out, trackHeadLoc, 0xAE); //start Track
|
||||||
|
Mkv_WriteGenericTrackData(ebml_out, track);
|
||||||
|
Ebml_StartSubElement(ebml_out, videoHeadLoc, 0xE0); //start Video
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x9A, video.FlagInterlaced ? 1 :0);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0xB0, video.PixelWidth);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0xBA, video.PixelHeight);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x54B0, video.PixelDisplayWidth);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x54BA, video.PixelDisplayHeight);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x54B2, video.displayUnit);
|
||||||
|
Ebml_SerializeFloat(ebml_out, 0x2383E3, video.FrameRate);
|
||||||
|
Ebml_EndSubElement(ebml_out, videoHeadLoc);
|
||||||
|
Ebml_EndSubElement(ebml_out, trackHeadLoc);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mkv_WriteAudioTrack(Ebml& ebml_out, TrackStruct & track, AudioTrackStruct& video)
|
||||||
|
{
|
||||||
|
EbmlLoc trackHeadLoc, audioHeadLoc;
|
||||||
|
Ebml_StartSubElement(ebml_out, trackHeadLoc, 0xAE);
|
||||||
|
Mkv_WriteGenericTrackData(ebml_out, track);
|
||||||
|
Ebml_StartSubElement(ebml_out, audioHeadLoc, 0xE0); //start Audio
|
||||||
|
Ebml_SerializeFloat(ebml_out, 0xB5, video.SamplingFrequency);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x9F, video.Channels);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x6264, video.BitDepth);
|
||||||
|
Ebml_EndSubElement(ebml_out, audioHeadLoc); // end audio
|
||||||
|
Ebml_EndSubElement(ebml_out, trackHeadLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mkv_WriteEbmlClusterHead(Ebml& ebml_out, EbmlLoc& ebmlLoc, ClusterHeadStruct & clusterHead)
|
||||||
|
{
|
||||||
|
Ebml_StartSubElement(ebml_out, ebmlLoc, 0x1F43B675);
|
||||||
|
Ebml_SerializeUnsigned(ebml_out, 0x6264, clusterHead.TimeCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mkv_WriteSimpleBlockHead(Ebml& ebml_out, EbmlLoc& ebmlLoc, SimpleBlockStruct& block)
|
||||||
|
{
|
||||||
|
Ebml_StartSubElement(ebml_out, ebmlLoc, 0xA3);
|
||||||
|
Ebml_Write1UInt(ebml_out, block.TrackNumber);
|
||||||
|
Ebml_WriteSigned16(ebml_out,block.TimeCode);
|
||||||
|
unsigned char flags = 0x00 | (block.iskey ? 0x80:0x00) | (block.lacing << 1) | block.discardable;
|
||||||
|
Ebml_Write1UInt(ebml_out, flags); //TODO this may be the wrong function
|
||||||
|
Ebml_Serialize(ebml_out, block.data, block.dataLength);
|
||||||
|
Ebml_EndSubElement(ebml_out,ebmlLoc);
|
||||||
|
}
|
||||||
|
*/
|
35
libmkv/WebMElement.h
Normal file
35
libmkv/WebMElement.h
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Use of this source code is governed by a BSD-style license
|
||||||
|
// that can be found in the LICENSE file in the root of the source
|
||||||
|
// tree. An additional intellectual property rights grant can be found
|
||||||
|
// in the file PATENTS. All contributing project authors may
|
||||||
|
// be found in the AUTHORS file in the root of the source tree.
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef MKV_CONTEXT_HPP
|
||||||
|
#define MKV_CONTEXT_HPP 1
|
||||||
|
|
||||||
|
void writeSimpleBock(EbmlGlobal *ebml, unsigned char trackNumber, unsigned short timeCode,
|
||||||
|
int isKeyframe, unsigned char lacingFlag, int discardable,
|
||||||
|
unsigned char *data, unsigned long dataLength);
|
||||||
|
|
||||||
|
|
||||||
|
// these are helper functions
|
||||||
|
void writeHeader(EbmlGlobal *ebml);
|
||||||
|
void writeSegmentInformation(EbmlGlobal *ebml, EbmlLoc* startInfo , unsigned long timeCodeScale, double duration);
|
||||||
|
//this function is a helper only, it assumes a lot of defaults
|
||||||
|
void writeVideoTrack(EbmlGlobal *ebml, unsigned int trackNumber, int flagLacing,
|
||||||
|
char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
|
||||||
|
double frameRate);
|
||||||
|
void writeAudioTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
|
||||||
|
char *codecId, double samplingFrequency, unsigned int channels,
|
||||||
|
unsigned char *private, unsigned long privateSize);
|
||||||
|
|
||||||
|
void writeSimpleBlock(EbmlGlobal *ebml, unsigned char trackNumber, short timeCode,
|
||||||
|
int isKeyframe, unsigned char lacingFlag, int discardable,
|
||||||
|
unsigned char *data, unsigned long dataLength);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
63
libmkv/testlibmkv.c
Normal file
63
libmkv/testlibmkv.c
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Use of this source code is governed by a BSD-style license
|
||||||
|
// that can be found in the LICENSE file in the root of the source
|
||||||
|
// tree. An additional intellectual property rights grant can be found
|
||||||
|
// in the file PATENTS. All contributing project authors may
|
||||||
|
// be found in the AUTHORS file in the root of the source tree.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "EbmlIDs.h"
|
||||||
|
#include "EbmlBufferWriter.h"
|
||||||
|
#include "WebMElement.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
//init the datatype we're using for ebml output
|
||||||
|
unsigned char data[8192];
|
||||||
|
EbmlGlobal ebml;
|
||||||
|
ebml.buf = data;
|
||||||
|
ebml.offset = 0;
|
||||||
|
ebml.length = 8192;
|
||||||
|
|
||||||
|
writeHeader(&ebml);
|
||||||
|
{
|
||||||
|
EbmlLoc startSegment;
|
||||||
|
Ebml_StartSubElement(&ebml, &startSegment, Segment); //segment
|
||||||
|
{
|
||||||
|
//segment info
|
||||||
|
EbmlLoc startInfo;
|
||||||
|
Ebml_StartSubElement(&ebml, &startInfo, Info);
|
||||||
|
Ebml_SerializeString(&ebml, 0x4D80, "muxingAppLibMkv");
|
||||||
|
Ebml_SerializeString(&ebml, 0x5741, "writingAppLibMkv");
|
||||||
|
Ebml_EndSubElement(&ebml, &startInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
EbmlLoc trackStart;
|
||||||
|
Ebml_StartSubElement(&ebml, &trackStart, Tracks);
|
||||||
|
writeVideoTrack(&ebml, 1, 1, "V_MS/VFW/FOURCC", 320, 240, 29.97);
|
||||||
|
//writeAudioTrack(&ebml,2,1, "A_VORBIS", 32000, 1, NULL, 0);
|
||||||
|
Ebml_EndSubElement(&ebml, &trackStart);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
EbmlLoc clusterStart;
|
||||||
|
Ebml_StartSubElement(&ebml, &clusterStart, Cluster); //cluster
|
||||||
|
Ebml_SerializeUnsigned(&ebml, Timecode, 0);
|
||||||
|
|
||||||
|
unsigned char someData[4] = {1, 2, 3, 4};
|
||||||
|
writeSimpleBlock(&ebml, 1, 0, 1, 0, 0, someData, 4);
|
||||||
|
Ebml_EndSubElement(&ebml, &clusterStart);
|
||||||
|
} //end cluster
|
||||||
|
Ebml_EndSubElement(&ebml, &startSegment);
|
||||||
|
}
|
||||||
|
|
||||||
|
//dump ebml stuff to the file
|
||||||
|
FILE *file_out = fopen("test.mkv", "wb");
|
||||||
|
size_t bytesWritten = fwrite(data, 1, ebml.offset, file_out);
|
||||||
|
fclose(file_out);
|
||||||
|
return 0;
|
||||||
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
|
62
libs.mk
62
libs.mk
@@ -1,5 +1,5 @@
|
|||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
@@ -11,6 +11,8 @@
|
|||||||
|
|
||||||
ASM:=$(if $(filter yes,$(CONFIG_GCC)),.asm.s,.asm)
|
ASM:=$(if $(filter yes,$(CONFIG_GCC)),.asm.s,.asm)
|
||||||
|
|
||||||
|
CODEC_SRCS-yes += libs.mk
|
||||||
|
|
||||||
include $(SRC_PATH_BARE)/vpx/vpx_codec.mk
|
include $(SRC_PATH_BARE)/vpx/vpx_codec.mk
|
||||||
CODEC_SRCS-yes += $(addprefix vpx/,$(call enabled,API_SRCS))
|
CODEC_SRCS-yes += $(addprefix vpx/,$(call enabled,API_SRCS))
|
||||||
|
|
||||||
@@ -59,7 +61,6 @@ CODEC_LIB=$(if $(CONFIG_STATIC_MSVCRT),vpxmt,vpxmd)
|
|||||||
# This variable uses deferred expansion intentionally, since the results of
|
# This variable uses deferred expansion intentionally, since the results of
|
||||||
# $(wildcard) may change during the course of the Make.
|
# $(wildcard) may change during the course of the Make.
|
||||||
VS_PLATFORMS = $(foreach d,$(wildcard */Release/$(CODEC_LIB).lib),$(word 1,$(subst /, ,$(d))))
|
VS_PLATFORMS = $(foreach d,$(wildcard */Release/$(CODEC_LIB).lib),$(word 1,$(subst /, ,$(d))))
|
||||||
CODEC_SRCS-yes += $(SRC_PATH_BARE)/libs.mk # to show up in the msvs workspace
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# The following pairs define a mapping of locations in the distribution
|
# The following pairs define a mapping of locations in the distribution
|
||||||
@@ -90,7 +91,9 @@ ifeq ($(ARCH_X86)$(ARCH_X86_64),yes)
|
|||||||
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/emms.asm
|
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/emms.asm
|
||||||
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86.h
|
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86.h
|
||||||
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86_abi_support.asm
|
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86_abi_support.asm
|
||||||
|
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86_cpuid.c
|
||||||
endif
|
endif
|
||||||
|
CODEC_SRCS-$(ARCH_ARM) += vpx_ports/arm_cpudetect.c
|
||||||
CODEC_SRCS-$(ARCH_ARM) += $(BUILD_PFX)vpx_config.asm
|
CODEC_SRCS-$(ARCH_ARM) += $(BUILD_PFX)vpx_config.asm
|
||||||
CODEC_EXPORTS-$(BUILD_LIBVPX) += vpx/exports_com
|
CODEC_EXPORTS-$(BUILD_LIBVPX) += vpx/exports_com
|
||||||
CODEC_EXPORTS-$(CONFIG_ENCODERS) += vpx/exports_enc
|
CODEC_EXPORTS-$(CONFIG_ENCODERS) += vpx/exports_enc
|
||||||
@@ -123,30 +126,6 @@ INSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(call enabled,CODEC_EXPORTS)
|
|||||||
ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
|
ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
|
||||||
ifeq ($(CONFIG_MSVS),yes)
|
ifeq ($(CONFIG_MSVS),yes)
|
||||||
|
|
||||||
ifeq ($(ARCH_ARM),yes)
|
|
||||||
ifeq ($(HAVE_ARMV5TE),yes)
|
|
||||||
ARM_ARCH=v5
|
|
||||||
endif
|
|
||||||
ifeq ($(HAVE_ARMV6),yes)
|
|
||||||
ARM_ARCH=v6
|
|
||||||
endif
|
|
||||||
obj_int_extract.vcproj: $(SRC_PATH_BARE)/build/make/obj_int_extract.c
|
|
||||||
@cp $(SRC_PATH_BARE)/build/arm-wince-vs8/obj_int_extract.bat .
|
|
||||||
@echo " [CREATE] $@"
|
|
||||||
$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh\
|
|
||||||
--exe\
|
|
||||||
--target=$(TOOLCHAIN)\
|
|
||||||
$(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
|
|
||||||
--name=obj_int_extract\
|
|
||||||
--proj-guid=E1360C65-D375-4335-8057-7ED99CC3F9B2\
|
|
||||||
--out=$@ $^\
|
|
||||||
-I".";"$(SRC_PATH_BARE)"
|
|
||||||
|
|
||||||
PROJECTS-$(BUILD_LIBVPX) += obj_int_extract.vcproj
|
|
||||||
PROJECTS-$(BUILD_LIBVPX) += obj_int_extract.bat
|
|
||||||
PROJECTS-$(BUILD_LIBVPX) += armasm$(ARM_ARCH).rules
|
|
||||||
endif
|
|
||||||
|
|
||||||
vpx.def: $(call enabled,CODEC_EXPORTS)
|
vpx.def: $(call enabled,CODEC_EXPORTS)
|
||||||
@echo " [CREATE] $@"
|
@echo " [CREATE] $@"
|
||||||
$(SRC_PATH_BARE)/build/make/gen_msvs_def.sh\
|
$(SRC_PATH_BARE)/build/make/gen_msvs_def.sh\
|
||||||
@@ -228,10 +207,39 @@ endif
|
|||||||
#
|
#
|
||||||
# Add assembler dependencies for configuration and offsets
|
# Add assembler dependencies for configuration and offsets
|
||||||
#
|
#
|
||||||
#$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm $(BUILD_PFX)vpx_asm_offsets.asm
|
|
||||||
$(filter %.s.o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm
|
$(filter %.s.o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm
|
||||||
$(filter %.asm.o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm
|
$(filter %.asm.o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm
|
||||||
|
|
||||||
|
#
|
||||||
|
# Calculate platform- and compiler-specific offsets for hand coded assembly
|
||||||
|
#
|
||||||
|
ifeq ($(ARCH_ARM), yes)
|
||||||
|
asm_com_offsets.asm: obj_int_extract
|
||||||
|
asm_com_offsets.asm: $(VP8_PREFIX)common/asm_com_offsets.c.o
|
||||||
|
./obj_int_extract rvds $< $(ADS2GAS) > $@
|
||||||
|
OBJS-yes += $(VP8_PREFIX)common/asm_com_offsets.c.o
|
||||||
|
CLEAN-OBJS += asm_com_offsets.asm
|
||||||
|
$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)asm_com_offsets.asm
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_VP8_ENCODER), yes)
|
||||||
|
asm_enc_offsets.asm: obj_int_extract
|
||||||
|
asm_enc_offsets.asm: $(VP8_PREFIX)encoder/asm_enc_offsets.c.o
|
||||||
|
./obj_int_extract rvds $< $(ADS2GAS) > $@
|
||||||
|
OBJS-yes += $(VP8_PREFIX)encoder/asm_enc_offsets.c.o
|
||||||
|
CLEAN-OBJS += asm_enc_offsets.asm
|
||||||
|
$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)asm_enc_offsets.asm
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_VP8_DECODER), yes)
|
||||||
|
asm_dec_offsets.asm: obj_int_extract
|
||||||
|
asm_dec_offsets.asm: $(VP8_PREFIX)decoder/asm_dec_offsets.c.o
|
||||||
|
./obj_int_extract rvds $< $(ADS2GAS) > $@
|
||||||
|
OBJS-yes += $(VP8_PREFIX)decoder/asm_dec_offsets.c.o
|
||||||
|
CLEAN-OBJS += asm_dec_offsets.asm
|
||||||
|
$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)asm_dec_offsets.asm
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
$(shell $(SRC_PATH_BARE)/build/make/version.sh "$(SRC_PATH_BARE)" $(BUILD_PFX)vpx_version.h)
|
$(shell $(SRC_PATH_BARE)/build/make/version.sh "$(SRC_PATH_BARE)" $(BUILD_PFX)vpx_version.h)
|
||||||
CLEAN-OBJS += $(BUILD_PFX)vpx_version.h
|
CLEAN-OBJS += $(BUILD_PFX)vpx_version.h
|
||||||
|
|
||||||
|
@@ -31,7 +31,7 @@
|
|||||||
The WebM project is an open source project supported by its community. For
|
The WebM project is an open source project supported by its community. For
|
||||||
questions about this SDK, please mail the apps-devel@webmproject.org list.
|
questions about this SDK, please mail the apps-devel@webmproject.org list.
|
||||||
To contribute, see http://www.webmproject.org/code/contribute and mail
|
To contribute, see http://www.webmproject.org/code/contribute and mail
|
||||||
vpx-devel@webmproject.org.
|
codec-devel@webmproject.org.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!\page changelog CHANGELOG
|
/*!\page changelog CHANGELOG
|
||||||
|
@@ -20,8 +20,6 @@
|
|||||||
* Still in the public domain.
|
* Still in the public domain.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/types.h> /* for stupid systems */
|
|
||||||
|
|
||||||
#include <string.h> /* for memcpy() */
|
#include <string.h> /* for memcpy() */
|
||||||
|
|
||||||
#include "md5_utils.h"
|
#include "md5_utils.h"
|
||||||
|
40
nestegg/.gitignore
vendored
Normal file
40
nestegg/.gitignore
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
*.lo
|
||||||
|
*.o
|
||||||
|
*.swp
|
||||||
|
*~
|
||||||
|
.deps
|
||||||
|
.dirstamp
|
||||||
|
.libs
|
||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
|
_stdint.h
|
||||||
|
aclocal.m4
|
||||||
|
autom4te.cache
|
||||||
|
compile
|
||||||
|
config.guess
|
||||||
|
config.h
|
||||||
|
config.h.in
|
||||||
|
config.log
|
||||||
|
config.status
|
||||||
|
config.sub
|
||||||
|
configure
|
||||||
|
depcomp
|
||||||
|
docs/Doxyfile
|
||||||
|
docs/doxygen-build.stamp
|
||||||
|
docs/html
|
||||||
|
install-sh
|
||||||
|
libtool
|
||||||
|
ltmain.sh
|
||||||
|
m4/libtool.m4
|
||||||
|
m4/ltoptions.m4
|
||||||
|
m4/ltsugar.m4
|
||||||
|
m4/ltversion.m4
|
||||||
|
m4/lt~obsolete.m4
|
||||||
|
missing
|
||||||
|
nestegg-uninstalled.pc
|
||||||
|
nestegg.pc
|
||||||
|
src/.dirstamp
|
||||||
|
src/libnestegg.la
|
||||||
|
stamp-h1
|
||||||
|
test/test
|
||||||
|
include/nestegg/nestegg-stdint.h
|
1
nestegg/AUTHORS
Normal file
1
nestegg/AUTHORS
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Matthew Gregan <kinetik@flim.org>
|
8
nestegg/INSTALL
Normal file
8
nestegg/INSTALL
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
Build instructions for libnestegg
|
||||||
|
=================================
|
||||||
|
|
||||||
|
0. Change directory into the source directory.
|
||||||
|
1. Run |autoreconf --install| to generate configure.
|
||||||
|
2. Run |./configure| to configure the build.
|
||||||
|
3. Run |make| to build.
|
||||||
|
4. Run |make check| to run the test suite.
|
13
nestegg/LICENSE
Normal file
13
nestegg/LICENSE
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
Copyright © 2010 Mozilla Foundation
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
|
copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
51
nestegg/Makefile.am
Normal file
51
nestegg/Makefile.am
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
AUTOMAKE_OPTIONS = foreign 1.11 no-dist-gzip dist-bzip2 subdir-objects
|
||||||
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
|
INCLUDES = -I$(top_srcdir)/include -I. -I$(top_srcdir)/halloc
|
||||||
|
AM_CFLAGS = -ansi -pedantic -Wall -Wextra -Wno-long-long -O0 -g
|
||||||
|
|
||||||
|
SUBDIRS = docs
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
AUTHORS README LICENSE \
|
||||||
|
nestegg-uninstalled.pc.in \
|
||||||
|
m4/as-ac-expand.m4 \
|
||||||
|
m4/pkg.m4 \
|
||||||
|
m4/ax_create_stdint_h.m4 \
|
||||||
|
halloc/src/halloc.c \
|
||||||
|
halloc/halloc.h \
|
||||||
|
halloc/src/align.h \
|
||||||
|
halloc/src/hlist.h \
|
||||||
|
halloc/src/macros.h
|
||||||
|
|
||||||
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
|
pkgconfig_DATA = nestegg.pc
|
||||||
|
|
||||||
|
nesteggincludedir = $(includedir)/nestegg
|
||||||
|
nestegginclude_HEADERS = include/nestegg/nestegg.h include/nestegg/nestegg-stdint.h
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = src/libnestegg.la
|
||||||
|
|
||||||
|
src_libnestegg_la_SOURCES = \
|
||||||
|
src/nestegg.c \
|
||||||
|
halloc/src/halloc.c \
|
||||||
|
halloc/halloc.h \
|
||||||
|
halloc/src/align.h \
|
||||||
|
halloc/src/hlist.h \
|
||||||
|
halloc/src/macros.h
|
||||||
|
|
||||||
|
check_PROGRAMS = test/test
|
||||||
|
|
||||||
|
test_test_SOURCES = test/test.c
|
||||||
|
test_test_LDADD = src/libnestegg.la
|
||||||
|
|
||||||
|
DISTCLEANFILES = include/nestegg/nestegg-stdint.h
|
||||||
|
|
||||||
|
dist-hook:
|
||||||
|
find $(distdir) -type d -name '.git' | xargs rm -rf
|
||||||
|
|
||||||
|
debug:
|
||||||
|
$(MAKE) all CFLAGS="@DEBUG@"
|
||||||
|
|
||||||
|
profile:
|
||||||
|
$(MAKE) all CFLAGS="@PROFILE@"
|
6
nestegg/README
Normal file
6
nestegg/README
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
See INSTALL for build instructions.
|
||||||
|
|
||||||
|
Licensed under an ISC-style license. See LICENSE for details.
|
||||||
|
|
||||||
|
The source under the halloc/ directory is licensed under a BSD license. See
|
||||||
|
halloc/halloc.h for details.
|
21
nestegg/TODO
Normal file
21
nestegg/TODO
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
- Document when read, seek, tell callbacks are used.
|
||||||
|
- Add an automated testsuite.
|
||||||
|
- Test (and fix, if necessary) support for unknown sizes.
|
||||||
|
- Test (and fix, if necessary) support for large files.
|
||||||
|
- Read past unknown elements rather than seeking.
|
||||||
|
- Try to handle unknown elements with unknown sizes.
|
||||||
|
- Formalize handling of default element values.
|
||||||
|
- Try to resynchronize stream when read_block fails so that failure to parse
|
||||||
|
a single block can be treated as non-fatal.
|
||||||
|
- Make logging more useful to API users.
|
||||||
|
- Avoid reparsing Cues and ignore any SeekHead at end of file.
|
||||||
|
- Optionally build a Cue index as Clusters are parsed.
|
||||||
|
- Support seeking without Cues.
|
||||||
|
- Avoid building a list of Clusters as they are parsed and retain only the
|
||||||
|
last one parsed.
|
||||||
|
- Add an asynchronous error code to struct nestegg and ensure that API calls
|
||||||
|
continue to fail safely one a fatal error has been returned.
|
||||||
|
- Modify parser/data structures to provide a clean separation. Perhaps the
|
||||||
|
parser should return a generic tree of nodes that a second pass uses to
|
||||||
|
initialize the main data structures.
|
||||||
|
- Use pool allocator for all allocations.
|
124
nestegg/configure.ac
Normal file
124
nestegg/configure.ac
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
dnl ------------------------------------------------
|
||||||
|
dnl Initialization and Versioning
|
||||||
|
dnl ------------------------------------------------
|
||||||
|
|
||||||
|
AC_INIT(libnestegg,[0.1git])
|
||||||
|
|
||||||
|
AC_CANONICAL_HOST
|
||||||
|
AC_CANONICAL_TARGET
|
||||||
|
|
||||||
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
|
|
||||||
|
AM_CONFIG_HEADER([config.h])
|
||||||
|
AC_CONFIG_SRCDIR([src/nestegg.c])
|
||||||
|
AM_INIT_AUTOMAKE
|
||||||
|
|
||||||
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||||
|
|
||||||
|
dnl Library versioning
|
||||||
|
dnl CURRENT, REVISION, AGE
|
||||||
|
dnl - library source changed -> increment REVISION
|
||||||
|
dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0
|
||||||
|
dnl - interfaces added -> increment AGE
|
||||||
|
dnl - interfaces removed -> AGE = 0
|
||||||
|
|
||||||
|
NESTEGG_CURRENT=0
|
||||||
|
NESTEGG_REVISION=0
|
||||||
|
NESTEGG_AGE=1
|
||||||
|
AC_SUBST(NESTEGG_CURRENT)
|
||||||
|
AC_SUBST(NESTEGG_REVISION)
|
||||||
|
AC_SUBST(NESTEGG_AGE)
|
||||||
|
|
||||||
|
|
||||||
|
dnl --------------------------------------------------
|
||||||
|
dnl Check for programs
|
||||||
|
dnl --------------------------------------------------
|
||||||
|
|
||||||
|
dnl save $CFLAGS since AC_PROG_CC likes to insert "-g -O2"
|
||||||
|
dnl if $CFLAGS is blank
|
||||||
|
cflags_save="$CFLAGS"
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_CPP
|
||||||
|
CFLAGS="$cflags_save"
|
||||||
|
|
||||||
|
AM_PROG_CC_C_O
|
||||||
|
AC_LIBTOOL_WIN32_DLL
|
||||||
|
AM_PROG_LIBTOOL
|
||||||
|
|
||||||
|
dnl Check for doxygen
|
||||||
|
AC_ARG_ENABLE([doc],
|
||||||
|
AS_HELP_STRING([--enable-doc], [Build API documentation]),
|
||||||
|
[ac_enable_doc=$enableval], [ac_enable_doc=auto])
|
||||||
|
|
||||||
|
if test "x$ac_enable_doc" != "xno"; then
|
||||||
|
AC_CHECK_PROG(HAVE_DOXYGEN, doxygen, true, false)
|
||||||
|
|
||||||
|
if test "x$HAVE_DOXYGEN" = "xfalse" -a "x$ac_enable_doc" = "xyes"; then
|
||||||
|
AC_MSG_ERROR([*** API documentation explicitly requested but Doxygen not found])
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
HAVE_DOXYGEN=false
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL(HAVE_DOXYGEN,$HAVE_DOXYGEN)
|
||||||
|
if test $HAVE_DOXYGEN = "false"; then
|
||||||
|
AC_MSG_WARN([*** doxygen not found, API documentation will not be built])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Generate portable stdint.h replacement
|
||||||
|
AX_CREATE_STDINT_H(include/nestegg/nestegg-stdint.h)
|
||||||
|
|
||||||
|
# Test whenever ld supports -version-script
|
||||||
|
AC_PROG_LD
|
||||||
|
AC_PROG_LD_GNU
|
||||||
|
AC_MSG_CHECKING([how to control symbol export])
|
||||||
|
|
||||||
|
dnl --------------------------------------------------
|
||||||
|
dnl Do substitutions
|
||||||
|
dnl --------------------------------------------------
|
||||||
|
|
||||||
|
AC_SUBST(DEBUG)
|
||||||
|
AC_SUBST(PROFILE)
|
||||||
|
|
||||||
|
AC_OUTPUT([
|
||||||
|
Makefile
|
||||||
|
docs/Makefile
|
||||||
|
docs/Doxyfile
|
||||||
|
nestegg.pc
|
||||||
|
nestegg-uninstalled.pc
|
||||||
|
])
|
||||||
|
|
||||||
|
AS_AC_EXPAND(LIBDIR, ${libdir})
|
||||||
|
AS_AC_EXPAND(INCLUDEDIR, ${includedir})
|
||||||
|
AS_AC_EXPAND(BINDIR, ${bindir})
|
||||||
|
AS_AC_EXPAND(DOCDIR, ${docdir})
|
||||||
|
|
||||||
|
if test $HAVE_DOXYGEN = "false"; then
|
||||||
|
doc_build="no"
|
||||||
|
else
|
||||||
|
doc_build="yes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_RESULT([
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
$PACKAGE $VERSION: Automatic configuration OK.
|
||||||
|
|
||||||
|
General configuration:
|
||||||
|
|
||||||
|
API Documentation: .......... ${doc_build}
|
||||||
|
|
||||||
|
Installation paths:
|
||||||
|
|
||||||
|
libnestegg: .................. ${LIBDIR}
|
||||||
|
C header files: .............. ${INCLUDEDIR}/nestegg
|
||||||
|
Documentation: ............... ${DOCDIR}
|
||||||
|
|
||||||
|
Building:
|
||||||
|
|
||||||
|
Type 'make' to compile $PACKAGE.
|
||||||
|
|
||||||
|
Type 'make install' to install $PACKAGE.
|
||||||
|
|
||||||
|
Example programs will be built but not installed.
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
])
|
||||||
|
|
1551
nestegg/docs/Doxyfile.in
Normal file
1551
nestegg/docs/Doxyfile.in
Normal file
File diff suppressed because it is too large
Load Diff
38
nestegg/docs/Makefile.am
Normal file
38
nestegg/docs/Makefile.am
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
doc_DATA = doxygen-build.stamp
|
||||||
|
|
||||||
|
EXTRA_DIST = Doxyfile.in
|
||||||
|
|
||||||
|
if HAVE_DOXYGEN
|
||||||
|
doxygen-build.stamp: Doxyfile
|
||||||
|
doxygen
|
||||||
|
touch doxygen-build.stamp
|
||||||
|
else
|
||||||
|
doxygen-build.stamp:
|
||||||
|
echo "*** Warning: Doxygen not found; documentation will not be built."
|
||||||
|
touch doxygen-build.stamp
|
||||||
|
endif
|
||||||
|
|
||||||
|
dist_docdir = $(distdir)/libnestegg
|
||||||
|
|
||||||
|
dist-hook:
|
||||||
|
if test -d html; then \
|
||||||
|
mkdir $(dist_docdir); \
|
||||||
|
echo -n "copying built documenation..."; \
|
||||||
|
cp -rp html $(dist_docdir)/html; \
|
||||||
|
echo "OK"; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
install-data-local: doxygen-build.stamp
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(docdir)
|
||||||
|
if test -d html; then \
|
||||||
|
cp -rp html $(DESTDIR)$(docdir)/html; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
uninstall-local:
|
||||||
|
rm -rf $(DESTDIR)$(docdir)
|
||||||
|
|
||||||
|
clean-local:
|
||||||
|
if test -d html; then rm -rf html; fi
|
||||||
|
if test -f doxygen-build.stamp; then rm -f doxygen-build.stamp; fi
|
||||||
|
|
45
nestegg/halloc/README
Normal file
45
nestegg/halloc/README
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
halloc 1.2.1
|
||||||
|
============
|
||||||
|
|
||||||
|
Hierarchical memory heap interface - an extension to standard
|
||||||
|
malloc/free interface that simplifies tasks of memory disposal
|
||||||
|
when allocated structures exhibit hierarchical properties.
|
||||||
|
|
||||||
|
http://swapped.cc/halloc
|
||||||
|
=
|
||||||
|
To build libhalloc.a with GNU tools run
|
||||||
|
make
|
||||||
|
|
||||||
|
To install in /usr/include and /usr/lib
|
||||||
|
make install
|
||||||
|
|
||||||
|
To cleanup the build files
|
||||||
|
make clean
|
||||||
|
=
|
||||||
|
halloc-1.2.1
|
||||||
|
* fixed a double-free bug in _set_allocator() as per
|
||||||
|
Matthew Gregan comments
|
||||||
|
|
||||||
|
* switched to using NULL instead of 0 where applicable
|
||||||
|
|
||||||
|
halloc-1.2.0
|
||||||
|
* added missing <string.h> include to halloc.c
|
||||||
|
|
||||||
|
* improved standard compliance thanks to the feedback
|
||||||
|
received from Stan Tobias. Two things were fixed -
|
||||||
|
|
||||||
|
- hblock_t structure no longer uses zero-sized 'data'
|
||||||
|
array, which happened to be common, but non-standard
|
||||||
|
extension;
|
||||||
|
|
||||||
|
- secondly, added the code to test the behaviour of
|
||||||
|
realloc(ptr, 0). Standard allows it NOT to act as
|
||||||
|
free(), in which case halloc will use its own version
|
||||||
|
of allocator calling free() when neccessary.
|
||||||
|
|
||||||
|
halloc-1.1.0
|
||||||
|
* initial public release (rewrite of hhmalloc library)
|
||||||
|
|
||||||
|
=============================================================================
|
||||||
|
Copyright (c) 2004-2010, Alex Pankratov (ap@swapped.cc). All rights reserved.
|
||||||
|
|
43
nestegg/halloc/halloc.h
Normal file
43
nestegg/halloc/halloc.h
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2004-2010 Alex Pankratov. All rights reserved.
|
||||||
|
*
|
||||||
|
* Hierarchical memory allocator, 1.2.1
|
||||||
|
* http://swapped.cc/halloc
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The program is distributed under terms of BSD license.
|
||||||
|
* You can obtain the copy of the license by visiting:
|
||||||
|
*
|
||||||
|
* http://www.opensource.org/licenses/bsd-license.php
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LIBP_HALLOC_H_
|
||||||
|
#define _LIBP_HALLOC_H_
|
||||||
|
|
||||||
|
#include <stddef.h> /* size_t */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Core API
|
||||||
|
*/
|
||||||
|
void * halloc (void * block, size_t len);
|
||||||
|
void hattach(void * block, void * parent);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* standard malloc/free api
|
||||||
|
*/
|
||||||
|
void * h_malloc (size_t len);
|
||||||
|
void * h_calloc (size_t n, size_t len);
|
||||||
|
void * h_realloc(void * p, size_t len);
|
||||||
|
void h_free (void * p);
|
||||||
|
char * h_strdup (const char * str);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the underlying allocator
|
||||||
|
*/
|
||||||
|
typedef void * (* realloc_t)(void * ptr, size_t len);
|
||||||
|
|
||||||
|
extern realloc_t halloc_allocator;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
36
nestegg/halloc/src/align.h
Normal file
36
nestegg/halloc/src/align.h
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2004-2010 Alex Pankratov. All rights reserved.
|
||||||
|
*
|
||||||
|
* Hierarchical memory allocator, 1.2.1
|
||||||
|
* http://swapped.cc/halloc
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The program is distributed under terms of BSD license.
|
||||||
|
* You can obtain the copy of the license by visiting:
|
||||||
|
*
|
||||||
|
* http://www.opensource.org/licenses/bsd-license.php
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LIBP_ALIGN_H_
|
||||||
|
#define _LIBP_ALIGN_H_
|
||||||
|
|
||||||
|
/*
|
||||||
|
* a type with the most strict alignment requirements
|
||||||
|
*/
|
||||||
|
union max_align
|
||||||
|
{
|
||||||
|
char c;
|
||||||
|
short s;
|
||||||
|
long l;
|
||||||
|
int i;
|
||||||
|
float f;
|
||||||
|
double d;
|
||||||
|
void * v;
|
||||||
|
void (*q)(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef union max_align max_align_t;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
254
nestegg/halloc/src/halloc.c
Normal file
254
nestegg/halloc/src/halloc.c
Normal file
@@ -0,0 +1,254 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2004i-2010 Alex Pankratov. All rights reserved.
|
||||||
|
*
|
||||||
|
* Hierarchical memory allocator, 1.2.1
|
||||||
|
* http://swapped.cc/halloc
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The program is distributed under terms of BSD license.
|
||||||
|
* You can obtain the copy of the license by visiting:
|
||||||
|
*
|
||||||
|
* http://www.opensource.org/licenses/bsd-license.php
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h> /* realloc */
|
||||||
|
#include <string.h> /* memset & co */
|
||||||
|
|
||||||
|
#include "../halloc.h"
|
||||||
|
#include "align.h"
|
||||||
|
#include "hlist.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* block control header
|
||||||
|
*/
|
||||||
|
typedef struct hblock
|
||||||
|
{
|
||||||
|
#ifndef NDEBUG
|
||||||
|
#define HH_MAGIC 0x20040518L
|
||||||
|
long magic;
|
||||||
|
#endif
|
||||||
|
hlist_item_t siblings; /* 2 pointers */
|
||||||
|
hlist_head_t children; /* 1 pointer */
|
||||||
|
max_align_t data[1]; /* not allocated, see below */
|
||||||
|
|
||||||
|
} hblock_t;
|
||||||
|
|
||||||
|
#define sizeof_hblock offsetof(hblock_t, data)
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
realloc_t halloc_allocator = NULL;
|
||||||
|
|
||||||
|
#define allocator halloc_allocator
|
||||||
|
|
||||||
|
/*
|
||||||
|
* static methods
|
||||||
|
*/
|
||||||
|
static void _set_allocator(void);
|
||||||
|
static void * _realloc(void * ptr, size_t n);
|
||||||
|
|
||||||
|
static int _relate(hblock_t * b, hblock_t * p);
|
||||||
|
static void _free_children(hblock_t * p);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Core API
|
||||||
|
*/
|
||||||
|
void * halloc(void * ptr, size_t len)
|
||||||
|
{
|
||||||
|
hblock_t * p;
|
||||||
|
|
||||||
|
/* set up default allocator */
|
||||||
|
if (! allocator)
|
||||||
|
{
|
||||||
|
_set_allocator();
|
||||||
|
assert(allocator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* calloc */
|
||||||
|
if (! ptr)
|
||||||
|
{
|
||||||
|
if (! len)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
p = allocator(0, len + sizeof_hblock);
|
||||||
|
if (! p)
|
||||||
|
return NULL;
|
||||||
|
#ifndef NDEBUG
|
||||||
|
p->magic = HH_MAGIC;
|
||||||
|
#endif
|
||||||
|
hlist_init(&p->children);
|
||||||
|
hlist_init_item(&p->siblings);
|
||||||
|
|
||||||
|
return p->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = structof(ptr, hblock_t, data);
|
||||||
|
assert(p->magic == HH_MAGIC);
|
||||||
|
|
||||||
|
/* realloc */
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
p = allocator(p, len + sizeof_hblock);
|
||||||
|
if (! p)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
hlist_relink(&p->siblings);
|
||||||
|
hlist_relink_head(&p->children);
|
||||||
|
|
||||||
|
return p->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* free */
|
||||||
|
_free_children(p);
|
||||||
|
hlist_del(&p->siblings);
|
||||||
|
allocator(p, 0);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hattach(void * block, void * parent)
|
||||||
|
{
|
||||||
|
hblock_t * b, * p;
|
||||||
|
|
||||||
|
if (! block)
|
||||||
|
{
|
||||||
|
assert(! parent);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* detach */
|
||||||
|
b = structof(block, hblock_t, data);
|
||||||
|
assert(b->magic == HH_MAGIC);
|
||||||
|
|
||||||
|
hlist_del(&b->siblings);
|
||||||
|
|
||||||
|
if (! parent)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* attach */
|
||||||
|
p = structof(parent, hblock_t, data);
|
||||||
|
assert(p->magic == HH_MAGIC);
|
||||||
|
|
||||||
|
/* sanity checks */
|
||||||
|
assert(b != p); /* trivial */
|
||||||
|
assert(! _relate(p, b)); /* heavy ! */
|
||||||
|
|
||||||
|
hlist_add(&p->children, &b->siblings);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* malloc/free api
|
||||||
|
*/
|
||||||
|
void * h_malloc(size_t len)
|
||||||
|
{
|
||||||
|
return halloc(0, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void * h_calloc(size_t n, size_t len)
|
||||||
|
{
|
||||||
|
void * ptr = halloc(0, len*=n);
|
||||||
|
return ptr ? memset(ptr, 0, len) : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void * h_realloc(void * ptr, size_t len)
|
||||||
|
{
|
||||||
|
return halloc(ptr, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
void h_free(void * ptr)
|
||||||
|
{
|
||||||
|
halloc(ptr, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
char * h_strdup(const char * str)
|
||||||
|
{
|
||||||
|
size_t len = strlen(str);
|
||||||
|
char * ptr = halloc(0, len + 1);
|
||||||
|
return ptr ? (ptr[len] = 0, memcpy(ptr, str, len)) : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* static stuff
|
||||||
|
*/
|
||||||
|
static void _set_allocator(void)
|
||||||
|
{
|
||||||
|
void * p;
|
||||||
|
assert(! allocator);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the purpose of the test below is to check the behaviour
|
||||||
|
* of realloc(ptr, 0), which is defined in the standard
|
||||||
|
* as an implementation-specific. if it returns zero,
|
||||||
|
* then it's equivalent to free(). it can however return
|
||||||
|
* non-zero, in which case it cannot be used for freeing
|
||||||
|
* memory blocks and we'll need to supply our own version
|
||||||
|
*
|
||||||
|
* Thanks to Stan Tobias for pointing this tricky part out.
|
||||||
|
*/
|
||||||
|
allocator = realloc;
|
||||||
|
if (! (p = malloc(1)))
|
||||||
|
/* hmm */
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((p = realloc(p, 0)))
|
||||||
|
{
|
||||||
|
/* realloc cannot be used as free() */
|
||||||
|
allocator = _realloc;
|
||||||
|
free(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void * _realloc(void * ptr, size_t n)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* free'ing realloc()
|
||||||
|
*/
|
||||||
|
if (n)
|
||||||
|
return realloc(ptr, n);
|
||||||
|
free(ptr);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _relate(hblock_t * b, hblock_t * p)
|
||||||
|
{
|
||||||
|
hlist_item_t * i;
|
||||||
|
|
||||||
|
if (!b || !p)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* since there is no 'parent' pointer, which would've allowed
|
||||||
|
* O(log(n)) upward traversal, the check must use O(n) downward
|
||||||
|
* iteration of the entire hierarchy; and this can be VERY SLOW
|
||||||
|
*/
|
||||||
|
hlist_for_each(i, &p->children)
|
||||||
|
{
|
||||||
|
hblock_t * q = structof(i, hblock_t, siblings);
|
||||||
|
if (q == b || _relate(b, q))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _free_children(hblock_t * p)
|
||||||
|
{
|
||||||
|
hlist_item_t * i, * tmp;
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
/*
|
||||||
|
* this catches loops in hierarchy with almost zero
|
||||||
|
* overhead (compared to _relate() running time)
|
||||||
|
*/
|
||||||
|
assert(p && p->magic == HH_MAGIC);
|
||||||
|
p->magic = 0;
|
||||||
|
#endif
|
||||||
|
hlist_for_each_safe(i, tmp, &p->children)
|
||||||
|
{
|
||||||
|
hblock_t * q = structof(i, hblock_t, siblings);
|
||||||
|
_free_children(q);
|
||||||
|
allocator(q, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
136
nestegg/halloc/src/hlist.h
Normal file
136
nestegg/halloc/src/hlist.h
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2004-2010 Alex Pankratov. All rights reserved.
|
||||||
|
*
|
||||||
|
* Hierarchical memory allocator, 1.2.1
|
||||||
|
* http://swapped.cc/halloc
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The program is distributed under terms of BSD license.
|
||||||
|
* You can obtain the copy of the license by visiting:
|
||||||
|
*
|
||||||
|
* http://www.opensource.org/licenses/bsd-license.php
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LIBP_HLIST_H_
|
||||||
|
#define _LIBP_HLIST_H_
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include "macros.h" /* static_inline */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* weak double-linked list w/ tail sentinel
|
||||||
|
*/
|
||||||
|
typedef struct hlist_head hlist_head_t;
|
||||||
|
typedef struct hlist_item hlist_item_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
struct hlist_head
|
||||||
|
{
|
||||||
|
hlist_item_t * next;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct hlist_item
|
||||||
|
{
|
||||||
|
hlist_item_t * next;
|
||||||
|
hlist_item_t ** prev;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* shared tail sentinel
|
||||||
|
*/
|
||||||
|
struct hlist_item hlist_null;
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define __hlist_init(h) { &hlist_null }
|
||||||
|
#define __hlist_init_item(i) { &hlist_null, &(i).next }
|
||||||
|
|
||||||
|
static_inline void hlist_init(hlist_head_t * h);
|
||||||
|
static_inline void hlist_init_item(hlist_item_t * i);
|
||||||
|
|
||||||
|
/* static_inline void hlist_purge(hlist_head_t * h); */
|
||||||
|
|
||||||
|
/* static_inline bool_t hlist_empty(const hlist_head_t * h); */
|
||||||
|
|
||||||
|
/* static_inline hlist_item_t * hlist_head(const hlist_head_t * h); */
|
||||||
|
|
||||||
|
/* static_inline hlist_item_t * hlist_next(const hlist_item_t * i); */
|
||||||
|
/* static_inline hlist_item_t * hlist_prev(const hlist_item_t * i,
|
||||||
|
const hlist_head_t * h); */
|
||||||
|
|
||||||
|
static_inline void hlist_add(hlist_head_t * h, hlist_item_t * i);
|
||||||
|
|
||||||
|
/* static_inline void hlist_add_prev(hlist_item_t * l, hlist_item_t * i); */
|
||||||
|
/* static_inline void hlist_add_next(hlist_item_t * l, hlist_item_t * i); */
|
||||||
|
|
||||||
|
static_inline void hlist_del(hlist_item_t * i);
|
||||||
|
|
||||||
|
static_inline void hlist_relink(hlist_item_t * i);
|
||||||
|
static_inline void hlist_relink_head(hlist_head_t * h);
|
||||||
|
|
||||||
|
#define hlist_for_each(i, h) \
|
||||||
|
for (i = (h)->next; i != &hlist_null; i = i->next)
|
||||||
|
|
||||||
|
#define hlist_for_each_safe(i, tmp, h) \
|
||||||
|
for (i = (h)->next, tmp = i->next; \
|
||||||
|
i!= &hlist_null; \
|
||||||
|
i = tmp, tmp = i->next)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* static
|
||||||
|
*/
|
||||||
|
static_inline void hlist_init(hlist_head_t * h)
|
||||||
|
{
|
||||||
|
assert(h);
|
||||||
|
h->next = &hlist_null;
|
||||||
|
}
|
||||||
|
|
||||||
|
static_inline void hlist_init_item(hlist_item_t * i)
|
||||||
|
{
|
||||||
|
assert(i);
|
||||||
|
i->prev = &i->next;
|
||||||
|
i->next = &hlist_null;
|
||||||
|
}
|
||||||
|
|
||||||
|
static_inline void hlist_add(hlist_head_t * h, hlist_item_t * i)
|
||||||
|
{
|
||||||
|
hlist_item_t * next;
|
||||||
|
assert(h && i);
|
||||||
|
|
||||||
|
next = i->next = h->next;
|
||||||
|
next->prev = &i->next;
|
||||||
|
h->next = i;
|
||||||
|
i->prev = &h->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
static_inline void hlist_del(hlist_item_t * i)
|
||||||
|
{
|
||||||
|
hlist_item_t * next;
|
||||||
|
assert(i);
|
||||||
|
|
||||||
|
next = i->next;
|
||||||
|
next->prev = i->prev;
|
||||||
|
*i->prev = next;
|
||||||
|
|
||||||
|
hlist_init_item(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
static_inline void hlist_relink(hlist_item_t * i)
|
||||||
|
{
|
||||||
|
assert(i);
|
||||||
|
*i->prev = i;
|
||||||
|
i->next->prev = &i->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
static_inline void hlist_relink_head(hlist_head_t * h)
|
||||||
|
{
|
||||||
|
assert(h);
|
||||||
|
h->next->prev = &h->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
36
nestegg/halloc/src/macros.h
Normal file
36
nestegg/halloc/src/macros.h
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2004-2010 Alex Pankratov. All rights reserved.
|
||||||
|
*
|
||||||
|
* Hierarchical memory allocator, 1.2.1
|
||||||
|
* http://swapped.cc/halloc
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The program is distributed under terms of BSD license.
|
||||||
|
* You can obtain the copy of the license by visiting:
|
||||||
|
*
|
||||||
|
* http://www.opensource.org/licenses/bsd-license.php
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LIBP_MACROS_H_
|
||||||
|
#define _LIBP_MACROS_H_
|
||||||
|
|
||||||
|
#include <stddef.h> /* offsetof */
|
||||||
|
|
||||||
|
/*
|
||||||
|
restore pointer to the structure by a pointer to its field
|
||||||
|
*/
|
||||||
|
#define structof(p,t,f) ((t*)(- offsetof(t,f) + (char*)(p)))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* redefine for the target compiler
|
||||||
|
*/
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define static_inline static __inline
|
||||||
|
#else
|
||||||
|
#define static_inline static __inline__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
292
nestegg/include/nestegg/nestegg.h
Normal file
292
nestegg/include/nestegg/nestegg.h
Normal file
@@ -0,0 +1,292 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2010 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* This program is made available under an ISC-style license. See the
|
||||||
|
* accompanying file LICENSE for details.
|
||||||
|
*/
|
||||||
|
#ifndef NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79
|
||||||
|
#define NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79
|
||||||
|
|
||||||
|
#include "vpx/vpx_integer.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @mainpage
|
||||||
|
|
||||||
|
@section intro Introduction
|
||||||
|
|
||||||
|
This is the documentation fot the <tt>libnestegg</tt> C API.
|
||||||
|
<tt>libnestegg</tt> is a demultiplexing library for <a
|
||||||
|
href="http://www.matroska.org/">Matroska</a> and <a
|
||||||
|
href="http://www.webmproject.org/">WebMedia</a> media files.
|
||||||
|
|
||||||
|
@section example Example code
|
||||||
|
|
||||||
|
@code
|
||||||
|
nestegg * demux_ctx;
|
||||||
|
nestegg_init(&demux_ctx, io, NULL);
|
||||||
|
|
||||||
|
nestegg_packet * pkt;
|
||||||
|
while ((r = nestegg_read_packet(demux_ctx, &pkt)) > 0) {
|
||||||
|
unsigned int track;
|
||||||
|
|
||||||
|
nestegg_packet_track(pkt, &track);
|
||||||
|
|
||||||
|
// This example decodes the first track only.
|
||||||
|
if (track == 0) {
|
||||||
|
unsigned int chunk, chunks;
|
||||||
|
|
||||||
|
nestegg_packet_count(pkt, &chunks);
|
||||||
|
|
||||||
|
// Decode each chunk of data.
|
||||||
|
for (chunk = 0; chunk < chunks; ++chunk) {
|
||||||
|
unsigned char * data;
|
||||||
|
size_t data_size;
|
||||||
|
|
||||||
|
nestegg_packet_data(pkt, chunk, &data, &data_size);
|
||||||
|
|
||||||
|
example_codec_decode(codec_ctx, data, data_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nestegg_free_packet(pkt);
|
||||||
|
}
|
||||||
|
|
||||||
|
nestegg_destroy(demux_ctx);
|
||||||
|
@endcode
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @file
|
||||||
|
The <tt>libnestegg</tt> C API. */
|
||||||
|
|
||||||
|
#define NESTEGG_TRACK_VIDEO 0 /**< Track is of type video. */
|
||||||
|
#define NESTEGG_TRACK_AUDIO 1 /**< Track is of type audio. */
|
||||||
|
|
||||||
|
#define NESTEGG_CODEC_VP8 0 /**< Track uses Google On2 VP8 codec. */
|
||||||
|
#define NESTEGG_CODEC_VORBIS 1 /**< Track uses Xiph Vorbis codec. */
|
||||||
|
|
||||||
|
#define NESTEGG_SEEK_SET 0 /**< Seek offset relative to beginning of stream. */
|
||||||
|
#define NESTEGG_SEEK_CUR 1 /**< Seek offset relative to current position in stream. */
|
||||||
|
#define NESTEGG_SEEK_END 2 /**< Seek offset relative to end of stream. */
|
||||||
|
|
||||||
|
#define NESTEGG_LOG_DEBUG 1 /**< Debug level log message. */
|
||||||
|
#define NESTEGG_LOG_INFO 10 /**< Informational level log message. */
|
||||||
|
#define NESTEGG_LOG_WARNING 100 /**< Warning level log message. */
|
||||||
|
#define NESTEGG_LOG_ERROR 1000 /**< Error level log message. */
|
||||||
|
#define NESTEGG_LOG_CRITICAL 10000 /**< Critical level log message. */
|
||||||
|
|
||||||
|
typedef struct nestegg nestegg; /**< Opaque handle referencing the stream state. */
|
||||||
|
typedef struct nestegg_packet nestegg_packet; /**< Opaque handle referencing a packet of data. */
|
||||||
|
|
||||||
|
/** User supplied IO context. */
|
||||||
|
typedef struct {
|
||||||
|
/** User supplied read callback.
|
||||||
|
@param buffer Buffer to read data into.
|
||||||
|
@param length Length of supplied buffer in bytes.
|
||||||
|
@param userdata The #userdata supplied by the user.
|
||||||
|
@retval 1 Read succeeded.
|
||||||
|
@retval 0 End of stream.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int (* read)(void * buffer, size_t length, void * userdata);
|
||||||
|
|
||||||
|
/** User supplied seek callback.
|
||||||
|
@param offset Offset within the stream to seek to.
|
||||||
|
@param whence Seek direction. One of #NESTEGG_SEEK_SET,
|
||||||
|
#NESTEGG_SEEK_CUR, or #NESTEGG_SEEK_END.
|
||||||
|
@param userdata The #userdata supplied by the user.
|
||||||
|
@retval 0 Seek succeeded.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int (* seek)(int64_t offset, int whence, void * userdata);
|
||||||
|
|
||||||
|
/** User supplied tell callback.
|
||||||
|
@param userdata The #userdata supplied by the user.
|
||||||
|
@returns Current position within the stream.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int64_t (* tell)(void * userdata);
|
||||||
|
|
||||||
|
/** User supplied pointer to be passed to the IO callbacks. */
|
||||||
|
void * userdata;
|
||||||
|
} nestegg_io;
|
||||||
|
|
||||||
|
/** Parameters specific to a video track. */
|
||||||
|
typedef struct {
|
||||||
|
unsigned int width; /**< Width of the video frame in pixels. */
|
||||||
|
unsigned int height; /**< Height of the video frame in pixels. */
|
||||||
|
unsigned int display_width; /**< Display width of the video frame in pixels. */
|
||||||
|
unsigned int display_height; /**< Display height of the video frame in pixels. */
|
||||||
|
unsigned int crop_bottom; /**< Pixels to crop from the bottom of the frame. */
|
||||||
|
unsigned int crop_top; /**< Pixels to crop from the top of the frame. */
|
||||||
|
unsigned int crop_left; /**< Pixels to crop from the left of the frame. */
|
||||||
|
unsigned int crop_right; /**< Pixels to crop from the right of the frame. */
|
||||||
|
} nestegg_video_params;
|
||||||
|
|
||||||
|
/** Parameters specific to an audio track. */
|
||||||
|
typedef struct {
|
||||||
|
double rate; /**< Sampling rate in Hz. */
|
||||||
|
unsigned int channels; /**< Number of audio channels. */
|
||||||
|
unsigned int depth; /**< Bits per sample. */
|
||||||
|
} nestegg_audio_params;
|
||||||
|
|
||||||
|
/** Logging callback function pointer. */
|
||||||
|
typedef void (* nestegg_log)(nestegg * context, unsigned int severity, char const * format, ...);
|
||||||
|
|
||||||
|
/** Initialize a nestegg context. During initialization the parser will
|
||||||
|
read forward in the stream processing all elements until the first
|
||||||
|
block of media is reached. All track metadata has been processed at this point.
|
||||||
|
@param context Storage for the new nestegg context. @see nestegg_destroy
|
||||||
|
@param io User supplied IO context.
|
||||||
|
@param callback Optional logging callback function pointer. May be NULL.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_init(nestegg ** context, nestegg_io io, nestegg_log callback);
|
||||||
|
|
||||||
|
/** Destroy a nestegg context and free associated memory.
|
||||||
|
@param context #nestegg context to be freed. @see nestegg_init */
|
||||||
|
void nestegg_destroy(nestegg * context);
|
||||||
|
|
||||||
|
/** Query the duration of the media stream in nanoseconds.
|
||||||
|
@param context Stream context initialized by #nestegg_init.
|
||||||
|
@param duration Storage for the queried duration.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_duration(nestegg * context, uint64_t * duration);
|
||||||
|
|
||||||
|
/** Query the tstamp scale of the media stream in nanoseconds.
|
||||||
|
Timecodes presented by nestegg have been scaled by this value
|
||||||
|
before presentation to the caller.
|
||||||
|
@param context Stream context initialized by #nestegg_init.
|
||||||
|
@param scale Storage for the queried scale factor.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_tstamp_scale(nestegg * context, uint64_t * scale);
|
||||||
|
|
||||||
|
/** Query the number of tracks in the media stream.
|
||||||
|
@param context Stream context initialized by #nestegg_init.
|
||||||
|
@param tracks Storage for the queried track count.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_track_count(nestegg * context, unsigned int * tracks);
|
||||||
|
|
||||||
|
/** Seek @a track to @a tstamp. Stream seek will terminate at the earliest
|
||||||
|
key point in the stream at or before @a tstamp. Other tracks in the
|
||||||
|
stream will output packets with unspecified but nearby timestamps.
|
||||||
|
@param context Stream context initialized by #nestegg_init.
|
||||||
|
@param track Zero based track number.
|
||||||
|
@param tstamp Absolute timestamp in nanoseconds.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_track_seek(nestegg * context, unsigned int track, uint64_t tstamp);
|
||||||
|
|
||||||
|
/** Query the type specified by @a track.
|
||||||
|
@param context Stream context initialized by #nestegg_init.
|
||||||
|
@param track Zero based track number.
|
||||||
|
@retval #NESTEGG_TRACK_VIDEO Track type is video.
|
||||||
|
@retval #NESTEGG_TRACK_AUDIO Track type is audio.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_track_type(nestegg * context, unsigned int track);
|
||||||
|
|
||||||
|
/** Query the codec ID specified by @a track.
|
||||||
|
@param context Stream context initialized by #nestegg_init.
|
||||||
|
@param track Zero based track number.
|
||||||
|
@retval #NESTEGG_CODEC_VP8 Track codec is VP8.
|
||||||
|
@retval #NESTEGG_CODEC_VORBIS Track codec is Vorbis.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_track_codec_id(nestegg * context, unsigned int track);
|
||||||
|
|
||||||
|
/** Query the number of codec initialization chunks for @a track. Each
|
||||||
|
chunk of data should be passed to the codec initialization functions in
|
||||||
|
the order returned.
|
||||||
|
@param context Stream context initialized by #nestegg_init.
|
||||||
|
@param track Zero based track number.
|
||||||
|
@param count Storage for the queried chunk count.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_track_codec_data_count(nestegg * context, unsigned int track,
|
||||||
|
unsigned int * count);
|
||||||
|
|
||||||
|
/** Get a pointer to chunk number @a item of codec initialization data for
|
||||||
|
@a track.
|
||||||
|
@param context Stream context initialized by #nestegg_init.
|
||||||
|
@param track Zero based track number.
|
||||||
|
@param item Zero based chunk item number.
|
||||||
|
@param data Storage for the queried data pointer.
|
||||||
|
The data is owned by the #nestegg context.
|
||||||
|
@param length Storage for the queried data size.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_track_codec_data(nestegg * context, unsigned int track, unsigned int item,
|
||||||
|
unsigned char ** data, size_t * length);
|
||||||
|
|
||||||
|
/** Query the video parameters specified by @a track.
|
||||||
|
@param context Stream context initialized by #nestegg_init.
|
||||||
|
@param track Zero based track number.
|
||||||
|
@param params Storage for the queried video parameters.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_track_video_params(nestegg * context, unsigned int track,
|
||||||
|
nestegg_video_params * params);
|
||||||
|
|
||||||
|
/** Query the audio parameters specified by @a track.
|
||||||
|
@param context Stream context initialized by #nestegg_init.
|
||||||
|
@param track Zero based track number.
|
||||||
|
@param params Storage for the queried audio parameters.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_track_audio_params(nestegg * context, unsigned int track,
|
||||||
|
nestegg_audio_params * params);
|
||||||
|
|
||||||
|
/** Read a packet of media data. A packet consists of one or more chunks of
|
||||||
|
data associated with a single track. nestegg_read_packet should be
|
||||||
|
called in a loop while the return value is 1 to drive the stream parser
|
||||||
|
forward. @see nestegg_free_packet
|
||||||
|
@param context Context returned by #nestegg_init.
|
||||||
|
@param packet Storage for the returned nestegg_packet.
|
||||||
|
@retval 1 Additional packets may be read in subsequent calls.
|
||||||
|
@retval 0 End of stream.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_read_packet(nestegg * context, nestegg_packet ** packet);
|
||||||
|
|
||||||
|
/** Destroy a nestegg_packet and free associated memory.
|
||||||
|
@param packet #nestegg_packet to be freed. @see nestegg_read_packet */
|
||||||
|
void nestegg_free_packet(nestegg_packet * packet);
|
||||||
|
|
||||||
|
/** Query the track number of @a packet.
|
||||||
|
@param packet Packet initialized by #nestegg_read_packet.
|
||||||
|
@param track Storage for the queried zero based track index.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_packet_track(nestegg_packet * packet, unsigned int * track);
|
||||||
|
|
||||||
|
/** Query the time stamp in nanoseconds of @a packet.
|
||||||
|
@param packet Packet initialized by #nestegg_read_packet.
|
||||||
|
@param tstamp Storage for the queried timestamp in nanoseconds.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_packet_tstamp(nestegg_packet * packet, uint64_t * tstamp);
|
||||||
|
|
||||||
|
/** Query the number of data chunks contained in @a packet.
|
||||||
|
@param packet Packet initialized by #nestegg_read_packet.
|
||||||
|
@param count Storage for the queried timestamp in nanoseconds.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_packet_count(nestegg_packet * packet, unsigned int * count);
|
||||||
|
|
||||||
|
/** Get a pointer to chunk number @a item of packet data.
|
||||||
|
@param packet Packet initialized by #nestegg_read_packet.
|
||||||
|
@param item Zero based chunk item number.
|
||||||
|
@param data Storage for the queried data pointer.
|
||||||
|
The data is owned by the #nestegg_packet packet.
|
||||||
|
@param length Storage for the queried data size.
|
||||||
|
@retval 0 Success.
|
||||||
|
@retval -1 Error. */
|
||||||
|
int nestegg_packet_data(nestegg_packet * packet, unsigned int item,
|
||||||
|
unsigned char ** data, size_t * length);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* NESTEGG_671cac2a_365d_ed69_d7a3_4491d3538d79 */
|
43
nestegg/m4/as-ac-expand.m4
Normal file
43
nestegg/m4/as-ac-expand.m4
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
dnl as-ac-expand.m4 0.2.0
|
||||||
|
dnl autostars m4 macro for expanding directories using configure's prefix
|
||||||
|
dnl thomas@apestaart.org
|
||||||
|
|
||||||
|
dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR)
|
||||||
|
dnl example
|
||||||
|
dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir)
|
||||||
|
dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local
|
||||||
|
|
||||||
|
AC_DEFUN([AS_AC_EXPAND],
|
||||||
|
[
|
||||||
|
EXP_VAR=[$1]
|
||||||
|
FROM_VAR=[$2]
|
||||||
|
|
||||||
|
dnl first expand prefix and exec_prefix if necessary
|
||||||
|
prefix_save=$prefix
|
||||||
|
exec_prefix_save=$exec_prefix
|
||||||
|
|
||||||
|
dnl if no prefix given, then use /usr/local, the default prefix
|
||||||
|
if test "x$prefix" = "xNONE"; then
|
||||||
|
prefix="$ac_default_prefix"
|
||||||
|
fi
|
||||||
|
dnl if no exec_prefix given, then use prefix
|
||||||
|
if test "x$exec_prefix" = "xNONE"; then
|
||||||
|
exec_prefix=$prefix
|
||||||
|
fi
|
||||||
|
|
||||||
|
full_var="$FROM_VAR"
|
||||||
|
dnl loop until it doesn't change anymore
|
||||||
|
while true; do
|
||||||
|
new_full_var="`eval echo $full_var`"
|
||||||
|
if test "x$new_full_var" = "x$full_var"; then break; fi
|
||||||
|
full_var=$new_full_var
|
||||||
|
done
|
||||||
|
|
||||||
|
dnl clean up
|
||||||
|
full_var=$new_full_var
|
||||||
|
AC_SUBST([$1], "$full_var")
|
||||||
|
|
||||||
|
dnl restore prefix and exec_prefix
|
||||||
|
prefix=$prefix_save
|
||||||
|
exec_prefix=$exec_prefix_save
|
||||||
|
])
|
695
nestegg/m4/ax_create_stdint_h.m4
Normal file
695
nestegg/m4/ax_create_stdint_h.m4
Normal file
@@ -0,0 +1,695 @@
|
|||||||
|
dnl @synopsis AX_CREATE_STDINT_H [( HEADER-TO-GENERATE [, HEDERS-TO-CHECK])]
|
||||||
|
dnl
|
||||||
|
dnl the "ISO C9X: 7.18 Integer types <stdint.h>" section requires the
|
||||||
|
dnl existence of an include file <stdint.h> that defines a set of
|
||||||
|
dnl typedefs, especially uint8_t,int32_t,uintptr_t. Many older
|
||||||
|
dnl installations will not provide this file, but some will have the
|
||||||
|
dnl very same definitions in <inttypes.h>. In other enviroments we can
|
||||||
|
dnl use the inet-types in <sys/types.h> which would define the typedefs
|
||||||
|
dnl int8_t and u_int8_t respectivly.
|
||||||
|
dnl
|
||||||
|
dnl This macros will create a local "_stdint.h" or the headerfile given
|
||||||
|
dnl as an argument. In many cases that file will just "#include
|
||||||
|
dnl <stdint.h>" or "#include <inttypes.h>", while in other environments
|
||||||
|
dnl it will provide the set of basic 'stdint's definitions/typedefs:
|
||||||
|
dnl
|
||||||
|
dnl int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t
|
||||||
|
dnl int_least32_t.. int_fast32_t.. intmax_t
|
||||||
|
dnl
|
||||||
|
dnl which may or may not rely on the definitions of other files, or
|
||||||
|
dnl using the AC_CHECK_SIZEOF macro to determine the actual sizeof each
|
||||||
|
dnl type.
|
||||||
|
dnl
|
||||||
|
dnl if your header files require the stdint-types you will want to
|
||||||
|
dnl create an installable file mylib-int.h that all your other
|
||||||
|
dnl installable header may include. So if you have a library package
|
||||||
|
dnl named "mylib", just use
|
||||||
|
dnl
|
||||||
|
dnl AX_CREATE_STDINT_H(mylib-int.h)
|
||||||
|
dnl
|
||||||
|
dnl in configure.ac and go to install that very header file in
|
||||||
|
dnl Makefile.am along with the other headers (mylib.h) - and the
|
||||||
|
dnl mylib-specific headers can simply use "#include <mylib-int.h>" to
|
||||||
|
dnl obtain the stdint-types.
|
||||||
|
dnl
|
||||||
|
dnl Remember, if the system already had a valid <stdint.h>, the
|
||||||
|
dnl generated file will include it directly. No need for fuzzy
|
||||||
|
dnl HAVE_STDINT_H things... (oops, GCC 4.2.x has deliberatly disabled
|
||||||
|
dnl its stdint.h for non-c99 compilation and the c99-mode is not the
|
||||||
|
dnl default. Therefore this macro will not use the compiler's stdint.h
|
||||||
|
dnl - please complain to the GCC developers).
|
||||||
|
dnl
|
||||||
|
dnl @category C
|
||||||
|
dnl @author Guido U. Draheim <guidod@gmx.de>
|
||||||
|
dnl @version 2006-10-13
|
||||||
|
dnl @license GPLWithACException
|
||||||
|
|
||||||
|
AC_DEFUN([AX_CHECK_DATA_MODEL],[
|
||||||
|
AC_CHECK_SIZEOF(char)
|
||||||
|
AC_CHECK_SIZEOF(short)
|
||||||
|
AC_CHECK_SIZEOF(int)
|
||||||
|
AC_CHECK_SIZEOF(long)
|
||||||
|
AC_CHECK_SIZEOF(void*)
|
||||||
|
ac_cv_char_data_model=""
|
||||||
|
ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char"
|
||||||
|
ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short"
|
||||||
|
ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int"
|
||||||
|
ac_cv_long_data_model=""
|
||||||
|
ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int"
|
||||||
|
ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long"
|
||||||
|
ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp"
|
||||||
|
AC_MSG_CHECKING([data model])
|
||||||
|
case "$ac_cv_char_data_model/$ac_cv_long_data_model" in
|
||||||
|
122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;;
|
||||||
|
122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;;
|
||||||
|
122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;;
|
||||||
|
124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;;
|
||||||
|
124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;;
|
||||||
|
124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;;
|
||||||
|
124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;;
|
||||||
|
128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;;
|
||||||
|
128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;;
|
||||||
|
222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;;
|
||||||
|
333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;;
|
||||||
|
444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;;
|
||||||
|
666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;;
|
||||||
|
888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;;
|
||||||
|
222/*|333/*|444/*|666/*|888/*) :
|
||||||
|
ac_cv_data_model="iDSP" ; n="unusual dsptype" ;;
|
||||||
|
*) ac_cv_data_model="none" ; n="very unusual model" ;;
|
||||||
|
esac
|
||||||
|
AC_MSG_RESULT([$ac_cv_data_model ($ac_cv_long_data_model, $n)])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl AX_CHECK_HEADER_STDINT_X([HEADERLIST][,ACTION-IF])
|
||||||
|
AC_DEFUN([AX_CHECK_HEADER_STDINT_X],[
|
||||||
|
AC_CACHE_CHECK([for stdint uintptr_t], [ac_cv_header_stdint_x],[
|
||||||
|
ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h)
|
||||||
|
AC_MSG_RESULT([(..)])
|
||||||
|
for i in m4_ifval([$1],[$1],[stdint.h inttypes.h sys/inttypes.h sys/types.h])
|
||||||
|
do
|
||||||
|
unset ac_cv_type_uintptr_t
|
||||||
|
unset ac_cv_type_uint64_t
|
||||||
|
AC_CHECK_TYPE(uintptr_t,[ac_cv_header_stdint_x=$i],continue,[#include <$i>])
|
||||||
|
AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>])
|
||||||
|
m4_ifvaln([$1],[$1]) break
|
||||||
|
done
|
||||||
|
AC_MSG_CHECKING([for stdint uintptr_t])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([AX_CHECK_HEADER_STDINT_O],[
|
||||||
|
AC_CACHE_CHECK([for stdint uint32_t], [ac_cv_header_stdint_o],[
|
||||||
|
ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h)
|
||||||
|
AC_MSG_RESULT([(..)])
|
||||||
|
for i in m4_ifval([$1],[$1],[inttypes.h sys/inttypes.h sys/types.h stdint.h])
|
||||||
|
do
|
||||||
|
unset ac_cv_type_uint32_t
|
||||||
|
unset ac_cv_type_uint64_t
|
||||||
|
AC_CHECK_TYPE(uint32_t,[ac_cv_header_stdint_o=$i],continue,[#include <$i>])
|
||||||
|
AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>])
|
||||||
|
m4_ifvaln([$1],[$1]) break
|
||||||
|
break;
|
||||||
|
done
|
||||||
|
AC_MSG_CHECKING([for stdint uint32_t])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([AX_CHECK_HEADER_STDINT_U],[
|
||||||
|
AC_CACHE_CHECK([for stdint u_int32_t], [ac_cv_header_stdint_u],[
|
||||||
|
ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h)
|
||||||
|
AC_MSG_RESULT([(..)])
|
||||||
|
for i in m4_ifval([$1],[$1],[sys/types.h inttypes.h sys/inttypes.h]) ; do
|
||||||
|
unset ac_cv_type_u_int32_t
|
||||||
|
unset ac_cv_type_u_int64_t
|
||||||
|
AC_CHECK_TYPE(u_int32_t,[ac_cv_header_stdint_u=$i],continue,[#include <$i>])
|
||||||
|
AC_CHECK_TYPE(u_int64_t,[and64="/u_int64_t"],[and64=""],[#include<$i>])
|
||||||
|
m4_ifvaln([$1],[$1]) break
|
||||||
|
break;
|
||||||
|
done
|
||||||
|
AC_MSG_CHECKING([for stdint u_int32_t])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([AX_CREATE_STDINT_H],
|
||||||
|
[# ------ AX CREATE STDINT H -------------------------------------
|
||||||
|
AC_MSG_CHECKING([for stdint types])
|
||||||
|
ac_stdint_h=`echo ifelse($1, , _stdint.h, $1)`
|
||||||
|
# try to shortcircuit - if the default include path of the compiler
|
||||||
|
# can find a "stdint.h" header then we assume that all compilers can.
|
||||||
|
AC_CACHE_VAL([ac_cv_header_stdint_t],[
|
||||||
|
old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS=""
|
||||||
|
old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS=""
|
||||||
|
old_CFLAGS="$CFLAGS" ; CFLAGS=""
|
||||||
|
AC_TRY_COMPILE([#include <stdint.h>],[int_least32_t v = 0;],
|
||||||
|
[ac_cv_stdint_result="(assuming C99 compatible system)"
|
||||||
|
ac_cv_header_stdint_t="stdint.h"; ],
|
||||||
|
[ac_cv_header_stdint_t=""])
|
||||||
|
if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then
|
||||||
|
CFLAGS="-std=c99"
|
||||||
|
AC_TRY_COMPILE([#include <stdint.h>],[int_least32_t v = 0;],
|
||||||
|
[AC_MSG_WARN(your GCC compiler has a defunct stdint.h for its default-mode)])
|
||||||
|
fi
|
||||||
|
CXXFLAGS="$old_CXXFLAGS"
|
||||||
|
CPPFLAGS="$old_CPPFLAGS"
|
||||||
|
CFLAGS="$old_CFLAGS" ])
|
||||||
|
|
||||||
|
v="... $ac_cv_header_stdint_h"
|
||||||
|
if test "$ac_stdint_h" = "stdint.h" ; then
|
||||||
|
AC_MSG_RESULT([(are you sure you want them in ./stdint.h?)])
|
||||||
|
elif test "$ac_stdint_h" = "inttypes.h" ; then
|
||||||
|
AC_MSG_RESULT([(are you sure you want them in ./inttypes.h?)])
|
||||||
|
elif test "_$ac_cv_header_stdint_t" = "_" ; then
|
||||||
|
AC_MSG_RESULT([(putting them into $ac_stdint_h)$v])
|
||||||
|
else
|
||||||
|
ac_cv_header_stdint="$ac_cv_header_stdint_t"
|
||||||
|
AC_MSG_RESULT([$ac_cv_header_stdint (shortcircuit)])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit..
|
||||||
|
|
||||||
|
dnl .....intro message done, now do a few system checks.....
|
||||||
|
dnl btw, all old CHECK_TYPE macros do automatically "DEFINE" a type,
|
||||||
|
dnl therefore we use the autoconf implementation detail CHECK_TYPE_NEW
|
||||||
|
dnl instead that is triggered with 3 or more arguments (see types.m4)
|
||||||
|
|
||||||
|
inttype_headers=`echo $2 | sed -e 's/,/ /g'`
|
||||||
|
|
||||||
|
ac_cv_stdint_result="(no helpful system typedefs seen)"
|
||||||
|
AX_CHECK_HEADER_STDINT_X(dnl
|
||||||
|
stdint.h inttypes.h sys/inttypes.h $inttype_headers,
|
||||||
|
ac_cv_stdint_result="(seen uintptr_t$and64 in $i)")
|
||||||
|
|
||||||
|
if test "_$ac_cv_header_stdint_x" = "_" ; then
|
||||||
|
AX_CHECK_HEADER_STDINT_O(dnl,
|
||||||
|
inttypes.h sys/inttypes.h stdint.h $inttype_headers,
|
||||||
|
ac_cv_stdint_result="(seen uint32_t$and64 in $i)")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "_$ac_cv_header_stdint_x" = "_" ; then
|
||||||
|
if test "_$ac_cv_header_stdint_o" = "_" ; then
|
||||||
|
AX_CHECK_HEADER_STDINT_U(dnl,
|
||||||
|
sys/types.h inttypes.h sys/inttypes.h $inttype_headers,
|
||||||
|
ac_cv_stdint_result="(seen u_int32_t$and64 in $i)")
|
||||||
|
fi fi
|
||||||
|
|
||||||
|
dnl if there was no good C99 header file, do some typedef checks...
|
||||||
|
if test "_$ac_cv_header_stdint_x" = "_" ; then
|
||||||
|
AC_MSG_CHECKING([for stdint datatype model])
|
||||||
|
AC_MSG_RESULT([(..)])
|
||||||
|
AX_CHECK_DATA_MODEL
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "_$ac_cv_header_stdint_x" != "_" ; then
|
||||||
|
ac_cv_header_stdint="$ac_cv_header_stdint_x"
|
||||||
|
elif test "_$ac_cv_header_stdint_o" != "_" ; then
|
||||||
|
ac_cv_header_stdint="$ac_cv_header_stdint_o"
|
||||||
|
elif test "_$ac_cv_header_stdint_u" != "_" ; then
|
||||||
|
ac_cv_header_stdint="$ac_cv_header_stdint_u"
|
||||||
|
else
|
||||||
|
ac_cv_header_stdint="stddef.h"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([for extra inttypes in chosen header])
|
||||||
|
AC_MSG_RESULT([($ac_cv_header_stdint)])
|
||||||
|
dnl see if int_least and int_fast types are present in _this_ header.
|
||||||
|
unset ac_cv_type_int_least32_t
|
||||||
|
unset ac_cv_type_int_fast32_t
|
||||||
|
AC_CHECK_TYPE(int_least32_t,,,[#include <$ac_cv_header_stdint>])
|
||||||
|
AC_CHECK_TYPE(int_fast32_t,,,[#include<$ac_cv_header_stdint>])
|
||||||
|
AC_CHECK_TYPE(intmax_t,,,[#include <$ac_cv_header_stdint>])
|
||||||
|
|
||||||
|
fi # shortcircut to system "stdint.h"
|
||||||
|
# ------------------ PREPARE VARIABLES ------------------------------
|
||||||
|
if test "$GCC" = "yes" ; then
|
||||||
|
ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1`
|
||||||
|
else
|
||||||
|
ac_cv_stdint_message="using $CC"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_RESULT([make use of $ac_cv_header_stdint in $ac_stdint_h dnl
|
||||||
|
$ac_cv_stdint_result])
|
||||||
|
|
||||||
|
dnl -----------------------------------------------------------------
|
||||||
|
# ----------------- DONE inttypes.h checks START header -------------
|
||||||
|
AC_CONFIG_COMMANDS([$ac_stdint_h],[
|
||||||
|
AC_MSG_NOTICE(creating $ac_stdint_h : $_ac_stdint_h)
|
||||||
|
ac_stdint=$tmp/_stdint.h
|
||||||
|
|
||||||
|
echo "#ifndef" $_ac_stdint_h >$ac_stdint
|
||||||
|
echo "#define" $_ac_stdint_h "1" >>$ac_stdint
|
||||||
|
echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint
|
||||||
|
echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint
|
||||||
|
echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint
|
||||||
|
if test "_$ac_cv_header_stdint_t" != "_" ; then
|
||||||
|
echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint
|
||||||
|
echo "#include <stdint.h>" >>$ac_stdint
|
||||||
|
echo "#endif" >>$ac_stdint
|
||||||
|
echo "#endif" >>$ac_stdint
|
||||||
|
else
|
||||||
|
|
||||||
|
cat >>$ac_stdint <<STDINT_EOF
|
||||||
|
|
||||||
|
/* ................... shortcircuit part ........................... */
|
||||||
|
|
||||||
|
#if defined HAVE_STDINT_H || defined _STDINT_HAVE_STDINT_H
|
||||||
|
#include <stdint.h>
|
||||||
|
#else
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/* .................... configured part ............................ */
|
||||||
|
|
||||||
|
STDINT_EOF
|
||||||
|
|
||||||
|
echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint
|
||||||
|
if test "_$ac_cv_header_stdint_x" != "_" ; then
|
||||||
|
ac_header="$ac_cv_header_stdint_x"
|
||||||
|
echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint
|
||||||
|
else
|
||||||
|
echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint
|
||||||
|
if test "_$ac_cv_header_stdint_o" != "_" ; then
|
||||||
|
ac_header="$ac_cv_header_stdint_o"
|
||||||
|
echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint
|
||||||
|
else
|
||||||
|
echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint
|
||||||
|
if test "_$ac_cv_header_stdint_u" != "_" ; then
|
||||||
|
ac_header="$ac_cv_header_stdint_u"
|
||||||
|
echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint
|
||||||
|
else
|
||||||
|
echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "" >>$ac_stdint
|
||||||
|
|
||||||
|
if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then
|
||||||
|
echo "#include <$ac_header>" >>$ac_stdint
|
||||||
|
echo "" >>$ac_stdint
|
||||||
|
fi fi
|
||||||
|
|
||||||
|
echo "/* which 64bit typedef has been found */" >>$ac_stdint
|
||||||
|
if test "$ac_cv_type_uint64_t" = "yes" ; then
|
||||||
|
echo "#define _STDINT_HAVE_UINT64_T" "1" >>$ac_stdint
|
||||||
|
else
|
||||||
|
echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint
|
||||||
|
fi
|
||||||
|
if test "$ac_cv_type_u_int64_t" = "yes" ; then
|
||||||
|
echo "#define _STDINT_HAVE_U_INT64_T" "1" >>$ac_stdint
|
||||||
|
else
|
||||||
|
echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint
|
||||||
|
fi
|
||||||
|
echo "" >>$ac_stdint
|
||||||
|
|
||||||
|
echo "/* which type model has been detected */" >>$ac_stdint
|
||||||
|
if test "_$ac_cv_char_data_model" != "_" ; then
|
||||||
|
echo "#define _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint
|
||||||
|
echo "#define _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint
|
||||||
|
else
|
||||||
|
echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint
|
||||||
|
echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint
|
||||||
|
fi
|
||||||
|
echo "" >>$ac_stdint
|
||||||
|
|
||||||
|
echo "/* whether int_least types were detected */" >>$ac_stdint
|
||||||
|
if test "$ac_cv_type_int_least32_t" = "yes"; then
|
||||||
|
echo "#define _STDINT_HAVE_INT_LEAST32_T" "1" >>$ac_stdint
|
||||||
|
else
|
||||||
|
echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint
|
||||||
|
fi
|
||||||
|
echo "/* whether int_fast types were detected */" >>$ac_stdint
|
||||||
|
if test "$ac_cv_type_int_fast32_t" = "yes"; then
|
||||||
|
echo "#define _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint
|
||||||
|
else
|
||||||
|
echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint
|
||||||
|
fi
|
||||||
|
echo "/* whether intmax_t type was detected */" >>$ac_stdint
|
||||||
|
if test "$ac_cv_type_intmax_t" = "yes"; then
|
||||||
|
echo "#define _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint
|
||||||
|
else
|
||||||
|
echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint
|
||||||
|
fi
|
||||||
|
echo "" >>$ac_stdint
|
||||||
|
|
||||||
|
cat >>$ac_stdint <<STDINT_EOF
|
||||||
|
/* .................... detections part ............................ */
|
||||||
|
|
||||||
|
/* whether we need to define bitspecific types from compiler base types */
|
||||||
|
#ifndef _STDINT_HEADER_INTPTR
|
||||||
|
#ifndef _STDINT_HEADER_UINT32
|
||||||
|
#ifndef _STDINT_HEADER_U_INT32
|
||||||
|
#define _STDINT_NEED_INT_MODEL_T
|
||||||
|
#else
|
||||||
|
#define _STDINT_HAVE_U_INT_TYPES
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _STDINT_HAVE_U_INT_TYPES
|
||||||
|
#undef _STDINT_NEED_INT_MODEL_T
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _STDINT_CHAR_MODEL
|
||||||
|
#if _STDINT_CHAR_MODEL+0 == 122 || _STDINT_CHAR_MODEL+0 == 124
|
||||||
|
#ifndef _STDINT_BYTE_MODEL
|
||||||
|
#define _STDINT_BYTE_MODEL 12
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _STDINT_HAVE_INT_LEAST32_T
|
||||||
|
#define _STDINT_NEED_INT_LEAST_T
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _STDINT_HAVE_INT_FAST32_T
|
||||||
|
#define _STDINT_NEED_INT_FAST_T
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _STDINT_HEADER_INTPTR
|
||||||
|
#define _STDINT_NEED_INTPTR_T
|
||||||
|
#ifndef _STDINT_HAVE_INTMAX_T
|
||||||
|
#define _STDINT_NEED_INTMAX_T
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* .................... definition part ............................ */
|
||||||
|
|
||||||
|
/* some system headers have good uint64_t */
|
||||||
|
#ifndef _HAVE_UINT64_T
|
||||||
|
#if defined _STDINT_HAVE_UINT64_T || defined HAVE_UINT64_T
|
||||||
|
#define _HAVE_UINT64_T
|
||||||
|
#elif defined _STDINT_HAVE_U_INT64_T || defined HAVE_U_INT64_T
|
||||||
|
#define _HAVE_UINT64_T
|
||||||
|
typedef u_int64_t uint64_t;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _HAVE_UINT64_T
|
||||||
|
/* .. here are some common heuristics using compiler runtime specifics */
|
||||||
|
#if defined __STDC_VERSION__ && defined __STDC_VERSION__ >= 199901L
|
||||||
|
#define _HAVE_UINT64_T
|
||||||
|
#define _HAVE_LONGLONG_UINT64_T
|
||||||
|
typedef long long int64_t;
|
||||||
|
typedef unsigned long long uint64_t;
|
||||||
|
|
||||||
|
#elif !defined __STRICT_ANSI__
|
||||||
|
#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__
|
||||||
|
#define _HAVE_UINT64_T
|
||||||
|
typedef __int64 int64_t;
|
||||||
|
typedef unsigned __int64 uint64_t;
|
||||||
|
|
||||||
|
#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__
|
||||||
|
/* note: all ELF-systems seem to have loff-support which needs 64-bit */
|
||||||
|
#if !defined _NO_LONGLONG
|
||||||
|
#define _HAVE_UINT64_T
|
||||||
|
#define _HAVE_LONGLONG_UINT64_T
|
||||||
|
typedef long long int64_t;
|
||||||
|
typedef unsigned long long uint64_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif defined __alpha || (defined __mips && defined _ABIN32)
|
||||||
|
#if !defined _NO_LONGLONG
|
||||||
|
typedef long int64_t;
|
||||||
|
typedef unsigned long uint64_t;
|
||||||
|
#endif
|
||||||
|
/* compiler/cpu type to define int64_t */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined _STDINT_HAVE_U_INT_TYPES
|
||||||
|
/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */
|
||||||
|
typedef u_int8_t uint8_t;
|
||||||
|
typedef u_int16_t uint16_t;
|
||||||
|
typedef u_int32_t uint32_t;
|
||||||
|
|
||||||
|
/* glibc compatibility */
|
||||||
|
#ifndef __int8_t_defined
|
||||||
|
#define __int8_t_defined
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _STDINT_NEED_INT_MODEL_T
|
||||||
|
/* we must guess all the basic types. Apart from byte-adressable system, */
|
||||||
|
/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */
|
||||||
|
/* (btw, those nibble-addressable systems are way off, or so we assume) */
|
||||||
|
|
||||||
|
dnl /* have a look at "64bit and data size neutrality" at */
|
||||||
|
dnl /* http://unix.org/version2/whatsnew/login_64bit.html */
|
||||||
|
dnl /* (the shorthand "ILP" types always have a "P" part) */
|
||||||
|
|
||||||
|
#if defined _STDINT_BYTE_MODEL
|
||||||
|
#if _STDINT_LONG_MODEL+0 == 242
|
||||||
|
/* 2:4:2 = IP16 = a normal 16-bit system */
|
||||||
|
typedef unsigned char uint8_t;
|
||||||
|
typedef unsigned short uint16_t;
|
||||||
|
typedef unsigned long uint32_t;
|
||||||
|
#ifndef __int8_t_defined
|
||||||
|
#define __int8_t_defined
|
||||||
|
typedef char int8_t;
|
||||||
|
typedef short int16_t;
|
||||||
|
typedef long int32_t;
|
||||||
|
#endif
|
||||||
|
#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444
|
||||||
|
/* 2:4:4 = LP32 = a 32-bit system derived from a 16-bit */
|
||||||
|
/* 4:4:4 = ILP32 = a normal 32-bit system */
|
||||||
|
typedef unsigned char uint8_t;
|
||||||
|
typedef unsigned short uint16_t;
|
||||||
|
typedef unsigned int uint32_t;
|
||||||
|
#ifndef __int8_t_defined
|
||||||
|
#define __int8_t_defined
|
||||||
|
typedef char int8_t;
|
||||||
|
typedef short int16_t;
|
||||||
|
typedef int int32_t;
|
||||||
|
#endif
|
||||||
|
#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488
|
||||||
|
/* 4:8:4 = IP32 = a 32-bit system prepared for 64-bit */
|
||||||
|
/* 4:8:8 = LP64 = a normal 64-bit system */
|
||||||
|
typedef unsigned char uint8_t;
|
||||||
|
typedef unsigned short uint16_t;
|
||||||
|
typedef unsigned int uint32_t;
|
||||||
|
#ifndef __int8_t_defined
|
||||||
|
#define __int8_t_defined
|
||||||
|
typedef char int8_t;
|
||||||
|
typedef short int16_t;
|
||||||
|
typedef int int32_t;
|
||||||
|
#endif
|
||||||
|
/* this system has a "long" of 64bit */
|
||||||
|
#ifndef _HAVE_UINT64_T
|
||||||
|
#define _HAVE_UINT64_T
|
||||||
|
typedef unsigned long uint64_t;
|
||||||
|
typedef long int64_t;
|
||||||
|
#endif
|
||||||
|
#elif _STDINT_LONG_MODEL+0 == 448
|
||||||
|
/* LLP64 a 64-bit system derived from a 32-bit system */
|
||||||
|
typedef unsigned char uint8_t;
|
||||||
|
typedef unsigned short uint16_t;
|
||||||
|
typedef unsigned int uint32_t;
|
||||||
|
#ifndef __int8_t_defined
|
||||||
|
#define __int8_t_defined
|
||||||
|
typedef char int8_t;
|
||||||
|
typedef short int16_t;
|
||||||
|
typedef int int32_t;
|
||||||
|
#endif
|
||||||
|
/* assuming the system has a "long long" */
|
||||||
|
#ifndef _HAVE_UINT64_T
|
||||||
|
#define _HAVE_UINT64_T
|
||||||
|
#define _HAVE_LONGLONG_UINT64_T
|
||||||
|
typedef unsigned long long uint64_t;
|
||||||
|
typedef long long int64_t;
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define _STDINT_NO_INT32_T
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define _STDINT_NO_INT8_T
|
||||||
|
#define _STDINT_NO_INT32_T
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* quote from SunOS-5.8 sys/inttypes.h:
|
||||||
|
* Use at your own risk. As of February 1996, the committee is squarely
|
||||||
|
* behind the fixed sized types; the "least" and "fast" types are still being
|
||||||
|
* discussed. The probability that the "fast" types may be removed before
|
||||||
|
* the standard is finalized is high enough that they are not currently
|
||||||
|
* implemented.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined _STDINT_NEED_INT_LEAST_T
|
||||||
|
typedef int8_t int_least8_t;
|
||||||
|
typedef int16_t int_least16_t;
|
||||||
|
typedef int32_t int_least32_t;
|
||||||
|
#ifdef _HAVE_UINT64_T
|
||||||
|
typedef int64_t int_least64_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef uint8_t uint_least8_t;
|
||||||
|
typedef uint16_t uint_least16_t;
|
||||||
|
typedef uint32_t uint_least32_t;
|
||||||
|
#ifdef _HAVE_UINT64_T
|
||||||
|
typedef uint64_t uint_least64_t;
|
||||||
|
#endif
|
||||||
|
/* least types */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined _STDINT_NEED_INT_FAST_T
|
||||||
|
typedef int8_t int_fast8_t;
|
||||||
|
typedef int int_fast16_t;
|
||||||
|
typedef int32_t int_fast32_t;
|
||||||
|
#ifdef _HAVE_UINT64_T
|
||||||
|
typedef int64_t int_fast64_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef uint8_t uint_fast8_t;
|
||||||
|
typedef unsigned uint_fast16_t;
|
||||||
|
typedef uint32_t uint_fast32_t;
|
||||||
|
#ifdef _HAVE_UINT64_T
|
||||||
|
typedef uint64_t uint_fast64_t;
|
||||||
|
#endif
|
||||||
|
/* fast types */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _STDINT_NEED_INTMAX_T
|
||||||
|
#ifdef _HAVE_UINT64_T
|
||||||
|
typedef int64_t intmax_t;
|
||||||
|
typedef uint64_t uintmax_t;
|
||||||
|
#else
|
||||||
|
typedef long intmax_t;
|
||||||
|
typedef unsigned long uintmax_t;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _STDINT_NEED_INTPTR_T
|
||||||
|
#ifndef __intptr_t_defined
|
||||||
|
#define __intptr_t_defined
|
||||||
|
/* we encourage using "long" to store pointer values, never use "int" ! */
|
||||||
|
#if _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484
|
||||||
|
typedef unsigned int uintptr_t;
|
||||||
|
typedef int intptr_t;
|
||||||
|
#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444
|
||||||
|
typedef unsigned long uintptr_t;
|
||||||
|
typedef long intptr_t;
|
||||||
|
#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T
|
||||||
|
typedef uint64_t uintptr_t;
|
||||||
|
typedef int64_t intptr_t;
|
||||||
|
#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */
|
||||||
|
typedef unsigned long uintptr_t;
|
||||||
|
typedef long intptr_t;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The ISO C99 standard specifies that in C++ implementations these
|
||||||
|
should only be defined if explicitly requested. */
|
||||||
|
#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
|
||||||
|
#ifndef UINT32_C
|
||||||
|
|
||||||
|
/* Signed. */
|
||||||
|
# define INT8_C(c) c
|
||||||
|
# define INT16_C(c) c
|
||||||
|
# define INT32_C(c) c
|
||||||
|
# ifdef _HAVE_LONGLONG_UINT64_T
|
||||||
|
# define INT64_C(c) c ## L
|
||||||
|
# else
|
||||||
|
# define INT64_C(c) c ## LL
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* Unsigned. */
|
||||||
|
# define UINT8_C(c) c ## U
|
||||||
|
# define UINT16_C(c) c ## U
|
||||||
|
# define UINT32_C(c) c ## U
|
||||||
|
# ifdef _HAVE_LONGLONG_UINT64_T
|
||||||
|
# define UINT64_C(c) c ## UL
|
||||||
|
# else
|
||||||
|
# define UINT64_C(c) c ## ULL
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* Maximal type. */
|
||||||
|
# ifdef _HAVE_LONGLONG_UINT64_T
|
||||||
|
# define INTMAX_C(c) c ## L
|
||||||
|
# define UINTMAX_C(c) c ## UL
|
||||||
|
# else
|
||||||
|
# define INTMAX_C(c) c ## LL
|
||||||
|
# define UINTMAX_C(c) c ## ULL
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* literalnumbers */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* These limits are merily those of a two complement byte-oriented system */
|
||||||
|
|
||||||
|
/* Minimum of signed integral types. */
|
||||||
|
# define INT8_MIN (-128)
|
||||||
|
# define INT16_MIN (-32767-1)
|
||||||
|
# define INT32_MIN (-2147483647-1)
|
||||||
|
# define INT64_MIN (-__INT64_C(9223372036854775807)-1)
|
||||||
|
/* Maximum of signed integral types. */
|
||||||
|
# define INT8_MAX (127)
|
||||||
|
# define INT16_MAX (32767)
|
||||||
|
# define INT32_MAX (2147483647)
|
||||||
|
# define INT64_MAX (__INT64_C(9223372036854775807))
|
||||||
|
|
||||||
|
/* Maximum of unsigned integral types. */
|
||||||
|
# define UINT8_MAX (255)
|
||||||
|
# define UINT16_MAX (65535)
|
||||||
|
# define UINT32_MAX (4294967295U)
|
||||||
|
# define UINT64_MAX (__UINT64_C(18446744073709551615))
|
||||||
|
|
||||||
|
/* Minimum of signed integral types having a minimum size. */
|
||||||
|
# define INT_LEAST8_MIN INT8_MIN
|
||||||
|
# define INT_LEAST16_MIN INT16_MIN
|
||||||
|
# define INT_LEAST32_MIN INT32_MIN
|
||||||
|
# define INT_LEAST64_MIN INT64_MIN
|
||||||
|
/* Maximum of signed integral types having a minimum size. */
|
||||||
|
# define INT_LEAST8_MAX INT8_MAX
|
||||||
|
# define INT_LEAST16_MAX INT16_MAX
|
||||||
|
# define INT_LEAST32_MAX INT32_MAX
|
||||||
|
# define INT_LEAST64_MAX INT64_MAX
|
||||||
|
|
||||||
|
/* Maximum of unsigned integral types having a minimum size. */
|
||||||
|
# define UINT_LEAST8_MAX UINT8_MAX
|
||||||
|
# define UINT_LEAST16_MAX UINT16_MAX
|
||||||
|
# define UINT_LEAST32_MAX UINT32_MAX
|
||||||
|
# define UINT_LEAST64_MAX UINT64_MAX
|
||||||
|
|
||||||
|
/* shortcircuit*/
|
||||||
|
#endif
|
||||||
|
/* once */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
STDINT_EOF
|
||||||
|
fi
|
||||||
|
if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then
|
||||||
|
AC_MSG_NOTICE([$ac_stdint_h is unchanged])
|
||||||
|
else
|
||||||
|
ac_dir=`AS_DIRNAME(["$ac_stdint_h"])`
|
||||||
|
AS_MKDIR_P(["$ac_dir"])
|
||||||
|
rm -f $ac_stdint_h
|
||||||
|
mv $ac_stdint $ac_stdint_h
|
||||||
|
fi
|
||||||
|
],[# variables for create stdint.h replacement
|
||||||
|
PACKAGE="$PACKAGE"
|
||||||
|
VERSION="$VERSION"
|
||||||
|
ac_stdint_h="$ac_stdint_h"
|
||||||
|
_ac_stdint_h=AS_TR_CPP(_$PACKAGE-$ac_stdint_h)
|
||||||
|
ac_cv_stdint_message="$ac_cv_stdint_message"
|
||||||
|
ac_cv_header_stdint_t="$ac_cv_header_stdint_t"
|
||||||
|
ac_cv_header_stdint_x="$ac_cv_header_stdint_x"
|
||||||
|
ac_cv_header_stdint_o="$ac_cv_header_stdint_o"
|
||||||
|
ac_cv_header_stdint_u="$ac_cv_header_stdint_u"
|
||||||
|
ac_cv_type_uint64_t="$ac_cv_type_uint64_t"
|
||||||
|
ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t"
|
||||||
|
ac_cv_char_data_model="$ac_cv_char_data_model"
|
||||||
|
ac_cv_long_data_model="$ac_cv_long_data_model"
|
||||||
|
ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t"
|
||||||
|
ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t"
|
||||||
|
ac_cv_type_intmax_t="$ac_cv_type_intmax_t"
|
||||||
|
])
|
||||||
|
])
|
157
nestegg/m4/pkg.m4
Normal file
157
nestegg/m4/pkg.m4
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
|
||||||
|
#
|
||||||
|
# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
|
||||||
|
#
|
||||||
|
# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
# PKG_PROG_PKG_CONFIG([MIN-VERSION])
|
||||||
|
# ----------------------------------
|
||||||
|
AC_DEFUN([PKG_PROG_PKG_CONFIG],
|
||||||
|
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
|
||||||
|
m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
|
||||||
|
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
|
||||||
|
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
|
||||||
|
AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
|
||||||
|
fi
|
||||||
|
if test -n "$PKG_CONFIG"; then
|
||||||
|
_pkg_min_version=m4_default([$1], [0.9.0])
|
||||||
|
AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
|
||||||
|
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
PKG_CONFIG=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi[]dnl
|
||||||
|
])# PKG_PROG_PKG_CONFIG
|
||||||
|
|
||||||
|
# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||||
|
#
|
||||||
|
# Check to see whether a particular set of modules exists. Similar
|
||||||
|
# to PKG_CHECK_MODULES(), but does not set variables or print errors.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Similar to PKG_CHECK_MODULES, make sure that the first instance of
|
||||||
|
# this or PKG_CHECK_MODULES is called, or make sure to call
|
||||||
|
# PKG_CHECK_EXISTS manually
|
||||||
|
# --------------------------------------------------------------
|
||||||
|
AC_DEFUN([PKG_CHECK_EXISTS],
|
||||||
|
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||||
|
if test -n "$PKG_CONFIG" && \
|
||||||
|
AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
|
||||||
|
m4_ifval([$2], [$2], [:])
|
||||||
|
m4_ifvaln([$3], [else
|
||||||
|
$3])dnl
|
||||||
|
fi])
|
||||||
|
|
||||||
|
|
||||||
|
# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
|
||||||
|
# ---------------------------------------------
|
||||||
|
m4_define([_PKG_CONFIG],
|
||||||
|
[if test -n "$PKG_CONFIG"; then
|
||||||
|
if test -n "$$1"; then
|
||||||
|
pkg_cv_[]$1="$$1"
|
||||||
|
else
|
||||||
|
PKG_CHECK_EXISTS([$3],
|
||||||
|
[pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
|
||||||
|
[pkg_failed=yes])
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
pkg_failed=untried
|
||||||
|
fi[]dnl
|
||||||
|
])# _PKG_CONFIG
|
||||||
|
|
||||||
|
# _PKG_SHORT_ERRORS_SUPPORTED
|
||||||
|
# -----------------------------
|
||||||
|
AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
|
||||||
|
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
|
||||||
|
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
|
||||||
|
_pkg_short_errors_supported=yes
|
||||||
|
else
|
||||||
|
_pkg_short_errors_supported=no
|
||||||
|
fi[]dnl
|
||||||
|
])# _PKG_SHORT_ERRORS_SUPPORTED
|
||||||
|
|
||||||
|
|
||||||
|
# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
|
||||||
|
# [ACTION-IF-NOT-FOUND])
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Note that if there is a possibility the first call to
|
||||||
|
# PKG_CHECK_MODULES might not happen, you should be sure to include an
|
||||||
|
# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# --------------------------------------------------------------
|
||||||
|
AC_DEFUN([PKG_CHECK_MODULES],
|
||||||
|
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||||
|
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
|
||||||
|
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
|
||||||
|
|
||||||
|
pkg_failed=no
|
||||||
|
AC_MSG_CHECKING([for $1])
|
||||||
|
|
||||||
|
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
|
||||||
|
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
|
||||||
|
|
||||||
|
m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
|
||||||
|
and $1[]_LIBS to avoid the need to call pkg-config.
|
||||||
|
See the pkg-config man page for more details.])
|
||||||
|
|
||||||
|
if test $pkg_failed = yes; then
|
||||||
|
_PKG_SHORT_ERRORS_SUPPORTED
|
||||||
|
if test $_pkg_short_errors_supported = yes; then
|
||||||
|
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
|
||||||
|
else
|
||||||
|
$1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
|
||||||
|
fi
|
||||||
|
# Put the nasty error message in config.log where it belongs
|
||||||
|
echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
|
||||||
|
|
||||||
|
ifelse([$4], , [AC_MSG_ERROR(dnl
|
||||||
|
[Package requirements ($2) were not met:
|
||||||
|
|
||||||
|
$$1_PKG_ERRORS
|
||||||
|
|
||||||
|
Consider adjusting the PKG_CONFIG_PATH environment variable if you
|
||||||
|
installed software in a non-standard prefix.
|
||||||
|
|
||||||
|
_PKG_TEXT
|
||||||
|
])],
|
||||||
|
[AC_MSG_RESULT([no])
|
||||||
|
$4])
|
||||||
|
elif test $pkg_failed = untried; then
|
||||||
|
ifelse([$4], , [AC_MSG_FAILURE(dnl
|
||||||
|
[The pkg-config script could not be found or is too old. Make sure it
|
||||||
|
is in your PATH or set the PKG_CONFIG environment variable to the full
|
||||||
|
path to pkg-config.
|
||||||
|
|
||||||
|
_PKG_TEXT
|
||||||
|
|
||||||
|
To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
|
||||||
|
[$4])
|
||||||
|
else
|
||||||
|
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
|
||||||
|
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
ifelse([$3], , :, [$3])
|
||||||
|
fi[]dnl
|
||||||
|
])# PKG_CHECK_MODULES
|
13
nestegg/nestegg-uninstalled.pc.in
Normal file
13
nestegg/nestegg-uninstalled.pc.in
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# nestegg uninstalled pkg-config file
|
||||||
|
|
||||||
|
prefix=@prefix@
|
||||||
|
exec_prefix=@exec_prefix@
|
||||||
|
libdir=@libdir@
|
||||||
|
includedir=@includedir@
|
||||||
|
|
||||||
|
Name: nestegg
|
||||||
|
Description: WebM/Matroska demuxer
|
||||||
|
Version: @VERSION@
|
||||||
|
Conflicts:
|
||||||
|
Libs: -L${libdir} -lnestegg
|
||||||
|
Cflags: -I${includedir}
|
13
nestegg/nestegg.pc.in
Normal file
13
nestegg/nestegg.pc.in
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# nestegg installed pkg-config file
|
||||||
|
|
||||||
|
prefix=@prefix@
|
||||||
|
exec_prefix=@exec_prefix@
|
||||||
|
libdir=@libdir@
|
||||||
|
includedir=@includedir@
|
||||||
|
|
||||||
|
Name: nestegg
|
||||||
|
Description: WebM/Matroska demuxer
|
||||||
|
Version: @VERSION@
|
||||||
|
Conflicts:
|
||||||
|
Libs: -L${libdir} -lnestegg
|
||||||
|
Cflags: -I${includedir}
|
1938
nestegg/src/nestegg.c
Normal file
1938
nestegg/src/nestegg.c
Normal file
File diff suppressed because it is too large
Load Diff
248
nestegg/test/test.c
Normal file
248
nestegg/test/test.c
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2010 Mozilla Foundation
|
||||||
|
*
|
||||||
|
* This program is made available under an ISC-style license. See the
|
||||||
|
* accompanying file LICENSE for details.
|
||||||
|
*/
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "nestegg/nestegg.h"
|
||||||
|
|
||||||
|
#undef DEBUG
|
||||||
|
#define SEEK_TEST
|
||||||
|
|
||||||
|
static int
|
||||||
|
stdio_read(void * p, size_t length, void * fp)
|
||||||
|
{
|
||||||
|
size_t r;
|
||||||
|
|
||||||
|
r = fread(p, length, 1, fp);
|
||||||
|
if (r == 0 && feof(fp))
|
||||||
|
return 0;
|
||||||
|
return r == 0 ? -1 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
stdio_seek(int64_t offset, int whence, void * fp)
|
||||||
|
{
|
||||||
|
return fseek(fp, offset, whence);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int64_t
|
||||||
|
stdio_tell(void * fp)
|
||||||
|
{
|
||||||
|
return ftell(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
log_callback(nestegg * ctx, unsigned int severity, char const * fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
char const * sev = NULL;
|
||||||
|
|
||||||
|
#ifndef DEBUG
|
||||||
|
if (severity < NESTEGG_LOG_WARNING)
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
switch (severity) {
|
||||||
|
case NESTEGG_LOG_DEBUG:
|
||||||
|
sev = "debug: ";
|
||||||
|
break;
|
||||||
|
case NESTEGG_LOG_WARNING:
|
||||||
|
sev = "warning: ";
|
||||||
|
break;
|
||||||
|
case NESTEGG_LOG_CRITICAL:
|
||||||
|
sev = "critical:";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sev = "unknown: ";
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "%p %s ", (void *) ctx, sev);
|
||||||
|
|
||||||
|
va_start(ap, fmt);
|
||||||
|
vfprintf(stderr, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char * argv[])
|
||||||
|
{
|
||||||
|
FILE * fp;
|
||||||
|
int r, type;
|
||||||
|
nestegg * ctx;
|
||||||
|
nestegg_audio_params aparams;
|
||||||
|
nestegg_packet * pkt;
|
||||||
|
nestegg_video_params vparams;
|
||||||
|
size_t length, size;
|
||||||
|
uint64_t duration, tstamp, pkt_tstamp;
|
||||||
|
unsigned char * codec_data, * ptr;
|
||||||
|
unsigned int cnt, i, j, track, tracks, pkt_cnt, pkt_track;
|
||||||
|
unsigned int data_items = 0;
|
||||||
|
nestegg_io io = {
|
||||||
|
stdio_read,
|
||||||
|
stdio_seek,
|
||||||
|
stdio_tell,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
|
fp = fopen(argv[1], "rb");
|
||||||
|
if (!fp)
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
|
io.userdata = fp;
|
||||||
|
|
||||||
|
ctx = NULL;
|
||||||
|
r = nestegg_init(&ctx, io, log_callback);
|
||||||
|
if (r != 0)
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
|
nestegg_track_count(ctx, &tracks);
|
||||||
|
nestegg_duration(ctx, &duration);
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "media has %u tracks and duration %fs\n", tracks, duration / 1e9);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (i = 0; i < tracks; ++i) {
|
||||||
|
type = nestegg_track_type(ctx, i);
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "track %u: type: %d codec: %d", i,
|
||||||
|
type, nestegg_track_codec_id(ctx, i));
|
||||||
|
#endif
|
||||||
|
nestegg_track_codec_data_count(ctx, i, &data_items);
|
||||||
|
for (j = 0; j < data_items; ++j) {
|
||||||
|
nestegg_track_codec_data(ctx, i, j, &codec_data, &length);
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, " (%p, %u)", codec_data, (unsigned int) length);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
if (type == NESTEGG_TRACK_VIDEO) {
|
||||||
|
nestegg_track_video_params(ctx, i, &vparams);
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, " video: %ux%u (d: %ux%u %ux%ux%ux%u)",
|
||||||
|
vparams.width, vparams.height,
|
||||||
|
vparams.display_width, vparams.display_height,
|
||||||
|
vparams.crop_top, vparams.crop_left, vparams.crop_bottom, vparams.crop_right);
|
||||||
|
#endif
|
||||||
|
} else if (type == NESTEGG_TRACK_AUDIO) {
|
||||||
|
nestegg_track_audio_params(ctx, i, &aparams);
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, " audio: %.2fhz %u bit %u channels",
|
||||||
|
aparams.rate, aparams.depth, aparams.channels);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef SEEK_TEST
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "seek to middle\n");
|
||||||
|
#endif
|
||||||
|
r = nestegg_track_seek(ctx, 0, duration / 2);
|
||||||
|
if (r == 0) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "middle ");
|
||||||
|
#endif
|
||||||
|
r = nestegg_read_packet(ctx, &pkt);
|
||||||
|
if (r == 1) {
|
||||||
|
nestegg_packet_track(pkt, &track);
|
||||||
|
nestegg_packet_count(pkt, &cnt);
|
||||||
|
nestegg_packet_tstamp(pkt, &tstamp);
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "* t %u pts %f frames %u\n", track, tstamp / 1e9, cnt);
|
||||||
|
#endif
|
||||||
|
nestegg_free_packet(pkt);
|
||||||
|
} else {
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "middle seek failed\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "seek to ~end\n");
|
||||||
|
#endif
|
||||||
|
r = nestegg_track_seek(ctx, 0, duration - (duration / 10));
|
||||||
|
if (r == 0) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "end ");
|
||||||
|
#endif
|
||||||
|
r = nestegg_read_packet(ctx, &pkt);
|
||||||
|
if (r == 1) {
|
||||||
|
nestegg_packet_track(pkt, &track);
|
||||||
|
nestegg_packet_count(pkt, &cnt);
|
||||||
|
nestegg_packet_tstamp(pkt, &tstamp);
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "* t %u pts %f frames %u\n", track, tstamp / 1e9, cnt);
|
||||||
|
#endif
|
||||||
|
nestegg_free_packet(pkt);
|
||||||
|
} else {
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "end seek failed\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "seek to ~start\n");
|
||||||
|
#endif
|
||||||
|
r = nestegg_track_seek(ctx, 0, duration / 10);
|
||||||
|
if (r == 0) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "start ");
|
||||||
|
#endif
|
||||||
|
r = nestegg_read_packet(ctx, &pkt);
|
||||||
|
if (r == 1) {
|
||||||
|
nestegg_packet_track(pkt, &track);
|
||||||
|
nestegg_packet_count(pkt, &cnt);
|
||||||
|
nestegg_packet_tstamp(pkt, &tstamp);
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "* t %u pts %f frames %u\n", track, tstamp / 1e9, cnt);
|
||||||
|
#endif
|
||||||
|
nestegg_free_packet(pkt);
|
||||||
|
} else {
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "start seek failed\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
while (nestegg_read_packet(ctx, &pkt) > 0) {
|
||||||
|
nestegg_packet_track(pkt, &pkt_track);
|
||||||
|
nestegg_packet_count(pkt, &pkt_cnt);
|
||||||
|
nestegg_packet_tstamp(pkt, &pkt_tstamp);
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "t %u pts %f frames %u: ", pkt_track, pkt_tstamp / 1e9, pkt_cnt);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (i = 0; i < pkt_cnt; ++i) {
|
||||||
|
nestegg_packet_data(pkt, i, &ptr, &size);
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "%u ", (unsigned int) size);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
nestegg_free_packet(pkt);
|
||||||
|
}
|
||||||
|
|
||||||
|
nestegg_destroy(ctx);
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
210
release.sh
210
release.sh
@@ -1,210 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
##
|
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
|
||||||
##
|
|
||||||
## Use of this source code is governed by a BSD-style license
|
|
||||||
## that can be found in the LICENSE file in the root of the source
|
|
||||||
## tree. An additional intellectual property rights grant can be found
|
|
||||||
## in the file PATENTS. All contributing project authors may
|
|
||||||
## be found in the AUTHORS file in the root of the source tree.
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self=$0
|
|
||||||
|
|
||||||
for opt; do
|
|
||||||
case $opt in
|
|
||||||
--clean) clean=yes;;
|
|
||||||
-j*) jopt=$opt;;
|
|
||||||
*) echo "Unsupported option $opt"; exit 1;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
TAB="$(printf '\t')"
|
|
||||||
cat > release.mk << EOF
|
|
||||||
%\$(BUILD_SFX).tar.bz2: %/.done
|
|
||||||
${TAB}@echo "\$(subst .tar.bz2,,\$@): tarball"
|
|
||||||
${TAB}@cd \$(dir \$<); tar -cf - \$(subst .tar.bz2,,\$@) | bzip2 > ../\$@
|
|
||||||
|
|
||||||
%\$(BUILD_SFX).zip: %/.done
|
|
||||||
${TAB}@echo "\$(subst .zip,,\$@): zip"
|
|
||||||
${TAB}@rm -f \$@; cd \$(dir \$<); zip -rq ../\$@ \$(subst .zip,,\$@)
|
|
||||||
|
|
||||||
logs/%\$(BUILD_SFX).log.bz2: %/.done
|
|
||||||
${TAB}@echo "\$(subst .log.bz2,,\$(notdir \$@)): tarlog"
|
|
||||||
${TAB}@mkdir -p logs
|
|
||||||
${TAB}@cat \$< | bzip2 > \$@
|
|
||||||
|
|
||||||
%/.done:
|
|
||||||
${TAB}@mkdir -p \$(dir \$@)
|
|
||||||
${TAB}@echo "\$(dir \$@): configure \$(CONFIG_OPTS) \$(EXTRA_PATH)"
|
|
||||||
${TAB}@cd \$(dir \$@); export PATH=\$\$PATH\$(EXTRA_PATH); ../\$(SRC_ROOT)/configure \$(CONFIG_OPTS) >makelog.txt 2>&1
|
|
||||||
${TAB}@echo "\$(dir \$@): make"
|
|
||||||
${TAB}@cd \$(dir \$@); PATH=\$\$PATH\$(EXTRA_PATH) \$(MAKE) >>makelog.txt 2>&1
|
|
||||||
${TAB}@echo "\$(dir \$@): test install"
|
|
||||||
${TAB}@cd \$(dir \$@); PATH=\$\$PATH\$(EXTRA_PATH) \$(MAKE) install >>makelog.txt 2>&1
|
|
||||||
${TAB}@cd \$(dir \$@)/dist/build; PATH=\$\$PATH\$(EXTRA_PATH) \$(MAKE) >>makelog.txt 2>&1
|
|
||||||
${TAB}@echo "\$(dir \$@): install"
|
|
||||||
${TAB}@cd \$(dir \$@); PATH=\$\$PATH\$(EXTRA_PATH) \$(MAKE) install DIST_DIR=\$(TGT) >>makelog.txt 2>&1
|
|
||||||
${TAB}@touch \$@
|
|
||||||
|
|
||||||
#include release-deps.mk
|
|
||||||
EOF
|
|
||||||
|
|
||||||
#[ -f release-deps.mk ] || \
|
|
||||||
# find ${self%/*} -name .git -prune -o -type f -print0 \
|
|
||||||
# | xargs -0 -n1 echo \
|
|
||||||
# | sed -e 's; ;\\ ;g' | awk '{print "$(TGT)/.done: "$0}' > release-deps.mk
|
|
||||||
|
|
||||||
build_config_list() {
|
|
||||||
for codec in $CODEC_LIST; do
|
|
||||||
for arch in $ARCH_LIST; do
|
|
||||||
if [ -n "$OS_LIST" ]; then
|
|
||||||
for os in $OS_LIST; do
|
|
||||||
CONFIGS="$CONFIGS vpx-${codec}-${arch}-${os}"
|
|
||||||
done
|
|
||||||
else
|
|
||||||
CONFIGS="$CONFIGS vpx-${codec}-${arch}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
CODEC_LIST="vp8 vp8cx vp8dx"
|
|
||||||
case `uname` in
|
|
||||||
Linux*)
|
|
||||||
ARCH_LIST="x86 x86_64"
|
|
||||||
OS_LIST="linux"
|
|
||||||
build_config_list
|
|
||||||
ARCH_LIST="armv5te armv6 armv7"
|
|
||||||
OS_LIST="linux-gcc"
|
|
||||||
|
|
||||||
;;
|
|
||||||
CYGWIN*)
|
|
||||||
TAR_SFX=.zip
|
|
||||||
for vs in vs7 vs8; do
|
|
||||||
for arch in x86-win32 x86_64-win64; do
|
|
||||||
for msvcrt in md mt; do
|
|
||||||
case $vs,$arch in
|
|
||||||
vs7,x86_64-win64) continue ;;
|
|
||||||
esac
|
|
||||||
ARCH_LIST="$ARCH_LIST ${arch}${msvcrt}-${vs}"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
Darwin*)
|
|
||||||
ARCH_LIST="universal"
|
|
||||||
OS_LIST="darwin8 darwin9"
|
|
||||||
;;
|
|
||||||
sun_os*)
|
|
||||||
ARCH_LIST="x86 x86_64"
|
|
||||||
OS_LIST="solaris"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
build_config_list
|
|
||||||
|
|
||||||
TAR_SFX=${TAR_SFX:-.tar.bz2}
|
|
||||||
ARM_TOOLCHAIN=/usr/local/google/csl-2009q3-67
|
|
||||||
for cfg in $CONFIGS; do
|
|
||||||
full_cfg=$cfg
|
|
||||||
cfg=${cfg#vpx-}
|
|
||||||
opts=
|
|
||||||
rm -f makelog.txt
|
|
||||||
|
|
||||||
case $cfg in
|
|
||||||
src-*) opts="$opts --enable-codec-srcs"
|
|
||||||
cfg=${cfg#src-}
|
|
||||||
;;
|
|
||||||
eval-*) opts="$opts --enable-eval-limit"
|
|
||||||
cfg=${cfg#src-}
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case $cfg in
|
|
||||||
#
|
|
||||||
# Linux
|
|
||||||
#
|
|
||||||
*x86-linux)
|
|
||||||
opts="$opts --target=x86-linux-gcc" ;;
|
|
||||||
*x86_64-linux)
|
|
||||||
opts="$opts --target=x86_64-linux-gcc" ;;
|
|
||||||
*arm*-linux-gcc)
|
|
||||||
armv=${cfg##*armv}
|
|
||||||
armv=${armv%%-*}
|
|
||||||
opts="$opts --target=armv${armv}-linux-gcc" ;;
|
|
||||||
*arm*-linux-rvct)
|
|
||||||
armv=${cfg##*armv}
|
|
||||||
armv=${armv%%-*}
|
|
||||||
opts="$opts --target=armv${armv}-linux-rvct"
|
|
||||||
opts="$opts --libc=${ARM_TOOLCHAIN}/arm-none-linux-gnueabi/libc" ;;
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Windows
|
|
||||||
#
|
|
||||||
# need --enable-debug-libs for now until we're smarter about
|
|
||||||
# building the debug/release from the customer installed
|
|
||||||
# environment
|
|
||||||
*-x86-win32*-vs*)
|
|
||||||
opts="$opts --target=x86-win32-vs${cfg##*-vs} --enable-debug-libs";;
|
|
||||||
*-x86_64-win64*-vs8)
|
|
||||||
opts="$opts --target=x86_64-win64-vs8 --enable-debug-libs" ;;
|
|
||||||
|
|
||||||
#
|
|
||||||
# Darwin
|
|
||||||
#
|
|
||||||
*-universal-darwin*)
|
|
||||||
opts="$opts --target=universal-darwin${cfg##*-darwin}-gcc" ;;
|
|
||||||
|
|
||||||
#
|
|
||||||
# Solaris
|
|
||||||
#
|
|
||||||
*x86-solaris)
|
|
||||||
opts="$opts --target=x86-solaris-gcc" ;;
|
|
||||||
*x86_64-solaris)
|
|
||||||
opts="$opts --target=x86_64-solaris-gcc" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case $cfg in
|
|
||||||
*x86-linux | *x86-solaris) opts="$opts --enable-pic" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case $cfg in
|
|
||||||
*-win[36][24]mt*) opts="$opts --enable-static-msvcrt" ;;
|
|
||||||
*-win[36][24]md*) opts="$opts --disable-static-msvcrt" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
opts="$opts --disable-codecs"
|
|
||||||
case $cfg in
|
|
||||||
vp8*) opts="$opts --enable-vp8" ;;
|
|
||||||
esac
|
|
||||||
case $cfg in
|
|
||||||
*cx-*) opts="${opts}-encoder" ;;
|
|
||||||
*dx-*) opts="${opts}-decoder" ;;
|
|
||||||
esac
|
|
||||||
opts="$opts --enable-postproc"
|
|
||||||
|
|
||||||
[ "x${clean}" = "xyes" ] \
|
|
||||||
&& rm -rf ${full_cfg}${BUILD_SFX}${TAR_SFX} \
|
|
||||||
&& rm -rf logs/${full_cfg}${BUILD_SFX}.log.bz2
|
|
||||||
|
|
||||||
TGT=${full_cfg}${BUILD_SFX}
|
|
||||||
BUILD_TARGETS="logs/${TGT}.log.bz2 ${TGT}${TAR_SFX}"
|
|
||||||
echo "${BUILD_TARGETS}: CONFIG_OPTS=$opts" >>release.mk
|
|
||||||
echo "${BUILD_TARGETS}: TGT=${TGT}" >>release.mk
|
|
||||||
case $cfg in
|
|
||||||
*-arm*-linux-*)
|
|
||||||
echo "${BUILD_TARGETS}: EXTRA_PATH=:${ARM_TOOLCHAIN}/bin/" >>release.mk ;;
|
|
||||||
*-vs7)
|
|
||||||
echo "${BUILD_TARGETS}: EXTRA_PATH=:/cygdrive/c/Program\ Files/Microsoft\ Visual\ Studio\ .NET\ 2003/Common7/IDE" >>release.mk ;;
|
|
||||||
*-vs8)
|
|
||||||
echo "${BUILD_TARGETS}: EXTRA_PATH=:/cygdrive/c/Program\ Files/Microsoft\ Visual\ Studio\ 8/Common7/IDE" >>release.mk ;;
|
|
||||||
esac
|
|
||||||
MAKE_TGTS="$MAKE_TGTS ${TGT}${TAR_SFX} logs/${TGT}.log.bz2"
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
${MAKE:-make} ${jopt:--j3} -f release.mk \
|
|
||||||
SRC_ROOT=${self%/*} BUILD_SFX=${BUILD_SFX} ${MAKE_TGTS}
|
|
29
solution.mk
29
solution.mk
@@ -1,5 +1,5 @@
|
|||||||
##
|
##
|
||||||
## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
##
|
##
|
||||||
## Use of this source code is governed by a BSD-style license
|
## Use of this source code is governed by a BSD-style license
|
||||||
## that can be found in the LICENSE file in the root of the source
|
## that can be found in the LICENSE file in the root of the source
|
||||||
@@ -9,32 +9,6 @@
|
|||||||
##
|
##
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(ARCH_ARM),yes)
|
|
||||||
ARM_DEVELOP=no
|
|
||||||
ARM_DEVELOP:=$(if $(filter %vpx.vcproj,$(wildcard *.vcproj)),yes)
|
|
||||||
|
|
||||||
ifeq ($(ARM_DEVELOP),yes)
|
|
||||||
vpx.sln:
|
|
||||||
@echo " [COPY] $@"
|
|
||||||
@cp $(SRC_PATH_BARE)/build/arm-wince-vs8/vpx.sln .
|
|
||||||
PROJECTS-yes += vpx.sln
|
|
||||||
else
|
|
||||||
vpx.sln: $(wildcard *.vcproj)
|
|
||||||
@echo " [CREATE] $@"
|
|
||||||
$(SRC_PATH_BARE)/build/make/gen_msvs_sln.sh \
|
|
||||||
$(if $(filter %vpx.vcproj,$^),--dep=ivfdec:vpx) \
|
|
||||||
$(if $(filter %vpx.vcproj,$^),--dep=xma:vpx) \
|
|
||||||
--ver=$(CONFIG_VS_VERSION)\
|
|
||||||
--target=$(TOOLCHAIN)\
|
|
||||||
--out=$@ $^
|
|
||||||
vpx.sln.mk: vpx.sln
|
|
||||||
@true
|
|
||||||
|
|
||||||
PROJECTS-yes += vpx.sln vpx.sln.mk
|
|
||||||
-include vpx.sln.mk
|
|
||||||
endif
|
|
||||||
|
|
||||||
else
|
|
||||||
vpx.sln: $(wildcard *.vcproj)
|
vpx.sln: $(wildcard *.vcproj)
|
||||||
@echo " [CREATE] $@"
|
@echo " [CREATE] $@"
|
||||||
$(SRC_PATH_BARE)/build/make/gen_msvs_sln.sh \
|
$(SRC_PATH_BARE)/build/make/gen_msvs_sln.sh \
|
||||||
@@ -48,7 +22,6 @@ vpx.sln.mk: vpx.sln
|
|||||||
|
|
||||||
PROJECTS-yes += vpx.sln vpx.sln.mk
|
PROJECTS-yes += vpx.sln vpx.sln.mk
|
||||||
-include vpx.sln.mk
|
-include vpx.sln.mk
|
||||||
endif
|
|
||||||
|
|
||||||
# Always install this file, as it is an unconditional post-build rule.
|
# Always install this file, as it is an unconditional post-build rule.
|
||||||
INSTALL_MAPS += src/% $(SRC_PATH_BARE)/%
|
INSTALL_MAPS += src/% $(SRC_PATH_BARE)/%
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -7,18 +7,18 @@
|
|||||||
* in the file PATENTS. All contributing project authors may
|
* in the file PATENTS. All contributing project authors may
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
* be found in the AUTHORS file in the root of the source tree.
|
||||||
*/
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "tools_common.h"
|
||||||
#ifndef _VPX_REF_BUILD_PREFIX_h
|
#ifdef _WIN32
|
||||||
#define _VPX_REF_BUILD_PREFIX_h
|
#include <io.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#if defined(__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
FILE* set_binary_mode(FILE *stream)
|
||||||
#if defined(__cplusplus)
|
{
|
||||||
|
(void)stream;
|
||||||
|
#ifdef _WIN32
|
||||||
|
_setmode(_fileno(stream), _O_BINARY);
|
||||||
|
#endif
|
||||||
|
return stream;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* include guards */
|
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -7,7 +7,10 @@
|
|||||||
* in the file PATENTS. All contributing project authors may
|
* in the file PATENTS. All contributing project authors may
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
* be found in the AUTHORS file in the root of the source tree.
|
||||||
*/
|
*/
|
||||||
|
#ifndef TOOLS_COMMON_H
|
||||||
|
#define TOOLS_COMMON_H
|
||||||
|
|
||||||
|
/* Sets a stdio stream into binary mode */
|
||||||
|
FILE* set_binary_mode(FILE *stream);
|
||||||
|
|
||||||
|
#endif
|
||||||
#define ALLOC_FAILURE -2
|
|
12
usage.dox
12
usage.dox
@@ -25,7 +25,7 @@
|
|||||||
codec may write into to store details about a single instance of that codec.
|
codec may write into to store details about a single instance of that codec.
|
||||||
Most of the context is implementation specific, and thus opaque to the
|
Most of the context is implementation specific, and thus opaque to the
|
||||||
application. The context structure as seen by the application is of fixed
|
application. The context structure as seen by the application is of fixed
|
||||||
size, and thus can be allocated eith with automatic storage or dynamically
|
size, and thus can be allocated with automatic storage or dynamically
|
||||||
on the heap.
|
on the heap.
|
||||||
|
|
||||||
Most operations require an initialized codec context. Codec context
|
Most operations require an initialized codec context. Codec context
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
the ABI is versioned. The ABI version number must be passed at
|
the ABI is versioned. The ABI version number must be passed at
|
||||||
initialization time to ensure the application is using a header file that
|
initialization time to ensure the application is using a header file that
|
||||||
matches the library. The current ABI version number is stored in the
|
matches the library. The current ABI version number is stored in the
|
||||||
prepropcessor macros #VPX_CODEC_ABI_VERSION, #VPX_ENCODER_ABI_VERSION, and
|
preprocessor macros #VPX_CODEC_ABI_VERSION, #VPX_ENCODER_ABI_VERSION, and
|
||||||
#VPX_DECODER_ABI_VERSION. For convenience, each initialization function has
|
#VPX_DECODER_ABI_VERSION. For convenience, each initialization function has
|
||||||
a wrapper macro that inserts the correct version number. These macros are
|
a wrapper macro that inserts the correct version number. These macros are
|
||||||
named like the initialization methods, but without the _ver suffix.
|
named like the initialization methods, but without the _ver suffix.
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
|
|
||||||
The special value <code>0</code> is reserved to represent an infinite
|
The special value <code>0</code> is reserved to represent an infinite
|
||||||
deadline. In this case, the codec will perform as much processing as
|
deadline. In this case, the codec will perform as much processing as
|
||||||
possible to yeild the highest quality frame.
|
possible to yield the highest quality frame.
|
||||||
|
|
||||||
By convention, the value <code>1</code> is used to mean "return as fast as
|
By convention, the value <code>1</code> is used to mean "return as fast as
|
||||||
possible."
|
possible."
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
|
|
||||||
/*! \page usage_xma External Memory Allocation
|
/*! \page usage_xma External Memory Allocation
|
||||||
Applications that wish to have fine grained control over how and where
|
Applications that wish to have fine grained control over how and where
|
||||||
decoders allocate memory \ref MAY make use of the e_xternal Memory Allocation
|
decoders allocate memory \ref MAY make use of the eXternal Memory Allocation
|
||||||
(XMA) interface. Not all codecs support the XMA \ref usage_features.
|
(XMA) interface. Not all codecs support the XMA \ref usage_features.
|
||||||
|
|
||||||
To use a decoder in XMA mode, the decoder \ref MUST be initialized with the
|
To use a decoder in XMA mode, the decoder \ref MUST be initialized with the
|
||||||
@@ -143,7 +143,7 @@
|
|||||||
allocate is heavily dependent on the size of the encoded video frames. The
|
allocate is heavily dependent on the size of the encoded video frames. The
|
||||||
size of the video must be known before requesting the decoder's memory map.
|
size of the video must be known before requesting the decoder's memory map.
|
||||||
This stream information can be obtained with the vpx_codec_peek_stream_info()
|
This stream information can be obtained with the vpx_codec_peek_stream_info()
|
||||||
function, which does not require a contructed decoder context. If the exact
|
function, which does not require a constructed decoder context. If the exact
|
||||||
stream is not known, a stream info structure can be created that reflects
|
stream is not known, a stream info structure can be created that reflects
|
||||||
the maximum size that the decoder instance is required to support.
|
the maximum size that the decoder instance is required to support.
|
||||||
|
|
||||||
@@ -175,7 +175,7 @@
|
|||||||
\section usage_xma_seg_szalign Segment Size and Alignment
|
\section usage_xma_seg_szalign Segment Size and Alignment
|
||||||
The sz (size) and align (alignment) parameters describe the required size
|
The sz (size) and align (alignment) parameters describe the required size
|
||||||
and alignment of the requested segment. Alignment will always be a power of
|
and alignment of the requested segment. Alignment will always be a power of
|
||||||
two. Applications \ref MUST honor the aligment requested. Failure to do so
|
two. Applications \ref MUST honor the alignment requested. Failure to do so
|
||||||
could result in program crashes or may incur a speed penalty.
|
could result in program crashes or may incur a speed penalty.
|
||||||
|
|
||||||
\section usage_xma_seg_flags Segment Flags
|
\section usage_xma_seg_flags Segment Flags
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -16,7 +16,6 @@
|
|||||||
#include "findnearmv.h"
|
#include "findnearmv.h"
|
||||||
#include "entropymode.h"
|
#include "entropymode.h"
|
||||||
#include "systemdependent.h"
|
#include "systemdependent.h"
|
||||||
#include "vpxerrors.h"
|
|
||||||
|
|
||||||
|
|
||||||
extern void vp8_init_scan_order_mask();
|
extern void vp8_init_scan_order_mask();
|
||||||
@@ -24,46 +23,39 @@ extern void vp8_init_scan_order_mask();
|
|||||||
void vp8_update_mode_info_border(MODE_INFO *mi, int rows, int cols)
|
void vp8_update_mode_info_border(MODE_INFO *mi, int rows, int cols)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
vpx_memset(mi - cols - 1, 0, sizeof(MODE_INFO) * cols + 1);
|
vpx_memset(mi - cols - 2, 0, sizeof(MODE_INFO) * (cols + 1));
|
||||||
|
|
||||||
for (i = 0; i < rows; i++)
|
for (i = 0; i < rows; i++)
|
||||||
{
|
{
|
||||||
vpx_memset(&mi[i*cols-1], 0, sizeof(MODE_INFO));
|
vpx_memset(&mi[i*cols-1], 0, sizeof(MODE_INFO));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp8_de_alloc_frame_buffers(VP8_COMMON *oci)
|
void vp8_de_alloc_frame_buffers(VP8_COMMON *oci)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < NUM_YV12_BUFFERS; i++)
|
||||||
|
vp8_yv12_de_alloc_frame_buffer(&oci->yv12_fb[i]);
|
||||||
|
|
||||||
vp8_yv12_de_alloc_frame_buffer(&oci->temp_scale_frame);
|
vp8_yv12_de_alloc_frame_buffer(&oci->temp_scale_frame);
|
||||||
vp8_yv12_de_alloc_frame_buffer(&oci->new_frame);
|
|
||||||
vp8_yv12_de_alloc_frame_buffer(&oci->last_frame);
|
|
||||||
vp8_yv12_de_alloc_frame_buffer(&oci->golden_frame);
|
|
||||||
vp8_yv12_de_alloc_frame_buffer(&oci->alt_ref_frame);
|
|
||||||
vp8_yv12_de_alloc_frame_buffer(&oci->post_proc_buffer);
|
vp8_yv12_de_alloc_frame_buffer(&oci->post_proc_buffer);
|
||||||
|
|
||||||
vpx_free(oci->above_context[Y1CONTEXT]);
|
vpx_free(oci->above_context);
|
||||||
vpx_free(oci->above_context[UCONTEXT]);
|
|
||||||
vpx_free(oci->above_context[VCONTEXT]);
|
|
||||||
vpx_free(oci->above_context[Y2CONTEXT]);
|
|
||||||
vpx_free(oci->mip);
|
vpx_free(oci->mip);
|
||||||
|
|
||||||
oci->above_context[Y1CONTEXT] = 0;
|
oci->above_context = 0;
|
||||||
oci->above_context[UCONTEXT] = 0;
|
|
||||||
oci->above_context[VCONTEXT] = 0;
|
|
||||||
oci->above_context[Y2CONTEXT] = 0;
|
|
||||||
oci->mip = 0;
|
oci->mip = 0;
|
||||||
|
|
||||||
// Structure used to minitor GF useage
|
|
||||||
if (oci->gf_active_flags != 0)
|
|
||||||
vpx_free(oci->gf_active_flags);
|
|
||||||
|
|
||||||
oci->gf_active_flags = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int vp8_alloc_frame_buffers(VP8_COMMON *oci, int width, int height)
|
int vp8_alloc_frame_buffers(VP8_COMMON *oci, int width, int height)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
vp8_de_alloc_frame_buffers(oci);
|
||||||
|
|
||||||
// our internal buffers are always multiples of 16
|
/* our internal buffers are always multiples of 16 */
|
||||||
if ((width & 0xf) != 0)
|
if ((width & 0xf) != 0)
|
||||||
width += 16 - (width & 0xf);
|
width += 16 - (width & 0xf);
|
||||||
|
|
||||||
@@ -71,41 +63,37 @@ int vp8_alloc_frame_buffers(VP8_COMMON *oci, int width, int height)
|
|||||||
height += 16 - (height & 0xf);
|
height += 16 - (height & 0xf);
|
||||||
|
|
||||||
|
|
||||||
|
for (i = 0; i < NUM_YV12_BUFFERS; i++)
|
||||||
|
{
|
||||||
|
oci->fb_idx_ref_cnt[0] = 0;
|
||||||
|
|
||||||
|
if (vp8_yv12_alloc_frame_buffer(&oci->yv12_fb[i], width, height, VP8BORDERINPIXELS) < 0)
|
||||||
|
{
|
||||||
|
vp8_de_alloc_frame_buffers(oci);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
oci->new_fb_idx = 0;
|
||||||
|
oci->lst_fb_idx = 1;
|
||||||
|
oci->gld_fb_idx = 2;
|
||||||
|
oci->alt_fb_idx = 3;
|
||||||
|
|
||||||
|
oci->fb_idx_ref_cnt[0] = 1;
|
||||||
|
oci->fb_idx_ref_cnt[1] = 1;
|
||||||
|
oci->fb_idx_ref_cnt[2] = 1;
|
||||||
|
oci->fb_idx_ref_cnt[3] = 1;
|
||||||
|
|
||||||
if (vp8_yv12_alloc_frame_buffer(&oci->temp_scale_frame, width, 16, VP8BORDERINPIXELS) < 0)
|
if (vp8_yv12_alloc_frame_buffer(&oci->temp_scale_frame, width, 16, VP8BORDERINPIXELS) < 0)
|
||||||
{
|
{
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
vp8_de_alloc_frame_buffers(oci);
|
||||||
return ALLOC_FAILURE;
|
return 1;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (vp8_yv12_alloc_frame_buffer(&oci->new_frame, width, height, VP8BORDERINPIXELS) < 0)
|
|
||||||
{
|
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
|
||||||
return ALLOC_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vp8_yv12_alloc_frame_buffer(&oci->last_frame, width, height, VP8BORDERINPIXELS) < 0)
|
|
||||||
{
|
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
|
||||||
return ALLOC_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vp8_yv12_alloc_frame_buffer(&oci->golden_frame, width, height, VP8BORDERINPIXELS) < 0)
|
|
||||||
{
|
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
|
||||||
return ALLOC_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vp8_yv12_alloc_frame_buffer(&oci->alt_ref_frame, width, height, VP8BORDERINPIXELS) < 0)
|
|
||||||
{
|
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
|
||||||
return ALLOC_FAILURE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vp8_yv12_alloc_frame_buffer(&oci->post_proc_buffer, width, height, VP8BORDERINPIXELS) < 0)
|
if (vp8_yv12_alloc_frame_buffer(&oci->post_proc_buffer, width, height, VP8BORDERINPIXELS) < 0)
|
||||||
{
|
{
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
vp8_de_alloc_frame_buffers(oci);
|
||||||
return ALLOC_FAILURE;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
oci->mb_rows = height >> 4;
|
oci->mb_rows = height >> 4;
|
||||||
@@ -117,60 +105,22 @@ int vp8_alloc_frame_buffers(VP8_COMMON *oci, int width, int height)
|
|||||||
if (!oci->mip)
|
if (!oci->mip)
|
||||||
{
|
{
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
vp8_de_alloc_frame_buffers(oci);
|
||||||
return ALLOC_FAILURE;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
oci->mi = oci->mip + oci->mode_info_stride + 1;
|
oci->mi = oci->mip + oci->mode_info_stride + 1;
|
||||||
|
|
||||||
|
|
||||||
oci->above_context[Y1CONTEXT] = vpx_calloc(sizeof(ENTROPY_CONTEXT) * oci->mb_cols * 4 , 1);
|
oci->above_context = vpx_calloc(sizeof(ENTROPY_CONTEXT_PLANES) * oci->mb_cols, 1);
|
||||||
|
|
||||||
if (!oci->above_context[Y1CONTEXT])
|
if (!oci->above_context)
|
||||||
{
|
{
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
vp8_de_alloc_frame_buffers(oci);
|
||||||
return ALLOC_FAILURE;
|
return 1;
|
||||||
}
|
|
||||||
|
|
||||||
oci->above_context[UCONTEXT] = vpx_calloc(sizeof(ENTROPY_CONTEXT) * oci->mb_cols * 2 , 1);
|
|
||||||
|
|
||||||
if (!oci->above_context[UCONTEXT])
|
|
||||||
{
|
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
|
||||||
return ALLOC_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
oci->above_context[VCONTEXT] = vpx_calloc(sizeof(ENTROPY_CONTEXT) * oci->mb_cols * 2 , 1);
|
|
||||||
|
|
||||||
if (!oci->above_context[VCONTEXT])
|
|
||||||
{
|
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
|
||||||
return ALLOC_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
oci->above_context[Y2CONTEXT] = vpx_calloc(sizeof(ENTROPY_CONTEXT) * oci->mb_cols , 1);
|
|
||||||
|
|
||||||
if (!oci->above_context[Y2CONTEXT])
|
|
||||||
{
|
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
|
||||||
return ALLOC_FAILURE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vp8_update_mode_info_border(oci->mi, oci->mb_rows, oci->mb_cols);
|
vp8_update_mode_info_border(oci->mi, oci->mb_rows, oci->mb_cols);
|
||||||
|
|
||||||
// Structures used to minitor GF usage
|
|
||||||
if (oci->gf_active_flags != 0)
|
|
||||||
vpx_free(oci->gf_active_flags);
|
|
||||||
|
|
||||||
oci->gf_active_flags = (unsigned char *)vpx_calloc(oci->mb_rows * oci->mb_cols, 1);
|
|
||||||
|
|
||||||
if (!oci->gf_active_flags)
|
|
||||||
{
|
|
||||||
vp8_de_alloc_frame_buffers(oci);
|
|
||||||
return ALLOC_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
oci->gf_active_count = oci->mb_rows * oci->mb_cols;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
void vp8_setup_version(VP8_COMMON *cm)
|
void vp8_setup_version(VP8_COMMON *cm)
|
||||||
@@ -202,7 +152,7 @@ void vp8_setup_version(VP8_COMMON *cm)
|
|||||||
cm->full_pixel = 1;
|
cm->full_pixel = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
//4,5,6,7 are reserved for future use
|
/*4,5,6,7 are reserved for future use*/
|
||||||
cm->no_lpf = 0;
|
cm->no_lpf = 0;
|
||||||
cm->simpler_lpf = 0;
|
cm->simpler_lpf = 0;
|
||||||
cm->use_bilinear_mc_filter = 0;
|
cm->use_bilinear_mc_filter = 0;
|
||||||
@@ -226,10 +176,10 @@ void vp8_create_common(VP8_COMMON *oci)
|
|||||||
oci->clr_type = REG_YUV;
|
oci->clr_type = REG_YUV;
|
||||||
oci->clamp_type = RECON_CLAMP_REQUIRED;
|
oci->clamp_type = RECON_CLAMP_REQUIRED;
|
||||||
|
|
||||||
// Initialise reference frame sign bias structure to defaults
|
/* Initialise reference frame sign bias structure to defaults */
|
||||||
vpx_memset(oci->ref_frame_sign_bias, 0, sizeof(oci->ref_frame_sign_bias));
|
vpx_memset(oci->ref_frame_sign_bias, 0, sizeof(oci->ref_frame_sign_bias));
|
||||||
|
|
||||||
// Default disable buffer to buffer copying
|
/* Default disable buffer to buffer copying */
|
||||||
oci->copy_buffer_to_gf = 0;
|
oci->copy_buffer_to_gf = 0;
|
||||||
oci->copy_buffer_to_arf = 0;
|
oci->copy_buffer_to_arf = 0;
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
|
136
vp8/common/arm/arm_systemdependent.c
Normal file
136
vp8/common/arm/arm_systemdependent.c
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by a BSD-style license
|
||||||
|
* that can be found in the LICENSE file in the root of the source
|
||||||
|
* tree. An additional intellectual property rights grant can be found
|
||||||
|
* in the file PATENTS. All contributing project authors may
|
||||||
|
* be found in the AUTHORS file in the root of the source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "vpx_ports/config.h"
|
||||||
|
#include "vpx_ports/arm.h"
|
||||||
|
#include "vp8/common/g_common.h"
|
||||||
|
#include "vp8/common/pragmas.h"
|
||||||
|
#include "vp8/common/subpixel.h"
|
||||||
|
#include "vp8/common/loopfilter.h"
|
||||||
|
#include "vp8/common/recon.h"
|
||||||
|
#include "vp8/common/idct.h"
|
||||||
|
#include "vp8/common/onyxc_int.h"
|
||||||
|
|
||||||
|
extern void (*vp8_build_intra_predictors_mby_ptr)(MACROBLOCKD *x);
|
||||||
|
extern void vp8_build_intra_predictors_mby(MACROBLOCKD *x);
|
||||||
|
extern void vp8_build_intra_predictors_mby_neon(MACROBLOCKD *x);
|
||||||
|
|
||||||
|
extern void (*vp8_build_intra_predictors_mby_s_ptr)(MACROBLOCKD *x);
|
||||||
|
extern void vp8_build_intra_predictors_mby_s(MACROBLOCKD *x);
|
||||||
|
extern void vp8_build_intra_predictors_mby_s_neon(MACROBLOCKD *x);
|
||||||
|
|
||||||
|
void vp8_arch_arm_common_init(VP8_COMMON *ctx)
|
||||||
|
{
|
||||||
|
#if CONFIG_RUNTIME_CPU_DETECT
|
||||||
|
VP8_COMMON_RTCD *rtcd = &ctx->rtcd;
|
||||||
|
int flags = arm_cpu_caps();
|
||||||
|
int has_edsp = flags & HAS_EDSP;
|
||||||
|
int has_media = flags & HAS_MEDIA;
|
||||||
|
int has_neon = flags & HAS_NEON;
|
||||||
|
rtcd->flags = flags;
|
||||||
|
|
||||||
|
/* Override default functions with fastest ones for this CPU. */
|
||||||
|
#if HAVE_ARMV6
|
||||||
|
if (has_media)
|
||||||
|
{
|
||||||
|
rtcd->subpix.sixtap16x16 = vp8_sixtap_predict16x16_armv6;
|
||||||
|
rtcd->subpix.sixtap8x8 = vp8_sixtap_predict8x8_armv6;
|
||||||
|
rtcd->subpix.sixtap8x4 = vp8_sixtap_predict8x4_armv6;
|
||||||
|
rtcd->subpix.sixtap4x4 = vp8_sixtap_predict_armv6;
|
||||||
|
rtcd->subpix.bilinear16x16 = vp8_bilinear_predict16x16_armv6;
|
||||||
|
rtcd->subpix.bilinear8x8 = vp8_bilinear_predict8x8_armv6;
|
||||||
|
rtcd->subpix.bilinear8x4 = vp8_bilinear_predict8x4_armv6;
|
||||||
|
rtcd->subpix.bilinear4x4 = vp8_bilinear_predict4x4_armv6;
|
||||||
|
|
||||||
|
rtcd->idct.idct1 = vp8_short_idct4x4llm_1_v6;
|
||||||
|
rtcd->idct.idct16 = vp8_short_idct4x4llm_v6_dual;
|
||||||
|
rtcd->idct.iwalsh1 = vp8_short_inv_walsh4x4_1_v6;
|
||||||
|
rtcd->idct.iwalsh16 = vp8_short_inv_walsh4x4_v6;
|
||||||
|
|
||||||
|
rtcd->loopfilter.normal_mb_v = vp8_loop_filter_mbv_armv6;
|
||||||
|
rtcd->loopfilter.normal_b_v = vp8_loop_filter_bv_armv6;
|
||||||
|
rtcd->loopfilter.normal_mb_h = vp8_loop_filter_mbh_armv6;
|
||||||
|
rtcd->loopfilter.normal_b_h = vp8_loop_filter_bh_armv6;
|
||||||
|
rtcd->loopfilter.simple_mb_v = vp8_loop_filter_mbvs_armv6;
|
||||||
|
rtcd->loopfilter.simple_b_v = vp8_loop_filter_bvs_armv6;
|
||||||
|
rtcd->loopfilter.simple_mb_h = vp8_loop_filter_mbhs_armv6;
|
||||||
|
rtcd->loopfilter.simple_b_h = vp8_loop_filter_bhs_armv6;
|
||||||
|
|
||||||
|
rtcd->recon.copy16x16 = vp8_copy_mem16x16_v6;
|
||||||
|
rtcd->recon.copy8x8 = vp8_copy_mem8x8_v6;
|
||||||
|
rtcd->recon.copy8x4 = vp8_copy_mem8x4_v6;
|
||||||
|
rtcd->recon.recon = vp8_recon_b_armv6;
|
||||||
|
rtcd->recon.recon2 = vp8_recon2b_armv6;
|
||||||
|
rtcd->recon.recon4 = vp8_recon4b_armv6;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_ARMV7
|
||||||
|
if (has_neon)
|
||||||
|
{
|
||||||
|
rtcd->subpix.sixtap16x16 = vp8_sixtap_predict16x16_neon;
|
||||||
|
rtcd->subpix.sixtap8x8 = vp8_sixtap_predict8x8_neon;
|
||||||
|
rtcd->subpix.sixtap8x4 = vp8_sixtap_predict8x4_neon;
|
||||||
|
rtcd->subpix.sixtap4x4 = vp8_sixtap_predict_neon;
|
||||||
|
rtcd->subpix.bilinear16x16 = vp8_bilinear_predict16x16_neon;
|
||||||
|
rtcd->subpix.bilinear8x8 = vp8_bilinear_predict8x8_neon;
|
||||||
|
rtcd->subpix.bilinear8x4 = vp8_bilinear_predict8x4_neon;
|
||||||
|
rtcd->subpix.bilinear4x4 = vp8_bilinear_predict4x4_neon;
|
||||||
|
|
||||||
|
rtcd->idct.idct1 = vp8_short_idct4x4llm_1_neon;
|
||||||
|
rtcd->idct.idct16 = vp8_short_idct4x4llm_neon;
|
||||||
|
rtcd->idct.iwalsh1 = vp8_short_inv_walsh4x4_1_neon;
|
||||||
|
rtcd->idct.iwalsh16 = vp8_short_inv_walsh4x4_neon;
|
||||||
|
|
||||||
|
rtcd->loopfilter.normal_mb_v = vp8_loop_filter_mbv_neon;
|
||||||
|
rtcd->loopfilter.normal_b_v = vp8_loop_filter_bv_neon;
|
||||||
|
rtcd->loopfilter.normal_mb_h = vp8_loop_filter_mbh_neon;
|
||||||
|
rtcd->loopfilter.normal_b_h = vp8_loop_filter_bh_neon;
|
||||||
|
rtcd->loopfilter.simple_mb_v = vp8_loop_filter_mbvs_neon;
|
||||||
|
rtcd->loopfilter.simple_b_v = vp8_loop_filter_bvs_neon;
|
||||||
|
rtcd->loopfilter.simple_mb_h = vp8_loop_filter_mbhs_neon;
|
||||||
|
rtcd->loopfilter.simple_b_h = vp8_loop_filter_bhs_neon;
|
||||||
|
|
||||||
|
rtcd->recon.copy16x16 = vp8_copy_mem16x16_neon;
|
||||||
|
rtcd->recon.copy8x8 = vp8_copy_mem8x8_neon;
|
||||||
|
rtcd->recon.copy8x4 = vp8_copy_mem8x4_neon;
|
||||||
|
rtcd->recon.recon = vp8_recon_b_neon;
|
||||||
|
rtcd->recon.recon2 = vp8_recon2b_neon;
|
||||||
|
rtcd->recon.recon4 = vp8_recon4b_neon;
|
||||||
|
rtcd->recon.recon_mb = vp8_recon_mb_neon;
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_ARMV6
|
||||||
|
#if CONFIG_RUNTIME_CPU_DETECT
|
||||||
|
if (has_media)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
vp8_build_intra_predictors_mby_ptr = vp8_build_intra_predictors_mby;
|
||||||
|
vp8_build_intra_predictors_mby_s_ptr = vp8_build_intra_predictors_mby_s;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_ARMV7
|
||||||
|
#if CONFIG_RUNTIME_CPU_DETECT
|
||||||
|
if (has_neon)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
vp8_build_intra_predictors_mby_ptr =
|
||||||
|
vp8_build_intra_predictors_mby_neon;
|
||||||
|
vp8_build_intra_predictors_mby_s_ptr =
|
||||||
|
vp8_build_intra_predictors_mby_s_neon;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
;
|
;
|
||||||
; Use of this source code is governed by a BSD-style license
|
; Use of this source code is governed by a BSD-style license
|
||||||
; that can be found in the LICENSE file in the root of the source
|
; that can be found in the LICENSE file in the root of the source
|
||||||
@@ -15,19 +15,19 @@
|
|||||||
AREA |.text|, CODE, READONLY ; name this block of code
|
AREA |.text|, CODE, READONLY ; name this block of code
|
||||||
|
|
||||||
;-------------------------------------
|
;-------------------------------------
|
||||||
; r0 unsigned char *src_ptr,
|
; r0 unsigned char *src_ptr,
|
||||||
; r1 unsigned short *output_ptr,
|
; r1 unsigned short *dst_ptr,
|
||||||
; r2 unsigned int src_pixels_per_line,
|
; r2 unsigned int src_pitch,
|
||||||
; r3 unsigned int output_height,
|
; r3 unsigned int height,
|
||||||
; stack unsigned int output_width,
|
; stack unsigned int width,
|
||||||
; stack const short *vp8_filter
|
; stack const short *vp8_filter
|
||||||
;-------------------------------------
|
;-------------------------------------
|
||||||
; The output is transposed stroed in output array to make it easy for second pass filtering.
|
; The output is transposed stroed in output array to make it easy for second pass filtering.
|
||||||
|vp8_filter_block2d_bil_first_pass_armv6| PROC
|
|vp8_filter_block2d_bil_first_pass_armv6| PROC
|
||||||
stmdb sp!, {r4 - r11, lr}
|
stmdb sp!, {r4 - r11, lr}
|
||||||
|
|
||||||
ldr r11, [sp, #40] ; vp8_filter address
|
ldr r11, [sp, #40] ; vp8_filter address
|
||||||
ldr r4, [sp, #36] ; output width
|
ldr r4, [sp, #36] ; width
|
||||||
|
|
||||||
mov r12, r3 ; outer-loop counter
|
mov r12, r3 ; outer-loop counter
|
||||||
sub r2, r2, r4 ; src increment for height loop
|
sub r2, r2, r4 ; src increment for height loop
|
||||||
@@ -38,10 +38,10 @@
|
|||||||
|
|
||||||
ldr r5, [r11] ; load up filter coefficients
|
ldr r5, [r11] ; load up filter coefficients
|
||||||
|
|
||||||
mov r3, r3, lsl #1 ; output_height*2
|
mov r3, r3, lsl #1 ; height*2
|
||||||
add r3, r3, #2 ; plus 2 to make output buffer 4-bit aligned since height is actually (height+1)
|
add r3, r3, #2 ; plus 2 to make output buffer 4-bit aligned since height is actually (height+1)
|
||||||
|
|
||||||
mov r11, r1 ; save output_ptr for each row
|
mov r11, r1 ; save dst_ptr for each row
|
||||||
|
|
||||||
cmp r5, #128 ; if filter coef = 128, then skip the filter
|
cmp r5, #128 ; if filter coef = 128, then skip the filter
|
||||||
beq bil_null_1st_filter
|
beq bil_null_1st_filter
|
||||||
@@ -140,17 +140,17 @@
|
|||||||
|
|
||||||
;---------------------------------
|
;---------------------------------
|
||||||
; r0 unsigned short *src_ptr,
|
; r0 unsigned short *src_ptr,
|
||||||
; r1 unsigned char *output_ptr,
|
; r1 unsigned char *dst_ptr,
|
||||||
; r2 int output_pitch,
|
; r2 int dst_pitch,
|
||||||
; r3 unsigned int output_height,
|
; r3 unsigned int height,
|
||||||
; stack unsigned int output_width,
|
; stack unsigned int width,
|
||||||
; stack const short *vp8_filter
|
; stack const short *vp8_filter
|
||||||
;---------------------------------
|
;---------------------------------
|
||||||
|vp8_filter_block2d_bil_second_pass_armv6| PROC
|
|vp8_filter_block2d_bil_second_pass_armv6| PROC
|
||||||
stmdb sp!, {r4 - r11, lr}
|
stmdb sp!, {r4 - r11, lr}
|
||||||
|
|
||||||
ldr r11, [sp, #40] ; vp8_filter address
|
ldr r11, [sp, #40] ; vp8_filter address
|
||||||
ldr r4, [sp, #36] ; output width
|
ldr r4, [sp, #36] ; width
|
||||||
|
|
||||||
ldr r5, [r11] ; load up filter coefficients
|
ldr r5, [r11] ; load up filter coefficients
|
||||||
mov r12, r4 ; outer-loop counter = width, since we work on transposed data matrix
|
mov r12, r4 ; outer-loop counter = width, since we work on transposed data matrix
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
;
|
;
|
||||||
; Use of this source code is governed by a BSD-style license
|
; Use of this source code is governed by a BSD-style license
|
||||||
; that can be found in the LICENSE file in the root of the source
|
; that can be found in the LICENSE file in the root of the source
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
;
|
;
|
||||||
; Use of this source code is governed by a BSD-style license
|
; Use of this source code is governed by a BSD-style license
|
||||||
; that can be found in the LICENSE file in the root of the source
|
; that can be found in the LICENSE file in the root of the source
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
;
|
;
|
||||||
; Use of this source code is governed by a BSD-style license
|
; Use of this source code is governed by a BSD-style license
|
||||||
; that can be found in the LICENSE file in the root of the source
|
; that can be found in the LICENSE file in the root of the source
|
||||||
|
67
vp8/common/arm/armv6/dc_only_idct_add_v6.asm
Normal file
67
vp8/common/arm/armv6/dc_only_idct_add_v6.asm
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
;
|
||||||
|
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
|
;
|
||||||
|
; Use of this source code is governed by a BSD-style license and patent
|
||||||
|
; grant that can be found in the LICENSE file in the root of the source
|
||||||
|
; tree. All contributing project authors may be found in the AUTHORS
|
||||||
|
; file in the root of the source tree.
|
||||||
|
;
|
||||||
|
|
||||||
|
EXPORT |vp8_dc_only_idct_add_v6|
|
||||||
|
|
||||||
|
AREA |.text|, CODE, READONLY
|
||||||
|
|
||||||
|
;void vp8_dc_only_idct_add_v6(short input_dc, unsigned char *pred_ptr,
|
||||||
|
; unsigned char *dst_ptr, int pitch, int stride)
|
||||||
|
; r0 input_dc
|
||||||
|
; r1 pred_ptr
|
||||||
|
; r2 dest_ptr
|
||||||
|
; r3 pitch
|
||||||
|
; sp stride
|
||||||
|
|
||||||
|
|vp8_dc_only_idct_add_v6| PROC
|
||||||
|
stmdb sp!, {r4 - r7, lr}
|
||||||
|
|
||||||
|
add r0, r0, #4 ; input_dc += 4
|
||||||
|
ldr r12, c0x0000FFFF
|
||||||
|
ldr r4, [r1], r3
|
||||||
|
ldr r6, [r1], r3
|
||||||
|
and r0, r12, r0, asr #3 ; input_dc >> 3 + mask
|
||||||
|
ldr lr, [sp, #20]
|
||||||
|
orr r0, r0, r0, lsl #16 ; a1 | a1
|
||||||
|
|
||||||
|
uxtab16 r5, r0, r4 ; a1+2 | a1+0
|
||||||
|
uxtab16 r4, r0, r4, ror #8 ; a1+3 | a1+1
|
||||||
|
uxtab16 r7, r0, r6
|
||||||
|
uxtab16 r6, r0, r6, ror #8
|
||||||
|
usat16 r5, #8, r5
|
||||||
|
usat16 r4, #8, r4
|
||||||
|
usat16 r7, #8, r7
|
||||||
|
usat16 r6, #8, r6
|
||||||
|
orr r5, r5, r4, lsl #8
|
||||||
|
orr r7, r7, r6, lsl #8
|
||||||
|
ldr r4, [r1], r3
|
||||||
|
ldr r6, [r1]
|
||||||
|
str r5, [r2], lr
|
||||||
|
str r7, [r2], lr
|
||||||
|
|
||||||
|
uxtab16 r5, r0, r4
|
||||||
|
uxtab16 r4, r0, r4, ror #8
|
||||||
|
uxtab16 r7, r0, r6
|
||||||
|
uxtab16 r6, r0, r6, ror #8
|
||||||
|
usat16 r5, #8, r5
|
||||||
|
usat16 r4, #8, r4
|
||||||
|
usat16 r7, #8, r7
|
||||||
|
usat16 r6, #8, r6
|
||||||
|
orr r5, r5, r4, lsl #8
|
||||||
|
orr r7, r7, r6, lsl #8
|
||||||
|
str r5, [r2], lr
|
||||||
|
str r7, [r2]
|
||||||
|
|
||||||
|
ldmia sp!, {r4 - r7, pc}
|
||||||
|
|
||||||
|
ENDP ; |vp8_dc_only_idct_add_v6|
|
||||||
|
|
||||||
|
; Constant Pool
|
||||||
|
c0x0000FFFF DCD 0x0000FFFF
|
||||||
|
END
|
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
;
|
;
|
||||||
; Use of this source code is governed by a BSD-style license
|
; Use of this source code is governed by a BSD-style license
|
||||||
; that can be found in the LICENSE file in the root of the source
|
; that can be found in the LICENSE file in the root of the source
|
||||||
@@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
EXPORT |vp8_filter_block2d_first_pass_armv6|
|
EXPORT |vp8_filter_block2d_first_pass_armv6|
|
||||||
EXPORT |vp8_filter_block2d_second_pass_armv6|
|
EXPORT |vp8_filter_block2d_second_pass_armv6|
|
||||||
|
EXPORT |vp8_filter4_block2d_second_pass_armv6|
|
||||||
EXPORT |vp8_filter_block2d_first_pass_only_armv6|
|
EXPORT |vp8_filter_block2d_first_pass_only_armv6|
|
||||||
EXPORT |vp8_filter_block2d_second_pass_only_armv6|
|
EXPORT |vp8_filter_block2d_second_pass_only_armv6|
|
||||||
|
|
||||||
@@ -192,6 +193,64 @@
|
|||||||
|
|
||||||
ENDP
|
ENDP
|
||||||
|
|
||||||
|
;---------------------------------
|
||||||
|
; r0 short *src_ptr,
|
||||||
|
; r1 unsigned char *output_ptr,
|
||||||
|
; r2 unsigned int output_pitch,
|
||||||
|
; r3 unsigned int cnt,
|
||||||
|
; stack const short *vp8_filter
|
||||||
|
;---------------------------------
|
||||||
|
|vp8_filter4_block2d_second_pass_armv6| PROC
|
||||||
|
stmdb sp!, {r4 - r11, lr}
|
||||||
|
|
||||||
|
ldr r11, [sp, #36] ; vp8_filter address
|
||||||
|
mov r7, r3, lsl #16 ; height is top part of counter
|
||||||
|
|
||||||
|
ldr r4, [r11] ; load up packed filter coefficients
|
||||||
|
add lr, r1, r3 ; save final destination pointer
|
||||||
|
ldr r5, [r11, #4]
|
||||||
|
ldr r6, [r11, #8]
|
||||||
|
|
||||||
|
pkhbt r12, r5, r4 ; pack the filter differently
|
||||||
|
pkhbt r11, r6, r5
|
||||||
|
mov r4, #0x40 ; rounding factor (for smlad{x})
|
||||||
|
|
||||||
|
|height_loop_2nd_4|
|
||||||
|
ldrd r8, [r0, #-4] ; load the data
|
||||||
|
orr r7, r7, r3, lsr #1 ; loop counter
|
||||||
|
|
||||||
|
|width_loop_2nd_4|
|
||||||
|
ldr r10, [r0, #4]!
|
||||||
|
smladx r6, r9, r12, r4 ; apply filter
|
||||||
|
pkhbt r8, r9, r8
|
||||||
|
smlad r5, r8, r12, r4
|
||||||
|
pkhbt r8, r10, r9
|
||||||
|
smladx r6, r10, r11, r6
|
||||||
|
sub r7, r7, #1
|
||||||
|
smlad r5, r8, r11, r5
|
||||||
|
|
||||||
|
mov r8, r9 ; shift the data for the next loop
|
||||||
|
mov r9, r10
|
||||||
|
|
||||||
|
usat r6, #8, r6, asr #7 ; shift and clamp
|
||||||
|
usat r5, #8, r5, asr #7
|
||||||
|
|
||||||
|
strb r5, [r1], r2 ; the result is transposed back and stored
|
||||||
|
tst r7, #0xff
|
||||||
|
strb r6, [r1], r2
|
||||||
|
|
||||||
|
bne width_loop_2nd_4
|
||||||
|
|
||||||
|
subs r7, r7, #0x10000
|
||||||
|
add r0, r0, #16 ; update src for next loop
|
||||||
|
sub r1, lr, r7, lsr #16 ; update dst for next loop
|
||||||
|
|
||||||
|
bne height_loop_2nd_4
|
||||||
|
|
||||||
|
ldmia sp!, {r4 - r11, pc}
|
||||||
|
|
||||||
|
ENDP
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
; r0 unsigned char *src_ptr
|
; r0 unsigned char *src_ptr
|
||||||
; r1 unsigned char *output_ptr,
|
; r1 unsigned char *output_ptr,
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
;
|
;
|
||||||
; Use of this source code is governed by a BSD-style license
|
; Use of this source code is governed by a BSD-style license
|
||||||
; that can be found in the LICENSE file in the root of the source
|
; that can be found in the LICENSE file in the root of the source
|
||||||
@@ -15,8 +15,6 @@
|
|||||||
EXPORT |vp8_short_idct4x4llm_v6_scott|
|
EXPORT |vp8_short_idct4x4llm_v6_scott|
|
||||||
EXPORT |vp8_short_idct4x4llm_v6_dual|
|
EXPORT |vp8_short_idct4x4llm_v6_dual|
|
||||||
|
|
||||||
EXPORT |vp8_dc_only_idct_armv6|
|
|
||||||
|
|
||||||
AREA |.text|, CODE, READONLY
|
AREA |.text|, CODE, READONLY
|
||||||
|
|
||||||
;********************************************************************************
|
;********************************************************************************
|
||||||
@@ -344,34 +342,4 @@ loop2_dual
|
|||||||
ldmia sp!, {r4 - r11, pc} ; replace vars, return restore
|
ldmia sp!, {r4 - r11, pc} ; replace vars, return restore
|
||||||
ENDP
|
ENDP
|
||||||
|
|
||||||
|
|
||||||
; sjl added 10/17/08
|
|
||||||
;void dc_only_idct_armv6(short input_dc, short *output, int pitch)
|
|
||||||
|vp8_dc_only_idct_armv6| PROC
|
|
||||||
stmdb sp!, {r4 - r6, lr}
|
|
||||||
|
|
||||||
add r0, r0, #0x4
|
|
||||||
add r4, r1, r2 ; output + shortpitch
|
|
||||||
mov r0, r0, ASR #0x3 ;aka a1
|
|
||||||
add r5, r1, r2, LSL #1 ; output + shortpitch * 2
|
|
||||||
pkhbt r0, r0, r0, lsl #16 ; a1 | a1
|
|
||||||
add r6, r5, r2 ; output + shortpitch * 3
|
|
||||||
|
|
||||||
str r0, [r1, #0]
|
|
||||||
str r0, [r1, #4]
|
|
||||||
|
|
||||||
str r0, [r4, #0]
|
|
||||||
str r0, [r4, #4]
|
|
||||||
|
|
||||||
str r0, [r5, #0]
|
|
||||||
str r0, [r5, #4]
|
|
||||||
|
|
||||||
str r0, [r6, #0]
|
|
||||||
str r0, [r6, #4]
|
|
||||||
|
|
||||||
|
|
||||||
ldmia sp!, {r4 - r6, pc}
|
|
||||||
|
|
||||||
ENDP ; |vp8_dc_only_idct_armv6|
|
|
||||||
|
|
||||||
END
|
END
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
;
|
;
|
||||||
; Use of this source code is governed by a BSD-style license
|
; Use of this source code is governed by a BSD-style license
|
||||||
; that can be found in the LICENSE file in the root of the source
|
; that can be found in the LICENSE file in the root of the source
|
||||||
@@ -8,8 +8,8 @@
|
|||||||
; be found in the AUTHORS file in the root of the source tree.
|
; be found in the AUTHORS file in the root of the source tree.
|
||||||
;
|
;
|
||||||
|
|
||||||
EXPORT |vp8_short_inv_walsh4x4_armv6|
|
EXPORT |vp8_short_inv_walsh4x4_v6|
|
||||||
EXPORT |vp8_short_inv_walsh4x4_1_armv6|
|
EXPORT |vp8_short_inv_walsh4x4_1_v6|
|
||||||
|
|
||||||
ARM
|
ARM
|
||||||
REQUIRE8
|
REQUIRE8
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
|
|
||||||
AREA |.text|, CODE, READONLY ; name this block of code
|
AREA |.text|, CODE, READONLY ; name this block of code
|
||||||
|
|
||||||
;short vp8_short_inv_walsh4x4_armv6(short *input, short *output)
|
;short vp8_short_inv_walsh4x4_v6(short *input, short *output)
|
||||||
|vp8_short_inv_walsh4x4_armv6| PROC
|
|vp8_short_inv_walsh4x4_v6| PROC
|
||||||
|
|
||||||
stmdb sp!, {r4 - r11, lr}
|
stmdb sp!, {r4 - r11, lr}
|
||||||
|
|
||||||
@@ -123,11 +123,11 @@
|
|||||||
str r5, [r1]
|
str r5, [r1]
|
||||||
|
|
||||||
ldmia sp!, {r4 - r11, pc}
|
ldmia sp!, {r4 - r11, pc}
|
||||||
ENDP ; |vp8_short_inv_walsh4x4_armv6|
|
ENDP ; |vp8_short_inv_walsh4x4_v6|
|
||||||
|
|
||||||
|
|
||||||
;short vp8_short_inv_walsh4x4_1_armv6(short *input, short *output)
|
;short vp8_short_inv_walsh4x4_1_v6(short *input, short *output)
|
||||||
|vp8_short_inv_walsh4x4_1_armv6| PROC
|
|vp8_short_inv_walsh4x4_1_v6| PROC
|
||||||
|
|
||||||
ldrsh r2, [r0] ; [0]
|
ldrsh r2, [r0] ; [0]
|
||||||
add r2, r2, #3 ; [0] + 3
|
add r2, r2, #3 ; [0] + 3
|
||||||
@@ -145,7 +145,7 @@
|
|||||||
str r2, [r1]
|
str r2, [r1]
|
||||||
|
|
||||||
bx lr
|
bx lr
|
||||||
ENDP ; |vp8_short_inv_walsh4x4_1_armv6|
|
ENDP ; |vp8_short_inv_walsh4x4_1_v6|
|
||||||
|
|
||||||
; Constant Pool
|
; Constant Pool
|
||||||
c0x00030003 DCD 0x00030003
|
c0x00030003 DCD 0x00030003
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
;
|
;
|
||||||
; Use of this source code is governed by a BSD-style license
|
; Use of this source code is governed by a BSD-style license
|
||||||
; that can be found in the LICENSE file in the root of the source
|
; that can be found in the LICENSE file in the root of the source
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
;
|
;
|
||||||
; Use of this source code is governed by a BSD-style license
|
; Use of this source code is governed by a BSD-style license
|
||||||
; that can be found in the LICENSE file in the root of the source
|
; that can be found in the LICENSE file in the root of the source
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
;
|
;
|
||||||
; Use of this source code is governed by a BSD-style license
|
; Use of this source code is governed by a BSD-style license
|
||||||
; that can be found in the LICENSE file in the root of the source
|
; that can be found in the LICENSE file in the root of the source
|
||||||
@@ -55,113 +55,87 @@ pstep RN r1
|
|||||||
;stack const char *thresh,
|
;stack const char *thresh,
|
||||||
;stack int count
|
;stack int count
|
||||||
|
|
||||||
;Note: All 16 elements in flimit are equal. So, in the code, only one load is needed
|
; All 16 elements in flimit are equal. So, in the code, only one load is needed
|
||||||
;for flimit. Same way applies to limit and thresh.
|
; for flimit. Same applies to limit. thresh is not used in simple looopfilter
|
||||||
|
|
||||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|vp8_loop_filter_simple_horizontal_edge_armv6| PROC
|
|vp8_loop_filter_simple_horizontal_edge_armv6| PROC
|
||||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
stmdb sp!, {r4 - r11, lr}
|
stmdb sp!, {r4 - r11, lr}
|
||||||
|
|
||||||
sub src, src, pstep, lsl #1 ; move src pointer down by 2 lines
|
ldr r12, [r3] ; limit
|
||||||
|
ldr r3, [src, -pstep, lsl #1] ; p1
|
||||||
ldr r12, [r3], #4 ; limit
|
ldr r4, [src, -pstep] ; p0
|
||||||
ldr r3, [src], pstep ; p1
|
ldr r5, [src] ; q0
|
||||||
|
ldr r6, [src, pstep] ; q1
|
||||||
ldr r9, [sp, #36] ; count for 8-in-parallel
|
ldr r7, [r2] ; flimit
|
||||||
ldr r4, [src], pstep ; p0
|
|
||||||
|
|
||||||
ldr r7, [r2], #4 ; flimit
|
|
||||||
ldr r5, [src], pstep ; q0
|
|
||||||
ldr r2, c0x80808080
|
ldr r2, c0x80808080
|
||||||
|
ldr r9, [sp, #40] ; count for 8-in-parallel
|
||||||
ldr r6, [src] ; q1
|
|
||||||
|
|
||||||
uadd8 r7, r7, r7 ; flimit * 2
|
uadd8 r7, r7, r7 ; flimit * 2
|
||||||
mov r9, r9, lsl #1 ; 4-in-parallel
|
mov r9, r9, lsl #1 ; double the count. we're doing 4 at a time
|
||||||
uadd8 r12, r7, r12 ; flimit * 2 + limit
|
uadd8 r12, r7, r12 ; flimit * 2 + limit
|
||||||
|
mov lr, #0 ; need 0 in a couple places
|
||||||
|
|
||||||
|simple_hnext8|
|
|simple_hnext8|
|
||||||
; vp8_simple_filter_mask() function
|
; vp8_simple_filter_mask()
|
||||||
|
|
||||||
uqsub8 r7, r3, r6 ; p1 - q1
|
uqsub8 r7, r3, r6 ; p1 - q1
|
||||||
uqsub8 r8, r6, r3 ; q1 - p1
|
uqsub8 r8, r6, r3 ; q1 - p1
|
||||||
uqsub8 r10, r4, r5 ; p0 - q0
|
uqsub8 r10, r4, r5 ; p0 - q0
|
||||||
uqsub8 r11, r5, r4 ; q0 - p0
|
uqsub8 r11, r5, r4 ; q0 - p0
|
||||||
orr r8, r8, r7 ; abs(p1 - q1)
|
orr r8, r8, r7 ; abs(p1 - q1)
|
||||||
ldr lr, c0x7F7F7F7F ; 01111111 mask
|
|
||||||
orr r10, r10, r11 ; abs(p0 - q0)
|
orr r10, r10, r11 ; abs(p0 - q0)
|
||||||
and r8, lr, r8, lsr #1 ; abs(p1 - q1) / 2
|
|
||||||
uqadd8 r10, r10, r10 ; abs(p0 - q0) * 2
|
uqadd8 r10, r10, r10 ; abs(p0 - q0) * 2
|
||||||
mvn lr, #0 ; r10 == -1
|
uhadd8 r8, r8, lr ; abs(p1 - q2) >> 1
|
||||||
uqadd8 r10, r10, r8 ; abs(p0 - q0)*2 + abs(p1 - q1)/2
|
uqadd8 r10, r10, r8 ; abs(p0 - q0)*2 + abs(p1 - q1)/2
|
||||||
; STALL waiting on r10 :(
|
mvn r8, #0
|
||||||
uqsub8 r10, r10, r12 ; compare to flimit
|
usub8 r10, r12, r10 ; compare to flimit. usub8 sets GE flags
|
||||||
mov r8, #0
|
sel r10, r8, lr ; filter mask: F or 0
|
||||||
|
|
||||||
usub8 r10, r8, r10 ; use usub8 instead of ssub8
|
|
||||||
; STALL (maybe?) when are flags set? :/
|
|
||||||
sel r10, lr, r8 ; filter mask: lr
|
|
||||||
|
|
||||||
cmp r10, #0
|
cmp r10, #0
|
||||||
beq simple_hskip_filter ; skip filtering
|
beq simple_hskip_filter ; skip filtering if all masks are 0x00
|
||||||
|
|
||||||
;vp8_simple_filter() function
|
;vp8_simple_filter()
|
||||||
|
|
||||||
eor r3, r3, r2 ; p1 offset to convert to a signed value
|
eor r3, r3, r2 ; p1 offset to convert to a signed value
|
||||||
eor r6, r6, r2 ; q1 offset to convert to a signed value
|
eor r6, r6, r2 ; q1 offset to convert to a signed value
|
||||||
eor r4, r4, r2 ; p0 offset to convert to a signed value
|
eor r4, r4, r2 ; p0 offset to convert to a signed value
|
||||||
eor r5, r5, r2 ; q0 offset to convert to a signed value
|
eor r5, r5, r2 ; q0 offset to convert to a signed value
|
||||||
|
|
||||||
qsub8 r3, r3, r6 ; vp8_filter (r3) = vp8_signed_char_clamp(p1-q1)
|
qsub8 r3, r3, r6 ; vp8_filter = p1 - q1
|
||||||
qsub8 r6, r5, r4 ; vp8_filter = vp8_signed_char_clamp(vp8_filter + 3 * ( q0 - p0))
|
qsub8 r6, r5, r4 ; q0 - p0
|
||||||
|
qadd8 r3, r3, r6 ; += q0 - p0
|
||||||
qadd8 r3, r3, r6
|
|
||||||
ldr r8, c0x03030303 ; r8 = 3
|
|
||||||
|
|
||||||
qadd8 r3, r3, r6
|
|
||||||
ldr r7, c0x04040404
|
ldr r7, c0x04040404
|
||||||
|
qadd8 r3, r3, r6 ; += q0 - p0
|
||||||
|
ldr r8, c0x03030303
|
||||||
|
qadd8 r3, r3, r6 ; vp8_filter = p1-q1 + 3*(q0-p0))
|
||||||
|
;STALL
|
||||||
|
and r3, r3, r10 ; vp8_filter &= mask
|
||||||
|
|
||||||
qadd8 r3, r3, r6
|
qadd8 r7 , r3 , r7 ; Filter1 = vp8_filter + 4
|
||||||
and r3, r3, lr ; vp8_filter &= mask;
|
qadd8 r8 , r3 , r8 ; Filter2 = vp8_filter + 3
|
||||||
|
|
||||||
;save bottom 3 bits so that we round one side +4 and the other +3
|
shadd8 r7 , r7 , lr
|
||||||
qadd8 r8 , r3 , r8 ; Filter2 (r8) = vp8_signed_char_clamp(vp8_filter+3)
|
shadd8 r8 , r8 , lr
|
||||||
qadd8 r3 , r3 , r7 ; Filter1 (r3) = vp8_signed_char_clamp(vp8_filter+4)
|
shadd8 r7 , r7 , lr
|
||||||
|
shadd8 r8 , r8 , lr
|
||||||
|
shadd8 r7 , r7 , lr ; Filter1 >>= 3
|
||||||
|
shadd8 r8 , r8 , lr ; Filter2 >>= 3
|
||||||
|
|
||||||
mov r7, #0
|
qsub8 r5 ,r5, r7 ; u = q0 - Filter1
|
||||||
shadd8 r8 , r8 , r7 ; Filter2 >>= 3
|
qadd8 r4, r4, r8 ; u = p0 + Filter2
|
||||||
shadd8 r3 , r3 , r7 ; Filter1 >>= 3
|
|
||||||
shadd8 r8 , r8 , r7
|
|
||||||
shadd8 r3 , r3 , r7
|
|
||||||
shadd8 r8 , r8 , r7 ; r8: Filter2
|
|
||||||
shadd8 r3 , r3 , r7 ; r7: filter1
|
|
||||||
|
|
||||||
;calculate output
|
|
||||||
sub src, src, pstep, lsl #1
|
|
||||||
|
|
||||||
qadd8 r4, r4, r8 ; u = vp8_signed_char_clamp(p0 + Filter2)
|
|
||||||
qsub8 r5 ,r5, r3 ; u = vp8_signed_char_clamp(q0 - Filter1)
|
|
||||||
eor r4, r4, r2 ; *op0 = u^0x80
|
|
||||||
str r4, [src], pstep ; store op0 result
|
|
||||||
eor r5, r5, r2 ; *oq0 = u^0x80
|
eor r5, r5, r2 ; *oq0 = u^0x80
|
||||||
str r5, [src], pstep ; store oq0 result
|
str r5, [src] ; store oq0 result
|
||||||
|
eor r4, r4, r2 ; *op0 = u^0x80
|
||||||
|
str r4, [src, -pstep] ; store op0 result
|
||||||
|
|
||||||
|simple_hskip_filter|
|
|simple_hskip_filter|
|
||||||
add src, src, #4
|
|
||||||
sub src, src, pstep
|
|
||||||
sub src, src, pstep, lsl #1
|
|
||||||
|
|
||||||
subs r9, r9, #1
|
subs r9, r9, #1
|
||||||
|
addne src, src, #4 ; next row
|
||||||
|
|
||||||
;pld [src]
|
ldrne r3, [src, -pstep, lsl #1] ; p1
|
||||||
;pld [src, pstep]
|
ldrne r4, [src, -pstep] ; p0
|
||||||
;pld [src, pstep, lsl #1]
|
ldrne r5, [src] ; q0
|
||||||
|
ldrne r6, [src, pstep] ; q1
|
||||||
ldrne r3, [src], pstep ; p1
|
|
||||||
ldrne r4, [src], pstep ; p0
|
|
||||||
ldrne r5, [src], pstep ; q0
|
|
||||||
ldrne r6, [src] ; q1
|
|
||||||
|
|
||||||
bne simple_hnext8
|
bne simple_hnext8
|
||||||
|
|
||||||
@@ -174,9 +148,9 @@ pstep RN r1
|
|||||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
stmdb sp!, {r4 - r11, lr}
|
stmdb sp!, {r4 - r11, lr}
|
||||||
|
|
||||||
ldr r12, [r2], #4 ; r12: flimit
|
ldr r12, [r2] ; r12: flimit
|
||||||
ldr r2, c0x80808080
|
ldr r2, c0x80808080
|
||||||
ldr r7, [r3], #4 ; limit
|
ldr r7, [r3] ; limit
|
||||||
|
|
||||||
; load soure data to r7, r8, r9, r10
|
; load soure data to r7, r8, r9, r10
|
||||||
ldrh r3, [src, #-2]
|
ldrh r3, [src, #-2]
|
||||||
@@ -213,16 +187,14 @@ pstep RN r1
|
|||||||
uqsub8 r10, r5, r4 ; q0 - p0
|
uqsub8 r10, r5, r4 ; q0 - p0
|
||||||
orr r7, r7, r8 ; abs(p1 - q1)
|
orr r7, r7, r8 ; abs(p1 - q1)
|
||||||
orr r9, r9, r10 ; abs(p0 - q0)
|
orr r9, r9, r10 ; abs(p0 - q0)
|
||||||
ldr lr, c0x7F7F7F7F ; 0111 1111 mask
|
|
||||||
uqadd8 r9, r9, r9 ; abs(p0 - q0) * 2
|
|
||||||
and r7, lr, r7, lsr #1 ; abs(p1 - q1) / 2
|
|
||||||
mov r8, #0
|
mov r8, #0
|
||||||
|
uqadd8 r9, r9, r9 ; abs(p0 - q0) * 2
|
||||||
|
uhadd8 r7, r7, r8 ; abs(p1 - q1) / 2
|
||||||
uqadd8 r7, r7, r9 ; abs(p0 - q0)*2 + abs(p1 - q1)/2
|
uqadd8 r7, r7, r9 ; abs(p0 - q0)*2 + abs(p1 - q1)/2
|
||||||
mvn r10, #0 ; r10 == -1
|
mvn r10, #0 ; r10 == -1
|
||||||
uqsub8 r7, r7, r12 ; compare to flimit
|
|
||||||
|
|
||||||
usub8 r7, r8, r7
|
usub8 r7, r12, r7 ; compare to flimit
|
||||||
sel r7, r10, r8 ; filter mask: lr
|
sel lr, r10, r8 ; filter mask
|
||||||
|
|
||||||
cmp lr, #0
|
cmp lr, #0
|
||||||
beq simple_vskip_filter ; skip filtering
|
beq simple_vskip_filter ; skip filtering
|
||||||
@@ -233,35 +205,34 @@ pstep RN r1
|
|||||||
eor r4, r4, r2 ; p0 offset to convert to a signed value
|
eor r4, r4, r2 ; p0 offset to convert to a signed value
|
||||||
eor r5, r5, r2 ; q0 offset to convert to a signed value
|
eor r5, r5, r2 ; q0 offset to convert to a signed value
|
||||||
|
|
||||||
qsub8 r3, r3, r6 ; vp8_filter (r3) = vp8_signed_char_clamp(p1-q1)
|
qsub8 r3, r3, r6 ; vp8_filter = p1 - q1
|
||||||
qsub8 r6, r5, r4 ; vp8_filter = vp8_signed_char_clamp(vp8_filter + 3 * ( q0 - p0))
|
qsub8 r6, r5, r4 ; q0 - p0
|
||||||
|
|
||||||
qadd8 r3, r3, r6
|
qadd8 r3, r3, r6 ; vp8_filter += q0 - p0
|
||||||
ldr r8, c0x03030303 ; r8 = 3
|
ldr r9, c0x03030303 ; r9 = 3
|
||||||
|
|
||||||
qadd8 r3, r3, r6
|
qadd8 r3, r3, r6 ; vp8_filter += q0 - p0
|
||||||
ldr r7, c0x04040404
|
ldr r7, c0x04040404
|
||||||
|
|
||||||
qadd8 r3, r3, r6
|
qadd8 r3, r3, r6 ; vp8_filter = p1-q1 + 3*(q0-p0))
|
||||||
|
;STALL
|
||||||
and r3, r3, lr ; vp8_filter &= mask
|
and r3, r3, lr ; vp8_filter &= mask
|
||||||
|
|
||||||
;save bottom 3 bits so that we round one side +4 and the other +3
|
qadd8 r9 , r3 , r9 ; Filter2 = vp8_filter + 3
|
||||||
qadd8 r8 , r3 , r8 ; Filter2 (r8) = vp8_signed_char_clamp(vp8_filter+3)
|
qadd8 r3 , r3 , r7 ; Filter1 = vp8_filter + 4
|
||||||
qadd8 r3 , r3 , r7 ; Filter1 (r3) = vp8_signed_char_clamp(vp8_filter+4)
|
|
||||||
|
|
||||||
mov r7, #0
|
shadd8 r9 , r9 , r8
|
||||||
shadd8 r8 , r8 , r7 ; Filter2 >>= 3
|
shadd8 r3 , r3 , r8
|
||||||
shadd8 r3 , r3 , r7 ; Filter1 >>= 3
|
shadd8 r9 , r9 , r8
|
||||||
shadd8 r8 , r8 , r7
|
shadd8 r3 , r3 , r8
|
||||||
shadd8 r3 , r3 , r7
|
shadd8 r9 , r9 , r8 ; Filter2 >>= 3
|
||||||
shadd8 r8 , r8 , r7 ; r8: filter2
|
shadd8 r3 , r3 , r8 ; Filter1 >>= 3
|
||||||
shadd8 r3 , r3 , r7 ; r7: filter1
|
|
||||||
|
|
||||||
;calculate output
|
;calculate output
|
||||||
sub src, src, pstep, lsl #2
|
sub src, src, pstep, lsl #2
|
||||||
|
|
||||||
qadd8 r4, r4, r8 ; u = vp8_signed_char_clamp(p0 + Filter2)
|
qadd8 r4, r4, r9 ; u = p0 + Filter2
|
||||||
qsub8 r5, r5, r3 ; u = vp8_signed_char_clamp(q0 - Filter1)
|
qsub8 r5, r5, r3 ; u = q0 - Filter1
|
||||||
eor r4, r4, r2 ; *op0 = u^0x80
|
eor r4, r4, r2 ; *op0 = u^0x80
|
||||||
eor r5, r5, r2 ; *oq0 = u^0x80
|
eor r5, r5, r2 ; *oq0 = u^0x80
|
||||||
|
|
||||||
@@ -286,10 +257,6 @@ pstep RN r1
|
|||||||
|simple_vskip_filter|
|
|simple_vskip_filter|
|
||||||
subs r11, r11, #1
|
subs r11, r11, #1
|
||||||
|
|
||||||
;pld [src]
|
|
||||||
;pld [src, pstep]
|
|
||||||
;pld [src, pstep, lsl #1]
|
|
||||||
|
|
||||||
; load soure data to r7, r8, r9, r10
|
; load soure data to r7, r8, r9, r10
|
||||||
ldrneh r3, [src, #-2]
|
ldrneh r3, [src, #-2]
|
||||||
ldrneh r4, [src], pstep
|
ldrneh r4, [src], pstep
|
||||||
@@ -309,14 +276,12 @@ pstep RN r1
|
|||||||
|
|
||||||
bne simple_vnext8
|
bne simple_vnext8
|
||||||
|
|
||||||
ldmia sp!, {r4 - r12, pc}
|
ldmia sp!, {r4 - r11, pc}
|
||||||
ENDP ; |vp8_loop_filter_simple_vertical_edge_armv6|
|
ENDP ; |vp8_loop_filter_simple_vertical_edge_armv6|
|
||||||
|
|
||||||
; Constant Pool
|
; Constant Pool
|
||||||
c0x80808080 DCD 0x80808080
|
c0x80808080 DCD 0x80808080
|
||||||
c0x03030303 DCD 0x03030303
|
c0x03030303 DCD 0x03030303
|
||||||
c0x04040404 DCD 0x04040404
|
c0x04040404 DCD 0x04040404
|
||||||
c0x01010101 DCD 0x01010101
|
|
||||||
c0x7F7F7F7F DCD 0x7F7F7F7F
|
|
||||||
|
|
||||||
END
|
END
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
;
|
;
|
||||||
; Use of this source code is governed by a BSD-style license
|
; Use of this source code is governed by a BSD-style license
|
||||||
; that can be found in the LICENSE file in the root of the source
|
; that can be found in the LICENSE file in the root of the source
|
||||||
@@ -25,10 +25,10 @@
|
|||||||
;and the result is stored in transpose.
|
;and the result is stored in transpose.
|
||||||
|vp8_sixtap_predict8x4_armv6| PROC
|
|vp8_sixtap_predict8x4_armv6| PROC
|
||||||
stmdb sp!, {r4 - r11, lr}
|
stmdb sp!, {r4 - r11, lr}
|
||||||
sub sp, sp, #184 ;reserve space on stack for temporary storage: 20x(8+1) +4
|
str r3, [sp, #-184]! ;reserve space on stack for temporary storage, store yoffset
|
||||||
|
|
||||||
cmp r2, #0 ;skip first_pass filter if xoffset=0
|
cmp r2, #0 ;skip first_pass filter if xoffset=0
|
||||||
str r3, [sp], #4 ;store yoffset
|
add lr, sp, #4 ;point to temporary buffer
|
||||||
beq skip_firstpass_filter
|
beq skip_firstpass_filter
|
||||||
|
|
||||||
;first-pass filter
|
;first-pass filter
|
||||||
@@ -45,7 +45,6 @@
|
|||||||
mov r2, #0x90000 ; height=9 is top part of counter
|
mov r2, #0x90000 ; height=9 is top part of counter
|
||||||
|
|
||||||
sub r1, r1, #8
|
sub r1, r1, #8
|
||||||
mov lr, #20
|
|
||||||
|
|
||||||
|first_pass_hloop_v6|
|
|first_pass_hloop_v6|
|
||||||
ldrb r6, [r0, #-5] ; load source data
|
ldrb r6, [r0, #-5] ; load source data
|
||||||
@@ -83,10 +82,10 @@
|
|||||||
tst r2, #0xff ; test loop counter
|
tst r2, #0xff ; test loop counter
|
||||||
usat r11, #8, r11, asr #7
|
usat r11, #8, r11, asr #7
|
||||||
add r12, r12, #0x40
|
add r12, r12, #0x40
|
||||||
strh r11, [sp], lr ; result is transposed and stored, which
|
strh r11, [lr], #20 ; result is transposed and stored, which
|
||||||
usat r12, #8, r12, asr #7
|
usat r12, #8, r12, asr #7
|
||||||
|
|
||||||
strh r12, [sp], lr
|
strh r12, [lr], #20
|
||||||
|
|
||||||
movne r11, r6
|
movne r11, r6
|
||||||
movne r12, r7
|
movne r12, r7
|
||||||
@@ -107,8 +106,7 @@
|
|||||||
|
|
||||||
subs r2, r2, #0x10000
|
subs r2, r2, #0x10000
|
||||||
|
|
||||||
mov r6, #158
|
sub lr, lr, #158
|
||||||
sub sp, sp, r6
|
|
||||||
|
|
||||||
add r0, r0, r1 ; move to next input line
|
add r0, r0, r1 ; move to next input line
|
||||||
|
|
||||||
@@ -116,10 +114,7 @@
|
|||||||
|
|
||||||
;second pass filter
|
;second pass filter
|
||||||
secondpass_filter
|
secondpass_filter
|
||||||
mov r1, #18
|
ldr r3, [sp], #4 ; load back yoffset
|
||||||
sub sp, sp, r1 ; 18+4
|
|
||||||
|
|
||||||
ldr r3, [sp, #-4] ; load back yoffset
|
|
||||||
ldr r0, [sp, #216] ; load dst address from stack 180+36
|
ldr r0, [sp, #216] ; load dst address from stack 180+36
|
||||||
ldr r1, [sp, #220] ; load dst stride from stack 180+40
|
ldr r1, [sp, #220] ; load dst stride from stack 180+40
|
||||||
|
|
||||||
@@ -192,30 +187,28 @@ skip_firstpass_filter
|
|||||||
sub r0, r0, r1, lsl #1
|
sub r0, r0, r1, lsl #1
|
||||||
sub r1, r1, #8
|
sub r1, r1, #8
|
||||||
mov r2, #9
|
mov r2, #9
|
||||||
mov r3, #20
|
|
||||||
|
|
||||||
skip_firstpass_hloop
|
skip_firstpass_hloop
|
||||||
ldrb r4, [r0], #1 ; load data
|
ldrb r4, [r0], #1 ; load data
|
||||||
subs r2, r2, #1
|
subs r2, r2, #1
|
||||||
ldrb r5, [r0], #1
|
ldrb r5, [r0], #1
|
||||||
strh r4, [sp], r3 ; store it to immediate buffer
|
strh r4, [lr], #20 ; store it to immediate buffer
|
||||||
ldrb r6, [r0], #1 ; load data
|
ldrb r6, [r0], #1 ; load data
|
||||||
strh r5, [sp], r3
|
strh r5, [lr], #20
|
||||||
ldrb r7, [r0], #1
|
ldrb r7, [r0], #1
|
||||||
strh r6, [sp], r3
|
strh r6, [lr], #20
|
||||||
ldrb r8, [r0], #1
|
ldrb r8, [r0], #1
|
||||||
strh r7, [sp], r3
|
strh r7, [lr], #20
|
||||||
ldrb r9, [r0], #1
|
ldrb r9, [r0], #1
|
||||||
strh r8, [sp], r3
|
strh r8, [lr], #20
|
||||||
ldrb r10, [r0], #1
|
ldrb r10, [r0], #1
|
||||||
strh r9, [sp], r3
|
strh r9, [lr], #20
|
||||||
ldrb r11, [r0], #1
|
ldrb r11, [r0], #1
|
||||||
strh r10, [sp], r3
|
strh r10, [lr], #20
|
||||||
add r0, r0, r1 ; move to next input line
|
add r0, r0, r1 ; move to next input line
|
||||||
strh r11, [sp], r3
|
strh r11, [lr], #20
|
||||||
|
|
||||||
mov r4, #158
|
sub lr, lr, #158 ; move over to next column
|
||||||
sub sp, sp, r4 ; move over to next column
|
|
||||||
bne skip_firstpass_hloop
|
bne skip_firstpass_hloop
|
||||||
|
|
||||||
b secondpass_filter
|
b secondpass_filter
|
||||||
@@ -250,8 +243,6 @@ skip_secondpass_hloop
|
|||||||
ENDP
|
ENDP
|
||||||
|
|
||||||
;-----------------
|
;-----------------
|
||||||
AREA subpelfilters8_dat, DATA, READWRITE ;read/write by default
|
|
||||||
;Data section with name data_area is specified. DCD reserves space in memory for 48 data.
|
|
||||||
;One word each is reserved. Label filter_coeff can be used to access the data.
|
;One word each is reserved. Label filter_coeff can be used to access the data.
|
||||||
;Data address: filter_coeff, filter_coeff+4, filter_coeff+8 ...
|
;Data address: filter_coeff, filter_coeff+4, filter_coeff+8 ...
|
||||||
_filter8_coeff_
|
_filter8_coeff_
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -10,128 +10,29 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "subpixel.h"
|
#include "vp8/common/filter.h"
|
||||||
|
#include "vp8/common/subpixel.h"
|
||||||
#define BLOCK_HEIGHT_WIDTH 4
|
#include "bilinearfilter_arm.h"
|
||||||
#define VP8_FILTER_WEIGHT 128
|
|
||||||
#define VP8_FILTER_SHIFT 7
|
|
||||||
|
|
||||||
static const short bilinear_filters[8][2] =
|
|
||||||
{
|
|
||||||
{ 128, 0 },
|
|
||||||
{ 112, 16 },
|
|
||||||
{ 96, 32 },
|
|
||||||
{ 80, 48 },
|
|
||||||
{ 64, 64 },
|
|
||||||
{ 48, 80 },
|
|
||||||
{ 32, 96 },
|
|
||||||
{ 16, 112 }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
extern void vp8_filter_block2d_bil_first_pass_armv6
|
|
||||||
(
|
|
||||||
unsigned char *src_ptr,
|
|
||||||
unsigned short *output_ptr,
|
|
||||||
unsigned int src_pixels_per_line,
|
|
||||||
unsigned int output_height,
|
|
||||||
unsigned int output_width,
|
|
||||||
const short *vp8_filter
|
|
||||||
);
|
|
||||||
|
|
||||||
extern void vp8_filter_block2d_bil_second_pass_armv6
|
|
||||||
(
|
|
||||||
unsigned short *src_ptr,
|
|
||||||
unsigned char *output_ptr,
|
|
||||||
int output_pitch,
|
|
||||||
unsigned int output_height,
|
|
||||||
unsigned int output_width,
|
|
||||||
const short *vp8_filter
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
void vp8_filter_block2d_bil_first_pass_6
|
|
||||||
(
|
|
||||||
unsigned char *src_ptr,
|
|
||||||
unsigned short *output_ptr,
|
|
||||||
unsigned int src_pixels_per_line,
|
|
||||||
unsigned int output_height,
|
|
||||||
unsigned int output_width,
|
|
||||||
const short *vp8_filter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
unsigned int i, j;
|
|
||||||
|
|
||||||
for ( i=0; i<output_height; i++ )
|
|
||||||
{
|
|
||||||
for ( j=0; j<output_width; j++ )
|
|
||||||
{
|
|
||||||
// Apply bilinear filter
|
|
||||||
output_ptr[j] = ( ( (int)src_ptr[0] * vp8_filter[0]) +
|
|
||||||
((int)src_ptr[1] * vp8_filter[1]) +
|
|
||||||
(VP8_FILTER_WEIGHT/2) ) >> VP8_FILTER_SHIFT;
|
|
||||||
src_ptr++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Next row...
|
|
||||||
src_ptr += src_pixels_per_line - output_width;
|
|
||||||
output_ptr += output_width;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void vp8_filter_block2d_bil_second_pass_6
|
|
||||||
(
|
|
||||||
unsigned short *src_ptr,
|
|
||||||
unsigned char *output_ptr,
|
|
||||||
int output_pitch,
|
|
||||||
unsigned int output_height,
|
|
||||||
unsigned int output_width,
|
|
||||||
const short *vp8_filter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
unsigned int i,j;
|
|
||||||
int Temp;
|
|
||||||
|
|
||||||
for ( i=0; i<output_height; i++ )
|
|
||||||
{
|
|
||||||
for ( j=0; j<output_width; j++ )
|
|
||||||
{
|
|
||||||
// Apply filter
|
|
||||||
Temp = ((int)src_ptr[0] * vp8_filter[0]) +
|
|
||||||
((int)src_ptr[output_width] * vp8_filter[1]) +
|
|
||||||
(VP8_FILTER_WEIGHT/2);
|
|
||||||
output_ptr[j] = (unsigned int)(Temp >> VP8_FILTER_SHIFT);
|
|
||||||
src_ptr++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Next row...
|
|
||||||
//src_ptr += src_pixels_per_line - output_width;
|
|
||||||
output_ptr += output_pitch;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void vp8_filter_block2d_bil_armv6
|
void vp8_filter_block2d_bil_armv6
|
||||||
(
|
(
|
||||||
unsigned char *src_ptr,
|
unsigned char *src_ptr,
|
||||||
unsigned char *output_ptr,
|
unsigned char *dst_ptr,
|
||||||
unsigned int src_pixels_per_line,
|
unsigned int src_pitch,
|
||||||
unsigned int dst_pitch,
|
unsigned int dst_pitch,
|
||||||
const short *HFilter,
|
const short *HFilter,
|
||||||
const short *VFilter,
|
const short *VFilter,
|
||||||
int Width,
|
int Width,
|
||||||
int Height
|
int Height
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
unsigned short FData[36*16]; /* Temp data buffer used in filtering */
|
||||||
|
|
||||||
unsigned short FData[36*16]; // Temp data bufffer used in filtering
|
/* First filter 1-D horizontally... */
|
||||||
|
vp8_filter_block2d_bil_first_pass_armv6(src_ptr, FData, src_pitch, Height + 1, Width, HFilter);
|
||||||
|
|
||||||
// First filter 1-D horizontally...
|
/* then 1-D vertically... */
|
||||||
// pixel_step = 1;
|
vp8_filter_block2d_bil_second_pass_armv6(FData, dst_ptr, dst_pitch, Height, Width, VFilter);
|
||||||
vp8_filter_block2d_bil_first_pass_armv6(src_ptr, FData, src_pixels_per_line, Height + 1, Width, HFilter);
|
|
||||||
|
|
||||||
// then 1-D vertically...
|
|
||||||
vp8_filter_block2d_bil_second_pass_armv6(FData, output_ptr, dst_pitch, Height, Width, VFilter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -148,8 +49,8 @@ void vp8_bilinear_predict4x4_armv6
|
|||||||
const short *HFilter;
|
const short *HFilter;
|
||||||
const short *VFilter;
|
const short *VFilter;
|
||||||
|
|
||||||
HFilter = bilinear_filters[xoffset];
|
HFilter = vp8_bilinear_filters[xoffset];
|
||||||
VFilter = bilinear_filters[yoffset];
|
VFilter = vp8_bilinear_filters[yoffset];
|
||||||
|
|
||||||
vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 4, 4);
|
vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 4, 4);
|
||||||
}
|
}
|
||||||
@@ -167,8 +68,8 @@ void vp8_bilinear_predict8x8_armv6
|
|||||||
const short *HFilter;
|
const short *HFilter;
|
||||||
const short *VFilter;
|
const short *VFilter;
|
||||||
|
|
||||||
HFilter = bilinear_filters[xoffset];
|
HFilter = vp8_bilinear_filters[xoffset];
|
||||||
VFilter = bilinear_filters[yoffset];
|
VFilter = vp8_bilinear_filters[yoffset];
|
||||||
|
|
||||||
vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 8);
|
vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 8);
|
||||||
}
|
}
|
||||||
@@ -186,8 +87,8 @@ void vp8_bilinear_predict8x4_armv6
|
|||||||
const short *HFilter;
|
const short *HFilter;
|
||||||
const short *VFilter;
|
const short *VFilter;
|
||||||
|
|
||||||
HFilter = bilinear_filters[xoffset];
|
HFilter = vp8_bilinear_filters[xoffset];
|
||||||
VFilter = bilinear_filters[yoffset];
|
VFilter = vp8_bilinear_filters[yoffset];
|
||||||
|
|
||||||
vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 4);
|
vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 4);
|
||||||
}
|
}
|
||||||
@@ -205,8 +106,8 @@ void vp8_bilinear_predict16x16_armv6
|
|||||||
const short *HFilter;
|
const short *HFilter;
|
||||||
const short *VFilter;
|
const short *VFilter;
|
||||||
|
|
||||||
HFilter = bilinear_filters[xoffset];
|
HFilter = vp8_bilinear_filters[xoffset];
|
||||||
VFilter = bilinear_filters[yoffset];
|
VFilter = vp8_bilinear_filters[yoffset];
|
||||||
|
|
||||||
vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 16, 16);
|
vp8_filter_block2d_bil_armv6(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 16, 16);
|
||||||
}
|
}
|
||||||
|
35
vp8/common/arm/bilinearfilter_arm.h
Normal file
35
vp8/common/arm/bilinearfilter_arm.h
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2011 The WebM project authors. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by a BSD-style license
|
||||||
|
* that can be found in the LICENSE file in the root of the source
|
||||||
|
* tree. An additional intellectual property rights grant can be found
|
||||||
|
* in the file PATENTS. All contributing project authors may
|
||||||
|
* be found in the AUTHORS file in the root of the source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef BILINEARFILTER_ARM_H
|
||||||
|
#define BILINEARFILTER_ARM_H
|
||||||
|
|
||||||
|
extern void vp8_filter_block2d_bil_first_pass_armv6
|
||||||
|
(
|
||||||
|
const unsigned char *src_ptr,
|
||||||
|
unsigned short *dst_ptr,
|
||||||
|
unsigned int src_pitch,
|
||||||
|
unsigned int height,
|
||||||
|
unsigned int width,
|
||||||
|
const short *vp8_filter
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void vp8_filter_block2d_bil_second_pass_armv6
|
||||||
|
(
|
||||||
|
const unsigned short *src_ptr,
|
||||||
|
unsigned char *dst_ptr,
|
||||||
|
int dst_pitch,
|
||||||
|
unsigned int height,
|
||||||
|
unsigned int width,
|
||||||
|
const short *vp8_filter
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif /* BILINEARFILTER_ARM_H */
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -11,26 +11,10 @@
|
|||||||
|
|
||||||
#include "vpx_ports/config.h"
|
#include "vpx_ports/config.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "subpixel.h"
|
#include "vp8/common/filter.h"
|
||||||
|
#include "vp8/common/subpixel.h"
|
||||||
#include "vpx_ports/mem.h"
|
#include "vpx_ports/mem.h"
|
||||||
|
|
||||||
#define BLOCK_HEIGHT_WIDTH 4
|
|
||||||
#define VP8_FILTER_WEIGHT 128
|
|
||||||
#define VP8_FILTER_SHIFT 7
|
|
||||||
|
|
||||||
DECLARE_ALIGNED(16, static const short, sub_pel_filters[8][6]) =
|
|
||||||
{
|
|
||||||
{ 0, 0, 128, 0, 0, 0 }, // note that 1/8 pel positions are just as per alpha -0.5 bicubic
|
|
||||||
{ 0, -6, 123, 12, -1, 0 },
|
|
||||||
{ 2, -11, 108, 36, -8, 1 }, // New 1/4 pel 6 tap filter
|
|
||||||
{ 0, -9, 93, 50, -6, 0 },
|
|
||||||
{ 3, -16, 77, 77, -16, 3 }, // New 1/2 pel 6 tap filter
|
|
||||||
{ 0, -6, 50, 93, -9, 0 },
|
|
||||||
{ 1, -8, 36, 108, -11, 2 }, // New 1/4 pel 6 tap filter
|
|
||||||
{ 0, -1, 12, 123, -6, 0 },
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
extern void vp8_filter_block2d_first_pass_armv6
|
extern void vp8_filter_block2d_first_pass_armv6
|
||||||
(
|
(
|
||||||
unsigned char *src_ptr,
|
unsigned char *src_ptr,
|
||||||
@@ -50,6 +34,15 @@ extern void vp8_filter_block2d_second_pass_armv6
|
|||||||
const short *vp8_filter
|
const short *vp8_filter
|
||||||
);
|
);
|
||||||
|
|
||||||
|
extern void vp8_filter4_block2d_second_pass_armv6
|
||||||
|
(
|
||||||
|
short *src_ptr,
|
||||||
|
unsigned char *output_ptr,
|
||||||
|
unsigned int output_pitch,
|
||||||
|
unsigned int cnt,
|
||||||
|
const short *vp8_filter
|
||||||
|
);
|
||||||
|
|
||||||
extern void vp8_filter_block2d_first_pass_only_armv6
|
extern void vp8_filter_block2d_first_pass_only_armv6
|
||||||
(
|
(
|
||||||
unsigned char *src_ptr,
|
unsigned char *src_ptr,
|
||||||
@@ -84,79 +77,42 @@ void vp8_sixtap_predict_armv6
|
|||||||
{
|
{
|
||||||
const short *HFilter;
|
const short *HFilter;
|
||||||
const short *VFilter;
|
const short *VFilter;
|
||||||
DECLARE_ALIGNED_ARRAY(4, short, FData, 12*4); // Temp data bufffer used in filtering
|
DECLARE_ALIGNED_ARRAY(4, short, FData, 12*4); /* Temp data buffer used in filtering */
|
||||||
|
|
||||||
|
|
||||||
HFilter = sub_pel_filters[xoffset]; // 6 tap
|
HFilter = vp8_sub_pel_filters[xoffset]; /* 6 tap */
|
||||||
VFilter = sub_pel_filters[yoffset]; // 6 tap
|
VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */
|
||||||
|
|
||||||
// Vfilter is null. First pass only
|
/* Vfilter is null. First pass only */
|
||||||
if (xoffset && !yoffset)
|
if (xoffset && !yoffset)
|
||||||
{
|
{
|
||||||
//vp8_filter_block2d_first_pass_armv6 ( src_ptr, FData+2, src_pixels_per_line, 4, 4, HFilter );
|
/*vp8_filter_block2d_first_pass_armv6 ( src_ptr, FData+2, src_pixels_per_line, 4, 4, HFilter );
|
||||||
//vp8_filter_block2d_second_pass_armv6 ( FData+2, dst_ptr, dst_pitch, 4, VFilter );
|
vp8_filter_block2d_second_pass_armv6 ( FData+2, dst_ptr, dst_pitch, 4, VFilter );*/
|
||||||
|
|
||||||
vp8_filter_block2d_first_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 4, dst_pitch, HFilter);
|
vp8_filter_block2d_first_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 4, dst_pitch, HFilter);
|
||||||
}
|
}
|
||||||
// Hfilter is null. Second pass only
|
/* Hfilter is null. Second pass only */
|
||||||
else if (!xoffset && yoffset)
|
else if (!xoffset && yoffset)
|
||||||
{
|
{
|
||||||
vp8_filter_block2d_second_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 4, dst_pitch, VFilter);
|
vp8_filter_block2d_second_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 4, dst_pitch, VFilter);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Vfilter is a 4 tap filter
|
/* Vfilter is a 4 tap filter */
|
||||||
if (yoffset & 0x1)
|
if (yoffset & 0x1)
|
||||||
|
{
|
||||||
vp8_filter_block2d_first_pass_armv6(src_ptr - src_pixels_per_line, FData + 1, src_pixels_per_line, 4, 7, HFilter);
|
vp8_filter_block2d_first_pass_armv6(src_ptr - src_pixels_per_line, FData + 1, src_pixels_per_line, 4, 7, HFilter);
|
||||||
// Vfilter is 6 tap filter
|
vp8_filter4_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 4, VFilter);
|
||||||
|
}
|
||||||
|
/* Vfilter is 6 tap filter */
|
||||||
else
|
else
|
||||||
|
{
|
||||||
vp8_filter_block2d_first_pass_armv6(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 4, 9, HFilter);
|
vp8_filter_block2d_first_pass_armv6(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 4, 9, HFilter);
|
||||||
|
vp8_filter_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 4, VFilter);
|
||||||
vp8_filter_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 4, VFilter);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
void vp8_sixtap_predict8x4_armv6
|
|
||||||
(
|
|
||||||
unsigned char *src_ptr,
|
|
||||||
int src_pixels_per_line,
|
|
||||||
int xoffset,
|
|
||||||
int yoffset,
|
|
||||||
unsigned char *dst_ptr,
|
|
||||||
int dst_pitch
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const short *HFilter;
|
|
||||||
const short *VFilter;
|
|
||||||
DECLARE_ALIGNED_ARRAY(4, short, FData, 16*8); // Temp data bufffer used in filtering
|
|
||||||
|
|
||||||
HFilter = sub_pel_filters[xoffset]; // 6 tap
|
|
||||||
VFilter = sub_pel_filters[yoffset]; // 6 tap
|
|
||||||
|
|
||||||
|
|
||||||
// if (xoffset && !yoffset)
|
|
||||||
// {
|
|
||||||
// vp8_filter_block2d_first_pass_only_armv6 ( src_ptr, dst_ptr, src_pixels_per_line, 8, dst_pitch, HFilter );
|
|
||||||
// }
|
|
||||||
// Hfilter is null. Second pass only
|
|
||||||
// else if (!xoffset && yoffset)
|
|
||||||
// {
|
|
||||||
// vp8_filter_block2d_second_pass_only_armv6 ( src_ptr, dst_ptr, src_pixels_per_line, 8, dst_pitch, VFilter );
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// if (yoffset & 0x1)
|
|
||||||
// vp8_filter_block2d_first_pass_armv6 ( src_ptr-src_pixels_per_line, FData+1, src_pixels_per_line, 8, 7, HFilter );
|
|
||||||
// else
|
|
||||||
|
|
||||||
vp8_filter_block2d_first_pass_armv6 ( src_ptr-(2*src_pixels_per_line), FData, src_pixels_per_line, 8, 9, HFilter );
|
|
||||||
|
|
||||||
vp8_filter_block2d_second_pass_armv6 ( FData+2, dst_ptr, dst_pitch, 4, 8, VFilter );
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void vp8_sixtap_predict8x8_armv6
|
void vp8_sixtap_predict8x8_armv6
|
||||||
(
|
(
|
||||||
unsigned char *src_ptr,
|
unsigned char *src_ptr,
|
||||||
@@ -169,16 +125,16 @@ void vp8_sixtap_predict8x8_armv6
|
|||||||
{
|
{
|
||||||
const short *HFilter;
|
const short *HFilter;
|
||||||
const short *VFilter;
|
const short *VFilter;
|
||||||
DECLARE_ALIGNED_ARRAY(4, short, FData, 16*8); // Temp data bufffer used in filtering
|
DECLARE_ALIGNED_ARRAY(4, short, FData, 16*8); /* Temp data buffer used in filtering */
|
||||||
|
|
||||||
HFilter = sub_pel_filters[xoffset]; // 6 tap
|
HFilter = vp8_sub_pel_filters[xoffset]; /* 6 tap */
|
||||||
VFilter = sub_pel_filters[yoffset]; // 6 tap
|
VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */
|
||||||
|
|
||||||
if (xoffset && !yoffset)
|
if (xoffset && !yoffset)
|
||||||
{
|
{
|
||||||
vp8_filter_block2d_first_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 8, dst_pitch, HFilter);
|
vp8_filter_block2d_first_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 8, dst_pitch, HFilter);
|
||||||
}
|
}
|
||||||
// Hfilter is null. Second pass only
|
/* Hfilter is null. Second pass only */
|
||||||
else if (!xoffset && yoffset)
|
else if (!xoffset && yoffset)
|
||||||
{
|
{
|
||||||
vp8_filter_block2d_second_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 8, dst_pitch, VFilter);
|
vp8_filter_block2d_second_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 8, dst_pitch, VFilter);
|
||||||
@@ -186,11 +142,15 @@ void vp8_sixtap_predict8x8_armv6
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yoffset & 0x1)
|
if (yoffset & 0x1)
|
||||||
|
{
|
||||||
vp8_filter_block2d_first_pass_armv6(src_ptr - src_pixels_per_line, FData + 1, src_pixels_per_line, 8, 11, HFilter);
|
vp8_filter_block2d_first_pass_armv6(src_ptr - src_pixels_per_line, FData + 1, src_pixels_per_line, 8, 11, HFilter);
|
||||||
|
vp8_filter4_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 8, VFilter);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
vp8_filter_block2d_first_pass_armv6(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 8, 13, HFilter);
|
vp8_filter_block2d_first_pass_armv6(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 8, 13, HFilter);
|
||||||
|
vp8_filter_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 8, VFilter);
|
||||||
vp8_filter_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 8, VFilter);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,16 +167,16 @@ void vp8_sixtap_predict16x16_armv6
|
|||||||
{
|
{
|
||||||
const short *HFilter;
|
const short *HFilter;
|
||||||
const short *VFilter;
|
const short *VFilter;
|
||||||
DECLARE_ALIGNED_ARRAY(4, short, FData, 24*16); // Temp data bufffer used in filtering
|
DECLARE_ALIGNED_ARRAY(4, short, FData, 24*16); /* Temp data buffer used in filtering */
|
||||||
|
|
||||||
HFilter = sub_pel_filters[xoffset]; // 6 tap
|
HFilter = vp8_sub_pel_filters[xoffset]; /* 6 tap */
|
||||||
VFilter = sub_pel_filters[yoffset]; // 6 tap
|
VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */
|
||||||
|
|
||||||
if (xoffset && !yoffset)
|
if (xoffset && !yoffset)
|
||||||
{
|
{
|
||||||
vp8_filter_block2d_first_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 16, dst_pitch, HFilter);
|
vp8_filter_block2d_first_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 16, dst_pitch, HFilter);
|
||||||
}
|
}
|
||||||
// Hfilter is null. Second pass only
|
/* Hfilter is null. Second pass only */
|
||||||
else if (!xoffset && yoffset)
|
else if (!xoffset && yoffset)
|
||||||
{
|
{
|
||||||
vp8_filter_block2d_second_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 16, dst_pitch, VFilter);
|
vp8_filter_block2d_second_pass_only_armv6(src_ptr, dst_ptr, src_pixels_per_line, 16, dst_pitch, VFilter);
|
||||||
@@ -224,11 +184,15 @@ void vp8_sixtap_predict16x16_armv6
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yoffset & 0x1)
|
if (yoffset & 0x1)
|
||||||
|
{
|
||||||
vp8_filter_block2d_first_pass_armv6(src_ptr - src_pixels_per_line, FData + 1, src_pixels_per_line, 16, 19, HFilter);
|
vp8_filter_block2d_first_pass_armv6(src_ptr - src_pixels_per_line, FData + 1, src_pixels_per_line, 16, 19, HFilter);
|
||||||
|
vp8_filter4_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 16, VFilter);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
vp8_filter_block2d_first_pass_armv6(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 16, 21, HFilter);
|
vp8_filter_block2d_first_pass_armv6(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 16, 21, HFilter);
|
||||||
|
vp8_filter_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 16, VFilter);
|
||||||
vp8_filter_block2d_second_pass_armv6(FData + 2, dst_ptr, dst_pitch, 16, VFilter);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -15,41 +15,44 @@
|
|||||||
#if HAVE_ARMV6
|
#if HAVE_ARMV6
|
||||||
extern prototype_idct(vp8_short_idct4x4llm_1_v6);
|
extern prototype_idct(vp8_short_idct4x4llm_1_v6);
|
||||||
extern prototype_idct(vp8_short_idct4x4llm_v6_dual);
|
extern prototype_idct(vp8_short_idct4x4llm_v6_dual);
|
||||||
extern prototype_idct_scalar(vp8_dc_only_idct_armv6);
|
extern prototype_idct_scalar_add(vp8_dc_only_idct_add_v6);
|
||||||
extern prototype_second_order(vp8_short_inv_walsh4x4_1_armv6);
|
extern prototype_second_order(vp8_short_inv_walsh4x4_1_v6);
|
||||||
extern prototype_second_order(vp8_short_inv_walsh4x4_armv6);
|
extern prototype_second_order(vp8_short_inv_walsh4x4_v6);
|
||||||
|
|
||||||
|
#if !CONFIG_RUNTIME_CPU_DETECT
|
||||||
#undef vp8_idct_idct1
|
#undef vp8_idct_idct1
|
||||||
#define vp8_idct_idct1 vp8_short_idct4x4llm_1_v6
|
#define vp8_idct_idct1 vp8_short_idct4x4llm_1_v6
|
||||||
|
|
||||||
#undef vp8_idct_idct16
|
#undef vp8_idct_idct16
|
||||||
#define vp8_idct_idct16 vp8_short_idct4x4llm_v6_dual
|
#define vp8_idct_idct16 vp8_short_idct4x4llm_v6_dual
|
||||||
|
|
||||||
#undef vp8_idct_idct1_scalar
|
#undef vp8_idct_idct1_scalar_add
|
||||||
#define vp8_idct_idct1_scalar vp8_dc_only_idct_armv6
|
#define vp8_idct_idct1_scalar_add vp8_dc_only_idct_add_v6
|
||||||
|
|
||||||
#undef vp8_idct_iwalsh1
|
#undef vp8_idct_iwalsh1
|
||||||
#define vp8_idct_iwalsh1 vp8_short_inv_walsh4x4_1_armv6
|
#define vp8_idct_iwalsh1 vp8_short_inv_walsh4x4_1_v6
|
||||||
|
|
||||||
#undef vp8_idct_iwalsh16
|
#undef vp8_idct_iwalsh16
|
||||||
#define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_armv6
|
#define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_v6
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAVE_ARMV7
|
#if HAVE_ARMV7
|
||||||
extern prototype_idct(vp8_short_idct4x4llm_1_neon);
|
extern prototype_idct(vp8_short_idct4x4llm_1_neon);
|
||||||
extern prototype_idct(vp8_short_idct4x4llm_neon);
|
extern prototype_idct(vp8_short_idct4x4llm_neon);
|
||||||
extern prototype_idct_scalar(vp8_dc_only_idct_neon);
|
extern prototype_idct_scalar_add(vp8_dc_only_idct_add_neon);
|
||||||
extern prototype_second_order(vp8_short_inv_walsh4x4_1_neon);
|
extern prototype_second_order(vp8_short_inv_walsh4x4_1_neon);
|
||||||
extern prototype_second_order(vp8_short_inv_walsh4x4_neon);
|
extern prototype_second_order(vp8_short_inv_walsh4x4_neon);
|
||||||
|
|
||||||
|
#if !CONFIG_RUNTIME_CPU_DETECT
|
||||||
#undef vp8_idct_idct1
|
#undef vp8_idct_idct1
|
||||||
#define vp8_idct_idct1 vp8_short_idct4x4llm_1_neon
|
#define vp8_idct_idct1 vp8_short_idct4x4llm_1_neon
|
||||||
|
|
||||||
#undef vp8_idct_idct16
|
#undef vp8_idct_idct16
|
||||||
#define vp8_idct_idct16 vp8_short_idct4x4llm_neon
|
#define vp8_idct_idct16 vp8_short_idct4x4llm_neon
|
||||||
|
|
||||||
#undef vp8_idct_idct1_scalar
|
#undef vp8_idct_idct1_scalar_add
|
||||||
#define vp8_idct_idct1_scalar vp8_dc_only_idct_neon
|
#define vp8_idct_idct1_scalar_add vp8_dc_only_idct_add_neon
|
||||||
|
|
||||||
#undef vp8_idct_iwalsh1
|
#undef vp8_idct_iwalsh1
|
||||||
#define vp8_idct_iwalsh1 vp8_short_inv_walsh4x4_1_neon
|
#define vp8_idct_iwalsh1 vp8_short_inv_walsh4x4_1_neon
|
||||||
@@ -57,5 +60,6 @@ extern prototype_second_order(vp8_short_inv_walsh4x4_neon);
|
|||||||
#undef vp8_idct_iwalsh16
|
#undef vp8_idct_iwalsh16
|
||||||
#define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_neon
|
#define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_neon
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -11,18 +11,8 @@
|
|||||||
|
|
||||||
#include "vpx_ports/config.h"
|
#include "vpx_ports/config.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "loopfilter.h"
|
#include "vp8/common/loopfilter.h"
|
||||||
#include "onyxc_int.h"
|
#include "vp8/common/onyxc_int.h"
|
||||||
|
|
||||||
typedef void loop_filter_uvfunction
|
|
||||||
(
|
|
||||||
unsigned char *u, // source pointer
|
|
||||||
int p, // pitch
|
|
||||||
const signed char *flimit,
|
|
||||||
const signed char *limit,
|
|
||||||
const signed char *thresh,
|
|
||||||
unsigned char *v
|
|
||||||
);
|
|
||||||
|
|
||||||
extern prototype_loopfilter(vp8_loop_filter_horizontal_edge_armv6);
|
extern prototype_loopfilter(vp8_loop_filter_horizontal_edge_armv6);
|
||||||
extern prototype_loopfilter(vp8_loop_filter_vertical_edge_armv6);
|
extern prototype_loopfilter(vp8_loop_filter_vertical_edge_armv6);
|
||||||
@@ -45,19 +35,19 @@ extern loop_filter_uvfunction vp8_mbloop_filter_vertical_edge_uv_neon;
|
|||||||
|
|
||||||
|
|
||||||
#if HAVE_ARMV6
|
#if HAVE_ARMV6
|
||||||
//ARMV6 loopfilter functions
|
/*ARMV6 loopfilter functions*/
|
||||||
// Horizontal MB filtering
|
/* Horizontal MB filtering */
|
||||||
void vp8_loop_filter_mbh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_mbh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
||||||
{
|
{
|
||||||
(void) simpler_lpf;
|
(void) simpler_lpf;
|
||||||
vp8_mbloop_filter_horizontal_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
|
vp8_mbloop_filter_horizontal_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
|
||||||
|
|
||||||
if (u_ptr)
|
if (u_ptr)
|
||||||
vp8_mbloop_filter_horizontal_edge_armv6(u_ptr, uv_stride, lfi->uvmbflim, lfi->uvlim, lfi->uvmbthr, 1);
|
vp8_mbloop_filter_horizontal_edge_armv6(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1);
|
||||||
|
|
||||||
if (v_ptr)
|
if (v_ptr)
|
||||||
vp8_mbloop_filter_horizontal_edge_armv6(v_ptr, uv_stride, lfi->uvmbflim, lfi->uvlim, lfi->uvmbthr, 1);
|
vp8_mbloop_filter_horizontal_edge_armv6(v_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp8_loop_filter_mbhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_mbhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
@@ -67,21 +57,21 @@ void vp8_loop_filter_mbhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsi
|
|||||||
(void) v_ptr;
|
(void) v_ptr;
|
||||||
(void) uv_stride;
|
(void) uv_stride;
|
||||||
(void) simpler_lpf;
|
(void) simpler_lpf;
|
||||||
vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
|
vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vertical MB Filtering
|
/* Vertical MB Filtering */
|
||||||
void vp8_loop_filter_mbv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_mbv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
||||||
{
|
{
|
||||||
(void) simpler_lpf;
|
(void) simpler_lpf;
|
||||||
vp8_mbloop_filter_vertical_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
|
vp8_mbloop_filter_vertical_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
|
||||||
|
|
||||||
if (u_ptr)
|
if (u_ptr)
|
||||||
vp8_mbloop_filter_vertical_edge_armv6(u_ptr, uv_stride, lfi->uvmbflim, lfi->uvlim, lfi->uvmbthr, 1);
|
vp8_mbloop_filter_vertical_edge_armv6(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1);
|
||||||
|
|
||||||
if (v_ptr)
|
if (v_ptr)
|
||||||
vp8_mbloop_filter_vertical_edge_armv6(v_ptr, uv_stride, lfi->uvmbflim, lfi->uvlim, lfi->uvmbthr, 1);
|
vp8_mbloop_filter_vertical_edge_armv6(v_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp8_loop_filter_mbvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_mbvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
@@ -91,10 +81,10 @@ void vp8_loop_filter_mbvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsi
|
|||||||
(void) v_ptr;
|
(void) v_ptr;
|
||||||
(void) uv_stride;
|
(void) uv_stride;
|
||||||
(void) simpler_lpf;
|
(void) simpler_lpf;
|
||||||
vp8_loop_filter_simple_vertical_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
|
vp8_loop_filter_simple_vertical_edge_armv6(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Horizontal B Filtering
|
/* Horizontal B Filtering */
|
||||||
void vp8_loop_filter_bh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_bh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
||||||
{
|
{
|
||||||
@@ -104,10 +94,10 @@ void vp8_loop_filter_bh_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsign
|
|||||||
vp8_loop_filter_horizontal_edge_armv6(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
|
vp8_loop_filter_horizontal_edge_armv6(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
|
||||||
|
|
||||||
if (u_ptr)
|
if (u_ptr)
|
||||||
vp8_loop_filter_horizontal_edge_armv6(u_ptr + 4 * uv_stride, uv_stride, lfi->uvflim, lfi->uvlim, lfi->uvthr, 1);
|
vp8_loop_filter_horizontal_edge_armv6(u_ptr + 4 * uv_stride, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1);
|
||||||
|
|
||||||
if (v_ptr)
|
if (v_ptr)
|
||||||
vp8_loop_filter_horizontal_edge_armv6(v_ptr + 4 * uv_stride, uv_stride, lfi->uvflim, lfi->uvlim, lfi->uvthr, 1);
|
vp8_loop_filter_horizontal_edge_armv6(v_ptr + 4 * uv_stride, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp8_loop_filter_bhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_bhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
@@ -122,7 +112,7 @@ void vp8_loop_filter_bhs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsig
|
|||||||
vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
|
vp8_loop_filter_simple_horizontal_edge_armv6(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vertical B Filtering
|
/* Vertical B Filtering */
|
||||||
void vp8_loop_filter_bv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_bv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
||||||
{
|
{
|
||||||
@@ -132,10 +122,10 @@ void vp8_loop_filter_bv_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsign
|
|||||||
vp8_loop_filter_vertical_edge_armv6(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
|
vp8_loop_filter_vertical_edge_armv6(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
|
||||||
|
|
||||||
if (u_ptr)
|
if (u_ptr)
|
||||||
vp8_loop_filter_vertical_edge_armv6(u_ptr + 4, uv_stride, lfi->uvflim, lfi->uvlim, lfi->uvthr, 1);
|
vp8_loop_filter_vertical_edge_armv6(u_ptr + 4, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1);
|
||||||
|
|
||||||
if (v_ptr)
|
if (v_ptr)
|
||||||
vp8_loop_filter_vertical_edge_armv6(v_ptr + 4, uv_stride, lfi->uvflim, lfi->uvlim, lfi->uvthr, 1);
|
vp8_loop_filter_vertical_edge_armv6(v_ptr + 4, uv_stride, lfi->flim, lfi->lim, lfi->thr, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp8_loop_filter_bvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_bvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
@@ -152,16 +142,16 @@ void vp8_loop_filter_bvs_armv6(unsigned char *y_ptr, unsigned char *u_ptr, unsig
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAVE_ARMV7
|
#if HAVE_ARMV7
|
||||||
// NEON loopfilter functions
|
/* NEON loopfilter functions */
|
||||||
// Horizontal MB filtering
|
/* Horizontal MB filtering */
|
||||||
void vp8_loop_filter_mbh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_mbh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
||||||
{
|
{
|
||||||
(void) simpler_lpf;
|
(void) simpler_lpf;
|
||||||
vp8_mbloop_filter_horizontal_edge_y_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
|
vp8_mbloop_filter_horizontal_edge_y_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
|
||||||
|
|
||||||
if (u_ptr)
|
if (u_ptr)
|
||||||
vp8_mbloop_filter_horizontal_edge_uv_neon(u_ptr, uv_stride, lfi->uvmbflim, lfi->uvlim, lfi->uvmbthr, v_ptr);
|
vp8_mbloop_filter_horizontal_edge_uv_neon(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, v_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp8_loop_filter_mbhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_mbhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
@@ -171,18 +161,18 @@ void vp8_loop_filter_mbhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsig
|
|||||||
(void) v_ptr;
|
(void) v_ptr;
|
||||||
(void) uv_stride;
|
(void) uv_stride;
|
||||||
(void) simpler_lpf;
|
(void) simpler_lpf;
|
||||||
vp8_loop_filter_simple_horizontal_edge_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
|
vp8_loop_filter_simple_horizontal_edge_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vertical MB Filtering
|
/* Vertical MB Filtering */
|
||||||
void vp8_loop_filter_mbv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_mbv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
||||||
{
|
{
|
||||||
(void) simpler_lpf;
|
(void) simpler_lpf;
|
||||||
vp8_mbloop_filter_vertical_edge_y_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
|
vp8_mbloop_filter_vertical_edge_y_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
|
||||||
|
|
||||||
if (u_ptr)
|
if (u_ptr)
|
||||||
vp8_mbloop_filter_vertical_edge_uv_neon(u_ptr, uv_stride, lfi->uvmbflim, lfi->uvlim, lfi->uvmbthr, v_ptr);
|
vp8_mbloop_filter_vertical_edge_uv_neon(u_ptr, uv_stride, lfi->mbflim, lfi->lim, lfi->thr, v_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp8_loop_filter_mbvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_mbvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
@@ -192,10 +182,10 @@ void vp8_loop_filter_mbvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsig
|
|||||||
(void) v_ptr;
|
(void) v_ptr;
|
||||||
(void) uv_stride;
|
(void) uv_stride;
|
||||||
(void) simpler_lpf;
|
(void) simpler_lpf;
|
||||||
vp8_loop_filter_simple_vertical_edge_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->mbthr, 2);
|
vp8_loop_filter_simple_vertical_edge_neon(y_ptr, y_stride, lfi->mbflim, lfi->lim, lfi->thr, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Horizontal B Filtering
|
/* Horizontal B Filtering */
|
||||||
void vp8_loop_filter_bh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_bh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
||||||
{
|
{
|
||||||
@@ -205,7 +195,7 @@ void vp8_loop_filter_bh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigne
|
|||||||
vp8_loop_filter_horizontal_edge_y_neon(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
|
vp8_loop_filter_horizontal_edge_y_neon(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
|
||||||
|
|
||||||
if (u_ptr)
|
if (u_ptr)
|
||||||
vp8_loop_filter_horizontal_edge_uv_neon(u_ptr + 4 * uv_stride, uv_stride, lfi->uvflim, lfi->uvlim, lfi->uvthr, v_ptr + 4 * uv_stride);
|
vp8_loop_filter_horizontal_edge_uv_neon(u_ptr + 4 * uv_stride, uv_stride, lfi->flim, lfi->lim, lfi->thr, v_ptr + 4 * uv_stride);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp8_loop_filter_bhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_bhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
@@ -220,7 +210,7 @@ void vp8_loop_filter_bhs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsign
|
|||||||
vp8_loop_filter_simple_horizontal_edge_neon(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
|
vp8_loop_filter_simple_horizontal_edge_neon(y_ptr + 12 * y_stride, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vertical B Filtering
|
/* Vertical B Filtering */
|
||||||
void vp8_loop_filter_bv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_bv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
int y_stride, int uv_stride, loop_filter_info *lfi, int simpler_lpf)
|
||||||
{
|
{
|
||||||
@@ -230,7 +220,7 @@ void vp8_loop_filter_bv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigne
|
|||||||
vp8_loop_filter_vertical_edge_y_neon(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
|
vp8_loop_filter_vertical_edge_y_neon(y_ptr + 12, y_stride, lfi->flim, lfi->lim, lfi->thr, 2);
|
||||||
|
|
||||||
if (u_ptr)
|
if (u_ptr)
|
||||||
vp8_loop_filter_vertical_edge_uv_neon(u_ptr + 4, uv_stride, lfi->uvflim, lfi->uvlim, lfi->uvthr, v_ptr + 4);
|
vp8_loop_filter_vertical_edge_uv_neon(u_ptr + 4, uv_stride, lfi->flim, lfi->lim, lfi->thr, v_ptr + 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp8_loop_filter_bvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
void vp8_loop_filter_bvs_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr,
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Use of this source code is governed by a BSD-style license
|
* Use of this source code is governed by a BSD-style license
|
||||||
* that can be found in the LICENSE file in the root of the source
|
* that can be found in the LICENSE file in the root of the source
|
||||||
@@ -22,6 +22,7 @@ extern prototype_loopfilter_block(vp8_loop_filter_bvs_armv6);
|
|||||||
extern prototype_loopfilter_block(vp8_loop_filter_mbhs_armv6);
|
extern prototype_loopfilter_block(vp8_loop_filter_mbhs_armv6);
|
||||||
extern prototype_loopfilter_block(vp8_loop_filter_bhs_armv6);
|
extern prototype_loopfilter_block(vp8_loop_filter_bhs_armv6);
|
||||||
|
|
||||||
|
#if !CONFIG_RUNTIME_CPU_DETECT
|
||||||
#undef vp8_lf_normal_mb_v
|
#undef vp8_lf_normal_mb_v
|
||||||
#define vp8_lf_normal_mb_v vp8_loop_filter_mbv_armv6
|
#define vp8_lf_normal_mb_v vp8_loop_filter_mbv_armv6
|
||||||
|
|
||||||
@@ -46,6 +47,7 @@ extern prototype_loopfilter_block(vp8_loop_filter_bhs_armv6);
|
|||||||
#undef vp8_lf_simple_b_h
|
#undef vp8_lf_simple_b_h
|
||||||
#define vp8_lf_simple_b_h vp8_loop_filter_bhs_armv6
|
#define vp8_lf_simple_b_h vp8_loop_filter_bhs_armv6
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if HAVE_ARMV7
|
#if HAVE_ARMV7
|
||||||
extern prototype_loopfilter_block(vp8_loop_filter_mbv_neon);
|
extern prototype_loopfilter_block(vp8_loop_filter_mbv_neon);
|
||||||
@@ -57,6 +59,7 @@ extern prototype_loopfilter_block(vp8_loop_filter_bvs_neon);
|
|||||||
extern prototype_loopfilter_block(vp8_loop_filter_mbhs_neon);
|
extern prototype_loopfilter_block(vp8_loop_filter_mbhs_neon);
|
||||||
extern prototype_loopfilter_block(vp8_loop_filter_bhs_neon);
|
extern prototype_loopfilter_block(vp8_loop_filter_bhs_neon);
|
||||||
|
|
||||||
|
#if !CONFIG_RUNTIME_CPU_DETECT
|
||||||
#undef vp8_lf_normal_mb_v
|
#undef vp8_lf_normal_mb_v
|
||||||
#define vp8_lf_normal_mb_v vp8_loop_filter_mbv_neon
|
#define vp8_lf_normal_mb_v vp8_loop_filter_mbv_neon
|
||||||
|
|
||||||
@@ -81,5 +84,6 @@ extern prototype_loopfilter_block(vp8_loop_filter_bhs_neon);
|
|||||||
#undef vp8_lf_simple_b_h
|
#undef vp8_lf_simple_b_h
|
||||||
#define vp8_lf_simple_b_h vp8_loop_filter_bhs_neon
|
#define vp8_lf_simple_b_h vp8_loop_filter_bhs_neon
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user